{"version":3,"file":"/js/app.js","mappings":"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G,IAAK,GAAI,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,IAAK,GAA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ACf9b,EAAUnpW,KAAKklX,GAEf,OADeF,EAAa/jV,EAAQ0jV,EAAWO,EAAUlgN,EAAOw1I,EACnD,EAGXma,EAAW,GAAQ,CAAEl2S,OAAQ,CAAEzhB,EADjBgoX,EAAa5gB,EAAK,qBAAsB7pD,EAAYwqE,EAAavqE,IAC9B30D,UAAS55N,MAAO,CAAE06N,MAAO06B,KAChF,IAAIt2P,EAAS4pS,EACb,GAAmB,MAAfy7C,EAAqB,CACrBjH,EAAUnpW,KAAK20T,GACf,MAAM5oC,EAAO,GAAoCqkF,GACjDrlV,EAAS,GAAU,CAAEtM,OAAQ,CAAEzhB,EAAG+tB,GAAU86N,UAAS55N,MAAO,CAAE8/P,SAClE,CAEA,OADAo9E,EAAUvkW,SAAQ/C,GAAKgkP,EAAQ8yF,8BAA8B92U,KACtDkpB,CACX,GC+GMo6V,GAAgB,CAClB/hB,GACA,GACAC,GACAC,GACA,GACAO,GACAK,GACAG,GACAyB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAc,GACAE,GACAI,GACAE,GACAC,GACAS,GACAc,GACAK,GACA,GACAE,GACA,GACA,GACAO,GACA,GACAI,GACA2B,GACAmC,GACAK,GACAE,GACAC,GACAC,GACAC,GACAC,GACAC,GACAe,GACAW,GACAC,GACAC,GACAO,GACAO,GACAI,GACAC,GACAE,GACAG,GACAC,GACAK,GACAC,GACA,GACAC,GACA,GACAE,GACA,GACAW,GACAE,GACAE,GACA,GACAE,GACAG,GACAG,GACAI,GACAG,GACAW,GACA,GACA,GACA,GACAC,GACAxK,GACAyK,GACAC,GACAC,GACAzY,GACA,GACA,GACA0Y,GACA,GACAC,GACAC,GACAC,GACAC,GACAM,GACAE,GACAM,GACA,GACAC,GACAE,GACAG,GACAI,GACAI,GACAG,GACAM,GACA,GACAM,GACAC,GACAW,GACA,GACA,GACAG,GACAC,GACAC,GACA,GACAM,GACAE,GACAC,GACAO,GACAC,GACAvd,GACA,GACAwd,GACAO,GACAK,GACAE,GACA,GACA7C,GACA8C,GACAC,GACAC,GACAjc,GACAyc,GACAY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","sources":["webpack:///./node_modules/@intlify/message-compiler/dist/message-compiler.esm-browser.js","webpack:///./node_modules/@mediapipe/selfie_segmentation/selfie_segmentation.js","webpack:///./node_modules/@sentry/hub/esm/flags.js","webpack:///./node_modules/@sentry/hub/esm/hub.js","webpack:///./node_modules/@sentry/hub/esm/scope.js","webpack:///./node_modules/@sentry/hub/esm/session.js","webpack:///./node_modules/@sentry/tracing/esm/constants.js","webpack:///./node_modules/@sentry/tracing/esm/flags.js","webpack:///./node_modules/@sentry/tracing/esm/errors.js","webpack:///./node_modules/@sentry/tracing/esm/hubextensions.js","webpack:///./node_modules/@sentry/tracing/esm/idletransaction.js","webpack:///./node_modules/@sentry/tracing/esm/span.js","webpack:///./node_modules/@sentry/tracing/esm/transaction.js","webpack:///./node_modules/@sentry/tracing/esm/utils.js","webpack:///./node_modules/@sentry/utils/esm/browser.js","webpack:///./node_modules/@sentry/utils/esm/flags.js","webpack:///./node_modules/@sentry/utils/esm/global.js","webpack:///./node_modules/@sentry/utils/esm/instrument.js","webpack:///./node_modules/@sentry/utils/esm/is.js","webpack:///./node_modules/@sentry/utils/esm/logger.js","webpack:///./node_modules/@sentry/utils/esm/misc.js","webpack:///./node_modules/@sentry/utils/esm/node.js","webpack:///./node_modules/@sentry/utils/esm/env.js","webpack:///./node_modules/@sentry/utils/esm/object.js","webpack:///./node_modules/@sentry/utils/esm/stacktrace.js","webpack:///./node_modules/@sentry/utils/esm/string.js","webpack:///./node_modules/@sentry/utils/esm/supports.js","webpack:///./node_modules/@sentry/utils/esm/syncpromise.js","webpack:///./node_modules/@sentry/utils/esm/time.js","webpack:///./node_modules/@vue/compiler-core/dist/compiler-core.esm-bundler.js","webpack:///./node_modules/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js","webpack:///./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","webpack:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","webpack:///./node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","webpack:///./node_modules/@vue/shared/dist/shared.esm-bundler.js","webpack:///./node_modules/@vuex-orm/core/dist/vuex-orm.esm.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/chart.js/dist/Chart.js","webpack:///./node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.js","webpack:///./node_modules/epic-spinners/dist/style/HalfCircleSpinner.css","webpack:///./node_modules/prismjs/themes/prism-tomorrow.css","webpack:///./resources/js/domains/employee/components/transitions/Fade/Fade.vue?cd2a","webpack:///./resources/js/domains/employee/pages/ShowLiveSettingsForProject/components/LiveView/LiveViewClient.vue?437e","webpack:///./resources/js/domains/employee/store/modules/liveConnection/components/EmployeeLiveOverlay.vue?9c31","webpack:///./resources/js/domains/employee/components/atoms/Button/Button.vue?18fe","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack:///./node_modules/debug/src/browser.js","webpack:///./node_modules/debug/src/common.js","webpack:///./node_modules/err-code/index.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/form-data/lib/browser.js","webpack:///./node_modules/get-browser-rtc/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/long/src/long.js","webpack:///./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack:///./node_modules/ms/index.js","webpack:///./node_modules/prismjs/components/prism-core.js","webpack:///./node_modules/prismjs/components/prism-json.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/queue-microtask/index.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/seedrandom/index.js","webpack:///./node_modules/seedrandom/lib/alea.js","webpack:///./node_modules/seedrandom/lib/tychei.js","webpack:///./node_modules/seedrandom/lib/xor128.js","webpack:///./node_modules/seedrandom/lib/xor4096.js","webpack:///./node_modules/seedrandom/lib/xorshift7.js","webpack:///./node_modules/seedrandom/lib/xorwow.js","webpack:///./node_modules/seedrandom/seedrandom.js","webpack:///./node_modules/showdown/dist/showdown.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./node_modules/tiny-emitter/index.js","webpack:///./node_modules/tiny-emitter/instance.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./resources/js/domains/core/components/organisms/CompanyOnboarding/CompanyOnboardingForm.vue","webpack:///./resources/js/domains/core/components/organisms/CompanyOnboarding/CompanyOnboardingForm.vue?8712","webpack:///./resources/js/app.js","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/DeathForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/DeathForm.vue?2e82","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/DisabilityForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/DisabilityForm.vue?5477","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/GoalsForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/GoalsForm.vue?0b55","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/IncomeForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/IncomeForm.vue?d384","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/RetirementForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/RetirementForm.vue?d6b5","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/RiskToleranceForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/RiskToleranceForm.vue?6210","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/SavingsForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/SavingsForm.vue?3d21","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/UnemploymentForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/UnemploymentForm.vue?f2ec","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/KnowledgeExperienceForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/KnowledgeExperienceForm.vue?50c7","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/SustainabilityForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/SustainabilityForm.vue?d226","webpack:///./resources/js/domains/core/constants/endpoints/endpoints.js","webpack:///./resources/js/domains/core/hooks/toast/useToast.js","webpack:///./resources/js/domains/core/models/customerDocument/hooks/createCustomerDocumentAction.js","webpack:///./resources/js/domains/core/models/customerDocument/hooks/getCustomerDocumentsByProjectIdAction.js","webpack:///./resources/js/domains/core/models/customerDocument/hooks/updateCustomerDocumentByIdAction.js","webpack:///./resources/js/domains/core/models/customerDocument/hooks/createCustomerDocumentWithExistingFileAction.js","webpack:///./resources/js/domains/core/models/customerDocument/services/getCustomerDocumentsByProjectId.js","webpack:///./resources/js/domains/core/models/customerDocument/services/updateCustomerDocumentById.js","webpack:///./resources/js/domains/core/models/customerDocument/services/createCustomerDocument.js","webpack:///./resources/js/domains/core/models/customerDocument/services/createCustomerDocumentWithExistingFile.js","webpack:///./resources/js/domains/core/models/customerProfile/hooks/getByProjectIdAction.js","webpack:///./resources/js/domains/core/models/customerProfile/hooks/patchCustomerProfileAction.js","webpack:///./resources/js/domains/core/models/customerProfile/services/getByProjectIdService.js","webpack:///./resources/js/domains/core/models/customerProfile/services/patchCustomerProfileService.js","webpack:///./resources/js/domains/core/models/email/hooks/getEmailByIdAction.js","webpack:///./resources/js/domains/core/models/email/services/getEmailByIdService.js","webpack:///./resources/js/domains/core/models/customerLevelProfile/services/patchCustomerLevelProfileService.js","webpack:///./resources/js/domains/core/models/customerLevelProfile/hooks/patchCustomerLevelProfileAction.js","webpack:///./resources/js/domains/core/models/emailTemplate/services/getEmailTemplatesService.js","webpack:///./resources/js/domains/core/models/emailTemplate/hooks/getEmailTemplatesAction.js","webpack:///./resources/js/domains/core/models/moneyProvider/services/getMoneyProvidersService.js","webpack:///./resources/js/domains/core/models/moneyProvider/hooks/getMoneyProvidersAction.js","webpack:///./resources/js/domains/core/models/risk/hooks/useGetIncapacitatedForWorkAndUnemployment.js","webpack:///./resources/js/domains/core/models/risk/hooks/useGetPension.js","webpack:///./resources/js/domains/core/models/userDocument/hooks/useGetUserDocumentByIdAction.js","webpack:///./resources/js/domains/core/models/userDocument/hooks/useUpdateUserDocumentByIdAction.js","webpack:///./resources/js/domains/core/models/userDocument/hooks/useGetUserDocumentCategoriesByProjectIdAction.js","webpack:///./resources/js/domains/core/models/companyOnboarding/services/companyOnboardingService.js","webpack:///./resources/js/domains/core/models/companyOnboarding/services/companyOnboardingStatusService.js","webpack:///./resources/js/domains/core/models/companyOnboarding/hooks/companyOnboardingAction.js","webpack:///./resources/js/domains/core/models/companyOnboarding/hooks/companyOnboardingStatusAction.js","webpack:///./resources/js/domains/core/models/webRTC/services/createRedisData.js","webpack:///./resources/js/domains/core/models/webRTC/hooks/useCreateRedisData.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/services/getInvoiceStandardRatesForOfficeService.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/services/getInvoiceStandardRatesForOfficeByProjectIdService.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/services/updateInvoiceStandardRatesForOfficeService.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/services/addInvoiceStandardRateForOfficeService.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/services/deleteInvoiceStandardRateForOfficeByIdService.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/hooks/useGetInvoiceStandardRatesForOfficeAction.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/hooks/useGetInvoiceStandardRatesForOfficeByProjectIdAction.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/hooks/useUpdateInvoiceStandardRatesForOfficeAction.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/hooks/useAddInvoiceStandardRateForOfficeAction.js","webpack:///./resources/js/domains/core/models/invoiceStandardRates/hooks/useDeleteInvoiceStandardRateForOfficeByIdAction.js","webpack:///./resources/js/domains/core/models/invoice/services/getInvoicesService.js","webpack:///./resources/js/domains/core/models/invoice/services/updateInvoicePaymentService.js","webpack:///./resources/js/domains/core/models/invoice/services/updateInvoiceNotesService.js","webpack:///./resources/js/domains/core/models/invoice/services/updateInvoiceAdvisorService.js","webpack:///./resources/js/domains/core/models/invoice/services/revokeCancelledService.js","webpack:///./resources/js/domains/core/models/invoice/services/cancelInvoiceService.js","webpack:///./resources/js/domains/core/models/invoice/services/sendReminderEmailService.js","webpack:///./resources/js/domains/core/models/invoice/hooks/getInvoicesAction.js","webpack:///./resources/js/domains/core/models/invoice/hooks/useUpdateInvoicePaymentAction.js","webpack:///./resources/js/domains/core/models/invoice/hooks/useUpdateInvoiceNotesAction.js","webpack:///./resources/js/domains/core/models/invoice/hooks/useUpdateInvoiceAdvisorAction.js","webpack:///./resources/js/domains/core/models/invoice/hooks/revokeCancelledAction.js","webpack:///./resources/js/domains/core/models/invoice/hooks/cancelInvoiceAction.js","webpack:///./resources/js/domains/core/models/invoice/hooks/sendReminderEmailAction.js","webpack:///./resources/js/domains/core/models/project/hooks/toggleProjectCustomerProfileAction.js","webpack:///./resources/js/domains/core/models/project/hooks/createProjectAction.js","webpack:///./resources/js/domains/core/models/project/services/toggleProjectCustomerProfileService.js","webpack:///./resources/js/domains/core/models/project/services/createProjectService.js","webpack:///./resources/js/domains/core/models/projects/services/getProjects.js","webpack:///./resources/js/domains/core/models/requestedDocument/hooks/sendRequestedDocumentAction.js","webpack:///./resources/js/domains/core/models/requestedDocument/services/sendRequestedDocumentService.js","webpack:///./resources/js/domains/core/models/risk/hooks/useGetLifeInsurance.js","webpack:///./resources/js/domains/core/models/risk/services/getLifeInsurance.js","webpack:///./resources/js/domains/core/models/risk/services/getIncapacitatedForWorkAndUnemployment.js","webpack:///./resources/js/domains/core/models/risk/services/getPension.js","webpack:///./resources/js/domains/core/models/task/hooks/getTasksByProjectIdAction.js","webpack:///./resources/js/domains/core/models/task/hooks/getTasksByUserIdAction.js","webpack:///./resources/js/domains/core/models/task/hooks/getTaskByIdAction.js","webpack:///./resources/js/domains/core/models/task/hooks/getOpenTasksAction.js","webpack:///./resources/js/domains/core/models/task/hooks/createTaskAction.js","webpack:///./resources/js/domains/core/models/task/hooks/updateTaskAction.js","webpack:///./resources/js/domains/core/models/task/hooks/deleteTaskAction.js","webpack:///./resources/js/domains/core/models/task/services/getTasksByProjectIdService.js","webpack:///./resources/js/domains/core/models/task/services/getTasksByUserIdService.js","webpack:///./resources/js/domains/core/models/task/services/getTaskByIdService.js","webpack:///./resources/js/domains/core/models/task/services/getOpenTasksService.js","webpack:///./resources/js/domains/core/models/task/services/createTaskService.js","webpack:///./resources/js/domains/core/models/task/services/updateTaskService.js","webpack:///./resources/js/domains/core/models/task/services/deleteTaskService.js","webpack:///./resources/js/domains/core/models/user/hooks/getUsersByProjectIdAction.js","webpack:///./resources/js/domains/core/models/user/hooks/getColleaguesByUsersIdAction.js","webpack:///./resources/js/domains/core/models/user/hooks/getOfficesByUserIdAction.js","webpack:///./resources/js/domains/core/models/user/hooks/getCurrentUserAction.js","webpack:///./resources/js/domains/core/models/user/hooks/updateCurrentUserAction.js","webpack:///./resources/js/domains/core/models/user/services/getUsersByProjectIdService.js","webpack:///./resources/js/domains/core/models/user/services/getColleaguesByUserIdService.js","webpack:///./resources/js/domains/core/models/user/services/getOfficesByUserIdService.js","webpack:///./resources/js/domains/core/models/user/services/getCurrentUserService.js","webpack:///./resources/js/domains/core/models/user/services/updateCurrentUserService.js","webpack:///./resources/js/domains/core/models/userDocument/hooks/useGetUserDocumentsByProjectIdAction.js","webpack:///./resources/js/domains/core/models/userDocument/services/getUserDocumentsByProjectId.js","webpack:///./resources/js/domains/core/models/userDocument/services/getUserDocumentById.js","webpack:///./resources/js/domains/core/models/userDocument/services/updateUserDocumentById.js","webpack:///./resources/js/domains/core/models/userDocument/services/getUserDocumentCategoriesByProjectId.js","webpack:///./resources/js/domains/employee/api/endpoints.js","webpack:///./resources/js/domains/employee/components/atoms/Icon/variants.js","webpack:///./resources/js/domains/employee/constants/applicationRequestDocumentStatus.js","webpack:///./resources/js/domains/employee/constants/customerDocumentStatus.js","webpack:///./resources/js/domains/employee/constants/durationInMilliseconds.js","webpack:///./resources/js/domains/employee/constants/events.js","webpack:///./resources/js/domains/employee/constants/gender.js","webpack:///./resources/js/domains/employee/constants/language.js","webpack:///./resources/js/domains/employee/constants/pusherEvents.js","webpack:///./resources/js/domains/employee/transformers/dxMessage/dxMessageTransformer.js","webpack:///./resources/js/domains/employee/constants/roles.js","webpack:///./resources/js/domains/employee/constants/routes.js","webpack:///./node_modules/prismjs/themes/prism-tomorrow.css?5068","webpack:///./resources/js/domains/employee/filters/codeToHighlightedHtml.js","webpack:///./resources/js/domains/employee/filters/convertBirthdateToAge.js","webpack:///./resources/js/domains/employee/filters/formatAddress.js","webpack:///./resources/js/domains/employee/filters/formatDateWithoutTime.js","webpack:///./resources/js/domains/employee/filters/formatDateWithTime.js","webpack:///./resources/js/domains/employee/filters/formatDateWithOnlyTime.js","webpack:///./resources/js/domains/employee/filters/formatDutchPhoneNumber.js","webpack:///./resources/js/domains/employee/filters/formatFileSize.js","webpack:///./resources/js/domains/employee/filters/markdownToHtml.js","webpack:///./resources/js/domains/employee/filters/nameToInitial.js","webpack:///./resources/js/domains/employee/hooks/form/useFormControl.js","webpack:///./resources/js/domains/employee/hooks/form/useCheckboxField.js","webpack:///./resources/js/domains/employee/hooks/form/useFileUploadField.js","webpack:///./resources/js/domains/employee/hooks/form/useForm.js","webpack:///./resources/js/domains/employee/hooks/form/useInputField.js","webpack:///./resources/js/domains/employee/hooks/form/useMultiselectField.js","webpack:///./resources/js/domains/employee/hooks/form/useSelectField.js","webpack:///./resources/js/domains/employee/hooks/useAsyncAction.js","webpack:///./resources/js/domains/employee/hooks/useEventBus.js","webpack:///./resources/js/domains/employee/hooks/useEventListener.js","webpack:///./resources/js/domains/employee/hooks/useLegacyRouter/routes.js","webpack:///./resources/js/domains/employee/hooks/useLegacyRouter/routeComponentMapping.js","webpack:///./resources/js/domains/employee/hooks/useLegacyRouter/useLegacyRouter.js","webpack:///./resources/js/domains/employee/hooks/useLegacyRouter/LegacyRouterView.vue","webpack:///./resources/js/domains/employee/hooks/useLegacyRouter/LegacyRouterView.vue?a2fe","webpack:///./resources/js/domains/employee/hooks/useState.js","webpack:///./resources/js/domains/employee/hooks/useTinyRouter/useTinyRouter.js","webpack:///./resources/js/domains/employee/hooks/useTinyRouter/TinyRouterView.vue","webpack:///./resources/js/domains/employee/hooks/useTinyRouter/TinyRouterView.vue?7c41","webpack:///./resources/js/domains/employee/hooks/useToggle.js","webpack:///./resources/js/domains/employee/models/Company.js","webpack:///./resources/js/domains/employee/constants/projectModules.js","webpack:///./resources/js/domains/employee/models/CompanyModule.js","webpack:///./resources/js/domains/employee/models/Customer.js","webpack:///./resources/js/domains/employee/models/CustomerAddress.js","webpack:///./resources/js/domains/employee/models/EmailTemplate.js","webpack:///./resources/js/domains/employee/models/EmailTemplateTranslation.js","webpack:///./resources/js/domains/employee/models/Employee.js","webpack:///./resources/js/domains/employee/models/EmployeeRole.js","webpack:///./resources/js/domains/employee/models/GithubRelease.js","webpack:///./resources/js/domains/employee/models/Language.js","webpack:///./resources/js/domains/employee/models/Project.js","webpack:///./resources/js/domains/employee/models/ProjectStatus.js","webpack:///./resources/js/domains/employee/models/ProjectStatusHistory.js","webpack:///./resources/js/domains/employee/models/Role.js","webpack:///./resources/js/domains/employee/models/Task.js","webpack:///./resources/js/domains/employee/models/Support.js","webpack:///./resources/js/domains/employee/pages/ShowMortgageApplicationRequestForProject/transformers/transformApiMortgageApplicationRequestDocument.js","webpack:///./resources/js/domains/employee/pages/ShowMortgageApplicationRequestForProject/transformers/transformApiMortgageApplicationRequest.js","webpack:///./resources/js/domains/employee/pages/ProcessCustomerDocumentForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowOverview/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceApplicationsForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceBasisCreditCapitalForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceBasisHomeForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceBasisIncomeForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceBasisInsurancesForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceBasisPensionForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceComparisonsForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceCustomerProfileForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceFinancePlanForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceCompareInterestRatesForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceMaxMortgageForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceProposalsForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceReportsForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceRisksAowwForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceRisksDeathForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowAdviceRisksPensionForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowCalendarForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowCustomerDocumentsForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowInsuranceApplicationRequestForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowLiveSettingsForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowMortgageApplicationRequestForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowOutgoingDocumentsForProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowProject/index.js","webpack:///./resources/js/domains/employee/pages/ShowProjectOverview/index.js","webpack:///./resources/js/domains/employee/pages/ManageSettings/index.js","webpack:///./resources/js/domains/employee/pages/DashboardSettings/index.js","webpack:///./resources/js/domains/employee/pages/CorporationSettings/index.js","webpack:///./resources/js/domains/employee/pages/InvoiceSettings/index.js","webpack:///./resources/js/domains/employee/pages/SettingsOfficeDetail/index.js","webpack:///./resources/js/domains/employee/pages/SettingsOffices/index.js","webpack:///./resources/js/domains/employee/pages/SettingsManagement/index.js","webpack:///./resources/js/domains/employee/pages/SettingStandardMail/index.js","webpack:///./resources/js/domains/employee/pages/SettingsCustomerDocument/index.js","webpack:///./resources/js/domains/employee/pages/SettingStandardTariff/index.js","webpack:///./resources/js/domains/employee/pages/SettingInvoiceStandardRate/index.js","webpack:///./resources/js/domains/employee/pages/SettingStandardDocument/index.js","webpack:///./resources/js/domains/employee/pages/SettingsRequiredDocument/index.js","webpack:///./resources/js/domains/employee/pages/SettingStandarRequirement/index.js","webpack:///./resources/js/domains/employee/pages/SettingsEntities/index.js","webpack:///./resources/js/domains/employee/pages/SettingsEvents/index.js","webpack:///./resources/js/domains/employee/pages/OnboardingStatus/index.js","webpack:///./resources/js/domains/employee/pages/SettingsProfile/index.js","webpack:///./resources/js/domains/employee/pages/AdviceIframe/index.js","webpack:///./resources/js/domains/employee/pages/ProcessCustomerDocumentSidebarIframe/index.js","webpack:///./resources/js/domains/employee/pages/TicketSystem/index.js","webpack:///./resources/js/domains/employee/router/index.js","webpack:///./resources/js/domains/employee/store/modules/advisor/state.js","webpack:///./resources/js/domains/employee/store/modules/advisor/mutations/saveAdvisor.js","webpack:///./resources/js/domains/employee/store/modules/advisor/hooks/useAdvisorStore.js","webpack:///./resources/js/domains/employee/store/modules/advisor/transformers/transformApiAdvisor.js","webpack:///./resources/js/domains/employee/store/modules/advisor/actions/useFetchAdvisor.js","webpack:///./resources/js/domains/employee/store/modules/advisor/index.js","webpack:///./resources/js/domains/employee/store/modules/auth/hooks/useAuthStore.js","webpack:///./resources/js/domains/employee/store/modules/auth/mutations/setEmployeeId.js","webpack:///./resources/js/domains/employee/store/modules/auth/state.js","webpack:///./resources/js/domains/employee/store/modules/auth/actions/useFetchEmployee.js","webpack:///./resources/js/domains/employee/store/modules/auth/actions/useLogout.js","webpack:///./resources/js/domains/employee/store/modules/auth/index.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/utils/activateWebcam.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/activateClientWebcam.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/activateEmployeeWebcam.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/addParticipant.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/utils/deactivateWebcam.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/deactivateClientWebcam.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/deactivateEmployeeWebcam.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/goLive.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/goOffline.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/removeParticipant.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/replaceParticipants.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/resetParticipants.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/switchToOffice.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/mutations/switchToRemote.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/state.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/hooks/useClientWebcam.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/hooks/useLiveConnection.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/components/EmployeeLiveOverlay.vue","webpack:///./resources/js/domains/employee/store/modules/liveConnection/events.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/components/EmployeeLiveOverlay.vue?6985","webpack:///./resources/js/domains/employee/store/modules/liveConnection/components/EmployeeLiveOverlay.vue?3867","webpack:///./resources/js/domains/employee/store/modules/liveConnection/index.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/services/getIceServers.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/backends/backend.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/util_base.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/environment.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/global_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/kernel_names.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/log.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/platforms/is_typed_array_browser.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/hash_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/profiler.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/tensor_format.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/tensor.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/types.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/tensor_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/engine.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/tape.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/device_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/flags.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/tensor_util_env.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/operation.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/complex.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor_ops_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/types.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/composite_array_buffer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/globals.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/router_registry.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/local_storage.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/model_management.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/platforms/platform_browser.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/platforms/platform_node.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/buffer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/cast.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/clone.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/print.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/base_side_effects.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/add.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/floorDiv.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/div.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/mul.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sqrt.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/square.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/zeros_like.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/gradients.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/scalar.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/serialization.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/fill.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/adagrad_optimizer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/pow.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sub.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/adam_optimizer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/abs.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/maximum.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/adamax_optimizer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/sgd_optimizer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/rmsprop_optimizer.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/register_optimizers.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/browser_files.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/progress.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/weights_loader.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/http.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/io/passthrough.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/mat_mul.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/one_hot.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/imag.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/neg.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/real.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/transpose.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/confusion_matrix.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/browser.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/slice_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/test_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/version.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/acos.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/acosh.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/add_n.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/all.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/any.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/arg_max.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/arg_min.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/asin.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/asinh.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/atan.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/atan2.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/atanh.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/reshape.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/concat.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sigmoid.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/slice.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tanh.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/basic_lstm_cell.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/batch_to_space_nd.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm4d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/bincount.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/bitwise_and.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_args.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_to.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ceil.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/clip_by_value.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/concat_1d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/concat_2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/concat_3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/concat_4d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv1d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_input.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_transpose.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_backprop_input.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_transpose.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/cos.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/cosh.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/cumprod.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/cumsum.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/dense_bincount.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/depth_to_space.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/diag.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/dilation2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/equal.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/where.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/div_no_nan.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/dot.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/einsum.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/elu.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ensure_shape.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/erf.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/axis_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/max.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/min.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sum.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/norm.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/euclidean_norm.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/exp.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/expand_dims.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/expm1.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tile.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/eye.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/floor.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/gather.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/greater.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/greater_equal.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/is_finite.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/is_inf.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/is_nan.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/leaky_relu.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/less.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/less_equal.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/linspace.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/log.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/log1p.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/softplus.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/log_sigmoid.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/log_softmax.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/log_sum_exp.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/logical_and.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/logical_not.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/logical_or.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/logical_xor.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/search_sorted.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/lower_bound.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/max_pool.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_with_argmax.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/mean.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/zeros.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ones.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/meshgrid.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/minimum.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/mirror_pad.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/mod.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/moments.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/multi_rnn_cell.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/multinomial.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/not_equal.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ones_like.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/outer_product.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/pad.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/pad1d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/pad2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/pad3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/pad4d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/space_to_batch_nd.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/pool.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/prelu.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/prod.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ragged_gather.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ragged_range.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ragged_tensor_to_tensor.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/rand.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/rand_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/random_gamma.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/random_normal.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/random_standard_normal.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform_int.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/range.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/reciprocal.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/relu.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/relu6.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/reverse.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/reverse_1d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/reverse_2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/reverse_3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/reverse_4d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/round.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/rsqrt.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/selu.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/separable_conv2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/setdiff1d_async.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sign.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sin.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sinh.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/slice1d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/slice2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/slice3d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/slice4d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/softmax.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/spectral/fft.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/spectral/ifft.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/spectral/irfft.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/split.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/spectral/rfft.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/squared_difference.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/squeeze.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/stack.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/step.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/strided_slice.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tan.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor1d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor4d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor5d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor6d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/tensor_scatter_update.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/topk.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/truncated_normal.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/unique.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/unsorted_segment_sum.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/unstack.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/upper_bound.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/variable.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/backends/where_impl.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/where_async.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/boolean_mask.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/moving_average.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse_to_dense.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse_to_dense_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/dropout.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/dropout_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/signal_ops_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/in_top_k.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_filter.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/fused_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/fused/conv2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_filter.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_input.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/fused/depthwise_conv2d.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/fused/mat_mul.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/signal/hamming_window.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/signal/hann_window.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/signal/frame.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/signal/stft.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/crop_and_resize.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/flip_left_right.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/grayscale_to_rgb.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/rgb_to_grayscale.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/rotate_with_offset.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/nonmax_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_async.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score_async.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded_async.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_bilinear.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_nearest_neighbor.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/threshold.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/image/transform.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/linalg/band_part.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/linalg/gram_schmidt.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/linalg/qr.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/loss_ops_utils.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/compute_weighted_loss.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/absolute_difference.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/cosine_distance.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/hinge_loss.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/huber_loss.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/log_loss.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/mean_squared_error.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/sigmoid_cross_entropy.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/losses/softmax_cross_entropy.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_fill_empty_rows.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_reshape.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_mean.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_sum.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/string/string_n_grams.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/string/static_regex_replace.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ops.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/string/string_split.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/string/string_to_hash_bucket_fast.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/train.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/browser_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/concat_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/ragged_to_dense_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/reduce_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/rotate_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/array_ops_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/selu_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/erf_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/backends/complex_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/backends/einsum_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/split_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_fill_empty_rows_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_reshape_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_reduction_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/ops/segment_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/backends/backend_util.js","webpack:///./node_modules/@tensorflow/tfjs-core/dist/index.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/canvas_util.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/tex_util.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/glsl_version.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler_util.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_math.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_float_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_float_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_matrix_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_matrix_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_util.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/cpu_util.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Abs.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Complex.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/zeros_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Identity.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Real.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cast.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_utils.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Add.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BitwiseAnd.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_utils.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Ceil.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Equal.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Exp.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Expm1.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Floor.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd_Impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Greater.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GreaterEqual.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Less.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LessEqual.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Maximum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Minimum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multiply.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Neg.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NotEqual.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prod.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedGather_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedRange_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedTensorToTensor_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Rsqrt.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Scatter_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sigmoid.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Slice.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentReduction_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sqrt.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StaticRegexReplace.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringNGrams_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringSplit_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringToHashBucketFast_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sub.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/shared.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/packing_util.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/pack_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/reshape_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/texture_manager.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/unpack_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/base.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Identity.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Complex.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LeakyRelu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Prelu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/kernel_funcs_utils.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/mulmat_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_complex_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multiply.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reshape.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reshape.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/mean_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/reduce_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reduce.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/transpose_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/transpose_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/_FusedMatMul.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Abs.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Acos.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Acosh.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Add.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/addn_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/addn_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AddN.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/All.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Any.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/argminmax_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/argminmax_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/arg_min_max.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMax.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMin.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Asin.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Asinh.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atan.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atan2.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atanh.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/pool_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3D.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/avg_pool_backprop_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3DGrad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPoolGrad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/batchnorm_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/batchnorm_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchNorm.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/slice_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/slice_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Slice.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchToSpaceND.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Bincount.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BitwiseAnd.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BroadcastArgs.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NotEqual.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Real.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cast.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/int.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Ceil.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/clip_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/clip_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ClipByValue.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/complex_abs_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ComplexAbs.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/concat_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/concat_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Imag.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/im2col_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropFilter.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropInput.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3D.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3DBackpropFilterV2.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3DBackpropInputV2.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cos.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cosh.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/crop_and_resize_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/CropAndResize.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/cum_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cum_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumprod.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumsum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DenseBincount.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/depth_to_space_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthToSpace.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_gpu_depthwise.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_packed_gpu_depthwise.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNative.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu_depthwise.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropInput.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/diag_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Diag.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/dilation_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Dilation2D.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Einsum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Elu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/EluGrad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Equal.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Erf.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Exp.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ExpandDims.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Expm1.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/fft_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/fill_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Fill.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/flip_left_right_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FlipLeftRight.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Floor.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FloorDiv.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels_utils/from_pixels_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels_utils/from_pixels_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedConv2D.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedDepthwiseConv2D.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_nd_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherNd.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherV2.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Greater.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GreaterEqual.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IFFT.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsFinite.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsInf.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsNaN.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Less.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LessEqual.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LinSpace.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Log.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Log1p.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalAnd.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalNot.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalOr.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRN.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_grad_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRNGrad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Maximum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3D.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/max_pool_backprop_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3DGrad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolGrad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean_impl.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Min.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Minimum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/mirror_pad_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/mirror_pad_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MirrorPad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mod.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/multinomial_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RealDiv.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sub.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softmax.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multinomial.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Neg.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV3.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV4.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV5.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/onehot_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OneHot.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ZerosLike.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OnesLike.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Pack.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/pad_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/pad_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/PadV2.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Pow.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Prod.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RaggedGather.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RaggedRange.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RaggedTensorToTensor.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Range.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reciprocal.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Relu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Relu6.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinear.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_backprop_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinearGrad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighbor.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_backprop_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighborGrad.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/reverse_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/reverse_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reverse.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/rotate_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RotateWithOffset.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Round.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Rsqrt.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/scatter_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/scatter_packed_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ScatterNd.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/search_sorted_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SearchSorted.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/select_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Select.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Selu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sigmoid.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sign.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sin.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sinh.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softplus.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SpaceToBatchND.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseFillEmptyRows.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseReshape.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseSegmentMean.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseSegmentSum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseToDense.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SplitV.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sqrt.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Square.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SquaredDifference.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StaticRegexReplace.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Step.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/strided_slice_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StridedSlice.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringNGrams.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringSplit.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringToHashBucketFast.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tan.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tanh.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TensorScatterUpdate.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/tile_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/top_k_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/transform_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transform.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unique.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unpack.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/segment_gpu.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/UnsortedSegmentSum.js","webpack:///./node_modules/@tensorflow/tfjs-backend-webgl/dist/register_all_kernels.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/data/compiled_api.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/flags.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/register.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/utils.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/arithmetic.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/basic_math.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/control.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/convolution.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/creation.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/dynamic.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/evaluation.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/graph.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/hash_table.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/image.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/logical.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/matrices.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/normalization.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/reduction.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/slice_join.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/sparse.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/spectral.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/string.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/transformation.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/operation_mapper.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/node_value_impl.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_utils.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_array.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_list.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/control_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/convolution_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/dynamic_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/hash_table.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/operation_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/arithmetic_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/basic_math_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/creation_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/evaluation_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/image_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/graph_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/logical_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/matrices_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/normalization_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/ragged_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/reduction_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/slice_join_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/sparse_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/spectral_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/string_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/transformation_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/hash_table_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/execution_context.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/model_analysis.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/graph_executor.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/resource_manager.js","webpack:///./node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.js","webpack:///./node_modules/@tensorflow-models/body-segmentation/dist/body-segmentation.esm.js","webpack:///./resources/js/domains/employee/store/modules/liveConnection/services/pusherService.js","webpack:///./resources/js/domains/employee/store/modules/messaging/state.js","webpack:///./resources/js/domains/employee/store/modules/messaging/mutations/clearEmail.js","webpack:///./resources/js/domains/employee/store/modules/messaging/mutations/setActiveTemplateId.js","webpack:///./resources/js/domains/employee/store/modules/messaging/mutations/updateEmail.js","webpack:///./resources/js/domains/employee/store/modules/messaging/actions/useDeleteEmail.js","webpack:///./resources/js/domains/employee/store/modules/messaging/actions/useFetchEmails.js","webpack:///./resources/js/domains/employee/store/modules/messaging/actions/useSendEmail.js","webpack:///./resources/js/domains/employee/store/modules/messaging/actions/useSendEmailWithTemplate.js","webpack:///./resources/js/domains/employee/store/modules/messaging/actions/useUpdateEmail.js","webpack:///./resources/js/domains/employee/store/modules/messaging/hooks/useMessagingStore.js","webpack:///./resources/js/domains/employee/store/modules/messaging/index.js","webpack:///./resources/js/domains/employee/store/modules/modal/hooks/useModal.js","webpack:///./resources/js/domains/employee/store/modules/modal/mutations/close.js","webpack:///./resources/js/domains/employee/store/modules/modal/mutations/open.js","webpack:///./resources/js/domains/employee/store/modules/modal/mutations/setProps.js","webpack:///./resources/js/domains/employee/store/modules/modal/state.js","webpack:///./resources/js/domains/employee/store/modules/modal/components/ModalView.vue","webpack:///./resources/js/domains/employee/store/modules/modal/components/ModalView.vue?b640","webpack:///./resources/js/domains/employee/store/modules/modal/index.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useFetchProject.js","webpack:///./resources/js/domains/employee/store/modules/project/hooks/useProjectStore.js","webpack:///./resources/js/domains/employee/store/modules/project/state.js","webpack:///./resources/js/domains/employee/store/modules/project/mutations/setActiveProjectId.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useChangeProjectLanguage.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useDeleteProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useFetchMortgageAdvisorsForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useFetchBackOfficeEmployeesForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useFetchEmployeesForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useFetchStatusesForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useSendInvitationForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useSendInvoiceForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useTransferMortgageAdvisorForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useTransferBackOfficeEmployeeForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/actions/useUpdateStatusForProject.js","webpack:///./resources/js/domains/employee/store/modules/project/index.js","webpack:///./resources/js/domains/employee/store/modules/releaseInformation/hooks/useReleaseInformationStore.js","webpack:///./resources/js/domains/employee/store/modules/releaseInformation/actions/useFetchReleaseInformation.js","webpack:///./resources/js/domains/employee/store/modules/releaseInformation/index.js","webpack:///./resources/js/domains/employee/store/modules/rightBar/mutations/close.js","webpack:///./resources/js/domains/employee/store/modules/rightBar/mutations/open.js","webpack:///./resources/js/domains/employee/store/modules/rightBar/mutations/setProps.js","webpack:///./resources/js/domains/employee/store/modules/rightBar/state.js","webpack:///./resources/js/domains/employee/store/modules/rightBar/hooks/useRightBar.js","webpack:///./resources/js/domains/employee/store/modules/rightBar/components/RightBarView.vue","webpack:///./resources/js/domains/employee/store/modules/rightBar/components/RightBarView.vue?c89b","webpack:///./resources/js/domains/employee/store/modules/rightBar/index.js","webpack:///./resources/js/domains/employee/store/modules/sidebar/constants.js","webpack:///./resources/js/domains/employee/store/modules/sidebar/state.js","webpack:///./resources/js/domains/employee/store/modules/sidebar/mutations/close.js","webpack:///./resources/js/domains/employee/store/modules/sidebar/mutations/open.js","webpack:///./resources/js/domains/employee/store/modules/sidebar/mutations/toggle.js","webpack:///./resources/js/domains/employee/store/modules/sidebar/hooks/useSidebar.js","webpack:///./resources/js/domains/employee/store/modules/sidebar/index.js","webpack:///./resources/js/domains/employee/store/modules/support/actions/useFetchSupport.js","webpack:///./resources/js/domains/employee/store/modules/support/hooks/useSupportStore.js","webpack:///./resources/js/domains/employee/store/modules/support/index.js","webpack:///./resources/js/domains/employee/store/modules/taskManager/actions/useFetchTasks.js","webpack:///./resources/js/domains/employee/store/modules/taskManager/index.js","webpack:///./resources/js/domains/employee/transformers/applicationRequestDocument/applicationRequestDocumentTransformer.js","webpack:///./resources/js/domains/employee/transformers/customerDocument/customerDocumentTransformer.js","webpack:///./resources/js/domains/employee/transformers/transformApiCompany.js","webpack:///./resources/js/domains/employee/transformers/transformApiCompanyModule.js","webpack:///./resources/js/domains/employee/transformers/transformApiCustomerAddress.js","webpack:///./resources/js/domains/employee/transformers/transformApiCustomer.js","webpack:///./resources/js/domains/employee/transformers/transformApiEmailTemplateTranslation.js","webpack:///./resources/js/domains/employee/transformers/transformApiEmailTemplate.js","webpack:///./resources/js/domains/employee/transformers/transformApiEmployee.js","webpack:///./resources/js/domains/employee/transformers/transformApiGithubRelease.js","webpack:///./resources/js/domains/employee/transformers/transformApiProject.js","webpack:///./resources/js/domains/employee/constants/projectStatus.js","webpack:///./resources/js/domains/employee/transformers/transformApiProjectStatus.js","webpack:///./resources/js/domains/employee/transformers/transformApiProjectStatusHistory.js","webpack:///./resources/js/domains/employee/transformers/transformApiRole.js","webpack:///./resources/js/domains/employee/transformers/transformApiSupport.js","webpack:///./resources/js/domains/employee/transformers/note/noteTransformer.js","webpack:///./node_modules/fuse.js/dist/fuse.esm.js","webpack:///./resources/js/domains/employee/utils/fuzzySearch.js","webpack:///./resources/js/domains/employee/utils/omit.js","webpack:///./resources/js/domains/employee/utils/reduceParamsToApiUrl.js","webpack:///./resources/js/domains/employee/utils/unique.js","webpack:///./resources/js/domains/employee/utils/pauseEvent.js","webpack:///./resources/js/domains/employee/utils/reduceParamsToUrl.js","webpack:///./resources/js/domains/employee/utils/wait.js","webpack:///./resources/js/helpers/eventBus/eventBus.js","webpack:///./resources/js/helpers/debounce/debounce.js","webpack:///./resources/js/helpers/ucFirst/ucFirst.js","webpack:///./resources/js/i18n/helpers/namespacedI18n.js","webpack:///./resources/js/i18n/hooks/useNamespacedI18n.js","webpack:///./resources/js/i18n/dateTimeFormats/index.js","webpack:///./resources/js/domains/employee/i18n/en/cards/index.js","webpack:///./resources/js/domains/employee/i18n/en/constants/index.js","webpack:///./resources/js/domains/employee/i18n/en/layouts/index.js","webpack:///./resources/js/domains/employee/i18n/en/modals/delete_project.js","webpack:///./resources/js/domains/employee/i18n/en/modals/new_invoice_for_project.js","webpack:///./resources/js/domains/employee/i18n/en/modals/send_document_feedback_email_for_project.js","webpack:///./resources/js/domains/employee/i18n/en/modals/show_email.js","webpack:///./resources/js/domains/employee/i18n/en/modals/show_support.js","webpack:///./resources/js/domains/employee/i18n/en/modals/upload_file_for_customer_document.js","webpack:///./resources/js/domains/employee/i18n/en/modals/index.js","webpack:///./resources/js/domains/employee/i18n/en/models/email_message.js","webpack:///./resources/js/domains/employee/i18n/en/models/index.js","webpack:///./resources/js/domains/employee/i18n/en/molecules/index.js","webpack:///./resources/js/domains/employee/i18n/en/organisms/index.js","webpack:///./resources/js/domains/employee/i18n/en/pages/index.js","webpack:///./resources/js/domains/employee/i18n/en/sidebars/index.js","webpack:///./resources/js/domains/employee/i18n/nl/cards/index.js","webpack:///./resources/js/domains/employee/i18n/nl/constants/index.js","webpack:///./resources/js/domains/employee/i18n/nl/layouts/index.js","webpack:///./resources/js/domains/employee/i18n/nl/modals/delete_project.js","webpack:///./resources/js/domains/employee/i18n/nl/modals/new_invoice_for_project.js","webpack:///./resources/js/domains/employee/i18n/nl/modals/send_document_feedback_email_for_project.js","webpack:///./resources/js/domains/employee/i18n/nl/modals/show_email.js","webpack:///./resources/js/domains/employee/i18n/nl/modals/show_support.js","webpack:///./resources/js/domains/employee/i18n/nl/modals/upload_file_for_customer_document.js","webpack:///./resources/js/domains/employee/i18n/nl/modals/index.js","webpack:///./resources/js/domains/employee/i18n/nl/models/email_message.js","webpack:///./resources/js/domains/employee/i18n/nl/models/index.js","webpack:///./resources/js/domains/employee/i18n/nl/molecules/index.js","webpack:///./resources/js/domains/employee/i18n/nl/organisms/index.js","webpack:///./resources/js/domains/employee/i18n/nl/pages/index.js","webpack:///./resources/js/domains/employee/i18n/nl/sidebars/index.js","webpack:///./resources/js/domains/employee/i18n/index.js","webpack:///./resources/js/i18n/index.js","webpack:///./resources/js/plugins/axios.js","webpack:///./node_modules/@popperjs/core/lib/enums.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/math.js","webpack:///./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/within.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack:///./node_modules/@popperjs/core/lib/createPopper.js","webpack:///./node_modules/@popperjs/core/lib/utils/debounce.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack:///./node_modules/@popperjs/core/lib/popper.js","webpack:///./node_modules/@popperjs/core/lib/popper-lite.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack:///./resources/js/plugins/laravel-echo/laravel-echo.js","webpack:///./resources/js/plugins/laravel-echo/privateChannels.js","webpack:///./resources/js/plugins/laravel-echo/events.js","webpack:///./resources/js/plugins/lodash.js","webpack:///./resources/js/plugins/pusher-js.js","webpack:///./node_modules/@sentry/core/esm/version.js","webpack:///./node_modules/@sentry/core/esm/flags.js","webpack:///./node_modules/@sentry/core/esm/integrations/inboundfilters.js","webpack:///./node_modules/@sentry/core/esm/integrations/functiontostring.js","webpack:///./node_modules/@sentry/utils/esm/polyfill.js","webpack:///./node_modules/@sentry/utils/esm/error.js","webpack:///./node_modules/@sentry/utils/esm/dsn.js","webpack:///./node_modules/@sentry/utils/esm/normalize.js","webpack:///./node_modules/@sentry/utils/esm/memo.js","webpack:///./node_modules/@sentry/core/esm/integration.js","webpack:///./node_modules/@sentry/core/esm/baseclient.js","webpack:///./node_modules/@sentry/core/esm/api.js","webpack:///./node_modules/@sentry/utils/esm/envelope.js","webpack:///./node_modules/@sentry/core/esm/request.js","webpack:///./node_modules/@sentry/core/esm/transports/noop.js","webpack:///./node_modules/@sentry/types/esm/severity.js","webpack:///./node_modules/@sentry/core/esm/basebackend.js","webpack:///./node_modules/@sentry/browser/esm/stack-parsers.js","webpack:///./node_modules/@sentry/browser/esm/eventbuilder.js","webpack:///./node_modules/@sentry/utils/esm/promisebuffer.js","webpack:///./node_modules/@sentry/utils/esm/ratelimit.js","webpack:///./node_modules/@sentry/utils/esm/status.js","webpack:///./node_modules/@sentry/core/esm/transports/base.js","webpack:///./node_modules/@sentry/browser/esm/flags.js","webpack:///./node_modules/@sentry/browser/esm/transports/utils.js","webpack:///./node_modules/@sentry/utils/esm/async.js","webpack:///./node_modules/@sentry/browser/esm/transports/new-fetch.js","webpack:///./node_modules/@sentry/browser/esm/transports/base.js","webpack:///./node_modules/@sentry/utils/esm/clientreport.js","webpack:///./node_modules/@sentry/browser/esm/transports/fetch.js","webpack:///./node_modules/@sentry/browser/esm/transports/new-xhr.js","webpack:///./node_modules/@sentry/browser/esm/transports/xhr.js","webpack:///./node_modules/@sentry/browser/esm/backend.js","webpack:///./node_modules/@sentry/minimal/esm/index.js","webpack:///./node_modules/@sentry/browser/esm/helpers.js","webpack:///./node_modules/@sentry/utils/esm/enums.js","webpack:///./node_modules/@sentry/utils/esm/severity.js","webpack:///./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js","webpack:///./node_modules/@sentry/browser/esm/client.js","webpack:///./node_modules/@sentry/browser/esm/integrations/trycatch.js","webpack:///./node_modules/@sentry/browser/esm/integrations/globalhandlers.js","webpack:///./node_modules/@sentry/browser/esm/integrations/linkederrors.js","webpack:///./node_modules/@sentry/browser/esm/integrations/dedupe.js","webpack:///./node_modules/@sentry/browser/esm/integrations/useragent.js","webpack:///./node_modules/@sentry/browser/esm/sdk.js","webpack:///./node_modules/@sentry/core/esm/sdk.js","webpack:///./node_modules/@sentry/vue/esm/constants.js","webpack:///./node_modules/@sentry/vue/esm/components.js","webpack:///./node_modules/@sentry/vue/esm/errorhandler.js","webpack:///./node_modules/@sentry/vue/esm/flags.js","webpack:///./node_modules/@sentry/vue/esm/tracing.js","webpack:///./node_modules/@sentry/vue/esm/sdk.js","webpack:///./node_modules/@sentry/vue/esm/router.js","webpack:///./node_modules/@sentry/browser/esm/version.js","webpack:///./node_modules/@sentry/browser/esm/index.js","webpack:///./node_modules/@sentry/utils/esm/tracing.js","webpack:///./node_modules/@sentry/tracing/esm/browser/backgroundtab.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/bindReporter.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/initMetric.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/generateUniqueID.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/observe.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/onHidden.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/getVisibilityWatcher.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/getLCP.js","webpack:///./node_modules/@sentry/tracing/esm/browser/metrics.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/getCLS.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/getFID.js","webpack:///./node_modules/@sentry/tracing/esm/browser/request.js","webpack:///./node_modules/@sentry/tracing/esm/browser/router.js","webpack:///./node_modules/@sentry/tracing/esm/browser/browsertracing.js","webpack:///./node_modules/@sentry/tracing/esm/index.js","webpack:///./resources/js/plugins/sentry.js","webpack:///./resources/js/store/constants/actions.js","webpack:///./resources/js/store/constants/mutations.js","webpack:///./resources/js/domains/employee/store/index.js","webpack:///./resources/js/store/modules/emails.js","webpack:///./resources/js/store/modules/projects.js","webpack:///./resources/js/database/database.js","webpack:///./resources/js/store/index.js","webpack:///./resources/js/store/modules/pdf.js","webpack:///./resources/js/domains/core/models/address/services/getAddressService.js","webpack:///./resources/js/domains/core/models/address/hooks/getAddressAction.js","webpack:///./resources/js/domains/core/components/organisms/AutofillAddress/AutofillAddress.vue?8537","webpack:///./resources/js/domains/core/components/organisms/AutofillAddress/AutofillAddress.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/PoliticallyExposedPersonForm.vue","webpack:///./resources/js/domains/core/components/organisms/CustomerProfileForms/PoliticallyExposedPersonForm.vue?539c","webpack:///./resources/js/domains/core/components/organisms/ShowGraphForRisk/Graph.vue","webpack:///./resources/js/domains/core/components/organisms/ShowGraphForRisk/Graph.vue?409b","webpack:///./resources/js/domains/employee/components/atoms/Button/Button.vue","webpack:///./resources/js/domains/employee/components/atoms/Button/Button.vue?bde5","webpack:///./resources/js/domains/employee/components/atoms/Button/Button.vue?673b","webpack:///./resources/js/domains/employee/components/atoms/Form/FormNumberInput.vue","webpack:///./resources/js/domains/employee/components/atoms/Form/FormNumberInput.vue?d217","webpack:///./resources/js/domains/employee/components/atoms/Icon/Icon.vue","webpack:///./resources/js/domains/employee/components/atoms/Icon/Icon.vue?6a09","webpack:///./resources/js/domains/employee/components/transitions/Fade/Fade.vue","webpack:///./resources/js/domains/employee/components/transitions/Fade/Fade.vue?1421","webpack:///./resources/js/domains/employee/components/transitions/Fade/Fade.vue?d250","webpack:///./resources/js/domains/employee/pages/ShowLiveSettingsForProject/components/LiveView/LiveViewClient.vue","webpack:///./resources/js/domains/employee/pages/ShowLiveSettingsForProject/components/LiveView/LiveViewClient.vue?3271","webpack:///./resources/js/domains/employee/pages/ShowLiveSettingsForProject/components/LiveView/LiveViewClient.vue?1378","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/vue-loader/dist/exportHelper.js","webpack:///./node_modules/vuex-composition-helpers/dist/util.js","webpack:///./node_modules/vuex-composition-helpers/dist/global.js","webpack:///./node_modules/vuex-composition-helpers/dist/namespaced.js","webpack:///./node_modules/@vue/devtools-api/lib/esm/env.js","webpack:///./node_modules/@vue/devtools-api/lib/esm/time.js","webpack:///./node_modules/@vue/devtools-api/lib/esm/proxy.js","webpack:///./node_modules/@vue/devtools-api/lib/esm/const.js","webpack:///./node_modules/@vue/devtools-api/lib/esm/index.js","webpack:///./node_modules/vuex/dist/vuex.esm-bundler.js","webpack:///./node_modules/@intlify/core-base/dist/core-base.mjs","webpack:///./node_modules/@intlify/shared/dist/shared.mjs","webpack:///./node_modules/bootstrap-vue-next/dist/bootstrap-vue-next.mjs","webpack:///./node_modules/epic-spinners/dist/style/HalfCircleSpinner.css?0ffa","webpack:///./node_modules/epic-spinners/dist/es/components/HalfCircleSpinner.js","webpack:///./node_modules/epic-spinners/dist/es/plugin-vue_export-helper.js"],"sourcesContent":["/*!\n * message-compiler v9.5.0\n * (c) 2023 kazuya kawaguchi\n * Released under the MIT License.\n */\nconst LOCATION_STUB = {\n start: { line: 1, column: 1, offset: 0 },\n end: { line: 1, column: 1, offset: 0 }\n};\nfunction createPosition(line, column, offset) {\n return { line, column, offset };\n}\nfunction createLocation(start, end, source) {\n const loc = { start, end };\n if (source != null) {\n loc.source = source;\n }\n return loc;\n}\n\n/**\n * Original Utilities\n * written by kazuya kawaguchi\n */\nconst RE_ARGS = /\\{([0-9a-zA-Z]+)\\}/g;\n/* eslint-disable */\nfunction format(message, ...args) {\n if (args.length === 1 && isObject(args[0])) {\n args = args[0];\n }\n if (!args || !args.hasOwnProperty) {\n args = {};\n }\n return message.replace(RE_ARGS, (match, identifier) => {\n return args.hasOwnProperty(identifier) ? args[identifier] : '';\n });\n}\nconst assign = Object.assign;\nconst isString = (val) => typeof val === 'string';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isObject = (val) => val !== null && typeof val === 'object';\nfunction join(items, separator = '') {\n return items.reduce((str, item, index) => (index === 0 ? str + item : str + separator + item), '');\n}\n\nconst CompileErrorCodes = {\n // tokenizer error codes\n EXPECTED_TOKEN: 1,\n INVALID_TOKEN_IN_PLACEHOLDER: 2,\n UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER: 3,\n UNKNOWN_ESCAPE_SEQUENCE: 4,\n INVALID_UNICODE_ESCAPE_SEQUENCE: 5,\n UNBALANCED_CLOSING_BRACE: 6,\n UNTERMINATED_CLOSING_BRACE: 7,\n EMPTY_PLACEHOLDER: 8,\n NOT_ALLOW_NEST_PLACEHOLDER: 9,\n INVALID_LINKED_FORMAT: 10,\n // parser error codes\n MUST_HAVE_MESSAGES_IN_PLURAL: 11,\n UNEXPECTED_EMPTY_LINKED_MODIFIER: 12,\n UNEXPECTED_EMPTY_LINKED_KEY: 13,\n UNEXPECTED_LEXICAL_ANALYSIS: 14,\n // generator error codes\n UNHANDLED_CODEGEN_NODE_TYPE: 15,\n // minifier error codes\n UNHANDLED_MINIFIER_NODE_TYPE: 16,\n // Special value for higher-order compilers to pick up the last code\n // to avoid collision of error codes. This should always be kept as the last\n // item.\n __EXTEND_POINT__: 17\n};\n/** @internal */\nconst errorMessages = {\n // tokenizer error messages\n [CompileErrorCodes.EXPECTED_TOKEN]: `Expected token: '{0}'`,\n [CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER]: `Invalid token in placeholder: '{0}'`,\n [CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]: `Unterminated single quote in placeholder`,\n [CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE]: `Unknown escape sequence: \\\\{0}`,\n [CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE]: `Invalid unicode escape sequence: {0}`,\n [CompileErrorCodes.UNBALANCED_CLOSING_BRACE]: `Unbalanced closing brace`,\n [CompileErrorCodes.UNTERMINATED_CLOSING_BRACE]: `Unterminated closing brace`,\n [CompileErrorCodes.EMPTY_PLACEHOLDER]: `Empty placeholder`,\n [CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER]: `Not allowed nest placeholder`,\n [CompileErrorCodes.INVALID_LINKED_FORMAT]: `Invalid linked format`,\n // parser error messages\n [CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL]: `Plural must have messages`,\n [CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER]: `Unexpected empty linked modifier`,\n [CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY]: `Unexpected empty linked key`,\n [CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS]: `Unexpected lexical analysis in token: '{0}'`,\n // generator error messages\n [CompileErrorCodes.UNHANDLED_CODEGEN_NODE_TYPE]: `unhandled codegen node type: '{0}'`,\n // minimizer error messages\n [CompileErrorCodes.UNHANDLED_MINIFIER_NODE_TYPE]: `unhandled mimifier node type: '{0}'`\n};\nfunction createCompileError(code, loc, options = {}) {\n const { domain, messages, args } = options;\n const msg = format((messages || errorMessages)[code] || '', ...(args || []))\n ;\n const error = new SyntaxError(String(msg));\n error.code = code;\n if (loc) {\n error.location = loc;\n }\n error.domain = domain;\n return error;\n}\n/** @internal */\nfunction defaultOnError(error) {\n throw error;\n}\n\nconst RE_HTML_TAG = /<\\/?[\\w\\s=\"/.':;#-\\/]+>/;\nconst detectHtmlTag = (source) => RE_HTML_TAG.test(source);\n\nconst CHAR_SP = ' ';\nconst CHAR_CR = '\\r';\nconst CHAR_LF = '\\n';\nconst CHAR_LS = String.fromCharCode(0x2028);\nconst CHAR_PS = String.fromCharCode(0x2029);\nfunction createScanner(str) {\n const _buf = str;\n let _index = 0;\n let _line = 1;\n let _column = 1;\n let _peekOffset = 0;\n const isCRLF = (index) => _buf[index] === CHAR_CR && _buf[index + 1] === CHAR_LF;\n const isLF = (index) => _buf[index] === CHAR_LF;\n const isPS = (index) => _buf[index] === CHAR_PS;\n const isLS = (index) => _buf[index] === CHAR_LS;\n const isLineEnd = (index) => isCRLF(index) || isLF(index) || isPS(index) || isLS(index);\n const index = () => _index;\n const line = () => _line;\n const column = () => _column;\n const peekOffset = () => _peekOffset;\n const charAt = (offset) => isCRLF(offset) || isPS(offset) || isLS(offset) ? CHAR_LF : _buf[offset];\n const currentChar = () => charAt(_index);\n const currentPeek = () => charAt(_index + _peekOffset);\n function next() {\n _peekOffset = 0;\n if (isLineEnd(_index)) {\n _line++;\n _column = 0;\n }\n if (isCRLF(_index)) {\n _index++;\n }\n _index++;\n _column++;\n return _buf[_index];\n }\n function peek() {\n if (isCRLF(_index + _peekOffset)) {\n _peekOffset++;\n }\n _peekOffset++;\n return _buf[_index + _peekOffset];\n }\n function reset() {\n _index = 0;\n _line = 1;\n _column = 1;\n _peekOffset = 0;\n }\n function resetPeek(offset = 0) {\n _peekOffset = offset;\n }\n function skipToPeek() {\n const target = _index + _peekOffset;\n // eslint-disable-next-line no-unmodified-loop-condition\n while (target !== _index) {\n next();\n }\n _peekOffset = 0;\n }\n return {\n index,\n line,\n column,\n peekOffset,\n charAt,\n currentChar,\n currentPeek,\n next,\n peek,\n reset,\n resetPeek,\n skipToPeek\n };\n}\n\nconst EOF = undefined;\nconst DOT = '.';\nconst LITERAL_DELIMITER = \"'\";\nconst ERROR_DOMAIN$3 = 'tokenizer';\nfunction createTokenizer(source, options = {}) {\n const location = options.location !== false;\n const _scnr = createScanner(source);\n const currentOffset = () => _scnr.index();\n const currentPosition = () => createPosition(_scnr.line(), _scnr.column(), _scnr.index());\n const _initLoc = currentPosition();\n const _initOffset = currentOffset();\n const _context = {\n currentType: 14 /* TokenTypes.EOF */,\n offset: _initOffset,\n startLoc: _initLoc,\n endLoc: _initLoc,\n lastType: 14 /* TokenTypes.EOF */,\n lastOffset: _initOffset,\n lastStartLoc: _initLoc,\n lastEndLoc: _initLoc,\n braceNest: 0,\n inLinked: false,\n text: ''\n };\n const context = () => _context;\n const { onError } = options;\n function emitError(code, pos, offset, ...args) {\n const ctx = context();\n pos.column += offset;\n pos.offset += offset;\n if (onError) {\n const loc = location ? createLocation(ctx.startLoc, pos) : null;\n const err = createCompileError(code, loc, {\n domain: ERROR_DOMAIN$3,\n args\n });\n onError(err);\n }\n }\n function getToken(context, type, value) {\n context.endLoc = currentPosition();\n context.currentType = type;\n const token = { type };\n if (location) {\n token.loc = createLocation(context.startLoc, context.endLoc);\n }\n if (value != null) {\n token.value = value;\n }\n return token;\n }\n const getEndToken = (context) => getToken(context, 14 /* TokenTypes.EOF */);\n function eat(scnr, ch) {\n if (scnr.currentChar() === ch) {\n scnr.next();\n return ch;\n }\n else {\n emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch);\n return '';\n }\n }\n function peekSpaces(scnr) {\n let buf = '';\n while (scnr.currentPeek() === CHAR_SP || scnr.currentPeek() === CHAR_LF) {\n buf += scnr.currentPeek();\n scnr.peek();\n }\n return buf;\n }\n function skipSpaces(scnr) {\n const buf = peekSpaces(scnr);\n scnr.skipToPeek();\n return buf;\n }\n function isIdentifierStart(ch) {\n if (ch === EOF) {\n return false;\n }\n const cc = ch.charCodeAt(0);\n return ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n cc === 95 // _\n );\n }\n function isNumberStart(ch) {\n if (ch === EOF) {\n return false;\n }\n const cc = ch.charCodeAt(0);\n return cc >= 48 && cc <= 57; // 0-9\n }\n function isNamedIdentifierStart(scnr, context) {\n const { currentType } = context;\n if (currentType !== 2 /* TokenTypes.BraceLeft */) {\n return false;\n }\n peekSpaces(scnr);\n const ret = isIdentifierStart(scnr.currentPeek());\n scnr.resetPeek();\n return ret;\n }\n function isListIdentifierStart(scnr, context) {\n const { currentType } = context;\n if (currentType !== 2 /* TokenTypes.BraceLeft */) {\n return false;\n }\n peekSpaces(scnr);\n const ch = scnr.currentPeek() === '-' ? scnr.peek() : scnr.currentPeek();\n const ret = isNumberStart(ch);\n scnr.resetPeek();\n return ret;\n }\n function isLiteralStart(scnr, context) {\n const { currentType } = context;\n if (currentType !== 2 /* TokenTypes.BraceLeft */) {\n return false;\n }\n peekSpaces(scnr);\n const ret = scnr.currentPeek() === LITERAL_DELIMITER;\n scnr.resetPeek();\n return ret;\n }\n function isLinkedDotStart(scnr, context) {\n const { currentType } = context;\n if (currentType !== 8 /* TokenTypes.LinkedAlias */) {\n return false;\n }\n peekSpaces(scnr);\n const ret = scnr.currentPeek() === \".\" /* TokenChars.LinkedDot */;\n scnr.resetPeek();\n return ret;\n }\n function isLinkedModifierStart(scnr, context) {\n const { currentType } = context;\n if (currentType !== 9 /* TokenTypes.LinkedDot */) {\n return false;\n }\n peekSpaces(scnr);\n const ret = isIdentifierStart(scnr.currentPeek());\n scnr.resetPeek();\n return ret;\n }\n function isLinkedDelimiterStart(scnr, context) {\n const { currentType } = context;\n if (!(currentType === 8 /* TokenTypes.LinkedAlias */ ||\n currentType === 12 /* TokenTypes.LinkedModifier */)) {\n return false;\n }\n peekSpaces(scnr);\n const ret = scnr.currentPeek() === \":\" /* TokenChars.LinkedDelimiter */;\n scnr.resetPeek();\n return ret;\n }\n function isLinkedReferStart(scnr, context) {\n const { currentType } = context;\n if (currentType !== 10 /* TokenTypes.LinkedDelimiter */) {\n return false;\n }\n const fn = () => {\n const ch = scnr.currentPeek();\n if (ch === \"{\" /* TokenChars.BraceLeft */) {\n return isIdentifierStart(scnr.peek());\n }\n else if (ch === \"@\" /* TokenChars.LinkedAlias */ ||\n ch === \"%\" /* TokenChars.Modulo */ ||\n ch === \"|\" /* TokenChars.Pipe */ ||\n ch === \":\" /* TokenChars.LinkedDelimiter */ ||\n ch === \".\" /* TokenChars.LinkedDot */ ||\n ch === CHAR_SP ||\n !ch) {\n return false;\n }\n else if (ch === CHAR_LF) {\n scnr.peek();\n return fn();\n }\n else {\n // other characters\n return isIdentifierStart(ch);\n }\n };\n const ret = fn();\n scnr.resetPeek();\n return ret;\n }\n function isPluralStart(scnr) {\n peekSpaces(scnr);\n const ret = scnr.currentPeek() === \"|\" /* TokenChars.Pipe */;\n scnr.resetPeek();\n return ret;\n }\n function detectModuloStart(scnr) {\n const spaces = peekSpaces(scnr);\n const ret = scnr.currentPeek() === \"%\" /* TokenChars.Modulo */ &&\n scnr.peek() === \"{\" /* TokenChars.BraceLeft */;\n scnr.resetPeek();\n return {\n isModulo: ret,\n hasSpace: spaces.length > 0\n };\n }\n function isTextStart(scnr, reset = true) {\n const fn = (hasSpace = false, prev = '', detectModulo = false) => {\n const ch = scnr.currentPeek();\n if (ch === \"{\" /* TokenChars.BraceLeft */) {\n return prev === \"%\" /* TokenChars.Modulo */ ? false : hasSpace;\n }\n else if (ch === \"@\" /* TokenChars.LinkedAlias */ || !ch) {\n return prev === \"%\" /* TokenChars.Modulo */ ? true : hasSpace;\n }\n else if (ch === \"%\" /* TokenChars.Modulo */) {\n scnr.peek();\n return fn(hasSpace, \"%\" /* TokenChars.Modulo */, true);\n }\n else if (ch === \"|\" /* TokenChars.Pipe */) {\n return prev === \"%\" /* TokenChars.Modulo */ || detectModulo\n ? true\n : !(prev === CHAR_SP || prev === CHAR_LF);\n }\n else if (ch === CHAR_SP) {\n scnr.peek();\n return fn(true, CHAR_SP, detectModulo);\n }\n else if (ch === CHAR_LF) {\n scnr.peek();\n return fn(true, CHAR_LF, detectModulo);\n }\n else {\n return true;\n }\n };\n const ret = fn();\n reset && scnr.resetPeek();\n return ret;\n }\n function takeChar(scnr, fn) {\n const ch = scnr.currentChar();\n if (ch === EOF) {\n return EOF;\n }\n if (fn(ch)) {\n scnr.next();\n return ch;\n }\n return null;\n }\n function takeIdentifierChar(scnr) {\n const closure = (ch) => {\n const cc = ch.charCodeAt(0);\n return ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n (cc >= 48 && cc <= 57) || // 0-9\n cc === 95 || // _\n cc === 36 // $\n );\n };\n return takeChar(scnr, closure);\n }\n function takeDigit(scnr) {\n const closure = (ch) => {\n const cc = ch.charCodeAt(0);\n return cc >= 48 && cc <= 57; // 0-9\n };\n return takeChar(scnr, closure);\n }\n function takeHexDigit(scnr) {\n const closure = (ch) => {\n const cc = ch.charCodeAt(0);\n return ((cc >= 48 && cc <= 57) || // 0-9\n (cc >= 65 && cc <= 70) || // A-F\n (cc >= 97 && cc <= 102)); // a-f\n };\n return takeChar(scnr, closure);\n }\n function getDigits(scnr) {\n let ch = '';\n let num = '';\n while ((ch = takeDigit(scnr))) {\n num += ch;\n }\n return num;\n }\n function readModulo(scnr) {\n skipSpaces(scnr);\n const ch = scnr.currentChar();\n if (ch !== \"%\" /* TokenChars.Modulo */) {\n emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch);\n }\n scnr.next();\n return \"%\" /* TokenChars.Modulo */;\n }\n function readText(scnr) {\n let buf = '';\n while (true) {\n const ch = scnr.currentChar();\n if (ch === \"{\" /* TokenChars.BraceLeft */ ||\n ch === \"}\" /* TokenChars.BraceRight */ ||\n ch === \"@\" /* TokenChars.LinkedAlias */ ||\n ch === \"|\" /* TokenChars.Pipe */ ||\n !ch) {\n break;\n }\n else if (ch === \"%\" /* TokenChars.Modulo */) {\n if (isTextStart(scnr)) {\n buf += ch;\n scnr.next();\n }\n else {\n break;\n }\n }\n else if (ch === CHAR_SP || ch === CHAR_LF) {\n if (isTextStart(scnr)) {\n buf += ch;\n scnr.next();\n }\n else if (isPluralStart(scnr)) {\n break;\n }\n else {\n buf += ch;\n scnr.next();\n }\n }\n else {\n buf += ch;\n scnr.next();\n }\n }\n return buf;\n }\n function readNamedIdentifier(scnr) {\n skipSpaces(scnr);\n let ch = '';\n let name = '';\n while ((ch = takeIdentifierChar(scnr))) {\n name += ch;\n }\n if (scnr.currentChar() === EOF) {\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n }\n return name;\n }\n function readListIdentifier(scnr) {\n skipSpaces(scnr);\n let value = '';\n if (scnr.currentChar() === '-') {\n scnr.next();\n value += `-${getDigits(scnr)}`;\n }\n else {\n value += getDigits(scnr);\n }\n if (scnr.currentChar() === EOF) {\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n }\n return value;\n }\n function readLiteral(scnr) {\n skipSpaces(scnr);\n eat(scnr, `\\'`);\n let ch = '';\n let literal = '';\n const fn = (x) => x !== LITERAL_DELIMITER && x !== CHAR_LF;\n while ((ch = takeChar(scnr, fn))) {\n if (ch === '\\\\') {\n literal += readEscapeSequence(scnr);\n }\n else {\n literal += ch;\n }\n }\n const current = scnr.currentChar();\n if (current === CHAR_LF || current === EOF) {\n emitError(CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER, currentPosition(), 0);\n // TODO: Is it correct really?\n if (current === CHAR_LF) {\n scnr.next();\n eat(scnr, `\\'`);\n }\n return literal;\n }\n eat(scnr, `\\'`);\n return literal;\n }\n function readEscapeSequence(scnr) {\n const ch = scnr.currentChar();\n switch (ch) {\n case '\\\\':\n case `\\'`:\n scnr.next();\n return `\\\\${ch}`;\n case 'u':\n return readUnicodeEscapeSequence(scnr, ch, 4);\n case 'U':\n return readUnicodeEscapeSequence(scnr, ch, 6);\n default:\n emitError(CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE, currentPosition(), 0, ch);\n return '';\n }\n }\n function readUnicodeEscapeSequence(scnr, unicode, digits) {\n eat(scnr, unicode);\n let sequence = '';\n for (let i = 0; i < digits; i++) {\n const ch = takeHexDigit(scnr);\n if (!ch) {\n emitError(CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE, currentPosition(), 0, `\\\\${unicode}${sequence}${scnr.currentChar()}`);\n break;\n }\n sequence += ch;\n }\n return `\\\\${unicode}${sequence}`;\n }\n function readInvalidIdentifier(scnr) {\n skipSpaces(scnr);\n let ch = '';\n let identifiers = '';\n const closure = (ch) => ch !== \"{\" /* TokenChars.BraceLeft */ &&\n ch !== \"}\" /* TokenChars.BraceRight */ &&\n ch !== CHAR_SP &&\n ch !== CHAR_LF;\n while ((ch = takeChar(scnr, closure))) {\n identifiers += ch;\n }\n return identifiers;\n }\n function readLinkedModifier(scnr) {\n let ch = '';\n let name = '';\n while ((ch = takeIdentifierChar(scnr))) {\n name += ch;\n }\n return name;\n }\n function readLinkedRefer(scnr) {\n const fn = (detect = false, buf) => {\n const ch = scnr.currentChar();\n if (ch === \"{\" /* TokenChars.BraceLeft */ ||\n ch === \"%\" /* TokenChars.Modulo */ ||\n ch === \"@\" /* TokenChars.LinkedAlias */ ||\n ch === \"|\" /* TokenChars.Pipe */ ||\n ch === \"(\" /* TokenChars.ParenLeft */ ||\n ch === \")\" /* TokenChars.ParenRight */ ||\n !ch) {\n return buf;\n }\n else if (ch === CHAR_SP) {\n return buf;\n }\n else if (ch === CHAR_LF || ch === DOT) {\n buf += ch;\n scnr.next();\n return fn(detect, buf);\n }\n else {\n buf += ch;\n scnr.next();\n return fn(true, buf);\n }\n };\n return fn(false, '');\n }\n function readPlural(scnr) {\n skipSpaces(scnr);\n const plural = eat(scnr, \"|\" /* TokenChars.Pipe */);\n skipSpaces(scnr);\n return plural;\n }\n // TODO: We need refactoring of token parsing ...\n function readTokenInPlaceholder(scnr, context) {\n let token = null;\n const ch = scnr.currentChar();\n switch (ch) {\n case \"{\" /* TokenChars.BraceLeft */:\n if (context.braceNest >= 1) {\n emitError(CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER, currentPosition(), 0);\n }\n scnr.next();\n token = getToken(context, 2 /* TokenTypes.BraceLeft */, \"{\" /* TokenChars.BraceLeft */);\n skipSpaces(scnr);\n context.braceNest++;\n return token;\n case \"}\" /* TokenChars.BraceRight */:\n if (context.braceNest > 0 &&\n context.currentType === 2 /* TokenTypes.BraceLeft */) {\n emitError(CompileErrorCodes.EMPTY_PLACEHOLDER, currentPosition(), 0);\n }\n scnr.next();\n token = getToken(context, 3 /* TokenTypes.BraceRight */, \"}\" /* TokenChars.BraceRight */);\n context.braceNest--;\n context.braceNest > 0 && skipSpaces(scnr);\n if (context.inLinked && context.braceNest === 0) {\n context.inLinked = false;\n }\n return token;\n case \"@\" /* TokenChars.LinkedAlias */:\n if (context.braceNest > 0) {\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n }\n token = readTokenInLinked(scnr, context) || getEndToken(context);\n context.braceNest = 0;\n return token;\n default:\n let validNamedIdentifier = true;\n let validListIdentifier = true;\n let validLiteral = true;\n if (isPluralStart(scnr)) {\n if (context.braceNest > 0) {\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n }\n token = getToken(context, 1 /* TokenTypes.Pipe */, readPlural(scnr));\n // reset\n context.braceNest = 0;\n context.inLinked = false;\n return token;\n }\n if (context.braceNest > 0 &&\n (context.currentType === 5 /* TokenTypes.Named */ ||\n context.currentType === 6 /* TokenTypes.List */ ||\n context.currentType === 7 /* TokenTypes.Literal */)) {\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\n context.braceNest = 0;\n return readToken(scnr, context);\n }\n if ((validNamedIdentifier = isNamedIdentifierStart(scnr, context))) {\n token = getToken(context, 5 /* TokenTypes.Named */, readNamedIdentifier(scnr));\n skipSpaces(scnr);\n return token;\n }\n if ((validListIdentifier = isListIdentifierStart(scnr, context))) {\n token = getToken(context, 6 /* TokenTypes.List */, readListIdentifier(scnr));\n skipSpaces(scnr);\n return token;\n }\n if ((validLiteral = isLiteralStart(scnr, context))) {\n token = getToken(context, 7 /* TokenTypes.Literal */, readLiteral(scnr));\n skipSpaces(scnr);\n return token;\n }\n if (!validNamedIdentifier && !validListIdentifier && !validLiteral) {\n // TODO: we should be re-designed invalid cases, when we will extend message syntax near the future ...\n token = getToken(context, 13 /* TokenTypes.InvalidPlace */, readInvalidIdentifier(scnr));\n emitError(CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER, currentPosition(), 0, token.value);\n skipSpaces(scnr);\n return token;\n }\n break;\n }\n return token;\n }\n // TODO: We need refactoring of token parsing ...\n function readTokenInLinked(scnr, context) {\n const { currentType } = context;\n let token = null;\n const ch = scnr.currentChar();\n if ((currentType === 8 /* TokenTypes.LinkedAlias */ ||\n currentType === 9 /* TokenTypes.LinkedDot */ ||\n currentType === 12 /* TokenTypes.LinkedModifier */ ||\n currentType === 10 /* TokenTypes.LinkedDelimiter */) &&\n (ch === CHAR_LF || ch === CHAR_SP)) {\n emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);\n }\n switch (ch) {\n case \"@\" /* TokenChars.LinkedAlias */:\n scnr.next();\n token = getToken(context, 8 /* TokenTypes.LinkedAlias */, \"@\" /* TokenChars.LinkedAlias */);\n context.inLinked = true;\n return token;\n case \".\" /* TokenChars.LinkedDot */:\n skipSpaces(scnr);\n scnr.next();\n return getToken(context, 9 /* TokenTypes.LinkedDot */, \".\" /* TokenChars.LinkedDot */);\n case \":\" /* TokenChars.LinkedDelimiter */:\n skipSpaces(scnr);\n scnr.next();\n return getToken(context, 10 /* TokenTypes.LinkedDelimiter */, \":\" /* TokenChars.LinkedDelimiter */);\n default:\n if (isPluralStart(scnr)) {\n token = getToken(context, 1 /* TokenTypes.Pipe */, readPlural(scnr));\n // reset\n context.braceNest = 0;\n context.inLinked = false;\n return token;\n }\n if (isLinkedDotStart(scnr, context) ||\n isLinkedDelimiterStart(scnr, context)) {\n skipSpaces(scnr);\n return readTokenInLinked(scnr, context);\n }\n if (isLinkedModifierStart(scnr, context)) {\n skipSpaces(scnr);\n return getToken(context, 12 /* TokenTypes.LinkedModifier */, readLinkedModifier(scnr));\n }\n if (isLinkedReferStart(scnr, context)) {\n skipSpaces(scnr);\n if (ch === \"{\" /* TokenChars.BraceLeft */) {\n // scan the placeholder\n return readTokenInPlaceholder(scnr, context) || token;\n }\n else {\n return getToken(context, 11 /* TokenTypes.LinkedKey */, readLinkedRefer(scnr));\n }\n }\n if (currentType === 8 /* TokenTypes.LinkedAlias */) {\n emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);\n }\n context.braceNest = 0;\n context.inLinked = false;\n return readToken(scnr, context);\n }\n }\n // TODO: We need refactoring of token parsing ...\n function readToken(scnr, context) {\n let token = { type: 14 /* TokenTypes.EOF */ };\n if (context.braceNest > 0) {\n return readTokenInPlaceholder(scnr, context) || getEndToken(context);\n }\n if (context.inLinked) {\n return readTokenInLinked(scnr, context) || getEndToken(context);\n }\n const ch = scnr.currentChar();\n switch (ch) {\n case \"{\" /* TokenChars.BraceLeft */:\n return readTokenInPlaceholder(scnr, context) || getEndToken(context);\n case \"}\" /* TokenChars.BraceRight */:\n emitError(CompileErrorCodes.UNBALANCED_CLOSING_BRACE, currentPosition(), 0);\n scnr.next();\n return getToken(context, 3 /* TokenTypes.BraceRight */, \"}\" /* TokenChars.BraceRight */);\n case \"@\" /* TokenChars.LinkedAlias */:\n return readTokenInLinked(scnr, context) || getEndToken(context);\n default:\n if (isPluralStart(scnr)) {\n token = getToken(context, 1 /* TokenTypes.Pipe */, readPlural(scnr));\n // reset\n context.braceNest = 0;\n context.inLinked = false;\n return token;\n }\n const { isModulo, hasSpace } = detectModuloStart(scnr);\n if (isModulo) {\n return hasSpace\n ? getToken(context, 0 /* TokenTypes.Text */, readText(scnr))\n : getToken(context, 4 /* TokenTypes.Modulo */, readModulo(scnr));\n }\n if (isTextStart(scnr)) {\n return getToken(context, 0 /* TokenTypes.Text */, readText(scnr));\n }\n break;\n }\n return token;\n }\n function nextToken() {\n const { currentType, offset, startLoc, endLoc } = _context;\n _context.lastType = currentType;\n _context.lastOffset = offset;\n _context.lastStartLoc = startLoc;\n _context.lastEndLoc = endLoc;\n _context.offset = currentOffset();\n _context.startLoc = currentPosition();\n if (_scnr.currentChar() === EOF) {\n return getToken(_context, 14 /* TokenTypes.EOF */);\n }\n return readToken(_scnr, _context);\n }\n return {\n nextToken,\n currentOffset,\n currentPosition,\n context\n };\n}\n\nconst ERROR_DOMAIN$2 = 'parser';\n// Backslash backslash, backslash quote, uHHHH, UHHHHHH.\nconst KNOWN_ESCAPES = /(?:\\\\\\\\|\\\\'|\\\\u([0-9a-fA-F]{4})|\\\\U([0-9a-fA-F]{6}))/g;\nfunction fromEscapeSequence(match, codePoint4, codePoint6) {\n switch (match) {\n case `\\\\\\\\`:\n return `\\\\`;\n case `\\\\\\'`:\n return `\\'`;\n default: {\n const codePoint = parseInt(codePoint4 || codePoint6, 16);\n if (codePoint <= 0xd7ff || codePoint >= 0xe000) {\n return String.fromCodePoint(codePoint);\n }\n // invalid ...\n // Replace them with U+FFFD REPLACEMENT CHARACTER.\n return '�';\n }\n }\n}\nfunction createParser(options = {}) {\n const location = options.location !== false;\n const { onError } = options;\n function emitError(tokenzer, code, start, offset, ...args) {\n const end = tokenzer.currentPosition();\n end.offset += offset;\n end.column += offset;\n if (onError) {\n const loc = location ? createLocation(start, end) : null;\n const err = createCompileError(code, loc, {\n domain: ERROR_DOMAIN$2,\n args\n });\n onError(err);\n }\n }\n function startNode(type, offset, loc) {\n const node = { type };\n if (location) {\n node.start = offset;\n node.end = offset;\n node.loc = { start: loc, end: loc };\n }\n return node;\n }\n function endNode(node, offset, pos, type) {\n if (type) {\n node.type = type;\n }\n if (location) {\n node.end = offset;\n if (node.loc) {\n node.loc.end = pos;\n }\n }\n }\n function parseText(tokenizer, value) {\n const context = tokenizer.context();\n const node = startNode(3 /* NodeTypes.Text */, context.offset, context.startLoc);\n node.value = value;\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n return node;\n }\n function parseList(tokenizer, index) {\n const context = tokenizer.context();\n const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\n const node = startNode(5 /* NodeTypes.List */, offset, loc);\n node.index = parseInt(index, 10);\n tokenizer.nextToken(); // skip brach right\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n return node;\n }\n function parseNamed(tokenizer, key) {\n const context = tokenizer.context();\n const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\n const node = startNode(4 /* NodeTypes.Named */, offset, loc);\n node.key = key;\n tokenizer.nextToken(); // skip brach right\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n return node;\n }\n function parseLiteral(tokenizer, value) {\n const context = tokenizer.context();\n const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\n const node = startNode(9 /* NodeTypes.Literal */, offset, loc);\n node.value = value.replace(KNOWN_ESCAPES, fromEscapeSequence);\n tokenizer.nextToken(); // skip brach right\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n return node;\n }\n function parseLinkedModifier(tokenizer) {\n const token = tokenizer.nextToken();\n const context = tokenizer.context();\n const { lastOffset: offset, lastStartLoc: loc } = context; // get linked dot loc\n const node = startNode(8 /* NodeTypes.LinkedModifier */, offset, loc);\n if (token.type !== 12 /* TokenTypes.LinkedModifier */) {\n // empty modifier\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER, context.lastStartLoc, 0);\n node.value = '';\n endNode(node, offset, loc);\n return {\n nextConsumeToken: token,\n node\n };\n }\n // check token\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n node.value = token.value || '';\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n return {\n node\n };\n }\n function parseLinkedKey(tokenizer, value) {\n const context = tokenizer.context();\n const node = startNode(7 /* NodeTypes.LinkedKey */, context.offset, context.startLoc);\n node.value = value;\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n return node;\n }\n function parseLinked(tokenizer) {\n const context = tokenizer.context();\n const linkedNode = startNode(6 /* NodeTypes.Linked */, context.offset, context.startLoc);\n let token = tokenizer.nextToken();\n if (token.type === 9 /* TokenTypes.LinkedDot */) {\n const parsed = parseLinkedModifier(tokenizer);\n linkedNode.modifier = parsed.node;\n token = parsed.nextConsumeToken || tokenizer.nextToken();\n }\n // asset check token\n if (token.type !== 10 /* TokenTypes.LinkedDelimiter */) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n token = tokenizer.nextToken();\n // skip brace left\n if (token.type === 2 /* TokenTypes.BraceLeft */) {\n token = tokenizer.nextToken();\n }\n switch (token.type) {\n case 11 /* TokenTypes.LinkedKey */:\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n linkedNode.key = parseLinkedKey(tokenizer, token.value || '');\n break;\n case 5 /* TokenTypes.Named */:\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n linkedNode.key = parseNamed(tokenizer, token.value || '');\n break;\n case 6 /* TokenTypes.List */:\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n linkedNode.key = parseList(tokenizer, token.value || '');\n break;\n case 7 /* TokenTypes.Literal */:\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n linkedNode.key = parseLiteral(tokenizer, token.value || '');\n break;\n default:\n // empty key\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY, context.lastStartLoc, 0);\n const nextContext = tokenizer.context();\n const emptyLinkedKeyNode = startNode(7 /* NodeTypes.LinkedKey */, nextContext.offset, nextContext.startLoc);\n emptyLinkedKeyNode.value = '';\n endNode(emptyLinkedKeyNode, nextContext.offset, nextContext.startLoc);\n linkedNode.key = emptyLinkedKeyNode;\n endNode(linkedNode, nextContext.offset, nextContext.startLoc);\n return {\n nextConsumeToken: token,\n node: linkedNode\n };\n }\n endNode(linkedNode, tokenizer.currentOffset(), tokenizer.currentPosition());\n return {\n node: linkedNode\n };\n }\n function parseMessage(tokenizer) {\n const context = tokenizer.context();\n const startOffset = context.currentType === 1 /* TokenTypes.Pipe */\n ? tokenizer.currentOffset()\n : context.offset;\n const startLoc = context.currentType === 1 /* TokenTypes.Pipe */\n ? context.endLoc\n : context.startLoc;\n const node = startNode(2 /* NodeTypes.Message */, startOffset, startLoc);\n node.items = [];\n let nextToken = null;\n do {\n const token = nextToken || tokenizer.nextToken();\n nextToken = null;\n switch (token.type) {\n case 0 /* TokenTypes.Text */:\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n node.items.push(parseText(tokenizer, token.value || ''));\n break;\n case 6 /* TokenTypes.List */:\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n node.items.push(parseList(tokenizer, token.value || ''));\n break;\n case 5 /* TokenTypes.Named */:\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n node.items.push(parseNamed(tokenizer, token.value || ''));\n break;\n case 7 /* TokenTypes.Literal */:\n if (token.value == null) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\n }\n node.items.push(parseLiteral(tokenizer, token.value || ''));\n break;\n case 8 /* TokenTypes.LinkedAlias */:\n const parsed = parseLinked(tokenizer);\n node.items.push(parsed.node);\n nextToken = parsed.nextConsumeToken || null;\n break;\n }\n } while (context.currentType !== 14 /* TokenTypes.EOF */ &&\n context.currentType !== 1 /* TokenTypes.Pipe */);\n // adjust message node loc\n const endOffset = context.currentType === 1 /* TokenTypes.Pipe */\n ? context.lastOffset\n : tokenizer.currentOffset();\n const endLoc = context.currentType === 1 /* TokenTypes.Pipe */\n ? context.lastEndLoc\n : tokenizer.currentPosition();\n endNode(node, endOffset, endLoc);\n return node;\n }\n function parsePlural(tokenizer, offset, loc, msgNode) {\n const context = tokenizer.context();\n let hasEmptyMessage = msgNode.items.length === 0;\n const node = startNode(1 /* NodeTypes.Plural */, offset, loc);\n node.cases = [];\n node.cases.push(msgNode);\n do {\n const msg = parseMessage(tokenizer);\n if (!hasEmptyMessage) {\n hasEmptyMessage = msg.items.length === 0;\n }\n node.cases.push(msg);\n } while (context.currentType !== 14 /* TokenTypes.EOF */);\n if (hasEmptyMessage) {\n emitError(tokenizer, CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL, loc, 0);\n }\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n return node;\n }\n function parseResource(tokenizer) {\n const context = tokenizer.context();\n const { offset, startLoc } = context;\n const msgNode = parseMessage(tokenizer);\n if (context.currentType === 14 /* TokenTypes.EOF */) {\n return msgNode;\n }\n else {\n return parsePlural(tokenizer, offset, startLoc, msgNode);\n }\n }\n function parse(source) {\n const tokenizer = createTokenizer(source, assign({}, options));\n const context = tokenizer.context();\n const node = startNode(0 /* NodeTypes.Resource */, context.offset, context.startLoc);\n if (location && node.loc) {\n node.loc.source = source;\n }\n node.body = parseResource(tokenizer);\n if (options.onCacheKey) {\n node.cacheKey = options.onCacheKey(source);\n }\n // assert whether achieved to EOF\n if (context.currentType !== 14 /* TokenTypes.EOF */) {\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, source[context.offset] || '');\n }\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\n return node;\n }\n return { parse };\n}\nfunction getTokenCaption(token) {\n if (token.type === 14 /* TokenTypes.EOF */) {\n return 'EOF';\n }\n const name = (token.value || '').replace(/\\r?\\n/gu, '\\\\n');\n return name.length > 10 ? name.slice(0, 9) + '…' : name;\n}\n\nfunction createTransformer(ast, options = {} // eslint-disable-line\n) {\n const _context = {\n ast,\n helpers: new Set()\n };\n const context = () => _context;\n const helper = (name) => {\n _context.helpers.add(name);\n return name;\n };\n return { context, helper };\n}\nfunction traverseNodes(nodes, transformer) {\n for (let i = 0; i < nodes.length; i++) {\n traverseNode(nodes[i], transformer);\n }\n}\nfunction traverseNode(node, transformer) {\n // TODO: if we need pre-hook of transform, should be implemented to here\n switch (node.type) {\n case 1 /* NodeTypes.Plural */:\n traverseNodes(node.cases, transformer);\n transformer.helper(\"plural\" /* HelperNameMap.PLURAL */);\n break;\n case 2 /* NodeTypes.Message */:\n traverseNodes(node.items, transformer);\n break;\n case 6 /* NodeTypes.Linked */:\n const linked = node;\n traverseNode(linked.key, transformer);\n transformer.helper(\"linked\" /* HelperNameMap.LINKED */);\n transformer.helper(\"type\" /* HelperNameMap.TYPE */);\n break;\n case 5 /* NodeTypes.List */:\n transformer.helper(\"interpolate\" /* HelperNameMap.INTERPOLATE */);\n transformer.helper(\"list\" /* HelperNameMap.LIST */);\n break;\n case 4 /* NodeTypes.Named */:\n transformer.helper(\"interpolate\" /* HelperNameMap.INTERPOLATE */);\n transformer.helper(\"named\" /* HelperNameMap.NAMED */);\n break;\n }\n // TODO: if we need post-hook of transform, should be implemented to here\n}\n// transform AST\nfunction transform(ast, options = {} // eslint-disable-line\n) {\n const transformer = createTransformer(ast);\n transformer.helper(\"normalize\" /* HelperNameMap.NORMALIZE */);\n // traverse\n ast.body && traverseNode(ast.body, transformer);\n // set meta information\n const context = transformer.context();\n ast.helpers = Array.from(context.helpers);\n}\n\nfunction optimize(ast) {\n const body = ast.body;\n if (body.type === 2 /* NodeTypes.Message */) {\n optimizeMessageNode(body);\n }\n else {\n body.cases.forEach(c => optimizeMessageNode(c));\n }\n return ast;\n}\nfunction optimizeMessageNode(message) {\n if (message.items.length === 1) {\n const item = message.items[0];\n if (item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */) {\n message.static = item.value;\n delete item.value; // optimization for size\n }\n }\n else {\n const values = [];\n for (let i = 0; i < message.items.length; i++) {\n const item = message.items[i];\n if (!(item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */)) {\n break;\n }\n if (item.value == null) {\n break;\n }\n values.push(item.value);\n }\n if (values.length === message.items.length) {\n message.static = join(values);\n for (let i = 0; i < message.items.length; i++) {\n const item = message.items[i];\n if (item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */) {\n delete item.value; // optimization for size\n }\n }\n }\n }\n}\n\nconst ERROR_DOMAIN$1 = 'minifier';\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction minify(node) {\n node.t = node.type;\n switch (node.type) {\n case 0 /* NodeTypes.Resource */:\n const resource = node;\n minify(resource.body);\n resource.b = resource.body;\n delete resource.body;\n break;\n case 1 /* NodeTypes.Plural */:\n const plural = node;\n const cases = plural.cases;\n for (let i = 0; i < cases.length; i++) {\n minify(cases[i]);\n }\n plural.c = cases;\n delete plural.cases;\n break;\n case 2 /* NodeTypes.Message */:\n const message = node;\n const items = message.items;\n for (let i = 0; i < items.length; i++) {\n minify(items[i]);\n }\n message.i = items;\n delete message.items;\n if (message.static) {\n message.s = message.static;\n delete message.static;\n }\n break;\n case 3 /* NodeTypes.Text */:\n case 9 /* NodeTypes.Literal */:\n case 8 /* NodeTypes.LinkedModifier */:\n case 7 /* NodeTypes.LinkedKey */:\n const valueNode = node;\n if (valueNode.value) {\n valueNode.v = valueNode.value;\n delete valueNode.value;\n }\n break;\n case 6 /* NodeTypes.Linked */:\n const linked = node;\n minify(linked.key);\n linked.k = linked.key;\n delete linked.key;\n if (linked.modifier) {\n minify(linked.modifier);\n linked.m = linked.modifier;\n delete linked.modifier;\n }\n break;\n case 5 /* NodeTypes.List */:\n const list = node;\n list.i = list.index;\n delete list.index;\n break;\n case 4 /* NodeTypes.Named */:\n const named = node;\n named.k = named.key;\n delete named.key;\n break;\n default:\n {\n throw createCompileError(CompileErrorCodes.UNHANDLED_MINIFIER_NODE_TYPE, null, {\n domain: ERROR_DOMAIN$1,\n args: [node.type]\n });\n }\n }\n delete node.type;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst ERROR_DOMAIN = 'parser';\nfunction createCodeGenerator(ast, options) {\n const { sourceMap, filename, breakLineCode, needIndent: _needIndent } = options;\n const location = options.location !== false;\n const _context = {\n filename,\n code: '',\n column: 1,\n line: 1,\n offset: 0,\n map: undefined,\n breakLineCode,\n needIndent: _needIndent,\n indentLevel: 0\n };\n if (location && ast.loc) {\n _context.source = ast.loc.source;\n }\n const context = () => _context;\n function push(code, node) {\n _context.code += code;\n }\n function _newline(n, withBreakLine = true) {\n const _breakLineCode = withBreakLine ? breakLineCode : '';\n push(_needIndent ? _breakLineCode + ` `.repeat(n) : _breakLineCode);\n }\n function indent(withNewLine = true) {\n const level = ++_context.indentLevel;\n withNewLine && _newline(level);\n }\n function deindent(withNewLine = true) {\n const level = --_context.indentLevel;\n withNewLine && _newline(level);\n }\n function newline() {\n _newline(_context.indentLevel);\n }\n const helper = (key) => `_${key}`;\n const needIndent = () => _context.needIndent;\n return {\n context,\n push,\n indent,\n deindent,\n newline,\n helper,\n needIndent\n };\n}\nfunction generateLinkedNode(generator, node) {\n const { helper } = generator;\n generator.push(`${helper(\"linked\" /* HelperNameMap.LINKED */)}(`);\n generateNode(generator, node.key);\n if (node.modifier) {\n generator.push(`, `);\n generateNode(generator, node.modifier);\n generator.push(`, _type`);\n }\n else {\n generator.push(`, undefined, _type`);\n }\n generator.push(`)`);\n}\nfunction generateMessageNode(generator, node) {\n const { helper, needIndent } = generator;\n generator.push(`${helper(\"normalize\" /* HelperNameMap.NORMALIZE */)}([`);\n generator.indent(needIndent());\n const length = node.items.length;\n for (let i = 0; i < length; i++) {\n generateNode(generator, node.items[i]);\n if (i === length - 1) {\n break;\n }\n generator.push(', ');\n }\n generator.deindent(needIndent());\n generator.push('])');\n}\nfunction generatePluralNode(generator, node) {\n const { helper, needIndent } = generator;\n if (node.cases.length > 1) {\n generator.push(`${helper(\"plural\" /* HelperNameMap.PLURAL */)}([`);\n generator.indent(needIndent());\n const length = node.cases.length;\n for (let i = 0; i < length; i++) {\n generateNode(generator, node.cases[i]);\n if (i === length - 1) {\n break;\n }\n generator.push(', ');\n }\n generator.deindent(needIndent());\n generator.push(`])`);\n }\n}\nfunction generateResource(generator, node) {\n if (node.body) {\n generateNode(generator, node.body);\n }\n else {\n generator.push('null');\n }\n}\nfunction generateNode(generator, node) {\n const { helper } = generator;\n switch (node.type) {\n case 0 /* NodeTypes.Resource */:\n generateResource(generator, node);\n break;\n case 1 /* NodeTypes.Plural */:\n generatePluralNode(generator, node);\n break;\n case 2 /* NodeTypes.Message */:\n generateMessageNode(generator, node);\n break;\n case 6 /* NodeTypes.Linked */:\n generateLinkedNode(generator, node);\n break;\n case 8 /* NodeTypes.LinkedModifier */:\n generator.push(JSON.stringify(node.value), node);\n break;\n case 7 /* NodeTypes.LinkedKey */:\n generator.push(JSON.stringify(node.value), node);\n break;\n case 5 /* NodeTypes.List */:\n generator.push(`${helper(\"interpolate\" /* HelperNameMap.INTERPOLATE */)}(${helper(\"list\" /* HelperNameMap.LIST */)}(${node.index}))`, node);\n break;\n case 4 /* NodeTypes.Named */:\n generator.push(`${helper(\"interpolate\" /* HelperNameMap.INTERPOLATE */)}(${helper(\"named\" /* HelperNameMap.NAMED */)}(${JSON.stringify(node.key)}))`, node);\n break;\n case 9 /* NodeTypes.Literal */:\n generator.push(JSON.stringify(node.value), node);\n break;\n case 3 /* NodeTypes.Text */:\n generator.push(JSON.stringify(node.value), node);\n break;\n default:\n {\n throw createCompileError(CompileErrorCodes.UNHANDLED_CODEGEN_NODE_TYPE, null, {\n domain: ERROR_DOMAIN,\n args: [node.type]\n });\n }\n }\n}\n// generate code from AST\nconst generate = (ast, options = {} // eslint-disable-line\n) => {\n const mode = isString(options.mode) ? options.mode : 'normal';\n const filename = isString(options.filename)\n ? options.filename\n : 'message.intl';\n const sourceMap = !!options.sourceMap;\n // prettier-ignore\n const breakLineCode = options.breakLineCode != null\n ? options.breakLineCode\n : mode === 'arrow'\n ? ';'\n : '\\n';\n const needIndent = options.needIndent ? options.needIndent : mode !== 'arrow';\n const helpers = ast.helpers || [];\n const generator = createCodeGenerator(ast, {\n mode,\n filename,\n sourceMap,\n breakLineCode,\n needIndent\n });\n generator.push(mode === 'normal' ? `function __msg__ (ctx) {` : `(ctx) => {`);\n generator.indent(needIndent);\n if (helpers.length > 0) {\n generator.push(`const { ${join(helpers.map(s => `${s}: _${s}`), ', ')} } = ctx`);\n generator.newline();\n }\n generator.push(`return `);\n generateNode(generator, ast);\n generator.deindent(needIndent);\n generator.push(`}`);\n delete ast.helpers;\n const { code, map } = generator.context();\n return {\n ast,\n code,\n map: map ? map.toJSON() : undefined // eslint-disable-line @typescript-eslint/no-explicit-any\n };\n};\n\nfunction baseCompile(source, options = {}) {\n const assignedOptions = assign({}, options);\n const jit = !!assignedOptions.jit;\n const enalbeMinify = !!assignedOptions.minify;\n const enambeOptimize = assignedOptions.optimize == null ? true : assignedOptions.optimize;\n // parse source codes\n const parser = createParser(assignedOptions);\n const ast = parser.parse(source);\n if (!jit) {\n // transform ASTs\n transform(ast, assignedOptions);\n // generate javascript codes\n return generate(ast, assignedOptions);\n }\n else {\n // optimize ASTs\n enambeOptimize && optimize(ast);\n // minimize ASTs\n enalbeMinify && minify(ast);\n // In JIT mode, no ast transform, no code generation.\n return { ast, code: '' };\n }\n}\n\nexport { CompileErrorCodes, ERROR_DOMAIN$2 as ERROR_DOMAIN, LOCATION_STUB, baseCompile, createCompileError, createLocation, createParser, createPosition, defaultOnError, detectHtmlTag, errorMessages };\n","(function(){/*\n\n Copyright The Closure Library Authors.\n SPDX-License-Identifier: Apache-2.0\n*/\n'use strict';var x;function aa(a){var b=0;return function(){return b>>0)+\"_\",e=0;return b});\nz(\"Symbol.iterator\",function(a){if(a)return a;a=Symbol(\"Symbol.iterator\");for(var b=\"Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array\".split(\" \"),c=0;cc&&(c=Math.max(0,e+c));if(null==d||d>e)d=e;d=Number(d);0>d&&(d=Math.max(0,e+d));for(c=Number(c||0);cc&&(c=Math.max(c+e,0));c>4);64!=f&&(b(g<<4&240|f>>2),64!=h&&b(f<<6&192|h))}}\nfunction Ha(){if(!Ea){Ea={};for(var a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),b=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"],c=0;5>c;c++){var d=a.concat(b[c].split(\"\"));Da[c]=d;for(var e=0;e>2];f=b[(f&3)<<4|h>>4];h=b[(h&15)<<2|k>>6];k=b[k&63];c[g++]=l+f+h+k}l=0;k=d;switch(a.length-e){case 2:l=a[e+1],k=b[(l&15)<<2]||d;case 1:a=a[e],c[g]=b[a>>2]+b[(a&3)<<4|l>>4]+k+d}return c.join(\"\")}for(b=\"\";10240a;a=Math.abs(a);var c=a>>>0;a=Math.floor((a-c)/4294967296);b&&(c=A(Ta(c,a)),b=c.next().value,a=c.next().value,c=b);G=c>>>0;H=a>>>0}var Ua=\"function\"===typeof BigInt;function Ta(a,b){b=~b;a?a=~a+1:b+=1;return[a,b]};function Va(a,b){this.i=a>>>0;this.h=b>>>0}\nfunction Wa(a){if(!a)return Xa||(Xa=new Va(0,0));if(!/^-?\\d+$/.test(a))return null;if(16>a.length)Sa(Number(a));else if(Ua)a=BigInt(a),G=Number(a&BigInt(4294967295))>>>0,H=Number(a>>BigInt(32)&BigInt(4294967295));else{var b=+(\"-\"===a[0]);H=G=0;for(var c=a.length,d=b,e=(c-b)%6+b;e<=c;d=e,e+=6)d=Number(a.slice(d,e)),H*=1E6,G=1E6*G+d,4294967296<=G&&(H+=G/4294967296|0,G%=4294967296);b&&(b=A(Ta(G,H)),a=b.next().value,b=b.next().value,G=a,H=b)}return new Va(G,H)}var Xa;function Ya(a,b){return Error(\"Invalid wire type: \"+a+\" (at position \"+b+\")\")}function Za(){return Error(\"Failed to read varint, encoding is invalid.\")}function $a(a,b){return Error(\"Tried to read past the end of the data \"+b+\" > \"+a)};function K(){throw Error(\"Invalid UTF8\");}function ab(a,b){b=String.fromCharCode.apply(null,b);return null==a?b:a+b}var bb=void 0,cb,db=\"undefined\"!==typeof TextDecoder,eb,fb=\"undefined\"!==typeof TextEncoder;var gb;function hb(a){if(a!==Qa)throw Error(\"illegal external caller\");}function ib(a,b){hb(b);this.V=a;if(null!=a&&0===a.length)throw Error(\"ByteString should be constructed with non-empty values\");}function jb(){return gb||(gb=new ib(null,Qa))}function kb(a){hb(Qa);var b=a.V;b=null==b||Ia&&null!=b&&b instanceof Uint8Array?b:\"string\"===typeof b?Na(b):null;return null==b?b:a.V=b};function lb(a){if(\"string\"===typeof a)return{buffer:Na(a),C:!1};if(Array.isArray(a))return{buffer:new Uint8Array(a),C:!1};if(a.constructor===Uint8Array)return{buffer:a,C:!1};if(a.constructor===ArrayBuffer)return{buffer:new Uint8Array(a),C:!1};if(a.constructor===ib)return{buffer:kb(a)||Pa(),C:!0};if(a instanceof Uint8Array)return{buffer:new Uint8Array(a.buffer,a.byteOffset,a.byteLength),C:!1};throw Error(\"Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, a ByteString or an Array of numbers\");\n};function mb(a,b){this.i=null;this.m=!1;this.h=this.j=this.l=0;nb(this,a,b)}function nb(a,b,c){c=void 0===c?{}:c;a.S=void 0===c.S?!1:c.S;b&&(b=lb(b),a.i=b.buffer,a.m=b.C,a.l=0,a.j=a.i.length,a.h=a.l)}mb.prototype.reset=function(){this.h=this.l};function L(a,b){a.h=b;if(b>a.j)throw $a(a.j,b);}\nfunction ob(a){var b=a.i,c=a.h,d=b[c++],e=d&127;if(d&128&&(d=b[c++],e|=(d&127)<<7,d&128&&(d=b[c++],e|=(d&127)<<14,d&128&&(d=b[c++],e|=(d&127)<<21,d&128&&(d=b[c++],e|=d<<28,d&128&&b[c++]&128&&b[c++]&128&&b[c++]&128&&b[c++]&128&&b[c++]&128)))))throw Za();L(a,c);return e}function pb(a,b){if(0>b)throw Error(\"Tried to read a negative byte length: \"+b);var c=a.h,d=c+b;if(d>a.j)throw $a(b,a.j-c);a.h=d;return c}var qb=[];function rb(){this.h=[]}rb.prototype.length=function(){return this.h.length};rb.prototype.end=function(){var a=this.h;this.h=[];return a};function sb(a,b,c){for(;0>>7|c<<25)>>>0,c>>>=7;a.h.push(b)}function M(a,b){for(;127>>=7;a.h.push(b)};function tb(a,b){if(qb.length){var c=qb.pop();nb(c,a,b);a=c}else a=new mb(a,b);this.h=a;this.j=this.h.h;this.i=this.l=-1;this.setOptions(b)}tb.prototype.setOptions=function(a){a=void 0===a?{}:a;this.ca=void 0===a.ca?!1:a.ca};tb.prototype.reset=function(){this.h.reset();this.j=this.h.h;this.i=this.l=-1};\nfunction ub(a){var b=a.h;if(b.h==b.j)return!1;a.j=a.h.h;var c=ob(a.h)>>>0;b=c>>>3;c&=7;if(!(0<=c&&5>=c))throw Ya(c,a.j);if(1>b)throw Error(\"Invalid field number: \"+b+\" (at position \"+a.j+\")\");a.l=b;a.i=c;return!0}\nfunction vb(a){switch(a.i){case 0:if(0!=a.i)vb(a);else a:{a=a.h;for(var b=a.h,c=b+10,d=a.i;b>>0,a=a.h,L(a,a.h+b));break;case 5:a=a.h;L(a,a.h+4);break;case 3:b=a.l;do{if(!ub(a))throw Error(\"Unmatched start-group tag: stream EOF\");if(4==a.i){if(a.l!=b)throw Error(\"Unmatched end-group tag\");break}vb(a)}while(1);break;default:throw Ya(a.i,a.j);}}var wb=[];function xb(){this.j=[];this.i=0;this.h=new rb}function N(a,b){0!==b.length&&(a.j.push(b),a.i+=b.length)}function yb(a,b){if(b=b.R){N(a,a.h.end());for(var c=0;c=a.i?a.B?a.B[b]:void 0:a.o[b+a.G]}function U(a,b,c,d){Hb(a);Kb(a,b,c,d)}function Kb(a,b,c,d){a.j&&(a.j=void 0);b>=a.i||d?Jb(a)[b]=c:(a.o[b+a.G]=c,(a=a.B)&&b in a&&delete a[b])}function Lb(a,b,c,d){var e=S(a,b);Array.isArray(e)||(e=Fb);var g=Q(e);g&1||Ab(e);if(d)g&2||P(e,2),c&1||Object.freeze(e);else{d=!(c&2);var f=g&2;c&1||!f?d&&g&16&&!f&&zb(e,16):(e=Ab(Array.prototype.slice.call(e)),Kb(a,b,e))}return e}\nfunction Mb(a,b){var c=S(a,b);var d=null==c?c:\"number\"===typeof c||\"NaN\"===c||\"Infinity\"===c||\"-Infinity\"===c?Number(c):void 0;null!=d&&d!==c&&Kb(a,b,d);return d}\nfunction Nb(a,b,c,d,e){a.h||(a.h={});var g=a.h[c],f=Lb(a,c,3,e);if(!g){var h=f;g=[];var k=!!(Q(a.o)&16);f=!!(Q(h)&2);var l=h;!e&&f&&(h=Array.prototype.slice.call(h));for(var m=f,r=0;rf&&\"number\"!==typeof a[f]){var h=a[f++];c(b,h)}for(;f>>0;a=2*(f>>31)+1;g=f>>>23&255;f&=8388607;U(b,c,255==g?f?NaN:Infinity*a:0==g?a*Math.pow(2,-149)*f:a*Math.pow(2,g-150)*(f+Math.pow(2,23)));return!0},function(a,b,c){b=Mb(b,c);if(null!=b){M(a.h,8*c+5);a=a.h;var d=+b;0===d?0<1/d?G=H=0:(H=0,G=2147483648):isNaN(d)?(H=0,G=2147483647):(d=(c=0>d?-2147483648:0)?-d:d,3.4028234663852886E38>>\n0):1.1754943508222875E-38>d?(d=Math.round(d/Math.pow(2,-149)),H=0,G=(c|d)>>>0):(b=Math.floor(Math.log(d)/Math.LN2),d*=Math.pow(2,-b),d=Math.round(8388608*d),16777216<=d&&++b,H=0,G=(c|b+127<<23|d&8388607)>>>0));c=G;a.h.push(c>>>0&255);a.h.push(c>>>8&255);a.h.push(c>>>16&255);a.h.push(c>>>24&255)}}),Bc=Ac(function(a,b,c){if(0!==a.i)return!1;var d=a.h,e=0,g=a=0,f=d.i,h=d.h;do{var k=f[h++];e|=(k&127)<g&&k&128);32>4);for(g=3;32>g&&k&128;g+=7)k=f[h++],a|=(k&127)<k){d=e>>>0;k=a>>>0;if(a=k&2147483648)d=~d+1>>>0,k=~k>>>0,0==d&&(k=k+1>>>0);d=4294967296*k+(d>>>0)}else throw Za();U(b,c,a?-d:d);return!0},function(a,b,c){b=S(b,c);null!=b&&(\"string\"===typeof b&&Wa(b),null!=b&&(M(a.h,8*c),\"number\"===typeof b?(a=a.h,Sa(b),sb(a,G,H)):(c=Wa(b),sb(a.h,c.i,c.h))))}),Cc=Ac(function(a,b,c){if(0!==a.i)return!1;U(b,c,ob(a.h));return!0},function(a,b,c){b=S(b,c);if(null!=b&&null!=b)if(M(a.h,8*c),a=a.h,c=b,0<=c)M(a,c);else{for(b=0;9>b;b++)a.h.push(c&127|128),c>>=7;a.h.push(1)}}),\nDc=Ac(function(a,b,c){if(2!==a.i)return!1;var d=ob(a.h)>>>0;a=a.h;var e=pb(a,d);a=a.i;if(db){var g=a,f;(f=cb)||(f=cb=new TextDecoder(\"utf-8\",{fatal:!0}));a=e+d;g=0===e&&a===g.length?g:g.subarray(e,a);try{var h=f.decode(g)}catch(r){if(void 0===bb){try{f.decode(new Uint8Array([128]))}catch(p){}try{f.decode(new Uint8Array([97])),bb=!0}catch(p){bb=!1}}!bb&&(cb=void 0);throw r;}}else{h=e;d=h+d;e=[];for(var k=null,l,m;hl?e.push(l):224>l?h>=d?K():(m=a[h++],194>l||128!==(m&192)?(h--,K()):\ne.push((l&31)<<6|m&63)):240>l?h>=d-1?K():(m=a[h++],128!==(m&192)||224===l&&160>m||237===l&&160<=m||128!==((g=a[h++])&192)?(h--,K()):e.push((l&15)<<12|(m&63)<<6|g&63)):244>=l?h>=d-2?K():(m=a[h++],128!==(m&192)||0!==(l<<28)+(m-144)>>30||128!==((g=a[h++])&192)||128!==((f=a[h++])&192)?(h--,K()):(l=(l&7)<<18|(m&63)<<12|(g&63)<<6|f&63,l-=65536,e.push((l>>10&1023)+55296,(l&1023)+56320))):K(),8192<=e.length&&(k=ab(k,e),e.length=0);h=ab(k,e)}U(b,c,h);return!0},function(a,b,c){b=S(b,c);if(null!=b){var d=!1;\nd=void 0===d?!1:d;if(fb){if(d&&/(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])/.test(b))throw Error(\"Found an unpaired surrogate\");b=(eb||(eb=new TextEncoder)).encode(b)}else{for(var e=0,g=new Uint8Array(3*b.length),f=0;fh)g[e++]=h;else{if(2048>h)g[e++]=h>>6|192;else{if(55296<=h&&57343>=h){if(56319>=h&&f=k){h=1024*(h-55296)+k-56320+65536;g[e++]=h>>18|240;g[e++]=h>>12&63|128;\ng[e++]=h>>6&63|128;g[e++]=h&63|128;continue}else f--}if(d)throw Error(\"Found an unpaired surrogate\");h=65533}g[e++]=h>>12|224;g[e++]=h>>6&63|128}g[e++]=h&63|128}}b=e===g.length?g:g.subarray(0,e)}M(a.h,8*c+2);M(a.h,b.length);N(a,a.h.end());N(a,b)}}),Ec=Ac(function(a,b,c,d,e){if(2!==a.i)return!1;b=Qb(b,c,d);c=a.h.j;d=ob(a.h)>>>0;var g=a.h.h+d,f=g-c;0>=f&&(a.h.j=g,e(b,a,void 0,void 0,void 0),f=g-a.h.h);if(f)throw Error(\"Message parsing ended unexpectedly. Expected to read \"+(d+\" bytes, instead read \"+\n(d-f)+\" bytes, either the data ended unexpectedly or the message misreported its own length\"));a.h.h=g;a.h.j=c;return!0},function(a,b,c,d,e){b=Ob(b,d,c);if(null!=b)for(d=0;d>>=7,f.i++;g.push(h);f.i++}});function Fc(a){return function(b,c){a:{if(wb.length){var d=wb.pop();d.setOptions(c);nb(d.h,b,c);b=d}else b=new tb(b,c);try{var e=hc(a);var g=ic(new e.P,b,e);break a}finally{e=b.h,e.i=null,e.m=!1,e.l=0,e.j=0,e.h=0,e.S=!1,b.l=-1,b.i=-1,100>wb.length&&wb.push(b)}g=void 0}return g}}function Gc(a){return function(){var b=new xb;rc(this,b,qc(a));N(b,b.h.end());for(var c=new Uint8Array(b.i),d=b.j,e=d.length,g=0,f=0;f local > process. */\n Hub.prototype.getStackTop = function () {\n return this._stack[this._stack.length - 1];\n };\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n Hub.prototype.captureException = function (exception, hint) {\n var eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n var finalHint = hint;\n // If there's no explicit hint provided, mimic the same thing that would happen\n // in the minimal itself to create a consistent behavior.\n // We don't do this in the client, as it's the lowest level API, and doing this,\n // would prevent user from having full control over direct calls.\n if (!hint) {\n var syntheticException = void 0;\n try {\n throw new Error('Sentry syntheticException');\n }\n catch (exception) {\n syntheticException = exception;\n }\n finalHint = {\n originalException: exception,\n syntheticException: syntheticException,\n };\n }\n this._invokeClient('captureException', exception, __assign(__assign({}, finalHint), { event_id: eventId }));\n return eventId;\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.captureMessage = function (message, level, hint) {\n var eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n var finalHint = hint;\n // If there's no explicit hint provided, mimic the same thing that would happen\n // in the minimal itself to create a consistent behavior.\n // We don't do this in the client, as it's the lowest level API, and doing this,\n // would prevent user from having full control over direct calls.\n if (!hint) {\n var syntheticException = void 0;\n try {\n throw new Error(message);\n }\n catch (exception) {\n syntheticException = exception;\n }\n finalHint = {\n originalException: message,\n syntheticException: syntheticException,\n };\n }\n this._invokeClient('captureMessage', message, level, __assign(__assign({}, finalHint), { event_id: eventId }));\n return eventId;\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.captureEvent = function (event, hint) {\n var eventId = hint && hint.event_id ? hint.event_id : uuid4();\n if (event.type !== 'transaction') {\n this._lastEventId = eventId;\n }\n this._invokeClient('captureEvent', event, __assign(__assign({}, hint), { event_id: eventId }));\n return eventId;\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.lastEventId = function () {\n return this._lastEventId;\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.addBreadcrumb = function (breadcrumb, hint) {\n var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n if (!scope || !client)\n return;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var _b = (client.getOptions && client.getOptions()) || {}, _c = _b.beforeBreadcrumb, beforeBreadcrumb = _c === void 0 ? null : _c, _d = _b.maxBreadcrumbs, maxBreadcrumbs = _d === void 0 ? DEFAULT_BREADCRUMBS : _d;\n if (maxBreadcrumbs <= 0)\n return;\n var timestamp = dateTimestampInSeconds();\n var mergedBreadcrumb = __assign({ timestamp: timestamp }, breadcrumb);\n var finalBreadcrumb = beforeBreadcrumb\n ? consoleSandbox(function () { return beforeBreadcrumb(mergedBreadcrumb, hint); })\n : mergedBreadcrumb;\n if (finalBreadcrumb === null)\n return;\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.setUser = function (user) {\n var scope = this.getScope();\n if (scope)\n scope.setUser(user);\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.setTags = function (tags) {\n var scope = this.getScope();\n if (scope)\n scope.setTags(tags);\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.setExtras = function (extras) {\n var scope = this.getScope();\n if (scope)\n scope.setExtras(extras);\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.setTag = function (key, value) {\n var scope = this.getScope();\n if (scope)\n scope.setTag(key, value);\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.setExtra = function (key, extra) {\n var scope = this.getScope();\n if (scope)\n scope.setExtra(key, extra);\n };\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Hub.prototype.setContext = function (name, context) {\n var scope = this.getScope();\n if (scope)\n scope.setContext(name, context);\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.configureScope = function (callback) {\n var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n if (scope && client) {\n callback(scope);\n }\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.run = function (callback) {\n var oldHub = makeMain(this);\n try {\n callback(this);\n }\n finally {\n makeMain(oldHub);\n }\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.getIntegration = function (integration) {\n var client = this.getClient();\n if (!client)\n return null;\n try {\n return client.getIntegration(integration);\n }\n catch (_oO) {\n IS_DEBUG_BUILD && logger.warn(\"Cannot retrieve integration \" + integration.id + \" from the current Hub\");\n return null;\n }\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.startSpan = function (context) {\n return this._callExtensionMethod('startSpan', context);\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.startTransaction = function (context, customSamplingContext) {\n return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.traceHeaders = function () {\n return this._callExtensionMethod('traceHeaders');\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.captureSession = function (endSession) {\n if (endSession === void 0) { endSession = false; }\n // both send the update and pull the session from the scope\n if (endSession) {\n return this.endSession();\n }\n // only send the update\n this._sendSessionUpdate();\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.endSession = function () {\n var layer = this.getStackTop();\n var scope = layer && layer.scope;\n var session = scope && scope.getSession();\n if (session) {\n session.close();\n }\n this._sendSessionUpdate();\n // the session is over; take it off of the scope\n if (scope) {\n scope.setSession();\n }\n };\n /**\n * @inheritDoc\n */\n Hub.prototype.startSession = function (context) {\n var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n var _b = (client && client.getOptions()) || {}, release = _b.release, environment = _b.environment;\n // Will fetch userAgent if called from browser sdk\n var global = getGlobalObject();\n var userAgent = (global.navigator || {}).userAgent;\n var session = new Session(__assign(__assign(__assign({ release: release,\n environment: environment }, (scope && { user: scope.getUser() })), (userAgent && { userAgent: userAgent })), context));\n if (scope) {\n // End existing session if there's one\n var currentSession = scope.getSession && scope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n currentSession.update({ status: 'exited' });\n }\n this.endSession();\n // Afterwards we set the new session on the scope\n scope.setSession(session);\n }\n return session;\n };\n /**\n * Sends the current Session on the scope\n */\n Hub.prototype._sendSessionUpdate = function () {\n var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n if (!scope)\n return;\n var session = scope.getSession && scope.getSession();\n if (session) {\n if (client && client.captureSession) {\n client.captureSession(session);\n }\n }\n };\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Hub.prototype._invokeClient = function (method) {\n var _a;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var _b = this.getStackTop(), scope = _b.scope, client = _b.client;\n if (client && client[method]) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n (_a = client)[method].apply(_a, __spread(args, [scope]));\n }\n };\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Hub.prototype._callExtensionMethod = function (method) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var carrier = getMainCarrier();\n var sentry = carrier.__SENTRY__;\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n IS_DEBUG_BUILD && logger.warn(\"Extension method \" + method + \" couldn't be found, doing nothing.\");\n };\n return Hub;\n}());\nexport { Hub };\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier() {\n var carrier = getGlobalObject();\n carrier.__SENTRY__ = carrier.__SENTRY__ || {\n extensions: {},\n hub: undefined,\n };\n return carrier;\n}\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nexport function makeMain(hub) {\n var registry = getMainCarrier();\n var oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nexport function getCurrentHub() {\n // Get main carrier (global for every environment)\n var registry = getMainCarrier();\n // If there's no hub, or its an old API, assign a new one\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n }\n // Prefer domains over global if they are there (applicable only to Node environment)\n if (isNodeEnv()) {\n return getHubFromActiveDomain(registry);\n }\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n}\n/**\n * Returns the active domain, if one exists\n * @deprecated No longer used; remove in v7\n * @returns The domain, or undefined if there is no active domain\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getActiveDomain() {\n IS_DEBUG_BUILD && logger.warn('Function `getActiveDomain` is deprecated and will be removed in a future version.');\n var sentry = getMainCarrier().__SENTRY__;\n return sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n}\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry) {\n try {\n var sentry = getMainCarrier().__SENTRY__;\n var activeDomain = sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n // If there's no active domain, just return global hub\n if (!activeDomain) {\n return getHubFromCarrier(registry);\n }\n // If there's no hub on current domain, or it's an old API, assign a new one\n if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n var registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n }\n // Return hub that lives on a domain\n return getHubFromCarrier(activeDomain);\n }\n catch (_Oo) {\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n }\n}\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nexport function getHubFromCarrier(carrier) {\n return getGlobalSingleton('hub', function () { return new Hub(); }, carrier);\n}\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nexport function setHubOnCarrier(carrier, hub) {\n if (!carrier)\n return false;\n var __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n __SENTRY__.hub = hub;\n return true;\n}\n//# sourceMappingURL=hub.js.map","import { __assign, __read, __spread } from \"tslib\";\nimport { dateTimestampInSeconds, getGlobalSingleton, isPlainObject, isThenable, SyncPromise } from '@sentry/utils';\n/**\n * Absolute maximum number of breadcrumbs added to an event.\n * The `maxBreadcrumbs` option cannot be higher than this value.\n */\nvar MAX_BREADCRUMBS = 100;\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nvar Scope = /** @class */ (function () {\n function Scope() {\n /** Flag if notifying is happening. */\n this._notifyingListeners = false;\n /** Callback for client to receive scope changes. */\n this._scopeListeners = [];\n /** Callback list that will be called after {@link applyToEvent}. */\n this._eventProcessors = [];\n /** Array of breadcrumbs. */\n this._breadcrumbs = [];\n /** User */\n this._user = {};\n /** Tags */\n this._tags = {};\n /** Extra */\n this._extra = {};\n /** Contexts */\n this._contexts = {};\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n this._sdkProcessingMetadata = {};\n }\n /**\n * Inherit values from the parent scope.\n * @param scope to clone.\n */\n Scope.clone = function (scope) {\n var newScope = new Scope();\n if (scope) {\n newScope._breadcrumbs = __spread(scope._breadcrumbs);\n newScope._tags = __assign({}, scope._tags);\n newScope._extra = __assign({}, scope._extra);\n newScope._contexts = __assign({}, scope._contexts);\n newScope._user = scope._user;\n newScope._level = scope._level;\n newScope._span = scope._span;\n newScope._session = scope._session;\n newScope._transactionName = scope._transactionName;\n newScope._fingerprint = scope._fingerprint;\n newScope._eventProcessors = __spread(scope._eventProcessors);\n newScope._requestSession = scope._requestSession;\n }\n return newScope;\n };\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n Scope.prototype.addScopeListener = function (callback) {\n this._scopeListeners.push(callback);\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.addEventProcessor = function (callback) {\n this._eventProcessors.push(callback);\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setUser = function (user) {\n this._user = user || {};\n if (this._session) {\n this._session.update({ user: user });\n }\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.getUser = function () {\n return this._user;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.getRequestSession = function () {\n return this._requestSession;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setRequestSession = function (requestSession) {\n this._requestSession = requestSession;\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setTags = function (tags) {\n this._tags = __assign(__assign({}, this._tags), tags);\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setTag = function (key, value) {\n var _a;\n this._tags = __assign(__assign({}, this._tags), (_a = {}, _a[key] = value, _a));\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setExtras = function (extras) {\n this._extra = __assign(__assign({}, this._extra), extras);\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setExtra = function (key, extra) {\n var _a;\n this._extra = __assign(__assign({}, this._extra), (_a = {}, _a[key] = extra, _a));\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setFingerprint = function (fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setLevel = function (level) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setTransactionName = function (name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n };\n /**\n * Can be removed in major version.\n * @deprecated in favor of {@link this.setTransactionName}\n */\n Scope.prototype.setTransaction = function (name) {\n return this.setTransactionName(name);\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setContext = function (key, context) {\n var _a;\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n }\n else {\n this._contexts = __assign(__assign({}, this._contexts), (_a = {}, _a[key] = context, _a));\n }\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setSpan = function (span) {\n this._span = span;\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.getSpan = function () {\n return this._span;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.getTransaction = function () {\n // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n // have a pointer to the currently-active transaction.\n var span = this.getSpan();\n return span && span.transaction;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.setSession = function (session) {\n if (!session) {\n delete this._session;\n }\n else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.getSession = function () {\n return this._session;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.update = function (captureContext) {\n if (!captureContext) {\n return this;\n }\n if (typeof captureContext === 'function') {\n var updatedScope = captureContext(this);\n return updatedScope instanceof Scope ? updatedScope : this;\n }\n if (captureContext instanceof Scope) {\n this._tags = __assign(__assign({}, this._tags), captureContext._tags);\n this._extra = __assign(__assign({}, this._extra), captureContext._extra);\n this._contexts = __assign(__assign({}, this._contexts), captureContext._contexts);\n if (captureContext._user && Object.keys(captureContext._user).length) {\n this._user = captureContext._user;\n }\n if (captureContext._level) {\n this._level = captureContext._level;\n }\n if (captureContext._fingerprint) {\n this._fingerprint = captureContext._fingerprint;\n }\n if (captureContext._requestSession) {\n this._requestSession = captureContext._requestSession;\n }\n }\n else if (isPlainObject(captureContext)) {\n // eslint-disable-next-line no-param-reassign\n captureContext = captureContext;\n this._tags = __assign(__assign({}, this._tags), captureContext.tags);\n this._extra = __assign(__assign({}, this._extra), captureContext.extra);\n this._contexts = __assign(__assign({}, this._contexts), captureContext.contexts);\n if (captureContext.user) {\n this._user = captureContext.user;\n }\n if (captureContext.level) {\n this._level = captureContext.level;\n }\n if (captureContext.fingerprint) {\n this._fingerprint = captureContext.fingerprint;\n }\n if (captureContext.requestSession) {\n this._requestSession = captureContext.requestSession;\n }\n }\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.clear = function () {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.addBreadcrumb = function (breadcrumb, maxBreadcrumbs) {\n var maxCrumbs = typeof maxBreadcrumbs === 'number' ? Math.min(maxBreadcrumbs, MAX_BREADCRUMBS) : MAX_BREADCRUMBS;\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n var mergedBreadcrumb = __assign({ timestamp: dateTimestampInSeconds() }, breadcrumb);\n this._breadcrumbs = __spread(this._breadcrumbs, [mergedBreadcrumb]).slice(-maxCrumbs);\n this._notifyScopeListeners();\n return this;\n };\n /**\n * @inheritDoc\n */\n Scope.prototype.clearBreadcrumbs = function () {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n };\n /**\n * Applies the current context and fingerprint to the event.\n * Note that breadcrumbs will be added by the client.\n * Also if the event has already breadcrumbs on it, we do not merge them.\n * @param event Event\n * @param hint May contain additional information about the original exception.\n * @hidden\n */\n Scope.prototype.applyToEvent = function (event, hint) {\n if (this._extra && Object.keys(this._extra).length) {\n event.extra = __assign(__assign({}, this._extra), event.extra);\n }\n if (this._tags && Object.keys(this._tags).length) {\n event.tags = __assign(__assign({}, this._tags), event.tags);\n }\n if (this._user && Object.keys(this._user).length) {\n event.user = __assign(__assign({}, this._user), event.user);\n }\n if (this._contexts && Object.keys(this._contexts).length) {\n event.contexts = __assign(__assign({}, this._contexts), event.contexts);\n }\n if (this._level) {\n event.level = this._level;\n }\n if (this._transactionName) {\n event.transaction = this._transactionName;\n }\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (this._span) {\n event.contexts = __assign({ trace: this._span.getTraceContext() }, event.contexts);\n var transactionName = this._span.transaction && this._span.transaction.name;\n if (transactionName) {\n event.tags = __assign({ transaction: transactionName }, event.tags);\n }\n }\n this._applyFingerprint(event);\n event.breadcrumbs = __spread((event.breadcrumbs || []), this._breadcrumbs);\n event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n event.sdkProcessingMetadata = this._sdkProcessingMetadata;\n return this._notifyEventProcessors(__spread(getGlobalEventProcessors(), this._eventProcessors), event, hint);\n };\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry\n */\n Scope.prototype.setSDKProcessingMetadata = function (newData) {\n this._sdkProcessingMetadata = __assign(__assign({}, this._sdkProcessingMetadata), newData);\n return this;\n };\n /**\n * This will be called after {@link applyToEvent} is finished.\n */\n Scope.prototype._notifyEventProcessors = function (processors, event, hint, index) {\n var _this = this;\n if (index === void 0) { index = 0; }\n return new SyncPromise(function (resolve, reject) {\n var processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n }\n else {\n var result = processor(__assign({}, event), hint);\n if (isThenable(result)) {\n void result\n .then(function (final) { return _this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve); })\n .then(null, reject);\n }\n else {\n void _this._notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n };\n /**\n * This will be called on every set call.\n */\n Scope.prototype._notifyScopeListeners = function () {\n var _this = this;\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(function (callback) {\n callback(_this);\n });\n this._notifyingListeners = false;\n }\n };\n /**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\n Scope.prototype._applyFingerprint = function (event) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint\n ? Array.isArray(event.fingerprint)\n ? event.fingerprint\n : [event.fingerprint]\n : [];\n // If we have something on the scope, then merge it with event\n if (this._fingerprint) {\n event.fingerprint = event.fingerprint.concat(this._fingerprint);\n }\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n };\n return Scope;\n}());\nexport { Scope };\n/**\n * Returns the global event processors.\n */\nfunction getGlobalEventProcessors() {\n return getGlobalSingleton('globalEventProcessors', function () { return []; });\n}\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nexport function addGlobalEventProcessor(callback) {\n getGlobalEventProcessors().push(callback);\n}\n//# sourceMappingURL=scope.js.map","import { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n/**\n * @inheritdoc\n */\nvar Session = /** @class */ (function () {\n function Session(context) {\n this.errors = 0;\n this.sid = uuid4();\n this.duration = 0;\n this.status = 'ok';\n this.init = true;\n this.ignoreDuration = false;\n // Both timestamp and started are in seconds since the UNIX epoch.\n var startingTime = timestampInSeconds();\n this.timestamp = startingTime;\n this.started = startingTime;\n if (context) {\n this.update(context);\n }\n }\n /** JSDoc */\n // eslint-disable-next-line complexity\n Session.prototype.update = function (context) {\n if (context === void 0) { context = {}; }\n if (context.user) {\n if (!this.ipAddress && context.user.ip_address) {\n this.ipAddress = context.user.ip_address;\n }\n if (!this.did && !context.did) {\n this.did = context.user.id || context.user.email || context.user.username;\n }\n }\n this.timestamp = context.timestamp || timestampInSeconds();\n if (context.ignoreDuration) {\n this.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n this.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n this.init = context.init;\n }\n if (!this.did && context.did) {\n this.did = \"\" + context.did;\n }\n if (typeof context.started === 'number') {\n this.started = context.started;\n }\n if (this.ignoreDuration) {\n this.duration = undefined;\n }\n else if (typeof context.duration === 'number') {\n this.duration = context.duration;\n }\n else {\n var duration = this.timestamp - this.started;\n this.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n this.release = context.release;\n }\n if (context.environment) {\n this.environment = context.environment;\n }\n if (!this.ipAddress && context.ipAddress) {\n this.ipAddress = context.ipAddress;\n }\n if (!this.userAgent && context.userAgent) {\n this.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n this.errors = context.errors;\n }\n if (context.status) {\n this.status = context.status;\n }\n };\n /** JSDoc */\n Session.prototype.close = function (status) {\n if (status) {\n this.update({ status: status });\n }\n else if (this.status === 'ok') {\n this.update({ status: 'exited' });\n }\n else {\n this.update();\n }\n };\n /** JSDoc */\n Session.prototype.toJSON = function () {\n return dropUndefinedKeys({\n sid: \"\" + this.sid,\n init: this.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(this.started * 1000).toISOString(),\n timestamp: new Date(this.timestamp * 1000).toISOString(),\n status: this.status,\n errors: this.errors,\n did: typeof this.did === 'number' || typeof this.did === 'string' ? \"\" + this.did : undefined,\n duration: this.duration,\n attrs: {\n release: this.release,\n environment: this.environment,\n ip_address: this.ipAddress,\n user_agent: this.userAgent,\n },\n });\n };\n return Session;\n}());\nexport { Session };\n//# sourceMappingURL=session.js.map","// Store finish reasons in tuple to save on bundle size\n// Readonly type should enforce that this is not mutated.\nexport var FINISH_REASON_TAG = 'finishReason';\nexport var IDLE_TRANSACTION_FINISH_REASONS = ['heartbeatFailed', 'idleTimeout', 'documentHidden'];\n//# sourceMappingURL=constants.js.map","/*\n * This file defines flags and constants that can be modified during compile time in order to facilitate tree shaking\n * for users.\n *\n * Debug flags need to be declared in each package individually and must not be imported across package boundaries,\n * because some build tools have trouble tree-shaking imported guards.\n *\n * As a convention, we define debug flags in a `flags.ts` file in the root of a package's `src` folder.\n *\n * Debug flag files will contain \"magic strings\" like `__SENTRY_DEBUG__` that may get replaced with actual values during\n * our, or the user's build process. Take care when introducing new flags - they must not throw if they are not\n * replaced.\n */\n/** Flag that is true for debug builds, false otherwise. */\nexport var IS_DEBUG_BUILD = typeof __SENTRY_DEBUG__ === 'undefined' ? true : __SENTRY_DEBUG__;\n//# sourceMappingURL=flags.js.map","import { addInstrumentationHandler, logger } from '@sentry/utils';\nimport { IS_DEBUG_BUILD } from './flags';\nimport { getActiveTransaction } from './utils';\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation() {\n addInstrumentationHandler('error', errorCallback);\n addInstrumentationHandler('unhandledrejection', errorCallback);\n}\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback() {\n var activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n var status_1 = 'internal_error';\n IS_DEBUG_BUILD && logger.log(\"[Tracing] Transaction: \" + status_1 + \" -> Global error occured\");\n activeTransaction.setStatus(status_1);\n }\n}\n//# sourceMappingURL=errors.js.map","import { __assign, __read, __spread } from \"tslib\";\nimport { getMainCarrier } from '@sentry/hub';\nimport { dynamicRequire, isNaN, isNodeEnv, loadModule, logger } from '@sentry/utils';\nimport { registerErrorInstrumentation } from './errors';\nimport { IS_DEBUG_BUILD } from './flags';\nimport { IdleTransaction } from './idletransaction';\nimport { Transaction } from './transaction';\nimport { hasTracingEnabled } from './utils';\n/** Returns all trace headers that are currently on the top scope. */\nfunction traceHeaders() {\n var scope = this.getScope();\n if (scope) {\n var span = scope.getSpan();\n if (span) {\n return {\n 'sentry-trace': span.toTraceparent(),\n };\n }\n }\n return {};\n}\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * @param transaction: The transaction needing a sampling decision\n * @param options: The current client's options, so we can access `tracesSampleRate` and/or `tracesSampler`\n * @param samplingContext: Default and user-provided data which may be used to help make the decision\n *\n * @returns The given transaction with its `sampled` value set\n */\nfunction sample(transaction, options, samplingContext) {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n transaction.sampled = false;\n return transaction;\n }\n // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n if (transaction.sampled !== undefined) {\n transaction.setMetadata({\n transactionSampling: { method: 'explicitly_set' },\n });\n return transaction;\n }\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should\n // work; prefer the hook if so\n var sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(samplingContext);\n transaction.setMetadata({\n transactionSampling: {\n method: 'client_sampler',\n // cast to number in case it's a boolean\n rate: Number(sampleRate),\n },\n });\n }\n else if (samplingContext.parentSampled !== undefined) {\n sampleRate = samplingContext.parentSampled;\n transaction.setMetadata({\n transactionSampling: { method: 'inheritance' },\n });\n }\n else {\n sampleRate = options.tracesSampleRate;\n transaction.setMetadata({\n transactionSampling: {\n method: 'client_rate',\n // cast to number in case it's a boolean\n rate: Number(sampleRate),\n },\n });\n }\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n // only valid values are booleans or numbers between 0 and 1.)\n if (!isValidSampleRate(sampleRate)) {\n IS_DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n transaction.sampled = false;\n return transaction;\n }\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!sampleRate) {\n IS_DEBUG_BUILD &&\n logger.log(\"[Tracing] Discarding transaction because \" + (typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'));\n transaction.sampled = false;\n return transaction;\n }\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n transaction.sampled = Math.random() < sampleRate;\n // if we're not going to keep it, we're done\n if (!transaction.sampled) {\n IS_DEBUG_BUILD &&\n logger.log(\"[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = \" + Number(sampleRate) + \")\");\n return transaction;\n }\n IS_DEBUG_BUILD && logger.log(\"[Tracing] starting \" + transaction.op + \" transaction - \" + transaction.name);\n return transaction;\n}\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate) {\n // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNaN(rate) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n IS_DEBUG_BUILD &&\n logger.warn(\"[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got \" + JSON.stringify(rate) + \" of type \" + JSON.stringify(typeof rate) + \".\");\n return false;\n }\n // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n if (rate < 0 || rate > 1) {\n IS_DEBUG_BUILD &&\n logger.warn(\"[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got \" + rate + \".\");\n return false;\n }\n return true;\n}\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(transactionContext, customSamplingContext) {\n var client = this.getClient();\n var options = (client && client.getOptions()) || {};\n var transaction = new Transaction(transactionContext, this);\n transaction = sample(transaction, options, __assign({ parentSampled: transactionContext.parentSampled, transactionContext: transactionContext }, customSamplingContext));\n if (transaction.sampled) {\n transaction.initSpanRecorder(options._experiments && options._experiments.maxSpans);\n }\n return transaction;\n}\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(hub, transactionContext, idleTimeout, onScope, customSamplingContext) {\n var client = hub.getClient();\n var options = (client && client.getOptions()) || {};\n var transaction = new IdleTransaction(transactionContext, hub, idleTimeout, onScope);\n transaction = sample(transaction, options, __assign({ parentSampled: transactionContext.parentSampled, transactionContext: transactionContext }, customSamplingContext));\n if (transaction.sampled) {\n transaction.initSpanRecorder(options._experiments && options._experiments.maxSpans);\n }\n return transaction;\n}\n/**\n * @private\n */\nexport function _addTracingExtensions() {\n var carrier = getMainCarrier();\n if (!carrier.__SENTRY__) {\n return;\n }\n carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n if (!carrier.__SENTRY__.extensions.startTransaction) {\n carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n }\n if (!carrier.__SENTRY__.extensions.traceHeaders) {\n carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n }\n}\n/**\n * @private\n */\nfunction _autoloadDatabaseIntegrations() {\n var carrier = getMainCarrier();\n if (!carrier.__SENTRY__) {\n return;\n }\n var packageToIntegrationMapping = {\n mongodb: function () {\n var integration = dynamicRequire(module, './integrations/node/mongo');\n return new integration.Mongo();\n },\n mongoose: function () {\n var integration = dynamicRequire(module, './integrations/node/mongo');\n return new integration.Mongo({ mongoose: true });\n },\n mysql: function () {\n var integration = dynamicRequire(module, './integrations/node/mysql');\n return new integration.Mysql();\n },\n pg: function () {\n var integration = dynamicRequire(module, './integrations/node/postgres');\n return new integration.Postgres();\n },\n };\n var mappedPackages = Object.keys(packageToIntegrationMapping)\n .filter(function (moduleName) { return !!loadModule(moduleName); })\n .map(function (pkg) {\n try {\n return packageToIntegrationMapping[pkg]();\n }\n catch (e) {\n return undefined;\n }\n })\n .filter(function (p) { return p; });\n if (mappedPackages.length > 0) {\n carrier.__SENTRY__.integrations = __spread((carrier.__SENTRY__.integrations || []), mappedPackages);\n }\n}\n/**\n * This patches the global object and injects the Tracing extensions methods\n */\nexport function addExtensionMethods() {\n _addTracingExtensions();\n // Detect and automatically load specified integrations.\n if (isNodeEnv()) {\n _autoloadDatabaseIntegrations();\n }\n // If an error happens globally, we should make sure transaction status is set to error.\n registerErrorInstrumentation();\n}\n//# sourceMappingURL=hubextensions.js.map","import { __extends, __values } from \"tslib\";\nimport { logger, timestampWithMs } from '@sentry/utils';\nimport { FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS } from './constants';\nimport { IS_DEBUG_BUILD } from './flags';\nimport { SpanRecorder } from './span';\nimport { Transaction } from './transaction';\nexport var DEFAULT_IDLE_TIMEOUT = 1000;\nexport var HEARTBEAT_INTERVAL = 5000;\n/**\n * @inheritDoc\n */\nvar IdleTransactionSpanRecorder = /** @class */ (function (_super) {\n __extends(IdleTransactionSpanRecorder, _super);\n function IdleTransactionSpanRecorder(_pushActivity, _popActivity, transactionSpanId, maxlen) {\n if (transactionSpanId === void 0) { transactionSpanId = ''; }\n var _this = _super.call(this, maxlen) || this;\n _this._pushActivity = _pushActivity;\n _this._popActivity = _popActivity;\n _this.transactionSpanId = transactionSpanId;\n return _this;\n }\n /**\n * @inheritDoc\n */\n IdleTransactionSpanRecorder.prototype.add = function (span) {\n var _this = this;\n // We should make sure we do not push and pop activities for\n // the transaction that this span recorder belongs to.\n if (span.spanId !== this.transactionSpanId) {\n // We patch span.finish() to pop an activity after setting an endTimestamp.\n span.finish = function (endTimestamp) {\n span.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampWithMs();\n _this._popActivity(span.spanId);\n };\n // We should only push new activities if the span does not have an end timestamp.\n if (span.endTimestamp === undefined) {\n this._pushActivity(span.spanId);\n }\n }\n _super.prototype.add.call(this, span);\n };\n return IdleTransactionSpanRecorder;\n}(SpanRecorder));\nexport { IdleTransactionSpanRecorder };\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nvar IdleTransaction = /** @class */ (function (_super) {\n __extends(IdleTransaction, _super);\n function IdleTransaction(transactionContext, _idleHub, \n /**\n * The time to wait in ms until the idle transaction will be finished.\n * @default 1000\n */\n _idleTimeout, \n // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n _onScope) {\n if (_idleTimeout === void 0) { _idleTimeout = DEFAULT_IDLE_TIMEOUT; }\n if (_onScope === void 0) { _onScope = false; }\n var _this = _super.call(this, transactionContext, _idleHub) || this;\n _this._idleHub = _idleHub;\n _this._idleTimeout = _idleTimeout;\n _this._onScope = _onScope;\n // Activities store a list of active spans\n _this.activities = {};\n // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n _this._heartbeatCounter = 0;\n // We should not use heartbeat if we finished a transaction\n _this._finished = false;\n _this._beforeFinishCallbacks = [];\n if (_idleHub && _onScope) {\n // There should only be one active transaction on the scope\n clearActiveTransaction(_idleHub);\n // We set the transaction here on the scope so error events pick up the trace\n // context and attach it to the error.\n IS_DEBUG_BUILD && logger.log(\"Setting idle transaction on scope. Span ID: \" + _this.spanId);\n _idleHub.configureScope(function (scope) { return scope.setSpan(_this); });\n }\n _this._initTimeout = setTimeout(function () {\n if (!_this._finished) {\n _this.finish();\n }\n }, _this._idleTimeout);\n return _this;\n }\n /** {@inheritDoc} */\n IdleTransaction.prototype.finish = function (endTimestamp) {\n var e_1, _a;\n var _this = this;\n if (endTimestamp === void 0) { endTimestamp = timestampWithMs(); }\n this._finished = true;\n this.activities = {};\n if (this.spanRecorder) {\n IS_DEBUG_BUILD &&\n logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestamp * 1000).toISOString(), this.op);\n try {\n for (var _b = __values(this._beforeFinishCallbacks), _c = _b.next(); !_c.done; _c = _b.next()) {\n var callback = _c.value;\n callback(this, endTimestamp);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.spanRecorder.spans = this.spanRecorder.spans.filter(function (span) {\n // If we are dealing with the transaction itself, we just return it\n if (span.spanId === _this.spanId) {\n return true;\n }\n // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n if (!span.endTimestamp) {\n span.endTimestamp = endTimestamp;\n span.setStatus('cancelled');\n IS_DEBUG_BUILD &&\n logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n }\n var keepSpan = span.startTimestamp < endTimestamp;\n if (!keepSpan) {\n IS_DEBUG_BUILD &&\n logger.log('[Tracing] discarding Span since it happened after Transaction was finished', JSON.stringify(span, undefined, 2));\n }\n return keepSpan;\n });\n IS_DEBUG_BUILD && logger.log('[Tracing] flushing IdleTransaction');\n }\n else {\n IS_DEBUG_BUILD && logger.log('[Tracing] No active IdleTransaction');\n }\n // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n if (this._onScope) {\n clearActiveTransaction(this._idleHub);\n }\n return _super.prototype.finish.call(this, endTimestamp);\n };\n /**\n * Register a callback function that gets excecuted before the transaction finishes.\n * Useful for cleanup or if you want to add any additional spans based on current context.\n *\n * This is exposed because users have no other way of running something before an idle transaction\n * finishes.\n */\n IdleTransaction.prototype.registerBeforeFinishCallback = function (callback) {\n this._beforeFinishCallbacks.push(callback);\n };\n /**\n * @inheritDoc\n */\n IdleTransaction.prototype.initSpanRecorder = function (maxlen) {\n var _this = this;\n if (!this.spanRecorder) {\n var pushActivity = function (id) {\n if (_this._finished) {\n return;\n }\n _this._pushActivity(id);\n };\n var popActivity = function (id) {\n if (_this._finished) {\n return;\n }\n _this._popActivity(id);\n };\n this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen);\n // Start heartbeat so that transactions do not run forever.\n IS_DEBUG_BUILD && logger.log('Starting heartbeat');\n this._pingHeartbeat();\n }\n this.spanRecorder.add(this);\n };\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n IdleTransaction.prototype._pushActivity = function (spanId) {\n if (this._initTimeout) {\n clearTimeout(this._initTimeout);\n this._initTimeout = undefined;\n }\n IS_DEBUG_BUILD && logger.log(\"[Tracing] pushActivity: \" + spanId);\n this.activities[spanId] = true;\n IS_DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n };\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n IdleTransaction.prototype._popActivity = function (spanId) {\n var _this = this;\n if (this.activities[spanId]) {\n IS_DEBUG_BUILD && logger.log(\"[Tracing] popActivity \" + spanId);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.activities[spanId];\n IS_DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n if (Object.keys(this.activities).length === 0) {\n var timeout = this._idleTimeout;\n // We need to add the timeout here to have the real endtimestamp of the transaction\n // Remember timestampWithMs is in seconds, timeout is in ms\n var end_1 = timestampWithMs() + timeout / 1000;\n setTimeout(function () {\n if (!_this._finished) {\n _this.setTag(FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS[1]);\n _this.finish(end_1);\n }\n }, timeout);\n }\n };\n /**\n * Checks when entries of this.activities are not changing for 3 beats.\n * If this occurs we finish the transaction.\n */\n IdleTransaction.prototype._beat = function () {\n // We should not be running heartbeat if the idle transaction is finished.\n if (this._finished) {\n return;\n }\n var heartbeatString = Object.keys(this.activities).join('');\n if (heartbeatString === this._prevHeartbeatString) {\n this._heartbeatCounter += 1;\n }\n else {\n this._heartbeatCounter = 1;\n }\n this._prevHeartbeatString = heartbeatString;\n if (this._heartbeatCounter >= 3) {\n IS_DEBUG_BUILD && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n this.setStatus('deadline_exceeded');\n this.setTag(FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS[0]);\n this.finish();\n }\n else {\n this._pingHeartbeat();\n }\n };\n /**\n * Pings the heartbeat\n */\n IdleTransaction.prototype._pingHeartbeat = function () {\n var _this = this;\n IS_DEBUG_BUILD && logger.log(\"pinging Heartbeat -> current counter: \" + this._heartbeatCounter);\n setTimeout(function () {\n _this._beat();\n }, HEARTBEAT_INTERVAL);\n };\n return IdleTransaction;\n}(Transaction));\nexport { IdleTransaction };\n/**\n * Reset transaction on scope to `undefined`\n */\nfunction clearActiveTransaction(hub) {\n if (hub) {\n var scope = hub.getScope();\n if (scope) {\n var transaction = scope.getTransaction();\n if (transaction) {\n scope.setSpan(undefined);\n }\n }\n }\n}\n//# sourceMappingURL=idletransaction.js.map","import { __assign } from \"tslib\";\nimport { dropUndefinedKeys, timestampWithMs, uuid4 } from '@sentry/utils';\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nvar SpanRecorder = /** @class */ (function () {\n function SpanRecorder(maxlen) {\n if (maxlen === void 0) { maxlen = 1000; }\n this.spans = [];\n this._maxlen = maxlen;\n }\n /**\n * This is just so that we don't run out of memory while recording a lot\n * of spans. At some point we just stop and flush out the start of the\n * trace tree (i.e.the first n spans with the smallest\n * start_timestamp).\n */\n SpanRecorder.prototype.add = function (span) {\n if (this.spans.length > this._maxlen) {\n span.spanRecorder = undefined;\n }\n else {\n this.spans.push(span);\n }\n };\n return SpanRecorder;\n}());\nexport { SpanRecorder };\n/**\n * Span contains all data about a span\n */\nvar Span = /** @class */ (function () {\n /**\n * You should never call the constructor manually, always use `Sentry.startTransaction()`\n * or call `startChild()` on an existing span.\n * @internal\n * @hideconstructor\n * @hidden\n */\n function Span(spanContext) {\n /**\n * @inheritDoc\n */\n this.traceId = uuid4();\n /**\n * @inheritDoc\n */\n this.spanId = uuid4().substring(16);\n /**\n * Timestamp in seconds when the span was created.\n */\n this.startTimestamp = timestampWithMs();\n /**\n * @inheritDoc\n */\n this.tags = {};\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.data = {};\n if (!spanContext) {\n return this;\n }\n if (spanContext.traceId) {\n this.traceId = spanContext.traceId;\n }\n if (spanContext.spanId) {\n this.spanId = spanContext.spanId;\n }\n if (spanContext.parentSpanId) {\n this.parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this.sampled = spanContext.sampled;\n }\n if (spanContext.op) {\n this.op = spanContext.op;\n }\n if (spanContext.description) {\n this.description = spanContext.description;\n }\n if (spanContext.data) {\n this.data = spanContext.data;\n }\n if (spanContext.tags) {\n this.tags = spanContext.tags;\n }\n if (spanContext.status) {\n this.status = spanContext.status;\n }\n if (spanContext.startTimestamp) {\n this.startTimestamp = spanContext.startTimestamp;\n }\n if (spanContext.endTimestamp) {\n this.endTimestamp = spanContext.endTimestamp;\n }\n }\n /**\n * @inheritDoc\n * @deprecated\n */\n Span.prototype.child = function (spanContext) {\n return this.startChild(spanContext);\n };\n /**\n * @inheritDoc\n */\n Span.prototype.startChild = function (spanContext) {\n var childSpan = new Span(__assign(__assign({}, spanContext), { parentSpanId: this.spanId, sampled: this.sampled, traceId: this.traceId }));\n childSpan.spanRecorder = this.spanRecorder;\n if (childSpan.spanRecorder) {\n childSpan.spanRecorder.add(childSpan);\n }\n childSpan.transaction = this.transaction;\n return childSpan;\n };\n /**\n * @inheritDoc\n */\n Span.prototype.setTag = function (key, value) {\n var _a;\n this.tags = __assign(__assign({}, this.tags), (_a = {}, _a[key] = value, _a));\n return this;\n };\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n Span.prototype.setData = function (key, value) {\n var _a;\n this.data = __assign(__assign({}, this.data), (_a = {}, _a[key] = value, _a));\n return this;\n };\n /**\n * @inheritDoc\n */\n Span.prototype.setStatus = function (value) {\n this.status = value;\n return this;\n };\n /**\n * @inheritDoc\n */\n Span.prototype.setHttpStatus = function (httpStatus) {\n this.setTag('http.status_code', String(httpStatus));\n var spanStatus = spanStatusfromHttpCode(httpStatus);\n if (spanStatus !== 'unknown_error') {\n this.setStatus(spanStatus);\n }\n return this;\n };\n /**\n * @inheritDoc\n */\n Span.prototype.isSuccess = function () {\n return this.status === 'ok';\n };\n /**\n * @inheritDoc\n */\n Span.prototype.finish = function (endTimestamp) {\n this.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampWithMs();\n };\n /**\n * @inheritDoc\n */\n Span.prototype.toTraceparent = function () {\n var sampledString = '';\n if (this.sampled !== undefined) {\n sampledString = this.sampled ? '-1' : '-0';\n }\n return this.traceId + \"-\" + this.spanId + sampledString;\n };\n /**\n * @inheritDoc\n */\n Span.prototype.toContext = function () {\n return dropUndefinedKeys({\n data: this.data,\n description: this.description,\n endTimestamp: this.endTimestamp,\n op: this.op,\n parentSpanId: this.parentSpanId,\n sampled: this.sampled,\n spanId: this.spanId,\n startTimestamp: this.startTimestamp,\n status: this.status,\n tags: this.tags,\n traceId: this.traceId,\n });\n };\n /**\n * @inheritDoc\n */\n Span.prototype.updateWithContext = function (spanContext) {\n var _a, _b, _c, _d, _e;\n this.data = (_a = spanContext.data, (_a !== null && _a !== void 0 ? _a : {}));\n this.description = spanContext.description;\n this.endTimestamp = spanContext.endTimestamp;\n this.op = spanContext.op;\n this.parentSpanId = spanContext.parentSpanId;\n this.sampled = spanContext.sampled;\n this.spanId = (_b = spanContext.spanId, (_b !== null && _b !== void 0 ? _b : this.spanId));\n this.startTimestamp = (_c = spanContext.startTimestamp, (_c !== null && _c !== void 0 ? _c : this.startTimestamp));\n this.status = spanContext.status;\n this.tags = (_d = spanContext.tags, (_d !== null && _d !== void 0 ? _d : {}));\n this.traceId = (_e = spanContext.traceId, (_e !== null && _e !== void 0 ? _e : this.traceId));\n return this;\n };\n /**\n * @inheritDoc\n */\n Span.prototype.getTraceContext = function () {\n return dropUndefinedKeys({\n data: Object.keys(this.data).length > 0 ? this.data : undefined,\n description: this.description,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this.spanId,\n status: this.status,\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n trace_id: this.traceId,\n });\n };\n /**\n * @inheritDoc\n */\n Span.prototype.toJSON = function () {\n return dropUndefinedKeys({\n data: Object.keys(this.data).length > 0 ? this.data : undefined,\n description: this.description,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this.spanId,\n start_timestamp: this.startTimestamp,\n status: this.status,\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n timestamp: this.endTimestamp,\n trace_id: this.traceId,\n });\n };\n return Span;\n}());\nexport { Span };\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport function spanStatusfromHttpCode(httpStatus) {\n if (httpStatus < 400 && httpStatus >= 100) {\n return 'ok';\n }\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return 'unauthenticated';\n case 403:\n return 'permission_denied';\n case 404:\n return 'not_found';\n case 409:\n return 'already_exists';\n case 413:\n return 'failed_precondition';\n case 429:\n return 'resource_exhausted';\n default:\n return 'invalid_argument';\n }\n }\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return 'unimplemented';\n case 503:\n return 'unavailable';\n case 504:\n return 'deadline_exceeded';\n default:\n return 'internal_error';\n }\n }\n return 'unknown_error';\n}\n//# sourceMappingURL=span.js.map","import { __assign, __extends } from \"tslib\";\nimport { getCurrentHub, Hub } from '@sentry/hub';\nimport { dropUndefinedKeys, isInstanceOf, logger } from '@sentry/utils';\nimport { IS_DEBUG_BUILD } from './flags';\nimport { Span as SpanClass, SpanRecorder } from './span';\n/** JSDoc */\nvar Transaction = /** @class */ (function (_super) {\n __extends(Transaction, _super);\n /**\n * This constructor should never be called manually. Those instrumenting tracing should use\n * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n * @internal\n * @hideconstructor\n * @hidden\n */\n function Transaction(transactionContext, hub) {\n var _this = _super.call(this, transactionContext) || this;\n _this._measurements = {};\n /**\n * The reference to the current hub.\n */\n _this._hub = getCurrentHub();\n if (isInstanceOf(hub, Hub)) {\n _this._hub = hub;\n }\n _this.name = transactionContext.name || '';\n _this.metadata = transactionContext.metadata || {};\n _this._trimEnd = transactionContext.trimEnd;\n // this is because transactions are also spans, and spans have a transaction pointer\n _this.transaction = _this;\n return _this;\n }\n /**\n * JSDoc\n */\n Transaction.prototype.setName = function (name) {\n this.name = name;\n };\n /**\n * Attaches SpanRecorder to the span itself\n * @param maxlen maximum number of spans that can be recorded\n */\n Transaction.prototype.initSpanRecorder = function (maxlen) {\n if (maxlen === void 0) { maxlen = 1000; }\n if (!this.spanRecorder) {\n this.spanRecorder = new SpanRecorder(maxlen);\n }\n this.spanRecorder.add(this);\n };\n /**\n * Set observed measurements for this transaction.\n * @hidden\n */\n Transaction.prototype.setMeasurements = function (measurements) {\n this._measurements = __assign({}, measurements);\n };\n /**\n * Set metadata for this transaction.\n * @hidden\n */\n Transaction.prototype.setMetadata = function (newMetadata) {\n this.metadata = __assign(__assign({}, this.metadata), newMetadata);\n };\n /**\n * @inheritDoc\n */\n Transaction.prototype.finish = function (endTimestamp) {\n var _this = this;\n // This transaction is already finished, so we should not flush it again.\n if (this.endTimestamp !== undefined) {\n return undefined;\n }\n if (!this.name) {\n IS_DEBUG_BUILD && logger.warn('Transaction has no name, falling back to ``.');\n this.name = '';\n }\n // just sets the end timestamp\n _super.prototype.finish.call(this, endTimestamp);\n if (this.sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n IS_DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n var client = this._hub.getClient();\n var transport = client && client.getTransport && client.getTransport();\n if (transport && transport.recordLostEvent) {\n transport.recordLostEvent('sample_rate', 'transaction');\n }\n return undefined;\n }\n var finishedSpans = this.spanRecorder ? this.spanRecorder.spans.filter(function (s) { return s !== _this && s.endTimestamp; }) : [];\n if (this._trimEnd && finishedSpans.length > 0) {\n this.endTimestamp = finishedSpans.reduce(function (prev, current) {\n if (prev.endTimestamp && current.endTimestamp) {\n return prev.endTimestamp > current.endTimestamp ? prev : current;\n }\n return prev;\n }).endTimestamp;\n }\n var transaction = {\n contexts: {\n trace: this.getTraceContext(),\n },\n spans: finishedSpans,\n start_timestamp: this.startTimestamp,\n tags: this.tags,\n timestamp: this.endTimestamp,\n transaction: this.name,\n type: 'transaction',\n sdkProcessingMetadata: this.metadata,\n };\n var hasMeasurements = Object.keys(this._measurements).length > 0;\n if (hasMeasurements) {\n IS_DEBUG_BUILD &&\n logger.log('[Measurements] Adding measurements to transaction', JSON.stringify(this._measurements, undefined, 2));\n transaction.measurements = this._measurements;\n }\n IS_DEBUG_BUILD && logger.log(\"[Tracing] Finishing \" + this.op + \" transaction: \" + this.name + \".\");\n return this._hub.captureEvent(transaction);\n };\n /**\n * @inheritDoc\n */\n Transaction.prototype.toContext = function () {\n var spanContext = _super.prototype.toContext.call(this);\n return dropUndefinedKeys(__assign(__assign({}, spanContext), { name: this.name, trimEnd: this._trimEnd }));\n };\n /**\n * @inheritDoc\n */\n Transaction.prototype.updateWithContext = function (transactionContext) {\n var _a;\n _super.prototype.updateWithContext.call(this, transactionContext);\n this.name = (_a = transactionContext.name, (_a !== null && _a !== void 0 ? _a : ''));\n this._trimEnd = transactionContext.trimEnd;\n return this;\n };\n return Transaction;\n}(SpanClass));\nexport { Transaction };\n//# sourceMappingURL=transaction.js.map","import { getCurrentHub } from '@sentry/hub';\n/**\n * The `extractTraceparentData` function and `TRACEPARENT_REGEXP` constant used\n * to be declared in this file. It was later moved into `@sentry/utils` as part of a\n * move to remove `@sentry/tracing` dependencies from `@sentry/node` (`extractTraceparentData`\n * is the only tracing function used by `@sentry/node`).\n *\n * These exports are kept here for backwards compatability's sake.\n *\n * TODO(v7): Reorganize these exports\n *\n * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n */\nexport { TRACEPARENT_REGEXP, extractTraceparentData } from '@sentry/utils';\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nexport function hasTracingEnabled(maybeOptions) {\n var client = getCurrentHub().getClient();\n var options = maybeOptions || (client && client.getOptions());\n return !!options && ('tracesSampleRate' in options || 'tracesSampler' in options);\n}\n/** Grabs active transaction off scope, if any */\nexport function getActiveTransaction(maybeHub) {\n var hub = maybeHub || getCurrentHub();\n var scope = hub.getScope();\n return scope && scope.getTransaction();\n}\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nexport function msToSec(time) {\n return time / 1000;\n}\n/**\n * Converts from seconds to milliseconds\n * @param time time in seconds\n */\nexport function secToMs(time) {\n return time * 1000;\n}\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n//# sourceMappingURL=utils.js.map","import { getGlobalObject } from './global';\nimport { isString } from './is';\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(elem, keyAttrs) {\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n var currentElem = elem;\n var MAX_TRAVERSE_HEIGHT = 5;\n var MAX_OUTPUT_LEN = 80;\n var out = [];\n var height = 0;\n var len = 0;\n var separator = ' > ';\n var sepLength = separator.length;\n var nextStr = void 0;\n // eslint-disable-next-line no-plusplus\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)) {\n break;\n }\n out.push(nextStr);\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n return out.reverse().join(separator);\n }\n catch (_oO) {\n return '';\n }\n}\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n var elem = el;\n var out = [];\n var className;\n var classes;\n var key;\n var attr;\n var i;\n if (!elem || !elem.tagName) {\n return '';\n }\n out.push(elem.tagName.toLowerCase());\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n var keyAttrPairs = keyAttrs && keyAttrs.length\n ? keyAttrs.filter(function (keyAttr) { return elem.getAttribute(keyAttr); }).map(function (keyAttr) { return [keyAttr, elem.getAttribute(keyAttr)]; })\n : null;\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(function (keyAttrPair) {\n out.push(\"[\" + keyAttrPair[0] + \"=\\\"\" + keyAttrPair[1] + \"\\\"]\");\n });\n }\n else {\n if (elem.id) {\n out.push(\"#\" + elem.id);\n }\n // eslint-disable-next-line prefer-const\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push(\".\" + classes[i]);\n }\n }\n }\n var allowedAttrs = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push(\"[\" + key + \"=\\\"\" + attr + \"\\\"]\");\n }\n }\n return out.join('');\n}\n/**\n * A safe form of location.href\n */\nexport function getLocationHref() {\n var global = getGlobalObject();\n try {\n return global.document.location.href;\n }\n catch (oO) {\n return '';\n }\n}\n//# sourceMappingURL=browser.js.map","/*\n * This file defines flags and constants that can be modified during compile time in order to facilitate tree shaking\n * for users.\n *\n * Debug flags need to be declared in each package individually and must not be imported across package boundaries,\n * because some build tools have trouble tree-shaking imported guards.\n *\n * As a convention, we define debug flags in a `flags.ts` file in the root of a package's `src` folder.\n *\n * Debug flag files will contain \"magic strings\" like `__SENTRY_DEBUG__` that may get replaced with actual values during\n * our, or the user's build process. Take care when introducing new flags - they must not throw if they are not\n * replaced.\n */\n/** Flag that is true for debug builds, false otherwise. */\nexport var IS_DEBUG_BUILD = typeof __SENTRY_DEBUG__ === 'undefined' ? true : __SENTRY_DEBUG__;\n//# sourceMappingURL=flags.js.map","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\nimport { isNodeEnv } from './node';\nvar fallbackGlobalObject = {};\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nexport function getGlobalObject() {\n return (isNodeEnv()\n ? global\n : typeof window !== 'undefined' // eslint-disable-line no-restricted-globals\n ? window // eslint-disable-line no-restricted-globals\n : typeof self !== 'undefined'\n ? self\n : fallbackGlobalObject);\n}\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `getGlobalObject`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton(name, creator, obj) {\n var global = (obj || getGlobalObject());\n var __SENTRY__ = (global.__SENTRY__ = global.__SENTRY__ || {});\n var singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n return singleton;\n}\n//# sourceMappingURL=global.js.map","import { __assign, __values } from \"tslib\";\nimport { IS_DEBUG_BUILD } from './flags';\nimport { getGlobalObject } from './global';\nimport { isInstanceOf, isString } from './is';\nimport { CONSOLE_LEVELS, logger } from './logger';\nimport { fill } from './object';\nimport { getFunctionName } from './stacktrace';\nimport { supportsHistory, supportsNativeFetch } from './supports';\nvar global = getGlobalObject();\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n * - Console API\n * - Fetch API\n * - XHR API\n * - History API\n * - DOM API (click/typing)\n * - Error API\n * - UnhandledRejection API\n */\nvar handlers = {};\nvar instrumented = {};\n/** Instruments given API */\nfunction instrument(type) {\n if (instrumented[type]) {\n return;\n }\n instrumented[type] = true;\n switch (type) {\n case 'console':\n instrumentConsole();\n break;\n case 'dom':\n instrumentDOM();\n break;\n case 'xhr':\n instrumentXHR();\n break;\n case 'fetch':\n instrumentFetch();\n break;\n case 'history':\n instrumentHistory();\n break;\n case 'error':\n instrumentError();\n break;\n case 'unhandledrejection':\n instrumentUnhandledRejection();\n break;\n default:\n IS_DEBUG_BUILD && logger.warn('unknown instrumentation type:', type);\n return;\n }\n}\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addInstrumentationHandler(type, callback) {\n handlers[type] = handlers[type] || [];\n handlers[type].push(callback);\n instrument(type);\n}\n/** JSDoc */\nfunction triggerHandlers(type, data) {\n var e_1, _a;\n if (!type || !handlers[type]) {\n return;\n }\n try {\n for (var _b = __values(handlers[type] || []), _c = _b.next(); !_c.done; _c = _b.next()) {\n var handler = _c.value;\n try {\n handler(data);\n }\n catch (e) {\n IS_DEBUG_BUILD &&\n logger.error(\"Error while triggering instrumentation handler.\\nType: \" + type + \"\\nName: \" + getFunctionName(handler) + \"\\nError:\", e);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n}\n/** JSDoc */\nfunction instrumentConsole() {\n if (!('console' in global)) {\n return;\n }\n CONSOLE_LEVELS.forEach(function (level) {\n if (!(level in global.console)) {\n return;\n }\n fill(global.console, level, function (originalConsoleMethod) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n triggerHandlers('console', { args: args, level: level });\n // this fails for some browsers. :(\n if (originalConsoleMethod) {\n originalConsoleMethod.apply(global.console, args);\n }\n };\n });\n });\n}\n/** JSDoc */\nfunction instrumentFetch() {\n if (!supportsNativeFetch()) {\n return;\n }\n fill(global, 'fetch', function (originalFetch) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var handlerData = {\n args: args,\n fetchData: {\n method: getFetchMethod(args),\n url: getFetchUrl(args),\n },\n startTimestamp: Date.now(),\n };\n triggerHandlers('fetch', __assign({}, handlerData));\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(global, args).then(function (response) {\n triggerHandlers('fetch', __assign(__assign({}, handlerData), { endTimestamp: Date.now(), response: response }));\n return response;\n }, function (error) {\n triggerHandlers('fetch', __assign(__assign({}, handlerData), { endTimestamp: Date.now(), error: error }));\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n });\n };\n });\n}\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/** Extract `method` from fetch call arguments */\nfunction getFetchMethod(fetchArgs) {\n if (fetchArgs === void 0) { fetchArgs = []; }\n if ('Request' in global && isInstanceOf(fetchArgs[0], Request) && fetchArgs[0].method) {\n return String(fetchArgs[0].method).toUpperCase();\n }\n if (fetchArgs[1] && fetchArgs[1].method) {\n return String(fetchArgs[1].method).toUpperCase();\n }\n return 'GET';\n}\n/** Extract `url` from fetch call arguments */\nfunction getFetchUrl(fetchArgs) {\n if (fetchArgs === void 0) { fetchArgs = []; }\n if (typeof fetchArgs[0] === 'string') {\n return fetchArgs[0];\n }\n if ('Request' in global && isInstanceOf(fetchArgs[0], Request)) {\n return fetchArgs[0].url;\n }\n return String(fetchArgs[0]);\n}\n/* eslint-enable @typescript-eslint/no-unsafe-member-access */\n/** JSDoc */\nfunction instrumentXHR() {\n if (!('XMLHttpRequest' in global)) {\n return;\n }\n var xhrproto = XMLHttpRequest.prototype;\n fill(xhrproto, 'open', function (originalOpen) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var xhr = this;\n var url = args[1];\n var xhrInfo = (xhr.__sentry_xhr__ = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n method: isString(args[0]) ? args[0].toUpperCase() : args[0],\n url: args[1],\n });\n // if Sentry key appears in URL, don't capture it as a request\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (isString(url) && xhrInfo.method === 'POST' && url.match(/sentry_key/)) {\n xhr.__sentry_own_request__ = true;\n }\n var onreadystatechangeHandler = function () {\n if (xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = xhr.status;\n }\n catch (e) {\n /* do nothing */\n }\n triggerHandlers('xhr', {\n args: args,\n endTimestamp: Date.now(),\n startTimestamp: Date.now(),\n xhr: xhr,\n });\n }\n };\n if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n fill(xhr, 'onreadystatechange', function (original) {\n return function () {\n var readyStateArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n readyStateArgs[_i] = arguments[_i];\n }\n onreadystatechangeHandler();\n return original.apply(xhr, readyStateArgs);\n };\n });\n }\n else {\n xhr.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n return originalOpen.apply(xhr, args);\n };\n });\n fill(xhrproto, 'send', function (originalSend) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.__sentry_xhr__ && args[0] !== undefined) {\n this.__sentry_xhr__.body = args[0];\n }\n triggerHandlers('xhr', {\n args: args,\n startTimestamp: Date.now(),\n xhr: this,\n });\n return originalSend.apply(this, args);\n };\n });\n}\nvar lastHref;\n/** JSDoc */\nfunction instrumentHistory() {\n if (!supportsHistory()) {\n return;\n }\n var oldOnPopState = global.onpopstate;\n global.onpopstate = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var to = global.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n var from = lastHref;\n lastHref = to;\n triggerHandlers('history', {\n from: from,\n to: to,\n });\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n }\n catch (_oO) {\n // no-empty\n }\n }\n };\n /** @hidden */\n function historyReplacementFunction(originalHistoryFunction) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n var from = lastHref;\n var to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n triggerHandlers('history', {\n from: from,\n to: to,\n });\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n fill(global.history, 'pushState', historyReplacementFunction);\n fill(global.history, 'replaceState', historyReplacementFunction);\n}\nvar debounceDuration = 1000;\nvar debounceTimerID;\nvar lastCapturedEvent;\n/**\n * Decide whether the current event should finish the debounce of previously captured one.\n * @param previous previously captured event\n * @param current event to be captured\n */\nfunction shouldShortcircuitPreviousDebounce(previous, current) {\n // If there was no previous event, it should always be swapped for the new one.\n if (!previous) {\n return true;\n }\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (previous.type !== current.type) {\n return true;\n }\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (previous.target !== current.target) {\n return true;\n }\n }\n catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return false;\n}\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(event) {\n // We are only interested in filtering `keypress` events for now.\n if (event.type !== 'keypress') {\n return false;\n }\n try {\n var target = event.target;\n if (!target || !target.tagName) {\n return true;\n }\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n }\n catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n return true;\n}\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param handler function that will be triggered\n * @param globalListener indicates whether event was captured by the global event listener\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nfunction makeDOMEventHandler(handler, globalListener) {\n if (globalListener === void 0) { globalListener = false; }\n return function (event) {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || lastCapturedEvent === event) {\n return;\n }\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event)) {\n return;\n }\n var name = event.type === 'keypress' ? 'input' : event.type;\n // If there is no debounce timer, it means that we can safely capture the new event and store it for future comparisons.\n if (debounceTimerID === undefined) {\n handler({\n event: event,\n name: name,\n global: globalListener,\n });\n lastCapturedEvent = event;\n }\n // If there is a debounce awaiting, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n else if (shouldShortcircuitPreviousDebounce(lastCapturedEvent, event)) {\n handler({\n event: event,\n name: name,\n global: globalListener,\n });\n lastCapturedEvent = event;\n }\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = global.setTimeout(function () {\n debounceTimerID = undefined;\n }, debounceDuration);\n };\n}\n/** JSDoc */\nfunction instrumentDOM() {\n if (!('document' in global)) {\n return;\n }\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n var triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n var globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n global.document.addEventListener('click', globalDOMEventHandler, false);\n global.document.addEventListener('keypress', globalDOMEventHandler, false);\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach(function (target) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n var proto = global[target] && global[target].prototype;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n fill(proto, 'addEventListener', function (originalAddEventListener) {\n return function (type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n var el = this;\n var handlers_1 = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n var handlerForType = (handlers_1[type] = handlers_1[type] || { refCount: 0 });\n if (!handlerForType.handler) {\n var handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n handlerForType.refCount += 1;\n }\n catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n fill(proto, 'removeEventListener', function (originalRemoveEventListener) {\n return function (type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n var el = this;\n var handlers_2 = el.__sentry_instrumentation_handlers__ || {};\n var handlerForType = handlers_2[type];\n if (handlerForType) {\n handlerForType.refCount -= 1;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers_2[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers_2).length === 0) {\n delete el.__sentry_instrumentation_handlers__;\n }\n }\n }\n catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n });\n });\n}\nvar _oldOnErrorHandler = null;\n/** JSDoc */\nfunction instrumentError() {\n _oldOnErrorHandler = global.onerror;\n global.onerror = function (msg, url, line, column, error) {\n triggerHandlers('error', {\n column: column,\n error: error,\n line: line,\n msg: msg,\n url: url,\n });\n if (_oldOnErrorHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n return false;\n };\n}\nvar _oldOnUnhandledRejectionHandler = null;\n/** JSDoc */\nfunction instrumentUnhandledRejection() {\n _oldOnUnhandledRejectionHandler = global.onunhandledrejection;\n global.onunhandledrejection = function (e) {\n triggerHandlers('unhandledrejection', e);\n if (_oldOnUnhandledRejectionHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n return true;\n };\n}\n//# sourceMappingURL=instrument.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/unbound-method\nvar objectToString = Object.prototype.toString;\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\nfunction isBuiltin(wat, ty) {\n return objectToString.call(wat) === \"[object \" + ty + \"]\";\n}\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat) {\n return isBuiltin(wat, 'ErrorEvent');\n}\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat) {\n return isBuiltin(wat, 'DOMError');\n}\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat) {\n return isBuiltin(wat, 'DOMException');\n}\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat) {\n return isBuiltin(wat, 'String');\n}\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat) {\n return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat) {\n return isBuiltin(wat, 'Object');\n}\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat) {\n return isBuiltin(wat, 'RegExp');\n}\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isNaN(wat) {\n return typeof wat === 'number' && wat !== wat;\n}\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n }\n catch (_e) {\n return false;\n }\n}\n//# sourceMappingURL=is.js.map","import { __read, __spread } from \"tslib\";\nimport { IS_DEBUG_BUILD } from './flags';\nimport { getGlobalObject, getGlobalSingleton } from './global';\n// TODO: Implement different loggers for different environments\nvar global = getGlobalObject();\n/** Prefix for logging strings */\nvar PREFIX = 'Sentry Logger ';\nexport var CONSOLE_LEVELS = ['debug', 'info', 'warn', 'error', 'log', 'assert'];\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox(callback) {\n var global = getGlobalObject();\n if (!('console' in global)) {\n return callback();\n }\n var originalConsole = global.console;\n var wrappedLevels = {};\n // Restore all wrapped console methods\n CONSOLE_LEVELS.forEach(function (level) {\n // TODO(v7): Remove this check as it's only needed for Node 6\n var originalWrappedFunc = originalConsole[level] && originalConsole[level].__sentry_original__;\n if (level in global.console && originalWrappedFunc) {\n wrappedLevels[level] = originalConsole[level];\n originalConsole[level] = originalWrappedFunc;\n }\n });\n try {\n return callback();\n }\n finally {\n // Revert restoration to wrapped state\n Object.keys(wrappedLevels).forEach(function (level) {\n originalConsole[level] = wrappedLevels[level];\n });\n }\n}\nfunction makeLogger() {\n var enabled = false;\n var logger = {\n enable: function () {\n enabled = true;\n },\n disable: function () {\n enabled = false;\n },\n };\n if (IS_DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(function (name) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n logger[name] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (enabled) {\n consoleSandbox(function () {\n var _a;\n (_a = global.console)[name].apply(_a, __spread([PREFIX + \"[\" + name + \"]:\"], args));\n });\n }\n };\n });\n }\n else {\n CONSOLE_LEVELS.forEach(function (name) {\n logger[name] = function () { return undefined; };\n });\n }\n return logger;\n}\n// Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\nvar logger;\nif (IS_DEBUG_BUILD) {\n logger = getGlobalSingleton('logger', makeLogger);\n}\nelse {\n logger = makeLogger();\n}\nexport { logger };\n//# sourceMappingURL=logger.js.map","import { __assign } from \"tslib\";\nimport { getGlobalObject } from './global';\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4() {\n var global = getGlobalObject();\n var crypto = global.crypto || global.msCrypto;\n if (!(crypto === void 0) && crypto.getRandomValues) {\n // Use window.crypto API if available\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n // set 4 in byte 7\n // eslint-disable-next-line no-bitwise\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n // eslint-disable-next-line no-bitwise\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n var pad = function (num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = \"0\" + v;\n }\n return v;\n };\n return (pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]));\n }\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n // eslint-disable-next-line no-bitwise\n var r = (Math.random() * 16) | 0;\n // eslint-disable-next-line no-bitwise\n var v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url) {\n if (!url) {\n return {};\n }\n var match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n if (!match) {\n return {};\n }\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n relative: match[5] + query + fragment,\n };\n}\nfunction getFirstException(event) {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event) {\n var message = event.message, eventId = event.event_id;\n if (message) {\n return message;\n }\n var firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return firstException.type + \": \" + firstException.value;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event, value, type) {\n var exception = (event.exception = event.exception || {});\n var values = (exception.values = exception.values || []);\n var firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event, newMechanism) {\n var firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n var defaultMechanism = { type: 'generic', handled: true };\n var currentMechanism = firstException.mechanism;\n firstException.mechanism = __assign(__assign(__assign({}, defaultMechanism), currentMechanism), newMechanism);\n if (newMechanism && 'data' in newMechanism) {\n var mergedData = __assign(__assign({}, (currentMechanism && currentMechanism.data)), newMechanism.data);\n firstException.mechanism.data = mergedData;\n }\n}\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nvar SEMVER_REGEXP = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input) {\n var match = input.match(SEMVER_REGEXP) || [];\n var major = parseInt(match[1], 10);\n var minor = parseInt(match[2], 10);\n var patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines, frame, linesOfContext) {\n if (linesOfContext === void 0) { linesOfContext = 5; }\n var lineno = frame.lineno || 0;\n var maxLines = lines.length;\n var sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map(function (line) { return snipLine(line, 0); });\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map(function (line) { return snipLine(line, 0); });\n}\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath) {\n // eslint-disable-next-line no-useless-escape\n return urlPath.split(/[\\?#]/, 1)[0];\n}\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && exception.__sentry_captured__) {\n return true;\n }\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception, '__sentry_captured__', true);\n }\n catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n return false;\n}\n//# sourceMappingURL=misc.js.map","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\nimport { isBrowserBundle } from './env';\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv() {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (!isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]');\n}\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\nexport function dynamicRequire(mod, request) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return mod.require(request);\n}\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nexport function loadModule(moduleName) {\n var mod;\n try {\n mod = dynamicRequire(module, moduleName);\n }\n catch (e) {\n // no-empty\n }\n try {\n var cwd = dynamicRequire(module, 'process').cwd;\n mod = dynamicRequire(module, cwd() + \"/node_modules/\" + moduleName);\n }\n catch (e) {\n // no-empty\n }\n return mod;\n}\n//# sourceMappingURL=node.js.map","/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These fags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle() {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n//# sourceMappingURL=env.js.map","import { __assign, __values } from \"tslib\";\nimport { htmlTreeAsString } from './browser';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { truncate } from './string';\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n var original = source[name];\n var wrapped = replacementFactory(original);\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n try {\n markFunctionWrapped(wrapped, original);\n }\n catch (_Oo) {\n // This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n }\n source[name] = wrapped;\n}\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj, name, value) {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n}\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped, original) {\n var proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n}\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func) {\n return func.__sentry_original__;\n}\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object) {\n return Object.keys(object)\n .map(function (key) { return encodeURIComponent(key) + \"=\" + encodeURIComponent(object[key]); })\n .join('&');\n}\n/**\n * Transforms any object into an object literal with all its attributes\n * attached to it.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n */\nexport function convertToPlainObject(value) {\n var newObj = value;\n if (isError(value)) {\n newObj = __assign({ message: value.message, name: value.name, stack: value.stack }, getOwnProperties(value));\n }\n else if (isEvent(value)) {\n var event_1 = value;\n newObj = __assign({ type: event_1.type, target: serializeEventTarget(event_1.target), currentTarget: serializeEventTarget(event_1.currentTarget) }, getOwnProperties(event_1));\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = event_1.detail;\n }\n }\n return newObj;\n}\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n }\n catch (_oO) {\n return '';\n }\n}\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n var extractedProps = {};\n for (var property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = obj[property];\n }\n }\n return extractedProps;\n}\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function extractExceptionKeysForMessage(exception, maxLength) {\n if (maxLength === void 0) { maxLength = 40; }\n var keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n if (!keys.length) {\n return '[object has no keys]';\n }\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n for (var includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n var serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n return '';\n}\n/**\n * Given any object, return the new object with removed keys that value was `undefined`.\n * Works recursively on objects and arrays.\n */\nexport function dropUndefinedKeys(val) {\n var e_1, _a;\n if (isPlainObject(val)) {\n var rv = {};\n try {\n for (var _b = __values(Object.keys(val)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof val[key] !== 'undefined') {\n rv[key] = dropUndefinedKeys(val[key]);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return rv;\n }\n if (Array.isArray(val)) {\n return val.map(dropUndefinedKeys);\n }\n return val;\n}\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat) {\n var objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new wat.constructor(wat);\n break;\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n//# sourceMappingURL=object.js.map","import { __assign, __values } from \"tslib\";\nvar STACKTRACE_LIMIT = 50;\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser() {\n var parsers = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n parsers[_i] = arguments[_i];\n }\n var sortedParsers = parsers.sort(function (a, b) { return a[0] - b[0]; }).map(function (p) { return p[1]; });\n return function (stack, skipFirst) {\n var e_1, _a, e_2, _b;\n if (skipFirst === void 0) { skipFirst = 0; }\n var frames = [];\n try {\n for (var _c = __values(stack.split('\\n').slice(skipFirst)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var line = _d.value;\n try {\n for (var sortedParsers_1 = (e_2 = void 0, __values(sortedParsers)), sortedParsers_1_1 = sortedParsers_1.next(); !sortedParsers_1_1.done; sortedParsers_1_1 = sortedParsers_1.next()) {\n var parser = sortedParsers_1_1.value;\n var frame = parser(line);\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (sortedParsers_1_1 && !sortedParsers_1_1.done && (_b = sortedParsers_1.return)) _b.call(sortedParsers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return stripSentryFramesAndReverse(frames);\n };\n}\n/**\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack) {\n if (!stack.length) {\n return [];\n }\n var localStack = stack;\n var firstFrameFunction = localStack[0].function || '';\n var lastFrameFunction = localStack[localStack.length - 1].function || '';\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n }\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n }\n // The frame where the crash happened, should be the last entry in the array\n return localStack\n .slice(0, STACKTRACE_LIMIT)\n .map(function (frame) { return (__assign(__assign({}, frame), { filename: frame.filename || localStack[0].filename, function: frame.function || '?' })); })\n .reverse();\n}\nvar defaultFunctionName = '';\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n }\n catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n//# sourceMappingURL=stacktrace.js.map","import { isRegExp, isString } from './is';\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str, max) {\n if (max === void 0) { max = 0; }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + \"...\";\n}\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line, colno) {\n var newLine = line;\n var lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n var start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n var end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = \"'{snip} \" + newLine;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n return newLine;\n}\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n var output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (var i = 0; i < input.length; i++) {\n var value = input[i];\n try {\n output.push(String(value));\n }\n catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n return output.join(delimiter);\n}\n/**\n * Checks if the value matches a regex or includes the string\n * @param value The string value to be checked against\n * @param pattern Either a regex or a string that must be contained in value\n */\nexport function isMatchingPattern(value, pattern) {\n if (!isString(value)) {\n return false;\n }\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (typeof pattern === 'string') {\n return value.indexOf(pattern) !== -1;\n }\n return false;\n}\n/**\n * Given a string, escape characters which have meaning in the regex grammar, such that the result is safe to feed to\n * `new RegExp()`.\n *\n * Based on https://github.com/sindresorhus/escape-string-regexp. Vendored to a) reduce the size by skipping the runtime\n * type-checking, and b) ensure it gets down-compiled for old versions of Node (the published package only supports Node\n * 12+).\n *\n * @param regexString The string to escape\n * @returns An version of the string with all special regex characters escaped\n */\nexport function escapeStringForRegex(regexString) {\n // escape the hyphen separately so we can also replace it with a unicode literal hyphen, to avoid the problems\n // discussed in https://github.com/sindresorhus/escape-string-regexp/issues/20.\n return regexString.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n//# sourceMappingURL=string.js.map","import { IS_DEBUG_BUILD } from './flags';\nimport { getGlobalObject } from './global';\nimport { logger } from './logger';\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent() {\n try {\n new ErrorEvent('');\n return true;\n }\n catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError() {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-ignore It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n }\n catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException() {\n try {\n new DOMException('');\n return true;\n }\n catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch() {\n if (!('fetch' in getGlobalObject())) {\n return false;\n }\n try {\n new Headers();\n new Request('');\n new Response();\n return true;\n }\n catch (e) {\n return false;\n }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFetch(func) {\n return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch() {\n if (!supportsFetch()) {\n return false;\n }\n var global = getGlobalObject();\n // Fast path to avoid DOM I/O\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (isNativeFetch(global.fetch)) {\n return true;\n }\n // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n var result = false;\n var doc = global.document;\n // eslint-disable-next-line deprecation/deprecation\n if (doc && typeof doc.createElement === 'function') {\n try {\n var sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFetch(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n }\n catch (err) {\n IS_DEBUG_BUILD &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n return result;\n}\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver() {\n return 'ReportingObserver' in getGlobalObject();\n}\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy() {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n if (!supportsFetch()) {\n return false;\n }\n try {\n new Request('_', {\n referrerPolicy: 'origin',\n });\n return true;\n }\n catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory() {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var global = getGlobalObject();\n /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var chrome = global.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n var hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState;\n return !isChromePackagedApp && hasHistoryApi;\n}\n//# sourceMappingURL=supports.js.map","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise(value) {\n return new SyncPromise(function (resolve) {\n resolve(value);\n });\n}\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise(reason) {\n return new SyncPromise(function (_, reject) {\n reject(reason);\n });\n}\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nvar SyncPromise = /** @class */ (function () {\n function SyncPromise(executor) {\n var _this = this;\n this._state = 0 /* PENDING */;\n this._handlers = [];\n /** JSDoc */\n this._resolve = function (value) {\n _this._setResult(1 /* RESOLVED */, value);\n };\n /** JSDoc */\n this._reject = function (reason) {\n _this._setResult(2 /* REJECTED */, reason);\n };\n /** JSDoc */\n this._setResult = function (state, value) {\n if (_this._state !== 0 /* PENDING */) {\n return;\n }\n if (isThenable(value)) {\n void value.then(_this._resolve, _this._reject);\n return;\n }\n _this._state = state;\n _this._value = value;\n _this._executeHandlers();\n };\n /** JSDoc */\n this._executeHandlers = function () {\n if (_this._state === 0 /* PENDING */) {\n return;\n }\n var cachedHandlers = _this._handlers.slice();\n _this._handlers = [];\n cachedHandlers.forEach(function (handler) {\n if (handler[0]) {\n return;\n }\n if (_this._state === 1 /* RESOLVED */) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n handler[1](_this._value);\n }\n if (_this._state === 2 /* REJECTED */) {\n handler[2](_this._value);\n }\n handler[0] = true;\n });\n };\n try {\n executor(this._resolve, this._reject);\n }\n catch (e) {\n this._reject(e);\n }\n }\n /** JSDoc */\n SyncPromise.prototype.then = function (onfulfilled, onrejected) {\n var _this = this;\n return new SyncPromise(function (resolve, reject) {\n _this._handlers.push([\n false,\n function (result) {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result);\n }\n else {\n try {\n resolve(onfulfilled(result));\n }\n catch (e) {\n reject(e);\n }\n }\n },\n function (reason) {\n if (!onrejected) {\n reject(reason);\n }\n else {\n try {\n resolve(onrejected(reason));\n }\n catch (e) {\n reject(e);\n }\n }\n },\n ]);\n _this._executeHandlers();\n });\n };\n /** JSDoc */\n SyncPromise.prototype.catch = function (onrejected) {\n return this.then(function (val) { return val; }, onrejected);\n };\n /** JSDoc */\n SyncPromise.prototype.finally = function (onfinally) {\n var _this = this;\n return new SyncPromise(function (resolve, reject) {\n var val;\n var isRejected;\n return _this.then(function (value) {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n }, function (reason) {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n }).then(function () {\n if (isRejected) {\n reject(val);\n return;\n }\n resolve(val);\n });\n });\n };\n return SyncPromise;\n}());\nexport { SyncPromise };\n//# sourceMappingURL=syncpromise.js.map","import { getGlobalObject } from './global';\nimport { dynamicRequire, isNodeEnv } from './node';\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nvar dateTimestampSource = {\n nowSeconds: function () { return Date.now() / 1000; },\n};\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance() {\n var performance = getGlobalObject().performance;\n if (!performance || !performance.now) {\n return undefined;\n }\n // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n //\n // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n // performance.now() gives a date arbitrarily in the past.\n //\n // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n // undefined.\n //\n // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n // interact with data coming out of performance entries.\n //\n // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n // observed skews that can be as long as days, weeks or months.\n //\n // See https://github.com/getsentry/sentry-javascript/issues/2590.\n //\n // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n // transactions of long-lived web pages.\n var timeOrigin = Date.now() - performance.now();\n return {\n now: function () { return performance.now(); },\n timeOrigin: timeOrigin,\n };\n}\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance() {\n try {\n var perfHooks = dynamicRequire(module, 'perf_hooks');\n return perfHooks.performance;\n }\n catch (_) {\n return undefined;\n }\n}\n/**\n * The Performance API implementation for the current platform, if available.\n */\nvar platformPerformance = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\nvar timestampSource = platformPerformance === undefined\n ? dateTimestampSource\n : {\n nowSeconds: function () { return (platformPerformance.timeOrigin + platformPerformance.now()) / 1000; },\n };\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nexport var dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport var timestampInSeconds = timestampSource.nowSeconds.bind(timestampSource);\n// Re-exported with an old name for backwards-compatibility.\nexport var timestampWithMs = timestampInSeconds;\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nexport var usingPerformanceAPI = platformPerformance !== undefined;\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport var _browserPerformanceTimeOriginMode;\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport var browserPerformanceTimeOrigin = (function () {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n var performance = getGlobalObject().performance;\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n var threshold = 3600 * 1000;\n var performanceNow = performance.now();\n var dateNow = Date.now();\n // if timeOrigin isn't available set delta to threshold so it isn't used\n var timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n var timeOriginIsReliable = timeOriginDelta < threshold;\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n var navigationStart = performance.timing && performance.timing.navigationStart;\n var hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n var navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n var navigationStartIsReliable = navigationStartDelta < threshold;\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n }\n else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n//# sourceMappingURL=time.js.map","/**\n* @vue/compiler-core v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { isString, NOOP, isObject, NO, extend, isSymbol, isArray, capitalize, camelize, EMPTY_OBJ, PatchFlagNames, slotFlagsText, isOn, isBuiltInDirective, isReservedProp, toHandlerKey } from '@vue/shared';\nexport { generateCodeFrame } from '@vue/shared';\n\nconst FRAGMENT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Fragment` : ``);\nconst TELEPORT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Teleport` : ``);\nconst SUSPENSE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Suspense` : ``);\nconst KEEP_ALIVE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `KeepAlive` : ``);\nconst BASE_TRANSITION = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `BaseTransition` : ``\n);\nconst OPEN_BLOCK = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `openBlock` : ``);\nconst CREATE_BLOCK = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createBlock` : ``);\nconst CREATE_ELEMENT_BLOCK = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createElementBlock` : ``\n);\nconst CREATE_VNODE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createVNode` : ``);\nconst CREATE_ELEMENT_VNODE = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createElementVNode` : ``\n);\nconst CREATE_COMMENT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createCommentVNode` : ``\n);\nconst CREATE_TEXT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createTextVNode` : ``\n);\nconst CREATE_STATIC = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createStaticVNode` : ``\n);\nconst RESOLVE_COMPONENT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveComponent` : ``\n);\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveDynamicComponent` : ``\n);\nconst RESOLVE_DIRECTIVE = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveDirective` : ``\n);\nconst RESOLVE_FILTER = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveFilter` : ``\n);\nconst WITH_DIRECTIVES = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `withDirectives` : ``\n);\nconst RENDER_LIST = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `renderList` : ``);\nconst RENDER_SLOT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `renderSlot` : ``);\nconst CREATE_SLOTS = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createSlots` : ``);\nconst TO_DISPLAY_STRING = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `toDisplayString` : ``\n);\nconst MERGE_PROPS = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `mergeProps` : ``);\nconst NORMALIZE_CLASS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeClass` : ``\n);\nconst NORMALIZE_STYLE = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeStyle` : ``\n);\nconst NORMALIZE_PROPS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeProps` : ``\n);\nconst GUARD_REACTIVE_PROPS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `guardReactiveProps` : ``\n);\nconst TO_HANDLERS = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `toHandlers` : ``);\nconst CAMELIZE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `camelize` : ``);\nconst CAPITALIZE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `capitalize` : ``);\nconst TO_HANDLER_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `toHandlerKey` : ``\n);\nconst SET_BLOCK_TRACKING = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `setBlockTracking` : ``\n);\nconst PUSH_SCOPE_ID = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `pushScopeId` : ``);\nconst POP_SCOPE_ID = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `popScopeId` : ``);\nconst WITH_CTX = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `withCtx` : ``);\nconst UNREF = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `unref` : ``);\nconst IS_REF = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `isRef` : ``);\nconst WITH_MEMO = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `withMemo` : ``);\nconst IS_MEMO_SAME = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `isMemoSame` : ``);\nconst helperNameMap = {\n [FRAGMENT]: `Fragment`,\n [TELEPORT]: `Teleport`,\n [SUSPENSE]: `Suspense`,\n [KEEP_ALIVE]: `KeepAlive`,\n [BASE_TRANSITION]: `BaseTransition`,\n [OPEN_BLOCK]: `openBlock`,\n [CREATE_BLOCK]: `createBlock`,\n [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\n [CREATE_VNODE]: `createVNode`,\n [CREATE_ELEMENT_VNODE]: `createElementVNode`,\n [CREATE_COMMENT]: `createCommentVNode`,\n [CREATE_TEXT]: `createTextVNode`,\n [CREATE_STATIC]: `createStaticVNode`,\n [RESOLVE_COMPONENT]: `resolveComponent`,\n [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\n [RESOLVE_DIRECTIVE]: `resolveDirective`,\n [RESOLVE_FILTER]: `resolveFilter`,\n [WITH_DIRECTIVES]: `withDirectives`,\n [RENDER_LIST]: `renderList`,\n [RENDER_SLOT]: `renderSlot`,\n [CREATE_SLOTS]: `createSlots`,\n [TO_DISPLAY_STRING]: `toDisplayString`,\n [MERGE_PROPS]: `mergeProps`,\n [NORMALIZE_CLASS]: `normalizeClass`,\n [NORMALIZE_STYLE]: `normalizeStyle`,\n [NORMALIZE_PROPS]: `normalizeProps`,\n [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\n [TO_HANDLERS]: `toHandlers`,\n [CAMELIZE]: `camelize`,\n [CAPITALIZE]: `capitalize`,\n [TO_HANDLER_KEY]: `toHandlerKey`,\n [SET_BLOCK_TRACKING]: `setBlockTracking`,\n [PUSH_SCOPE_ID]: `pushScopeId`,\n [POP_SCOPE_ID]: `popScopeId`,\n [WITH_CTX]: `withCtx`,\n [UNREF]: `unref`,\n [IS_REF]: `isRef`,\n [WITH_MEMO]: `withMemo`,\n [IS_MEMO_SAME]: `isMemoSame`\n};\nfunction registerRuntimeHelpers(helpers) {\n Object.getOwnPropertySymbols(helpers).forEach((s) => {\n helperNameMap[s] = helpers[s];\n });\n}\n\nconst Namespaces = {\n \"HTML\": 0,\n \"0\": \"HTML\",\n \"SVG\": 1,\n \"1\": \"SVG\",\n \"MATH_ML\": 2,\n \"2\": \"MATH_ML\"\n};\nconst NodeTypes = {\n \"ROOT\": 0,\n \"0\": \"ROOT\",\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"TEXT\": 2,\n \"2\": \"TEXT\",\n \"COMMENT\": 3,\n \"3\": \"COMMENT\",\n \"SIMPLE_EXPRESSION\": 4,\n \"4\": \"SIMPLE_EXPRESSION\",\n \"INTERPOLATION\": 5,\n \"5\": \"INTERPOLATION\",\n \"ATTRIBUTE\": 6,\n \"6\": \"ATTRIBUTE\",\n \"DIRECTIVE\": 7,\n \"7\": \"DIRECTIVE\",\n \"COMPOUND_EXPRESSION\": 8,\n \"8\": \"COMPOUND_EXPRESSION\",\n \"IF\": 9,\n \"9\": \"IF\",\n \"IF_BRANCH\": 10,\n \"10\": \"IF_BRANCH\",\n \"FOR\": 11,\n \"11\": \"FOR\",\n \"TEXT_CALL\": 12,\n \"12\": \"TEXT_CALL\",\n \"VNODE_CALL\": 13,\n \"13\": \"VNODE_CALL\",\n \"JS_CALL_EXPRESSION\": 14,\n \"14\": \"JS_CALL_EXPRESSION\",\n \"JS_OBJECT_EXPRESSION\": 15,\n \"15\": \"JS_OBJECT_EXPRESSION\",\n \"JS_PROPERTY\": 16,\n \"16\": \"JS_PROPERTY\",\n \"JS_ARRAY_EXPRESSION\": 17,\n \"17\": \"JS_ARRAY_EXPRESSION\",\n \"JS_FUNCTION_EXPRESSION\": 18,\n \"18\": \"JS_FUNCTION_EXPRESSION\",\n \"JS_CONDITIONAL_EXPRESSION\": 19,\n \"19\": \"JS_CONDITIONAL_EXPRESSION\",\n \"JS_CACHE_EXPRESSION\": 20,\n \"20\": \"JS_CACHE_EXPRESSION\",\n \"JS_BLOCK_STATEMENT\": 21,\n \"21\": \"JS_BLOCK_STATEMENT\",\n \"JS_TEMPLATE_LITERAL\": 22,\n \"22\": \"JS_TEMPLATE_LITERAL\",\n \"JS_IF_STATEMENT\": 23,\n \"23\": \"JS_IF_STATEMENT\",\n \"JS_ASSIGNMENT_EXPRESSION\": 24,\n \"24\": \"JS_ASSIGNMENT_EXPRESSION\",\n \"JS_SEQUENCE_EXPRESSION\": 25,\n \"25\": \"JS_SEQUENCE_EXPRESSION\",\n \"JS_RETURN_STATEMENT\": 26,\n \"26\": \"JS_RETURN_STATEMENT\"\n};\nconst ElementTypes = {\n \"ELEMENT\": 0,\n \"0\": \"ELEMENT\",\n \"COMPONENT\": 1,\n \"1\": \"COMPONENT\",\n \"SLOT\": 2,\n \"2\": \"SLOT\",\n \"TEMPLATE\": 3,\n \"3\": \"TEMPLATE\"\n};\nconst ConstantTypes = {\n \"NOT_CONSTANT\": 0,\n \"0\": \"NOT_CONSTANT\",\n \"CAN_SKIP_PATCH\": 1,\n \"1\": \"CAN_SKIP_PATCH\",\n \"CAN_CACHE\": 2,\n \"2\": \"CAN_CACHE\",\n \"CAN_STRINGIFY\": 3,\n \"3\": \"CAN_STRINGIFY\"\n};\nconst locStub = {\n start: { line: 1, column: 1, offset: 0 },\n end: { line: 1, column: 1, offset: 0 },\n source: \"\"\n};\nfunction createRoot(children, source = \"\") {\n return {\n type: 0,\n source,\n children,\n helpers: /* @__PURE__ */ new Set(),\n components: [],\n directives: [],\n hoists: [],\n imports: [],\n cached: [],\n temps: 0,\n codegenNode: void 0,\n loc: locStub\n };\n}\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\n if (context) {\n if (isBlock) {\n context.helper(OPEN_BLOCK);\n context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\n } else {\n context.helper(getVNodeHelper(context.inSSR, isComponent));\n }\n if (directives) {\n context.helper(WITH_DIRECTIVES);\n }\n }\n return {\n type: 13,\n tag,\n props,\n children,\n patchFlag,\n dynamicProps,\n directives,\n isBlock,\n disableTracking,\n isComponent,\n loc\n };\n}\nfunction createArrayExpression(elements, loc = locStub) {\n return {\n type: 17,\n loc,\n elements\n };\n}\nfunction createObjectExpression(properties, loc = locStub) {\n return {\n type: 15,\n loc,\n properties\n };\n}\nfunction createObjectProperty(key, value) {\n return {\n type: 16,\n loc: locStub,\n key: isString(key) ? createSimpleExpression(key, true) : key,\n value\n };\n}\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0) {\n return {\n type: 4,\n loc,\n content,\n isStatic,\n constType: isStatic ? 3 : constType\n };\n}\nfunction createInterpolation(content, loc) {\n return {\n type: 5,\n loc,\n content: isString(content) ? createSimpleExpression(content, false, loc) : content\n };\n}\nfunction createCompoundExpression(children, loc = locStub) {\n return {\n type: 8,\n loc,\n children\n };\n}\nfunction createCallExpression(callee, args = [], loc = locStub) {\n return {\n type: 14,\n loc,\n callee,\n arguments: args\n };\n}\nfunction createFunctionExpression(params, returns = void 0, newline = false, isSlot = false, loc = locStub) {\n return {\n type: 18,\n params,\n returns,\n newline,\n isSlot,\n loc\n };\n}\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\n return {\n type: 19,\n test,\n consequent,\n alternate,\n newline,\n loc: locStub\n };\n}\nfunction createCacheExpression(index, value, needPauseTracking = false, inVOnce = false) {\n return {\n type: 20,\n index,\n value,\n needPauseTracking,\n inVOnce,\n needArraySpread: false,\n loc: locStub\n };\n}\nfunction createBlockStatement(body) {\n return {\n type: 21,\n body,\n loc: locStub\n };\n}\nfunction createTemplateLiteral(elements) {\n return {\n type: 22,\n elements,\n loc: locStub\n };\n}\nfunction createIfStatement(test, consequent, alternate) {\n return {\n type: 23,\n test,\n consequent,\n alternate,\n loc: locStub\n };\n}\nfunction createAssignmentExpression(left, right) {\n return {\n type: 24,\n left,\n right,\n loc: locStub\n };\n}\nfunction createSequenceExpression(expressions) {\n return {\n type: 25,\n expressions,\n loc: locStub\n };\n}\nfunction createReturnStatement(returns) {\n return {\n type: 26,\n returns,\n loc: locStub\n };\n}\nfunction getVNodeHelper(ssr, isComponent) {\n return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\n}\nfunction getVNodeBlockHelper(ssr, isComponent) {\n return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\n}\nfunction convertToBlock(node, { helper, removeHelper, inSSR }) {\n if (!node.isBlock) {\n node.isBlock = true;\n removeHelper(getVNodeHelper(inSSR, node.isComponent));\n helper(OPEN_BLOCK);\n helper(getVNodeBlockHelper(inSSR, node.isComponent));\n }\n}\n\nconst defaultDelimitersOpen = new Uint8Array([123, 123]);\nconst defaultDelimitersClose = new Uint8Array([125, 125]);\nfunction isTagStartChar(c) {\n return c >= 97 && c <= 122 || c >= 65 && c <= 90;\n}\nfunction isWhitespace(c) {\n return c === 32 || c === 10 || c === 9 || c === 12 || c === 13;\n}\nfunction isEndOfTagSection(c) {\n return c === 47 || c === 62 || isWhitespace(c);\n}\nfunction toCharCodes(str) {\n const ret = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n ret[i] = str.charCodeAt(i);\n }\n return ret;\n}\nconst Sequences = {\n Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),\n // CDATA[\n CdataEnd: new Uint8Array([93, 93, 62]),\n // ]]>\n CommentEnd: new Uint8Array([45, 45, 62]),\n // `-->`\n ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),\n // `<\\/script`\n StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),\n // `= 0; i--) {\n const newlineIndex = this.newlines[i];\n if (index > newlineIndex) {\n line = i + 2;\n column = index - newlineIndex;\n break;\n }\n }\n return {\n column,\n line,\n offset: index\n };\n }\n peek() {\n return this.buffer.charCodeAt(this.index + 1);\n }\n stateText(c) {\n if (c === 60) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = 5;\n this.sectionStart = this.index;\n } else if (!this.inVPre && c === this.delimiterOpen[0]) {\n this.state = 2;\n this.delimiterIndex = 0;\n this.stateInterpolationOpen(c);\n }\n }\n stateInterpolationOpen(c) {\n if (c === this.delimiterOpen[this.delimiterIndex]) {\n if (this.delimiterIndex === this.delimiterOpen.length - 1) {\n const start = this.index + 1 - this.delimiterOpen.length;\n if (start > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, start);\n }\n this.state = 3;\n this.sectionStart = start;\n } else {\n this.delimiterIndex++;\n }\n } else if (this.inRCDATA) {\n this.state = 32;\n this.stateInRCDATA(c);\n } else {\n this.state = 1;\n this.stateText(c);\n }\n }\n stateInterpolation(c) {\n if (c === this.delimiterClose[0]) {\n this.state = 4;\n this.delimiterIndex = 0;\n this.stateInterpolationClose(c);\n }\n }\n stateInterpolationClose(c) {\n if (c === this.delimiterClose[this.delimiterIndex]) {\n if (this.delimiterIndex === this.delimiterClose.length - 1) {\n this.cbs.oninterpolation(this.sectionStart, this.index + 1);\n if (this.inRCDATA) {\n this.state = 32;\n } else {\n this.state = 1;\n }\n this.sectionStart = this.index + 1;\n } else {\n this.delimiterIndex++;\n }\n } else {\n this.state = 3;\n this.stateInterpolation(c);\n }\n }\n stateSpecialStartSequence(c) {\n const isEnd = this.sequenceIndex === this.currentSequence.length;\n const isMatch = isEnd ? (\n // If we are at the end of the sequence, make sure the tag name has ended\n isEndOfTagSection(c)\n ) : (\n // Otherwise, do a case-insensitive comparison\n (c | 32) === this.currentSequence[this.sequenceIndex]\n );\n if (!isMatch) {\n this.inRCDATA = false;\n } else if (!isEnd) {\n this.sequenceIndex++;\n return;\n }\n this.sequenceIndex = 0;\n this.state = 6;\n this.stateInTagName(c);\n }\n /** Look for an end tag. For and <textarea>, also decode entities. */\n stateInRCDATA(c) {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (c === 62 || isWhitespace(c)) {\n const endOfText = this.index - this.currentSequence.length;\n if (this.sectionStart < endOfText) {\n const actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n this.sectionStart = endOfText + 2;\n this.stateInClosingTagName(c);\n this.inRCDATA = false;\n return;\n }\n this.sequenceIndex = 0;\n }\n if ((c | 32) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n } else if (this.sequenceIndex === 0) {\n if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd && !this.inSFCRoot) {\n if (!this.inVPre && c === this.delimiterOpen[0]) {\n this.state = 2;\n this.delimiterIndex = 0;\n this.stateInterpolationOpen(c);\n }\n } else if (this.fastForwardTo(60)) {\n this.sequenceIndex = 1;\n }\n } else {\n this.sequenceIndex = Number(c === 60);\n }\n }\n stateCDATASequence(c) {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = 28;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n } else {\n this.sequenceIndex = 0;\n this.state = 23;\n this.stateInDeclaration(c);\n }\n }\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n *\n * @returns Whether the character was found.\n */\n fastForwardTo(c) {\n while (++this.index < this.buffer.length) {\n const cc = this.buffer.charCodeAt(this.index);\n if (cc === 10) {\n this.newlines.push(this.index);\n }\n if (cc === c) {\n return true;\n }\n }\n this.index = this.buffer.length - 1;\n return false;\n }\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n */\n stateInCommentLike(c) {\n if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index - 2);\n } else {\n this.cbs.oncomment(this.sectionStart, this.index - 2);\n }\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = 1;\n }\n } else if (this.sequenceIndex === 0) {\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n this.sequenceIndex = 0;\n }\n }\n startSpecial(sequence, offset) {\n this.enterRCDATA(sequence, offset);\n this.state = 31;\n }\n enterRCDATA(sequence, offset) {\n this.inRCDATA = true;\n this.currentSequence = sequence;\n this.sequenceIndex = offset;\n }\n stateBeforeTagName(c) {\n if (c === 33) {\n this.state = 22;\n this.sectionStart = this.index + 1;\n } else if (c === 63) {\n this.state = 24;\n this.sectionStart = this.index + 1;\n } else if (isTagStartChar(c)) {\n this.sectionStart = this.index;\n if (this.mode === 0) {\n this.state = 6;\n } else if (this.inSFCRoot) {\n this.state = 34;\n } else if (!this.inXML) {\n if (c === 116) {\n this.state = 30;\n } else {\n this.state = c === 115 ? 29 : 6;\n }\n } else {\n this.state = 6;\n }\n } else if (c === 47) {\n this.state = 8;\n } else {\n this.state = 1;\n this.stateText(c);\n }\n }\n stateInTagName(c) {\n if (isEndOfTagSection(c)) {\n this.handleTagName(c);\n }\n }\n stateInSFCRootTagName(c) {\n if (isEndOfTagSection(c)) {\n const tag = this.buffer.slice(this.sectionStart, this.index);\n if (tag !== \"template\") {\n this.enterRCDATA(toCharCodes(`</` + tag), 0);\n }\n this.handleTagName(c);\n }\n }\n handleTagName(c) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = 11;\n this.stateBeforeAttrName(c);\n }\n stateBeforeClosingTagName(c) {\n if (isWhitespace(c)) ; else if (c === 62) {\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n this.cbs.onerr(14, this.index);\n }\n this.state = 1;\n this.sectionStart = this.index + 1;\n } else {\n this.state = isTagStartChar(c) ? 9 : 27;\n this.sectionStart = this.index;\n }\n }\n stateInClosingTagName(c) {\n if (c === 62 || isWhitespace(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = 10;\n this.stateAfterClosingTagName(c);\n }\n }\n stateAfterClosingTagName(c) {\n if (c === 62) {\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeAttrName(c) {\n if (c === 62) {\n this.cbs.onopentagend(this.index);\n if (this.inRCDATA) {\n this.state = 32;\n } else {\n this.state = 1;\n }\n this.sectionStart = this.index + 1;\n } else if (c === 47) {\n this.state = 7;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && this.peek() !== 62) {\n this.cbs.onerr(22, this.index);\n }\n } else if (c === 60 && this.peek() === 47) {\n this.cbs.onopentagend(this.index);\n this.state = 5;\n this.sectionStart = this.index;\n } else if (!isWhitespace(c)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && c === 61) {\n this.cbs.onerr(\n 19,\n this.index\n );\n }\n this.handleAttrStart(c);\n }\n }\n handleAttrStart(c) {\n if (c === 118 && this.peek() === 45) {\n this.state = 13;\n this.sectionStart = this.index;\n } else if (c === 46 || c === 58 || c === 64 || c === 35) {\n this.cbs.ondirname(this.index, this.index + 1);\n this.state = 14;\n this.sectionStart = this.index + 1;\n } else {\n this.state = 12;\n this.sectionStart = this.index;\n }\n }\n stateInSelfClosingTag(c) {\n if (c === 62) {\n this.cbs.onselfclosingtag(this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n this.inRCDATA = false;\n } else if (!isWhitespace(c)) {\n this.state = 11;\n this.stateBeforeAttrName(c);\n }\n }\n stateInAttrName(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if ((!!(process.env.NODE_ENV !== \"production\") || false) && (c === 34 || c === 39 || c === 60)) {\n this.cbs.onerr(\n 17,\n this.index\n );\n }\n }\n stateInDirName(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 58) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.state = 14;\n this.sectionStart = this.index + 1;\n } else if (c === 46) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.state = 16;\n this.sectionStart = this.index + 1;\n }\n }\n stateInDirArg(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirarg(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 91) {\n this.state = 15;\n } else if (c === 46) {\n this.cbs.ondirarg(this.sectionStart, this.index);\n this.state = 16;\n this.sectionStart = this.index + 1;\n }\n }\n stateInDynamicDirArg(c) {\n if (c === 93) {\n this.state = 14;\n } else if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirarg(this.sectionStart, this.index + 1);\n this.handleAttrNameEnd(c);\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n this.cbs.onerr(\n 27,\n this.index\n );\n }\n }\n }\n stateInDirModifier(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirmodifier(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 46) {\n this.cbs.ondirmodifier(this.sectionStart, this.index);\n this.sectionStart = this.index + 1;\n }\n }\n handleAttrNameEnd(c) {\n this.sectionStart = this.index;\n this.state = 17;\n this.cbs.onattribnameend(this.index);\n this.stateAfterAttrName(c);\n }\n stateAfterAttrName(c) {\n if (c === 61) {\n this.state = 18;\n } else if (c === 47 || c === 62) {\n this.cbs.onattribend(0, this.sectionStart);\n this.sectionStart = -1;\n this.state = 11;\n this.stateBeforeAttrName(c);\n } else if (!isWhitespace(c)) {\n this.cbs.onattribend(0, this.sectionStart);\n this.handleAttrStart(c);\n }\n }\n stateBeforeAttrValue(c) {\n if (c === 34) {\n this.state = 19;\n this.sectionStart = this.index + 1;\n } else if (c === 39) {\n this.state = 20;\n this.sectionStart = this.index + 1;\n } else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = 21;\n this.stateInAttrValueNoQuotes(c);\n }\n }\n handleInAttrValue(c, quote) {\n if (c === quote || this.fastForwardTo(quote)) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(\n quote === 34 ? 3 : 2,\n this.index + 1\n );\n this.state = 11;\n }\n }\n stateInAttrValueDoubleQuotes(c) {\n this.handleInAttrValue(c, 34);\n }\n stateInAttrValueSingleQuotes(c) {\n this.handleInAttrValue(c, 39);\n }\n stateInAttrValueNoQuotes(c) {\n if (isWhitespace(c) || c === 62) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(1, this.index);\n this.state = 11;\n this.stateBeforeAttrName(c);\n } else if ((!!(process.env.NODE_ENV !== \"production\") || false) && c === 34 || c === 39 || c === 60 || c === 61 || c === 96) {\n this.cbs.onerr(\n 18,\n this.index\n );\n } else ;\n }\n stateBeforeDeclaration(c) {\n if (c === 91) {\n this.state = 26;\n this.sequenceIndex = 0;\n } else {\n this.state = c === 45 ? 25 : 23;\n }\n }\n stateInDeclaration(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateInProcessingInstruction(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeComment(c) {\n if (c === 45) {\n this.state = 28;\n this.currentSequence = Sequences.CommentEnd;\n this.sequenceIndex = 2;\n this.sectionStart = this.index + 1;\n } else {\n this.state = 23;\n }\n }\n stateInSpecialComment(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.cbs.oncomment(this.sectionStart, this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeSpecialS(c) {\n if (c === Sequences.ScriptEnd[3]) {\n this.startSpecial(Sequences.ScriptEnd, 4);\n } else if (c === Sequences.StyleEnd[3]) {\n this.startSpecial(Sequences.StyleEnd, 4);\n } else {\n this.state = 6;\n this.stateInTagName(c);\n }\n }\n stateBeforeSpecialT(c) {\n if (c === Sequences.TitleEnd[3]) {\n this.startSpecial(Sequences.TitleEnd, 4);\n } else if (c === Sequences.TextareaEnd[3]) {\n this.startSpecial(Sequences.TextareaEnd, 4);\n } else {\n this.state = 6;\n this.stateInTagName(c);\n }\n }\n startEntity() {\n }\n stateInEntity() {\n }\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n parse(input) {\n this.buffer = input;\n while (this.index < this.buffer.length) {\n const c = this.buffer.charCodeAt(this.index);\n if (c === 10) {\n this.newlines.push(this.index);\n }\n switch (this.state) {\n case 1: {\n this.stateText(c);\n break;\n }\n case 2: {\n this.stateInterpolationOpen(c);\n break;\n }\n case 3: {\n this.stateInterpolation(c);\n break;\n }\n case 4: {\n this.stateInterpolationClose(c);\n break;\n }\n case 31: {\n this.stateSpecialStartSequence(c);\n break;\n }\n case 32: {\n this.stateInRCDATA(c);\n break;\n }\n case 26: {\n this.stateCDATASequence(c);\n break;\n }\n case 19: {\n this.stateInAttrValueDoubleQuotes(c);\n break;\n }\n case 12: {\n this.stateInAttrName(c);\n break;\n }\n case 13: {\n this.stateInDirName(c);\n break;\n }\n case 14: {\n this.stateInDirArg(c);\n break;\n }\n case 15: {\n this.stateInDynamicDirArg(c);\n break;\n }\n case 16: {\n this.stateInDirModifier(c);\n break;\n }\n case 28: {\n this.stateInCommentLike(c);\n break;\n }\n case 27: {\n this.stateInSpecialComment(c);\n break;\n }\n case 11: {\n this.stateBeforeAttrName(c);\n break;\n }\n case 6: {\n this.stateInTagName(c);\n break;\n }\n case 34: {\n this.stateInSFCRootTagName(c);\n break;\n }\n case 9: {\n this.stateInClosingTagName(c);\n break;\n }\n case 5: {\n this.stateBeforeTagName(c);\n break;\n }\n case 17: {\n this.stateAfterAttrName(c);\n break;\n }\n case 20: {\n this.stateInAttrValueSingleQuotes(c);\n break;\n }\n case 18: {\n this.stateBeforeAttrValue(c);\n break;\n }\n case 8: {\n this.stateBeforeClosingTagName(c);\n break;\n }\n case 10: {\n this.stateAfterClosingTagName(c);\n break;\n }\n case 29: {\n this.stateBeforeSpecialS(c);\n break;\n }\n case 30: {\n this.stateBeforeSpecialT(c);\n break;\n }\n case 21: {\n this.stateInAttrValueNoQuotes(c);\n break;\n }\n case 7: {\n this.stateInSelfClosingTag(c);\n break;\n }\n case 23: {\n this.stateInDeclaration(c);\n break;\n }\n case 22: {\n this.stateBeforeDeclaration(c);\n break;\n }\n case 25: {\n this.stateBeforeComment(c);\n break;\n }\n case 24: {\n this.stateInProcessingInstruction(c);\n break;\n }\n case 33: {\n this.stateInEntity();\n break;\n }\n }\n this.index++;\n }\n this.cleanup();\n this.finish();\n }\n /**\n * Remove data that has already been consumed from the buffer.\n */\n cleanup() {\n if (this.sectionStart !== this.index) {\n if (this.state === 1 || this.state === 32 && this.sequenceIndex === 0) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n } else if (this.state === 19 || this.state === 20 || this.state === 21) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n }\n finish() {\n this.handleTrailingData();\n this.cbs.onend();\n }\n /** Handle any trailing data. */\n handleTrailingData() {\n const endIndex = this.buffer.length;\n if (this.sectionStart >= endIndex) {\n return;\n }\n if (this.state === 28) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, endIndex);\n } else {\n this.cbs.oncomment(this.sectionStart, endIndex);\n }\n } else if (this.state === 6 || this.state === 11 || this.state === 18 || this.state === 17 || this.state === 12 || this.state === 13 || this.state === 14 || this.state === 15 || this.state === 16 || this.state === 20 || this.state === 19 || this.state === 21 || this.state === 9) ; else {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n }\n emitCodePoint(cp, consumed) {\n }\n}\n\nconst CompilerDeprecationTypes = {\n \"COMPILER_IS_ON_ELEMENT\": \"COMPILER_IS_ON_ELEMENT\",\n \"COMPILER_V_BIND_SYNC\": \"COMPILER_V_BIND_SYNC\",\n \"COMPILER_V_BIND_OBJECT_ORDER\": \"COMPILER_V_BIND_OBJECT_ORDER\",\n \"COMPILER_V_ON_NATIVE\": \"COMPILER_V_ON_NATIVE\",\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\": \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n \"COMPILER_NATIVE_TEMPLATE\": \"COMPILER_NATIVE_TEMPLATE\",\n \"COMPILER_INLINE_TEMPLATE\": \"COMPILER_INLINE_TEMPLATE\",\n \"COMPILER_FILTERS\": \"COMPILER_FILTERS\"\n};\nconst deprecationData = {\n [\"COMPILER_IS_ON_ELEMENT\"]: {\n message: `Platform-native elements with \"is\" prop will no longer be treated as components in Vue 3 unless the \"is\" value is explicitly prefixed with \"vue:\".`,\n link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`\n },\n [\"COMPILER_V_BIND_SYNC\"]: {\n message: (key) => `.sync modifier for v-bind has been removed. Use v-model with argument instead. \\`v-bind:${key}.sync\\` should be changed to \\`v-model:${key}\\`.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`\n },\n [\"COMPILER_V_BIND_OBJECT_ORDER\"]: {\n message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`\n },\n [\"COMPILER_V_ON_NATIVE\"]: {\n message: `.native modifier for v-on has been removed as is no longer necessary.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`\n },\n [\"COMPILER_V_IF_V_FOR_PRECEDENCE\"]: {\n message: `v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with <template> tags or use a computed property that filters v-for data source.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`\n },\n [\"COMPILER_NATIVE_TEMPLATE\"]: {\n message: `<template> with no special directives will render as a native template element instead of its inner content in Vue 3.`\n },\n [\"COMPILER_INLINE_TEMPLATE\"]: {\n message: `\"inline-template\" has been removed in Vue 3.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`\n },\n [\"COMPILER_FILTERS\"]: {\n message: `filters have been removed in Vue 3. The \"|\" symbol will be treated as native JavaScript bitwise OR operator. Use method calls or computed properties instead.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`\n }\n};\nfunction getCompatValue(key, { compatConfig }) {\n const value = compatConfig && compatConfig[key];\n if (key === \"MODE\") {\n return value || 3;\n } else {\n return value;\n }\n}\nfunction isCompatEnabled(key, context) {\n const mode = getCompatValue(\"MODE\", context);\n const value = getCompatValue(key, context);\n return mode === 3 ? value === true : value !== false;\n}\nfunction checkCompatEnabled(key, context, loc, ...args) {\n const enabled = isCompatEnabled(key, context);\n if (!!(process.env.NODE_ENV !== \"production\") && enabled) {\n warnDeprecation(key, context, loc, ...args);\n }\n return enabled;\n}\nfunction warnDeprecation(key, context, loc, ...args) {\n const val = getCompatValue(key, context);\n if (val === \"suppress-warning\") {\n return;\n }\n const { message, link } = deprecationData[key];\n const msg = `(deprecation ${key}) ${typeof message === \"function\" ? message(...args) : message}${link ? `\n Details: ${link}` : ``}`;\n const err = new SyntaxError(msg);\n err.code = key;\n if (loc) err.loc = loc;\n context.onWarn(err);\n}\n\nfunction defaultOnError(error) {\n throw error;\n}\nfunction defaultOnWarn(msg) {\n !!(process.env.NODE_ENV !== \"production\") && console.warn(`[Vue warn] ${msg.message}`);\n}\nfunction createCompilerError(code, loc, messages, additionalMessage) {\n const msg = !!(process.env.NODE_ENV !== \"production\") || false ? (messages || errorMessages)[code] + (additionalMessage || ``) : `https://vuejs.org/error-reference/#compiler-${code}`;\n const error = new SyntaxError(String(msg));\n error.code = code;\n error.loc = loc;\n return error;\n}\nconst ErrorCodes = {\n \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\": 0,\n \"0\": \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\",\n \"CDATA_IN_HTML_CONTENT\": 1,\n \"1\": \"CDATA_IN_HTML_CONTENT\",\n \"DUPLICATE_ATTRIBUTE\": 2,\n \"2\": \"DUPLICATE_ATTRIBUTE\",\n \"END_TAG_WITH_ATTRIBUTES\": 3,\n \"3\": \"END_TAG_WITH_ATTRIBUTES\",\n \"END_TAG_WITH_TRAILING_SOLIDUS\": 4,\n \"4\": \"END_TAG_WITH_TRAILING_SOLIDUS\",\n \"EOF_BEFORE_TAG_NAME\": 5,\n \"5\": \"EOF_BEFORE_TAG_NAME\",\n \"EOF_IN_CDATA\": 6,\n \"6\": \"EOF_IN_CDATA\",\n \"EOF_IN_COMMENT\": 7,\n \"7\": \"EOF_IN_COMMENT\",\n \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\": 8,\n \"8\": \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\",\n \"EOF_IN_TAG\": 9,\n \"9\": \"EOF_IN_TAG\",\n \"INCORRECTLY_CLOSED_COMMENT\": 10,\n \"10\": \"INCORRECTLY_CLOSED_COMMENT\",\n \"INCORRECTLY_OPENED_COMMENT\": 11,\n \"11\": \"INCORRECTLY_OPENED_COMMENT\",\n \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\": 12,\n \"12\": \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\",\n \"MISSING_ATTRIBUTE_VALUE\": 13,\n \"13\": \"MISSING_ATTRIBUTE_VALUE\",\n \"MISSING_END_TAG_NAME\": 14,\n \"14\": \"MISSING_END_TAG_NAME\",\n \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\": 15,\n \"15\": \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\",\n \"NESTED_COMMENT\": 16,\n \"16\": \"NESTED_COMMENT\",\n \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\": 17,\n \"17\": \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\",\n \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\": 18,\n \"18\": \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\",\n \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\": 19,\n \"19\": \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\",\n \"UNEXPECTED_NULL_CHARACTER\": 20,\n \"20\": \"UNEXPECTED_NULL_CHARACTER\",\n \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\": 21,\n \"21\": \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\",\n \"UNEXPECTED_SOLIDUS_IN_TAG\": 22,\n \"22\": \"UNEXPECTED_SOLIDUS_IN_TAG\",\n \"X_INVALID_END_TAG\": 23,\n \"23\": \"X_INVALID_END_TAG\",\n \"X_MISSING_END_TAG\": 24,\n \"24\": \"X_MISSING_END_TAG\",\n \"X_MISSING_INTERPOLATION_END\": 25,\n \"25\": \"X_MISSING_INTERPOLATION_END\",\n \"X_MISSING_DIRECTIVE_NAME\": 26,\n \"26\": \"X_MISSING_DIRECTIVE_NAME\",\n \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\": 27,\n \"27\": \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\",\n \"X_V_IF_NO_EXPRESSION\": 28,\n \"28\": \"X_V_IF_NO_EXPRESSION\",\n \"X_V_IF_SAME_KEY\": 29,\n \"29\": \"X_V_IF_SAME_KEY\",\n \"X_V_ELSE_NO_ADJACENT_IF\": 30,\n \"30\": \"X_V_ELSE_NO_ADJACENT_IF\",\n \"X_V_FOR_NO_EXPRESSION\": 31,\n \"31\": \"X_V_FOR_NO_EXPRESSION\",\n \"X_V_FOR_MALFORMED_EXPRESSION\": 32,\n \"32\": \"X_V_FOR_MALFORMED_EXPRESSION\",\n \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\": 33,\n \"33\": \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\",\n \"X_V_BIND_NO_EXPRESSION\": 34,\n \"34\": \"X_V_BIND_NO_EXPRESSION\",\n \"X_V_ON_NO_EXPRESSION\": 35,\n \"35\": \"X_V_ON_NO_EXPRESSION\",\n \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\": 36,\n \"36\": \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\",\n \"X_V_SLOT_MIXED_SLOT_USAGE\": 37,\n \"37\": \"X_V_SLOT_MIXED_SLOT_USAGE\",\n \"X_V_SLOT_DUPLICATE_SLOT_NAMES\": 38,\n \"38\": \"X_V_SLOT_DUPLICATE_SLOT_NAMES\",\n \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\": 39,\n \"39\": \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\",\n \"X_V_SLOT_MISPLACED\": 40,\n \"40\": \"X_V_SLOT_MISPLACED\",\n \"X_V_MODEL_NO_EXPRESSION\": 41,\n \"41\": \"X_V_MODEL_NO_EXPRESSION\",\n \"X_V_MODEL_MALFORMED_EXPRESSION\": 42,\n \"42\": \"X_V_MODEL_MALFORMED_EXPRESSION\",\n \"X_V_MODEL_ON_SCOPE_VARIABLE\": 43,\n \"43\": \"X_V_MODEL_ON_SCOPE_VARIABLE\",\n \"X_V_MODEL_ON_PROPS\": 44,\n \"44\": \"X_V_MODEL_ON_PROPS\",\n \"X_INVALID_EXPRESSION\": 45,\n \"45\": \"X_INVALID_EXPRESSION\",\n \"X_KEEP_ALIVE_INVALID_CHILDREN\": 46,\n \"46\": \"X_KEEP_ALIVE_INVALID_CHILDREN\",\n \"X_PREFIX_ID_NOT_SUPPORTED\": 47,\n \"47\": \"X_PREFIX_ID_NOT_SUPPORTED\",\n \"X_MODULE_MODE_NOT_SUPPORTED\": 48,\n \"48\": \"X_MODULE_MODE_NOT_SUPPORTED\",\n \"X_CACHE_HANDLER_NOT_SUPPORTED\": 49,\n \"49\": \"X_CACHE_HANDLER_NOT_SUPPORTED\",\n \"X_SCOPE_ID_NOT_SUPPORTED\": 50,\n \"50\": \"X_SCOPE_ID_NOT_SUPPORTED\",\n \"X_VNODE_HOOKS\": 51,\n \"51\": \"X_VNODE_HOOKS\",\n \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\": 52,\n \"52\": \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\",\n \"__EXTEND_POINT__\": 53,\n \"53\": \"__EXTEND_POINT__\"\n};\nconst errorMessages = {\n // parse errors\n [0]: \"Illegal comment.\",\n [1]: \"CDATA section is allowed only in XML context.\",\n [2]: \"Duplicate attribute.\",\n [3]: \"End tag cannot have attributes.\",\n [4]: \"Illegal '/' in tags.\",\n [5]: \"Unexpected EOF in tag.\",\n [6]: \"Unexpected EOF in CDATA section.\",\n [7]: \"Unexpected EOF in comment.\",\n [8]: \"Unexpected EOF in script.\",\n [9]: \"Unexpected EOF in tag.\",\n [10]: \"Incorrectly closed comment.\",\n [11]: \"Incorrectly opened comment.\",\n [12]: \"Illegal tag name. Use '<' to print '<'.\",\n [13]: \"Attribute value was expected.\",\n [14]: \"End tag name was expected.\",\n [15]: \"Whitespace was expected.\",\n [16]: \"Unexpected '<!--' in comment.\",\n [17]: `Attribute name cannot contain U+0022 (\"), U+0027 ('), and U+003C (<).`,\n [18]: \"Unquoted attribute value cannot contain U+0022 (\\\"), U+0027 ('), U+003C (<), U+003D (=), and U+0060 (`).\",\n [19]: \"Attribute name cannot start with '='.\",\n [21]: \"'<?' is allowed only in XML context.\",\n [20]: `Unexpected null character.`,\n [22]: \"Illegal '/' in tags.\",\n // Vue-specific parse errors\n [23]: \"Invalid end tag.\",\n [24]: \"Element is missing end tag.\",\n [25]: \"Interpolation end sign was not found.\",\n [27]: \"End bracket for dynamic directive argument was not found. Note that dynamic directive argument cannot contain spaces.\",\n [26]: \"Legal directive name was expected.\",\n // transform errors\n [28]: `v-if/v-else-if is missing expression.`,\n [29]: `v-if/else branches must use unique keys.`,\n [30]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\n [31]: `v-for is missing expression.`,\n [32]: `v-for has invalid expression.`,\n [33]: `<template v-for> key should be placed on the <template> tag.`,\n [34]: `v-bind is missing expression.`,\n [52]: `v-bind with same-name shorthand only allows static argument.`,\n [35]: `v-on is missing expression.`,\n [36]: `Unexpected custom directive on <slot> outlet.`,\n [37]: `Mixed v-slot usage on both the component and nested <template>. When there are multiple named slots, all slots should use <template> syntax to avoid scope ambiguity.`,\n [38]: `Duplicate slot names found. `,\n [39]: `Extraneous children found when component already has explicitly named default slot. These children will be ignored.`,\n [40]: `v-slot can only be used on components or <template> tags.`,\n [41]: `v-model is missing expression.`,\n [42]: `v-model value must be a valid JavaScript member expression.`,\n [43]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\n [44]: `v-model cannot be used on a prop, because local prop bindings are not writable.\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,\n [45]: `Error parsing JavaScript expression: `,\n [46]: `<KeepAlive> expects exactly one child component.`,\n [51]: `@vnode-* hooks in templates are no longer supported. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support has been removed in 3.4.`,\n // generic errors\n [47]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\n [48]: `ES module mode is not supported in this build of compiler.`,\n [49]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\n [50]: `\"scopeId\" option is only supported in module mode.`,\n // just to fulfill types\n [53]: ``\n};\n\nfunction walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = /* @__PURE__ */ Object.create(null)) {\n {\n return;\n }\n}\nfunction isReferencedIdentifier(id, parent, parentStack) {\n {\n return false;\n }\n}\nfunction isInDestructureAssignment(parent, parentStack) {\n if (parent && (parent.type === \"ObjectProperty\" || parent.type === \"ArrayPattern\")) {\n let i = parentStack.length;\n while (i--) {\n const p = parentStack[i];\n if (p.type === \"AssignmentExpression\") {\n return true;\n } else if (p.type !== \"ObjectProperty\" && !p.type.endsWith(\"Pattern\")) {\n break;\n }\n }\n }\n return false;\n}\nfunction isInNewExpression(parentStack) {\n let i = parentStack.length;\n while (i--) {\n const p = parentStack[i];\n if (p.type === \"NewExpression\") {\n return true;\n } else if (p.type !== \"MemberExpression\") {\n break;\n }\n }\n return false;\n}\nfunction walkFunctionParams(node, onIdent) {\n for (const p of node.params) {\n for (const id of extractIdentifiers(p)) {\n onIdent(id);\n }\n }\n}\nfunction walkBlockDeclarations(block, onIdent) {\n for (const stmt of block.body) {\n if (stmt.type === \"VariableDeclaration\") {\n if (stmt.declare) continue;\n for (const decl of stmt.declarations) {\n for (const id of extractIdentifiers(decl.id)) {\n onIdent(id);\n }\n }\n } else if (stmt.type === \"FunctionDeclaration\" || stmt.type === \"ClassDeclaration\") {\n if (stmt.declare || !stmt.id) continue;\n onIdent(stmt.id);\n } else if (isForStatement(stmt)) {\n walkForStatement(stmt, true, onIdent);\n }\n }\n}\nfunction isForStatement(stmt) {\n return stmt.type === \"ForOfStatement\" || stmt.type === \"ForInStatement\" || stmt.type === \"ForStatement\";\n}\nfunction walkForStatement(stmt, isVar, onIdent) {\n const variable = stmt.type === \"ForStatement\" ? stmt.init : stmt.left;\n if (variable && variable.type === \"VariableDeclaration\" && (variable.kind === \"var\" ? isVar : !isVar)) {\n for (const decl of variable.declarations) {\n for (const id of extractIdentifiers(decl.id)) {\n onIdent(id);\n }\n }\n }\n}\nfunction extractIdentifiers(param, nodes = []) {\n switch (param.type) {\n case \"Identifier\":\n nodes.push(param);\n break;\n case \"MemberExpression\":\n let object = param;\n while (object.type === \"MemberExpression\") {\n object = object.object;\n }\n nodes.push(object);\n break;\n case \"ObjectPattern\":\n for (const prop of param.properties) {\n if (prop.type === \"RestElement\") {\n extractIdentifiers(prop.argument, nodes);\n } else {\n extractIdentifiers(prop.value, nodes);\n }\n }\n break;\n case \"ArrayPattern\":\n param.elements.forEach((element) => {\n if (element) extractIdentifiers(element, nodes);\n });\n break;\n case \"RestElement\":\n extractIdentifiers(param.argument, nodes);\n break;\n case \"AssignmentPattern\":\n extractIdentifiers(param.left, nodes);\n break;\n }\n return nodes;\n}\nconst isFunctionType = (node) => {\n return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\n};\nconst isStaticProperty = (node) => node && (node.type === \"ObjectProperty\" || node.type === \"ObjectMethod\") && !node.computed;\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\nconst TS_NODE_TYPES = [\n \"TSAsExpression\",\n // foo as number\n \"TSTypeAssertion\",\n // (<number>foo)\n \"TSNonNullExpression\",\n // foo!\n \"TSInstantiationExpression\",\n // foo<string>\n \"TSSatisfiesExpression\"\n // foo satisfies T\n];\nfunction unwrapTSNode(node) {\n if (TS_NODE_TYPES.includes(node.type)) {\n return unwrapTSNode(node.expression);\n } else {\n return node;\n }\n}\n\nconst isStaticExp = (p) => p.type === 4 && p.isStatic;\nfunction isCoreComponent(tag) {\n switch (tag) {\n case \"Teleport\":\n case \"teleport\":\n return TELEPORT;\n case \"Suspense\":\n case \"suspense\":\n return SUSPENSE;\n case \"KeepAlive\":\n case \"keep-alive\":\n return KEEP_ALIVE;\n case \"BaseTransition\":\n case \"base-transition\":\n return BASE_TRANSITION;\n }\n}\nconst nonIdentifierRE = /^\\d|[^\\$\\w\\xA0-\\uFFFF]/;\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\nconst getExpSource = (exp) => exp.type === 4 ? exp.content : exp.loc.source;\nconst isMemberExpressionBrowser = (exp) => {\n const path = getExpSource(exp).trim().replace(whitespaceRE, (s) => s.trim());\n let state = 0 /* inMemberExp */;\n let stateStack = [];\n let currentOpenBracketCount = 0;\n let currentOpenParensCount = 0;\n let currentStringType = null;\n for (let i = 0; i < path.length; i++) {\n const char = path.charAt(i);\n switch (state) {\n case 0 /* inMemberExp */:\n if (char === \"[\") {\n stateStack.push(state);\n state = 1 /* inBrackets */;\n currentOpenBracketCount++;\n } else if (char === \"(\") {\n stateStack.push(state);\n state = 2 /* inParens */;\n currentOpenParensCount++;\n } else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\n return false;\n }\n break;\n case 1 /* inBrackets */:\n if (char === `'` || char === `\"` || char === \"`\") {\n stateStack.push(state);\n state = 3 /* inString */;\n currentStringType = char;\n } else if (char === `[`) {\n currentOpenBracketCount++;\n } else if (char === `]`) {\n if (!--currentOpenBracketCount) {\n state = stateStack.pop();\n }\n }\n break;\n case 2 /* inParens */:\n if (char === `'` || char === `\"` || char === \"`\") {\n stateStack.push(state);\n state = 3 /* inString */;\n currentStringType = char;\n } else if (char === `(`) {\n currentOpenParensCount++;\n } else if (char === `)`) {\n if (i === path.length - 1) {\n return false;\n }\n if (!--currentOpenParensCount) {\n state = stateStack.pop();\n }\n }\n break;\n case 3 /* inString */:\n if (char === currentStringType) {\n state = stateStack.pop();\n currentStringType = null;\n }\n break;\n }\n }\n return !currentOpenBracketCount && !currentOpenParensCount;\n};\nconst isMemberExpressionNode = NOOP ;\nconst isMemberExpression = isMemberExpressionBrowser ;\nconst fnExpRE = /^\\s*(async\\s*)?(\\([^)]*?\\)|[\\w$_]+)\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\nconst isFnExpressionBrowser = (exp) => fnExpRE.test(getExpSource(exp));\nconst isFnExpressionNode = NOOP ;\nconst isFnExpression = isFnExpressionBrowser ;\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n return advancePositionWithMutation(\n {\n offset: pos.offset,\n line: pos.line,\n column: pos.column\n },\n source,\n numberOfCharacters\n );\n}\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n let linesCount = 0;\n let lastNewLinePos = -1;\n for (let i = 0; i < numberOfCharacters; i++) {\n if (source.charCodeAt(i) === 10) {\n linesCount++;\n lastNewLinePos = i;\n }\n }\n pos.offset += numberOfCharacters;\n pos.line += linesCount;\n pos.column = lastNewLinePos === -1 ? pos.column + numberOfCharacters : numberOfCharacters - lastNewLinePos;\n return pos;\n}\nfunction assert(condition, msg) {\n if (!condition) {\n throw new Error(msg || `unexpected compiler condition`);\n }\n}\nfunction findDir(node, name, allowEmpty = false) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && (allowEmpty || p.exp) && (isString(name) ? p.name === name : name.test(p.name))) {\n return p;\n }\n }\n}\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 6) {\n if (dynamicOnly) continue;\n if (p.name === name && (p.value || allowEmpty)) {\n return p;\n }\n } else if (p.name === \"bind\" && (p.exp || allowEmpty) && isStaticArgOf(p.arg, name)) {\n return p;\n }\n }\n}\nfunction isStaticArgOf(arg, name) {\n return !!(arg && isStaticExp(arg) && arg.content === name);\n}\nfunction hasDynamicKeyVBind(node) {\n return node.props.some(\n (p) => p.type === 7 && p.name === \"bind\" && (!p.arg || // v-bind=\"obj\"\n p.arg.type !== 4 || // v-bind:[_ctx.foo]\n !p.arg.isStatic)\n // v-bind:[foo]\n );\n}\nfunction isText$1(node) {\n return node.type === 5 || node.type === 2;\n}\nfunction isVSlot(p) {\n return p.type === 7 && p.name === \"slot\";\n}\nfunction isTemplateNode(node) {\n return node.type === 1 && node.tagType === 3;\n}\nfunction isSlotOutlet(node) {\n return node.type === 1 && node.tagType === 2;\n}\nconst propsHelperSet = /* @__PURE__ */ new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\nfunction getUnnormalizedProps(props, callPath = []) {\n if (props && !isString(props) && props.type === 14) {\n const callee = props.callee;\n if (!isString(callee) && propsHelperSet.has(callee)) {\n return getUnnormalizedProps(\n props.arguments[0],\n callPath.concat(props)\n );\n }\n }\n return [props, callPath];\n}\nfunction injectProp(node, prop, context) {\n let propsWithInjection;\n let props = node.type === 13 ? node.props : node.arguments[2];\n let callPath = [];\n let parentCall;\n if (props && !isString(props) && props.type === 14) {\n const ret = getUnnormalizedProps(props);\n props = ret[0];\n callPath = ret[1];\n parentCall = callPath[callPath.length - 1];\n }\n if (props == null || isString(props)) {\n propsWithInjection = createObjectExpression([prop]);\n } else if (props.type === 14) {\n const first = props.arguments[0];\n if (!isString(first) && first.type === 15) {\n if (!hasProp(prop, first)) {\n first.properties.unshift(prop);\n }\n } else {\n if (props.callee === TO_HANDLERS) {\n propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n createObjectExpression([prop]),\n props\n ]);\n } else {\n props.arguments.unshift(createObjectExpression([prop]));\n }\n }\n !propsWithInjection && (propsWithInjection = props);\n } else if (props.type === 15) {\n if (!hasProp(prop, props)) {\n props.properties.unshift(prop);\n }\n propsWithInjection = props;\n } else {\n propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n createObjectExpression([prop]),\n props\n ]);\n if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\n parentCall = callPath[callPath.length - 2];\n }\n }\n if (node.type === 13) {\n if (parentCall) {\n parentCall.arguments[0] = propsWithInjection;\n } else {\n node.props = propsWithInjection;\n }\n } else {\n if (parentCall) {\n parentCall.arguments[0] = propsWithInjection;\n } else {\n node.arguments[2] = propsWithInjection;\n }\n }\n}\nfunction hasProp(prop, props) {\n let result = false;\n if (prop.key.type === 4) {\n const propKeyName = prop.key.content;\n result = props.properties.some(\n (p) => p.key.type === 4 && p.key.content === propKeyName\n );\n }\n return result;\n}\nfunction toValidAssetId(name, type) {\n return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\n return searchValue === \"-\" ? \"_\" : name.charCodeAt(replaceValue).toString();\n })}`;\n}\nfunction hasScopeRef(node, ids) {\n if (!node || Object.keys(ids).length === 0) {\n return false;\n }\n switch (node.type) {\n case 1:\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\n return true;\n }\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 11:\n if (hasScopeRef(node.source, ids)) {\n return true;\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 9:\n return node.branches.some((b) => hasScopeRef(b, ids));\n case 10:\n if (hasScopeRef(node.condition, ids)) {\n return true;\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 4:\n return !node.isStatic && isSimpleIdentifier(node.content) && !!ids[node.content];\n case 8:\n return node.children.some((c) => isObject(c) && hasScopeRef(c, ids));\n case 5:\n case 12:\n return hasScopeRef(node.content, ids);\n case 2:\n case 3:\n case 20:\n return false;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) ;\n return false;\n }\n}\nfunction getMemoedVNodeCall(node) {\n if (node.type === 14 && node.callee === WITH_MEMO) {\n return node.arguments[1].returns;\n } else {\n return node;\n }\n}\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+(\\S[\\s\\S]*)/;\n\nconst defaultParserOptions = {\n parseMode: \"base\",\n ns: 0,\n delimiters: [`{{`, `}}`],\n getNamespace: () => 0,\n isVoidTag: NO,\n isPreTag: NO,\n isIgnoreNewlineTag: NO,\n isCustomElement: NO,\n onError: defaultOnError,\n onWarn: defaultOnWarn,\n comments: !!(process.env.NODE_ENV !== \"production\"),\n prefixIdentifiers: false\n};\nlet currentOptions = defaultParserOptions;\nlet currentRoot = null;\nlet currentInput = \"\";\nlet currentOpenTag = null;\nlet currentProp = null;\nlet currentAttrValue = \"\";\nlet currentAttrStartIndex = -1;\nlet currentAttrEndIndex = -1;\nlet inPre = 0;\nlet inVPre = false;\nlet currentVPreBoundary = null;\nconst stack = [];\nconst tokenizer = new Tokenizer(stack, {\n onerr: emitError,\n ontext(start, end) {\n onText(getSlice(start, end), start, end);\n },\n ontextentity(char, start, end) {\n onText(char, start, end);\n },\n oninterpolation(start, end) {\n if (inVPre) {\n return onText(getSlice(start, end), start, end);\n }\n let innerStart = start + tokenizer.delimiterOpen.length;\n let innerEnd = end - tokenizer.delimiterClose.length;\n while (isWhitespace(currentInput.charCodeAt(innerStart))) {\n innerStart++;\n }\n while (isWhitespace(currentInput.charCodeAt(innerEnd - 1))) {\n innerEnd--;\n }\n let exp = getSlice(innerStart, innerEnd);\n if (exp.includes(\"&\")) {\n {\n exp = currentOptions.decodeEntities(exp, false);\n }\n }\n addNode({\n type: 5,\n content: createExp(exp, false, getLoc(innerStart, innerEnd)),\n loc: getLoc(start, end)\n });\n },\n onopentagname(start, end) {\n const name = getSlice(start, end);\n currentOpenTag = {\n type: 1,\n tag: name,\n ns: currentOptions.getNamespace(name, stack[0], currentOptions.ns),\n tagType: 0,\n // will be refined on tag close\n props: [],\n children: [],\n loc: getLoc(start - 1, end),\n codegenNode: void 0\n };\n },\n onopentagend(end) {\n endOpenTag(end);\n },\n onclosetag(start, end) {\n const name = getSlice(start, end);\n if (!currentOptions.isVoidTag(name)) {\n let found = false;\n for (let i = 0; i < stack.length; i++) {\n const e = stack[i];\n if (e.tag.toLowerCase() === name.toLowerCase()) {\n found = true;\n if (i > 0) {\n emitError(24, stack[0].loc.start.offset);\n }\n for (let j = 0; j <= i; j++) {\n const el = stack.shift();\n onCloseTag(el, end, j < i);\n }\n break;\n }\n }\n if (!found) {\n emitError(23, backTrack(start, 60));\n }\n }\n },\n onselfclosingtag(end) {\n const name = currentOpenTag.tag;\n currentOpenTag.isSelfClosing = true;\n endOpenTag(end);\n if (stack[0] && stack[0].tag === name) {\n onCloseTag(stack.shift(), end);\n }\n },\n onattribname(start, end) {\n currentProp = {\n type: 6,\n name: getSlice(start, end),\n nameLoc: getLoc(start, end),\n value: void 0,\n loc: getLoc(start)\n };\n },\n ondirname(start, end) {\n const raw = getSlice(start, end);\n const name = raw === \".\" || raw === \":\" ? \"bind\" : raw === \"@\" ? \"on\" : raw === \"#\" ? \"slot\" : raw.slice(2);\n if (!inVPre && name === \"\") {\n emitError(26, start);\n }\n if (inVPre || name === \"\") {\n currentProp = {\n type: 6,\n name: raw,\n nameLoc: getLoc(start, end),\n value: void 0,\n loc: getLoc(start)\n };\n } else {\n currentProp = {\n type: 7,\n name,\n rawName: raw,\n exp: void 0,\n arg: void 0,\n modifiers: raw === \".\" ? [createSimpleExpression(\"prop\")] : [],\n loc: getLoc(start)\n };\n if (name === \"pre\") {\n inVPre = tokenizer.inVPre = true;\n currentVPreBoundary = currentOpenTag;\n const props = currentOpenTag.props;\n for (let i = 0; i < props.length; i++) {\n if (props[i].type === 7) {\n props[i] = dirToAttr(props[i]);\n }\n }\n }\n }\n },\n ondirarg(start, end) {\n if (start === end) return;\n const arg = getSlice(start, end);\n if (inVPre) {\n currentProp.name += arg;\n setLocEnd(currentProp.nameLoc, end);\n } else {\n const isStatic = arg[0] !== `[`;\n currentProp.arg = createExp(\n isStatic ? arg : arg.slice(1, -1),\n isStatic,\n getLoc(start, end),\n isStatic ? 3 : 0\n );\n }\n },\n ondirmodifier(start, end) {\n const mod = getSlice(start, end);\n if (inVPre) {\n currentProp.name += \".\" + mod;\n setLocEnd(currentProp.nameLoc, end);\n } else if (currentProp.name === \"slot\") {\n const arg = currentProp.arg;\n if (arg) {\n arg.content += \".\" + mod;\n setLocEnd(arg.loc, end);\n }\n } else {\n const exp = createSimpleExpression(mod, true, getLoc(start, end));\n currentProp.modifiers.push(exp);\n }\n },\n onattribdata(start, end) {\n currentAttrValue += getSlice(start, end);\n if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n currentAttrEndIndex = end;\n },\n onattribentity(char, start, end) {\n currentAttrValue += char;\n if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n currentAttrEndIndex = end;\n },\n onattribnameend(end) {\n const start = currentProp.loc.start.offset;\n const name = getSlice(start, end);\n if (currentProp.type === 7) {\n currentProp.rawName = name;\n }\n if (currentOpenTag.props.some(\n (p) => (p.type === 7 ? p.rawName : p.name) === name\n )) {\n emitError(2, start);\n }\n },\n onattribend(quote, end) {\n if (currentOpenTag && currentProp) {\n setLocEnd(currentProp.loc, end);\n if (quote !== 0) {\n if (currentAttrValue.includes(\"&\")) {\n currentAttrValue = currentOptions.decodeEntities(\n currentAttrValue,\n true\n );\n }\n if (currentProp.type === 6) {\n if (currentProp.name === \"class\") {\n currentAttrValue = condense(currentAttrValue).trim();\n }\n if (quote === 1 && !currentAttrValue) {\n emitError(13, end);\n }\n currentProp.value = {\n type: 2,\n content: currentAttrValue,\n loc: quote === 1 ? getLoc(currentAttrStartIndex, currentAttrEndIndex) : getLoc(currentAttrStartIndex - 1, currentAttrEndIndex + 1)\n };\n if (tokenizer.inSFCRoot && currentOpenTag.tag === \"template\" && currentProp.name === \"lang\" && currentAttrValue && currentAttrValue !== \"html\") {\n tokenizer.enterRCDATA(toCharCodes(`</template`), 0);\n }\n } else {\n let expParseMode = 0 /* Normal */;\n currentProp.exp = createExp(\n currentAttrValue,\n false,\n getLoc(currentAttrStartIndex, currentAttrEndIndex),\n 0,\n expParseMode\n );\n if (currentProp.name === \"for\") {\n currentProp.forParseResult = parseForExpression(currentProp.exp);\n }\n let syncIndex = -1;\n if (currentProp.name === \"bind\" && (syncIndex = currentProp.modifiers.findIndex(\n (mod) => mod.content === \"sync\"\n )) > -1 && checkCompatEnabled(\n \"COMPILER_V_BIND_SYNC\",\n currentOptions,\n currentProp.loc,\n currentProp.rawName\n )) {\n currentProp.name = \"model\";\n currentProp.modifiers.splice(syncIndex, 1);\n }\n }\n }\n if (currentProp.type !== 7 || currentProp.name !== \"pre\") {\n currentOpenTag.props.push(currentProp);\n }\n }\n currentAttrValue = \"\";\n currentAttrStartIndex = currentAttrEndIndex = -1;\n },\n oncomment(start, end) {\n if (currentOptions.comments) {\n addNode({\n type: 3,\n content: getSlice(start, end),\n loc: getLoc(start - 4, end + 3)\n });\n }\n },\n onend() {\n const end = currentInput.length;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && tokenizer.state !== 1) {\n switch (tokenizer.state) {\n case 5:\n case 8:\n emitError(5, end);\n break;\n case 3:\n case 4:\n emitError(\n 25,\n tokenizer.sectionStart\n );\n break;\n case 28:\n if (tokenizer.currentSequence === Sequences.CdataEnd) {\n emitError(6, end);\n } else {\n emitError(7, end);\n }\n break;\n case 6:\n case 7:\n case 9:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n // \"\n case 20:\n // '\n case 21:\n emitError(9, end);\n break;\n }\n }\n for (let index = 0; index < stack.length; index++) {\n onCloseTag(stack[index], end - 1);\n emitError(24, stack[index].loc.start.offset);\n }\n },\n oncdata(start, end) {\n if (stack[0].ns !== 0) {\n onText(getSlice(start, end), start, end);\n } else {\n emitError(1, start - 9);\n }\n },\n onprocessinginstruction(start) {\n if ((stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n emitError(\n 21,\n start - 1\n );\n }\n }\n});\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nconst stripParensRE = /^\\(|\\)$/g;\nfunction parseForExpression(input) {\n const loc = input.loc;\n const exp = input.content;\n const inMatch = exp.match(forAliasRE);\n if (!inMatch) return;\n const [, LHS, RHS] = inMatch;\n const createAliasExpression = (content, offset, asParam = false) => {\n const start = loc.start.offset + offset;\n const end = start + content.length;\n return createExp(\n content,\n false,\n getLoc(start, end),\n 0,\n asParam ? 1 /* Params */ : 0 /* Normal */\n );\n };\n const result = {\n source: createAliasExpression(RHS.trim(), exp.indexOf(RHS, LHS.length)),\n value: void 0,\n key: void 0,\n index: void 0,\n finalized: false\n };\n let valueContent = LHS.trim().replace(stripParensRE, \"\").trim();\n const trimmedOffset = LHS.indexOf(valueContent);\n const iteratorMatch = valueContent.match(forIteratorRE);\n if (iteratorMatch) {\n valueContent = valueContent.replace(forIteratorRE, \"\").trim();\n const keyContent = iteratorMatch[1].trim();\n let keyOffset;\n if (keyContent) {\n keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\n result.key = createAliasExpression(keyContent, keyOffset, true);\n }\n if (iteratorMatch[2]) {\n const indexContent = iteratorMatch[2].trim();\n if (indexContent) {\n result.index = createAliasExpression(\n indexContent,\n exp.indexOf(\n indexContent,\n result.key ? keyOffset + keyContent.length : trimmedOffset + valueContent.length\n ),\n true\n );\n }\n }\n }\n if (valueContent) {\n result.value = createAliasExpression(valueContent, trimmedOffset, true);\n }\n return result;\n}\nfunction getSlice(start, end) {\n return currentInput.slice(start, end);\n}\nfunction endOpenTag(end) {\n if (tokenizer.inSFCRoot) {\n currentOpenTag.innerLoc = getLoc(end + 1, end + 1);\n }\n addNode(currentOpenTag);\n const { tag, ns } = currentOpenTag;\n if (ns === 0 && currentOptions.isPreTag(tag)) {\n inPre++;\n }\n if (currentOptions.isVoidTag(tag)) {\n onCloseTag(currentOpenTag, end);\n } else {\n stack.unshift(currentOpenTag);\n if (ns === 1 || ns === 2) {\n tokenizer.inXML = true;\n }\n }\n currentOpenTag = null;\n}\nfunction onText(content, start, end) {\n {\n const tag = stack[0] && stack[0].tag;\n if (tag !== \"script\" && tag !== \"style\" && content.includes(\"&\")) {\n content = currentOptions.decodeEntities(content, false);\n }\n }\n const parent = stack[0] || currentRoot;\n const lastNode = parent.children[parent.children.length - 1];\n if (lastNode && lastNode.type === 2) {\n lastNode.content += content;\n setLocEnd(lastNode.loc, end);\n } else {\n parent.children.push({\n type: 2,\n content,\n loc: getLoc(start, end)\n });\n }\n}\nfunction onCloseTag(el, end, isImplied = false) {\n if (isImplied) {\n setLocEnd(el.loc, backTrack(end, 60));\n } else {\n setLocEnd(el.loc, lookAhead(end, 62) + 1);\n }\n if (tokenizer.inSFCRoot) {\n if (el.children.length) {\n el.innerLoc.end = extend({}, el.children[el.children.length - 1].loc.end);\n } else {\n el.innerLoc.end = extend({}, el.innerLoc.start);\n }\n el.innerLoc.source = getSlice(\n el.innerLoc.start.offset,\n el.innerLoc.end.offset\n );\n }\n const { tag, ns, children } = el;\n if (!inVPre) {\n if (tag === \"slot\") {\n el.tagType = 2;\n } else if (isFragmentTemplate(el)) {\n el.tagType = 3;\n } else if (isComponent(el)) {\n el.tagType = 1;\n }\n }\n if (!tokenizer.inRCDATA) {\n el.children = condenseWhitespace(children);\n }\n if (ns === 0 && currentOptions.isIgnoreNewlineTag(tag)) {\n const first = children[0];\n if (first && first.type === 2) {\n first.content = first.content.replace(/^\\r?\\n/, \"\");\n }\n }\n if (ns === 0 && currentOptions.isPreTag(tag)) {\n inPre--;\n }\n if (currentVPreBoundary === el) {\n inVPre = tokenizer.inVPre = false;\n currentVPreBoundary = null;\n }\n if (tokenizer.inXML && (stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n tokenizer.inXML = false;\n }\n {\n const props = el.props;\n if (!!(process.env.NODE_ENV !== \"production\") && isCompatEnabled(\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n currentOptions\n )) {\n let hasIf = false;\n let hasFor = false;\n for (let i = 0; i < props.length; i++) {\n const p = props[i];\n if (p.type === 7) {\n if (p.name === \"if\") {\n hasIf = true;\n } else if (p.name === \"for\") {\n hasFor = true;\n }\n }\n if (hasIf && hasFor) {\n warnDeprecation(\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n currentOptions,\n el.loc\n );\n break;\n }\n }\n }\n if (!tokenizer.inSFCRoot && isCompatEnabled(\n \"COMPILER_NATIVE_TEMPLATE\",\n currentOptions\n ) && el.tag === \"template\" && !isFragmentTemplate(el)) {\n !!(process.env.NODE_ENV !== \"production\") && warnDeprecation(\n \"COMPILER_NATIVE_TEMPLATE\",\n currentOptions,\n el.loc\n );\n const parent = stack[0] || currentRoot;\n const index = parent.children.indexOf(el);\n parent.children.splice(index, 1, ...el.children);\n }\n const inlineTemplateProp = props.find(\n (p) => p.type === 6 && p.name === \"inline-template\"\n );\n if (inlineTemplateProp && checkCompatEnabled(\n \"COMPILER_INLINE_TEMPLATE\",\n currentOptions,\n inlineTemplateProp.loc\n ) && el.children.length) {\n inlineTemplateProp.value = {\n type: 2,\n content: getSlice(\n el.children[0].loc.start.offset,\n el.children[el.children.length - 1].loc.end.offset\n ),\n loc: inlineTemplateProp.loc\n };\n }\n }\n}\nfunction lookAhead(index, c) {\n let i = index;\n while (currentInput.charCodeAt(i) !== c && i < currentInput.length - 1) i++;\n return i;\n}\nfunction backTrack(index, c) {\n let i = index;\n while (currentInput.charCodeAt(i) !== c && i >= 0) i--;\n return i;\n}\nconst specialTemplateDir = /* @__PURE__ */ new Set([\"if\", \"else\", \"else-if\", \"for\", \"slot\"]);\nfunction isFragmentTemplate({ tag, props }) {\n if (tag === \"template\") {\n for (let i = 0; i < props.length; i++) {\n if (props[i].type === 7 && specialTemplateDir.has(props[i].name)) {\n return true;\n }\n }\n }\n return false;\n}\nfunction isComponent({ tag, props }) {\n if (currentOptions.isCustomElement(tag)) {\n return false;\n }\n if (tag === \"component\" || isUpperCase(tag.charCodeAt(0)) || isCoreComponent(tag) || currentOptions.isBuiltInComponent && currentOptions.isBuiltInComponent(tag) || currentOptions.isNativeTag && !currentOptions.isNativeTag(tag)) {\n return true;\n }\n for (let i = 0; i < props.length; i++) {\n const p = props[i];\n if (p.type === 6) {\n if (p.name === \"is\" && p.value) {\n if (p.value.content.startsWith(\"vue:\")) {\n return true;\n } else if (checkCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n currentOptions,\n p.loc\n )) {\n return true;\n }\n }\n } else if (// :is on plain element - only treat as component in compat mode\n p.name === \"bind\" && isStaticArgOf(p.arg, \"is\") && checkCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n currentOptions,\n p.loc\n )) {\n return true;\n }\n }\n return false;\n}\nfunction isUpperCase(c) {\n return c > 64 && c < 91;\n}\nconst windowsNewlineRE = /\\r\\n/g;\nfunction condenseWhitespace(nodes, tag) {\n const shouldCondense = currentOptions.whitespace !== \"preserve\";\n let removedWhitespace = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.type === 2) {\n if (!inPre) {\n if (isAllWhitespace(node.content)) {\n const prev = nodes[i - 1] && nodes[i - 1].type;\n const next = nodes[i + 1] && nodes[i + 1].type;\n if (!prev || !next || shouldCondense && (prev === 3 && (next === 3 || next === 1) || prev === 1 && (next === 3 || next === 1 && hasNewlineChar(node.content)))) {\n removedWhitespace = true;\n nodes[i] = null;\n } else {\n node.content = \" \";\n }\n } else if (shouldCondense) {\n node.content = condense(node.content);\n }\n } else {\n node.content = node.content.replace(windowsNewlineRE, \"\\n\");\n }\n }\n }\n return removedWhitespace ? nodes.filter(Boolean) : nodes;\n}\nfunction isAllWhitespace(str) {\n for (let i = 0; i < str.length; i++) {\n if (!isWhitespace(str.charCodeAt(i))) {\n return false;\n }\n }\n return true;\n}\nfunction hasNewlineChar(str) {\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c === 10 || c === 13) {\n return true;\n }\n }\n return false;\n}\nfunction condense(str) {\n let ret = \"\";\n let prevCharIsWhitespace = false;\n for (let i = 0; i < str.length; i++) {\n if (isWhitespace(str.charCodeAt(i))) {\n if (!prevCharIsWhitespace) {\n ret += \" \";\n prevCharIsWhitespace = true;\n }\n } else {\n ret += str[i];\n prevCharIsWhitespace = false;\n }\n }\n return ret;\n}\nfunction addNode(node) {\n (stack[0] || currentRoot).children.push(node);\n}\nfunction getLoc(start, end) {\n return {\n start: tokenizer.getPos(start),\n // @ts-expect-error allow late attachment\n end: end == null ? end : tokenizer.getPos(end),\n // @ts-expect-error allow late attachment\n source: end == null ? end : getSlice(start, end)\n };\n}\nfunction cloneLoc(loc) {\n return getLoc(loc.start.offset, loc.end.offset);\n}\nfunction setLocEnd(loc, end) {\n loc.end = tokenizer.getPos(end);\n loc.source = getSlice(loc.start.offset, end);\n}\nfunction dirToAttr(dir) {\n const attr = {\n type: 6,\n name: dir.rawName,\n nameLoc: getLoc(\n dir.loc.start.offset,\n dir.loc.start.offset + dir.rawName.length\n ),\n value: void 0,\n loc: dir.loc\n };\n if (dir.exp) {\n const loc = dir.exp.loc;\n if (loc.end.offset < dir.loc.end.offset) {\n loc.start.offset--;\n loc.start.column--;\n loc.end.offset++;\n loc.end.column++;\n }\n attr.value = {\n type: 2,\n content: dir.exp.content,\n loc\n };\n }\n return attr;\n}\nfunction createExp(content, isStatic = false, loc, constType = 0, parseMode = 0 /* Normal */) {\n const exp = createSimpleExpression(content, isStatic, loc, constType);\n return exp;\n}\nfunction emitError(code, index, message) {\n currentOptions.onError(\n createCompilerError(code, getLoc(index, index), void 0, message)\n );\n}\nfunction reset() {\n tokenizer.reset();\n currentOpenTag = null;\n currentProp = null;\n currentAttrValue = \"\";\n currentAttrStartIndex = -1;\n currentAttrEndIndex = -1;\n stack.length = 0;\n}\nfunction baseParse(input, options) {\n reset();\n currentInput = input;\n currentOptions = extend({}, defaultParserOptions);\n if (options) {\n let key;\n for (key in options) {\n if (options[key] != null) {\n currentOptions[key] = options[key];\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!currentOptions.decodeEntities) {\n throw new Error(\n `[@vue/compiler-core] decodeEntities option is required in browser builds.`\n );\n }\n }\n tokenizer.mode = currentOptions.parseMode === \"html\" ? 1 : currentOptions.parseMode === \"sfc\" ? 2 : 0;\n tokenizer.inXML = currentOptions.ns === 1 || currentOptions.ns === 2;\n const delimiters = options && options.delimiters;\n if (delimiters) {\n tokenizer.delimiterOpen = toCharCodes(delimiters[0]);\n tokenizer.delimiterClose = toCharCodes(delimiters[1]);\n }\n const root = currentRoot = createRoot([], input);\n tokenizer.parse(currentInput);\n root.loc = getLoc(0, input.length);\n root.children = condenseWhitespace(root.children);\n currentRoot = null;\n return root;\n}\n\nfunction cacheStatic(root, context) {\n walk(\n root,\n void 0,\n context,\n // Root node is unfortunately non-hoistable due to potential parent\n // fallthrough attributes.\n isSingleElementRoot(root, root.children[0])\n );\n}\nfunction isSingleElementRoot(root, child) {\n const { children } = root;\n return children.length === 1 && child.type === 1 && !isSlotOutlet(child);\n}\nfunction walk(node, parent, context, doNotHoistNode = false, inFor = false) {\n const { children } = node;\n const toCache = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.type === 1 && child.tagType === 0) {\n const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n if (constantType > 0) {\n if (constantType >= 2) {\n child.codegenNode.patchFlag = -1;\n toCache.push(child);\n continue;\n }\n } else {\n const codegenNode = child.codegenNode;\n if (codegenNode.type === 13) {\n const flag = codegenNode.patchFlag;\n if ((flag === void 0 || flag === 512 || flag === 1) && getGeneratedPropsConstantType(child, context) >= 2) {\n const props = getNodeProps(child);\n if (props) {\n codegenNode.props = context.hoist(props);\n }\n }\n if (codegenNode.dynamicProps) {\n codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\n }\n }\n }\n } else if (child.type === 12) {\n const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n if (constantType >= 2) {\n toCache.push(child);\n continue;\n }\n }\n if (child.type === 1) {\n const isComponent = child.tagType === 1;\n if (isComponent) {\n context.scopes.vSlot++;\n }\n walk(child, node, context, false, inFor);\n if (isComponent) {\n context.scopes.vSlot--;\n }\n } else if (child.type === 11) {\n walk(child, node, context, child.children.length === 1, true);\n } else if (child.type === 9) {\n for (let i2 = 0; i2 < child.branches.length; i2++) {\n walk(\n child.branches[i2],\n node,\n context,\n child.branches[i2].children.length === 1,\n inFor\n );\n }\n }\n }\n let cachedAsArray = false;\n if (toCache.length === children.length && node.type === 1) {\n if (node.tagType === 0 && node.codegenNode && node.codegenNode.type === 13 && isArray(node.codegenNode.children)) {\n node.codegenNode.children = getCacheExpression(\n createArrayExpression(node.codegenNode.children)\n );\n cachedAsArray = true;\n } else if (node.tagType === 1 && node.codegenNode && node.codegenNode.type === 13 && node.codegenNode.children && !isArray(node.codegenNode.children) && node.codegenNode.children.type === 15) {\n const slot = getSlotNode(node.codegenNode, \"default\");\n if (slot) {\n slot.returns = getCacheExpression(\n createArrayExpression(slot.returns)\n );\n cachedAsArray = true;\n }\n } else if (node.tagType === 3 && parent && parent.type === 1 && parent.tagType === 1 && parent.codegenNode && parent.codegenNode.type === 13 && parent.codegenNode.children && !isArray(parent.codegenNode.children) && parent.codegenNode.children.type === 15) {\n const slotName = findDir(node, \"slot\", true);\n const slot = slotName && slotName.arg && getSlotNode(parent.codegenNode, slotName.arg);\n if (slot) {\n slot.returns = getCacheExpression(\n createArrayExpression(slot.returns)\n );\n cachedAsArray = true;\n }\n }\n }\n if (!cachedAsArray) {\n for (const child of toCache) {\n child.codegenNode = context.cache(child.codegenNode);\n }\n }\n function getCacheExpression(value) {\n const exp = context.cache(value);\n if (inFor && context.hmr) {\n exp.needArraySpread = true;\n }\n return exp;\n }\n function getSlotNode(node2, name) {\n if (node2.children && !isArray(node2.children) && node2.children.type === 15) {\n const slot = node2.children.properties.find(\n (p) => p.key === name || p.key.content === name\n );\n return slot && slot.value;\n }\n }\n if (toCache.length && context.transformHoist) {\n context.transformHoist(children, context, node);\n }\n}\nfunction getConstantType(node, context) {\n const { constantCache } = context;\n switch (node.type) {\n case 1:\n if (node.tagType !== 0) {\n return 0;\n }\n const cached = constantCache.get(node);\n if (cached !== void 0) {\n return cached;\n }\n const codegenNode = node.codegenNode;\n if (codegenNode.type !== 13) {\n return 0;\n }\n if (codegenNode.isBlock && node.tag !== \"svg\" && node.tag !== \"foreignObject\" && node.tag !== \"math\") {\n return 0;\n }\n if (codegenNode.patchFlag === void 0) {\n let returnType2 = 3;\n const generatedPropsType = getGeneratedPropsConstantType(node, context);\n if (generatedPropsType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (generatedPropsType < returnType2) {\n returnType2 = generatedPropsType;\n }\n for (let i = 0; i < node.children.length; i++) {\n const childType = getConstantType(node.children[i], context);\n if (childType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (childType < returnType2) {\n returnType2 = childType;\n }\n }\n if (returnType2 > 1) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && p.name === \"bind\" && p.exp) {\n const expType = getConstantType(p.exp, context);\n if (expType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (expType < returnType2) {\n returnType2 = expType;\n }\n }\n }\n }\n if (codegenNode.isBlock) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7) {\n constantCache.set(node, 0);\n return 0;\n }\n }\n context.removeHelper(OPEN_BLOCK);\n context.removeHelper(\n getVNodeBlockHelper(context.inSSR, codegenNode.isComponent)\n );\n codegenNode.isBlock = false;\n context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\n }\n constantCache.set(node, returnType2);\n return returnType2;\n } else {\n constantCache.set(node, 0);\n return 0;\n }\n case 2:\n case 3:\n return 3;\n case 9:\n case 11:\n case 10:\n return 0;\n case 5:\n case 12:\n return getConstantType(node.content, context);\n case 4:\n return node.constType;\n case 8:\n let returnType = 3;\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (isString(child) || isSymbol(child)) {\n continue;\n }\n const childType = getConstantType(child, context);\n if (childType === 0) {\n return 0;\n } else if (childType < returnType) {\n returnType = childType;\n }\n }\n return returnType;\n case 20:\n return 2;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) ;\n return 0;\n }\n}\nconst allowHoistedHelperSet = /* @__PURE__ */ new Set([\n NORMALIZE_CLASS,\n NORMALIZE_STYLE,\n NORMALIZE_PROPS,\n GUARD_REACTIVE_PROPS\n]);\nfunction getConstantTypeOfHelperCall(value, context) {\n if (value.type === 14 && !isString(value.callee) && allowHoistedHelperSet.has(value.callee)) {\n const arg = value.arguments[0];\n if (arg.type === 4) {\n return getConstantType(arg, context);\n } else if (arg.type === 14) {\n return getConstantTypeOfHelperCall(arg, context);\n }\n }\n return 0;\n}\nfunction getGeneratedPropsConstantType(node, context) {\n let returnType = 3;\n const props = getNodeProps(node);\n if (props && props.type === 15) {\n const { properties } = props;\n for (let i = 0; i < properties.length; i++) {\n const { key, value } = properties[i];\n const keyType = getConstantType(key, context);\n if (keyType === 0) {\n return keyType;\n }\n if (keyType < returnType) {\n returnType = keyType;\n }\n let valueType;\n if (value.type === 4) {\n valueType = getConstantType(value, context);\n } else if (value.type === 14) {\n valueType = getConstantTypeOfHelperCall(value, context);\n } else {\n valueType = 0;\n }\n if (valueType === 0) {\n return valueType;\n }\n if (valueType < returnType) {\n returnType = valueType;\n }\n }\n }\n return returnType;\n}\nfunction getNodeProps(node) {\n const codegenNode = node.codegenNode;\n if (codegenNode.type === 13) {\n return codegenNode.props;\n }\n}\n\nfunction createTransformContext(root, {\n filename = \"\",\n prefixIdentifiers = false,\n hoistStatic = false,\n hmr = false,\n cacheHandlers = false,\n nodeTransforms = [],\n directiveTransforms = {},\n transformHoist = null,\n isBuiltInComponent = NOOP,\n isCustomElement = NOOP,\n expressionPlugins = [],\n scopeId = null,\n slotted = true,\n ssr = false,\n inSSR = false,\n ssrCssVars = ``,\n bindingMetadata = EMPTY_OBJ,\n inline = false,\n isTS = false,\n onError = defaultOnError,\n onWarn = defaultOnWarn,\n compatConfig\n}) {\n const nameMatch = filename.replace(/\\?.*$/, \"\").match(/([^/\\\\]+)\\.\\w+$/);\n const context = {\n // options\n filename,\n selfName: nameMatch && capitalize(camelize(nameMatch[1])),\n prefixIdentifiers,\n hoistStatic,\n hmr,\n cacheHandlers,\n nodeTransforms,\n directiveTransforms,\n transformHoist,\n isBuiltInComponent,\n isCustomElement,\n expressionPlugins,\n scopeId,\n slotted,\n ssr,\n inSSR,\n ssrCssVars,\n bindingMetadata,\n inline,\n isTS,\n onError,\n onWarn,\n compatConfig,\n // state\n root,\n helpers: /* @__PURE__ */ new Map(),\n components: /* @__PURE__ */ new Set(),\n directives: /* @__PURE__ */ new Set(),\n hoists: [],\n imports: [],\n cached: [],\n constantCache: /* @__PURE__ */ new WeakMap(),\n temps: 0,\n identifiers: /* @__PURE__ */ Object.create(null),\n scopes: {\n vFor: 0,\n vSlot: 0,\n vPre: 0,\n vOnce: 0\n },\n parent: null,\n grandParent: null,\n currentNode: root,\n childIndex: 0,\n inVOnce: false,\n // methods\n helper(name) {\n const count = context.helpers.get(name) || 0;\n context.helpers.set(name, count + 1);\n return name;\n },\n removeHelper(name) {\n const count = context.helpers.get(name);\n if (count) {\n const currentCount = count - 1;\n if (!currentCount) {\n context.helpers.delete(name);\n } else {\n context.helpers.set(name, currentCount);\n }\n }\n },\n helperString(name) {\n return `_${helperNameMap[context.helper(name)]}`;\n },\n replaceNode(node) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!context.currentNode) {\n throw new Error(`Node being replaced is already removed.`);\n }\n if (!context.parent) {\n throw new Error(`Cannot replace root node.`);\n }\n }\n context.parent.children[context.childIndex] = context.currentNode = node;\n },\n removeNode(node) {\n if (!!(process.env.NODE_ENV !== \"production\") && !context.parent) {\n throw new Error(`Cannot remove root node.`);\n }\n const list = context.parent.children;\n const removalIndex = node ? list.indexOf(node) : context.currentNode ? context.childIndex : -1;\n if (!!(process.env.NODE_ENV !== \"production\") && removalIndex < 0) {\n throw new Error(`node being removed is not a child of current parent`);\n }\n if (!node || node === context.currentNode) {\n context.currentNode = null;\n context.onNodeRemoved();\n } else {\n if (context.childIndex > removalIndex) {\n context.childIndex--;\n context.onNodeRemoved();\n }\n }\n context.parent.children.splice(removalIndex, 1);\n },\n onNodeRemoved: NOOP,\n addIdentifiers(exp) {\n },\n removeIdentifiers(exp) {\n },\n hoist(exp) {\n if (isString(exp)) exp = createSimpleExpression(exp);\n context.hoists.push(exp);\n const identifier = createSimpleExpression(\n `_hoisted_${context.hoists.length}`,\n false,\n exp.loc,\n 2\n );\n identifier.hoisted = exp;\n return identifier;\n },\n cache(exp, isVNode = false, inVOnce = false) {\n const cacheExp = createCacheExpression(\n context.cached.length,\n exp,\n isVNode,\n inVOnce\n );\n context.cached.push(cacheExp);\n return cacheExp;\n }\n };\n {\n context.filters = /* @__PURE__ */ new Set();\n }\n return context;\n}\nfunction transform(root, options) {\n const context = createTransformContext(root, options);\n traverseNode(root, context);\n if (options.hoistStatic) {\n cacheStatic(root, context);\n }\n if (!options.ssr) {\n createRootCodegen(root, context);\n }\n root.helpers = /* @__PURE__ */ new Set([...context.helpers.keys()]);\n root.components = [...context.components];\n root.directives = [...context.directives];\n root.imports = context.imports;\n root.hoists = context.hoists;\n root.temps = context.temps;\n root.cached = context.cached;\n root.transformed = true;\n {\n root.filters = [...context.filters];\n }\n}\nfunction createRootCodegen(root, context) {\n const { helper } = context;\n const { children } = root;\n if (children.length === 1) {\n const child = children[0];\n if (isSingleElementRoot(root, child) && child.codegenNode) {\n const codegenNode = child.codegenNode;\n if (codegenNode.type === 13) {\n convertToBlock(codegenNode, context);\n }\n root.codegenNode = codegenNode;\n } else {\n root.codegenNode = child;\n }\n } else if (children.length > 1) {\n let patchFlag = 64;\n if (!!(process.env.NODE_ENV !== \"production\") && children.filter((c) => c.type !== 3).length === 1) {\n patchFlag |= 2048;\n }\n root.codegenNode = createVNodeCall(\n context,\n helper(FRAGMENT),\n void 0,\n root.children,\n patchFlag,\n void 0,\n void 0,\n true,\n void 0,\n false\n );\n } else ;\n}\nfunction traverseChildren(parent, context) {\n let i = 0;\n const nodeRemoved = () => {\n i--;\n };\n for (; i < parent.children.length; i++) {\n const child = parent.children[i];\n if (isString(child)) continue;\n context.grandParent = context.parent;\n context.parent = parent;\n context.childIndex = i;\n context.onNodeRemoved = nodeRemoved;\n traverseNode(child, context);\n }\n}\nfunction traverseNode(node, context) {\n context.currentNode = node;\n const { nodeTransforms } = context;\n const exitFns = [];\n for (let i2 = 0; i2 < nodeTransforms.length; i2++) {\n const onExit = nodeTransforms[i2](node, context);\n if (onExit) {\n if (isArray(onExit)) {\n exitFns.push(...onExit);\n } else {\n exitFns.push(onExit);\n }\n }\n if (!context.currentNode) {\n return;\n } else {\n node = context.currentNode;\n }\n }\n switch (node.type) {\n case 3:\n if (!context.ssr) {\n context.helper(CREATE_COMMENT);\n }\n break;\n case 5:\n if (!context.ssr) {\n context.helper(TO_DISPLAY_STRING);\n }\n break;\n // for container types, further traverse downwards\n case 9:\n for (let i2 = 0; i2 < node.branches.length; i2++) {\n traverseNode(node.branches[i2], context);\n }\n break;\n case 10:\n case 11:\n case 1:\n case 0:\n traverseChildren(node, context);\n break;\n }\n context.currentNode = node;\n let i = exitFns.length;\n while (i--) {\n exitFns[i]();\n }\n}\nfunction createStructuralDirectiveTransform(name, fn) {\n const matches = isString(name) ? (n) => n === name : (n) => name.test(n);\n return (node, context) => {\n if (node.type === 1) {\n const { props } = node;\n if (node.tagType === 3 && props.some(isVSlot)) {\n return;\n }\n const exitFns = [];\n for (let i = 0; i < props.length; i++) {\n const prop = props[i];\n if (prop.type === 7 && matches(prop.name)) {\n props.splice(i, 1);\n i--;\n const onExit = fn(node, prop, context);\n if (onExit) exitFns.push(onExit);\n }\n }\n return exitFns;\n }\n };\n}\n\nconst PURE_ANNOTATION = `/*@__PURE__*/`;\nconst aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\nfunction createCodegenContext(ast, {\n mode = \"function\",\n prefixIdentifiers = mode === \"module\",\n sourceMap = false,\n filename = `template.vue.html`,\n scopeId = null,\n optimizeImports = false,\n runtimeGlobalName = `Vue`,\n runtimeModuleName = `vue`,\n ssrRuntimeModuleName = \"vue/server-renderer\",\n ssr = false,\n isTS = false,\n inSSR = false\n}) {\n const context = {\n mode,\n prefixIdentifiers,\n sourceMap,\n filename,\n scopeId,\n optimizeImports,\n runtimeGlobalName,\n runtimeModuleName,\n ssrRuntimeModuleName,\n ssr,\n isTS,\n inSSR,\n source: ast.source,\n code: ``,\n column: 1,\n line: 1,\n offset: 0,\n indentLevel: 0,\n pure: false,\n map: void 0,\n helper(key) {\n return `_${helperNameMap[key]}`;\n },\n push(code, newlineIndex = -2 /* None */, node) {\n context.code += code;\n },\n indent() {\n newline(++context.indentLevel);\n },\n deindent(withoutNewLine = false) {\n if (withoutNewLine) {\n --context.indentLevel;\n } else {\n newline(--context.indentLevel);\n }\n },\n newline() {\n newline(context.indentLevel);\n }\n };\n function newline(n) {\n context.push(\"\\n\" + ` `.repeat(n), 0 /* Start */);\n }\n return context;\n}\nfunction generate(ast, options = {}) {\n const context = createCodegenContext(ast, options);\n if (options.onContextCreated) options.onContextCreated(context);\n const {\n mode,\n push,\n prefixIdentifiers,\n indent,\n deindent,\n newline,\n scopeId,\n ssr\n } = context;\n const helpers = Array.from(ast.helpers);\n const hasHelpers = helpers.length > 0;\n const useWithBlock = !prefixIdentifiers && mode !== \"module\";\n const preambleContext = context;\n {\n genFunctionPreamble(ast, preambleContext);\n }\n const functionName = ssr ? `ssrRender` : `render`;\n const args = ssr ? [\"_ctx\", \"_push\", \"_parent\", \"_attrs\"] : [\"_ctx\", \"_cache\"];\n const signature = args.join(\", \");\n {\n push(`function ${functionName}(${signature}) {`);\n }\n indent();\n if (useWithBlock) {\n push(`with (_ctx) {`);\n indent();\n if (hasHelpers) {\n push(\n `const { ${helpers.map(aliasHelper).join(\", \")} } = _Vue\n`,\n -1 /* End */\n );\n newline();\n }\n }\n if (ast.components.length) {\n genAssets(ast.components, \"component\", context);\n if (ast.directives.length || ast.temps > 0) {\n newline();\n }\n }\n if (ast.directives.length) {\n genAssets(ast.directives, \"directive\", context);\n if (ast.temps > 0) {\n newline();\n }\n }\n if (ast.filters && ast.filters.length) {\n newline();\n genAssets(ast.filters, \"filter\", context);\n newline();\n }\n if (ast.temps > 0) {\n push(`let `);\n for (let i = 0; i < ast.temps; i++) {\n push(`${i > 0 ? `, ` : ``}_temp${i}`);\n }\n }\n if (ast.components.length || ast.directives.length || ast.temps) {\n push(`\n`, 0 /* Start */);\n newline();\n }\n if (!ssr) {\n push(`return `);\n }\n if (ast.codegenNode) {\n genNode(ast.codegenNode, context);\n } else {\n push(`null`);\n }\n if (useWithBlock) {\n deindent();\n push(`}`);\n }\n deindent();\n push(`}`);\n return {\n ast,\n code: context.code,\n preamble: ``,\n map: context.map ? context.map.toJSON() : void 0\n };\n}\nfunction genFunctionPreamble(ast, context) {\n const {\n ssr,\n prefixIdentifiers,\n push,\n newline,\n runtimeModuleName,\n runtimeGlobalName,\n ssrRuntimeModuleName\n } = context;\n const VueBinding = runtimeGlobalName;\n const helpers = Array.from(ast.helpers);\n if (helpers.length > 0) {\n {\n push(`const _Vue = ${VueBinding}\n`, -1 /* End */);\n if (ast.hoists.length) {\n const staticHelpers = [\n CREATE_VNODE,\n CREATE_ELEMENT_VNODE,\n CREATE_COMMENT,\n CREATE_TEXT,\n CREATE_STATIC\n ].filter((helper) => helpers.includes(helper)).map(aliasHelper).join(\", \");\n push(`const { ${staticHelpers} } = _Vue\n`, -1 /* End */);\n }\n }\n }\n genHoists(ast.hoists, context);\n newline();\n push(`return `);\n}\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\n const resolver = helper(\n type === \"filter\" ? RESOLVE_FILTER : type === \"component\" ? RESOLVE_COMPONENT : RESOLVE_DIRECTIVE\n );\n for (let i = 0; i < assets.length; i++) {\n let id = assets[i];\n const maybeSelfReference = id.endsWith(\"__self\");\n if (maybeSelfReference) {\n id = id.slice(0, -6);\n }\n push(\n `const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`\n );\n if (i < assets.length - 1) {\n newline();\n }\n }\n}\nfunction genHoists(hoists, context) {\n if (!hoists.length) {\n return;\n }\n context.pure = true;\n const { push, newline } = context;\n newline();\n for (let i = 0; i < hoists.length; i++) {\n const exp = hoists[i];\n if (exp) {\n push(`const _hoisted_${i + 1} = `);\n genNode(exp, context);\n newline();\n }\n }\n context.pure = false;\n}\nfunction isText(n) {\n return isString(n) || n.type === 4 || n.type === 2 || n.type === 5 || n.type === 8;\n}\nfunction genNodeListAsArray(nodes, context) {\n const multilines = nodes.length > 3 || !!(process.env.NODE_ENV !== \"production\") && nodes.some((n) => isArray(n) || !isText(n));\n context.push(`[`);\n multilines && context.indent();\n genNodeList(nodes, context, multilines);\n multilines && context.deindent();\n context.push(`]`);\n}\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\n const { push, newline } = context;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (isString(node)) {\n push(node, -3 /* Unknown */);\n } else if (isArray(node)) {\n genNodeListAsArray(node, context);\n } else {\n genNode(node, context);\n }\n if (i < nodes.length - 1) {\n if (multilines) {\n comma && push(\",\");\n newline();\n } else {\n comma && push(\", \");\n }\n }\n }\n}\nfunction genNode(node, context) {\n if (isString(node)) {\n context.push(node, -3 /* Unknown */);\n return;\n }\n if (isSymbol(node)) {\n context.push(context.helper(node));\n return;\n }\n switch (node.type) {\n case 1:\n case 9:\n case 11:\n !!(process.env.NODE_ENV !== \"production\") && assert(\n node.codegenNode != null,\n `Codegen node is missing for element/if/for node. Apply appropriate transforms first.`\n );\n genNode(node.codegenNode, context);\n break;\n case 2:\n genText(node, context);\n break;\n case 4:\n genExpression(node, context);\n break;\n case 5:\n genInterpolation(node, context);\n break;\n case 12:\n genNode(node.codegenNode, context);\n break;\n case 8:\n genCompoundExpression(node, context);\n break;\n case 3:\n genComment(node, context);\n break;\n case 13:\n genVNodeCall(node, context);\n break;\n case 14:\n genCallExpression(node, context);\n break;\n case 15:\n genObjectExpression(node, context);\n break;\n case 17:\n genArrayExpression(node, context);\n break;\n case 18:\n genFunctionExpression(node, context);\n break;\n case 19:\n genConditionalExpression(node, context);\n break;\n case 20:\n genCacheExpression(node, context);\n break;\n case 21:\n genNodeList(node.body, context, true, false);\n break;\n // SSR only types\n case 22:\n break;\n case 23:\n break;\n case 24:\n break;\n case 25:\n break;\n case 26:\n break;\n /* v8 ignore start */\n case 10:\n break;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assert(false, `unhandled codegen node type: ${node.type}`);\n const exhaustiveCheck = node;\n return exhaustiveCheck;\n }\n }\n}\nfunction genText(node, context) {\n context.push(JSON.stringify(node.content), -3 /* Unknown */, node);\n}\nfunction genExpression(node, context) {\n const { content, isStatic } = node;\n context.push(\n isStatic ? JSON.stringify(content) : content,\n -3 /* Unknown */,\n node\n );\n}\nfunction genInterpolation(node, context) {\n const { push, helper, pure } = context;\n if (pure) push(PURE_ANNOTATION);\n push(`${helper(TO_DISPLAY_STRING)}(`);\n genNode(node.content, context);\n push(`)`);\n}\nfunction genCompoundExpression(node, context) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (isString(child)) {\n context.push(child, -3 /* Unknown */);\n } else {\n genNode(child, context);\n }\n }\n}\nfunction genExpressionAsPropertyKey(node, context) {\n const { push } = context;\n if (node.type === 8) {\n push(`[`);\n genCompoundExpression(node, context);\n push(`]`);\n } else if (node.isStatic) {\n const text = isSimpleIdentifier(node.content) ? node.content : JSON.stringify(node.content);\n push(text, -2 /* None */, node);\n } else {\n push(`[${node.content}]`, -3 /* Unknown */, node);\n }\n}\nfunction genComment(node, context) {\n const { push, helper, pure } = context;\n if (pure) {\n push(PURE_ANNOTATION);\n }\n push(\n `${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`,\n -3 /* Unknown */,\n node\n );\n}\nfunction genVNodeCall(node, context) {\n const { push, helper, pure } = context;\n const {\n tag,\n props,\n children,\n patchFlag,\n dynamicProps,\n directives,\n isBlock,\n disableTracking,\n isComponent\n } = node;\n let patchFlagString;\n if (patchFlag) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (patchFlag < 0) {\n patchFlagString = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\n } else {\n const flagNames = Object.keys(PatchFlagNames).map(Number).filter((n) => n > 0 && patchFlag & n).map((n) => PatchFlagNames[n]).join(`, `);\n patchFlagString = patchFlag + ` /* ${flagNames} */`;\n }\n } else {\n patchFlagString = String(patchFlag);\n }\n }\n if (directives) {\n push(helper(WITH_DIRECTIVES) + `(`);\n }\n if (isBlock) {\n push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\n }\n if (pure) {\n push(PURE_ANNOTATION);\n }\n const callHelper = isBlock ? getVNodeBlockHelper(context.inSSR, isComponent) : getVNodeHelper(context.inSSR, isComponent);\n push(helper(callHelper) + `(`, -2 /* None */, node);\n genNodeList(\n genNullableArgs([tag, props, children, patchFlagString, dynamicProps]),\n context\n );\n push(`)`);\n if (isBlock) {\n push(`)`);\n }\n if (directives) {\n push(`, `);\n genNode(directives, context);\n push(`)`);\n }\n}\nfunction genNullableArgs(args) {\n let i = args.length;\n while (i--) {\n if (args[i] != null) break;\n }\n return args.slice(0, i + 1).map((arg) => arg || `null`);\n}\nfunction genCallExpression(node, context) {\n const { push, helper, pure } = context;\n const callee = isString(node.callee) ? node.callee : helper(node.callee);\n if (pure) {\n push(PURE_ANNOTATION);\n }\n push(callee + `(`, -2 /* None */, node);\n genNodeList(node.arguments, context);\n push(`)`);\n}\nfunction genObjectExpression(node, context) {\n const { push, indent, deindent, newline } = context;\n const { properties } = node;\n if (!properties.length) {\n push(`{}`, -2 /* None */, node);\n return;\n }\n const multilines = properties.length > 1 || !!(process.env.NODE_ENV !== \"production\") && properties.some((p) => p.value.type !== 4);\n push(multilines ? `{` : `{ `);\n multilines && indent();\n for (let i = 0; i < properties.length; i++) {\n const { key, value } = properties[i];\n genExpressionAsPropertyKey(key, context);\n push(`: `);\n genNode(value, context);\n if (i < properties.length - 1) {\n push(`,`);\n newline();\n }\n }\n multilines && deindent();\n push(multilines ? `}` : ` }`);\n}\nfunction genArrayExpression(node, context) {\n genNodeListAsArray(node.elements, context);\n}\nfunction genFunctionExpression(node, context) {\n const { push, indent, deindent } = context;\n const { params, returns, body, newline, isSlot } = node;\n if (isSlot) {\n push(`_${helperNameMap[WITH_CTX]}(`);\n }\n push(`(`, -2 /* None */, node);\n if (isArray(params)) {\n genNodeList(params, context);\n } else if (params) {\n genNode(params, context);\n }\n push(`) => `);\n if (newline || body) {\n push(`{`);\n indent();\n }\n if (returns) {\n if (newline) {\n push(`return `);\n }\n if (isArray(returns)) {\n genNodeListAsArray(returns, context);\n } else {\n genNode(returns, context);\n }\n } else if (body) {\n genNode(body, context);\n }\n if (newline || body) {\n deindent();\n push(`}`);\n }\n if (isSlot) {\n if (node.isNonScopedSlot) {\n push(`, undefined, true`);\n }\n push(`)`);\n }\n}\nfunction genConditionalExpression(node, context) {\n const { test, consequent, alternate, newline: needNewline } = node;\n const { push, indent, deindent, newline } = context;\n if (test.type === 4) {\n const needsParens = !isSimpleIdentifier(test.content);\n needsParens && push(`(`);\n genExpression(test, context);\n needsParens && push(`)`);\n } else {\n push(`(`);\n genNode(test, context);\n push(`)`);\n }\n needNewline && indent();\n context.indentLevel++;\n needNewline || push(` `);\n push(`? `);\n genNode(consequent, context);\n context.indentLevel--;\n needNewline && newline();\n needNewline || push(` `);\n push(`: `);\n const isNested = alternate.type === 19;\n if (!isNested) {\n context.indentLevel++;\n }\n genNode(alternate, context);\n if (!isNested) {\n context.indentLevel--;\n }\n needNewline && deindent(\n true\n /* without newline */\n );\n}\nfunction genCacheExpression(node, context) {\n const { push, helper, indent, deindent, newline } = context;\n const { needPauseTracking, needArraySpread } = node;\n if (needArraySpread) {\n push(`[...(`);\n }\n push(`_cache[${node.index}] || (`);\n if (needPauseTracking) {\n indent();\n push(`${helper(SET_BLOCK_TRACKING)}(-1`);\n if (node.inVOnce) push(`, true`);\n push(`),`);\n newline();\n push(`(`);\n }\n push(`_cache[${node.index}] = `);\n genNode(node.value, context);\n if (needPauseTracking) {\n push(`).cacheIndex = ${node.index},`);\n newline();\n push(`${helper(SET_BLOCK_TRACKING)}(1),`);\n newline();\n push(`_cache[${node.index}]`);\n deindent();\n }\n push(`)`);\n if (needArraySpread) {\n push(`)]`);\n }\n}\n\nconst prohibitedKeywordRE = new RegExp(\n \"\\\\b\" + \"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield\".split(\",\").join(\"\\\\b|\\\\b\") + \"\\\\b\"\n);\nconst stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\nfunction validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {\n const exp = node.content;\n if (!exp.trim()) {\n return;\n }\n try {\n new Function(\n asRawStatements ? ` ${exp} ` : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`\n );\n } catch (e) {\n let message = e.message;\n const keywordMatch = exp.replace(stripStringRE, \"\").match(prohibitedKeywordRE);\n if (keywordMatch) {\n message = `avoid using JavaScript keyword as property name: \"${keywordMatch[0]}\"`;\n }\n context.onError(\n createCompilerError(\n 45,\n node.loc,\n void 0,\n message\n )\n );\n }\n}\n\nconst transformExpression = (node, context) => {\n if (node.type === 5) {\n node.content = processExpression(\n node.content,\n context\n );\n } else if (node.type === 1) {\n const memo = findDir(node, \"memo\");\n for (let i = 0; i < node.props.length; i++) {\n const dir = node.props[i];\n if (dir.type === 7 && dir.name !== \"for\") {\n const exp = dir.exp;\n const arg = dir.arg;\n if (exp && exp.type === 4 && !(dir.name === \"on\" && arg) && // key has been processed in transformFor(vMemo + vFor)\n !(memo && arg && arg.type === 4 && arg.content === \"key\")) {\n dir.exp = processExpression(\n exp,\n context,\n // slot args must be processed as function params\n dir.name === \"slot\"\n );\n }\n if (arg && arg.type === 4 && !arg.isStatic) {\n dir.arg = processExpression(arg, context);\n }\n }\n }\n }\n};\nfunction processExpression(node, context, asParams = false, asRawStatements = false, localVars = Object.create(context.identifiers)) {\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateBrowserExpression(node, context, asParams, asRawStatements);\n }\n return node;\n }\n}\nfunction stringifyExpression(exp) {\n if (isString(exp)) {\n return exp;\n } else if (exp.type === 4) {\n return exp.content;\n } else {\n return exp.children.map(stringifyExpression).join(\"\");\n }\n}\n\nconst transformIf = createStructuralDirectiveTransform(\n /^(if|else|else-if)$/,\n (node, dir, context) => {\n return processIf(node, dir, context, (ifNode, branch, isRoot) => {\n const siblings = context.parent.children;\n let i = siblings.indexOf(ifNode);\n let key = 0;\n while (i-- >= 0) {\n const sibling = siblings[i];\n if (sibling && sibling.type === 9) {\n key += sibling.branches.length;\n }\n }\n return () => {\n if (isRoot) {\n ifNode.codegenNode = createCodegenNodeForBranch(\n branch,\n key,\n context\n );\n } else {\n const parentCondition = getParentCondition(ifNode.codegenNode);\n parentCondition.alternate = createCodegenNodeForBranch(\n branch,\n key + ifNode.branches.length - 1,\n context\n );\n }\n };\n });\n }\n);\nfunction processIf(node, dir, context, processCodegen) {\n if (dir.name !== \"else\" && (!dir.exp || !dir.exp.content.trim())) {\n const loc = dir.exp ? dir.exp.loc : node.loc;\n context.onError(\n createCompilerError(28, dir.loc)\n );\n dir.exp = createSimpleExpression(`true`, false, loc);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true && dir.exp) {\n validateBrowserExpression(dir.exp, context);\n }\n if (dir.name === \"if\") {\n const branch = createIfBranch(node, dir);\n const ifNode = {\n type: 9,\n loc: cloneLoc(node.loc),\n branches: [branch]\n };\n context.replaceNode(ifNode);\n if (processCodegen) {\n return processCodegen(ifNode, branch, true);\n }\n } else {\n const siblings = context.parent.children;\n const comments = [];\n let i = siblings.indexOf(node);\n while (i-- >= -1) {\n const sibling = siblings[i];\n if (sibling && sibling.type === 3) {\n context.removeNode(sibling);\n !!(process.env.NODE_ENV !== \"production\") && comments.unshift(sibling);\n continue;\n }\n if (sibling && sibling.type === 2 && !sibling.content.trim().length) {\n context.removeNode(sibling);\n continue;\n }\n if (sibling && sibling.type === 9) {\n if (dir.name === \"else-if\" && sibling.branches[sibling.branches.length - 1].condition === void 0) {\n context.onError(\n createCompilerError(30, node.loc)\n );\n }\n context.removeNode();\n const branch = createIfBranch(node, dir);\n if (!!(process.env.NODE_ENV !== \"production\") && comments.length && // #3619 ignore comments if the v-if is direct child of <transition>\n !(context.parent && context.parent.type === 1 && (context.parent.tag === \"transition\" || context.parent.tag === \"Transition\"))) {\n branch.children = [...comments, ...branch.children];\n }\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n const key = branch.userKey;\n if (key) {\n sibling.branches.forEach(({ userKey }) => {\n if (isSameKey(userKey, key)) {\n context.onError(\n createCompilerError(\n 29,\n branch.userKey.loc\n )\n );\n }\n });\n }\n }\n sibling.branches.push(branch);\n const onExit = processCodegen && processCodegen(sibling, branch, false);\n traverseNode(branch, context);\n if (onExit) onExit();\n context.currentNode = null;\n } else {\n context.onError(\n createCompilerError(30, node.loc)\n );\n }\n break;\n }\n }\n}\nfunction createIfBranch(node, dir) {\n const isTemplateIf = node.tagType === 3;\n return {\n type: 10,\n loc: node.loc,\n condition: dir.name === \"else\" ? void 0 : dir.exp,\n children: isTemplateIf && !findDir(node, \"for\") ? node.children : [node],\n userKey: findProp(node, `key`),\n isTemplateIf\n };\n}\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\n if (branch.condition) {\n return createConditionalExpression(\n branch.condition,\n createChildrenCodegenNode(branch, keyIndex, context),\n // make sure to pass in asBlock: true so that the comment node call\n // closes the current block.\n createCallExpression(context.helper(CREATE_COMMENT), [\n !!(process.env.NODE_ENV !== \"production\") ? '\"v-if\"' : '\"\"',\n \"true\"\n ])\n );\n } else {\n return createChildrenCodegenNode(branch, keyIndex, context);\n }\n}\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\n const { helper } = context;\n const keyProperty = createObjectProperty(\n `key`,\n createSimpleExpression(\n `${keyIndex}`,\n false,\n locStub,\n 2\n )\n );\n const { children } = branch;\n const firstChild = children[0];\n const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1;\n if (needFragmentWrapper) {\n if (children.length === 1 && firstChild.type === 11) {\n const vnodeCall = firstChild.codegenNode;\n injectProp(vnodeCall, keyProperty, context);\n return vnodeCall;\n } else {\n let patchFlag = 64;\n if (!!(process.env.NODE_ENV !== \"production\") && !branch.isTemplateIf && children.filter((c) => c.type !== 3).length === 1) {\n patchFlag |= 2048;\n }\n return createVNodeCall(\n context,\n helper(FRAGMENT),\n createObjectExpression([keyProperty]),\n children,\n patchFlag,\n void 0,\n void 0,\n true,\n false,\n false,\n branch.loc\n );\n }\n } else {\n const ret = firstChild.codegenNode;\n const vnodeCall = getMemoedVNodeCall(ret);\n if (vnodeCall.type === 13) {\n convertToBlock(vnodeCall, context);\n }\n injectProp(vnodeCall, keyProperty, context);\n return ret;\n }\n}\nfunction isSameKey(a, b) {\n if (!a || a.type !== b.type) {\n return false;\n }\n if (a.type === 6) {\n if (a.value.content !== b.value.content) {\n return false;\n }\n } else {\n const exp = a.exp;\n const branchExp = b.exp;\n if (exp.type !== branchExp.type) {\n return false;\n }\n if (exp.type !== 4 || exp.isStatic !== branchExp.isStatic || exp.content !== branchExp.content) {\n return false;\n }\n }\n return true;\n}\nfunction getParentCondition(node) {\n while (true) {\n if (node.type === 19) {\n if (node.alternate.type === 19) {\n node = node.alternate;\n } else {\n return node;\n }\n } else if (node.type === 20) {\n node = node.value;\n }\n }\n}\n\nconst transformBind = (dir, _node, context) => {\n const { modifiers, loc } = dir;\n const arg = dir.arg;\n let { exp } = dir;\n if (exp && exp.type === 4 && !exp.content.trim()) {\n {\n exp = void 0;\n }\n }\n if (!exp) {\n if (arg.type !== 4 || !arg.isStatic) {\n context.onError(\n createCompilerError(\n 52,\n arg.loc\n )\n );\n return {\n props: [\n createObjectProperty(arg, createSimpleExpression(\"\", true, loc))\n ]\n };\n }\n transformBindShorthand(dir);\n exp = dir.exp;\n }\n if (arg.type !== 4) {\n arg.children.unshift(`(`);\n arg.children.push(`) || \"\"`);\n } else if (!arg.isStatic) {\n arg.content = `${arg.content} || \"\"`;\n }\n if (modifiers.some((mod) => mod.content === \"camel\")) {\n if (arg.type === 4) {\n if (arg.isStatic) {\n arg.content = camelize(arg.content);\n } else {\n arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\n }\n } else {\n arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\n arg.children.push(`)`);\n }\n }\n if (!context.inSSR) {\n if (modifiers.some((mod) => mod.content === \"prop\")) {\n injectPrefix(arg, \".\");\n }\n if (modifiers.some((mod) => mod.content === \"attr\")) {\n injectPrefix(arg, \"^\");\n }\n }\n return {\n props: [createObjectProperty(arg, exp)]\n };\n};\nconst transformBindShorthand = (dir, context) => {\n const arg = dir.arg;\n const propName = camelize(arg.content);\n dir.exp = createSimpleExpression(propName, false, arg.loc);\n};\nconst injectPrefix = (arg, prefix) => {\n if (arg.type === 4) {\n if (arg.isStatic) {\n arg.content = prefix + arg.content;\n } else {\n arg.content = `\\`${prefix}\\${${arg.content}}\\``;\n }\n } else {\n arg.children.unshift(`'${prefix}' + (`);\n arg.children.push(`)`);\n }\n};\n\nconst transformFor = createStructuralDirectiveTransform(\n \"for\",\n (node, dir, context) => {\n const { helper, removeHelper } = context;\n return processFor(node, dir, context, (forNode) => {\n const renderExp = createCallExpression(helper(RENDER_LIST), [\n forNode.source\n ]);\n const isTemplate = isTemplateNode(node);\n const memo = findDir(node, \"memo\");\n const keyProp = findProp(node, `key`, false, true);\n const isDirKey = keyProp && keyProp.type === 7;\n if (isDirKey && !keyProp.exp) {\n transformBindShorthand(keyProp);\n }\n let keyExp = keyProp && (keyProp.type === 6 ? keyProp.value ? createSimpleExpression(keyProp.value.content, true) : void 0 : keyProp.exp);\n const keyProperty = keyProp && keyExp ? createObjectProperty(`key`, keyExp) : null;\n const isStableFragment = forNode.source.type === 4 && forNode.source.constType > 0;\n const fragmentFlag = isStableFragment ? 64 : keyProp ? 128 : 256;\n forNode.codegenNode = createVNodeCall(\n context,\n helper(FRAGMENT),\n void 0,\n renderExp,\n fragmentFlag,\n void 0,\n void 0,\n true,\n !isStableFragment,\n false,\n node.loc\n );\n return () => {\n let childBlock;\n const { children } = forNode;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && isTemplate) {\n node.children.some((c) => {\n if (c.type === 1) {\n const key = findProp(c, \"key\");\n if (key) {\n context.onError(\n createCompilerError(\n 33,\n key.loc\n )\n );\n return true;\n }\n }\n });\n }\n const needFragmentWrapper = children.length !== 1 || children[0].type !== 1;\n const slotOutlet = isSlotOutlet(node) ? node : isTemplate && node.children.length === 1 && isSlotOutlet(node.children[0]) ? node.children[0] : null;\n if (slotOutlet) {\n childBlock = slotOutlet.codegenNode;\n if (isTemplate && keyProperty) {\n injectProp(childBlock, keyProperty, context);\n }\n } else if (needFragmentWrapper) {\n childBlock = createVNodeCall(\n context,\n helper(FRAGMENT),\n keyProperty ? createObjectExpression([keyProperty]) : void 0,\n node.children,\n 64,\n void 0,\n void 0,\n true,\n void 0,\n false\n );\n } else {\n childBlock = children[0].codegenNode;\n if (isTemplate && keyProperty) {\n injectProp(childBlock, keyProperty, context);\n }\n if (childBlock.isBlock !== !isStableFragment) {\n if (childBlock.isBlock) {\n removeHelper(OPEN_BLOCK);\n removeHelper(\n getVNodeBlockHelper(context.inSSR, childBlock.isComponent)\n );\n } else {\n removeHelper(\n getVNodeHelper(context.inSSR, childBlock.isComponent)\n );\n }\n }\n childBlock.isBlock = !isStableFragment;\n if (childBlock.isBlock) {\n helper(OPEN_BLOCK);\n helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n } else {\n helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n }\n }\n if (memo) {\n const loop = createFunctionExpression(\n createForLoopParams(forNode.parseResult, [\n createSimpleExpression(`_cached`)\n ])\n );\n loop.body = createBlockStatement([\n createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\n createCompoundExpression([\n `if (_cached`,\n ...keyExp ? [` && _cached.key === `, keyExp] : [],\n ` && ${context.helperString(\n IS_MEMO_SAME\n )}(_cached, _memo)) return _cached`\n ]),\n createCompoundExpression([`const _item = `, childBlock]),\n createSimpleExpression(`_item.memo = _memo`),\n createSimpleExpression(`return _item`)\n ]);\n renderExp.arguments.push(\n loop,\n createSimpleExpression(`_cache`),\n createSimpleExpression(String(context.cached.length))\n );\n context.cached.push(null);\n } else {\n renderExp.arguments.push(\n createFunctionExpression(\n createForLoopParams(forNode.parseResult),\n childBlock,\n true\n )\n );\n }\n };\n });\n }\n);\nfunction processFor(node, dir, context, processCodegen) {\n if (!dir.exp) {\n context.onError(\n createCompilerError(31, dir.loc)\n );\n return;\n }\n const parseResult = dir.forParseResult;\n if (!parseResult) {\n context.onError(\n createCompilerError(32, dir.loc)\n );\n return;\n }\n finalizeForParseResult(parseResult, context);\n const { addIdentifiers, removeIdentifiers, scopes } = context;\n const { source, value, key, index } = parseResult;\n const forNode = {\n type: 11,\n loc: dir.loc,\n source,\n valueAlias: value,\n keyAlias: key,\n objectIndexAlias: index,\n parseResult,\n children: isTemplateNode(node) ? node.children : [node]\n };\n context.replaceNode(forNode);\n scopes.vFor++;\n const onExit = processCodegen && processCodegen(forNode);\n return () => {\n scopes.vFor--;\n if (onExit) onExit();\n };\n}\nfunction finalizeForParseResult(result, context) {\n if (result.finalized) return;\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n validateBrowserExpression(result.source, context);\n if (result.key) {\n validateBrowserExpression(\n result.key,\n context,\n true\n );\n }\n if (result.index) {\n validateBrowserExpression(\n result.index,\n context,\n true\n );\n }\n if (result.value) {\n validateBrowserExpression(\n result.value,\n context,\n true\n );\n }\n }\n result.finalized = true;\n}\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\n return createParamsList([value, key, index, ...memoArgs]);\n}\nfunction createParamsList(args) {\n let i = args.length;\n while (i--) {\n if (args[i]) break;\n }\n return args.slice(0, i + 1).map((arg, i2) => arg || createSimpleExpression(`_`.repeat(i2 + 1), false));\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\nconst trackSlotScopes = (node, context) => {\n if (node.type === 1 && (node.tagType === 1 || node.tagType === 3)) {\n const vSlot = findDir(node, \"slot\");\n if (vSlot) {\n vSlot.exp;\n context.scopes.vSlot++;\n return () => {\n context.scopes.vSlot--;\n };\n }\n }\n};\nconst trackVForSlotScopes = (node, context) => {\n let vFor;\n if (isTemplateNode(node) && node.props.some(isVSlot) && (vFor = findDir(node, \"for\"))) {\n const result = vFor.forParseResult;\n if (result) {\n finalizeForParseResult(result, context);\n const { value, key, index } = result;\n const { addIdentifiers, removeIdentifiers } = context;\n value && addIdentifiers(value);\n key && addIdentifiers(key);\n index && addIdentifiers(index);\n return () => {\n value && removeIdentifiers(value);\n key && removeIdentifiers(key);\n index && removeIdentifiers(index);\n };\n }\n }\n};\nconst buildClientSlotFn = (props, _vForExp, children, loc) => createFunctionExpression(\n props,\n children,\n false,\n true,\n children.length ? children[0].loc : loc\n);\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\n context.helper(WITH_CTX);\n const { children, loc } = node;\n const slotsProperties = [];\n const dynamicSlots = [];\n let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\n const onComponentSlot = findDir(node, \"slot\", true);\n if (onComponentSlot) {\n const { arg, exp } = onComponentSlot;\n if (arg && !isStaticExp(arg)) {\n hasDynamicSlots = true;\n }\n slotsProperties.push(\n createObjectProperty(\n arg || createSimpleExpression(\"default\", true),\n buildSlotFn(exp, void 0, children, loc)\n )\n );\n }\n let hasTemplateSlots = false;\n let hasNamedDefaultSlot = false;\n const implicitDefaultChildren = [];\n const seenSlotNames = /* @__PURE__ */ new Set();\n let conditionalBranchIndex = 0;\n for (let i = 0; i < children.length; i++) {\n const slotElement = children[i];\n let slotDir;\n if (!isTemplateNode(slotElement) || !(slotDir = findDir(slotElement, \"slot\", true))) {\n if (slotElement.type !== 3) {\n implicitDefaultChildren.push(slotElement);\n }\n continue;\n }\n if (onComponentSlot) {\n context.onError(\n createCompilerError(37, slotDir.loc)\n );\n break;\n }\n hasTemplateSlots = true;\n const { children: slotChildren, loc: slotLoc } = slotElement;\n const {\n arg: slotName = createSimpleExpression(`default`, true),\n exp: slotProps,\n loc: dirLoc\n } = slotDir;\n let staticSlotName;\n if (isStaticExp(slotName)) {\n staticSlotName = slotName ? slotName.content : `default`;\n } else {\n hasDynamicSlots = true;\n }\n const vFor = findDir(slotElement, \"for\");\n const slotFunction = buildSlotFn(slotProps, vFor, slotChildren, slotLoc);\n let vIf;\n let vElse;\n if (vIf = findDir(slotElement, \"if\")) {\n hasDynamicSlots = true;\n dynamicSlots.push(\n createConditionalExpression(\n vIf.exp,\n buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++),\n defaultFallback\n )\n );\n } else if (vElse = findDir(\n slotElement,\n /^else(-if)?$/,\n true\n /* allowEmpty */\n )) {\n let j = i;\n let prev;\n while (j--) {\n prev = children[j];\n if (prev.type !== 3) {\n break;\n }\n }\n if (prev && isTemplateNode(prev) && findDir(prev, /^(else-)?if$/)) {\n let conditional = dynamicSlots[dynamicSlots.length - 1];\n while (conditional.alternate.type === 19) {\n conditional = conditional.alternate;\n }\n conditional.alternate = vElse.exp ? createConditionalExpression(\n vElse.exp,\n buildDynamicSlot(\n slotName,\n slotFunction,\n conditionalBranchIndex++\n ),\n defaultFallback\n ) : buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++);\n } else {\n context.onError(\n createCompilerError(30, vElse.loc)\n );\n }\n } else if (vFor) {\n hasDynamicSlots = true;\n const parseResult = vFor.forParseResult;\n if (parseResult) {\n finalizeForParseResult(parseResult, context);\n dynamicSlots.push(\n createCallExpression(context.helper(RENDER_LIST), [\n parseResult.source,\n createFunctionExpression(\n createForLoopParams(parseResult),\n buildDynamicSlot(slotName, slotFunction),\n true\n )\n ])\n );\n } else {\n context.onError(\n createCompilerError(\n 32,\n vFor.loc\n )\n );\n }\n } else {\n if (staticSlotName) {\n if (seenSlotNames.has(staticSlotName)) {\n context.onError(\n createCompilerError(\n 38,\n dirLoc\n )\n );\n continue;\n }\n seenSlotNames.add(staticSlotName);\n if (staticSlotName === \"default\") {\n hasNamedDefaultSlot = true;\n }\n }\n slotsProperties.push(createObjectProperty(slotName, slotFunction));\n }\n }\n if (!onComponentSlot) {\n const buildDefaultSlotProperty = (props, children2) => {\n const fn = buildSlotFn(props, void 0, children2, loc);\n if (context.compatConfig) {\n fn.isNonScopedSlot = true;\n }\n return createObjectProperty(`default`, fn);\n };\n if (!hasTemplateSlots) {\n slotsProperties.push(buildDefaultSlotProperty(void 0, children));\n } else if (implicitDefaultChildren.length && // #3766\n // with whitespace: 'preserve', whitespaces between slots will end up in\n // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\n implicitDefaultChildren.some((node2) => isNonWhitespaceContent(node2))) {\n if (hasNamedDefaultSlot) {\n context.onError(\n createCompilerError(\n 39,\n implicitDefaultChildren[0].loc\n )\n );\n } else {\n slotsProperties.push(\n buildDefaultSlotProperty(void 0, implicitDefaultChildren)\n );\n }\n }\n }\n const slotFlag = hasDynamicSlots ? 2 : hasForwardedSlots(node.children) ? 3 : 1;\n let slots = createObjectExpression(\n slotsProperties.concat(\n createObjectProperty(\n `_`,\n // 2 = compiled but dynamic = can skip normalization, but must run diff\n // 1 = compiled and static = can skip normalization AND diff as optimized\n createSimpleExpression(\n slotFlag + (!!(process.env.NODE_ENV !== \"production\") ? ` /* ${slotFlagsText[slotFlag]} */` : ``),\n false\n )\n )\n ),\n loc\n );\n if (dynamicSlots.length) {\n slots = createCallExpression(context.helper(CREATE_SLOTS), [\n slots,\n createArrayExpression(dynamicSlots)\n ]);\n }\n return {\n slots,\n hasDynamicSlots\n };\n}\nfunction buildDynamicSlot(name, fn, index) {\n const props = [\n createObjectProperty(`name`, name),\n createObjectProperty(`fn`, fn)\n ];\n if (index != null) {\n props.push(\n createObjectProperty(`key`, createSimpleExpression(String(index), true))\n );\n }\n return createObjectExpression(props);\n}\nfunction hasForwardedSlots(children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n switch (child.type) {\n case 1:\n if (child.tagType === 2 || hasForwardedSlots(child.children)) {\n return true;\n }\n break;\n case 9:\n if (hasForwardedSlots(child.branches)) return true;\n break;\n case 10:\n case 11:\n if (hasForwardedSlots(child.children)) return true;\n break;\n }\n }\n return false;\n}\nfunction isNonWhitespaceContent(node) {\n if (node.type !== 2 && node.type !== 12)\n return true;\n return node.type === 2 ? !!node.content.trim() : isNonWhitespaceContent(node.content);\n}\n\nconst directiveImportMap = /* @__PURE__ */ new WeakMap();\nconst transformElement = (node, context) => {\n return function postTransformElement() {\n node = context.currentNode;\n if (!(node.type === 1 && (node.tagType === 0 || node.tagType === 1))) {\n return;\n }\n const { tag, props } = node;\n const isComponent = node.tagType === 1;\n let vnodeTag = isComponent ? resolveComponentType(node, context) : `\"${tag}\"`;\n const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\n let vnodeProps;\n let vnodeChildren;\n let patchFlag = 0;\n let vnodeDynamicProps;\n let dynamicPropNames;\n let vnodeDirectives;\n let shouldUseBlock = (\n // dynamic component may resolve to plain elements\n isDynamicComponent || vnodeTag === TELEPORT || vnodeTag === SUSPENSE || !isComponent && // <svg> and <foreignObject> must be forced into blocks so that block\n // updates inside get proper isSVG flag at runtime. (#639, #643)\n // This is technically web-specific, but splitting the logic out of core\n // leads to too much unnecessary complexity.\n (tag === \"svg\" || tag === \"foreignObject\" || tag === \"math\")\n );\n if (props.length > 0) {\n const propsBuildResult = buildProps(\n node,\n context,\n void 0,\n isComponent,\n isDynamicComponent\n );\n vnodeProps = propsBuildResult.props;\n patchFlag = propsBuildResult.patchFlag;\n dynamicPropNames = propsBuildResult.dynamicPropNames;\n const directives = propsBuildResult.directives;\n vnodeDirectives = directives && directives.length ? createArrayExpression(\n directives.map((dir) => buildDirectiveArgs(dir, context))\n ) : void 0;\n if (propsBuildResult.shouldUseBlock) {\n shouldUseBlock = true;\n }\n }\n if (node.children.length > 0) {\n if (vnodeTag === KEEP_ALIVE) {\n shouldUseBlock = true;\n patchFlag |= 1024;\n if (!!(process.env.NODE_ENV !== \"production\") && node.children.length > 1) {\n context.onError(\n createCompilerError(46, {\n start: node.children[0].loc.start,\n end: node.children[node.children.length - 1].loc.end,\n source: \"\"\n })\n );\n }\n }\n const shouldBuildAsSlots = isComponent && // Teleport is not a real component and has dedicated runtime handling\n vnodeTag !== TELEPORT && // explained above.\n vnodeTag !== KEEP_ALIVE;\n if (shouldBuildAsSlots) {\n const { slots, hasDynamicSlots } = buildSlots(node, context);\n vnodeChildren = slots;\n if (hasDynamicSlots) {\n patchFlag |= 1024;\n }\n } else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\n const child = node.children[0];\n const type = child.type;\n const hasDynamicTextChild = type === 5 || type === 8;\n if (hasDynamicTextChild && getConstantType(child, context) === 0) {\n patchFlag |= 1;\n }\n if (hasDynamicTextChild || type === 2) {\n vnodeChildren = child;\n } else {\n vnodeChildren = node.children;\n }\n } else {\n vnodeChildren = node.children;\n }\n }\n if (dynamicPropNames && dynamicPropNames.length) {\n vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\n }\n node.codegenNode = createVNodeCall(\n context,\n vnodeTag,\n vnodeProps,\n vnodeChildren,\n patchFlag === 0 ? void 0 : patchFlag,\n vnodeDynamicProps,\n vnodeDirectives,\n !!shouldUseBlock,\n false,\n isComponent,\n node.loc\n );\n };\n};\nfunction resolveComponentType(node, context, ssr = false) {\n let { tag } = node;\n const isExplicitDynamic = isComponentTag(tag);\n const isProp = findProp(\n node,\n \"is\",\n false,\n true\n /* allow empty */\n );\n if (isProp) {\n if (isExplicitDynamic || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n )) {\n let exp;\n if (isProp.type === 6) {\n exp = isProp.value && createSimpleExpression(isProp.value.content, true);\n } else {\n exp = isProp.exp;\n if (!exp) {\n exp = createSimpleExpression(`is`, false, isProp.arg.loc);\n }\n }\n if (exp) {\n return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n exp\n ]);\n }\n } else if (isProp.type === 6 && isProp.value.content.startsWith(\"vue:\")) {\n tag = isProp.value.content.slice(4);\n }\n }\n const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\n if (builtIn) {\n if (!ssr) context.helper(builtIn);\n return builtIn;\n }\n context.helper(RESOLVE_COMPONENT);\n context.components.add(tag);\n return toValidAssetId(tag, `component`);\n}\nfunction buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {\n const { tag, loc: elementLoc, children } = node;\n let properties = [];\n const mergeArgs = [];\n const runtimeDirectives = [];\n const hasChildren = children.length > 0;\n let shouldUseBlock = false;\n let patchFlag = 0;\n let hasRef = false;\n let hasClassBinding = false;\n let hasStyleBinding = false;\n let hasHydrationEventBinding = false;\n let hasDynamicKeys = false;\n let hasVnodeHook = false;\n const dynamicPropNames = [];\n const pushMergeArg = (arg) => {\n if (properties.length) {\n mergeArgs.push(\n createObjectExpression(dedupeProperties(properties), elementLoc)\n );\n properties = [];\n }\n if (arg) mergeArgs.push(arg);\n };\n const pushRefVForMarker = () => {\n if (context.scopes.vFor > 0) {\n properties.push(\n createObjectProperty(\n createSimpleExpression(\"ref_for\", true),\n createSimpleExpression(\"true\")\n )\n );\n }\n };\n const analyzePatchFlag = ({ key, value }) => {\n if (isStaticExp(key)) {\n const name = key.content;\n const isEventHandler = isOn(name);\n if (isEventHandler && (!isComponent || isDynamicComponent) && // omit the flag for click handlers because hydration gives click\n // dedicated fast path.\n name.toLowerCase() !== \"onclick\" && // omit v-model handlers\n name !== \"onUpdate:modelValue\" && // omit onVnodeXXX hooks\n !isReservedProp(name)) {\n hasHydrationEventBinding = true;\n }\n if (isEventHandler && isReservedProp(name)) {\n hasVnodeHook = true;\n }\n if (isEventHandler && value.type === 14) {\n value = value.arguments[0];\n }\n if (value.type === 20 || (value.type === 4 || value.type === 8) && getConstantType(value, context) > 0) {\n return;\n }\n if (name === \"ref\") {\n hasRef = true;\n } else if (name === \"class\") {\n hasClassBinding = true;\n } else if (name === \"style\") {\n hasStyleBinding = true;\n } else if (name !== \"key\" && !dynamicPropNames.includes(name)) {\n dynamicPropNames.push(name);\n }\n if (isComponent && (name === \"class\" || name === \"style\") && !dynamicPropNames.includes(name)) {\n dynamicPropNames.push(name);\n }\n } else {\n hasDynamicKeys = true;\n }\n };\n for (let i = 0; i < props.length; i++) {\n const prop = props[i];\n if (prop.type === 6) {\n const { loc, name, nameLoc, value } = prop;\n let isStatic = true;\n if (name === \"ref\") {\n hasRef = true;\n pushRefVForMarker();\n }\n if (name === \"is\" && (isComponentTag(tag) || value && value.content.startsWith(\"vue:\") || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n ))) {\n continue;\n }\n properties.push(\n createObjectProperty(\n createSimpleExpression(name, true, nameLoc),\n createSimpleExpression(\n value ? value.content : \"\",\n isStatic,\n value ? value.loc : loc\n )\n )\n );\n } else {\n const { name, arg, exp, loc, modifiers } = prop;\n const isVBind = name === \"bind\";\n const isVOn = name === \"on\";\n if (name === \"slot\") {\n if (!isComponent) {\n context.onError(\n createCompilerError(40, loc)\n );\n }\n continue;\n }\n if (name === \"once\" || name === \"memo\") {\n continue;\n }\n if (name === \"is\" || isVBind && isStaticArgOf(arg, \"is\") && (isComponentTag(tag) || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n ))) {\n continue;\n }\n if (isVOn && ssr) {\n continue;\n }\n if (\n // #938: elements with dynamic keys should be forced into blocks\n isVBind && isStaticArgOf(arg, \"key\") || // inline before-update hooks need to force block so that it is invoked\n // before children\n isVOn && hasChildren && isStaticArgOf(arg, \"vue:before-update\")\n ) {\n shouldUseBlock = true;\n }\n if (isVBind && isStaticArgOf(arg, \"ref\")) {\n pushRefVForMarker();\n }\n if (!arg && (isVBind || isVOn)) {\n hasDynamicKeys = true;\n if (exp) {\n if (isVBind) {\n pushRefVForMarker();\n pushMergeArg();\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const hasOverridableKeys = mergeArgs.some((arg2) => {\n if (arg2.type === 15) {\n return arg2.properties.some(({ key }) => {\n if (key.type !== 4 || !key.isStatic) {\n return true;\n }\n return key.content !== \"class\" && key.content !== \"style\" && !isOn(key.content);\n });\n } else {\n return true;\n }\n });\n if (hasOverridableKeys) {\n checkCompatEnabled(\n \"COMPILER_V_BIND_OBJECT_ORDER\",\n context,\n loc\n );\n }\n }\n if (isCompatEnabled(\n \"COMPILER_V_BIND_OBJECT_ORDER\",\n context\n )) {\n mergeArgs.unshift(exp);\n continue;\n }\n }\n mergeArgs.push(exp);\n } else {\n pushMergeArg({\n type: 14,\n loc,\n callee: context.helper(TO_HANDLERS),\n arguments: isComponent ? [exp] : [exp, `true`]\n });\n }\n } else {\n context.onError(\n createCompilerError(\n isVBind ? 34 : 35,\n loc\n )\n );\n }\n continue;\n }\n if (isVBind && modifiers.some((mod) => mod.content === \"prop\")) {\n patchFlag |= 32;\n }\n const directiveTransform = context.directiveTransforms[name];\n if (directiveTransform) {\n const { props: props2, needRuntime } = directiveTransform(prop, node, context);\n !ssr && props2.forEach(analyzePatchFlag);\n if (isVOn && arg && !isStaticExp(arg)) {\n pushMergeArg(createObjectExpression(props2, elementLoc));\n } else {\n properties.push(...props2);\n }\n if (needRuntime) {\n runtimeDirectives.push(prop);\n if (isSymbol(needRuntime)) {\n directiveImportMap.set(prop, needRuntime);\n }\n }\n } else if (!isBuiltInDirective(name)) {\n runtimeDirectives.push(prop);\n if (hasChildren) {\n shouldUseBlock = true;\n }\n }\n }\n }\n let propsExpression = void 0;\n if (mergeArgs.length) {\n pushMergeArg();\n if (mergeArgs.length > 1) {\n propsExpression = createCallExpression(\n context.helper(MERGE_PROPS),\n mergeArgs,\n elementLoc\n );\n } else {\n propsExpression = mergeArgs[0];\n }\n } else if (properties.length) {\n propsExpression = createObjectExpression(\n dedupeProperties(properties),\n elementLoc\n );\n }\n if (hasDynamicKeys) {\n patchFlag |= 16;\n } else {\n if (hasClassBinding && !isComponent) {\n patchFlag |= 2;\n }\n if (hasStyleBinding && !isComponent) {\n patchFlag |= 4;\n }\n if (dynamicPropNames.length) {\n patchFlag |= 8;\n }\n if (hasHydrationEventBinding) {\n patchFlag |= 32;\n }\n }\n if (!shouldUseBlock && (patchFlag === 0 || patchFlag === 32) && (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\n patchFlag |= 512;\n }\n if (!context.inSSR && propsExpression) {\n switch (propsExpression.type) {\n case 15:\n let classKeyIndex = -1;\n let styleKeyIndex = -1;\n let hasDynamicKey = false;\n for (let i = 0; i < propsExpression.properties.length; i++) {\n const key = propsExpression.properties[i].key;\n if (isStaticExp(key)) {\n if (key.content === \"class\") {\n classKeyIndex = i;\n } else if (key.content === \"style\") {\n styleKeyIndex = i;\n }\n } else if (!key.isHandlerKey) {\n hasDynamicKey = true;\n }\n }\n const classProp = propsExpression.properties[classKeyIndex];\n const styleProp = propsExpression.properties[styleKeyIndex];\n if (!hasDynamicKey) {\n if (classProp && !isStaticExp(classProp.value)) {\n classProp.value = createCallExpression(\n context.helper(NORMALIZE_CLASS),\n [classProp.value]\n );\n }\n if (styleProp && // the static style is compiled into an object,\n // so use `hasStyleBinding` to ensure that it is a dynamic style binding\n (hasStyleBinding || styleProp.value.type === 4 && styleProp.value.content.trim()[0] === `[` || // v-bind:style and style both exist,\n // v-bind:style with static literal object\n styleProp.value.type === 17)) {\n styleProp.value = createCallExpression(\n context.helper(NORMALIZE_STYLE),\n [styleProp.value]\n );\n }\n } else {\n propsExpression = createCallExpression(\n context.helper(NORMALIZE_PROPS),\n [propsExpression]\n );\n }\n break;\n case 14:\n break;\n default:\n propsExpression = createCallExpression(\n context.helper(NORMALIZE_PROPS),\n [\n createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\n propsExpression\n ])\n ]\n );\n break;\n }\n }\n return {\n props: propsExpression,\n directives: runtimeDirectives,\n patchFlag,\n dynamicPropNames,\n shouldUseBlock\n };\n}\nfunction dedupeProperties(properties) {\n const knownProps = /* @__PURE__ */ new Map();\n const deduped = [];\n for (let i = 0; i < properties.length; i++) {\n const prop = properties[i];\n if (prop.key.type === 8 || !prop.key.isStatic) {\n deduped.push(prop);\n continue;\n }\n const name = prop.key.content;\n const existing = knownProps.get(name);\n if (existing) {\n if (name === \"style\" || name === \"class\" || isOn(name)) {\n mergeAsArray(existing, prop);\n }\n } else {\n knownProps.set(name, prop);\n deduped.push(prop);\n }\n }\n return deduped;\n}\nfunction mergeAsArray(existing, incoming) {\n if (existing.value.type === 17) {\n existing.value.elements.push(incoming.value);\n } else {\n existing.value = createArrayExpression(\n [existing.value, incoming.value],\n existing.loc\n );\n }\n}\nfunction buildDirectiveArgs(dir, context) {\n const dirArgs = [];\n const runtime = directiveImportMap.get(dir);\n if (runtime) {\n dirArgs.push(context.helperString(runtime));\n } else {\n {\n context.helper(RESOLVE_DIRECTIVE);\n context.directives.add(dir.name);\n dirArgs.push(toValidAssetId(dir.name, `directive`));\n }\n }\n const { loc } = dir;\n if (dir.exp) dirArgs.push(dir.exp);\n if (dir.arg) {\n if (!dir.exp) {\n dirArgs.push(`void 0`);\n }\n dirArgs.push(dir.arg);\n }\n if (Object.keys(dir.modifiers).length) {\n if (!dir.arg) {\n if (!dir.exp) {\n dirArgs.push(`void 0`);\n }\n dirArgs.push(`void 0`);\n }\n const trueExpression = createSimpleExpression(`true`, false, loc);\n dirArgs.push(\n createObjectExpression(\n dir.modifiers.map(\n (modifier) => createObjectProperty(modifier, trueExpression)\n ),\n loc\n )\n );\n }\n return createArrayExpression(dirArgs, dir.loc);\n}\nfunction stringifyDynamicPropNames(props) {\n let propsNamesString = `[`;\n for (let i = 0, l = props.length; i < l; i++) {\n propsNamesString += JSON.stringify(props[i]);\n if (i < l - 1) propsNamesString += \", \";\n }\n return propsNamesString + `]`;\n}\nfunction isComponentTag(tag) {\n return tag === \"component\" || tag === \"Component\";\n}\n\nconst transformSlotOutlet = (node, context) => {\n if (isSlotOutlet(node)) {\n const { children, loc } = node;\n const { slotName, slotProps } = processSlotOutlet(node, context);\n const slotArgs = [\n context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\n slotName,\n \"{}\",\n \"undefined\",\n \"true\"\n ];\n let expectedLen = 2;\n if (slotProps) {\n slotArgs[2] = slotProps;\n expectedLen = 3;\n }\n if (children.length) {\n slotArgs[3] = createFunctionExpression([], children, false, false, loc);\n expectedLen = 4;\n }\n if (context.scopeId && !context.slotted) {\n expectedLen = 5;\n }\n slotArgs.splice(expectedLen);\n node.codegenNode = createCallExpression(\n context.helper(RENDER_SLOT),\n slotArgs,\n loc\n );\n }\n};\nfunction processSlotOutlet(node, context) {\n let slotName = `\"default\"`;\n let slotProps = void 0;\n const nonNameProps = [];\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 6) {\n if (p.value) {\n if (p.name === \"name\") {\n slotName = JSON.stringify(p.value.content);\n } else {\n p.name = camelize(p.name);\n nonNameProps.push(p);\n }\n }\n } else {\n if (p.name === \"bind\" && isStaticArgOf(p.arg, \"name\")) {\n if (p.exp) {\n slotName = p.exp;\n } else if (p.arg && p.arg.type === 4) {\n const name = camelize(p.arg.content);\n slotName = p.exp = createSimpleExpression(name, false, p.arg.loc);\n }\n } else {\n if (p.name === \"bind\" && p.arg && isStaticExp(p.arg)) {\n p.arg.content = camelize(p.arg.content);\n }\n nonNameProps.push(p);\n }\n }\n }\n if (nonNameProps.length > 0) {\n const { props, directives } = buildProps(\n node,\n context,\n nonNameProps,\n false,\n false\n );\n slotProps = props;\n if (directives.length) {\n context.onError(\n createCompilerError(\n 36,\n directives[0].loc\n )\n );\n }\n }\n return {\n slotName,\n slotProps\n };\n}\n\nconst transformOn = (dir, node, context, augmentor) => {\n const { loc, modifiers, arg } = dir;\n if (!dir.exp && !modifiers.length) {\n context.onError(createCompilerError(35, loc));\n }\n let eventName;\n if (arg.type === 4) {\n if (arg.isStatic) {\n let rawName = arg.content;\n if (!!(process.env.NODE_ENV !== \"production\") && rawName.startsWith(\"vnode\")) {\n context.onError(createCompilerError(51, arg.loc));\n }\n if (rawName.startsWith(\"vue:\")) {\n rawName = `vnode-${rawName.slice(4)}`;\n }\n const eventString = node.tagType !== 0 || rawName.startsWith(\"vnode\") || !/[A-Z]/.test(rawName) ? (\n // for non-element and vnode lifecycle event listeners, auto convert\n // it to camelCase. See issue #2249\n toHandlerKey(camelize(rawName))\n ) : (\n // preserve case for plain element listeners that have uppercase\n // letters, as these may be custom elements' custom events\n `on:${rawName}`\n );\n eventName = createSimpleExpression(eventString, true, arg.loc);\n } else {\n eventName = createCompoundExpression([\n `${context.helperString(TO_HANDLER_KEY)}(`,\n arg,\n `)`\n ]);\n }\n } else {\n eventName = arg;\n eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\n eventName.children.push(`)`);\n }\n let exp = dir.exp;\n if (exp && !exp.content.trim()) {\n exp = void 0;\n }\n let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\n if (exp) {\n const isMemberExp = isMemberExpression(exp);\n const isInlineStatement = !(isMemberExp || isFnExpression(exp));\n const hasMultipleStatements = exp.content.includes(`;`);\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n validateBrowserExpression(\n exp,\n context,\n false,\n hasMultipleStatements\n );\n }\n if (isInlineStatement || shouldCache && isMemberExp) {\n exp = createCompoundExpression([\n `${isInlineStatement ? `$event` : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\n exp,\n hasMultipleStatements ? `}` : `)`\n ]);\n }\n }\n let ret = {\n props: [\n createObjectProperty(\n eventName,\n exp || createSimpleExpression(`() => {}`, false, loc)\n )\n ]\n };\n if (augmentor) {\n ret = augmentor(ret);\n }\n if (shouldCache) {\n ret.props[0].value = context.cache(ret.props[0].value);\n }\n ret.props.forEach((p) => p.key.isHandlerKey = true);\n return ret;\n};\n\nconst transformText = (node, context) => {\n if (node.type === 0 || node.type === 1 || node.type === 11 || node.type === 10) {\n return () => {\n const children = node.children;\n let currentContainer = void 0;\n let hasText = false;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isText$1(child)) {\n hasText = true;\n for (let j = i + 1; j < children.length; j++) {\n const next = children[j];\n if (isText$1(next)) {\n if (!currentContainer) {\n currentContainer = children[i] = createCompoundExpression(\n [child],\n child.loc\n );\n }\n currentContainer.children.push(` + `, next);\n children.splice(j, 1);\n j--;\n } else {\n currentContainer = void 0;\n break;\n }\n }\n }\n }\n if (!hasText || // if this is a plain element with a single text child, leave it\n // as-is since the runtime has dedicated fast path for this by directly\n // setting textContent of the element.\n // for component root it's always normalized anyway.\n children.length === 1 && (node.type === 0 || node.type === 1 && node.tagType === 0 && // #3756\n // custom directives can potentially add DOM elements arbitrarily,\n // we need to avoid setting textContent of the element at runtime\n // to avoid accidentally overwriting the DOM elements added\n // by the user through custom directives.\n !node.props.find(\n (p) => p.type === 7 && !context.directiveTransforms[p.name]\n ) && // in compat mode, <template> tags with no special directives\n // will be rendered as a fragment so its children must be\n // converted into vnodes.\n !(node.tag === \"template\"))) {\n return;\n }\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isText$1(child) || child.type === 8) {\n const callArgs = [];\n if (child.type !== 2 || child.content !== \" \") {\n callArgs.push(child);\n }\n if (!context.ssr && getConstantType(child, context) === 0) {\n callArgs.push(\n 1 + (!!(process.env.NODE_ENV !== \"production\") ? ` /* ${PatchFlagNames[1]} */` : ``)\n );\n }\n children[i] = {\n type: 12,\n content: child,\n loc: child.loc,\n codegenNode: createCallExpression(\n context.helper(CREATE_TEXT),\n callArgs\n )\n };\n }\n }\n };\n }\n};\n\nconst seen$1 = /* @__PURE__ */ new WeakSet();\nconst transformOnce = (node, context) => {\n if (node.type === 1 && findDir(node, \"once\", true)) {\n if (seen$1.has(node) || context.inVOnce || context.inSSR) {\n return;\n }\n seen$1.add(node);\n context.inVOnce = true;\n context.helper(SET_BLOCK_TRACKING);\n return () => {\n context.inVOnce = false;\n const cur = context.currentNode;\n if (cur.codegenNode) {\n cur.codegenNode = context.cache(\n cur.codegenNode,\n true,\n true\n );\n }\n };\n }\n};\n\nconst transformModel = (dir, node, context) => {\n const { exp, arg } = dir;\n if (!exp) {\n context.onError(\n createCompilerError(41, dir.loc)\n );\n return createTransformProps();\n }\n const rawExp = exp.loc.source.trim();\n const expString = exp.type === 4 ? exp.content : rawExp;\n const bindingType = context.bindingMetadata[rawExp];\n if (bindingType === \"props\" || bindingType === \"props-aliased\") {\n context.onError(createCompilerError(44, exp.loc));\n return createTransformProps();\n }\n const maybeRef = false;\n if (!expString.trim() || !isMemberExpression(exp) && !maybeRef) {\n context.onError(\n createCompilerError(42, exp.loc)\n );\n return createTransformProps();\n }\n const propName = arg ? arg : createSimpleExpression(\"modelValue\", true);\n const eventName = arg ? isStaticExp(arg) ? `onUpdate:${camelize(arg.content)}` : createCompoundExpression(['\"onUpdate:\" + ', arg]) : `onUpdate:modelValue`;\n let assignmentExp;\n const eventArg = context.isTS ? `($event: any)` : `$event`;\n {\n assignmentExp = createCompoundExpression([\n `${eventArg} => ((`,\n exp,\n `) = $event)`\n ]);\n }\n const props = [\n // modelValue: foo\n createObjectProperty(propName, dir.exp),\n // \"onUpdate:modelValue\": $event => (foo = $event)\n createObjectProperty(eventName, assignmentExp)\n ];\n if (dir.modifiers.length && node.tagType === 1) {\n const modifiers = dir.modifiers.map((m) => m.content).map((m) => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`).join(`, `);\n const modifiersKey = arg ? isStaticExp(arg) ? `${arg.content}Modifiers` : createCompoundExpression([arg, ' + \"Modifiers\"']) : `modelModifiers`;\n props.push(\n createObjectProperty(\n modifiersKey,\n createSimpleExpression(\n `{ ${modifiers} }`,\n false,\n dir.loc,\n 2\n )\n )\n );\n }\n return createTransformProps(props);\n};\nfunction createTransformProps(props = []) {\n return { props };\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\nconst transformFilter = (node, context) => {\n if (!isCompatEnabled(\"COMPILER_FILTERS\", context)) {\n return;\n }\n if (node.type === 5) {\n rewriteFilter(node.content, context);\n } else if (node.type === 1) {\n node.props.forEach((prop) => {\n if (prop.type === 7 && prop.name !== \"for\" && prop.exp) {\n rewriteFilter(prop.exp, context);\n }\n });\n }\n};\nfunction rewriteFilter(node, context) {\n if (node.type === 4) {\n parseFilter(node, context);\n } else {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (typeof child !== \"object\") continue;\n if (child.type === 4) {\n parseFilter(child, context);\n } else if (child.type === 8) {\n rewriteFilter(node, context);\n } else if (child.type === 5) {\n rewriteFilter(child.content, context);\n }\n }\n }\n}\nfunction parseFilter(node, context) {\n const exp = node.content;\n let inSingle = false;\n let inDouble = false;\n let inTemplateString = false;\n let inRegex = false;\n let curly = 0;\n let square = 0;\n let paren = 0;\n let lastFilterIndex = 0;\n let c, prev, i, expression, filters = [];\n for (i = 0; i < exp.length; i++) {\n prev = c;\n c = exp.charCodeAt(i);\n if (inSingle) {\n if (c === 39 && prev !== 92) inSingle = false;\n } else if (inDouble) {\n if (c === 34 && prev !== 92) inDouble = false;\n } else if (inTemplateString) {\n if (c === 96 && prev !== 92) inTemplateString = false;\n } else if (inRegex) {\n if (c === 47 && prev !== 92) inRegex = false;\n } else if (c === 124 && // pipe\n exp.charCodeAt(i + 1) !== 124 && exp.charCodeAt(i - 1) !== 124 && !curly && !square && !paren) {\n if (expression === void 0) {\n lastFilterIndex = i + 1;\n expression = exp.slice(0, i).trim();\n } else {\n pushFilter();\n }\n } else {\n switch (c) {\n case 34:\n inDouble = true;\n break;\n // \"\n case 39:\n inSingle = true;\n break;\n // '\n case 96:\n inTemplateString = true;\n break;\n // `\n case 40:\n paren++;\n break;\n // (\n case 41:\n paren--;\n break;\n // )\n case 91:\n square++;\n break;\n // [\n case 93:\n square--;\n break;\n // ]\n case 123:\n curly++;\n break;\n // {\n case 125:\n curly--;\n break;\n }\n if (c === 47) {\n let j = i - 1;\n let p;\n for (; j >= 0; j--) {\n p = exp.charAt(j);\n if (p !== \" \") break;\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true;\n }\n }\n }\n }\n if (expression === void 0) {\n expression = exp.slice(0, i).trim();\n } else if (lastFilterIndex !== 0) {\n pushFilter();\n }\n function pushFilter() {\n filters.push(exp.slice(lastFilterIndex, i).trim());\n lastFilterIndex = i + 1;\n }\n if (filters.length) {\n !!(process.env.NODE_ENV !== \"production\") && warnDeprecation(\n \"COMPILER_FILTERS\",\n context,\n node.loc\n );\n for (i = 0; i < filters.length; i++) {\n expression = wrapFilter(expression, filters[i], context);\n }\n node.content = expression;\n node.ast = void 0;\n }\n}\nfunction wrapFilter(exp, filter, context) {\n context.helper(RESOLVE_FILTER);\n const i = filter.indexOf(\"(\");\n if (i < 0) {\n context.filters.add(filter);\n return `${toValidAssetId(filter, \"filter\")}(${exp})`;\n } else {\n const name = filter.slice(0, i);\n const args = filter.slice(i + 1);\n context.filters.add(name);\n return `${toValidAssetId(name, \"filter\")}(${exp}${args !== \")\" ? \",\" + args : args}`;\n }\n}\n\nconst seen = /* @__PURE__ */ new WeakSet();\nconst transformMemo = (node, context) => {\n if (node.type === 1) {\n const dir = findDir(node, \"memo\");\n if (!dir || seen.has(node)) {\n return;\n }\n seen.add(node);\n return () => {\n const codegenNode = node.codegenNode || context.currentNode.codegenNode;\n if (codegenNode && codegenNode.type === 13) {\n if (node.tagType !== 1) {\n convertToBlock(codegenNode, context);\n }\n node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\n dir.exp,\n createFunctionExpression(void 0, codegenNode),\n `_cache`,\n String(context.cached.length)\n ]);\n context.cached.push(null);\n }\n };\n }\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\n return [\n [\n transformOnce,\n transformIf,\n transformMemo,\n transformFor,\n ...[transformFilter] ,\n ...!!(process.env.NODE_ENV !== \"production\") ? [transformExpression] : [],\n transformSlotOutlet,\n transformElement,\n trackSlotScopes,\n transformText\n ],\n {\n on: transformOn,\n bind: transformBind,\n model: transformModel\n }\n ];\n}\nfunction baseCompile(source, options = {}) {\n const onError = options.onError || defaultOnError;\n const isModuleMode = options.mode === \"module\";\n {\n if (options.prefixIdentifiers === true) {\n onError(createCompilerError(47));\n } else if (isModuleMode) {\n onError(createCompilerError(48));\n }\n }\n const prefixIdentifiers = false;\n if (options.cacheHandlers) {\n onError(createCompilerError(49));\n }\n if (options.scopeId && !isModuleMode) {\n onError(createCompilerError(50));\n }\n const resolvedOptions = extend({}, options, {\n prefixIdentifiers\n });\n const ast = isString(source) ? baseParse(source, resolvedOptions) : source;\n const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();\n transform(\n ast,\n extend({}, resolvedOptions, {\n nodeTransforms: [\n ...nodeTransforms,\n ...options.nodeTransforms || []\n // user transforms\n ],\n directiveTransforms: extend(\n {},\n directiveTransforms,\n options.directiveTransforms || {}\n // user transforms\n )\n })\n );\n return generate(ast, resolvedOptions);\n}\n\nconst BindingTypes = {\n \"DATA\": \"data\",\n \"PROPS\": \"props\",\n \"PROPS_ALIASED\": \"props-aliased\",\n \"SETUP_LET\": \"setup-let\",\n \"SETUP_CONST\": \"setup-const\",\n \"SETUP_REACTIVE_CONST\": \"setup-reactive-const\",\n \"SETUP_MAYBE_REF\": \"setup-maybe-ref\",\n \"SETUP_REF\": \"setup-ref\",\n \"OPTIONS\": \"options\",\n \"LITERAL_CONST\": \"literal-const\"\n};\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexport { BASE_TRANSITION, BindingTypes, CAMELIZE, CAPITALIZE, CREATE_BLOCK, CREATE_COMMENT, CREATE_ELEMENT_BLOCK, CREATE_ELEMENT_VNODE, CREATE_SLOTS, CREATE_STATIC, CREATE_TEXT, CREATE_VNODE, CompilerDeprecationTypes, ConstantTypes, ElementTypes, ErrorCodes, FRAGMENT, GUARD_REACTIVE_PROPS, IS_MEMO_SAME, IS_REF, KEEP_ALIVE, MERGE_PROPS, NORMALIZE_CLASS, NORMALIZE_PROPS, NORMALIZE_STYLE, Namespaces, NodeTypes, OPEN_BLOCK, POP_SCOPE_ID, PUSH_SCOPE_ID, RENDER_LIST, RENDER_SLOT, RESOLVE_COMPONENT, RESOLVE_DIRECTIVE, RESOLVE_DYNAMIC_COMPONENT, RESOLVE_FILTER, SET_BLOCK_TRACKING, SUSPENSE, TELEPORT, TO_DISPLAY_STRING, TO_HANDLERS, TO_HANDLER_KEY, TS_NODE_TYPES, UNREF, WITH_CTX, WITH_DIRECTIVES, WITH_MEMO, advancePositionWithClone, advancePositionWithMutation, assert, baseCompile, baseParse, buildDirectiveArgs, buildProps, buildSlots, checkCompatEnabled, convertToBlock, createArrayExpression, createAssignmentExpression, createBlockStatement, createCacheExpression, createCallExpression, createCompilerError, createCompoundExpression, createConditionalExpression, createForLoopParams, createFunctionExpression, createIfStatement, createInterpolation, createObjectExpression, createObjectProperty, createReturnStatement, createRoot, createSequenceExpression, createSimpleExpression, createStructuralDirectiveTransform, createTemplateLiteral, createTransformContext, createVNodeCall, errorMessages, extractIdentifiers, findDir, findProp, forAliasRE, generate, getBaseTransformPreset, getConstantType, getMemoedVNodeCall, getVNodeBlockHelper, getVNodeHelper, hasDynamicKeyVBind, hasScopeRef, helperNameMap, injectProp, isCoreComponent, isFnExpression, isFnExpressionBrowser, isFnExpressionNode, isFunctionType, isInDestructureAssignment, isInNewExpression, isMemberExpression, isMemberExpressionBrowser, isMemberExpressionNode, isReferencedIdentifier, isSimpleIdentifier, isSlotOutlet, isStaticArgOf, isStaticExp, isStaticProperty, isStaticPropertyKey, isTemplateNode, isText$1 as isText, isVSlot, locStub, noopDirectiveTransform, processExpression, processFor, processIf, processSlotOutlet, registerRuntimeHelpers, resolveComponentType, stringifyExpression, toValidAssetId, trackSlotScopes, trackVForSlotScopes, transform, transformBind, transformElement, transformExpression, transformModel, transformOn, traverseNode, unwrapTSNode, walkBlockDeclarations, walkFunctionParams, walkIdentifiers, warnDeprecation };\n","/**\n* @vue/compiler-dom v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { registerRuntimeHelpers, createSimpleExpression, createCompilerError, createObjectProperty, getConstantType, createCallExpression, TO_DISPLAY_STRING, transformModel as transformModel$1, findProp, hasDynamicKeyVBind, findDir, isStaticArgOf, transformOn as transformOn$1, isStaticExp, createCompoundExpression, checkCompatEnabled, noopDirectiveTransform, baseCompile, baseParse } from '@vue/compiler-core';\nexport * from '@vue/compiler-core';\nimport { isVoidTag, isHTMLTag, isSVGTag, isMathMLTag, parseStringStyle, capitalize, makeMap, extend } from '@vue/shared';\n\nconst V_MODEL_RADIO = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vModelRadio` : ``);\nconst V_MODEL_CHECKBOX = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelCheckbox` : ``\n);\nconst V_MODEL_TEXT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vModelText` : ``);\nconst V_MODEL_SELECT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelSelect` : ``\n);\nconst V_MODEL_DYNAMIC = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelDynamic` : ``\n);\nconst V_ON_WITH_MODIFIERS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vOnModifiersGuard` : ``\n);\nconst V_ON_WITH_KEYS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vOnKeysGuard` : ``\n);\nconst V_SHOW = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vShow` : ``);\nconst TRANSITION = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Transition` : ``);\nconst TRANSITION_GROUP = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `TransitionGroup` : ``\n);\nregisterRuntimeHelpers({\n [V_MODEL_RADIO]: `vModelRadio`,\n [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n [V_MODEL_TEXT]: `vModelText`,\n [V_MODEL_SELECT]: `vModelSelect`,\n [V_MODEL_DYNAMIC]: `vModelDynamic`,\n [V_ON_WITH_MODIFIERS]: `withModifiers`,\n [V_ON_WITH_KEYS]: `withKeys`,\n [V_SHOW]: `vShow`,\n [TRANSITION]: `Transition`,\n [TRANSITION_GROUP]: `TransitionGroup`\n});\n\nlet decoder;\nfunction decodeHtmlBrowser(raw, asAttr = false) {\n if (!decoder) {\n decoder = document.createElement(\"div\");\n }\n if (asAttr) {\n decoder.innerHTML = `<div foo=\"${raw.replace(/\"/g, \""\")}\">`;\n return decoder.children[0].getAttribute(\"foo\");\n } else {\n decoder.innerHTML = raw;\n return decoder.textContent;\n }\n}\n\nconst parserOptions = {\n parseMode: \"html\",\n isVoidTag,\n isNativeTag: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(tag),\n isPreTag: (tag) => tag === \"pre\",\n isIgnoreNewlineTag: (tag) => tag === \"pre\" || tag === \"textarea\",\n decodeEntities: decodeHtmlBrowser ,\n isBuiltInComponent: (tag) => {\n if (tag === \"Transition\" || tag === \"transition\") {\n return TRANSITION;\n } else if (tag === \"TransitionGroup\" || tag === \"transition-group\") {\n return TRANSITION_GROUP;\n }\n },\n // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n getNamespace(tag, parent, rootNamespace) {\n let ns = parent ? parent.ns : rootNamespace;\n if (parent && ns === 2) {\n if (parent.tag === \"annotation-xml\") {\n if (tag === \"svg\") {\n return 1;\n }\n if (parent.props.some(\n (a) => a.type === 6 && a.name === \"encoding\" && a.value != null && (a.value.content === \"text/html\" || a.value.content === \"application/xhtml+xml\")\n )) {\n ns = 0;\n }\n } else if (/^m(?:[ions]|text)$/.test(parent.tag) && tag !== \"mglyph\" && tag !== \"malignmark\") {\n ns = 0;\n }\n } else if (parent && ns === 1) {\n if (parent.tag === \"foreignObject\" || parent.tag === \"desc\" || parent.tag === \"title\") {\n ns = 0;\n }\n }\n if (ns === 0) {\n if (tag === \"svg\") {\n return 1;\n }\n if (tag === \"math\") {\n return 2;\n }\n }\n return ns;\n }\n};\n\nconst transformStyle = (node) => {\n if (node.type === 1) {\n node.props.forEach((p, i) => {\n if (p.type === 6 && p.name === \"style\" && p.value) {\n node.props[i] = {\n type: 7,\n name: `bind`,\n arg: createSimpleExpression(`style`, true, p.loc),\n exp: parseInlineCSS(p.value.content, p.loc),\n modifiers: [],\n loc: p.loc\n };\n }\n });\n }\n};\nconst parseInlineCSS = (cssText, loc) => {\n const normalized = parseStringStyle(cssText);\n return createSimpleExpression(\n JSON.stringify(normalized),\n false,\n loc,\n 3\n );\n};\n\nfunction createDOMCompilerError(code, loc) {\n return createCompilerError(\n code,\n loc,\n !!(process.env.NODE_ENV !== \"production\") || false ? DOMErrorMessages : void 0\n );\n}\nconst DOMErrorCodes = {\n \"X_V_HTML_NO_EXPRESSION\": 53,\n \"53\": \"X_V_HTML_NO_EXPRESSION\",\n \"X_V_HTML_WITH_CHILDREN\": 54,\n \"54\": \"X_V_HTML_WITH_CHILDREN\",\n \"X_V_TEXT_NO_EXPRESSION\": 55,\n \"55\": \"X_V_TEXT_NO_EXPRESSION\",\n \"X_V_TEXT_WITH_CHILDREN\": 56,\n \"56\": \"X_V_TEXT_WITH_CHILDREN\",\n \"X_V_MODEL_ON_INVALID_ELEMENT\": 57,\n \"57\": \"X_V_MODEL_ON_INVALID_ELEMENT\",\n \"X_V_MODEL_ARG_ON_ELEMENT\": 58,\n \"58\": \"X_V_MODEL_ARG_ON_ELEMENT\",\n \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\": 59,\n \"59\": \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\",\n \"X_V_MODEL_UNNECESSARY_VALUE\": 60,\n \"60\": \"X_V_MODEL_UNNECESSARY_VALUE\",\n \"X_V_SHOW_NO_EXPRESSION\": 61,\n \"61\": \"X_V_SHOW_NO_EXPRESSION\",\n \"X_TRANSITION_INVALID_CHILDREN\": 62,\n \"62\": \"X_TRANSITION_INVALID_CHILDREN\",\n \"X_IGNORED_SIDE_EFFECT_TAG\": 63,\n \"63\": \"X_IGNORED_SIDE_EFFECT_TAG\",\n \"__EXTEND_POINT__\": 64,\n \"64\": \"__EXTEND_POINT__\"\n};\nconst DOMErrorMessages = {\n [53]: `v-html is missing expression.`,\n [54]: `v-html will override element children.`,\n [55]: `v-text is missing expression.`,\n [56]: `v-text will override element children.`,\n [57]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n [58]: `v-model argument is not supported on plain elements.`,\n [59]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n [60]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n [61]: `v-show is missing expression.`,\n [62]: `<Transition> expects exactly one child element or component.`,\n [63]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(53, loc)\n );\n }\n if (node.children.length) {\n context.onError(\n createDOMCompilerError(54, loc)\n );\n node.children.length = 0;\n }\n return {\n props: [\n createObjectProperty(\n createSimpleExpression(`innerHTML`, true, loc),\n exp || createSimpleExpression(\"\", true)\n )\n ]\n };\n};\n\nconst transformVText = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(55, loc)\n );\n }\n if (node.children.length) {\n context.onError(\n createDOMCompilerError(56, loc)\n );\n node.children.length = 0;\n }\n return {\n props: [\n createObjectProperty(\n createSimpleExpression(`textContent`, true),\n exp ? getConstantType(exp, context) > 0 ? exp : createCallExpression(\n context.helperString(TO_DISPLAY_STRING),\n [exp],\n loc\n ) : createSimpleExpression(\"\", true)\n )\n ]\n };\n};\n\nconst transformModel = (dir, node, context) => {\n const baseResult = transformModel$1(dir, node, context);\n if (!baseResult.props.length || node.tagType === 1) {\n return baseResult;\n }\n if (dir.arg) {\n context.onError(\n createDOMCompilerError(\n 58,\n dir.arg.loc\n )\n );\n }\n function checkDuplicatedValue() {\n const value = findDir(node, \"bind\");\n if (value && isStaticArgOf(value.arg, \"value\")) {\n context.onError(\n createDOMCompilerError(\n 60,\n value.loc\n )\n );\n }\n }\n const { tag } = node;\n const isCustomElement = context.isCustomElement(tag);\n if (tag === \"input\" || tag === \"textarea\" || tag === \"select\" || isCustomElement) {\n let directiveToUse = V_MODEL_TEXT;\n let isInvalidType = false;\n if (tag === \"input\" || isCustomElement) {\n const type = findProp(node, `type`);\n if (type) {\n if (type.type === 7) {\n directiveToUse = V_MODEL_DYNAMIC;\n } else if (type.value) {\n switch (type.value.content) {\n case \"radio\":\n directiveToUse = V_MODEL_RADIO;\n break;\n case \"checkbox\":\n directiveToUse = V_MODEL_CHECKBOX;\n break;\n case \"file\":\n isInvalidType = true;\n context.onError(\n createDOMCompilerError(\n 59,\n dir.loc\n )\n );\n break;\n default:\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n break;\n }\n }\n } else if (hasDynamicKeyVBind(node)) {\n directiveToUse = V_MODEL_DYNAMIC;\n } else {\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n }\n } else if (tag === \"select\") {\n directiveToUse = V_MODEL_SELECT;\n } else {\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n }\n if (!isInvalidType) {\n baseResult.needRuntime = context.helper(directiveToUse);\n }\n } else {\n context.onError(\n createDOMCompilerError(\n 57,\n dir.loc\n )\n );\n }\n baseResult.props = baseResult.props.filter(\n (p) => !(p.key.type === 4 && p.key.content === \"modelValue\")\n );\n return baseResult;\n};\n\nconst isEventOptionModifier = /* @__PURE__ */ makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /* @__PURE__ */ makeMap(\n // event propagation management\n `stop,prevent,self,ctrl,shift,alt,meta,exact,middle`\n);\nconst maybeKeyModifier = /* @__PURE__ */ makeMap(\"left,right\");\nconst isKeyboardEvent = /* @__PURE__ */ makeMap(`onkeyup,onkeydown,onkeypress`);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n const keyModifiers = [];\n const nonKeyModifiers = [];\n const eventOptionModifiers = [];\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i].content;\n if (modifier === \"native\" && checkCompatEnabled(\n \"COMPILER_V_ON_NATIVE\",\n context,\n loc\n )) {\n eventOptionModifiers.push(modifier);\n } else if (isEventOptionModifier(modifier)) {\n eventOptionModifiers.push(modifier);\n } else {\n if (maybeKeyModifier(modifier)) {\n if (isStaticExp(key)) {\n if (isKeyboardEvent(key.content.toLowerCase())) {\n keyModifiers.push(modifier);\n } else {\n nonKeyModifiers.push(modifier);\n }\n } else {\n keyModifiers.push(modifier);\n nonKeyModifiers.push(modifier);\n }\n } else {\n if (isNonKeyModifier(modifier)) {\n nonKeyModifiers.push(modifier);\n } else {\n keyModifiers.push(modifier);\n }\n }\n }\n }\n return {\n keyModifiers,\n nonKeyModifiers,\n eventOptionModifiers\n };\n};\nconst transformClick = (key, event) => {\n const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === \"onclick\";\n return isStaticClick ? createSimpleExpression(event, true) : key.type !== 4 ? createCompoundExpression([\n `(`,\n key,\n `) === \"onClick\" ? \"${event}\" : (`,\n key,\n `)`\n ]) : key;\n};\nconst transformOn = (dir, node, context) => {\n return transformOn$1(dir, node, context, (baseResult) => {\n const { modifiers } = dir;\n if (!modifiers.length) return baseResult;\n let { key, value: handlerExp } = baseResult.props[0];\n const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n if (nonKeyModifiers.includes(\"right\")) {\n key = transformClick(key, `onContextmenu`);\n }\n if (nonKeyModifiers.includes(\"middle\")) {\n key = transformClick(key, `onMouseup`);\n }\n if (nonKeyModifiers.length) {\n handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n handlerExp,\n JSON.stringify(nonKeyModifiers)\n ]);\n }\n if (keyModifiers.length && // if event name is dynamic, always wrap with keys guard\n (!isStaticExp(key) || isKeyboardEvent(key.content.toLowerCase()))) {\n handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\n handlerExp,\n JSON.stringify(keyModifiers)\n ]);\n }\n if (eventOptionModifiers.length) {\n const modifierPostfix = eventOptionModifiers.map(capitalize).join(\"\");\n key = isStaticExp(key) ? createSimpleExpression(`${key.content}${modifierPostfix}`, true) : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n }\n return {\n props: [createObjectProperty(key, handlerExp)]\n };\n });\n};\n\nconst transformShow = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(61, loc)\n );\n }\n return {\n props: [],\n needRuntime: context.helper(V_SHOW)\n };\n};\n\nconst transformTransition = (node, context) => {\n if (node.type === 1 && node.tagType === 1) {\n const component = context.isBuiltInComponent(node.tag);\n if (component === TRANSITION) {\n return () => {\n if (!node.children.length) {\n return;\n }\n if (hasMultipleChildren(node)) {\n context.onError(\n createDOMCompilerError(\n 62,\n {\n start: node.children[0].loc.start,\n end: node.children[node.children.length - 1].loc.end,\n source: \"\"\n }\n )\n );\n }\n const child = node.children[0];\n if (child.type === 1) {\n for (const p of child.props) {\n if (p.type === 7 && p.name === \"show\") {\n node.props.push({\n type: 6,\n name: \"persisted\",\n nameLoc: node.loc,\n value: void 0,\n loc: node.loc\n });\n }\n }\n }\n };\n }\n }\n};\nfunction hasMultipleChildren(node) {\n const children = node.children = node.children.filter(\n (c) => c.type !== 3 && !(c.type === 2 && !c.content.trim())\n );\n const child = children[0];\n return children.length !== 1 || child.type === 11 || child.type === 9 && child.branches.some(hasMultipleChildren);\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n if (node.type === 1 && node.tagType === 0 && (node.tag === \"script\" || node.tag === \"style\")) {\n !!(process.env.NODE_ENV !== \"production\") && context.onError(\n createDOMCompilerError(\n 63,\n node.loc\n )\n );\n context.removeNode();\n }\n};\n\nfunction isValidHTMLNesting(parent, child) {\n if (parent in onlyValidChildren) {\n return onlyValidChildren[parent].has(child);\n }\n if (child in onlyValidParents) {\n return onlyValidParents[child].has(parent);\n }\n if (parent in knownInvalidChildren) {\n if (knownInvalidChildren[parent].has(child)) return false;\n }\n if (child in knownInvalidParents) {\n if (knownInvalidParents[child].has(parent)) return false;\n }\n return true;\n}\nconst headings = /* @__PURE__ */ new Set([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\nconst emptySet = /* @__PURE__ */ new Set([]);\nconst onlyValidChildren = {\n head: /* @__PURE__ */ new Set([\n \"base\",\n \"basefront\",\n \"bgsound\",\n \"link\",\n \"meta\",\n \"title\",\n \"noscript\",\n \"noframes\",\n \"style\",\n \"script\",\n \"template\"\n ]),\n optgroup: /* @__PURE__ */ new Set([\"option\"]),\n select: /* @__PURE__ */ new Set([\"optgroup\", \"option\", \"hr\"]),\n // table\n table: /* @__PURE__ */ new Set([\"caption\", \"colgroup\", \"tbody\", \"tfoot\", \"thead\"]),\n tr: /* @__PURE__ */ new Set([\"td\", \"th\"]),\n colgroup: /* @__PURE__ */ new Set([\"col\"]),\n tbody: /* @__PURE__ */ new Set([\"tr\"]),\n thead: /* @__PURE__ */ new Set([\"tr\"]),\n tfoot: /* @__PURE__ */ new Set([\"tr\"]),\n // these elements can not have any children elements\n script: emptySet,\n iframe: emptySet,\n option: emptySet,\n textarea: emptySet,\n style: emptySet,\n title: emptySet\n};\nconst onlyValidParents = {\n // sections\n html: emptySet,\n body: /* @__PURE__ */ new Set([\"html\"]),\n head: /* @__PURE__ */ new Set([\"html\"]),\n // table\n td: /* @__PURE__ */ new Set([\"tr\"]),\n colgroup: /* @__PURE__ */ new Set([\"table\"]),\n caption: /* @__PURE__ */ new Set([\"table\"]),\n tbody: /* @__PURE__ */ new Set([\"table\"]),\n tfoot: /* @__PURE__ */ new Set([\"table\"]),\n col: /* @__PURE__ */ new Set([\"colgroup\"]),\n th: /* @__PURE__ */ new Set([\"tr\"]),\n thead: /* @__PURE__ */ new Set([\"table\"]),\n tr: /* @__PURE__ */ new Set([\"tbody\", \"thead\", \"tfoot\"]),\n // data list\n dd: /* @__PURE__ */ new Set([\"dl\", \"div\"]),\n dt: /* @__PURE__ */ new Set([\"dl\", \"div\"]),\n // other\n figcaption: /* @__PURE__ */ new Set([\"figure\"]),\n // li: new Set([\"ul\", \"ol\"]),\n summary: /* @__PURE__ */ new Set([\"details\"]),\n area: /* @__PURE__ */ new Set([\"map\"])\n};\nconst knownInvalidChildren = {\n p: /* @__PURE__ */ new Set([\n \"address\",\n \"article\",\n \"aside\",\n \"blockquote\",\n \"center\",\n \"details\",\n \"dialog\",\n \"dir\",\n \"div\",\n \"dl\",\n \"fieldset\",\n \"figure\",\n \"footer\",\n \"form\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"hgroup\",\n \"hr\",\n \"li\",\n \"main\",\n \"nav\",\n \"menu\",\n \"ol\",\n \"p\",\n \"pre\",\n \"section\",\n \"table\",\n \"ul\"\n ]),\n svg: /* @__PURE__ */ new Set([\n \"b\",\n \"blockquote\",\n \"br\",\n \"code\",\n \"dd\",\n \"div\",\n \"dl\",\n \"dt\",\n \"em\",\n \"embed\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"hr\",\n \"i\",\n \"img\",\n \"li\",\n \"menu\",\n \"meta\",\n \"ol\",\n \"p\",\n \"pre\",\n \"ruby\",\n \"s\",\n \"small\",\n \"span\",\n \"strong\",\n \"sub\",\n \"sup\",\n \"table\",\n \"u\",\n \"ul\",\n \"var\"\n ])\n};\nconst knownInvalidParents = {\n a: /* @__PURE__ */ new Set([\"a\"]),\n button: /* @__PURE__ */ new Set([\"button\"]),\n dd: /* @__PURE__ */ new Set([\"dd\", \"dt\"]),\n dt: /* @__PURE__ */ new Set([\"dd\", \"dt\"]),\n form: /* @__PURE__ */ new Set([\"form\"]),\n li: /* @__PURE__ */ new Set([\"li\"]),\n h1: headings,\n h2: headings,\n h3: headings,\n h4: headings,\n h5: headings,\n h6: headings\n};\n\nconst validateHtmlNesting = (node, context) => {\n if (node.type === 1 && node.tagType === 0 && context.parent && context.parent.type === 1 && context.parent.tagType === 0 && !isValidHTMLNesting(context.parent.tag, node.tag)) {\n const error = new SyntaxError(\n `<${node.tag}> cannot be child of <${context.parent.tag}>, according to HTML specifications. This can cause hydration errors or potentially disrupt future functionality.`\n );\n error.loc = node.loc;\n context.onWarn(error);\n }\n};\n\nconst DOMNodeTransforms = [\n transformStyle,\n ...!!(process.env.NODE_ENV !== \"production\") ? [transformTransition, validateHtmlNesting] : []\n];\nconst DOMDirectiveTransforms = {\n cloak: noopDirectiveTransform,\n html: transformVHtml,\n text: transformVText,\n model: transformModel,\n // override compiler-core\n on: transformOn,\n // override compiler-core\n show: transformShow\n};\nfunction compile(src, options = {}) {\n return baseCompile(\n src,\n extend({}, parserOptions, options, {\n nodeTransforms: [\n // ignore <script> and <tag>\n // this is not put inside DOMNodeTransforms because that list is used\n // by compiler-ssr to generate vnode fallback branches\n ignoreSideEffectTags,\n ...DOMNodeTransforms,\n ...options.nodeTransforms || []\n ],\n directiveTransforms: extend(\n {},\n DOMDirectiveTransforms,\n options.directiveTransforms || {}\n ),\n transformHoist: null \n })\n );\n}\nfunction parse(template, options = {}) {\n return baseParse(template, extend({}, parserOptions, options));\n}\n\nexport { DOMDirectiveTransforms, DOMErrorCodes, DOMErrorMessages, DOMNodeTransforms, TRANSITION, TRANSITION_GROUP, V_MODEL_CHECKBOX, V_MODEL_DYNAMIC, V_MODEL_RADIO, V_MODEL_SELECT, V_MODEL_TEXT, V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS, V_SHOW, compile, createDOMCompilerError, parse, parserOptions, transformStyle };\n","/**\n* @vue/reactivity v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { hasChanged, extend, isArray, isIntegerKey, isSymbol, isMap, hasOwn, isObject, makeMap, toRawType, capitalize, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, NOOP, remove } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].resume();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n activeEffectScope = this;\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n activeEffectScope = this.parent;\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope && activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= ~64;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= ~2;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= ~1;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= ~8;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= ~8;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= ~16;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n const dep = computed.dep;\n computed.flags |= 2;\n if (dep.version > 0 && !computed.isSSR && computed.deps && !isDirty(computed)) {\n computed.flags &= ~2;\n return;\n }\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= ~2;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= ~4;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, toReactive);\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toReactive(value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(this, \"filter\", fn, thisArg, (v) => v.map(toReactive), arguments);\n },\n find(fn, thisArg) {\n return apply(this, \"find\", fn, thisArg, toReactive, arguments);\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(this, \"findLast\", fn, thisArg, toReactive, arguments);\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimisation required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", toReactive);\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (result.value) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toReactive(item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n let wrappedFn = fn;\n if (arr !== self) {\n if (!isShallow(self)) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, toReactive(item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n return arr[method](wrappedFn, ...args);\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n return targetIsArray && isIntegerKey(key) ? res : res.value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n return false;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return Reflect.get(target, \"size\", target);\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n if (isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\nfunction ref(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n }\n get value() {\n const val = this._object[this._key];\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(toRaw(this._object), this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\nfunction toRef(source, key, defaultValue) {\n if (isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n const val = source[key];\n return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n watchHandle();\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n oldValue = newValue;\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Set();\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n* @vue/runtime-core v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, traverse, shallowRef, readonly, isReactive, ref, isShallow, shallowReadArray, toReactive, shallowReadonly, track, reactive, shallowReactive, trigger, ReactiveEffect, watch as watch$1, customRef, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, onWatcherCleanup, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, isPromise, isArray, EMPTY_OBJ, NOOP, getGlobalThis, extend, isBuiltInDirective, hasOwn, remove, def, isOn, isReservedProp, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, getEscapedCssVarName, isObject, isRegExp, invokeArrayFns, toHandlerKey, capitalize, camelize, isSymbol, isGloballyAllowed, NO, hyphenate, EMPTY_ARR, toRawType, makeMap, hasChanged, looseToNumber, isModelListener, toNumber } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n if (isWarning) return;\n isWarning = true;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n // eslint-disable-next-line no-restricted-syntax\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n isWarning = false;\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\")) return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\",\n \"COMPONENT_UPDATE\": 15,\n \"15\": \"COMPONENT_UPDATE\",\n \"APP_UNMOUNT_CLEANUP\": 16,\n \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush\",\n [15]: \"component update\",\n [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n if (errorHandler) {\n pauseTracking();\n callWithErrorHandling(errorHandler, null, 10, [\n err,\n exposedInstance,\n errorInfo\n ]);\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else if (throwInProd) {\n throw err;\n } else {\n console.error(err);\n }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!(job.flags & 1)) {\n const jobId = getId(job);\n const lastJob = queue[queue.length - 1];\n if (!lastJob || // fast path when the job id is larger than the tail\n !(job.flags & 2) && jobId >= getId(lastJob)) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(jobId), 0, job);\n }\n job.flags |= 1;\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!currentFlushPromise) {\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (activePostFlushCbs && cb.id === -1) {\n activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n } else if (!(cb.flags & 1)) {\n pendingPostFlushCbs.push(cb);\n cb.flags |= 1;\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.flags & 2) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n if (cb.flags & 4) {\n cb.flags &= ~1;\n }\n cb();\n if (!(cb.flags & 4)) {\n cb.flags &= ~1;\n }\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n const cb = activePostFlushCbs[postFlushIndex];\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n if (cb.flags & 4) {\n cb.flags &= ~1;\n }\n if (!(cb.flags & 8)) cb();\n cb.flags &= ~1;\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && !(job.flags & 8)) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n if (job.flags & 4) {\n job.flags &= ~1;\n }\n callWithErrorHandling(\n job,\n job.i,\n job.i ? 15 : 14\n );\n if (!(job.flags & 4)) {\n job.flags &= ~1;\n }\n }\n }\n } finally {\n for (; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job) {\n job.flags &= ~1;\n }\n }\n flushIndex = -1;\n queue.length = 0;\n flushPostFlushCbs(seen);\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n const count = seen.get(fn) || 0;\n if (count > RECURSION_LIMIT) {\n const instance = fn.i;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n }\n seen.set(fn, count + 1);\n return false;\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n instance.update();\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record) return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n const oldComp = normalizeClassComponent(instance.type);\n let dirtyInstances = hmrDirtyComponents.get(oldComp);\n if (!dirtyInstances) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n }\n dirtyInstances.add(instance);\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n dirtyInstances.add(instance);\n instance.ceReload(newComp.styles);\n dirtyInstances.delete(instance);\n } else if (instance.parent) {\n queueJob(() => {\n isHmrUpdating = true;\n instance.parent.update();\n isHmrUpdating = false;\n dirtyInstances.delete(instance);\n });\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n if (instance.root.ce && instance !== instance.root) {\n instance.root.ce._removeChildStyle(oldComp);\n }\n }\n queuePostFlushCb(() => {\n hmrDirtyComponents.clear();\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n // eslint-disable-next-line no-restricted-syntax\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx) return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getComponentPublicInstance(currentRenderingInstance);\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nconst TeleportEndKey = Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n );\n return null;\n } else {\n const target = select(targetSelector);\n if (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n warn$1(\n `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n );\n }\n return target;\n }\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n warn$1(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n name: \"Teleport\",\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n const {\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n o: { insert, querySelector, createText, createComment }\n } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { shapeFlag, children, dynamicChildren } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n if (n1 == null) {\n const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n const mount = (container2, anchor2) => {\n if (shapeFlag & 16) {\n if (parentComponent && parentComponent.isCE) {\n parentComponent.ce._teleportTarget = container2;\n }\n mountChildren(\n children,\n container2,\n anchor2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountToTarget = () => {\n const target = n2.target = resolveTarget(n2.props, querySelector);\n const targetAnchor = prepareAnchor(target, n2, createText, insert);\n if (target) {\n if (namespace !== \"svg\" && isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (!disabled) {\n mount(target, targetAnchor);\n updateCssVars(n2, false);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled) {\n warn$1(\n \"Invalid Teleport target on mount:\",\n target,\n `(${typeof target})`\n );\n }\n };\n if (disabled) {\n mount(container, mainAnchor);\n updateCssVars(n2, true);\n }\n if (isTeleportDeferred(n2.props)) {\n queuePostRenderEffect(() => {\n mountToTarget();\n n2.el.__isMounted = true;\n }, parentSuspense);\n } else {\n mountToTarget();\n }\n } else {\n if (isTeleportDeferred(n2.props) && !n1.el.__isMounted) {\n queuePostRenderEffect(() => {\n TeleportImpl.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n delete n1.el.__isMounted;\n }, parentSuspense);\n return;\n }\n n2.el = n1.el;\n n2.targetStart = n1.targetStart;\n const mainAnchor = n2.anchor = n1.anchor;\n const target = n2.target = n1.target;\n const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n if (namespace === \"svg\" || isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n currentContainer,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n traverseStaticChildren(n1, n2, true);\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n currentContainer,\n currentAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n false\n );\n }\n if (disabled) {\n if (!wasDisabled) {\n moveTeleport(\n n2,\n container,\n mainAnchor,\n internals,\n 1\n );\n } else {\n if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n n2.props.to = n1.props.to;\n }\n }\n } else {\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = n2.target = resolveTarget(\n n2.props,\n querySelector\n );\n if (nextTarget) {\n moveTeleport(\n n2,\n nextTarget,\n null,\n internals,\n 0\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Invalid Teleport target on update:\",\n target,\n `(${typeof target})`\n );\n }\n } else if (wasDisabled) {\n moveTeleport(\n n2,\n target,\n targetAnchor,\n internals,\n 1\n );\n }\n }\n updateCssVars(n2, disabled);\n }\n },\n remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const {\n shapeFlag,\n children,\n anchor,\n targetStart,\n targetAnchor,\n target,\n props\n } = vnode;\n if (target) {\n hostRemove(targetStart);\n hostRemove(targetAnchor);\n }\n doRemove && hostRemove(anchor);\n if (shapeFlag & 16) {\n const shouldRemove = doRemove || !isTeleportDisabled(props);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(\n child,\n parentComponent,\n parentSuspense,\n shouldRemove,\n !!child.dynamicChildren\n );\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n if (moveType === 0) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2;\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n if (!isReorder || isTeleportDisabled(props)) {\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n move(\n children[i],\n container,\n parentAnchor,\n 2\n );\n }\n }\n }\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n const target = vnode.target = resolveTarget(\n vnode.props,\n querySelector\n );\n if (target) {\n const disabled = isTeleportDisabled(vnode.props);\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16) {\n if (disabled) {\n vnode.anchor = hydrateChildren(\n nextSibling(node),\n vnode,\n parentNode(node),\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n vnode.targetStart = targetNode;\n vnode.targetAnchor = targetNode && nextSibling(targetNode);\n } else {\n vnode.anchor = nextSibling(node);\n let targetAnchor = targetNode;\n while (targetAnchor) {\n if (targetAnchor && targetAnchor.nodeType === 8) {\n if (targetAnchor.data === \"teleport start anchor\") {\n vnode.targetStart = targetAnchor;\n } else if (targetAnchor.data === \"teleport anchor\") {\n vnode.targetAnchor = targetAnchor;\n target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n targetAnchor = nextSibling(targetAnchor);\n }\n if (!vnode.targetAnchor) {\n prepareAnchor(target, vnode, createText, insert);\n }\n hydrateChildren(\n targetNode && nextSibling(targetNode),\n vnode,\n target,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n }\n updateCssVars(vnode, disabled);\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node, anchor;\n if (isDisabled) {\n node = vnode.el;\n anchor = vnode.anchor;\n } else {\n node = vnode.targetStart;\n anchor = vnode.targetAnchor;\n }\n while (node && node !== anchor) {\n if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\nfunction prepareAnchor(target, vnode, createText, insert) {\n const targetStart = vnode.targetStart = createText(\"\");\n const targetAnchor = vnode.targetAnchor = createText(\"\");\n targetStart[TeleportEndKey] = targetAnchor;\n if (target) {\n insert(targetStart, target);\n insert(targetAnchor, target);\n }\n return targetAnchor;\n}\n\nconst leaveCbKey = Symbol(\"_leaveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n const subTree = instance.subTree;\n return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n const child = findNonCommentChild(children);\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid <transition> mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getInnerChild$1(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n let enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance,\n // #11061, ensure enterHooks is fresh after clone\n (hooks) => enterHooks = hooks\n );\n if (innerChild.type !== Comment) {\n setTransitionHooks(innerChild, enterHooks);\n }\n let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) {\n let leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n delete leavingHooks.afterLeave;\n oldInnerChild = void 0;\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n enterHooks.delayedLeave = () => {\n delayedLeave();\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n };\n } else {\n oldInnerChild = void 0;\n }\n } else if (oldInnerChild) {\n oldInnerChild = void 0;\n }\n return child;\n };\n }\n};\nfunction findNonCommentChild(children) {\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \"<transition> can only be used on a single element or component. Use <transition-group> for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\")) break;\n }\n }\n }\n return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1)) done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n const done = el[enterCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = el[leaveCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n const hooks2 = resolveTransitionHooks(\n vnode2,\n props,\n state,\n instance,\n postClone\n );\n if (postClone) postClone(hooks2);\n return hooks2;\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getInnerChild$1(vnode) {\n if (!isKeepAlive(vnode)) {\n if (isTeleport(vnode.type) && vnode.children) {\n return findNonCommentChild(vnode.children);\n }\n return vnode;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n vnode.transition = hooks;\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128) keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8236: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nfunction useId() {\n const i = getCurrentInstance();\n if (i) {\n return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useId() is called when there is no active component instance to be associated with.`\n );\n }\n return \"\";\n}\nfunction markAsyncBoundary(instance) {\n instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nconst knownTemplateRefs = /* @__PURE__ */ new WeakSet();\nfunction useTemplateRef(key) {\n const i = getCurrentInstance();\n const r = shallowRef(null);\n if (i) {\n const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;\n let desc;\n if (!!(process.env.NODE_ENV !== \"production\") && (desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) {\n warn$1(`useTemplateRef('${key}') already exists.`);\n } else {\n Object.defineProperty(refs, key, {\n enumerable: true,\n get: () => r.value,\n set: (val) => r.value = val\n });\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useTemplateRef() is called when there is no active component instance to be associated with.`\n );\n }\n const ret = !!(process.env.NODE_ENV !== \"production\") ? readonly(r) : r;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n knownTemplateRefs.add(ret);\n }\n return ret;\n}\n\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach(\n (r, i) => setRef(\n r,\n oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n parentSuspense,\n vnode,\n isUnmount\n )\n );\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n }\n return;\n }\n const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n warn$1(\n `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n );\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n const setupState = owner.setupState;\n const rawSetupState = toRaw(setupState);\n const canSetSetupRef = setupState === EMPTY_OBJ ? () => false : (key) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {\n warn$1(\n `Template ref \"${key}\" used on a non-ref value. It will not work in the production build.`\n );\n }\n if (knownTemplateRefs.has(rawSetupState[key])) {\n return false;\n }\n }\n return hasOwn(rawSetupState, key);\n };\n if (oldRef != null && oldRef !== ref) {\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (canSetSetupRef(oldRef)) {\n setupState[oldRef] = null;\n }\n } else if (isRef(oldRef)) {\n oldRef.value = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12, [value, refs]);\n } else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : ref.value;\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (canSetSetupRef(ref)) {\n setupState[ref] = refs[ref];\n }\n } else {\n ref.value = [refValue];\n if (rawRef.k) refs[rawRef.k] = ref.value;\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n refs[ref] = value;\n if (canSetSetupRef(ref)) {\n setupState[ref] = value;\n }\n } else if (_isRef) {\n ref.value = value;\n if (rawRef.k) refs[rawRef.k] = value;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n };\n if (value) {\n doSet.id = -1;\n queuePostRenderEffect(doSet, parentSuspense);\n } else {\n doSet();\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n if (hasLoggedMismatchError) {\n return;\n }\n console.error(\"Hydration completed but contains mismatches.\");\n hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n if (container.nodeType !== 1) return void 0;\n if (isSVGContainer(container)) return \"svg\";\n if (isMathMLContainer(container)) return \"mathml\";\n return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n const {\n mt: mountComponent,\n p: patch,\n o: {\n patchProp,\n createText,\n nextSibling,\n parentNode,\n remove,\n insert,\n createComment\n }\n } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n );\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const isFragmentStart = isComment(node) && node.data === \"[\";\n const onMismatch = () => handleMismatch(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n isFragmentStart\n );\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(node, \"__vnode\", vnode, true);\n def(node, \"__vueParentComponent\", parentComponent, true);\n }\n if (patchFlag === -2) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3) {\n if (vnode.children === \"\") {\n insert(vnode.el = createText(\"\"), parentNode(node), node);\n nextNode = node;\n } else {\n nextNode = onMismatch();\n }\n } else {\n if (node.data !== vnode.children) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text mismatch in`,\n node.parentNode,\n `\n - rendered on server: ${JSON.stringify(\n node.data\n )}\n - expected on client: ${JSON.stringify(vnode.children)}`\n );\n logMismatchError();\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (isTemplateNode(node)) {\n nextNode = nextSibling(node);\n replaceNode(\n vnode.el = node.content.firstChild,\n node,\n parentComponent\n );\n } else if (domType !== 8 || isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 || domType === 3) {\n nextNode = node;\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n } else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateFragment(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n break;\n default:\n if (shapeFlag & 1) {\n if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateElement(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n } else if (shapeFlag & 6) {\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n if (isFragmentStart) {\n nextNode = locateClosingAnchor(node);\n } else if (isComment(node) && node.data === \"teleport start\") {\n nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n } else {\n nextNode = nextSibling(node);\n }\n mountComponent(\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n optimized\n );\n if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Fragment);\n subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n } else {\n subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n } else if (shapeFlag & 64) {\n if (domType !== 8) {\n nextNode = onMismatch();\n } else {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateChildren\n );\n }\n } else if (shapeFlag & 128) {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n getContainerType(parentNode(node)),\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateNode\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n warn$1(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;\n const forcePatch = type === \"input\" || type === \"option\";\n if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || patchFlag !== -1) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n let needCallTransitionHooks = false;\n if (isTemplateNode(el)) {\n needCallTransitionHooks = needTransition(\n null,\n // no need check parentSuspense in hydration\n transition\n ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n const content = el.content.firstChild;\n if (needCallTransitionHooks) {\n transition.beforeEnter(content);\n }\n replaceNode(content, el, parentComponent);\n vnode.el = el = content;\n }\n if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(\n el.firstChild,\n vnode,\n el,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n let hasWarned = false;\n while (next) {\n if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n el,\n `\nServer rendered element contains more child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n } else if (shapeFlag & 8) {\n let clientText = vnode.children;\n if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n clientText = clientText.slice(1);\n }\n if (el.textContent !== clientText) {\n if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text content mismatch on`,\n el,\n `\n - rendered on server: ${el.textContent}\n - expected on client: ${vnode.children}`\n );\n logMismatchError();\n }\n el.textContent = vnode.children;\n }\n }\n if (props) {\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || !optimized || patchFlag & (16 | 32)) {\n const isCustomElement = el.tagName.includes(\"-\");\n for (const key in props) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n // as it could have mutated the DOM in any possible way\n !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n logMismatchError();\n }\n if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n key[0] === \".\" || isCustomElement) {\n patchProp(el, key, null, props[key], void 0, parentComponent);\n }\n }\n } else if (props.onClick) {\n patchProp(\n el,\n \"onClick\",\n null,\n props.onClick,\n void 0,\n parentComponent\n );\n } else if (patchFlag & 4 && isReactive(props.style)) {\n for (const key in props.style) props.style[key];\n }\n }\n let vnodeHooks;\n if (vnodeHooks = props && props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasWarned = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n const isText = vnode.type === Text;\n if (node) {\n if (isText && !optimized) {\n if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n insert(\n createText(\n node.data.slice(vnode.children.length)\n ),\n container,\n nextSibling(node)\n );\n node.data = vnode.children;\n }\n }\n node = hydrateNode(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n } else if (isText && !vnode.children) {\n insert(vnode.el = createText(\"\"), container);\n } else {\n if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n container,\n `\nServer rendered element contains fewer child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n patch(\n null,\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(\n nextSibling(node),\n vnode,\n container,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && isComment(next) && next.data === \"]\") {\n return nextSibling(vnode.anchor = next);\n } else {\n logMismatchError();\n insert(vnode.anchor = createComment(`]`), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration node mismatch:\n- rendered on server:`,\n node,\n node.nodeType === 3 ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n `\n- expected on client:`,\n vnode.type\n );\n logMismatchError();\n }\n vnode.el = null;\n if (isFragment) {\n const end = locateClosingAnchor(node);\n while (true) {\n const next2 = nextSibling(node);\n if (next2 && next2 !== end) {\n remove(next2);\n } else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(\n null,\n vnode,\n container,\n next,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n if (parentComponent) {\n parentComponent.vnode.el = vnode.el;\n updateHOCHostEl(parentComponent, vnode.el);\n }\n return next;\n };\n const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === open) match++;\n if (node.data === close) {\n if (match === 0) {\n return nextSibling(node);\n } else {\n match--;\n }\n }\n }\n }\n return node;\n };\n const replaceNode = (newNode, oldNode, parentComponent) => {\n const parentNode2 = oldNode.parentNode;\n if (parentNode2) {\n parentNode2.replaceChild(newNode, oldNode);\n }\n let parent = parentComponent;\n while (parent) {\n if (parent.vnode.el === oldNode) {\n parent.vnode.el = parent.subTree.el = newNode;\n }\n parent = parent.parent;\n }\n };\n const isTemplateNode = (node) => {\n return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n };\n return [hydrate, hydrateNode];\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n let mismatchType;\n let mismatchKey;\n let actual;\n let expected;\n if (key === \"class\") {\n actual = el.getAttribute(\"class\");\n expected = normalizeClass(clientValue);\n if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n mismatchType = 2 /* CLASS */;\n mismatchKey = `class`;\n }\n } else if (key === \"style\") {\n actual = el.getAttribute(\"style\") || \"\";\n expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n const actualMap = toStyleMap(actual);\n const expectedMap = toStyleMap(expected);\n if (vnode.dirs) {\n for (const { dir, value } of vnode.dirs) {\n if (dir.name === \"show\" && !value) {\n expectedMap.set(\"display\", \"none\");\n }\n }\n }\n if (instance) {\n resolveCssVars(instance, vnode, expectedMap);\n }\n if (!isMapEqual(actualMap, expectedMap)) {\n mismatchType = 3 /* STYLE */;\n mismatchKey = \"style\";\n }\n } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n if (isBooleanAttr(key)) {\n actual = el.hasAttribute(key);\n expected = includeBooleanAttr(clientValue);\n } else if (clientValue == null) {\n actual = el.hasAttribute(key);\n expected = false;\n } else {\n if (el.hasAttribute(key)) {\n actual = el.getAttribute(key);\n } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n actual = el.value;\n } else {\n actual = false;\n }\n expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n }\n if (actual !== expected) {\n mismatchType = 4 /* ATTRIBUTE */;\n mismatchKey = key;\n }\n }\n if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {\n const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;\n const postSegment = `\n - rendered on server: ${format(actual)}\n - expected on client: ${format(expected)}\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch.`;\n {\n warn$1(preSegment, el, postSegment);\n }\n return true;\n }\n return false;\n}\nfunction toClassSet(str) {\n return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const s of a) {\n if (!b.has(s)) {\n return false;\n }\n }\n return true;\n}\nfunction toStyleMap(str) {\n const styleMap = /* @__PURE__ */ new Map();\n for (const item of str.split(\";\")) {\n let [key, value] = item.split(\":\");\n key = key.trim();\n value = value && value.trim();\n if (key && value) {\n styleMap.set(key, value);\n }\n }\n return styleMap;\n}\nfunction isMapEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (value !== b.get(key)) {\n return false;\n }\n }\n return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n const root = instance.subTree;\n if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n const cssVars = instance.getCssVars();\n for (const key in cssVars) {\n expectedMap.set(\n `--${getEscapedCssVarName(key, false)}`,\n String(cssVars[key])\n );\n }\n }\n if (vnode === root && instance.parent) {\n resolveCssVars(instance.parent, instance.vnode, expectedMap);\n }\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n [0 /* TEXT */]: \"text\",\n [1 /* CHILDREN */]: \"children\",\n [2 /* CLASS */]: \"class\",\n [3 /* STYLE */]: \"style\",\n [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n while (el && !el.hasAttribute(allowMismatchAttr)) {\n el = el.parentElement;\n }\n }\n const allowedAttr = el && el.getAttribute(allowMismatchAttr);\n if (allowedAttr == null) {\n return false;\n } else if (allowedAttr === \"\") {\n return true;\n } else {\n const list = allowedAttr.split(\",\");\n if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n return true;\n }\n return allowedAttr.split(\",\").includes(MismatchTypeString[allowedType]);\n }\n}\n\nconst requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n const id = requestIdleCallback(hydrate, { timeout });\n return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { innerHeight, innerWidth } = window;\n return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n const ob = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n ob.disconnect();\n hydrate();\n break;\n }\n }, opts);\n forEach((el) => {\n if (!(el instanceof Element)) return;\n if (elementIsVisibleInViewport(el)) {\n hydrate();\n ob.disconnect();\n return false;\n }\n ob.observe(el);\n });\n return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n if (query) {\n const mql = matchMedia(query);\n if (mql.matches) {\n hydrate();\n } else {\n mql.addEventListener(\"change\", hydrate, { once: true });\n return () => mql.removeEventListener(\"change\", hydrate);\n }\n }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n if (isString(interactions)) interactions = [interactions];\n let hasHydrated = false;\n const doHydrate = (e) => {\n if (!hasHydrated) {\n hasHydrated = true;\n teardown();\n hydrate();\n e.target.dispatchEvent(new e.constructor(e.type, e));\n }\n };\n const teardown = () => {\n forEach((el) => {\n for (const i of interactions) {\n el.removeEventListener(i, doHydrate);\n }\n });\n };\n forEach((el) => {\n for (const i of interactions) {\n el.addEventListener(i, doHydrate, { once: true });\n }\n });\n return teardown;\n};\nfunction forEachElement(node, cb) {\n if (isComment(node) && node.data === \"[\") {\n let depth = 1;\n let next = node.nextSibling;\n while (next) {\n if (next.nodeType === 1) {\n const result = cb(next);\n if (result === false) {\n break;\n }\n } else if (isComment(next)) {\n if (next.data === \"]\") {\n if (--depth === 0) break;\n } else if (next.data === \"[\") {\n depth++;\n }\n }\n next = next.nextSibling;\n }\n } else {\n cb(node);\n }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n hydrate: hydrateStrategy,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n __asyncHydrate(el, instance, hydrate) {\n const doHydrate = hydrateStrategy ? () => {\n const teardown = hydrateStrategy(\n hydrate,\n (cb) => forEachElement(el, cb)\n );\n if (teardown) {\n (instance.bum || (instance.bum = [])).push(teardown);\n }\n } : hydrate;\n if (resolvedComp) {\n doHydrate();\n } else {\n load().then(() => !instance.isUnmounted && doHydrate());\n }\n },\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n markAsyncBoundary(instance);\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.update();\n }\n }).catch((err) => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createVNode(loadingComponent);\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n invalidateMount(instance2.m);\n invalidateMount(instance2.a);\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(vnode.type);\n if (name && !filter(name)) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (cached && (!current || !isSameVNodeType(cached, current))) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n if (isSuspense(instance.subTree.type)) {\n queuePostRenderEffect(() => {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }, instance.subTree.suspense);\n } else {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return current = null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n if (vnode.type === Comment) {\n current = null;\n return vnode;\n }\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n vnode.shapeFlag &= ~256;\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n pattern.lastIndex = 0;\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= ~256;\n vnode.shapeFlag &= ~512;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n injectHook(lifecycle, (...args) => hook(...args), target);\n }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n const sourceIsArray = isArray(source);\n if (sourceIsArray || isString(source)) {\n const sourceIsReactiveArray = sourceIsArray && isReactive(source);\n let needsWrap = false;\n if (sourceIsReactiveArray) {\n needsWrap = !isShallow(source);\n source = shallowReadArray(source);\n }\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(\n needsWrap ? toReactive(source[i]) : source[i],\n i,\n void 0,\n cached && cached[i]\n );\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && !Number.isInteger(source)) {\n warn$1(`The v-for range expect an integer value but got ${source}.`);\n }\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res) res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n if (name !== \"default\") props.name = name;\n return openBlock(), createBlock(\n Fragment,\n null,\n [createVNode(\"slot\", props, fallback && fallback())],\n 64\n );\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key;\n const rendered = createBlock(\n Fragment,\n {\n key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n (!validSlotContent && fallback ? \"_fb\" : \"\")\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i) return null;\n if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $host: (i) => i.ce,\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n let normalizedProps;\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (\n // only cache other properties when instance has declared (thus stable)\n // props\n (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)\n ) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n return false;\n } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n data[key] = value;\n return true;\n } else if (hasOwn(instance.props, key)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n return false;\n }\n if (key[0] === \"$\" && key.slice(1) in instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Attempting to mutate public property \"${key}\". Properties starting with $ are reserved and readonly.`\n );\n return false;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && key in instance.appContext.config.globalProperties) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n value\n });\n } else {\n ctx[key] = value;\n }\n }\n return true;\n },\n has({\n _: { data, setupState, accessCache, ctx, appContext, propsOptions }\n }, key) {\n let normalizedProps;\n return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key);\n },\n defineProperty(target, key, descriptor) {\n if (descriptor.get != null) {\n target._.accessCache[key] = 0;\n } else if (hasOwn(descriptor, \"value\")) {\n this.set(target, key, descriptor.value, null);\n }\n return Reflect.defineProperty(target, key, descriptor);\n }\n};\nif (!!(process.env.NODE_ENV !== \"production\") && true) {\n PublicInstanceProxyHandlers.ownKeys = (target) => {\n warn$1(\n `Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`\n );\n return Reflect.ownKeys(target);\n };\n}\nconst RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ extend({}, PublicInstanceProxyHandlers, {\n get(target, key) {\n if (key === Symbol.unscopables) {\n return;\n }\n return PublicInstanceProxyHandlers.get(target, key, target);\n },\n has(_, key) {\n const has = key[0] !== \"_\" && !isGloballyAllowed(key);\n if (!!(process.env.NODE_ENV !== \"production\") && !has && PublicInstanceProxyHandlers.has(_, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} should not start with _ which is a reserved prefix for Vue internals.`\n );\n }\n return has;\n }\n});\nfunction createDevRenderContext(instance) {\n const target = {};\n Object.defineProperty(target, `_`, {\n configurable: true,\n enumerable: false,\n get: () => instance\n });\n Object.keys(publicPropertiesMap).forEach((key) => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get: () => publicPropertiesMap[key](instance),\n // intercepted by the proxy so no need for implementation,\n // but needed to prevent set errors\n set: NOOP\n });\n });\n return target;\n}\nfunction exposePropsOnRenderContext(instance) {\n const {\n ctx,\n propsOptions: [propsOptions]\n } = instance;\n if (propsOptions) {\n Object.keys(propsOptions).forEach((key) => {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => instance.props[key],\n set: NOOP\n });\n });\n }\n}\nfunction exposeSetupStateOnRenderContext(instance) {\n const { ctx, setupState } = instance;\n Object.keys(toRaw(setupState)).forEach((key) => {\n if (!setupState.__isScriptSetup) {\n if (isReservedPrefix(key[0])) {\n warn$1(\n `setup() return property ${JSON.stringify(\n key\n )} should not start with \"$\" or \"_\" which are reserved prefixes for Vue internals.`\n );\n return;\n }\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => setupState[key],\n set: NOOP\n });\n }\n });\n}\n\nconst warnRuntimeUsage = (method) => warn$1(\n `${method}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`\n);\nfunction defineProps() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineProps`);\n }\n return null;\n}\nfunction defineEmits() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineEmits`);\n }\n return null;\n}\nfunction defineExpose(exposed) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineExpose`);\n }\n}\nfunction defineOptions(options) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineOptions`);\n }\n}\nfunction defineSlots() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineSlots`);\n }\n return null;\n}\nfunction defineModel() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(\"defineModel\");\n }\n}\nfunction withDefaults(props, defaults) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`withDefaults`);\n }\n return null;\n}\nfunction useSlots() {\n return getContext().slots;\n}\nfunction useAttrs() {\n return getContext().attrs;\n}\nfunction getContext() {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`useContext() called without active instance.`);\n }\n return i.setupContext || (i.setupContext = createSetupContext(i));\n}\nfunction normalizePropsOrEmits(props) {\n return isArray(props) ? props.reduce(\n (normalized, p) => (normalized[p] = null, normalized),\n {}\n ) : props;\n}\nfunction mergeDefaults(raw, defaults) {\n const props = normalizePropsOrEmits(raw);\n for (const key in defaults) {\n if (key.startsWith(\"__skip\")) continue;\n let opt = props[key];\n if (opt) {\n if (isArray(opt) || isFunction(opt)) {\n opt = props[key] = { type: opt, default: defaults[key] };\n } else {\n opt.default = defaults[key];\n }\n } else if (opt === null) {\n opt = props[key] = { default: defaults[key] };\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`props default key \"${key}\" has no corresponding declaration.`);\n }\n if (opt && defaults[`__skip_${key}`]) {\n opt.skipFactory = true;\n }\n }\n return props;\n}\nfunction mergeModels(a, b) {\n if (!a || !b) return a || b;\n if (isArray(a) && isArray(b)) return a.concat(b);\n return extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));\n}\nfunction createPropsRestProxy(props, excludedKeys) {\n const ret = {};\n for (const key in props) {\n if (!excludedKeys.includes(key)) {\n Object.defineProperty(ret, key, {\n enumerable: true,\n get: () => props[key]\n });\n }\n }\n return ret;\n}\nfunction withAsyncContext(getAwaitable) {\n const ctx = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !ctx) {\n warn$1(\n `withAsyncContext called without active current instance. This is likely a bug.`\n );\n }\n let awaitable = getAwaitable();\n unsetCurrentInstance();\n if (isPromise(awaitable)) {\n awaitable = awaitable.catch((e) => {\n setCurrentInstance(ctx);\n throw e;\n });\n }\n return [awaitable, () => setCurrentInstance(ctx)];\n}\n\nfunction createDuplicateChecker() {\n const cache = /* @__PURE__ */ Object.create(null);\n return (type, key) => {\n if (cache[key]) {\n warn$1(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n } else {\n cache[key] = type;\n }\n };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n const options = resolveMergedOptions(instance);\n const publicThis = instance.proxy;\n const ctx = instance.ctx;\n shouldCacheAccess = false;\n if (options.beforeCreate) {\n callHook(options.beforeCreate, instance, \"bc\");\n }\n const {\n // state\n data: dataOptions,\n computed: computedOptions,\n methods,\n watch: watchOptions,\n provide: provideOptions,\n inject: injectOptions,\n // lifecycle\n created,\n beforeMount,\n mounted,\n beforeUpdate,\n updated,\n activated,\n deactivated,\n beforeDestroy,\n beforeUnmount,\n destroyed,\n unmounted,\n render,\n renderTracked,\n renderTriggered,\n errorCaptured,\n serverPrefetch,\n // public API\n expose,\n inheritAttrs,\n // assets\n components,\n directives,\n filters\n } = options;\n const checkDuplicateProperties = !!(process.env.NODE_ENV !== \"production\") ? createDuplicateChecker() : null;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const [propsOptions] = instance.propsOptions;\n if (propsOptions) {\n for (const key in propsOptions) {\n checkDuplicateProperties(\"Props\" /* PROPS */, key);\n }\n }\n }\n if (injectOptions) {\n resolveInjections(injectOptions, ctx, checkDuplicateProperties);\n }\n if (methods) {\n for (const key in methods) {\n const methodHandler = methods[key];\n if (isFunction(methodHandler)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n Object.defineProperty(ctx, key, {\n value: methodHandler.bind(publicThis),\n configurable: true,\n enumerable: true,\n writable: true\n });\n } else {\n ctx[key] = methodHandler.bind(publicThis);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Methods\" /* METHODS */, key);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. Did you reference the function correctly?`\n );\n }\n }\n }\n if (dataOptions) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(dataOptions)) {\n warn$1(\n `The data option must be a function. Plain object usage is no longer supported.`\n );\n }\n const data = dataOptions.call(publicThis, publicThis);\n if (!!(process.env.NODE_ENV !== \"production\") && isPromise(data)) {\n warn$1(\n `data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`\n );\n }\n if (!isObject(data)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`data() should return an object.`);\n } else {\n instance.data = reactive(data);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (const key in data) {\n checkDuplicateProperties(\"Data\" /* DATA */, key);\n if (!isReservedPrefix(key[0])) {\n Object.defineProperty(ctx, key, {\n configurable: true,\n enumerable: true,\n get: () => data[key],\n set: NOOP\n });\n }\n }\n }\n }\n }\n shouldCacheAccess = true;\n if (computedOptions) {\n for (const key in computedOptions) {\n const opt = computedOptions[key];\n const get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;\n if (!!(process.env.NODE_ENV !== \"production\") && get === NOOP) {\n warn$1(`Computed property \"${key}\" has no getter.`);\n }\n const set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : !!(process.env.NODE_ENV !== \"production\") ? () => {\n warn$1(\n `Write operation failed: computed property \"${key}\" is readonly.`\n );\n } : NOOP;\n const c = computed({\n get,\n set\n });\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => c.value,\n set: (v) => c.value = v\n });\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Computed\" /* COMPUTED */, key);\n }\n }\n }\n if (watchOptions) {\n for (const key in watchOptions) {\n createWatcher(watchOptions[key], ctx, publicThis, key);\n }\n }\n if (provideOptions) {\n const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;\n Reflect.ownKeys(provides).forEach((key) => {\n provide(key, provides[key]);\n });\n }\n if (created) {\n callHook(created, instance, \"c\");\n }\n function registerLifecycleHook(register, hook) {\n if (isArray(hook)) {\n hook.forEach((_hook) => register(_hook.bind(publicThis)));\n } else if (hook) {\n register(hook.bind(publicThis));\n }\n }\n registerLifecycleHook(onBeforeMount, beforeMount);\n registerLifecycleHook(onMounted, mounted);\n registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n registerLifecycleHook(onUpdated, updated);\n registerLifecycleHook(onActivated, activated);\n registerLifecycleHook(onDeactivated, deactivated);\n registerLifecycleHook(onErrorCaptured, errorCaptured);\n registerLifecycleHook(onRenderTracked, renderTracked);\n registerLifecycleHook(onRenderTriggered, renderTriggered);\n registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n registerLifecycleHook(onUnmounted, unmounted);\n registerLifecycleHook(onServerPrefetch, serverPrefetch);\n if (isArray(expose)) {\n if (expose.length) {\n const exposed = instance.exposed || (instance.exposed = {});\n expose.forEach((key) => {\n Object.defineProperty(exposed, key, {\n get: () => publicThis[key],\n set: (val) => publicThis[key] = val\n });\n });\n } else if (!instance.exposed) {\n instance.exposed = {};\n }\n }\n if (render && instance.render === NOOP) {\n instance.render = render;\n }\n if (inheritAttrs != null) {\n instance.inheritAttrs = inheritAttrs;\n }\n if (components) instance.components = components;\n if (directives) instance.directives = directives;\n if (serverPrefetch) {\n markAsyncBoundary(instance);\n }\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {\n if (isArray(injectOptions)) {\n injectOptions = normalizeInject(injectOptions);\n }\n for (const key in injectOptions) {\n const opt = injectOptions[key];\n let injected;\n if (isObject(opt)) {\n if (\"default\" in opt) {\n injected = inject(\n opt.from || key,\n opt.default,\n true\n );\n } else {\n injected = inject(opt.from || key);\n }\n } else {\n injected = inject(opt);\n }\n if (isRef(injected)) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => injected.value,\n set: (v) => injected.value = v\n });\n } else {\n ctx[key] = injected;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Inject\" /* INJECT */, key);\n }\n }\n}\nfunction callHook(hook, instance, type) {\n callWithAsyncErrorHandling(\n isArray(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy),\n instance,\n type\n );\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n let getter = key.includes(\".\") ? createPathGetter(publicThis, key) : () => publicThis[key];\n if (isString(raw)) {\n const handler = ctx[raw];\n if (isFunction(handler)) {\n {\n watch(getter, handler);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw}\"`, handler);\n }\n } else if (isFunction(raw)) {\n {\n watch(getter, raw.bind(publicThis));\n }\n } else if (isObject(raw)) {\n if (isArray(raw)) {\n raw.forEach((r) => createWatcher(r, ctx, publicThis, key));\n } else {\n const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];\n if (isFunction(handler)) {\n watch(getter, handler, raw);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n }\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch option: \"${key}\"`, raw);\n }\n}\nfunction resolveMergedOptions(instance) {\n const base = instance.type;\n const { mixins, extends: extendsOptions } = base;\n const {\n mixins: globalMixins,\n optionsCache: cache,\n config: { optionMergeStrategies }\n } = instance.appContext;\n const cached = cache.get(base);\n let resolved;\n if (cached) {\n resolved = cached;\n } else if (!globalMixins.length && !mixins && !extendsOptions) {\n {\n resolved = base;\n }\n } else {\n resolved = {};\n if (globalMixins.length) {\n globalMixins.forEach(\n (m) => mergeOptions(resolved, m, optionMergeStrategies, true)\n );\n }\n mergeOptions(resolved, base, optionMergeStrategies);\n }\n if (isObject(base)) {\n cache.set(base, resolved);\n }\n return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n const { mixins, extends: extendsOptions } = from;\n if (extendsOptions) {\n mergeOptions(to, extendsOptions, strats, true);\n }\n if (mixins) {\n mixins.forEach(\n (m) => mergeOptions(to, m, strats, true)\n );\n }\n for (const key in from) {\n if (asMixin && key === \"expose\") {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `\"expose\" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`\n );\n } else {\n const strat = internalOptionMergeStrats[key] || strats && strats[key];\n to[key] = strat ? strat(to[key], from[key]) : from[key];\n }\n }\n return to;\n}\nconst internalOptionMergeStrats = {\n data: mergeDataFn,\n props: mergeEmitsOrPropsOptions,\n emits: mergeEmitsOrPropsOptions,\n // objects\n methods: mergeObjectOptions,\n computed: mergeObjectOptions,\n // lifecycle\n beforeCreate: mergeAsArray,\n created: mergeAsArray,\n beforeMount: mergeAsArray,\n mounted: mergeAsArray,\n beforeUpdate: mergeAsArray,\n updated: mergeAsArray,\n beforeDestroy: mergeAsArray,\n beforeUnmount: mergeAsArray,\n destroyed: mergeAsArray,\n unmounted: mergeAsArray,\n activated: mergeAsArray,\n deactivated: mergeAsArray,\n errorCaptured: mergeAsArray,\n serverPrefetch: mergeAsArray,\n // assets\n components: mergeObjectOptions,\n directives: mergeObjectOptions,\n // watch\n watch: mergeWatchOptions,\n // provide / inject\n provide: mergeDataFn,\n inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n if (!from) {\n return to;\n }\n if (!to) {\n return from;\n }\n return function mergedDataFn() {\n return (extend)(\n isFunction(to) ? to.call(this, this) : to,\n isFunction(from) ? from.call(this, this) : from\n );\n };\n}\nfunction mergeInject(to, from) {\n return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n if (isArray(raw)) {\n const res = {};\n for (let i = 0; i < raw.length; i++) {\n res[raw[i]] = raw[i];\n }\n return res;\n }\n return raw;\n}\nfunction mergeAsArray(to, from) {\n return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from;\n}\nfunction mergeEmitsOrPropsOptions(to, from) {\n if (to) {\n if (isArray(to) && isArray(from)) {\n return [.../* @__PURE__ */ new Set([...to, ...from])];\n }\n return extend(\n /* @__PURE__ */ Object.create(null),\n normalizePropsOrEmits(to),\n normalizePropsOrEmits(from != null ? from : {})\n );\n } else {\n return from;\n }\n}\nfunction mergeWatchOptions(to, from) {\n if (!to) return from;\n if (!from) return to;\n const merged = extend(/* @__PURE__ */ Object.create(null), to);\n for (const key in from) {\n merged[key] = mergeAsArray(to[key], from[key]);\n }\n return merged;\n}\n\nfunction createAppContext() {\n return {\n app: null,\n config: {\n isNativeTag: NO,\n performance: false,\n globalProperties: {},\n optionMergeStrategies: {},\n errorHandler: void 0,\n warnHandler: void 0,\n compilerOptions: {}\n },\n mixins: [],\n components: {},\n directives: {},\n provides: /* @__PURE__ */ Object.create(null),\n optionsCache: /* @__PURE__ */ new WeakMap(),\n propsCache: /* @__PURE__ */ new WeakMap(),\n emitsCache: /* @__PURE__ */ new WeakMap()\n };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n return function createApp(rootComponent, rootProps = null) {\n if (!isFunction(rootComponent)) {\n rootComponent = extend({}, rootComponent);\n }\n if (rootProps != null && !isObject(rootProps)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`root props passed to app.mount() must be an object.`);\n rootProps = null;\n }\n const context = createAppContext();\n const installedPlugins = /* @__PURE__ */ new WeakSet();\n const pluginCleanupFns = [];\n let isMounted = false;\n const app = context.app = {\n _uid: uid$1++,\n _component: rootComponent,\n _props: rootProps,\n _container: null,\n _context: context,\n _instance: null,\n version,\n get config() {\n return context.config;\n },\n set config(v) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `app.config cannot be replaced. Modify individual options instead.`\n );\n }\n },\n use(plugin, ...options) {\n if (installedPlugins.has(plugin)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Plugin has already been applied to target app.`);\n } else if (plugin && isFunction(plugin.install)) {\n installedPlugins.add(plugin);\n plugin.install(app, ...options);\n } else if (isFunction(plugin)) {\n installedPlugins.add(plugin);\n plugin(app, ...options);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `A plugin must either be a function or an object with an \"install\" function.`\n );\n }\n return app;\n },\n mixin(mixin) {\n if (__VUE_OPTIONS_API__) {\n if (!context.mixins.includes(mixin)) {\n context.mixins.push(mixin);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Mixin has already been applied to target app\" + (mixin.name ? `: ${mixin.name}` : \"\")\n );\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Mixins are only available in builds supporting Options API\");\n }\n return app;\n },\n component(name, component) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateComponentName(name, context.config);\n }\n if (!component) {\n return context.components[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.components[name]) {\n warn$1(`Component \"${name}\" has already been registered in target app.`);\n }\n context.components[name] = component;\n return app;\n },\n directive(name, directive) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateDirectiveName(name);\n }\n if (!directive) {\n return context.directives[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.directives[name]) {\n warn$1(`Directive \"${name}\" has already been registered in target app.`);\n }\n context.directives[name] = directive;\n return app;\n },\n mount(rootContainer, isHydrate, namespace) {\n if (!isMounted) {\n if (!!(process.env.NODE_ENV !== \"production\") && rootContainer.__vue_app__) {\n warn$1(\n `There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling \\`app.unmount()\\` first.`\n );\n }\n const vnode = app._ceVNode || createVNode(rootComponent, rootProps);\n vnode.appContext = context;\n if (namespace === true) {\n namespace = \"svg\";\n } else if (namespace === false) {\n namespace = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n context.reload = () => {\n render(\n cloneVNode(vnode),\n rootContainer,\n namespace\n );\n };\n }\n if (isHydrate && hydrate) {\n hydrate(vnode, rootContainer);\n } else {\n render(vnode, rootContainer, namespace);\n }\n isMounted = true;\n app._container = rootContainer;\n rootContainer.__vue_app__ = app;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = vnode.component;\n devtoolsInitApp(app, version);\n }\n return getComponentPublicInstance(vnode.component);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. \\`const createMyApp = () => createApp(App)\\``\n );\n }\n },\n onUnmount(cleanupFn) {\n if (!!(process.env.NODE_ENV !== \"production\") && typeof cleanupFn !== \"function\") {\n warn$1(\n `Expected function as first argument to app.onUnmount(), but got ${typeof cleanupFn}`\n );\n }\n pluginCleanupFns.push(cleanupFn);\n },\n unmount() {\n if (isMounted) {\n callWithAsyncErrorHandling(\n pluginCleanupFns,\n app._instance,\n 16\n );\n render(null, app._container);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = null;\n devtoolsUnmountApp(app);\n }\n delete app._container.__vue_app__;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Cannot unmount an app that is not mounted.`);\n }\n },\n provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\") && key in context.provides) {\n warn$1(\n `App already provides property with key \"${String(key)}\". It will be overwritten with the new value.`\n );\n }\n context.provides[key] = value;\n return app;\n },\n runWithContext(fn) {\n const lastApp = currentApp;\n currentApp = app;\n try {\n return fn();\n } finally {\n currentApp = lastApp;\n }\n }\n };\n return app;\n };\n}\nlet currentApp = null;\n\nfunction provide(key, value) {\n if (!currentInstance) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`provide() can only be used inside setup().`);\n }\n } else {\n let provides = currentInstance.provides;\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n provides[key] = value;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n const instance = currentInstance || currentRenderingInstance;\n if (instance || currentApp) {\n const provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\n if (provides && key in provides) {\n return provides[key];\n } else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`injection \"${String(key)}\" not found.`);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`inject() can only be used inside setup() or functional components.`);\n }\n}\nfunction hasInjectionContext() {\n return !!(currentInstance || currentRenderingInstance || currentApp);\n}\n\nconst internalObjectProto = {};\nconst createInternalObject = () => Object.create(internalObjectProto);\nconst isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n const props = {};\n const attrs = createInternalObject();\n instance.propsDefaults = /* @__PURE__ */ Object.create(null);\n setFullProps(instance, rawProps, props, attrs);\n for (const key in instance.propsOptions[0]) {\n if (!(key in props)) {\n props[key] = void 0;\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n if (isStateful) {\n instance.props = isSSR ? props : shallowReactive(props);\n } else {\n if (!instance.type.props) {\n instance.props = attrs;\n } else {\n instance.props = props;\n }\n }\n instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n while (instance) {\n if (instance.type.__hmrId) return true;\n instance = instance.parent;\n }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n const {\n props,\n attrs,\n vnode: { patchFlag }\n } = instance;\n const rawCurrentProps = toRaw(props);\n const [options] = instance.propsOptions;\n let hasAttrsChanged = false;\n if (\n // always force full diff in dev\n // - #1942 if hmr is enabled with sfc component\n // - vite#872 non-sfc component used by sfc component\n !(!!(process.env.NODE_ENV !== \"production\") && isInHmrContext(instance)) && (optimized || patchFlag > 0) && !(patchFlag & 16)\n ) {\n if (patchFlag & 8) {\n const propsToUpdate = instance.vnode.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n let key = propsToUpdate[i];\n if (isEmitListener(instance.emitsOptions, key)) {\n continue;\n }\n const value = rawProps[key];\n if (options) {\n if (hasOwn(attrs, key)) {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n } else {\n const camelizedKey = camelize(key);\n props[camelizedKey] = resolvePropValue(\n options,\n rawCurrentProps,\n camelizedKey,\n value,\n instance,\n false\n );\n }\n } else {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n } else {\n if (setFullProps(instance, rawProps, props, attrs)) {\n hasAttrsChanged = true;\n }\n let kebabKey;\n for (const key in rawCurrentProps) {\n if (!rawProps || // for camelCase\n !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case\n // and converted to camelCase (#955)\n ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {\n if (options) {\n if (rawPrevProps && // for camelCase\n (rawPrevProps[key] !== void 0 || // for kebab-case\n rawPrevProps[kebabKey] !== void 0)) {\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n void 0,\n instance,\n true\n );\n }\n } else {\n delete props[key];\n }\n }\n }\n if (attrs !== rawCurrentProps) {\n for (const key in attrs) {\n if (!rawProps || !hasOwn(rawProps, key) && true) {\n delete attrs[key];\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (hasAttrsChanged) {\n trigger(instance.attrs, \"set\", \"\");\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n const [options, needCastKeys] = instance.propsOptions;\n let hasAttrsChanged = false;\n let rawCastValues;\n if (rawProps) {\n for (let key in rawProps) {\n if (isReservedProp(key)) {\n continue;\n }\n const value = rawProps[key];\n let camelKey;\n if (options && hasOwn(options, camelKey = camelize(key))) {\n if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n props[camelKey] = value;\n } else {\n (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n }\n } else if (!isEmitListener(instance.emitsOptions, key)) {\n if (!(key in attrs) || value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (needCastKeys) {\n const rawCurrentProps = toRaw(props);\n const castValues = rawCastValues || EMPTY_OBJ;\n for (let i = 0; i < needCastKeys.length; i++) {\n const key = needCastKeys[i];\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n castValues[key],\n instance,\n !hasOwn(castValues, key)\n );\n }\n }\n return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n const opt = options[key];\n if (opt != null) {\n const hasDefault = hasOwn(opt, \"default\");\n if (hasDefault && value === void 0) {\n const defaultValue = opt.default;\n if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {\n const { propsDefaults } = instance;\n if (key in propsDefaults) {\n value = propsDefaults[key];\n } else {\n const reset = setCurrentInstance(instance);\n value = propsDefaults[key] = defaultValue.call(\n null,\n props\n );\n reset();\n }\n } else {\n value = defaultValue;\n }\n if (instance.ce) {\n instance.ce._setProp(key, value);\n }\n }\n if (opt[0 /* shouldCast */]) {\n if (isAbsent && !hasDefault) {\n value = false;\n } else if (opt[1 /* shouldCastTrue */] && (value === \"\" || value === hyphenate(key))) {\n value = true;\n }\n }\n }\n return value;\n}\nconst mixinPropsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinPropsCache : appContext.propsCache;\n const cached = cache.get(comp);\n if (cached) {\n return cached;\n }\n const raw = comp.props;\n const normalized = {};\n const needCastKeys = [];\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendProps = (raw2) => {\n hasExtends = true;\n const [props, keys] = normalizePropsOptions(raw2, appContext, true);\n extend(normalized, props);\n if (keys) needCastKeys.push(...keys);\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendProps);\n }\n if (comp.extends) {\n extendProps(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendProps);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, EMPTY_ARR);\n }\n return EMPTY_ARR;\n }\n if (isArray(raw)) {\n for (let i = 0; i < raw.length; i++) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isString(raw[i])) {\n warn$1(`props must be strings when using array syntax.`, raw[i]);\n }\n const normalizedKey = camelize(raw[i]);\n if (validatePropName(normalizedKey)) {\n normalized[normalizedKey] = EMPTY_OBJ;\n }\n }\n } else if (raw) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(raw)) {\n warn$1(`invalid props options`, raw);\n }\n for (const key in raw) {\n const normalizedKey = camelize(key);\n if (validatePropName(normalizedKey)) {\n const opt = raw[key];\n const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : extend({}, opt);\n const propType = prop.type;\n let shouldCast = false;\n let shouldCastTrue = true;\n if (isArray(propType)) {\n for (let index = 0; index < propType.length; ++index) {\n const type = propType[index];\n const typeName = isFunction(type) && type.name;\n if (typeName === \"Boolean\") {\n shouldCast = true;\n break;\n } else if (typeName === \"String\") {\n shouldCastTrue = false;\n }\n }\n } else {\n shouldCast = isFunction(propType) && propType.name === \"Boolean\";\n }\n prop[0 /* shouldCast */] = shouldCast;\n prop[1 /* shouldCastTrue */] = shouldCastTrue;\n if (shouldCast || hasOwn(prop, \"default\")) {\n needCastKeys.push(normalizedKey);\n }\n }\n }\n }\n const res = [normalized, needCastKeys];\n if (isObject(comp)) {\n cache.set(comp, res);\n }\n return res;\n}\nfunction validatePropName(key) {\n if (key[0] !== \"$\" && !isReservedProp(key)) {\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid prop name: \"${key}\" is a reserved property.`);\n }\n return false;\n}\nfunction getType(ctor) {\n if (ctor === null) {\n return \"null\";\n }\n if (typeof ctor === \"function\") {\n return ctor.name || \"\";\n } else if (typeof ctor === \"object\") {\n const name = ctor.constructor && ctor.constructor.name;\n return name || \"\";\n }\n return \"\";\n}\nfunction validateProps(rawProps, props, instance) {\n const resolvedValues = toRaw(props);\n const options = instance.propsOptions[0];\n const camelizePropsKey = Object.keys(rawProps).map((key) => camelize(key));\n for (const key in options) {\n let opt = options[key];\n if (opt == null) continue;\n validateProp(\n key,\n resolvedValues[key],\n opt,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(resolvedValues) : resolvedValues,\n !camelizePropsKey.includes(key)\n );\n }\n}\nfunction validateProp(name, value, prop, props, isAbsent) {\n const { type, required, validator, skipCheck } = prop;\n if (required && isAbsent) {\n warn$1('Missing required prop: \"' + name + '\"');\n return;\n }\n if (value == null && !required) {\n return;\n }\n if (type != null && type !== true && !skipCheck) {\n let isValid = false;\n const types = isArray(type) ? type : [type];\n const expectedTypes = [];\n for (let i = 0; i < types.length && !isValid; i++) {\n const { valid, expectedType } = assertType(value, types[i]);\n expectedTypes.push(expectedType || \"\");\n isValid = valid;\n }\n if (!isValid) {\n warn$1(getInvalidTypeMessage(name, value, expectedTypes));\n return;\n }\n }\n if (validator && !validator(value, props)) {\n warn$1('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n }\n}\nconst isSimpleType = /* @__PURE__ */ makeMap(\n \"String,Number,Boolean,Function,Symbol,BigInt\"\n);\nfunction assertType(value, type) {\n let valid;\n const expectedType = getType(type);\n if (expectedType === \"null\") {\n valid = value === null;\n } else if (isSimpleType(expectedType)) {\n const t = typeof value;\n valid = t === expectedType.toLowerCase();\n if (!valid && t === \"object\") {\n valid = value instanceof type;\n }\n } else if (expectedType === \"Object\") {\n valid = isObject(value);\n } else if (expectedType === \"Array\") {\n valid = isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid,\n expectedType\n };\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n if (expectedTypes.length === 0) {\n return `Prop type [] for prop \"${name}\" won't match anything. Did you mean to use type Array instead?`;\n }\n let message = `Invalid prop: type check failed for prop \"${name}\". Expected ${expectedTypes.map(capitalize).join(\" | \")}`;\n const expectedType = expectedTypes[0];\n const receivedType = toRawType(value);\n const expectedValue = styleValue(value, expectedType);\n const receivedValue = styleValue(value, receivedType);\n if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) {\n message += ` with value ${expectedValue}`;\n }\n message += `, got ${receivedType} `;\n if (isExplicable(receivedType)) {\n message += `with value ${receivedValue}.`;\n }\n return message;\n}\nfunction styleValue(value, type) {\n if (type === \"String\") {\n return `\"${value}\"`;\n } else if (type === \"Number\") {\n return `${Number(value)}`;\n } else {\n return `${value}`;\n }\n}\nfunction isExplicable(type) {\n const explicitTypes = [\"string\", \"number\", \"boolean\"];\n return explicitTypes.some((elem) => type.toLowerCase() === elem);\n}\nfunction isBoolean(...args) {\n return args.some((elem) => elem.toLowerCase() === \"boolean\");\n}\n\nconst isInternalKey = (key) => key[0] === \"_\" || key === \"$stable\";\nconst normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n if (rawSlot._n) {\n return rawSlot;\n }\n const normalized = withCtx((...args) => {\n if (!!(process.env.NODE_ENV !== \"production\") && currentInstance && (!ctx || ctx.root === currentInstance.root)) {\n warn$1(\n `Slot \"${key}\" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`\n );\n }\n return normalizeSlotValue(rawSlot(...args));\n }, ctx);\n normalized._c = false;\n return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n const ctx = rawSlots._ctx;\n for (const key in rawSlots) {\n if (isInternalKey(key)) continue;\n const value = rawSlots[key];\n if (isFunction(value)) {\n slots[key] = normalizeSlot(key, value, ctx);\n } else if (value != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n warn$1(\n `Non-function value encountered for slot \"${key}\". Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(value);\n slots[key] = () => normalized;\n }\n }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n if (!!(process.env.NODE_ENV !== \"production\") && !isKeepAlive(instance.vnode) && true) {\n warn$1(\n `Non-function value encountered for default slot. Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(children);\n instance.slots.default = () => normalized;\n};\nconst assignSlots = (slots, children, optimized) => {\n for (const key in children) {\n if (optimized || key !== \"_\") {\n slots[key] = children[key];\n }\n }\n};\nconst initSlots = (instance, children, optimized) => {\n const slots = instance.slots = createInternalObject();\n if (instance.vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n assignSlots(slots, children, optimized);\n if (optimized) {\n def(slots, \"_\", type, true);\n }\n } else {\n normalizeObjectSlots(children, slots);\n }\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n }\n};\nconst updateSlots = (instance, children, optimized) => {\n const { vnode, slots } = instance;\n let needDeletionCheck = true;\n let deletionComparisonTarget = EMPTY_OBJ;\n if (vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n assignSlots(slots, children, optimized);\n trigger(instance, \"set\", \"$slots\");\n } else if (optimized && type === 1) {\n needDeletionCheck = false;\n } else {\n assignSlots(slots, children, optimized);\n }\n } else {\n needDeletionCheck = !children.$stable;\n normalizeObjectSlots(children, slots);\n }\n deletionComparisonTarget = children;\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n deletionComparisonTarget = { default: 1 };\n }\n if (needDeletionCheck) {\n for (const key in slots) {\n if (!isInternalKey(key) && deletionComparisonTarget[key] == null) {\n delete slots[key];\n }\n }\n }\n};\n\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n perf.mark(`vue-${type}-${instance.uid}`);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction endMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n const startTag = `vue-${type}-${instance.uid}`;\n const endTag = startTag + `:end`;\n perf.mark(endTag);\n perf.measure(\n `<${formatComponentName(instance, instance.type)}> ${type}`,\n startTag,\n endTag\n );\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction isSupported() {\n if (supported !== void 0) {\n return supported;\n }\n if (typeof window !== \"undefined\" && window.performance) {\n supported = true;\n perf = window.performance;\n } else {\n supported = false;\n }\n return supported;\n}\n\nfunction initFeatureFlags() {\n const needWarn = [];\n if (typeof __VUE_OPTIONS_API__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_OPTIONS_API__`);\n getGlobalThis().__VUE_OPTIONS_API__ = true;\n }\n if (typeof __VUE_PROD_DEVTOOLS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_DEVTOOLS__`);\n getGlobalThis().__VUE_PROD_DEVTOOLS__ = false;\n }\n if (typeof __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`);\n getGlobalThis().__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = false;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && needWarn.length) {\n const multi = needWarn.length > 1;\n console.warn(\n `Feature flag${multi ? `s` : ``} ${needWarn.join(\", \")} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle.\n\nFor more details, see https://link.vuejs.org/feature-flags.`\n );\n }\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense ;\nfunction createRenderer(options) {\n return baseCreateRenderer(options);\n}\nfunction createHydrationRenderer(options) {\n return baseCreateRenderer(options, createHydrationFunctions);\n}\nfunction baseCreateRenderer(options, createHydrationFns) {\n {\n initFeatureFlags();\n }\n const target = getGlobalThis();\n target.__VUE__ = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n setDevtoolsHook$1(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n }\n const {\n insert: hostInsert,\n remove: hostRemove,\n patchProp: hostPatchProp,\n createElement: hostCreateElement,\n createText: hostCreateText,\n createComment: hostCreateComment,\n setText: hostSetText,\n setElementText: hostSetElementText,\n parentNode: hostParentNode,\n nextSibling: hostNextSibling,\n setScopeId: hostSetScopeId = NOOP,\n insertStaticContent: hostInsertStaticContent\n } = options;\n const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating ? false : !!n2.dynamicChildren) => {\n if (n1 === n2) {\n return;\n }\n if (n1 && !isSameVNodeType(n1, n2)) {\n anchor = getNextHostNode(n1);\n unmount(n1, parentComponent, parentSuspense, true);\n n1 = null;\n }\n if (n2.patchFlag === -2) {\n optimized = false;\n n2.dynamicChildren = null;\n }\n const { type, ref, shapeFlag } = n2;\n switch (type) {\n case Text:\n processText(n1, n2, container, anchor);\n break;\n case Comment:\n processCommentNode(n1, n2, container, anchor);\n break;\n case Static:\n if (n1 == null) {\n mountStaticNode(n2, container, anchor, namespace);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n patchStaticNode(n1, n2, container, namespace);\n }\n break;\n case Fragment:\n processFragment(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n break;\n default:\n if (shapeFlag & 1) {\n processElement(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 6) {\n processComponent(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 64) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (shapeFlag & 128) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid VNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null && parentComponent) {\n setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n }\n };\n const processText = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateText(n2.children),\n container,\n anchor\n );\n } else {\n const el = n2.el = n1.el;\n if (n2.children !== n1.children) {\n hostSetText(el, n2.children);\n }\n }\n };\n const processCommentNode = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateComment(n2.children || \"\"),\n container,\n anchor\n );\n } else {\n n2.el = n1.el;\n }\n };\n const mountStaticNode = (n2, container, anchor, namespace) => {\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace,\n n2.el,\n n2.anchor\n );\n };\n const patchStaticNode = (n1, n2, container, namespace) => {\n if (n2.children !== n1.children) {\n const anchor = hostNextSibling(n1.anchor);\n removeStaticNode(n1);\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace\n );\n } else {\n n2.el = n1.el;\n n2.anchor = n1.anchor;\n }\n };\n const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostInsert(el, container, nextSibling);\n el = next;\n }\n hostInsert(anchor, container, nextSibling);\n };\n const removeStaticNode = ({ el, anchor }) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostRemove(el);\n el = next;\n }\n hostRemove(anchor);\n };\n const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n if (n2.type === \"svg\") {\n namespace = \"svg\";\n } else if (n2.type === \"math\") {\n namespace = \"mathml\";\n }\n if (n1 == null) {\n mountElement(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n patchElement(\n n1,\n n2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let el;\n let vnodeHook;\n const { props, shapeFlag, transition, dirs } = vnode;\n el = vnode.el = hostCreateElement(\n vnode.type,\n namespace,\n props && props.is,\n props\n );\n if (shapeFlag & 8) {\n hostSetElementText(el, vnode.children);\n } else if (shapeFlag & 16) {\n mountChildren(\n vnode.children,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(vnode, namespace),\n slotScopeIds,\n optimized\n );\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n if (props) {\n for (const key in props) {\n if (key !== \"value\" && !isReservedProp(key)) {\n hostPatchProp(el, key, null, props[key], namespace, parentComponent);\n }\n }\n if (\"value\" in props) {\n hostPatchProp(el, \"value\", null, props.value, namespace);\n }\n if (vnodeHook = props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(el, \"__vnode\", vnode, true);\n def(el, \"__vueParentComponent\", parentComponent, true);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n const needCallTransitionHooks = needTransition(parentSuspense, transition);\n if (needCallTransitionHooks) {\n transition.beforeEnter(el);\n }\n hostInsert(el, container, anchor);\n if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n };\n const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n if (scopeId) {\n hostSetScopeId(el, scopeId);\n }\n if (slotScopeIds) {\n for (let i = 0; i < slotScopeIds.length; i++) {\n hostSetScopeId(el, slotScopeIds[i]);\n }\n }\n if (parentComponent) {\n let subTree = parentComponent.subTree;\n if (!!(process.env.NODE_ENV !== \"production\") && subTree.patchFlag > 0 && subTree.patchFlag & 2048) {\n subTree = filterSingleRoot(subTree.children) || subTree;\n }\n if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) {\n const parentVNode = parentComponent.vnode;\n setScopeId(\n el,\n parentVNode,\n parentVNode.scopeId,\n parentVNode.slotScopeIds,\n parentComponent.parent\n );\n }\n }\n };\n const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => {\n for (let i = start; i < children.length; i++) {\n const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);\n patch(\n null,\n child,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const el = n2.el = n1.el;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n el.__vnode = n2;\n }\n let { patchFlag, dynamicChildren, dirs } = n2;\n patchFlag |= n1.patchFlag & 16;\n const oldProps = n1.props || EMPTY_OBJ;\n const newProps = n2.props || EMPTY_OBJ;\n let vnodeHook;\n parentComponent && toggleRecurse(parentComponent, false);\n if (vnodeHook = newProps.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n }\n if (dirs) {\n invokeDirectiveHook(n2, n1, parentComponent, \"beforeUpdate\");\n }\n parentComponent && toggleRecurse(parentComponent, true);\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {\n hostSetElementText(el, \"\");\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n el,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n }\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds,\n false\n );\n }\n if (patchFlag > 0) {\n if (patchFlag & 16) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n } else {\n if (patchFlag & 2) {\n if (oldProps.class !== newProps.class) {\n hostPatchProp(el, \"class\", null, newProps.class, namespace);\n }\n }\n if (patchFlag & 4) {\n hostPatchProp(el, \"style\", oldProps.style, newProps.style, namespace);\n }\n if (patchFlag & 8) {\n const propsToUpdate = n2.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n const key = propsToUpdate[i];\n const prev = oldProps[key];\n const next = newProps[key];\n if (next !== prev || key === \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n }\n }\n if (patchFlag & 1) {\n if (n1.children !== n2.children) {\n hostSetElementText(el, n2.children);\n }\n }\n } else if (!optimized && dynamicChildren == null) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n }\n if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n dirs && invokeDirectiveHook(n2, n1, parentComponent, \"updated\");\n }, parentSuspense);\n }\n };\n const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => {\n for (let i = 0; i < newChildren.length; i++) {\n const oldVNode = oldChildren[i];\n const newVNode = newChildren[i];\n const container = (\n // oldVNode may be an errored async setup() component inside Suspense\n // which will not have a mounted element\n oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent\n // of the Fragment itself so it can move its children.\n (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement\n // which also requires the correct parent container\n !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.\n oldVNode.shapeFlag & (6 | 64)) ? hostParentNode(oldVNode.el) : (\n // In other cases, the parent container is not actually used so we\n // just pass the block element here to avoid a DOM parentNode call.\n fallbackContainer\n )\n );\n patch(\n oldVNode,\n newVNode,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n true\n );\n }\n };\n const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {\n if (oldProps !== newProps) {\n if (oldProps !== EMPTY_OBJ) {\n for (const key in oldProps) {\n if (!isReservedProp(key) && !(key in newProps)) {\n hostPatchProp(\n el,\n key,\n oldProps[key],\n null,\n namespace,\n parentComponent\n );\n }\n }\n }\n for (const key in newProps) {\n if (isReservedProp(key)) continue;\n const next = newProps[key];\n const prev = oldProps[key];\n if (next !== prev && key !== \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n if (\"value\" in newProps) {\n hostPatchProp(el, \"value\", oldProps.value, newProps.value, namespace);\n }\n }\n };\n const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(\"\");\n const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(\"\");\n let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && // #5523 dev root fragment may inherit directives\n (isHmrUpdating || patchFlag & 2048)) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n if (n1 == null) {\n hostInsert(fragmentStartAnchor, container, anchor);\n hostInsert(fragmentEndAnchor, container, anchor);\n mountChildren(\n // #10007\n // such fragment like `<></>` will be compiled into\n // a fragment which doesn't have a children.\n // In this case fallback to an empty array\n n2.children || [],\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result\n // of renderSlot() with no valid children\n n1.dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n container,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n } else if (\n // #2080 if the stable fragment has a key, it's a <template v-for> that may\n // get moved around. Make sure all root level vnodes inherit el.\n // #2134 or if it's a component root, it may also get moved around\n // as the component is being moved.\n n2.key != null || parentComponent && n2 === parentComponent.subTree\n ) {\n traverseStaticChildren(\n n1,\n n2,\n true\n /* shallow */\n );\n }\n } else {\n patchChildren(\n n1,\n n2,\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n };\n const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n n2.slotScopeIds = slotScopeIds;\n if (n1 == null) {\n if (n2.shapeFlag & 512) {\n parentComponent.ctx.activate(\n n2,\n container,\n anchor,\n namespace,\n optimized\n );\n } else {\n mountComponent(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n optimized\n );\n }\n } else {\n updateComponent(n1, n2, optimized);\n }\n };\n const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => {\n const instance = (initialVNode.component = createComponentInstance(\n initialVNode,\n parentComponent,\n parentSuspense\n ));\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n registerHMR(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(initialVNode);\n startMeasure(instance, `mount`);\n }\n if (isKeepAlive(initialVNode)) {\n instance.ctx.renderer = internals;\n }\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `init`);\n }\n setupComponent(instance, false, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `init`);\n }\n }\n if (instance.asyncDep) {\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) initialVNode.el = null;\n parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);\n if (!initialVNode.el) {\n const placeholder = instance.subTree = createVNode(Comment);\n processCommentNode(null, placeholder, container, anchor);\n }\n } else {\n setupRenderEffect(\n instance,\n initialVNode,\n container,\n anchor,\n parentSuspense,\n namespace,\n optimized\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n endMeasure(instance, `mount`);\n }\n };\n const updateComponent = (n1, n2, optimized) => {\n const instance = n2.component = n1.component;\n if (shouldUpdateComponent(n1, n2, optimized)) {\n if (instance.asyncDep && !instance.asyncResolved) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(n2);\n }\n updateComponentPreRender(instance, n2, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n return;\n } else {\n instance.next = n2;\n instance.update();\n }\n } else {\n n2.el = n1.el;\n instance.vnode = n2;\n }\n };\n const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => {\n const componentUpdateFn = () => {\n if (!instance.isMounted) {\n let vnodeHook;\n const { el, props } = initialVNode;\n const { bm, m, parent, root, type } = instance;\n const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n toggleRecurse(instance, false);\n if (bm) {\n invokeArrayFns(bm);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {\n invokeVNodeHook(vnodeHook, parent, initialVNode);\n }\n toggleRecurse(instance, true);\n if (el && hydrateNode) {\n const hydrateSubTree = () => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `hydrate`);\n }\n hydrateNode(\n el,\n instance.subTree,\n instance,\n parentSuspense,\n null\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `hydrate`);\n }\n };\n if (isAsyncWrapperVNode && type.__asyncHydrate) {\n type.__asyncHydrate(\n el,\n instance,\n hydrateSubTree\n );\n } else {\n hydrateSubTree();\n }\n } else {\n if (root.ce) {\n root.ce._injectChildStyle(type);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const subTree = instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n null,\n subTree,\n container,\n anchor,\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n initialVNode.el = subTree.el;\n }\n if (m) {\n queuePostRenderEffect(m, parentSuspense);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {\n const scopedInitialVNode = initialVNode;\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),\n parentSuspense\n );\n }\n if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {\n instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n }\n instance.isMounted = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance);\n }\n initialVNode = container = anchor = null;\n } else {\n let { next, bu, u, parent, vnode } = instance;\n {\n const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);\n if (nonHydratedAsyncRoot) {\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n }\n nonHydratedAsyncRoot.asyncDep.then(() => {\n if (!instance.isUnmounted) {\n componentUpdateFn();\n }\n });\n return;\n }\n }\n let originNext = next;\n let vnodeHook;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(next || instance.vnode);\n }\n toggleRecurse(instance, false);\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n } else {\n next = vnode;\n }\n if (bu) {\n invokeArrayFns(bu);\n }\n if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parent, next, vnode);\n }\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const nextTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n const prevTree = instance.subTree;\n instance.subTree = nextTree;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n prevTree,\n nextTree,\n // parent may have changed if it's in a teleport\n hostParentNode(prevTree.el),\n // anchor may have changed if it's in a fragment\n getNextHostNode(prevTree),\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n next.el = nextTree.el;\n if (originNext === null) {\n updateHOCHostEl(instance, nextTree.el);\n }\n if (u) {\n queuePostRenderEffect(u, parentSuspense);\n }\n if (vnodeHook = next.props && next.props.onVnodeUpdated) {\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, next, vnode),\n parentSuspense\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n }\n };\n instance.scope.on();\n const effect = instance.effect = new ReactiveEffect(componentUpdateFn);\n instance.scope.off();\n const update = instance.update = effect.run.bind(effect);\n const job = instance.job = effect.runIfDirty.bind(effect);\n job.i = instance;\n job.id = instance.uid;\n effect.scheduler = () => queueJob(job);\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = instance.rtc ? (e) => invokeArrayFns(instance.rtc, e) : void 0;\n effect.onTrigger = instance.rtg ? (e) => invokeArrayFns(instance.rtg, e) : void 0;\n }\n update();\n };\n const updateComponentPreRender = (instance, nextVNode, optimized) => {\n nextVNode.component = instance;\n const prevProps = instance.vnode.props;\n instance.vnode = nextVNode;\n instance.next = null;\n updateProps(instance, nextVNode.props, prevProps, optimized);\n updateSlots(instance, nextVNode.children, optimized);\n pauseTracking();\n flushPreFlushCbs(instance);\n resetTracking();\n };\n const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => {\n const c1 = n1 && n1.children;\n const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n const c2 = n2.children;\n const { patchFlag, shapeFlag } = n2;\n if (patchFlag > 0) {\n if (patchFlag & 128) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n } else if (patchFlag & 256) {\n patchUnkeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n }\n }\n if (shapeFlag & 8) {\n if (prevShapeFlag & 16) {\n unmountChildren(c1, parentComponent, parentSuspense);\n }\n if (c2 !== c1) {\n hostSetElementText(container, c2);\n }\n } else {\n if (prevShapeFlag & 16) {\n if (shapeFlag & 16) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n unmountChildren(c1, parentComponent, parentSuspense, true);\n }\n } else {\n if (prevShapeFlag & 8) {\n hostSetElementText(container, \"\");\n }\n if (shapeFlag & 16) {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n }\n };\n const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n c1 = c1 || EMPTY_ARR;\n c2 = c2 || EMPTY_ARR;\n const oldLength = c1.length;\n const newLength = c2.length;\n const commonLength = Math.min(oldLength, newLength);\n let i;\n for (i = 0; i < commonLength; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n patch(\n c1[i],\n nextChild,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n if (oldLength > newLength) {\n unmountChildren(\n c1,\n parentComponent,\n parentSuspense,\n true,\n false,\n commonLength\n );\n } else {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n commonLength\n );\n }\n };\n const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let i = 0;\n const l2 = c2.length;\n let e1 = c1.length - 1;\n let e2 = l2 - 1;\n while (i <= e1 && i <= e2) {\n const n1 = c1[i];\n const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n i++;\n }\n while (i <= e1 && i <= e2) {\n const n1 = c1[e1];\n const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n e1--;\n e2--;\n }\n if (i > e1) {\n if (i <= e2) {\n const nextPos = e2 + 1;\n const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n while (i <= e2) {\n patch(\n null,\n c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n i++;\n }\n }\n } else if (i > e2) {\n while (i <= e1) {\n unmount(c1[i], parentComponent, parentSuspense, true);\n i++;\n }\n } else {\n const s1 = i;\n const s2 = i;\n const keyToNewIndexMap = /* @__PURE__ */ new Map();\n for (i = s2; i <= e2; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (nextChild.key != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && keyToNewIndexMap.has(nextChild.key)) {\n warn$1(\n `Duplicate keys found during update:`,\n JSON.stringify(nextChild.key),\n `Make sure keys are unique.`\n );\n }\n keyToNewIndexMap.set(nextChild.key, i);\n }\n }\n let j;\n let patched = 0;\n const toBePatched = e2 - s2 + 1;\n let moved = false;\n let maxNewIndexSoFar = 0;\n const newIndexToOldIndexMap = new Array(toBePatched);\n for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0;\n for (i = s1; i <= e1; i++) {\n const prevChild = c1[i];\n if (patched >= toBePatched) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n continue;\n }\n let newIndex;\n if (prevChild.key != null) {\n newIndex = keyToNewIndexMap.get(prevChild.key);\n } else {\n for (j = s2; j <= e2; j++) {\n if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {\n newIndex = j;\n break;\n }\n }\n }\n if (newIndex === void 0) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n } else {\n newIndexToOldIndexMap[newIndex - s2] = i + 1;\n if (newIndex >= maxNewIndexSoFar) {\n maxNewIndexSoFar = newIndex;\n } else {\n moved = true;\n }\n patch(\n prevChild,\n c2[newIndex],\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n patched++;\n }\n }\n const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;\n j = increasingNewIndexSequence.length - 1;\n for (i = toBePatched - 1; i >= 0; i--) {\n const nextIndex = s2 + i;\n const nextChild = c2[nextIndex];\n const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor;\n if (newIndexToOldIndexMap[i] === 0) {\n patch(\n null,\n nextChild,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (moved) {\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\n move(nextChild, container, anchor, 2);\n } else {\n j--;\n }\n }\n }\n }\n };\n const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n const { el, type, transition, children, shapeFlag } = vnode;\n if (shapeFlag & 6) {\n move(vnode.component.subTree, container, anchor, moveType);\n return;\n }\n if (shapeFlag & 128) {\n vnode.suspense.move(container, anchor, moveType);\n return;\n }\n if (shapeFlag & 64) {\n type.move(vnode, container, anchor, internals);\n return;\n }\n if (type === Fragment) {\n hostInsert(el, container, anchor);\n for (let i = 0; i < children.length; i++) {\n move(children[i], container, anchor, moveType);\n }\n hostInsert(vnode.anchor, container, anchor);\n return;\n }\n if (type === Static) {\n moveStaticNode(vnode, container, anchor);\n return;\n }\n const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;\n if (needTransition2) {\n if (moveType === 0) {\n transition.beforeEnter(el);\n hostInsert(el, container, anchor);\n queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n } else {\n const { leave, delayLeave, afterLeave } = transition;\n const remove2 = () => hostInsert(el, container, anchor);\n const performLeave = () => {\n leave(el, () => {\n remove2();\n afterLeave && afterLeave();\n });\n };\n if (delayLeave) {\n delayLeave(el, remove2, performLeave);\n } else {\n performLeave();\n }\n }\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n const {\n type,\n props,\n ref,\n children,\n dynamicChildren,\n shapeFlag,\n patchFlag,\n dirs,\n cacheIndex\n } = vnode;\n if (patchFlag === -2) {\n optimized = false;\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode, true);\n }\n if (cacheIndex != null) {\n parentComponent.renderCache[cacheIndex] = void 0;\n }\n if (shapeFlag & 256) {\n parentComponent.ctx.deactivate(vnode);\n return;\n }\n const shouldInvokeDirs = shapeFlag & 1 && dirs;\n const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n let vnodeHook;\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n if (shapeFlag & 6) {\n unmountComponent(vnode.component, parentSuspense, doRemove);\n } else {\n if (shapeFlag & 128) {\n vnode.suspense.unmount(parentSuspense, doRemove);\n return;\n }\n if (shouldInvokeDirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeUnmount\");\n }\n if (shapeFlag & 64) {\n vnode.type.remove(\n vnode,\n parentComponent,\n parentSuspense,\n internals,\n doRemove\n );\n } else if (dynamicChildren && // #5154\n // when v-once is used inside a block, setBlockTracking(-1) marks the\n // parent block with hasOnce: true\n // so that it doesn't take the fast path during unmount - otherwise\n // components nested in v-once are never unmounted.\n !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments\n (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {\n unmountChildren(\n dynamicChildren,\n parentComponent,\n parentSuspense,\n false,\n true\n );\n } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {\n unmountChildren(children, parentComponent, parentSuspense);\n }\n if (doRemove) {\n remove(vnode);\n }\n }\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, \"unmounted\");\n }, parentSuspense);\n }\n };\n const remove = (vnode) => {\n const { type, el, anchor, transition } = vnode;\n if (type === Fragment) {\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.patchFlag > 0 && vnode.patchFlag & 2048 && transition && !transition.persisted) {\n vnode.children.forEach((child) => {\n if (child.type === Comment) {\n hostRemove(child.el);\n } else {\n remove(child);\n }\n });\n } else {\n removeFragment(el, anchor);\n }\n return;\n }\n if (type === Static) {\n removeStaticNode(vnode);\n return;\n }\n const performRemove = () => {\n hostRemove(el);\n if (transition && !transition.persisted && transition.afterLeave) {\n transition.afterLeave();\n }\n };\n if (vnode.shapeFlag & 1 && transition && !transition.persisted) {\n const { leave, delayLeave } = transition;\n const performLeave = () => leave(el, performRemove);\n if (delayLeave) {\n delayLeave(vnode.el, performRemove, performLeave);\n } else {\n performLeave();\n }\n } else {\n performRemove();\n }\n };\n const removeFragment = (cur, end) => {\n let next;\n while (cur !== end) {\n next = hostNextSibling(cur);\n hostRemove(cur);\n cur = next;\n }\n hostRemove(end);\n };\n const unmountComponent = (instance, parentSuspense, doRemove) => {\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n unregisterHMR(instance);\n }\n const { bum, scope, job, subTree, um, m, a } = instance;\n invalidateMount(m);\n invalidateMount(a);\n if (bum) {\n invokeArrayFns(bum);\n }\n scope.stop();\n if (job) {\n job.flags |= 8;\n unmount(subTree, instance, parentSuspense, doRemove);\n }\n if (um) {\n queuePostRenderEffect(um, parentSuspense);\n }\n queuePostRenderEffect(() => {\n instance.isUnmounted = true;\n }, parentSuspense);\n if (parentSuspense && parentSuspense.pendingBranch && !parentSuspense.isUnmounted && instance.asyncDep && !instance.asyncResolved && instance.suspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0) {\n parentSuspense.resolve();\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentRemoved(instance);\n }\n };\n const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n for (let i = start; i < children.length; i++) {\n unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n }\n };\n const getNextHostNode = (vnode) => {\n if (vnode.shapeFlag & 6) {\n return getNextHostNode(vnode.component.subTree);\n }\n if (vnode.shapeFlag & 128) {\n return vnode.suspense.next();\n }\n const el = hostNextSibling(vnode.anchor || vnode.el);\n const teleportEnd = el && el[TeleportEndKey];\n return teleportEnd ? hostNextSibling(teleportEnd) : el;\n };\n let isFlushing = false;\n const render = (vnode, container, namespace) => {\n if (vnode == null) {\n if (container._vnode) {\n unmount(container._vnode, null, null, true);\n }\n } else {\n patch(\n container._vnode || null,\n vnode,\n container,\n null,\n null,\n null,\n namespace\n );\n }\n container._vnode = vnode;\n if (!isFlushing) {\n isFlushing = true;\n flushPreFlushCbs();\n flushPostFlushCbs();\n isFlushing = false;\n }\n };\n const internals = {\n p: patch,\n um: unmount,\n m: move,\n r: remove,\n mt: mountComponent,\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n n: getNextHostNode,\n o: options\n };\n let hydrate;\n let hydrateNode;\n if (createHydrationFns) {\n [hydrate, hydrateNode] = createHydrationFns(\n internals\n );\n }\n return {\n render,\n hydrate,\n createApp: createAppAPI(render, hydrate)\n };\n}\nfunction resolveChildrenNamespace({ type, props }, currentNamespace) {\n return currentNamespace === \"svg\" && type === \"foreignObject\" || currentNamespace === \"mathml\" && type === \"annotation-xml\" && props && props.encoding && props.encoding.includes(\"html\") ? void 0 : currentNamespace;\n}\nfunction toggleRecurse({ effect, job }, allowed) {\n if (allowed) {\n effect.flags |= 32;\n job.flags |= 4;\n } else {\n effect.flags &= ~32;\n job.flags &= ~4;\n }\n}\nfunction needTransition(parentSuspense, transition) {\n return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\n}\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n const ch1 = n1.children;\n const ch2 = n2.children;\n if (isArray(ch1) && isArray(ch2)) {\n for (let i = 0; i < ch1.length; i++) {\n const c1 = ch1[i];\n let c2 = ch2[i];\n if (c2.shapeFlag & 1 && !c2.dynamicChildren) {\n if (c2.patchFlag <= 0 || c2.patchFlag === 32) {\n c2 = ch2[i] = cloneIfMounted(ch2[i]);\n c2.el = c1.el;\n }\n if (!shallow && c2.patchFlag !== -2)\n traverseStaticChildren(c1, c2);\n }\n if (c2.type === Text) {\n c2.el = c1.el;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && c2.type === Comment && !c2.el) {\n c2.el = c1.el;\n }\n }\n }\n}\nfunction getSequence(arr) {\n const p = arr.slice();\n const result = [0];\n let i, j, u, v, c;\n const len = arr.length;\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI !== 0) {\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n u = 0;\n v = result.length - 1;\n while (u < v) {\n c = u + v >> 1;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n }\n u = result.length;\n v = result[u - 1];\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n return result;\n}\nfunction locateNonHydratedAsyncRoot(instance) {\n const subComponent = instance.subTree.component;\n if (subComponent) {\n if (subComponent.asyncDep && !subComponent.asyncResolved) {\n return subComponent;\n } else {\n return locateNonHydratedAsyncRoot(subComponent);\n }\n }\n}\nfunction invalidateMount(hooks) {\n if (hooks) {\n for (let i = 0; i < hooks.length; i++)\n hooks[i].flags |= 8;\n }\n}\n\nconst ssrContextKey = Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n );\n }\n return ctx;\n }\n};\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn$1(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, flush, once } = options;\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn$1(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn$1(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (once !== void 0) {\n warn$1(\n `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const baseWatchOptions = extend({}, options);\n if (!!(process.env.NODE_ENV !== \"production\")) baseWatchOptions.onWarn = warn$1;\n const runsImmediately = cb && immediate || !cb && flush !== \"post\";\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n if (flush === \"sync\") {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n } else if (!runsImmediately) {\n const watchStopHandle = () => {\n };\n watchStopHandle.stop = NOOP;\n watchStopHandle.resume = NOOP;\n watchStopHandle.pause = NOOP;\n return watchStopHandle;\n }\n }\n const instance = currentInstance;\n baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);\n let isPre = false;\n if (flush === \"post\") {\n baseWatchOptions.scheduler = (job) => {\n queuePostRenderEffect(job, instance && instance.suspense);\n };\n } else if (flush !== \"sync\") {\n isPre = true;\n baseWatchOptions.scheduler = (job, isFirstRun) => {\n if (isFirstRun) {\n job();\n } else {\n queueJob(job);\n }\n };\n }\n baseWatchOptions.augmentJob = (job) => {\n if (cb) {\n job.flags |= 4;\n }\n if (isPre) {\n job.flags |= 2;\n if (instance) {\n job.id = instance.uid;\n job.i = instance;\n }\n }\n };\n const watchHandle = watch$1(source, cb, baseWatchOptions);\n if (isInSSRComponentSetup) {\n if (ssrCleanup) {\n ssrCleanup.push(watchHandle);\n } else if (runsImmediately) {\n watchHandle();\n }\n }\n return watchHandle;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const reset = setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n reset();\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\n\nfunction useModel(props, name, options = EMPTY_OBJ) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`useModel() called without active instance.`);\n return ref();\n }\n const camelizedName = camelize(name);\n if (!!(process.env.NODE_ENV !== \"production\") && !i.propsOptions[0][camelizedName]) {\n warn$1(`useModel() called with prop \"${name}\" which is not declared.`);\n return ref();\n }\n const hyphenatedName = hyphenate(name);\n const modifiers = getModelModifiers(props, camelizedName);\n const res = customRef((track, trigger) => {\n let localValue;\n let prevSetValue = EMPTY_OBJ;\n let prevEmittedValue;\n watchSyncEffect(() => {\n const propValue = props[camelizedName];\n if (hasChanged(localValue, propValue)) {\n localValue = propValue;\n trigger();\n }\n });\n return {\n get() {\n track();\n return options.get ? options.get(localValue) : localValue;\n },\n set(value) {\n const emittedValue = options.set ? options.set(value) : value;\n if (!hasChanged(emittedValue, localValue) && !(prevSetValue !== EMPTY_OBJ && hasChanged(value, prevSetValue))) {\n return;\n }\n const rawProps = i.vnode.props;\n if (!(rawProps && // check if parent has passed v-model\n (name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps))) {\n localValue = value;\n trigger();\n }\n i.emit(`update:${name}`, emittedValue);\n if (hasChanged(value, emittedValue) && hasChanged(value, prevSetValue) && !hasChanged(emittedValue, prevEmittedValue)) {\n trigger();\n }\n prevSetValue = value;\n prevEmittedValue = emittedValue;\n }\n };\n });\n res[Symbol.iterator] = () => {\n let i2 = 0;\n return {\n next() {\n if (i2 < 2) {\n return { value: i2++ ? modifiers || EMPTY_OBJ : res, done: false };\n } else {\n return { done: true };\n }\n }\n };\n };\n return res;\n}\nconst getModelModifiers = (props, modelName) => {\n return modelName === \"modelValue\" || modelName === \"model-value\" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${camelize(modelName)}Modifiers`] || props[`${hyphenate(modelName)}Modifiers`];\n};\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted) return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const {\n emitsOptions,\n propsOptions: [propsOptions]\n } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) && true) {\n if (!propsOptions || !(toHandlerKey(camelize(event)) in propsOptions)) {\n warn$1(\n `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(camelize(event))}\" prop.`\n );\n }\n } else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn$1(\n `Invalid event arguments: event validation failed for event \"${event}\".`\n );\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith(\"update:\");\n const modifiers = isModelListener && getModelModifiers(props, event.slice(7));\n if (modifiers) {\n if (modifiers.trim) {\n args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n }\n if (modifiers.number) {\n args = rawArgs.map(looseToNumber);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn$1(\n `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n instance,\n instance.type\n )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(\n event\n )}\" instead of \"${event}\".`\n );\n }\n }\n let handlerName;\n let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n props[handlerName = toHandlerKey(camelize(event))];\n if (!handler && isModelListener) {\n handler = props[handlerName = toHandlerKey(hyphenate(event))];\n }\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 6,\n args\n );\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n } else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(\n onceHandler,\n instance,\n 6,\n args\n );\n }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== void 0) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw2) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach((key) => normalized[key] = null);\n } else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, \"\");\n return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const {\n type: Component,\n vnode,\n proxy,\n withProxy,\n propsOptions: [propsOptions],\n slots,\n attrs,\n emit,\n render,\n renderCache,\n props,\n data,\n setupState,\n ctx,\n inheritAttrs\n } = instance;\n const prev = setCurrentRenderingInstance(instance);\n let result;\n let fallthroughAttrs;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4) {\n const proxyToUse = withProxy || proxy;\n const thisProxy = !!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup ? new Proxy(proxyToUse, {\n get(target, key, receiver) {\n warn$1(\n `Property '${String(\n key\n )}' was accessed via 'this'. Avoid using 'this' in templates.`\n );\n return Reflect.get(target, key, receiver);\n }\n }) : proxyToUse;\n result = normalizeVNode(\n render.call(\n thisProxy,\n proxyToUse,\n renderCache,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n setupState,\n data,\n ctx\n )\n );\n fallthroughAttrs = attrs;\n } else {\n const render2 = Component;\n if (!!(process.env.NODE_ENV !== \"production\") && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(\n render2.length > 1 ? render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n !!(process.env.NODE_ENV !== \"production\") ? {\n get attrs() {\n markAttrsAccessed();\n return shallowReadonly(attrs);\n },\n slots,\n emit\n } : { attrs, slots, emit }\n ) : render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n null\n )\n );\n fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n }\n } catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1);\n result = createVNode(Comment);\n }\n let root = result;\n let setRoot = void 0;\n if (!!(process.env.NODE_ENV !== \"production\") && result.patchFlag > 0 && result.patchFlag & 2048) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 | 6)) {\n if (propsOptions && keys.some(isModelListener)) {\n fallthroughAttrs = filterModelListeners(\n fallthroughAttrs,\n propsOptions\n );\n }\n root = cloneVNode(root, fallthroughAttrs, false, true);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if (isOn(key)) {\n if (!isModelListener(key)) {\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n } else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn$1(\n `Extraneous non-props attributes (${extraAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes.`\n );\n }\n if (eventAttrs.length) {\n warn$1(\n `Extraneous non-emits event listeners (${eventAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`\n );\n }\n }\n }\n }\n if (vnode.dirs) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n );\n }\n root = cloneVNode(root, null, false, true);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n if (vnode.transition) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Component inside <Transition> renders non-element root node that cannot be animated.`\n );\n }\n setTransitionHooks(root, vnode.transition);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && setRoot) {\n setRoot(root);\n } else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren, false);\n if (!childRoot) {\n return [vnode, void 0];\n } else if (!!(process.env.NODE_ENV !== \"production\") && childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) {\n return getChildRoot(childRoot);\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n } else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children, recurse = true) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (child.type !== Comment || child.children === \"v-if\") {\n if (singleRoot) {\n return;\n } else {\n singleRoot = child;\n if (!!(process.env.NODE_ENV !== \"production\") && recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) {\n return filterSingleRoot(singleRoot.children);\n }\n }\n }\n } else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === \"class\" || key === \"style\" || isOn(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!isModelListener(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return vnode.shapeFlag & (6 | 1) || vnode.type === Comment;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n if (!!(process.env.NODE_ENV !== \"production\") && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024) {\n return true;\n }\n if (patchFlag & 16) {\n if (!prevProps) {\n return !!nextProps;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n } else if (patchFlag & 8) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n } else {\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el) {\n while (parent) {\n const root = parent.subTree;\n if (root.suspense && root.suspense.activeBranch === vnode) {\n root.el = vnode.el;\n }\n if (root === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n } else {\n break;\n }\n }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\nconst SuspenseImpl = {\n name: \"Suspense\",\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n if (n1 == null) {\n mountSuspense(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n } else {\n if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n n2.suspense = n1.suspense;\n n2.suspense.vnode = n2;\n n2.el = n1.el;\n return;\n }\n patchSuspense(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n }\n },\n hydrate: hydrateSuspense,\n normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if (isFunction(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n const {\n p: patch,\n o: { createElement }\n } = rendererInternals;\n const hiddenContainer = createElement(\"div\");\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n container,\n hiddenContainer,\n anchor,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n patch(\n null,\n suspense.pendingBranch = vnode.ssContent,\n hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds\n );\n if (suspense.deps > 0) {\n triggerEvent(vnode, \"onPending\");\n triggerEvent(vnode, \"onFallback\");\n patch(\n null,\n vnode.ssFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds\n );\n setActiveBranch(suspense, vnode.ssFallback);\n } else {\n suspense.resolve(false, true);\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = n2.suspense = n1.suspense;\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(newBranch, pendingBranch)) {\n patch(\n pendingBranch,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else if (isInFallback) {\n if (!isHydrating) {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n }\n } else {\n suspense.pendingId = suspenseId++;\n if (isHydrating) {\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n } else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n suspense.deps = 0;\n suspense.effects.length = 0;\n suspense.hiddenContainer = createElement(\"div\");\n if (isInFallback) {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n suspense.resolve(true);\n } else {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n } else {\n if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newBranch);\n } else {\n triggerEvent(n2, \"onPending\");\n suspense.pendingBranch = newBranch;\n if (newBranch.shapeFlag & 512) {\n suspense.pendingId = newBranch.component.suspenseId;\n } else {\n suspense.pendingId = suspenseId++;\n }\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n } else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n if (!!(process.env.NODE_ENV !== \"production\") && true && !hasWarned) {\n hasWarned = true;\n console[console.info ? \"info\" : \"log\"](\n `<Suspense> is an experimental feature and its API will likely change.`\n );\n }\n const {\n p: patch,\n m: move,\n um: unmount,\n n: next,\n o: { parentNode, remove }\n } = rendererInternals;\n let parentSuspenseId;\n const isSuspensible = isVNodeSuspensible(vnode);\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch) {\n parentSuspenseId = parentSuspense.pendingId;\n parentSuspense.deps++;\n }\n }\n const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(timeout, `Suspense timeout`);\n }\n const initialAnchor = anchor;\n const suspense = {\n vnode,\n parent: parentSuspense,\n parentComponent,\n namespace,\n container,\n hiddenContainer,\n deps: 0,\n pendingId: suspenseId++,\n timeout: typeof timeout === \"number\" ? timeout : -1,\n activeBranch: null,\n pendingBranch: null,\n isInFallback: !isHydrating,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false, sync = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(\n `suspense.resolve() is called without a pending branch.`\n );\n }\n if (suspense.isUnmounted) {\n throw new Error(\n `suspense.resolve() is called on an already unmounted suspense boundary.`\n );\n }\n }\n const {\n vnode: vnode2,\n activeBranch,\n pendingBranch,\n pendingId,\n effects,\n parentComponent: parentComponent2,\n container: container2\n } = suspense;\n let delayEnter = false;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n } else if (!resume) {\n delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(\n pendingBranch,\n container2,\n anchor === initialAnchor ? next(activeBranch) : anchor,\n 0\n );\n queuePostFlushCb(effects);\n }\n };\n }\n if (activeBranch) {\n if (parentNode(activeBranch.el) === container2) {\n anchor = next(activeBranch);\n }\n unmount(activeBranch, parentComponent2, suspense, true);\n }\n if (!delayEnter) {\n move(pendingBranch, container2, anchor, 0);\n }\n }\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n if (!hasUnresolvedAncestor && !delayEnter) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0 && !sync) {\n parentSuspense.resolve();\n }\n }\n }\n triggerEvent(vnode2, \"onResolve\");\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense;\n triggerEvent(vnode2, \"onFallback\");\n const anchor2 = next(activeBranch);\n const mountFallback = () => {\n if (!suspense.isInFallback) {\n return;\n }\n patch(\n null,\n fallbackVNode,\n container2,\n anchor2,\n parentComponent2,\n null,\n // fallback tree will not have suspense context\n namespace2,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n unmount(\n activeBranch,\n parentComponent2,\n null,\n // no suspense so unmount hooks fire now\n true\n // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container2, anchor2, type) {\n suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n suspense.container = container2;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect, optimized2) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance.asyncDep.catch((err) => {\n handleError(err, instance, 0);\n }).then((asyncSetupResult) => {\n if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n return;\n }\n instance.asyncResolved = true;\n const { vnode: vnode2 } = instance;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(vnode2);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n vnode2.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(\n instance,\n vnode2,\n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el),\n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree),\n suspense,\n namespace,\n optimized2\n );\n if (placeholder) {\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode2.el);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense2, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(\n suspense.activeBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n if (suspense.pendingBranch) {\n unmount(\n suspense.pendingBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n node.parentNode,\n // eslint-disable-next-line no-restricted-globals\n document.createElement(\"div\"),\n null,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals,\n true\n );\n const result = hydrateNode(\n node,\n suspense.pendingBranch = vnode.ssContent,\n parentComponent,\n suspense,\n slotScopeIds,\n optimized\n );\n if (suspense.deps === 0) {\n suspense.resolve(false, true);\n }\n return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32;\n vnode.ssContent = normalizeSuspenseSlot(\n isSlotChildren ? children.default : children\n );\n vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if (isFunction(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if (isArray(s)) {\n const singleChild = filterSingleRoot(s);\n if (!!(process.env.NODE_ENV !== \"production\") && !singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) {\n warn$1(`<Suspense> slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter((c) => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if (isArray(fn)) {\n suspense.effects.push(...fn);\n } else {\n suspense.effects.push(fn);\n }\n } else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n let el = branch.el;\n while (!el && branch.component) {\n branch = branch.component.subTree;\n el = branch.el;\n }\n vnode.el = el;\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\nfunction isVNodeSuspensible(vnode) {\n const suspensible = vnode.props && vnode.props.suspensible;\n return suspensible != null && suspensible !== false;\n}\n\nconst Fragment = Symbol.for(\"v-fgt\");\nconst Text = Symbol.for(\"v-txt\");\nconst Comment = Symbol.for(\"v-cmt\");\nconst Static = Symbol.for(\"v-stc\");\nconst blockStack = [];\nlet currentBlock = null;\nfunction openBlock(disableTracking = false) {\n blockStack.push(currentBlock = disableTracking ? null : []);\n}\nfunction closeBlock() {\n blockStack.pop();\n currentBlock = blockStack[blockStack.length - 1] || null;\n}\nlet isBlockTreeEnabled = 1;\nfunction setBlockTracking(value, inVOnce = false) {\n isBlockTreeEnabled += value;\n if (value < 0 && currentBlock && inVOnce) {\n currentBlock.hasOnce = true;\n }\n}\nfunction setupBlock(vnode) {\n vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n closeBlock();\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n return setupBlock(\n createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n true\n )\n );\n}\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n return setupBlock(\n createVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n true\n )\n );\n}\nfunction isVNode(value) {\n return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n if (!!(process.env.NODE_ENV !== \"production\") && n2.shapeFlag & 6 && n1.component) {\n const dirtyInstances = hmrDirtyComponents.get(n2.type);\n if (dirtyInstances && dirtyInstances.has(n1.component)) {\n n1.shapeFlag &= ~256;\n n2.shapeFlag &= ~512;\n return false;\n }\n }\n return n1.type === n2.type && n1.key === n2.key;\n}\nlet vnodeArgsTransformer;\nfunction transformVNodeArgs(transformer) {\n vnodeArgsTransformer = transformer;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n return _createVNode(\n ...vnodeArgsTransformer ? vnodeArgsTransformer(args, currentRenderingInstance) : args\n );\n};\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({\n ref,\n ref_key,\n ref_for\n}) => {\n if (typeof ref === \"number\") {\n ref = \"\" + ref;\n }\n return ref != null ? isString(ref) || isRef(ref) || isFunction(ref) ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for } : ref : null;\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {\n const vnode = {\n __v_isVNode: true,\n __v_skip: true,\n type,\n props,\n key: props && normalizeKey(props),\n ref: props && normalizeRef(props),\n scopeId: currentScopeId,\n slotScopeIds: null,\n children,\n component: null,\n suspense: null,\n ssContent: null,\n ssFallback: null,\n dirs: null,\n transition: null,\n el: null,\n anchor: null,\n target: null,\n targetStart: null,\n targetAnchor: null,\n staticCount: 0,\n shapeFlag,\n patchFlag,\n dynamicProps,\n dynamicChildren: null,\n appContext: null,\n ctx: currentRenderingInstance\n };\n if (needFullChildrenNormalization) {\n normalizeChildren(vnode, children);\n if (shapeFlag & 128) {\n type.normalize(vnode);\n }\n } else if (children) {\n vnode.shapeFlag |= isString(children) ? 8 : 16;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.key !== vnode.key) {\n warn$1(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n }\n if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself\n !isBlockNode && // has current parent block\n currentBlock && // presence of a patch flag indicates this node needs patching on updates.\n // component nodes also should always be patched, because even if the\n // component doesn't need to update, it needs to persist the instance on to\n // the next vnode so that it can be properly unmounted later.\n (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the\n // vnode should not be considered dynamic due to handler caching.\n vnode.patchFlag !== 32) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nconst createVNode = !!(process.env.NODE_ENV !== \"production\") ? createVNodeWithArgsTransform : _createVNode;\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n if (!type || type === NULL_DYNAMIC_COMPONENT) {\n if (!!(process.env.NODE_ENV !== \"production\") && !type) {\n warn$1(`Invalid vnode type when creating vnode: ${type}.`);\n }\n type = Comment;\n }\n if (isVNode(type)) {\n const cloned = cloneVNode(\n type,\n props,\n true\n /* mergeRef: true */\n );\n if (children) {\n normalizeChildren(cloned, children);\n }\n if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n if (cloned.shapeFlag & 6) {\n currentBlock[currentBlock.indexOf(type)] = cloned;\n } else {\n currentBlock.push(cloned);\n }\n }\n cloned.patchFlag = -2;\n return cloned;\n }\n if (isClassComponent(type)) {\n type = type.__vccOpts;\n }\n if (props) {\n props = guardReactiveProps(props);\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (isObject(style)) {\n if (isProxy(style) && !isArray(style)) {\n style = extend({}, style);\n }\n props.style = normalizeStyle(style);\n }\n }\n const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject(type) ? 4 : isFunction(type) ? 2 : 0;\n if (!!(process.env.NODE_ENV !== \"production\") && shapeFlag & 4 && isProxy(type)) {\n type = toRaw(type);\n warn$1(\n `Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with \\`markRaw\\` or using \\`shallowRef\\` instead of \\`ref\\`.`,\n `\nComponent that was made reactive: `,\n type\n );\n }\n return createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n isBlockNode,\n true\n );\n}\nfunction guardReactiveProps(props) {\n if (!props) return null;\n return isProxy(props) || isInternalObject(props) ? extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {\n const { props, ref, patchFlag, children, transition } = vnode;\n const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n const cloned = {\n __v_isVNode: true,\n __v_skip: true,\n type: vnode.type,\n props: mergedProps,\n key: mergedProps && normalizeKey(mergedProps),\n ref: extraProps && extraProps.ref ? (\n // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n // if the vnode itself already has a ref, cloneVNode will need to merge\n // the refs so the single vnode can be set on multiple refs\n mergeRef && ref ? isArray(ref) ? ref.concat(normalizeRef(extraProps)) : [ref, normalizeRef(extraProps)] : normalizeRef(extraProps)\n ) : ref,\n scopeId: vnode.scopeId,\n slotScopeIds: vnode.slotScopeIds,\n children: !!(process.env.NODE_ENV !== \"production\") && patchFlag === -1 && isArray(children) ? children.map(deepCloneVNode) : children,\n target: vnode.target,\n targetStart: vnode.targetStart,\n targetAnchor: vnode.targetAnchor,\n staticCount: vnode.staticCount,\n shapeFlag: vnode.shapeFlag,\n // if the vnode is cloned with extra props, we can no longer assume its\n // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n // note: preserve flag for fragments since they use the flag for children\n // fast paths only.\n patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,\n dynamicProps: vnode.dynamicProps,\n dynamicChildren: vnode.dynamicChildren,\n appContext: vnode.appContext,\n dirs: vnode.dirs,\n transition,\n // These should technically only be non-null on mounted VNodes. However,\n // they *should* be copied for kept-alive vnodes. So we just always copy\n // them since them being non-null during a mount doesn't affect the logic as\n // they will simply be overwritten.\n component: vnode.component,\n suspense: vnode.suspense,\n ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n el: vnode.el,\n anchor: vnode.anchor,\n ctx: vnode.ctx,\n ce: vnode.ce\n };\n if (transition && cloneTransition) {\n setTransitionHooks(\n cloned,\n transition.clone(cloned)\n );\n }\n return cloned;\n}\nfunction deepCloneVNode(vnode) {\n const cloned = cloneVNode(vnode);\n if (isArray(vnode.children)) {\n cloned.children = vnode.children.map(deepCloneVNode);\n }\n return cloned;\n}\nfunction createTextVNode(text = \" \", flag = 0) {\n return createVNode(Text, null, text, flag);\n}\nfunction createStaticVNode(content, numberOfNodes) {\n const vnode = createVNode(Static, null, content);\n vnode.staticCount = numberOfNodes;\n return vnode;\n}\nfunction createCommentVNode(text = \"\", asBlock = false) {\n return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n if (child == null || typeof child === \"boolean\") {\n return createVNode(Comment);\n } else if (isArray(child)) {\n return createVNode(\n Fragment,\n null,\n // #3666, avoid reference pollution when reusing vnode\n child.slice()\n );\n } else if (isVNode(child)) {\n return cloneIfMounted(child);\n } else {\n return createVNode(Text, null, String(child));\n }\n}\nfunction cloneIfMounted(child) {\n return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n let type = 0;\n const { shapeFlag } = vnode;\n if (children == null) {\n children = null;\n } else if (isArray(children)) {\n type = 16;\n } else if (typeof children === \"object\") {\n if (shapeFlag & (1 | 64)) {\n const slot = children.default;\n if (slot) {\n slot._c && (slot._d = false);\n normalizeChildren(vnode, slot());\n slot._c && (slot._d = true);\n }\n return;\n } else {\n type = 32;\n const slotFlag = children._;\n if (!slotFlag && !isInternalObject(children)) {\n children._ctx = currentRenderingInstance;\n } else if (slotFlag === 3 && currentRenderingInstance) {\n if (currentRenderingInstance.slots._ === 1) {\n children._ = 1;\n } else {\n children._ = 2;\n vnode.patchFlag |= 1024;\n }\n }\n }\n } else if (isFunction(children)) {\n children = { default: children, _ctx: currentRenderingInstance };\n type = 32;\n } else {\n children = String(children);\n if (shapeFlag & 64) {\n type = 16;\n children = [createTextVNode(children)];\n } else {\n type = 8;\n }\n }\n vnode.children = children;\n vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n const toMerge = args[i];\n for (const key in toMerge) {\n if (key === \"class\") {\n if (ret.class !== toMerge.class) {\n ret.class = normalizeClass([ret.class, toMerge.class]);\n }\n } else if (key === \"style\") {\n ret.style = normalizeStyle([ret.style, toMerge.style]);\n } else if (isOn(key)) {\n const existing = ret[key];\n const incoming = toMerge[key];\n if (incoming && existing !== incoming && !(isArray(existing) && existing.includes(incoming))) {\n ret[key] = existing ? [].concat(existing, incoming) : incoming;\n }\n } else if (key !== \"\") {\n ret[key] = toMerge[key];\n }\n }\n }\n return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n callWithAsyncErrorHandling(hook, instance, 7, [\n vnode,\n prevVNode\n ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n const type = vnode.type;\n const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n const instance = {\n uid: uid++,\n vnode,\n type,\n parent,\n appContext,\n root: null,\n // to be immediately set\n next: null,\n subTree: null,\n // will be set synchronously right after creation\n effect: null,\n update: null,\n // will be set synchronously right after creation\n job: null,\n scope: new EffectScope(\n true\n /* detached */\n ),\n render: null,\n proxy: null,\n exposed: null,\n exposeProxy: null,\n withProxy: null,\n provides: parent ? parent.provides : Object.create(appContext.provides),\n ids: parent ? parent.ids : [\"\", 0, 0],\n accessCache: null,\n renderCache: [],\n // local resolved assets\n components: null,\n directives: null,\n // resolved props and emits options\n propsOptions: normalizePropsOptions(type, appContext),\n emitsOptions: normalizeEmitsOptions(type, appContext),\n // emit\n emit: null,\n // to be set immediately\n emitted: null,\n // props default value\n propsDefaults: EMPTY_OBJ,\n // inheritAttrs\n inheritAttrs: type.inheritAttrs,\n // state\n ctx: EMPTY_OBJ,\n data: EMPTY_OBJ,\n props: EMPTY_OBJ,\n attrs: EMPTY_OBJ,\n slots: EMPTY_OBJ,\n refs: EMPTY_OBJ,\n setupState: EMPTY_OBJ,\n setupContext: null,\n // suspense related\n suspense,\n suspenseId: suspense ? suspense.pendingId : 0,\n asyncDep: null,\n asyncResolved: false,\n // lifecycle hooks\n // not using enums here because it results in computed properties\n isMounted: false,\n isUnmounted: false,\n isDeactivated: false,\n bc: null,\n c: null,\n bm: null,\n m: null,\n bu: null,\n u: null,\n um: null,\n bum: null,\n da: null,\n a: null,\n rtg: null,\n rtc: null,\n ec: null,\n sp: null\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ctx = createDevRenderContext(instance);\n } else {\n instance.ctx = { _: instance };\n }\n instance.root = parent ? parent.root : instance;\n instance.emit = emit.bind(null, instance);\n if (vnode.ce) {\n vnode.ce(instance);\n }\n return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nlet internalSetCurrentInstance;\nlet setInSSRSetupState;\n{\n const g = getGlobalThis();\n const registerGlobalSetter = (key, setter) => {\n let setters;\n if (!(setters = g[key])) setters = g[key] = [];\n setters.push(setter);\n return (v) => {\n if (setters.length > 1) setters.forEach((set) => set(v));\n else setters[0](v);\n };\n };\n internalSetCurrentInstance = registerGlobalSetter(\n `__VUE_INSTANCE_SETTERS__`,\n (v) => currentInstance = v\n );\n setInSSRSetupState = registerGlobalSetter(\n `__VUE_SSR_SETTERS__`,\n (v) => isInSSRComponentSetup = v\n );\n}\nconst setCurrentInstance = (instance) => {\n const prev = currentInstance;\n internalSetCurrentInstance(instance);\n instance.scope.on();\n return () => {\n instance.scope.off();\n internalSetCurrentInstance(prev);\n };\n};\nconst unsetCurrentInstance = () => {\n currentInstance && currentInstance.scope.off();\n internalSetCurrentInstance(null);\n};\nconst isBuiltInTag = /* @__PURE__ */ makeMap(\"slot,component\");\nfunction validateComponentName(name, { isNativeTag }) {\n if (isBuiltInTag(name) || isNativeTag(name)) {\n warn$1(\n \"Do not use built-in or reserved HTML elements as component id: \" + name\n );\n }\n}\nfunction isStatefulComponent(instance) {\n return instance.vnode.shapeFlag & 4;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false, optimized = false) {\n isSSR && setInSSRSetupState(isSSR);\n const { props, children } = instance.vnode;\n const isStateful = isStatefulComponent(instance);\n initProps(instance, props, isStateful, isSSR);\n initSlots(instance, children, optimized);\n const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n isSSR && setInSSRSetupState(false);\n return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n var _a;\n const Component = instance.type;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (Component.name) {\n validateComponentName(Component.name, instance.appContext.config);\n }\n if (Component.components) {\n const names = Object.keys(Component.components);\n for (let i = 0; i < names.length; i++) {\n validateComponentName(names[i], instance.appContext.config);\n }\n }\n if (Component.directives) {\n const names = Object.keys(Component.directives);\n for (let i = 0; i < names.length; i++) {\n validateDirectiveName(names[i]);\n }\n }\n if (Component.compilerOptions && isRuntimeOnly()) {\n warn$1(\n `\"compilerOptions\" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`\n );\n }\n }\n instance.accessCache = /* @__PURE__ */ Object.create(null);\n instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposePropsOnRenderContext(instance);\n }\n const { setup } = Component;\n if (setup) {\n pauseTracking();\n const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;\n const reset = setCurrentInstance(instance);\n const setupResult = callWithErrorHandling(\n setup,\n instance,\n 0,\n [\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(instance.props) : instance.props,\n setupContext\n ]\n );\n const isAsyncSetup = isPromise(setupResult);\n resetTracking();\n reset();\n if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) {\n markAsyncBoundary(instance);\n }\n if (isAsyncSetup) {\n setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n if (isSSR) {\n return setupResult.then((resolvedResult) => {\n handleSetupResult(instance, resolvedResult, isSSR);\n }).catch((e) => {\n handleError(e, instance, 0);\n });\n } else {\n instance.asyncDep = setupResult;\n if (!!(process.env.NODE_ENV !== \"production\") && !instance.suspense) {\n const name = (_a = Component.name) != null ? _a : \"Anonymous\";\n warn$1(\n `Component <${name}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`\n );\n }\n }\n } else {\n handleSetupResult(instance, setupResult, isSSR);\n }\n } else {\n finishComponentSetup(instance, isSSR);\n }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n if (isFunction(setupResult)) {\n if (instance.type.__ssrInlineRender) {\n instance.ssrRender = setupResult;\n } else {\n instance.render = setupResult;\n }\n } else if (isObject(setupResult)) {\n if (!!(process.env.NODE_ENV !== \"production\") && isVNode(setupResult)) {\n warn$1(\n `setup() should not return VNodes directly - return a render function instead.`\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.devtoolsRawSetupState = setupResult;\n }\n instance.setupState = proxyRefs(setupResult);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposeSetupStateOnRenderContext(instance);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupResult !== void 0) {\n warn$1(\n `setup() should return an object. Received: ${setupResult === null ? \"null\" : typeof setupResult}`\n );\n }\n finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\nfunction registerRuntimeCompiler(_compile) {\n compile = _compile;\n installWithProxy = (i) => {\n if (i.render._rc) {\n i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n }\n };\n}\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n const Component = instance.type;\n if (!instance.render) {\n if (!isSSR && compile && !Component.render) {\n const template = Component.template || __VUE_OPTIONS_API__ && resolveMergedOptions(instance).template;\n if (template) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `compile`);\n }\n const { isCustomElement, compilerOptions } = instance.appContext.config;\n const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n const finalCompilerOptions = extend(\n extend(\n {\n isCustomElement,\n delimiters\n },\n compilerOptions\n ),\n componentCompilerOptions\n );\n Component.render = compile(template, finalCompilerOptions);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `compile`);\n }\n }\n }\n instance.render = Component.render || NOOP;\n if (installWithProxy) {\n installWithProxy(instance);\n }\n }\n if (__VUE_OPTIONS_API__ && true) {\n const reset = setCurrentInstance(instance);\n pauseTracking();\n try {\n applyOptions(instance);\n } finally {\n resetTracking();\n reset();\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !Component.render && instance.render === NOOP && !isSSR) {\n if (!compile && Component.template) {\n warn$1(\n `Component provided template option but runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".` )\n );\n } else {\n warn$1(`Component is missing template or render function: `, Component);\n }\n }\n}\nconst attrsProxyHandlers = !!(process.env.NODE_ENV !== \"production\") ? {\n get(target, key) {\n markAttrsAccessed();\n track(target, \"get\", \"\");\n return target[key];\n },\n set() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n },\n deleteProperty() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n }\n} : {\n get(target, key) {\n track(target, \"get\", \"\");\n return target[key];\n }\n};\nfunction getSlotsProxy(instance) {\n return new Proxy(instance.slots, {\n get(target, key) {\n track(instance, \"get\", \"$slots\");\n return target[key];\n }\n });\n}\nfunction createSetupContext(instance) {\n const expose = (exposed) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (instance.exposed) {\n warn$1(`expose() should be called only once per setup().`);\n }\n if (exposed != null) {\n let exposedType = typeof exposed;\n if (exposedType === \"object\") {\n if (isArray(exposed)) {\n exposedType = \"array\";\n } else if (isRef(exposed)) {\n exposedType = \"ref\";\n }\n }\n if (exposedType !== \"object\") {\n warn$1(\n `expose() should be passed a plain object, received ${exposedType}.`\n );\n }\n }\n }\n instance.exposed = exposed || {};\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n let attrsProxy;\n let slotsProxy;\n return Object.freeze({\n get attrs() {\n return attrsProxy || (attrsProxy = new Proxy(instance.attrs, attrsProxyHandlers));\n },\n get slots() {\n return slotsProxy || (slotsProxy = getSlotsProxy(instance));\n },\n get emit() {\n return (event, ...args) => instance.emit(event, ...args);\n },\n expose\n });\n } else {\n return {\n attrs: new Proxy(instance.attrs, attrsProxyHandlers),\n slots: instance.slots,\n emit: instance.emit,\n expose\n };\n }\n}\nfunction getComponentPublicInstance(instance) {\n if (instance.exposed) {\n return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n get(target, key) {\n if (key in target) {\n return target[key];\n } else if (key in publicPropertiesMap) {\n return publicPropertiesMap[key](instance);\n }\n },\n has(target, key) {\n return key in target || key in publicPropertiesMap;\n }\n }));\n } else {\n return instance.proxy;\n }\n}\nconst classifyRE = /(?:^|[-_])(\\w)/g;\nconst classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, \"\");\nfunction getComponentName(Component, includeInferred = true) {\n return isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;\n}\nfunction formatComponentName(instance, Component, isRoot = false) {\n let name = getComponentName(Component);\n if (!name && Component.__file) {\n const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n if (match) {\n name = match[1];\n }\n }\n if (!name && instance && instance.parent) {\n const inferFromRegistry = (registry) => {\n for (const key in registry) {\n if (registry[key] === Component) {\n return key;\n }\n }\n };\n name = inferFromRegistry(\n instance.components || instance.parent.type.components\n ) || inferFromRegistry(instance.appContext.components);\n }\n return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n return isFunction(value) && \"__vccOpts\" in value;\n}\n\nconst computed = (getterOrOptions, debugOptions) => {\n const c = computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const i = getCurrentInstance();\n if (i && i.appContext.config.warnRecursiveComputed) {\n c._warnRecursive = true;\n }\n }\n return c;\n};\n\nfunction h(type, propsOrChildren, children) {\n const l = arguments.length;\n if (l === 2) {\n if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n if (isVNode(propsOrChildren)) {\n return createVNode(type, null, [propsOrChildren]);\n }\n return createVNode(type, propsOrChildren);\n } else {\n return createVNode(type, null, propsOrChildren);\n }\n } else {\n if (l > 3) {\n children = Array.prototype.slice.call(arguments, 2);\n } else if (l === 3 && isVNode(children)) {\n children = [children];\n }\n return createVNode(type, propsOrChildren, children);\n }\n}\n\nfunction initCustomFormatter() {\n if (!!!(process.env.NODE_ENV !== \"production\") || typeof window === \"undefined\") {\n return;\n }\n const vueStyle = { style: \"color:#3ba776\" };\n const numberStyle = { style: \"color:#1677ff\" };\n const stringStyle = { style: \"color:#f5222d\" };\n const keywordStyle = { style: \"color:#eb2f96\" };\n const formatter = {\n __vue_custom_formatter: true,\n header(obj) {\n if (!isObject(obj)) {\n return null;\n }\n if (obj.__isVue) {\n return [\"div\", vueStyle, `VueInstance`];\n } else if (isRef(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, genRefFlag(obj)],\n \"<\",\n // avoid debugger accessing value affecting behavior\n formatValue(\"_value\" in obj ? obj._value : obj),\n `>`\n ];\n } else if (isReactive(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReactive\" : \"Reactive\"],\n \"<\",\n formatValue(obj),\n `>${isReadonly(obj) ? ` (readonly)` : ``}`\n ];\n } else if (isReadonly(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReadonly\" : \"Readonly\"],\n \"<\",\n formatValue(obj),\n \">\"\n ];\n }\n return null;\n },\n hasBody(obj) {\n return obj && obj.__isVue;\n },\n body(obj) {\n if (obj && obj.__isVue) {\n return [\n \"div\",\n {},\n ...formatInstance(obj.$)\n ];\n }\n }\n };\n function formatInstance(instance) {\n const blocks = [];\n if (instance.type.props && instance.props) {\n blocks.push(createInstanceBlock(\"props\", toRaw(instance.props)));\n }\n if (instance.setupState !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"setup\", instance.setupState));\n }\n if (instance.data !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"data\", toRaw(instance.data)));\n }\n const computed = extractKeys(instance, \"computed\");\n if (computed) {\n blocks.push(createInstanceBlock(\"computed\", computed));\n }\n const injected = extractKeys(instance, \"inject\");\n if (injected) {\n blocks.push(createInstanceBlock(\"injected\", injected));\n }\n blocks.push([\n \"div\",\n {},\n [\n \"span\",\n {\n style: keywordStyle.style + \";opacity:0.66\"\n },\n \"$ (internal): \"\n ],\n [\"object\", { object: instance }]\n ]);\n return blocks;\n }\n function createInstanceBlock(type, target) {\n target = extend({}, target);\n if (!Object.keys(target).length) {\n return [\"span\", {}];\n }\n return [\n \"div\",\n { style: \"line-height:1.25em;margin-bottom:0.6em\" },\n [\n \"div\",\n {\n style: \"color:#476582\"\n },\n type\n ],\n [\n \"div\",\n {\n style: \"padding-left:1.25em\"\n },\n ...Object.keys(target).map((key) => {\n return [\n \"div\",\n {},\n [\"span\", keywordStyle, key + \": \"],\n formatValue(target[key], false)\n ];\n })\n ]\n ];\n }\n function formatValue(v, asRaw = true) {\n if (typeof v === \"number\") {\n return [\"span\", numberStyle, v];\n } else if (typeof v === \"string\") {\n return [\"span\", stringStyle, JSON.stringify(v)];\n } else if (typeof v === \"boolean\") {\n return [\"span\", keywordStyle, v];\n } else if (isObject(v)) {\n return [\"object\", { object: asRaw ? toRaw(v) : v }];\n } else {\n return [\"span\", stringStyle, String(v)];\n }\n }\n function extractKeys(instance, type) {\n const Comp = instance.type;\n if (isFunction(Comp)) {\n return;\n }\n const extracted = {};\n for (const key in instance.ctx) {\n if (isKeyOfType(Comp, key, type)) {\n extracted[key] = instance.ctx[key];\n }\n }\n return extracted;\n }\n function isKeyOfType(Comp, key, type) {\n const opts = Comp[type];\n if (isArray(opts) && opts.includes(key) || isObject(opts) && key in opts) {\n return true;\n }\n if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n return true;\n }\n if (Comp.mixins && Comp.mixins.some((m) => isKeyOfType(m, key, type))) {\n return true;\n }\n }\n function genRefFlag(v) {\n if (isShallow(v)) {\n return `ShallowRef`;\n }\n if (v.effect) {\n return `ComputedRef`;\n }\n return `Ref`;\n }\n if (window.devtoolsFormatters) {\n window.devtoolsFormatters.push(formatter);\n } else {\n window.devtoolsFormatters = [formatter];\n }\n}\n\nfunction withMemo(memo, render, cache, index) {\n const cached = cache[index];\n if (cached && isMemoSame(cached, memo)) {\n return cached;\n }\n const ret = render();\n ret.memo = memo.slice();\n ret.cacheIndex = index;\n return cache[index] = ret;\n}\nfunction isMemoSame(cached, memo) {\n const prev = cached.memo;\n if (prev.length != memo.length) {\n return false;\n }\n for (let i = 0; i < prev.length; i++) {\n if (hasChanged(prev[i], memo[i])) {\n return false;\n }\n }\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(cached);\n }\n return true;\n}\n\nconst version = \"3.5.13\";\nconst warn = !!(process.env.NODE_ENV !== \"production\") ? warn$1 : NOOP;\nconst ErrorTypeStrings = ErrorTypeStrings$1 ;\nconst devtools = !!(process.env.NODE_ENV !== \"production\") || true ? devtools$1 : void 0;\nconst setDevtoolsHook = !!(process.env.NODE_ENV !== \"production\") || true ? setDevtoolsHook$1 : NOOP;\nconst _ssrUtils = {\n createComponentInstance,\n setupComponent,\n renderComponentRoot,\n setCurrentRenderingInstance,\n isVNode: isVNode,\n normalizeVNode,\n getComponentPublicInstance,\n ensureValidVNode,\n pushWarningContext,\n popWarningContext\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\nconst DeprecationTypes = null;\n\nexport { BaseTransition, BaseTransitionPropsValidators, Comment, DeprecationTypes, ErrorCodes, ErrorTypeStrings, Fragment, KeepAlive, Static, Suspense, Teleport, Text, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, cloneVNode, compatUtils, computed, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, defineEmits, defineExpose, defineModel, defineOptions, defineProps, defineSlots, devtools, getCurrentInstance, getTransitionRawChildren, guardReactiveProps, h, handleError, hasInjectionContext, hydrateOnIdle, hydrateOnInteraction, hydrateOnMediaQuery, hydrateOnVisible, initCustomFormatter, inject, isMemoSame, isRuntimeOnly, isVNode, mergeDefaults, mergeModels, mergeProps, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, pushScopeId, queuePostFlushCb, registerRuntimeCompiler, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, ssrContextKey, ssrUtils, toHandlers, transformVNodeArgs, useAttrs, useId, useModel, useSSRContext, useSlots, useTemplateRef, useTransitionState, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withMemo, withScopeId };\n","/**\n* @vue/runtime-dom v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { warn, h, BaseTransition, assertNumber, BaseTransitionPropsValidators, getCurrentInstance, onBeforeUpdate, queuePostFlushCb, onMounted, watch, onUnmounted, Fragment, Static, camelize, callWithAsyncErrorHandling, defineComponent, nextTick, unref, createVNode, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, Text, isRuntimeOnly, createRenderer, createHydrationRenderer } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { extend, isObject, toNumber, isArray, NOOP, isString, hyphenate, capitalize, includeBooleanAttr, isSymbol, isSpecialBooleanAttr, isFunction, isOn, isModelListener, camelize as camelize$1, isPlainObject, hasOwn, EMPTY_OBJ, looseToNumber, looseIndexOf, isSet, looseEqual, invokeArrayFns, isHTMLTag, isSVGTag, isMathMLTag } from '@vue/shared';\n\nlet policy = void 0;\nconst tt = typeof window !== \"undefined\" && window.trustedTypes;\nif (tt) {\n try {\n policy = /* @__PURE__ */ tt.createPolicy(\"vue\", {\n createHTML: (val) => val\n });\n } catch (e) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Error creating trusted types policy: ${e}`);\n }\n}\nconst unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val;\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */ doc.createElement(\"template\");\nconst nodeOps = {\n insert: (child, parent, anchor) => {\n parent.insertBefore(child, anchor || null);\n },\n remove: (child) => {\n const parent = child.parentNode;\n if (parent) {\n parent.removeChild(child);\n }\n },\n createElement: (tag, namespace, is, props) => {\n const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag);\n if (tag === \"select\" && props && props.multiple != null) {\n el.setAttribute(\"multiple\", props.multiple);\n }\n return el;\n },\n createText: (text) => doc.createTextNode(text),\n createComment: (text) => doc.createComment(text),\n setText: (node, text) => {\n node.nodeValue = text;\n },\n setElementText: (el, text) => {\n el.textContent = text;\n },\n parentNode: (node) => node.parentNode,\n nextSibling: (node) => node.nextSibling,\n querySelector: (selector) => doc.querySelector(selector),\n setScopeId(el, id) {\n el.setAttribute(id, \"\");\n },\n // __UNSAFE__\n // Reason: innerHTML.\n // Static content here can only come from compiled templates.\n // As long as the user only uses trusted templates, this is safe.\n insertStaticContent(content, parent, anchor, namespace, start, end) {\n const before = anchor ? anchor.previousSibling : parent.lastChild;\n if (start && (start === end || start.nextSibling)) {\n while (true) {\n parent.insertBefore(start.cloneNode(true), anchor);\n if (start === end || !(start = start.nextSibling)) break;\n }\n } else {\n templateContainer.innerHTML = unsafeToTrustedHTML(\n namespace === \"svg\" ? `<svg>${content}</svg>` : namespace === \"mathml\" ? `<math>${content}</math>` : content\n );\n const template = templateContainer.content;\n if (namespace === \"svg\" || namespace === \"mathml\") {\n const wrapper = template.firstChild;\n while (wrapper.firstChild) {\n template.appendChild(wrapper.firstChild);\n }\n template.removeChild(wrapper);\n }\n parent.insertBefore(template, anchor);\n }\n return [\n // first\n before ? before.nextSibling : parent.firstChild,\n // last\n anchor ? anchor.previousSibling : parent.lastChild\n ];\n }\n};\n\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = Symbol(\"_vtc\");\nconst DOMTransitionPropsValidators = {\n name: String,\n type: String,\n css: {\n type: Boolean,\n default: true\n },\n duration: [String, Number, Object],\n enterFromClass: String,\n enterActiveClass: String,\n enterToClass: String,\n appearFromClass: String,\n appearActiveClass: String,\n appearToClass: String,\n leaveFromClass: String,\n leaveActiveClass: String,\n leaveToClass: String\n};\nconst TransitionPropsValidators = /* @__PURE__ */ extend(\n {},\n BaseTransitionPropsValidators,\n DOMTransitionPropsValidators\n);\nconst decorate$1 = (t) => {\n t.displayName = \"Transition\";\n t.props = TransitionPropsValidators;\n return t;\n};\nconst Transition = /* @__PURE__ */ decorate$1(\n (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots)\n);\nconst callHook = (hook, args = []) => {\n if (isArray(hook)) {\n hook.forEach((h2) => h2(...args));\n } else if (hook) {\n hook(...args);\n }\n};\nconst hasExplicitCallback = (hook) => {\n return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n const baseProps = {};\n for (const key in rawProps) {\n if (!(key in DOMTransitionPropsValidators)) {\n baseProps[key] = rawProps[key];\n }\n }\n if (rawProps.css === false) {\n return baseProps;\n }\n const {\n name = \"v\",\n type,\n duration,\n enterFromClass = `${name}-enter-from`,\n enterActiveClass = `${name}-enter-active`,\n enterToClass = `${name}-enter-to`,\n appearFromClass = enterFromClass,\n appearActiveClass = enterActiveClass,\n appearToClass = enterToClass,\n leaveFromClass = `${name}-leave-from`,\n leaveActiveClass = `${name}-leave-active`,\n leaveToClass = `${name}-leave-to`\n } = rawProps;\n const durations = normalizeDuration(duration);\n const enterDuration = durations && durations[0];\n const leaveDuration = durations && durations[1];\n const {\n onBeforeEnter,\n onEnter,\n onEnterCancelled,\n onLeave,\n onLeaveCancelled,\n onBeforeAppear = onBeforeEnter,\n onAppear = onEnter,\n onAppearCancelled = onEnterCancelled\n } = baseProps;\n const finishEnter = (el, isAppear, done, isCancelled) => {\n el._enterCancelled = isCancelled;\n removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n done && done();\n };\n const finishLeave = (el, done) => {\n el._isLeaving = false;\n removeTransitionClass(el, leaveFromClass);\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n done && done();\n };\n const makeEnterHook = (isAppear) => {\n return (el, done) => {\n const hook = isAppear ? onAppear : onEnter;\n const resolve = () => finishEnter(el, isAppear, done);\n callHook(hook, [el, resolve]);\n nextFrame(() => {\n removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n if (!hasExplicitCallback(hook)) {\n whenTransitionEnds(el, type, enterDuration, resolve);\n }\n });\n };\n };\n return extend(baseProps, {\n onBeforeEnter(el) {\n callHook(onBeforeEnter, [el]);\n addTransitionClass(el, enterFromClass);\n addTransitionClass(el, enterActiveClass);\n },\n onBeforeAppear(el) {\n callHook(onBeforeAppear, [el]);\n addTransitionClass(el, appearFromClass);\n addTransitionClass(el, appearActiveClass);\n },\n onEnter: makeEnterHook(false),\n onAppear: makeEnterHook(true),\n onLeave(el, done) {\n el._isLeaving = true;\n const resolve = () => finishLeave(el, done);\n addTransitionClass(el, leaveFromClass);\n if (!el._enterCancelled) {\n forceReflow();\n addTransitionClass(el, leaveActiveClass);\n } else {\n addTransitionClass(el, leaveActiveClass);\n forceReflow();\n }\n nextFrame(() => {\n if (!el._isLeaving) {\n return;\n }\n removeTransitionClass(el, leaveFromClass);\n addTransitionClass(el, leaveToClass);\n if (!hasExplicitCallback(onLeave)) {\n whenTransitionEnds(el, type, leaveDuration, resolve);\n }\n });\n callHook(onLeave, [el, resolve]);\n },\n onEnterCancelled(el) {\n finishEnter(el, false, void 0, true);\n callHook(onEnterCancelled, [el]);\n },\n onAppearCancelled(el) {\n finishEnter(el, true, void 0, true);\n callHook(onAppearCancelled, [el]);\n },\n onLeaveCancelled(el) {\n finishLeave(el);\n callHook(onLeaveCancelled, [el]);\n }\n });\n}\nfunction normalizeDuration(duration) {\n if (duration == null) {\n return null;\n } else if (isObject(duration)) {\n return [NumberOf(duration.enter), NumberOf(duration.leave)];\n } else {\n const n = NumberOf(duration);\n return [n, n];\n }\n}\nfunction NumberOf(val) {\n const res = toNumber(val);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(res, \"<transition> explicit duration\");\n }\n return res;\n}\nfunction addTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.add(c));\n (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.remove(c));\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.delete(cls);\n if (!_vtc.size) {\n el[vtcKey] = void 0;\n }\n }\n}\nfunction nextFrame(cb) {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n const id = el._endId = ++endId;\n const resolveIfNotStale = () => {\n if (id === el._endId) {\n resolve();\n }\n };\n if (explicitTimeout != null) {\n return setTimeout(resolveIfNotStale, explicitTimeout);\n }\n const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n if (!type) {\n return resolve();\n }\n const endEvent = type + \"end\";\n let ended = 0;\n const end = () => {\n el.removeEventListener(endEvent, onEnd);\n resolveIfNotStale();\n };\n const onEnd = (e) => {\n if (e.target === el && ++ended >= propCount) {\n end();\n }\n };\n setTimeout(() => {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n const styles = window.getComputedStyle(el);\n const getStyleProperties = (key) => (styles[key] || \"\").split(\", \");\n const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n const animationTimeout = getTimeout(animationDelays, animationDurations);\n let type = null;\n let timeout = 0;\n let propCount = 0;\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n }\n const hasTransform = type === TRANSITION && /\\b(transform|all)(,|$)/.test(\n getStyleProperties(`${TRANSITION}Property`).toString()\n );\n return {\n type,\n timeout,\n propCount,\n hasTransform\n };\n}\nfunction getTimeout(delays, durations) {\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n if (s === \"auto\") return 0;\n return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow() {\n return document.body.offsetHeight;\n}\n\nfunction patchClass(el, value, isSVG) {\n const transitionClasses = el[vtcKey];\n if (transitionClasses) {\n value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n }\n if (value == null) {\n el.removeAttribute(\"class\");\n } else if (isSVG) {\n el.setAttribute(\"class\", value);\n } else {\n el.className = value;\n }\n}\n\nconst vShowOriginalDisplay = Symbol(\"_vod\");\nconst vShowHidden = Symbol(\"_vsh\");\nconst vShow = {\n beforeMount(el, { value }, { transition }) {\n el[vShowOriginalDisplay] = el.style.display === \"none\" ? \"\" : el.style.display;\n if (transition && value) {\n transition.beforeEnter(el);\n } else {\n setDisplay(el, value);\n }\n },\n mounted(el, { value }, { transition }) {\n if (transition && value) {\n transition.enter(el);\n }\n },\n updated(el, { value, oldValue }, { transition }) {\n if (!value === !oldValue) return;\n if (transition) {\n if (value) {\n transition.beforeEnter(el);\n setDisplay(el, true);\n transition.enter(el);\n } else {\n transition.leave(el, () => {\n setDisplay(el, false);\n });\n }\n } else {\n setDisplay(el, value);\n }\n },\n beforeUnmount(el, { value }) {\n setDisplay(el, value);\n }\n};\nif (!!(process.env.NODE_ENV !== \"production\")) {\n vShow.name = \"show\";\n}\nfunction setDisplay(el, value) {\n el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n vShow.getSSRProps = ({ value }) => {\n if (!value) {\n return { style: { display: \"none\" } };\n }\n };\n}\n\nconst CSS_VAR_TEXT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"CSS_VAR_TEXT\" : \"\");\nfunction useCssVars(getter) {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssVars is called without current active component instance.`);\n return;\n }\n const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => {\n Array.from(\n document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)\n ).forEach((node) => setVarsOnNode(node, vars));\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.getCssVars = () => getter(instance.proxy);\n }\n const setVars = () => {\n const vars = getter(instance.proxy);\n if (instance.ce) {\n setVarsOnNode(instance.ce, vars);\n } else {\n setVarsOnVNode(instance.subTree, vars);\n }\n updateTeleports(vars);\n };\n onBeforeUpdate(() => {\n queuePostFlushCb(setVars);\n });\n onMounted(() => {\n watch(setVars, NOOP, { flush: \"post\" });\n const ob = new MutationObserver(setVars);\n ob.observe(instance.subTree.el.parentNode, { childList: true });\n onUnmounted(() => ob.disconnect());\n });\n}\nfunction setVarsOnVNode(vnode, vars) {\n if (vnode.shapeFlag & 128) {\n const suspense = vnode.suspense;\n vnode = suspense.activeBranch;\n if (suspense.pendingBranch && !suspense.isHydrating) {\n suspense.effects.push(() => {\n setVarsOnVNode(suspense.activeBranch, vars);\n });\n }\n }\n while (vnode.component) {\n vnode = vnode.component.subTree;\n }\n if (vnode.shapeFlag & 1 && vnode.el) {\n setVarsOnNode(vnode.el, vars);\n } else if (vnode.type === Fragment) {\n vnode.children.forEach((c) => setVarsOnVNode(c, vars));\n } else if (vnode.type === Static) {\n let { el, anchor } = vnode;\n while (el) {\n setVarsOnNode(el, vars);\n if (el === anchor) break;\n el = el.nextSibling;\n }\n }\n}\nfunction setVarsOnNode(el, vars) {\n if (el.nodeType === 1) {\n const style = el.style;\n let cssText = \"\";\n for (const key in vars) {\n style.setProperty(`--${key}`, vars[key]);\n cssText += `--${key}: ${vars[key]};`;\n }\n style[CSS_VAR_TEXT] = cssText;\n }\n}\n\nconst displayRE = /(^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n const style = el.style;\n const isCssString = isString(next);\n let hasControlledDisplay = false;\n if (next && !isCssString) {\n if (prev) {\n if (!isString(prev)) {\n for (const key in prev) {\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n } else {\n for (const prevStyle of prev.split(\";\")) {\n const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n }\n }\n for (const key in next) {\n if (key === \"display\") {\n hasControlledDisplay = true;\n }\n setStyle(style, key, next[key]);\n }\n } else {\n if (isCssString) {\n if (prev !== next) {\n const cssVarText = style[CSS_VAR_TEXT];\n if (cssVarText) {\n next += \";\" + cssVarText;\n }\n style.cssText = next;\n hasControlledDisplay = displayRE.test(next);\n }\n } else if (prev) {\n el.removeAttribute(\"style\");\n }\n }\n if (vShowOriginalDisplay in el) {\n el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n if (el[vShowHidden]) {\n style.display = \"none\";\n }\n }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n if (isArray(val)) {\n val.forEach((v) => setStyle(style, name, v));\n } else {\n if (val == null) val = \"\";\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (semicolonRE.test(val)) {\n warn(\n `Unexpected semicolon at the end of '${name}' style value: '${val}'`\n );\n }\n }\n if (name.startsWith(\"--\")) {\n style.setProperty(name, val);\n } else {\n const prefixed = autoPrefix(style, name);\n if (importantRE.test(val)) {\n style.setProperty(\n hyphenate(prefixed),\n val.replace(importantRE, \"\"),\n \"important\"\n );\n } else {\n style[prefixed] = val;\n }\n }\n }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n let name = camelize(rawName);\n if (name !== \"filter\" && name in style) {\n return prefixCache[rawName] = name;\n }\n name = capitalize(name);\n for (let i = 0; i < prefixes.length; i++) {\n const prefixed = prefixes[i] + name;\n if (prefixed in style) {\n return prefixCache[rawName] = prefixed;\n }\n }\n return rawName;\n}\n\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance, isBoolean = isSpecialBooleanAttr(key)) {\n if (isSVG && key.startsWith(\"xlink:\")) {\n if (value == null) {\n el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n if (value == null || isBoolean && !includeBooleanAttr(value)) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(\n key,\n isBoolean ? \"\" : isSymbol(value) ? String(value) : value\n );\n }\n }\n}\n\nfunction patchDOMProp(el, key, value, parentComponent, attrName) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n if (value != null) {\n el[key] = key === \"innerHTML\" ? unsafeToTrustedHTML(value) : value;\n }\n return;\n }\n const tag = el.tagName;\n if (key === \"value\" && tag !== \"PROGRESS\" && // custom elements may use _value internally\n !tag.includes(\"-\")) {\n const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n const newValue = value == null ? (\n // #11647: value should be set as empty string for null and undefined,\n // but <input type=\"checkbox\"> should be set as 'on'.\n el.type === \"checkbox\" ? \"on\" : \"\"\n ) : String(value);\n if (oldValue !== newValue || !(\"_value\" in el)) {\n el.value = newValue;\n }\n if (value == null) {\n el.removeAttribute(key);\n }\n el._value = value;\n return;\n }\n let needRemove = false;\n if (value === \"\" || value == null) {\n const type = typeof el[key];\n if (type === \"boolean\") {\n value = includeBooleanAttr(value);\n } else if (value == null && type === \"string\") {\n value = \"\";\n needRemove = true;\n } else if (type === \"number\") {\n value = 0;\n needRemove = true;\n }\n }\n try {\n el[key] = value;\n } catch (e) {\n if (!!(process.env.NODE_ENV !== \"production\") && !needRemove) {\n warn(\n `Failed setting prop \"${key}\" on <${tag.toLowerCase()}>: value ${value} is invalid.`,\n e\n );\n }\n }\n needRemove && el.removeAttribute(attrName || key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n el.removeEventListener(event, handler, options);\n}\nconst veiKey = Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n const invokers = el[veiKey] || (el[veiKey] = {});\n const existingInvoker = invokers[rawName];\n if (nextValue && existingInvoker) {\n existingInvoker.value = !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue;\n } else {\n const [name, options] = parseName(rawName);\n if (nextValue) {\n const invoker = invokers[rawName] = createInvoker(\n !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue,\n instance\n );\n addEventListener(el, name, invoker, options);\n } else if (existingInvoker) {\n removeEventListener(el, name, existingInvoker, options);\n invokers[rawName] = void 0;\n }\n }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n let options;\n if (optionsModifierRE.test(name)) {\n options = {};\n let m;\n while (m = name.match(optionsModifierRE)) {\n name = name.slice(0, name.length - m[0].length);\n options[m[0].toLowerCase()] = true;\n }\n }\n const event = name[2] === \":\" ? name.slice(3) : hyphenate(name.slice(2));\n return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n const invoker = (e) => {\n if (!e._vts) {\n e._vts = Date.now();\n } else if (e._vts <= invoker.attached) {\n return;\n }\n callWithAsyncErrorHandling(\n patchStopImmediatePropagation(e, invoker.value),\n instance,\n 5,\n [e]\n );\n };\n invoker.value = initialValue;\n invoker.attached = getNow();\n return invoker;\n}\nfunction sanitizeEventValue(value, propName) {\n if (isFunction(value) || isArray(value)) {\n return value;\n }\n warn(\n `Wrong type passed as event handler to ${propName} - did you forget @ or : in front of your prop?\nExpected function or array of functions, received type ${typeof value}.`\n );\n return NOOP;\n}\nfunction patchStopImmediatePropagation(e, value) {\n if (isArray(value)) {\n const originalStop = e.stopImmediatePropagation;\n e.stopImmediatePropagation = () => {\n originalStop.call(e);\n e._stopped = true;\n };\n return value.map(\n (fn) => (e2) => !e2._stopped && fn && fn(e2)\n );\n } else {\n return value;\n }\n}\n\nconst isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n const isSVG = namespace === \"svg\";\n if (key === \"class\") {\n patchClass(el, nextValue, isSVG);\n } else if (key === \"style\") {\n patchStyle(el, prevValue, nextValue);\n } else if (isOn(key)) {\n if (!isModelListener(key)) {\n patchEvent(el, key, prevValue, nextValue, parentComponent);\n }\n } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n patchDOMProp(el, key, nextValue);\n if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\n }\n } else if (\n // #11081 force set props for possible async custom element\n el._isVueCE && (/[A-Z]/.test(key) || !isString(nextValue))\n ) {\n patchDOMProp(el, camelize$1(key), nextValue, parentComponent, key);\n } else {\n if (key === \"true-value\") {\n el._trueValue = nextValue;\n } else if (key === \"false-value\") {\n el._falseValue = nextValue;\n }\n patchAttr(el, key, nextValue, isSVG);\n }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n if (isSVG) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n return true;\n }\n if (key in el && isNativeOn(key) && isFunction(value)) {\n return true;\n }\n return false;\n }\n if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\") {\n return false;\n }\n if (key === \"form\") {\n return false;\n }\n if (key === \"list\" && el.tagName === \"INPUT\") {\n return false;\n }\n if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n return false;\n }\n if (key === \"width\" || key === \"height\") {\n const tag = el.tagName;\n if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n return false;\n }\n }\n if (isNativeOn(key) && isString(value)) {\n return false;\n }\n return key in el;\n}\n\nconst REMOVAL = {};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, _createApp) {\n const Comp = defineComponent(options, extraOptions);\n if (isPlainObject(Comp)) extend(Comp, extraOptions);\n class VueCustomElement extends VueElement {\n constructor(initialProps) {\n super(Comp, initialProps, _createApp);\n }\n }\n VueCustomElement.def = Comp;\n return VueCustomElement;\n}\n/*! #__NO_SIDE_EFFECTS__ */\nconst defineSSRCustomElement = /* @__NO_SIDE_EFFECTS__ */ (options, extraOptions) => {\n return /* @__PURE__ */ defineCustomElement(options, extraOptions, createSSRApp);\n};\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {\n};\nclass VueElement extends BaseClass {\n constructor(_def, _props = {}, _createApp = createApp) {\n super();\n this._def = _def;\n this._props = _props;\n this._createApp = _createApp;\n this._isVueCE = true;\n /**\n * @internal\n */\n this._instance = null;\n /**\n * @internal\n */\n this._app = null;\n /**\n * @internal\n */\n this._nonce = this._def.nonce;\n this._connected = false;\n this._resolved = false;\n this._numberProps = null;\n this._styleChildren = /* @__PURE__ */ new WeakSet();\n this._ob = null;\n if (this.shadowRoot && _createApp !== createApp) {\n this._root = this.shadowRoot;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && this.shadowRoot) {\n warn(\n `Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \\`defineSSRCustomElement\\`.`\n );\n }\n if (_def.shadowRoot !== false) {\n this.attachShadow({ mode: \"open\" });\n this._root = this.shadowRoot;\n } else {\n this._root = this;\n }\n }\n if (!this._def.__asyncLoader) {\n this._resolveProps(this._def);\n }\n }\n connectedCallback() {\n if (!this.isConnected) return;\n if (!this.shadowRoot) {\n this._parseSlots();\n }\n this._connected = true;\n let parent = this;\n while (parent = parent && (parent.parentNode || parent.host)) {\n if (parent instanceof VueElement) {\n this._parent = parent;\n break;\n }\n }\n if (!this._instance) {\n if (this._resolved) {\n this._setParent();\n this._update();\n } else {\n if (parent && parent._pendingResolve) {\n this._pendingResolve = parent._pendingResolve.then(() => {\n this._pendingResolve = void 0;\n this._resolveDef();\n });\n } else {\n this._resolveDef();\n }\n }\n }\n }\n _setParent(parent = this._parent) {\n if (parent) {\n this._instance.parent = parent._instance;\n this._instance.provides = parent._instance.provides;\n }\n }\n disconnectedCallback() {\n this._connected = false;\n nextTick(() => {\n if (!this._connected) {\n if (this._ob) {\n this._ob.disconnect();\n this._ob = null;\n }\n this._app && this._app.unmount();\n if (this._instance) this._instance.ce = void 0;\n this._app = this._instance = null;\n }\n });\n }\n /**\n * resolve inner component definition (handle possible async component)\n */\n _resolveDef() {\n if (this._pendingResolve) {\n return;\n }\n for (let i = 0; i < this.attributes.length; i++) {\n this._setAttr(this.attributes[i].name);\n }\n this._ob = new MutationObserver((mutations) => {\n for (const m of mutations) {\n this._setAttr(m.attributeName);\n }\n });\n this._ob.observe(this, { attributes: true });\n const resolve = (def, isAsync = false) => {\n this._resolved = true;\n this._pendingResolve = void 0;\n const { props, styles } = def;\n let numberProps;\n if (props && !isArray(props)) {\n for (const key in props) {\n const opt = props[key];\n if (opt === Number || opt && opt.type === Number) {\n if (key in this._props) {\n this._props[key] = toNumber(this._props[key]);\n }\n (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[camelize$1(key)] = true;\n }\n }\n }\n this._numberProps = numberProps;\n if (isAsync) {\n this._resolveProps(def);\n }\n if (this.shadowRoot) {\n this._applyStyles(styles);\n } else if (!!(process.env.NODE_ENV !== \"production\") && styles) {\n warn(\n \"Custom element style injection is not supported when using shadowRoot: false\"\n );\n }\n this._mount(def);\n };\n const asyncDef = this._def.__asyncLoader;\n if (asyncDef) {\n this._pendingResolve = asyncDef().then(\n (def) => resolve(this._def = def, true)\n );\n } else {\n resolve(this._def);\n }\n }\n _mount(def) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) && !def.name) {\n def.name = \"VueElement\";\n }\n this._app = this._createApp(def);\n if (def.configureApp) {\n def.configureApp(this._app);\n }\n this._app._ceVNode = this._createVNode();\n this._app.mount(this._root);\n const exposed = this._instance && this._instance.exposed;\n if (!exposed) return;\n for (const key in exposed) {\n if (!hasOwn(this, key)) {\n Object.defineProperty(this, key, {\n // unwrap ref to be consistent with public instance behavior\n get: () => unref(exposed[key])\n });\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`Exposed property \"${key}\" already exists on custom element.`);\n }\n }\n }\n _resolveProps(def) {\n const { props } = def;\n const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n for (const key of Object.keys(this)) {\n if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n this._setProp(key, this[key]);\n }\n }\n for (const key of declaredPropKeys.map(camelize$1)) {\n Object.defineProperty(this, key, {\n get() {\n return this._getProp(key);\n },\n set(val) {\n this._setProp(key, val, true, true);\n }\n });\n }\n }\n _setAttr(key) {\n if (key.startsWith(\"data-v-\")) return;\n const has = this.hasAttribute(key);\n let value = has ? this.getAttribute(key) : REMOVAL;\n const camelKey = camelize$1(key);\n if (has && this._numberProps && this._numberProps[camelKey]) {\n value = toNumber(value);\n }\n this._setProp(camelKey, value, false, true);\n }\n /**\n * @internal\n */\n _getProp(key) {\n return this._props[key];\n }\n /**\n * @internal\n */\n _setProp(key, val, shouldReflect = true, shouldUpdate = false) {\n if (val !== this._props[key]) {\n if (val === REMOVAL) {\n delete this._props[key];\n } else {\n this._props[key] = val;\n if (key === \"key\" && this._app) {\n this._app._ceVNode.key = val;\n }\n }\n if (shouldUpdate && this._instance) {\n this._update();\n }\n if (shouldReflect) {\n const ob = this._ob;\n ob && ob.disconnect();\n if (val === true) {\n this.setAttribute(hyphenate(key), \"\");\n } else if (typeof val === \"string\" || typeof val === \"number\") {\n this.setAttribute(hyphenate(key), val + \"\");\n } else if (!val) {\n this.removeAttribute(hyphenate(key));\n }\n ob && ob.observe(this, { attributes: true });\n }\n }\n }\n _update() {\n render(this._createVNode(), this._root);\n }\n _createVNode() {\n const baseProps = {};\n if (!this.shadowRoot) {\n baseProps.onVnodeMounted = baseProps.onVnodeUpdated = this._renderSlots.bind(this);\n }\n const vnode = createVNode(this._def, extend(baseProps, this._props));\n if (!this._instance) {\n vnode.ce = (instance) => {\n this._instance = instance;\n instance.ce = this;\n instance.isCE = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ceReload = (newStyles) => {\n if (this._styles) {\n this._styles.forEach((s) => this._root.removeChild(s));\n this._styles.length = 0;\n }\n this._applyStyles(newStyles);\n this._instance = null;\n this._update();\n };\n }\n const dispatch = (event, args) => {\n this.dispatchEvent(\n new CustomEvent(\n event,\n isPlainObject(args[0]) ? extend({ detail: args }, args[0]) : { detail: args }\n )\n );\n };\n instance.emit = (event, ...args) => {\n dispatch(event, args);\n if (hyphenate(event) !== event) {\n dispatch(hyphenate(event), args);\n }\n };\n this._setParent();\n };\n }\n return vnode;\n }\n _applyStyles(styles, owner) {\n if (!styles) return;\n if (owner) {\n if (owner === this._def || this._styleChildren.has(owner)) {\n return;\n }\n this._styleChildren.add(owner);\n }\n const nonce = this._nonce;\n for (let i = styles.length - 1; i >= 0; i--) {\n const s = document.createElement(\"style\");\n if (nonce) s.setAttribute(\"nonce\", nonce);\n s.textContent = styles[i];\n this.shadowRoot.prepend(s);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (owner) {\n if (owner.__hmrId) {\n if (!this._childStyles) this._childStyles = /* @__PURE__ */ new Map();\n let entry = this._childStyles.get(owner.__hmrId);\n if (!entry) {\n this._childStyles.set(owner.__hmrId, entry = []);\n }\n entry.push(s);\n }\n } else {\n (this._styles || (this._styles = [])).push(s);\n }\n }\n }\n }\n /**\n * Only called when shadowRoot is false\n */\n _parseSlots() {\n const slots = this._slots = {};\n let n;\n while (n = this.firstChild) {\n const slotName = n.nodeType === 1 && n.getAttribute(\"slot\") || \"default\";\n (slots[slotName] || (slots[slotName] = [])).push(n);\n this.removeChild(n);\n }\n }\n /**\n * Only called when shadowRoot is false\n */\n _renderSlots() {\n const outlets = (this._teleportTarget || this).querySelectorAll(\"slot\");\n const scopeId = this._instance.type.__scopeId;\n for (let i = 0; i < outlets.length; i++) {\n const o = outlets[i];\n const slotName = o.getAttribute(\"name\") || \"default\";\n const content = this._slots[slotName];\n const parent = o.parentNode;\n if (content) {\n for (const n of content) {\n if (scopeId && n.nodeType === 1) {\n const id = scopeId + \"-s\";\n const walker = document.createTreeWalker(n, 1);\n n.setAttribute(id, \"\");\n let child;\n while (child = walker.nextNode()) {\n child.setAttribute(id, \"\");\n }\n }\n parent.insertBefore(n, o);\n }\n } else {\n while (o.firstChild) parent.insertBefore(o.firstChild, o);\n }\n parent.removeChild(o);\n }\n }\n /**\n * @internal\n */\n _injectChildStyle(comp) {\n this._applyStyles(comp.styles, comp);\n }\n /**\n * @internal\n */\n _removeChildStyle(comp) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this._styleChildren.delete(comp);\n if (this._childStyles && comp.__hmrId) {\n const oldStyles = this._childStyles.get(comp.__hmrId);\n if (oldStyles) {\n oldStyles.forEach((s) => this._root.removeChild(s));\n oldStyles.length = 0;\n }\n }\n }\n }\n}\nfunction useHost(caller) {\n const instance = getCurrentInstance();\n const el = instance && instance.ce;\n if (el) {\n return el;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!instance) {\n warn(\n `${caller || \"useHost\"} called without an active component instance.`\n );\n } else {\n warn(\n `${caller || \"useHost\"} can only be used in components defined via defineCustomElement.`\n );\n }\n }\n return null;\n}\nfunction useShadowRoot() {\n const el = !!(process.env.NODE_ENV !== \"production\") ? useHost(\"useShadowRoot\") : useHost();\n return el && el.shadowRoot;\n}\n\nfunction useCssModule(name = \"$style\") {\n {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssModule must be called inside setup()`);\n return EMPTY_OBJ;\n }\n const modules = instance.type.__cssModules;\n if (!modules) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS modules injected.`);\n return EMPTY_OBJ;\n }\n const mod = modules[name];\n if (!mod) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS module named \"${name}\".`);\n return EMPTY_OBJ;\n }\n return mod;\n }\n}\n\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst moveCbKey = Symbol(\"_moveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nconst decorate = (t) => {\n delete t.props.mode;\n return t;\n};\nconst TransitionGroupImpl = /* @__PURE__ */ decorate({\n name: \"TransitionGroup\",\n props: /* @__PURE__ */ extend({}, TransitionPropsValidators, {\n tag: String,\n moveClass: String\n }),\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevChildren;\n let children;\n onUpdated(() => {\n if (!prevChildren.length) {\n return;\n }\n const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n if (!hasCSSTransform(\n prevChildren[0].el,\n instance.vnode.el,\n moveClass\n )) {\n return;\n }\n prevChildren.forEach(callPendingCbs);\n prevChildren.forEach(recordPosition);\n const movedChildren = prevChildren.filter(applyTranslation);\n forceReflow();\n movedChildren.forEach((c) => {\n const el = c.el;\n const style = el.style;\n addTransitionClass(el, moveClass);\n style.transform = style.webkitTransform = style.transitionDuration = \"\";\n const cb = el[moveCbKey] = (e) => {\n if (e && e.target !== el) {\n return;\n }\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener(\"transitionend\", cb);\n el[moveCbKey] = null;\n removeTransitionClass(el, moveClass);\n }\n };\n el.addEventListener(\"transitionend\", cb);\n });\n });\n return () => {\n const rawProps = toRaw(props);\n const cssTransitionProps = resolveTransitionProps(rawProps);\n let tag = rawProps.tag || Fragment;\n prevChildren = [];\n if (children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.el && child.el instanceof Element) {\n prevChildren.push(child);\n setTransitionHooks(\n child,\n resolveTransitionHooks(\n child,\n cssTransitionProps,\n state,\n instance\n )\n );\n positionMap.set(\n child,\n child.el.getBoundingClientRect()\n );\n }\n }\n }\n children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.key != null) {\n setTransitionHooks(\n child,\n resolveTransitionHooks(child, cssTransitionProps, state, instance)\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") && child.type !== Text) {\n warn(`<TransitionGroup> children must be keyed.`);\n }\n }\n return createVNode(tag, null, children);\n };\n }\n});\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n const el = c.el;\n if (el[moveCbKey]) {\n el[moveCbKey]();\n }\n if (el[enterCbKey]) {\n el[enterCbKey]();\n }\n}\nfunction recordPosition(c) {\n newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n const oldPos = positionMap.get(c);\n const newPos = newPositionMap.get(c);\n const dx = oldPos.left - newPos.left;\n const dy = oldPos.top - newPos.top;\n if (dx || dy) {\n const s = c.el.style;\n s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n s.transitionDuration = \"0s\";\n return c;\n }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n const clone = el.cloneNode();\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.forEach((cls) => {\n cls.split(/\\s+/).forEach((c) => c && clone.classList.remove(c));\n });\n }\n moveClass.split(/\\s+/).forEach((c) => c && clone.classList.add(c));\n clone.style.display = \"none\";\n const container = root.nodeType === 1 ? root : root.parentNode;\n container.appendChild(clone);\n const { hasTransform } = getTransitionInfo(clone);\n container.removeChild(clone);\n return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n const target = e.target;\n if (target.composing) {\n target.composing = false;\n target.dispatchEvent(new Event(\"input\"));\n }\n}\nconst assignKey = Symbol(\"_assign\");\nconst vModelText = {\n created(el, { modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n if (e.target.composing) return;\n let domValue = el.value;\n if (trim) {\n domValue = domValue.trim();\n }\n if (castToNumber) {\n domValue = looseToNumber(domValue);\n }\n el[assignKey](domValue);\n });\n if (trim) {\n addEventListener(el, \"change\", () => {\n el.value = el.value.trim();\n });\n }\n if (!lazy) {\n addEventListener(el, \"compositionstart\", onCompositionStart);\n addEventListener(el, \"compositionend\", onCompositionEnd);\n addEventListener(el, \"change\", onCompositionEnd);\n }\n },\n // set value on mounted so it's after min/max for type=\"range\"\n mounted(el, { value }) {\n el.value = value == null ? \"\" : value;\n },\n beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (el.composing) return;\n const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? looseToNumber(el.value) : el.value;\n const newValue = value == null ? \"\" : value;\n if (elValue === newValue) {\n return;\n }\n if (document.activeElement === el && el.type !== \"range\") {\n if (lazy && value === oldValue) {\n return;\n }\n if (trim && el.value.trim() === newValue) {\n return;\n }\n }\n el.value = newValue;\n }\n};\nconst vModelCheckbox = {\n // #4096 array checkboxes need to be deep traversed\n deep: true,\n created(el, _, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n const modelValue = el._modelValue;\n const elementValue = getValue(el);\n const checked = el.checked;\n const assign = el[assignKey];\n if (isArray(modelValue)) {\n const index = looseIndexOf(modelValue, elementValue);\n const found = index !== -1;\n if (checked && !found) {\n assign(modelValue.concat(elementValue));\n } else if (!checked && found) {\n const filtered = [...modelValue];\n filtered.splice(index, 1);\n assign(filtered);\n }\n } else if (isSet(modelValue)) {\n const cloned = new Set(modelValue);\n if (checked) {\n cloned.add(elementValue);\n } else {\n cloned.delete(elementValue);\n }\n assign(cloned);\n } else {\n assign(getCheckboxValue(el, checked));\n }\n });\n },\n // set initial checked on mount to wait for true-value/false-value\n mounted: setChecked,\n beforeUpdate(el, binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n setChecked(el, binding, vnode);\n }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n el._modelValue = value;\n let checked;\n if (isArray(value)) {\n checked = looseIndexOf(value, vnode.props.value) > -1;\n } else if (isSet(value)) {\n checked = value.has(vnode.props.value);\n } else {\n if (value === oldValue) return;\n checked = looseEqual(value, getCheckboxValue(el, true));\n }\n if (el.checked !== checked) {\n el.checked = checked;\n }\n}\nconst vModelRadio = {\n created(el, { value }, vnode) {\n el.checked = looseEqual(value, vnode.props.value);\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n el[assignKey](getValue(el));\n });\n },\n beforeUpdate(el, { value, oldValue }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (value !== oldValue) {\n el.checked = looseEqual(value, vnode.props.value);\n }\n }\n};\nconst vModelSelect = {\n // <select multiple> value need to be deep traversed\n deep: true,\n created(el, { value, modifiers: { number } }, vnode) {\n const isSetModel = isSet(value);\n addEventListener(el, \"change\", () => {\n const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map(\n (o) => number ? looseToNumber(getValue(o)) : getValue(o)\n );\n el[assignKey](\n el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]\n );\n el._assigning = true;\n nextTick(() => {\n el._assigning = false;\n });\n });\n el[assignKey] = getModelAssigner(vnode);\n },\n // set value in mounted & updated because <select> relies on its children\n // <option>s.\n mounted(el, { value }) {\n setSelected(el, value);\n },\n beforeUpdate(el, _binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n },\n updated(el, { value }) {\n if (!el._assigning) {\n setSelected(el, value);\n }\n }\n};\nfunction setSelected(el, value) {\n const isMultiple = el.multiple;\n const isArrayValue = isArray(value);\n if (isMultiple && !isArrayValue && !isSet(value)) {\n !!(process.env.NODE_ENV !== \"production\") && warn(\n `<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(value).slice(8, -1)}.`\n );\n return;\n }\n for (let i = 0, l = el.options.length; i < l; i++) {\n const option = el.options[i];\n const optionValue = getValue(option);\n if (isMultiple) {\n if (isArrayValue) {\n const optionType = typeof optionValue;\n if (optionType === \"string\" || optionType === \"number\") {\n option.selected = value.some((v) => String(v) === String(optionValue));\n } else {\n option.selected = looseIndexOf(value, optionValue) > -1;\n }\n } else {\n option.selected = value.has(optionValue);\n }\n } else if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) el.selectedIndex = i;\n return;\n }\n }\n if (!isMultiple && el.selectedIndex !== -1) {\n el.selectedIndex = -1;\n }\n}\nfunction getValue(el) {\n return \"_value\" in el ? el._value : el.value;\n}\nfunction getCheckboxValue(el, checked) {\n const key = checked ? \"_trueValue\" : \"_falseValue\";\n return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n created(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"created\");\n },\n mounted(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"mounted\");\n },\n beforeUpdate(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"beforeUpdate\");\n },\n updated(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"updated\");\n }\n};\nfunction resolveDynamicModel(tagName, type) {\n switch (tagName) {\n case \"SELECT\":\n return vModelSelect;\n case \"TEXTAREA\":\n return vModelText;\n default:\n switch (type) {\n case \"checkbox\":\n return vModelCheckbox;\n case \"radio\":\n return vModelRadio;\n default:\n return vModelText;\n }\n }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n const modelToUse = resolveDynamicModel(\n el.tagName,\n vnode.props && vnode.props.type\n );\n const fn = modelToUse[hook];\n fn && fn(el, binding, vnode, prevVNode);\n}\nfunction initVModelForSSR() {\n vModelText.getSSRProps = ({ value }) => ({ value });\n vModelRadio.getSSRProps = ({ value }, vnode) => {\n if (vnode.props && looseEqual(vnode.props.value, value)) {\n return { checked: true };\n }\n };\n vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n if (isArray(value)) {\n if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\n return { checked: true };\n }\n } else if (isSet(value)) {\n if (vnode.props && value.has(vnode.props.value)) {\n return { checked: true };\n }\n } else if (value) {\n return { checked: true };\n }\n };\n vModelDynamic.getSSRProps = (binding, vnode) => {\n if (typeof vnode.type !== \"string\") {\n return;\n }\n const modelToUse = resolveDynamicModel(\n // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n vnode.type.toUpperCase(),\n vnode.props && vnode.props.type\n );\n if (modelToUse.getSSRProps) {\n return modelToUse.getSSRProps(binding, vnode);\n }\n };\n}\n\nconst systemModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\nconst modifierGuards = {\n stop: (e) => e.stopPropagation(),\n prevent: (e) => e.preventDefault(),\n self: (e) => e.target !== e.currentTarget,\n ctrl: (e) => !e.ctrlKey,\n shift: (e) => !e.shiftKey,\n alt: (e) => !e.altKey,\n meta: (e) => !e.metaKey,\n left: (e) => \"button\" in e && e.button !== 0,\n middle: (e) => \"button\" in e && e.button !== 1,\n right: (e) => \"button\" in e && e.button !== 2,\n exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m))\n};\nconst withModifiers = (fn, modifiers) => {\n const cache = fn._withMods || (fn._withMods = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = (event, ...args) => {\n for (let i = 0; i < modifiers.length; i++) {\n const guard = modifierGuards[modifiers[i]];\n if (guard && guard(event, modifiers)) return;\n }\n return fn(event, ...args);\n });\n};\nconst keyNames = {\n esc: \"escape\",\n space: \" \",\n up: \"arrow-up\",\n left: \"arrow-left\",\n right: \"arrow-right\",\n down: \"arrow-down\",\n delete: \"backspace\"\n};\nconst withKeys = (fn, modifiers) => {\n const cache = fn._withKeys || (fn._withKeys = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = (event) => {\n if (!(\"key\" in event)) {\n return;\n }\n const eventKey = hyphenate(event.key);\n if (modifiers.some(\n (k) => k === eventKey || keyNames[k] === eventKey\n )) {\n return fn(event);\n }\n });\n};\n\nconst rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps);\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n return renderer || (renderer = createRenderer(rendererOptions));\n}\nfunction ensureHydrationRenderer() {\n renderer = enabledHydration ? renderer : createHydrationRenderer(rendererOptions);\n enabledHydration = true;\n return renderer;\n}\nconst render = (...args) => {\n ensureRenderer().render(...args);\n};\nconst hydrate = (...args) => {\n ensureHydrationRenderer().hydrate(...args);\n};\nconst createApp = (...args) => {\n const app = ensureRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (!container) return;\n const component = app._component;\n if (!isFunction(component) && !component.render && !component.template) {\n component.template = container.innerHTML;\n }\n if (container.nodeType === 1) {\n container.textContent = \"\";\n }\n const proxy = mount(container, false, resolveRootNamespace(container));\n if (container instanceof Element) {\n container.removeAttribute(\"v-cloak\");\n container.setAttribute(\"data-v-app\", \"\");\n }\n return proxy;\n };\n return app;\n};\nconst createSSRApp = (...args) => {\n const app = ensureHydrationRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (container) {\n return mount(container, true, resolveRootNamespace(container));\n }\n };\n return app;\n};\nfunction resolveRootNamespace(container) {\n if (container instanceof SVGElement) {\n return \"svg\";\n }\n if (typeof MathMLElement === \"function\" && container instanceof MathMLElement) {\n return \"mathml\";\n }\n}\nfunction injectNativeTagCheck(app) {\n Object.defineProperty(app.config, \"isNativeTag\", {\n value: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(tag),\n writable: false\n });\n}\nfunction injectCompilerOptionsCheck(app) {\n if (isRuntimeOnly()) {\n const isCustomElement = app.config.isCustomElement;\n Object.defineProperty(app.config, \"isCustomElement\", {\n get() {\n return isCustomElement;\n },\n set() {\n warn(\n `The \\`isCustomElement\\` config option is deprecated. Use \\`compilerOptions.isCustomElement\\` instead.`\n );\n }\n });\n const compilerOptions = app.config.compilerOptions;\n const msg = `The \\`compilerOptions\\` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka \"full build\"). Since you are using the runtime-only build, \\`compilerOptions\\` must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\n- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc`;\n Object.defineProperty(app.config, \"compilerOptions\", {\n get() {\n warn(msg);\n return compilerOptions;\n },\n set() {\n warn(msg);\n }\n });\n }\n}\nfunction normalizeContainer(container) {\n if (isString(container)) {\n const res = document.querySelector(container);\n if (!!(process.env.NODE_ENV !== \"production\") && !res) {\n warn(\n `Failed to mount app: mount target selector \"${container}\" returned null.`\n );\n }\n return res;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && window.ShadowRoot && container instanceof window.ShadowRoot && container.mode === \"closed\") {\n warn(\n `mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`\n );\n }\n return container;\n}\nlet ssrDirectiveInitialized = false;\nconst initDirectivesForSSR = () => {\n if (!ssrDirectiveInitialized) {\n ssrDirectiveInitialized = true;\n initVModelForSSR();\n initVShowForSSR();\n }\n} ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, render, useCssModule, useCssVars, useHost, useShadowRoot, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n","/**\n* @vue/shared v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n};\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `HOISTED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","function createCommonjsModule(fn, basedir, module) {\n\treturn module = {\n\t\tpath: basedir,\n\t\texports: {},\n\t\trequire: function (path, base) {\n\t\t\treturn commonjsRequire(path, (base === undefined || base === null) ? module.path : base);\n\t\t}\n\t}, fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');\n}\n\nvar _global = createCommonjsModule(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core = createCommonjsModule(function (module) {\nvar core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\n\nvar _isObject = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject = function (it) {\n if (!_isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors = !_fails(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document$1 = _global.document;\n// typeof document.createElement is 'object' in old IE\nvar is = _isObject(document$1) && _isObject(document$1.createElement);\nvar _domCreate = function (it) {\n return is ? document$1.createElement(it) : {};\n};\n\nvar _ie8DomDefine = !_descriptors && !_fails(function () {\n return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive = function (it, S) {\n if (!_isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP = Object.defineProperty;\n\nvar f$2 = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject(O);\n P = _toPrimitive(P, true);\n _anObject(Attributes);\n if (_ie8DomDefine) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\nvar _objectDp = {\n\tf: f$2\n};\n\nvar _propertyDesc = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide = _descriptors ? function (object, key, value) {\n return _objectDp.f(object, key, _propertyDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar hasOwnProperty = {}.hasOwnProperty;\nvar _has = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\nvar id = 0;\nvar px = Math.random();\nvar _uid = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\nvar _shared = createCommonjsModule(function (module) {\nvar SHARED = '__core-js_shared__';\nvar store = _global[SHARED] || (_global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: _core.version,\n mode: 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n});\n\nvar _functionToString = _shared('native-function-to-string', Function.toString);\n\nvar _redefine = createCommonjsModule(function (module) {\nvar SRC = _uid('src');\n\nvar TO_STRING = 'toString';\nvar TPL = ('' + _functionToString).split(TO_STRING);\n\n_core.inspectSource = function (it) {\n return _functionToString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) _has(val, 'name') || _hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === _global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n _hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n _hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || _functionToString.call(this);\n});\n});\n\nvar _aFunction = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx = function (fn, that, length) {\n _aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\nvar PROTOTYPE$1 = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE$1];\n var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\n var expProto = exports[PROTOTYPE$1] || (exports[PROTOTYPE$1] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\n // extend global\n if (target) _redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) _hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\n_global.core = _core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nvar _export = $export;\n\nvar toString = {}.toString;\n\nvar _cof = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\n// eslint-disable-next-line no-prototype-builtins\nvar _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return _cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n// 7.2.1 RequireObjectCoercible(argument)\nvar _defined = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\n\n\nvar _toIobject = function (it) {\n return _iobject(_defined(it));\n};\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nvar _toInteger = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n// 7.1.15 ToLength\n\nvar min$1 = Math.min;\nvar _toLength = function (it) {\n return it > 0 ? min$1(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\nvar max = Math.max;\nvar min = Math.min;\nvar _toAbsoluteIndex = function (index, length) {\n index = _toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n// false -> Array#indexOf\n// true -> Array#includes\n\n\n\nvar _arrayIncludes = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = _toIobject($this);\n var length = _toLength(O.length);\n var index = _toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nvar _wks = createCommonjsModule(function (module) {\nvar store = _shared('wks');\n\nvar Symbol = _global.Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n});\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = _wks('unscopables');\nvar ArrayProto$1 = Array.prototype;\nif (ArrayProto$1[UNSCOPABLES] == undefined) _hide(ArrayProto$1, UNSCOPABLES, {});\nvar _addToUnscopables = function (key) {\n ArrayProto$1[UNSCOPABLES][key] = true;\n};\n\n// https://github.com/tc39/Array.prototype.includes\n\nvar $includes = _arrayIncludes(true);\n\n_export(_export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n_addToUnscopables('includes');\n\n_core.Array.includes;\n\nvar shared = _shared('keys');\n\nvar _sharedKey = function (key) {\n return shared[key] || (shared[key] = _uid(key));\n};\n\nvar arrayIndexOf = _arrayIncludes(false);\nvar IE_PROTO$2 = _sharedKey('IE_PROTO');\n\nvar _objectKeysInternal = function (object, names) {\n var O = _toIobject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO$2) _has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (_has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n// IE 8- don't enum bug keys\nvar _enumBugKeys = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\n\n\n\nvar _objectKeys = Object.keys || function keys(O) {\n return _objectKeysInternal(O, _enumBugKeys);\n};\n\nvar f$1 = Object.getOwnPropertySymbols;\n\nvar _objectGops = {\n\tf: f$1\n};\n\nvar f = {}.propertyIsEnumerable;\n\nvar _objectPie = {\n\tf: f\n};\n\n// 7.1.13 ToObject(argument)\n\nvar _toObject = function (it) {\n return Object(_defined(it));\n};\n\n// 19.1.2.1 Object.assign(target, source, ...)\n\n\n\n\n\n\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nvar _objectAssign = !$assign || _fails(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = _toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = _objectGops.f;\n var isEnum = _objectPie.f;\n while (aLen > index) {\n var S = _iobject(arguments[index++]);\n var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!_descriptors || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n\n// 19.1.3.1 Object.assign(target, source)\n\n\n_export(_export.S + _export.F, 'Object', { assign: _objectAssign });\n\n_core.Object.assign;\n\nvar isEnum = _objectPie.f;\nvar _objectToArray = function (isEntries) {\n return function (it) {\n var O = _toIobject(it);\n var keys = _objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!_descriptors || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\n// https://github.com/tc39/proposal-object-values-entries\n\nvar $entries = _objectToArray(true);\n\n_export(_export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n_core.Object.entries;\n\n// https://github.com/tc39/proposal-object-values-entries\n\nvar $values = _objectToArray(false);\n\n_export(_export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n_core.Object.values;\n\n// 7.2.8 IsRegExp(argument)\n\n\nvar MATCH$1 = _wks('match');\nvar _isRegexp = function (it) {\n var isRegExp;\n return _isObject(it) && ((isRegExp = it[MATCH$1]) !== undefined ? !!isRegExp : _cof(it) == 'RegExp');\n};\n\n// helper for String#{startsWith, endsWith, includes}\n\n\n\nvar _stringContext = function (that, searchString, NAME) {\n if (_isRegexp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(_defined(that));\n};\n\nvar MATCH = _wks('match');\nvar _failsIsRegexp = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n_export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = _stringContext(this, searchString, STARTS_WITH);\n var index = _toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n\n_core.String.startsWith;\n\n// true -> String#at\n// false -> String#codePointAt\nvar _stringAt = function (TO_STRING) {\n return function (that, pos) {\n var s = String(_defined(that));\n var i = _toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\nvar _iterators = {};\n\nvar _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {\n _anObject(O);\n var keys = _objectKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) _objectDp.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\nvar document = _global.document;\nvar _html = document && document.documentElement;\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\n\n\nvar IE_PROTO$1 = _sharedKey('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = _domCreate('iframe');\n var i = _enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n _html.appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][_enumBugKeys[i]];\n return createDict();\n};\n\nvar _objectCreate = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = _anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO$1] = O;\n } else result = createDict();\n return Properties === undefined ? result : _objectDps(result, Properties);\n};\n\nvar def = _objectDp.f;\n\nvar TAG$1 = _wks('toStringTag');\n\nvar _setToStringTag = function (it, tag, stat) {\n if (it && !_has(it = stat ? it : it.prototype, TAG$1)) def(it, TAG$1, { configurable: true, value: tag });\n};\n\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n_hide(IteratorPrototype, _wks('iterator'), function () { return this; });\n\nvar _iterCreate = function (Constructor, NAME, next) {\n Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc(1, next) });\n _setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n\n\nvar IE_PROTO = _sharedKey('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nvar _objectGpo = Object.getPrototypeOf || function (O) {\n O = _toObject(O);\n if (_has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\nvar ITERATOR$3 = _wks('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nvar _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n _iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR$3] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = _objectGpo($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n _setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (typeof IteratorPrototype[ITERATOR$3] != 'function') _hide(IteratorPrototype, ITERATOR$3, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((BUGGY || VALUES_BUG || !proto[ITERATOR$3])) {\n _hide(proto, ITERATOR$3, $default);\n }\n // Plug for library\n _iterators[NAME] = $default;\n _iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) _redefine(proto, key, methods[key]);\n } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\nvar $at = _stringAt(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n_iterDefine(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\n// call something on iterator step with safe closing on error\n\nvar _iterCall = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(_anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) _anObject(ret.call(iterator));\n throw e;\n }\n};\n\n// check on default Array iterator\n\nvar ITERATOR$2 = _wks('iterator');\nvar ArrayProto = Array.prototype;\n\nvar _isArrayIter = function (it) {\n return it !== undefined && (_iterators.Array === it || ArrayProto[ITERATOR$2] === it);\n};\n\nvar _createProperty = function (object, index, value) {\n if (index in object) _objectDp.f(object, index, _propertyDesc(0, value));\n else object[index] = value;\n};\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\n\nvar TAG = _wks('toStringTag');\n// ES3 wrong here\nvar ARG = _cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nvar _classof = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? _cof(O)\n // ES3 arguments fallback\n : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\nvar ITERATOR$1 = _wks('iterator');\n\nvar core_getIteratorMethod = _core.getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR$1]\n || it['@@iterator']\n || _iterators[_classof(it)];\n};\n\nvar ITERATOR = _wks('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nvar _iterDetect = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n_export(_export.S + _export.F * !_iterDetect(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = _toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = core_getIteratorMethod(O);\n var length, result, step, iterator;\n if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = _toLength(O.length);\n for (result = new C(length); length > index; index++) {\n _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n_core.Array.from;\n\n// 7.2.2 IsArray(argument)\n\nvar _isArray = Array.isArray || function isArray(arg) {\n return _cof(arg) == 'Array';\n};\n\nvar SPECIES = _wks('species');\n\nvar _arraySpeciesConstructor = function (original) {\n var C;\n if (_isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;\n if (_isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\n\n\nvar _arraySpeciesCreate = function (original, length) {\n return new (_arraySpeciesConstructor(original))(length);\n};\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\n\n\n\n\n\nvar _arrayMethods = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || _arraySpeciesCreate;\n return function ($this, callbackfn, that) {\n var O = _toObject($this);\n var self = _iobject(O);\n var f = _ctx(callbackfn, that, 3);\n var length = _toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\n\nvar $find = _arrayMethods(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n_export(_export.P + _export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n_addToUnscopables(KEY);\n\n_core.Array.find;\n\nclass Container {\r\n /**\r\n * Register the store instance.\r\n */\r\n static register(store) {\r\n this.store = store;\r\n }\r\n}\n\nvar install = (database, options = {}) => {\r\n const namespace = options.namespace || 'entities';\r\n return (store) => {\r\n database.start(store, namespace);\r\n Container.register(store);\r\n };\r\n};\n\n/**\r\n * Check if the given value is the type of array.\r\n */\r\nfunction isArray(value) {\r\n return Array.isArray(value);\r\n}\r\n/**\r\n * Gets the size of collection by returning its length for array-like values\r\n * or the number of own enumerable string keyed properties for objects.\r\n */\r\nfunction size(collection) {\r\n return isArray(collection)\r\n ? collection.length\r\n : Object.keys(collection).length;\r\n}\r\n/**\r\n * Check if the given array or object is empty.\r\n */\r\nfunction isEmpty(collection) {\r\n return size(collection) === 0;\r\n}\r\n/**\r\n * Iterates over own enumerable string keyed properties of an object and\r\n * invokes `iteratee` for each property.\r\n */\r\nfunction forOwn(object, iteratee) {\r\n Object.keys(object).forEach((key) => iteratee(object[key], key, object));\r\n}\r\n/**\r\n * Creates an array of values by running each element in collection thru\r\n * iteratee. The iteratee is invoked with three arguments:\r\n * (value, key, collection).\r\n */\r\nfunction map(object, iteratee) {\r\n const result = [];\r\n for (const key in object) {\r\n result.push(iteratee(object[key], key, object));\r\n }\r\n return result;\r\n}\r\n/**\r\n * Creates an object with the same keys as object and values generated by\r\n * running each own enumerable string keyed property of object thru\r\n * iteratee. The iteratee is invoked with three arguments:\r\n * (value, key, object).\r\n */\r\nfunction mapValues(object, iteratee) {\r\n const newObject = Object.assign({}, object);\r\n return Object.keys(object).reduce((records, key) => {\r\n records[key] = iteratee(object[key], key, object);\r\n return records;\r\n }, newObject);\r\n}\r\n/**\r\n * Creates an object composed of keys generated from the results of running\r\n * each element of collection by the given key.\r\n */\r\nfunction keyBy(collection, key) {\r\n const o = {};\r\n collection.forEach((item) => {\r\n o[item[key]] = item;\r\n });\r\n return o;\r\n}\r\n/**\r\n * Creates an array of elements, sorted in specified order by the results\r\n * of running each element in a collection thru each iteratee.\r\n */\r\nfunction orderBy(collection, iteratees, directions) {\r\n let index = -1;\r\n const result = collection.map((value) => {\r\n const criteria = iteratees.map((iteratee) => {\r\n return typeof iteratee === 'function' ? iteratee(value) : value[iteratee];\r\n });\r\n return { criteria, index: ++index, value };\r\n });\r\n return baseSortBy(result, (object, other) => {\r\n return compareMultiple(object, other, directions);\r\n });\r\n}\r\n/**\r\n * Creates an array of elements, sorted in ascending order by the results of\r\n * running each element in a collection thru each iteratee. This method\r\n * performs a stable sort, that is, it preserves the original sort order\r\n * of equal elements.\r\n */\r\nfunction baseSortBy(array, comparer) {\r\n let length = array.length;\r\n array.sort(comparer);\r\n const newArray = [];\r\n while (length--) {\r\n newArray[length] = array[length].value;\r\n }\r\n return newArray;\r\n}\r\n/**\r\n * Used by `orderBy` to compare multiple properties of a value to another\r\n * and stable sort them.\r\n *\r\n * If `orders` is unspecified, all values are sorted in ascending order.\r\n * Otherwise, specify an order of \"desc\" for descending or \"asc\" for\r\n * ascending sort order of corresponding values.\r\n */\r\nfunction compareMultiple(object, other, orders) {\r\n let index = -1;\r\n const objCriteria = object.criteria;\r\n const othCriteria = other.criteria;\r\n const length = objCriteria.length;\r\n const ordersLength = orders.length;\r\n while (++index < length) {\r\n const result = compareAscending(objCriteria[index], othCriteria[index]);\r\n if (result) {\r\n if (index >= ordersLength) {\r\n return result;\r\n }\r\n const order = orders[index];\r\n return result * (order === 'desc' ? -1 : 1);\r\n }\r\n }\r\n return object.index - other.index;\r\n}\r\n/**\r\n * Compares values to sort them in ascending order.\r\n */\r\nfunction compareAscending(value, other) {\r\n if (value !== other) {\r\n const valIsDefined = value !== undefined;\r\n const valIsNull = value === null;\r\n const valIsReflexive = value === value;\r\n const othIsDefined = other !== undefined;\r\n const othIsNull = other === null;\r\n const othIsReflexive = other === other;\r\n if (typeof value !== 'number' || typeof other !== 'number') {\r\n value = String(value);\r\n other = String(other);\r\n }\r\n if ((!othIsNull && value > other) ||\r\n (valIsNull && othIsDefined && othIsReflexive) ||\r\n (!valIsDefined && othIsReflexive) ||\r\n !valIsReflexive) {\r\n return 1;\r\n }\r\n if ((!valIsNull && value < other) ||\r\n (othIsNull && valIsDefined && valIsReflexive) ||\r\n (!othIsDefined && valIsReflexive) ||\r\n !othIsReflexive) {\r\n return -1;\r\n }\r\n }\r\n return 0;\r\n}\r\n/**\r\n * Creates an object composed of keys generated from the results of running\r\n * each element of collection thru iteratee.\r\n */\r\nfunction groupBy(collection, iteratee) {\r\n return collection.reduce((records, record) => {\r\n const key = iteratee(record);\r\n if (records[key] === undefined) {\r\n records[key] = [];\r\n }\r\n records[key].push(record);\r\n return records;\r\n }, {});\r\n}\r\n/**\r\n * Deep clone the given target object.\r\n */\r\nfunction cloneDeep(target) {\r\n if (target === null) {\r\n return target;\r\n }\r\n if (isArray(target)) {\r\n const cp = [];\r\n target.forEach((v) => cp.push(v));\r\n return cp.map((n) => cloneDeep(n));\r\n }\r\n if (typeof target === 'object' && target !== {}) {\r\n const cp = { ...target };\r\n Object.keys(cp).forEach((k) => (cp[k] = cloneDeep(cp[k])));\r\n return cp;\r\n }\r\n return target;\r\n}\r\nvar Utils = {\r\n isArray,\r\n size,\r\n isEmpty,\r\n forOwn,\r\n map,\r\n mapValues,\r\n keyBy,\r\n orderBy,\r\n groupBy,\r\n cloneDeep\r\n};\n\nclass Uid$1 {\r\n /**\r\n * Generate an UUID.\r\n */\r\n static make() {\r\n this.count++;\r\n return `${this.prefix}${this.count}`;\r\n }\r\n /**\r\n * Reset the count to 0.\r\n */\r\n static reset() {\r\n this.count = 0;\r\n }\r\n}\r\n/**\r\n * Count to create a unique id.\r\n */\r\nUid$1.count = 0;\r\n/**\r\n * Prefix string to be used for the id.\r\n */\r\nUid$1.prefix = '$uid';\n\nclass Attribute {\r\n /**\r\n * Create a new attribute instance.\r\n */\r\n constructor(model) {\r\n this.model = model;\r\n }\r\n}\n\nclass Type extends Attribute {\r\n /**\r\n * Create a new type instance.\r\n */\r\n constructor(model, value, mutator) {\r\n super(model); /* istanbul ignore next */\r\n /**\r\n * Whether if the attribute can accept `null` as a value.\r\n */\r\n this.isNullable = false;\r\n this.value = value;\r\n this.mutator = mutator;\r\n }\r\n /**\r\n * Set `isNullable` to be `true`.\r\n */\r\n nullable() {\r\n this.isNullable = true;\r\n return this;\r\n }\r\n /**\r\n * Mutate the given value by mutator.\r\n */\r\n mutate(value, key) {\r\n const mutator = this.mutator || this.model.mutators()[key];\r\n return mutator ? mutator(value) : value;\r\n }\r\n}\n\nclass Attr extends Type {\r\n /**\r\n * Create a new attr instance.\r\n */\r\n constructor(model, value, mutator) {\r\n /* istanbul ignore next */\r\n super(model, value, mutator);\r\n }\r\n /**\r\n * Make value to be set to model property. This method is used when\r\n * instantiating a model or creating a plain object from a model.\r\n */\r\n make(value, _parent, key) {\r\n value = value !== undefined ? value : this.value;\r\n // Default Value might be a function (taking no parameter).\r\n let localValue = value;\r\n if (typeof value === 'function') {\r\n localValue = value();\r\n }\r\n return this.mutate(localValue, key);\r\n }\r\n}\n\nclass String$1 extends Type {\r\n /**\r\n * Create a new string instance.\r\n */\r\n constructor(model, value, mutator) {\r\n /* istanbul ignore next */\r\n super(model, value, mutator);\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, key) {\r\n return this.mutate(this.fix(value), key);\r\n }\r\n /**\r\n * Convert given value to the string.\r\n */\r\n fix(value) {\r\n if (value === undefined) {\r\n return this.value;\r\n }\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n if (value === null && this.isNullable) {\r\n return value;\r\n }\r\n return value + '';\r\n }\r\n}\n\nclass Number extends Type {\r\n /**\r\n * Create a new number instance.\r\n */\r\n constructor(model, value, mutator) {\r\n /* istanbul ignore next */\r\n super(model, value, mutator);\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, key) {\r\n return this.mutate(this.fix(value), key);\r\n }\r\n /**\r\n * Transform given data to the number.\r\n */\r\n fix(value) {\r\n if (value === undefined) {\r\n return this.value;\r\n }\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n if (typeof value === 'string') {\r\n return parseFloat(value);\r\n }\r\n if (typeof value === 'boolean') {\r\n return value ? 1 : 0;\r\n }\r\n if (value === null && this.isNullable) {\r\n return value;\r\n }\r\n return 0;\r\n }\r\n}\n\nclass Boolean extends Type {\r\n /**\r\n * Create a new number instance.\r\n */\r\n constructor(model, value, mutator) {\r\n /* istanbul ignore next */\r\n super(model, value, mutator);\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, key) {\r\n return this.mutate(this.fix(value), key);\r\n }\r\n /**\r\n * Transform given data to the boolean.\r\n */\r\n fix(value) {\r\n if (value === undefined) {\r\n return this.value;\r\n }\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n if (typeof value === 'string') {\r\n if (value.length === 0) {\r\n return false;\r\n }\r\n const int = parseInt(value, 0);\r\n return isNaN(int) ? true : !!int;\r\n }\r\n if (typeof value === 'number') {\r\n return !!value;\r\n }\r\n if (value === null && this.isNullable) {\r\n return value;\r\n }\r\n return false;\r\n }\r\n}\n\nclass Uid extends Type {\r\n /**\r\n * Create a new uid instance.\r\n */\r\n constructor(model, value) {\r\n /* istanbul ignore next */\r\n super(model, value);\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value) {\r\n if (typeof value === 'number' || typeof value === 'string') {\r\n return value;\r\n }\r\n if (typeof this.value === 'function') {\r\n return this.value();\r\n }\r\n return Uid$1.make();\r\n }\r\n}\n\nclass Relation extends Attribute {\r\n /**\r\n * Get relation query instance with constraint attached.\r\n */\r\n getRelation(query, name, constraints) {\r\n const relation = query.newQuery(name);\r\n constraints.forEach((constraint) => {\r\n constraint(relation);\r\n });\r\n return relation;\r\n }\r\n /**\r\n * Get specified keys from the given collection.\r\n */\r\n getKeys(collection, key) {\r\n return collection.reduce((models, model) => {\r\n if (model[key] === null || model[key] === undefined) {\r\n return models;\r\n }\r\n models.push(model[key]);\r\n return models;\r\n }, []);\r\n }\r\n /**\r\n * Create a new indexed map for the single relation by specified key.\r\n */\r\n mapSingleRelations(collection, key) {\r\n const relations = new Map();\r\n collection.forEach((record) => {\r\n const id = record[key];\r\n !relations.get(id) && relations.set(id, record);\r\n });\r\n return relations;\r\n }\r\n /**\r\n * Create a new indexed map for the many relation by specified key.\r\n */\r\n mapManyRelations(collection, key) {\r\n const relations = new Map();\r\n collection.forEach((record) => {\r\n const id = record[key];\r\n let ownerKeys = relations.get(id);\r\n if (!ownerKeys) {\r\n ownerKeys = [];\r\n relations.set(id, ownerKeys);\r\n }\r\n ownerKeys.push(record);\r\n });\r\n return relations;\r\n }\r\n /**\r\n * Create a new indexed map for relations with order constraints.\r\n */\r\n mapRelationsByOrders(collection, relations, ownerKey, relationKey) {\r\n const records = {};\r\n relations.forEach((related, id) => {\r\n collection\r\n .filter((record) => record[relationKey] === id)\r\n .forEach((record) => {\r\n const id = record[ownerKey];\r\n if (!records[id]) {\r\n records[id] = [];\r\n }\r\n records[id] = records[id].concat(related);\r\n });\r\n });\r\n return records;\r\n }\r\n /**\r\n * Check if the given record is a single relation, which is an object.\r\n */\r\n isOneRelation(record) {\r\n if (!isArray(record) && record !== null && typeof record === 'object') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Check if the given records is a many relation, which is an array\r\n * of object.\r\n */\r\n isManyRelation(records) {\r\n if (!isArray(records)) {\r\n return false;\r\n }\r\n if (records.length < 1) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Wrap the given object into a model instance.\r\n */\r\n makeOneRelation(record, model) {\r\n if (!this.isOneRelation(record)) {\r\n return null;\r\n }\r\n const relatedModel = model.getModelFromRecord(record) || model;\r\n return new relatedModel(record);\r\n }\r\n /**\r\n * Wrap the given records into a collection of model instances.\r\n */\r\n makeManyRelation(records, model) {\r\n if (!this.isManyRelation(records)) {\r\n return [];\r\n }\r\n return records\r\n .filter((record) => {\r\n return this.isOneRelation(record);\r\n })\r\n .map((record) => {\r\n const relatedModel = model.getModelFromRecord(record) || model;\r\n return new relatedModel(record);\r\n });\r\n }\r\n}\n\nclass HasOne extends Relation {\r\n /**\r\n * Create a new has one instance.\r\n */\r\n constructor(model, related, foreignKey, localKey) {\r\n super(model); /* istanbul ignore next */\r\n this.related = this.model.relation(related);\r\n this.foreignKey = foreignKey;\r\n this.localKey = localKey;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.one(this.related);\r\n }\r\n /**\r\n * Attach the relational key to the related data. For example,\r\n * when User has one Phone, it will attach value to the\r\n * `user_id` field of Phone record.\r\n */\r\n attach(key, record, data) {\r\n // Check if the record has local key set. If not, set the local key to be\r\n // the id value. This happens if the user defines the custom local key\r\n // and didn't include it in the data being normalized.\r\n if (!record[this.localKey]) {\r\n record[this.localKey] = this.model.getIndexIdFromRecord(record);\r\n }\r\n // Then set the foreign key of the related record if it exists to be the\r\n // local key of this record.\r\n const related = data[this.related.entity] && data[this.related.entity][key];\r\n if (related) {\r\n related[this.foreignKey] = record[this.localKey];\r\n }\r\n }\r\n /**\r\n * Make value to be set to model property. This method is used when\r\n * instantiating a model or creating a plain object from a model.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeOneRelation(value, this.related);\r\n }\r\n /**\r\n * Load the has one relationship for the collection.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relation = this.getRelation(query, this.related.entity, constraints);\r\n this.addEagerConstraints(relation, collection);\r\n this.match(collection, relation.get(), name);\r\n }\r\n /**\r\n * Set the constraints for an eager load of the relation.\r\n */\r\n addEagerConstraints(relation, collection) {\r\n relation.whereFk(this.foreignKey, this.getKeys(collection, this.localKey));\r\n }\r\n /**\r\n * Match the eagerly loaded results to their parents.\r\n */\r\n match(collection, relations, name) {\r\n const dictionary = this.buildDictionary(relations);\r\n collection.forEach((model) => {\r\n const id = model[this.localKey];\r\n const relation = dictionary[id];\r\n model[name] = relation || null;\r\n });\r\n }\r\n /**\r\n * Build model dictionary keyed by the relation's foreign key.\r\n */\r\n buildDictionary(relations) {\r\n return relations.reduce((dictionary, relation) => {\r\n const key = relation[this.foreignKey];\r\n dictionary[key] = relation;\r\n return dictionary;\r\n }, {});\r\n }\r\n}\n\nclass BelongsTo extends Relation {\r\n /**\r\n * Create a new belongs to instance.\r\n */\r\n constructor(model, parent, foreignKey, ownerKey) {\r\n super(model); /* istanbul ignore next */\r\n this.parent = this.model.relation(parent);\r\n this.foreignKey = foreignKey;\r\n this.ownerKey = ownerKey;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.one(this.parent);\r\n }\r\n /**\r\n * Attach the relational key to the given data. For example, when Post\r\n * belongs to User, it will attach value to the `user_id` field of\r\n * Post record.\r\n */\r\n attach(key, record, data) {\r\n // See if the record has the foreign key, if yes, it means the user has\r\n // provided the key explicitly so do nothing and return.\r\n if (record[this.foreignKey] !== undefined) {\r\n return;\r\n }\r\n // If there is no foreign key, let's set it here.\r\n record[this.foreignKey] =\r\n data[this.parent.entity] && data[this.parent.entity][key]\r\n ? data[this.parent.entity][key][this.ownerKey]\r\n : key;\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeOneRelation(value, this.parent);\r\n }\r\n /**\r\n * Load the belongs to relationship for the collection.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relation = this.getRelation(query, this.parent.entity, constraints);\r\n this.addEagerConstraints(relation, collection);\r\n this.match(collection, relation.get(), name);\r\n }\r\n /**\r\n * Set the constraints for an eager load of the relation.\r\n */\r\n addEagerConstraints(relation, collection) {\r\n relation.whereFk(this.ownerKey, this.getKeys(collection, this.foreignKey));\r\n }\r\n /**\r\n * Match the eagerly loaded results to their parents.\r\n */\r\n match(collection, relations, name) {\r\n const dictionary = this.buildDictionary(relations);\r\n collection.forEach((model) => {\r\n const id = model[this.foreignKey];\r\n const relation = id !== null ? dictionary[id] : null;\r\n model[name] = relation || null;\r\n });\r\n }\r\n /**\r\n * Build model dictionary keyed by the relation's foreign key.\r\n */\r\n buildDictionary(relations) {\r\n return relations.reduce((dictionary, relation) => {\r\n const key = relation[this.ownerKey];\r\n dictionary[key] = relation;\r\n return dictionary;\r\n }, {});\r\n }\r\n}\n\nclass HasMany extends Relation {\r\n /**\r\n * Create a new has many instance.\r\n */\r\n constructor(model, related, foreignKey, localKey) {\r\n super(model); /* istanbul ignore next */\r\n this.related = this.model.relation(related);\r\n this.foreignKey = foreignKey;\r\n this.localKey = localKey;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.many(this.related);\r\n }\r\n /**\r\n * Attach the relational key to the given data.\r\n */\r\n attach(key, record, data) {\r\n key.forEach((index) => {\r\n const related = data[this.related.entity];\r\n if (!related ||\r\n !related[index] ||\r\n related[index][this.foreignKey] !== undefined) {\r\n return;\r\n }\r\n related[index][this.foreignKey] = record[this.localKey];\r\n });\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeManyRelation(value, this.related);\r\n }\r\n /**\r\n * Load the has many relationship for the collection.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relation = this.getRelation(query, this.related.entity, constraints);\r\n this.addEagerConstraints(relation, collection);\r\n this.match(collection, relation.get(), name);\r\n }\r\n /**\r\n * Set the constraints for an eager load of the relation.\r\n */\r\n addEagerConstraints(relation, collection) {\r\n relation.whereFk(this.foreignKey, this.getKeys(collection, this.localKey));\r\n }\r\n /**\r\n * Match the eagerly loaded results to their parents.\r\n */\r\n match(collection, relations, name) {\r\n const dictionary = this.buildDictionary(relations);\r\n collection.forEach((model) => {\r\n const id = model[this.localKey];\r\n const relation = dictionary[id];\r\n model[name] = relation || [];\r\n });\r\n }\r\n /**\r\n * Build model dictionary keyed by the relation's foreign key.\r\n */\r\n buildDictionary(relations) {\r\n return relations.reduce((dictionary, relation) => {\r\n const key = relation[this.foreignKey];\r\n if (!dictionary[key]) {\r\n dictionary[key] = [];\r\n }\r\n dictionary[key].push(relation);\r\n return dictionary;\r\n }, {});\r\n }\r\n}\n\nclass HasManyBy extends Relation {\r\n /**\r\n * Create a new has many by instance.\r\n */\r\n constructor(model, parent, foreignKey, ownerKey) {\r\n super(model); /* istanbul ignore next */\r\n this.parent = this.model.relation(parent);\r\n this.foreignKey = foreignKey;\r\n this.ownerKey = ownerKey;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.many(this.parent);\r\n }\r\n /**\r\n * Attach the relational key to the given data.\r\n */\r\n attach(key, record, _data) {\r\n if (key.length === 0) {\r\n return;\r\n }\r\n record[this.foreignKey] = key.map((parentId) => {\r\n return this.parent.getIdFromRecord(_data[this.parent.entity][parentId]);\r\n });\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeManyRelation(value, this.parent);\r\n }\r\n /**\r\n * Load the has many by relationship for the collection.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relatedQuery = this.getRelation(query, this.parent.entity, constraints);\r\n this.addConstraintForHasManyBy(relatedQuery, collection);\r\n const relations = this.mapSingleRelations(relatedQuery.get(), this.ownerKey);\r\n collection.forEach((item) => {\r\n const related = this.getRelatedRecords(relations, item[this.foreignKey]);\r\n item[name] = related;\r\n });\r\n }\r\n /**\r\n * Set the constraints for an eager load of the relation.\r\n */\r\n addConstraintForHasManyBy(query, collection) {\r\n const keys = collection.reduce((keys, item) => {\r\n return keys.concat(item[this.foreignKey]);\r\n }, []);\r\n query.where(this.ownerKey, keys);\r\n }\r\n /**\r\n * Get related records.\r\n */\r\n getRelatedRecords(relations, keys) {\r\n const records = [];\r\n relations.forEach((record, id) => {\r\n if (keys.indexOf(id) !== -1) {\r\n records.push(record);\r\n }\r\n });\r\n return records;\r\n }\r\n}\n\nclass HasManyThrough extends Relation {\r\n /**\r\n * Create a new has many through instance.\r\n */\r\n constructor(model, related, through, firstKey, secondKey, localKey, secondLocalKey) {\r\n super(model); /* istanbul ignore next */\r\n this.related = this.model.relation(related);\r\n this.through = this.model.relation(through);\r\n this.firstKey = firstKey;\r\n this.secondKey = secondKey;\r\n this.localKey = localKey;\r\n this.secondLocalKey = secondLocalKey;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.many(this.related);\r\n }\r\n /**\r\n * Attach the relational key to the given data. Since has many through\r\n * relationship doesn't have any foreign key, it would do nothing.\r\n */\r\n attach(_key, _record, _data) {\r\n return;\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeManyRelation(value, this.related);\r\n }\r\n /**\r\n * Load the has many through relationship for the collection.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relatedQuery = this.getRelation(query, this.related.entity, constraints);\r\n const throughQuery = query.newQuery(this.through.entity);\r\n this.addEagerConstraintForThrough(throughQuery, collection);\r\n const throughs = throughQuery.get();\r\n this.addEagerConstraintForRelated(relatedQuery, throughs);\r\n const relateds = this.mapThroughRelations(throughs, relatedQuery);\r\n collection.forEach((item) => {\r\n const related = relateds[item[this.localKey]];\r\n item[name] = related || [];\r\n });\r\n }\r\n /**\r\n * Set the constraints for the through relation.\r\n */\r\n addEagerConstraintForThrough(query, collection) {\r\n query.where(this.firstKey, this.getKeys(collection, this.localKey));\r\n }\r\n /**\r\n * Set the constraints for the related relation.\r\n */\r\n addEagerConstraintForRelated(query, collection) {\r\n query.where(this.secondKey, this.getKeys(collection, this.secondLocalKey));\r\n }\r\n /**\r\n * Create a new indexed map for the through relation.\r\n */\r\n mapThroughRelations(throughs, relatedQuery) {\r\n const relations = this.mapManyRelations(relatedQuery.get(), this.secondKey);\r\n return throughs.reduce((records, record) => {\r\n const id = record[this.firstKey];\r\n if (!records[id]) {\r\n records[id] = [];\r\n }\r\n const related = relations.get(record[this.secondLocalKey]);\r\n if (related === undefined) {\r\n return records;\r\n }\r\n records[id] = records[id].concat(related);\r\n return records;\r\n }, {});\r\n }\r\n}\n\nclass BelongsToMany extends Relation {\r\n /**\r\n * Create a new belongs to instance.\r\n */\r\n constructor(model, related, pivot, foreignPivotKey, relatedPivotKey, parentKey, relatedKey) {\r\n super(model); /* istanbul ignore next */\r\n /**\r\n * The key name of the pivot data.\r\n */\r\n this.pivotKey = 'pivot';\r\n this.related = this.model.relation(related);\r\n this.pivot = this.model.relation(pivot);\r\n this.foreignPivotKey = foreignPivotKey;\r\n this.relatedPivotKey = relatedPivotKey;\r\n this.parentKey = parentKey;\r\n this.relatedKey = relatedKey;\r\n }\r\n /**\r\n * Specify the custom pivot accessor to use for the relationship.\r\n */\r\n as(accessor) {\r\n this.pivotKey = accessor;\r\n return this;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.many(this.related);\r\n }\r\n /**\r\n * Attach the relational key to the given data. Since belongs to many\r\n * relationship doesn't have any foreign key, it would do nothing.\r\n */\r\n attach(_key, _record, _data) {\r\n return;\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeManyRelation(value, this.related);\r\n }\r\n /**\r\n * Load the belongs to relationship for the record.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relatedQuery = this.getRelation(query, this.related.entity, constraints);\r\n const pivotQuery = query.newQuery(this.pivot.entity);\r\n this.addEagerConstraintForPivot(pivotQuery, collection);\r\n const pivots = pivotQuery.get();\r\n this.addEagerConstraintForRelated(relatedQuery, pivots);\r\n const relateds = this.mapPivotRelations(pivots, relatedQuery);\r\n collection.forEach((item) => {\r\n const related = relateds[item[this.parentKey]];\r\n item[name] = related || [];\r\n });\r\n }\r\n /**\r\n * Set the constraints for the pivot relation.\r\n */\r\n addEagerConstraintForPivot(query, collection) {\r\n query.whereFk(this.foreignPivotKey, this.getKeys(collection, this.parentKey));\r\n }\r\n /**\r\n * Set the constraints for the related relation.\r\n */\r\n addEagerConstraintForRelated(query, collection) {\r\n query.whereFk(this.relatedKey, this.getKeys(collection, this.relatedPivotKey));\r\n }\r\n /**\r\n * Create a new indexed map for the pivot relation.\r\n */\r\n mapPivotRelations(pivots, relatedQuery) {\r\n const relations = this.mapManyRelations(relatedQuery.get(), this.relatedKey);\r\n if (relatedQuery.orders.length) {\r\n return this.mapRelationsByOrders(pivots, relations, this.foreignPivotKey, this.relatedPivotKey);\r\n }\r\n return pivots.reduce((records, record) => {\r\n const id = record[this.foreignPivotKey];\r\n if (!records[id]) {\r\n records[id] = [];\r\n }\r\n const related = relations.get(record[this.relatedPivotKey]);\r\n if (related) {\r\n records[id] = records[id].concat(related.map((model) => {\r\n model[this.pivotKey] = record;\r\n return model;\r\n }));\r\n }\r\n return records;\r\n }, {});\r\n }\r\n /**\r\n * Create pivot records for the given records if needed.\r\n */\r\n createPivots(parent, data, key) {\r\n if (!Utils.isArray(this.pivot.primaryKey))\r\n return data;\r\n Utils.forOwn(data[parent.entity], (record) => {\r\n const related = record[key];\r\n if (related === undefined || related.length === 0) {\r\n return;\r\n }\r\n this.createPivotRecord(data, record, related);\r\n });\r\n return data;\r\n }\r\n /**\r\n * Create a pivot record.\r\n */\r\n createPivotRecord(data, record, related) {\r\n related.forEach((id) => {\r\n const parentId = record[this.parentKey];\r\n const relatedId = data[this.related.entity][id][this.relatedKey];\r\n const pivotKey = JSON.stringify([\r\n this.pivot.primaryKey[0] === this.foreignPivotKey\r\n ? parentId\r\n : relatedId,\r\n this.pivot.primaryKey[1] === this.foreignPivotKey ? parentId : relatedId\r\n ]);\r\n const pivotRecord = data[this.pivot.entity]\r\n ? data[this.pivot.entity][pivotKey]\r\n : {};\r\n const pivotData = data[this.related.entity][id][this.pivotKey] || {};\r\n data[this.pivot.entity] = {\r\n ...data[this.pivot.entity],\r\n [pivotKey]: {\r\n ...pivotRecord,\r\n ...pivotData,\r\n $id: pivotKey,\r\n [this.foreignPivotKey]: parentId,\r\n [this.relatedPivotKey]: relatedId\r\n }\r\n };\r\n });\r\n }\r\n}\n\nclass MorphTo extends Relation {\r\n /**\r\n * Create a new morph to instance.\r\n */\r\n constructor(model, id, type) {\r\n super(model); /* istanbul ignore next */\r\n this.id = id;\r\n this.type = type;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.union((_value, parentValue) => parentValue[this.type]);\r\n }\r\n /**\r\n * Attach the relational key to the given record. Since morph to\r\n * relationship doesn't have any foreign key, it would do nothing.\r\n */\r\n attach(_key, _record, _data) {\r\n return;\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, parent, _key) {\r\n const related = parent[this.type];\r\n try {\r\n const model = this.model.relation(related);\r\n return this.makeOneRelation(value, model);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Load the morph to relationship for the collection.\r\n */\r\n load(query, collection, name, constraints) {\r\n const types = this.getTypes(collection);\r\n const relations = types.reduce((related, type) => {\r\n const relatedQuery = this.getRelation(query, type, constraints);\r\n related[type] = this.mapSingleRelations(relatedQuery.get(), '$id');\r\n return related;\r\n }, {});\r\n collection.forEach((item) => {\r\n const id = item[this.id];\r\n const type = item[this.type];\r\n const related = relations[type].get(String(id));\r\n item[name] = related || null;\r\n });\r\n }\r\n /**\r\n * Get all types from the collection.\r\n */\r\n getTypes(collection) {\r\n return collection.reduce((types, item) => {\r\n const type = item[this.type];\r\n !types.includes(type) && types.push(type);\r\n return types;\r\n }, []);\r\n }\r\n}\n\nclass MorphOne extends Relation {\r\n /**\r\n * Create a new belongs to instance.\r\n */\r\n constructor(model, related, id, type, localKey) {\r\n super(model); /* istanbul ignore next */\r\n this.related = this.model.relation(related);\r\n this.id = id;\r\n this.type = type;\r\n this.localKey = localKey;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.one(this.related);\r\n }\r\n /**\r\n * Attach the relational key to the given data.\r\n */\r\n attach(key, record, data) {\r\n const relatedRecord = data[this.related.entity][key];\r\n relatedRecord[this.id] =\r\n relatedRecord[this.id] || this.related.getIdFromRecord(record);\r\n relatedRecord[this.type] = relatedRecord[this.type] || this.model.entity;\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeOneRelation(value, this.related);\r\n }\r\n /**\r\n * Load the morph many relationship for the record.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relatedQuery = this.getRelation(query, this.related.entity, constraints);\r\n this.addEagerConstraintForMorphOne(relatedQuery, collection, query.entity);\r\n const relations = this.mapSingleRelations(relatedQuery.get(), this.id);\r\n collection.forEach((item) => {\r\n const related = relations.get(item[this.localKey]);\r\n item[name] = related || null;\r\n });\r\n }\r\n /**\r\n * Set the constraints for an eager load of the relation.\r\n */\r\n addEagerConstraintForMorphOne(query, collection, type) {\r\n query\r\n .whereFk(this.type, type)\r\n .whereFk(this.id, this.getKeys(collection, this.localKey));\r\n }\r\n}\n\nclass MorphMany extends Relation {\r\n /**\r\n * Create a new belongs to instance.\r\n */\r\n constructor(model, related, id, type, localKey) {\r\n super(model); /* istanbul ignore next */\r\n this.related = this.model.relation(related);\r\n this.id = id;\r\n this.type = type;\r\n this.localKey = localKey;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.many(this.related);\r\n }\r\n /**\r\n * Attach the relational key to the given data.\r\n */\r\n attach(key, record, data) {\r\n const relatedItems = data[this.related.entity];\r\n key.forEach((id) => {\r\n const relatedItem = relatedItems[id];\r\n relatedItem[this.id] =\r\n relatedItem[this.id] || this.related.getIdFromRecord(record);\r\n relatedItem[this.type] = relatedItem[this.type] || this.model.entity;\r\n });\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeManyRelation(value, this.related);\r\n }\r\n /**\r\n * Load the morph many relationship for the record.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relatedQuery = this.getRelation(query, this.related.entity, constraints);\r\n this.addEagerConstraintForMorphMany(relatedQuery, collection, query.entity);\r\n const relations = this.mapManyRelations(relatedQuery.get(), this.id);\r\n collection.forEach((item) => {\r\n const related = relations.get(item[this.localKey]);\r\n item[name] = related || [];\r\n });\r\n }\r\n /**\r\n * Set the constraints for an eager load of the relation.\r\n */\r\n addEagerConstraintForMorphMany(query, collection, type) {\r\n query\r\n .whereFk(this.type, type)\r\n .whereFk(this.id, this.getKeys(collection, this.localKey));\r\n }\r\n}\n\nclass MorphToMany extends Relation {\r\n /**\r\n * Create a new belongs to instance.\r\n */\r\n constructor(model, related, pivot, relatedId, id, type, parentKey, relatedKey) {\r\n super(model); /* istanbul ignore next */\r\n /**\r\n * The key name of the pivot data.\r\n */\r\n this.pivotKey = 'pivot';\r\n this.related = this.model.relation(related);\r\n this.pivot = this.model.relation(pivot);\r\n this.relatedId = relatedId;\r\n this.id = id;\r\n this.type = type;\r\n this.parentKey = parentKey;\r\n this.relatedKey = relatedKey;\r\n }\r\n /**\r\n * Specify the custom pivot accessor to use for the relationship.\r\n */\r\n as(accessor) {\r\n this.pivotKey = accessor;\r\n return this;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.many(this.related);\r\n }\r\n /**\r\n * Attach the relational key to the given record. Since morph to many\r\n * relationship doesn't have any foreign key, it would do nothing.\r\n */\r\n attach(_key, _record, _data) {\r\n return;\r\n }\r\n /**\r\n * Convert given value to the appropriate value for the attribute.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeManyRelation(value, this.related);\r\n }\r\n /**\r\n * Load the morph to many relationship for the collection.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relatedQuery = this.getRelation(query, this.related.entity, constraints);\r\n const pivotQuery = query.newQuery(this.pivot.entity);\r\n this.addEagerConstraintForPivot(pivotQuery, collection, query.entity);\r\n const pivots = pivotQuery.get();\r\n this.addEagerConstraintForRelated(relatedQuery, pivots);\r\n const relateds = this.mapPivotRelations(pivots, relatedQuery);\r\n collection.forEach((item) => {\r\n const related = relateds[item[this.parentKey]];\r\n item[name] = related || [];\r\n });\r\n }\r\n /**\r\n * Set the constraints for the pivot relation.\r\n */\r\n addEagerConstraintForPivot(query, collection, type) {\r\n query\r\n .whereFk(this.type, type)\r\n .whereFk(this.id, this.getKeys(collection, this.parentKey));\r\n }\r\n /**\r\n * Set the constraints for the related relation.\r\n */\r\n addEagerConstraintForRelated(query, collection) {\r\n query.whereFk(this.relatedKey, this.getKeys(collection, this.relatedId));\r\n }\r\n /**\r\n * Create a new indexed map for the pivot relation.\r\n */\r\n mapPivotRelations(pivots, relatedQuery) {\r\n const relations = this.mapManyRelations(relatedQuery.get(), this.relatedKey);\r\n if (relatedQuery.orders.length) {\r\n return this.mapRelationsByOrders(pivots, relations, this.id, this.relatedId);\r\n }\r\n return pivots.reduce((records, record) => {\r\n const id = record[this.id];\r\n if (!records[id]) {\r\n records[id] = [];\r\n }\r\n const related = relations.get(record[this.relatedId]);\r\n /* istanbul ignore if */\r\n if (related === undefined || related.length === 0) {\r\n return records;\r\n }\r\n records[id] = records[id].concat(related.map((model) => {\r\n model[this.pivotKey] = record;\r\n return model;\r\n }));\r\n return records;\r\n }, {});\r\n }\r\n /**\r\n * Create pivot records for the given records if needed.\r\n */\r\n createPivots(parent, data, key) {\r\n Utils.forOwn(data[parent.entity], (record) => {\r\n const relatedIds = parent\r\n .query()\r\n .newQuery(this.pivot.entity)\r\n .where(this.id, record[this.parentKey])\r\n .where(this.type, parent.entity)\r\n .get();\r\n const relateds = (record[key] || []).filter((relatedId) => !relatedIds.includes(relatedId));\r\n if (!Utils.isArray(relateds) || relateds.length === 0) {\r\n return;\r\n }\r\n this.createPivotRecord(parent, data, record, relateds);\r\n });\r\n return data;\r\n }\r\n /**\r\n * Create a pivot record.\r\n */\r\n createPivotRecord(parent, data, record, related) {\r\n related.forEach((id) => {\r\n const parentId = record[this.parentKey];\r\n const relatedId = data[this.related.entity][id][this.relatedKey];\r\n const pivotKey = `${parentId}_${id}_${parent.entity}`;\r\n const pivotData = data[this.related.entity][id][this.pivotKey] || {};\r\n data[this.pivot.entity] = {\r\n ...data[this.pivot.entity],\r\n [pivotKey]: {\r\n ...pivotData,\r\n $id: pivotKey,\r\n [this.relatedId]: relatedId,\r\n [this.id]: parentId,\r\n [this.type]: parent.entity\r\n }\r\n };\r\n });\r\n }\r\n}\n\nclass MorphedByMany extends Relation {\r\n /**\r\n * Create a new belongs to instance.\r\n */\r\n constructor(model, related, pivot, relatedId, id, type, parentKey, relatedKey) {\r\n super(model); /* istanbul ignore next */\r\n /**\r\n * The key name of the pivot data.\r\n */\r\n this.pivotKey = 'pivot';\r\n this.related = this.model.relation(related);\r\n this.pivot = this.model.relation(pivot);\r\n this.relatedId = relatedId;\r\n this.id = id;\r\n this.type = type;\r\n this.parentKey = parentKey;\r\n this.relatedKey = relatedKey;\r\n }\r\n /**\r\n * Specify the custom pivot accessor to use for the relationship.\r\n */\r\n as(accessor) {\r\n this.pivotKey = accessor;\r\n return this;\r\n }\r\n /**\r\n * Define the normalizr schema for the relationship.\r\n */\r\n define(schema) {\r\n return schema.many(this.related);\r\n }\r\n /**\r\n * Attach the relational key to the given data. Since morphed by many\r\n * relationship doesn't have any foreign key, it would do nothing.\r\n */\r\n attach(_key, _record, _data) {\r\n return;\r\n }\r\n /**\r\n * Make value to be set to model property. This method is used when\r\n * instantiating a model or creating a plain object from a model.\r\n */\r\n make(value, _parent, _key) {\r\n return this.makeManyRelation(value, this.related);\r\n }\r\n /**\r\n * Load the morph many relationship for the record.\r\n */\r\n load(query, collection, name, constraints) {\r\n const relatedQuery = this.getRelation(query, this.related.entity, constraints);\r\n const pivotQuery = query.newQuery(this.pivot.entity);\r\n this.addEagerConstraintForPivot(pivotQuery, collection, this.related.entity);\r\n const pivots = pivotQuery.get();\r\n this.addEagerConstraintForRelated(relatedQuery, pivots);\r\n const relateds = this.mapPivotRelations(pivots, relatedQuery);\r\n collection.forEach((item) => {\r\n const related = relateds[item[this.parentKey]];\r\n item[name] = related || [];\r\n });\r\n }\r\n /**\r\n * Set the constraints for the pivot relation.\r\n */\r\n addEagerConstraintForPivot(query, collection, type) {\r\n query\r\n .whereFk(this.type, type)\r\n .whereFk(this.relatedId, this.getKeys(collection, this.parentKey));\r\n }\r\n /**\r\n * Set the constraints for the related relation.\r\n */\r\n addEagerConstraintForRelated(query, collection) {\r\n query.whereFk(this.relatedKey, this.getKeys(collection, this.id));\r\n }\r\n /**\r\n * Create a new indexed map for the pivot relation.\r\n */\r\n mapPivotRelations(pivots, relatedQuery) {\r\n const relations = this.mapManyRelations(relatedQuery.get(), this.relatedKey);\r\n if (relatedQuery.orders.length) {\r\n return this.mapRelationsByOrders(pivots, relations, this.relatedId, this.id);\r\n }\r\n return pivots.reduce((records, record) => {\r\n const id = record[this.relatedId];\r\n if (!records[id]) {\r\n records[id] = [];\r\n }\r\n const related = relations.get(record[this.id]);\r\n /* istanbul ignore if */\r\n if (related === undefined || related.length === 0) {\r\n return records;\r\n }\r\n records[id] = records[id].concat(related.map((model) => {\r\n model[this.pivotKey] = record;\r\n return model;\r\n }));\r\n return records;\r\n }, {});\r\n }\r\n /**\r\n * Create pivot records for the given records if needed.\r\n */\r\n createPivots(parent, data, key) {\r\n Utils.forOwn(data[parent.entity], (record) => {\r\n const related = record[key];\r\n if (!Utils.isArray(related)) {\r\n return;\r\n }\r\n this.createPivotRecord(data, record, related);\r\n });\r\n return data;\r\n }\r\n /**\r\n * Create a pivot record.\r\n */\r\n createPivotRecord(data, record, related) {\r\n related.forEach((id) => {\r\n const parentId = record[this.parentKey];\r\n const pivotKey = `${id}_${parentId}_${this.related.entity}`;\r\n const pivotData = data[this.related.entity][id][this.pivotKey] || {};\r\n data[this.pivot.entity] = {\r\n ...data[this.pivot.entity],\r\n [pivotKey]: {\r\n ...pivotData,\r\n $id: pivotKey,\r\n [this.relatedId]: parentId,\r\n [this.id]: this.model.getIdFromRecord(data[this.related.entity][id]),\r\n [this.type]: this.related.entity\r\n }\r\n };\r\n });\r\n }\r\n}\n\nconst defaultOption = {\r\n relations: true\r\n};\r\n/**\r\n * Serialize the given model to attributes. This method will ignore\r\n * relationships, and it includes the index id.\r\n */\r\nfunction toAttributes(model) {\r\n const record = toJson(model, { relations: false });\r\n record.$id = model.$id;\r\n return record;\r\n}\r\n/**\r\n * Serialize given model POJO.\r\n */\r\nfunction toJson(model, option = {}) {\r\n option = { ...defaultOption, ...option };\r\n const record = {};\r\n const fields = model.$fields();\r\n for (const key in fields) {\r\n const f = fields[key];\r\n const v = model[key];\r\n if (f instanceof Relation) {\r\n record[key] = option.relations ? relation(v) : emptyRelation(v);\r\n continue;\r\n }\r\n record[key] = value(model[key]);\r\n }\r\n return record;\r\n}\r\n/**\r\n * Serialize given value.\r\n */\r\nfunction value(v) {\r\n if (v === null) {\r\n return null;\r\n }\r\n if (isArray(v)) {\r\n return array(v);\r\n }\r\n if (typeof v === 'object') {\r\n return object(v);\r\n }\r\n return v;\r\n}\r\n/**\r\n * Serialize an array into json.\r\n */\r\nfunction array(a) {\r\n return a.map((v) => value(v));\r\n}\r\n/**\r\n * Serialize an object into json.\r\n */\r\nfunction object(o) {\r\n const obj = {};\r\n for (const key in o) {\r\n obj[key] = value(o[key]);\r\n }\r\n return obj;\r\n}\r\nfunction relation(relation) {\r\n if (relation === null) {\r\n return null;\r\n }\r\n if (isArray(relation)) {\r\n return relation.map((model) => model.$toJson());\r\n }\r\n return relation.$toJson();\r\n}\r\nfunction emptyRelation(relation) {\r\n return isArray(relation) ? [] : null;\r\n}\n\nclass Model {\r\n /**\r\n * Create a new model instance.\r\n */\r\n constructor(record) {\r\n /**\r\n * The index ID for the model.\r\n */\r\n this.$id = null;\r\n this.$fill(record);\r\n }\r\n /**\r\n * The definition of the fields of the model and its relations.\r\n */\r\n static fields() {\r\n return {};\r\n }\r\n /**\r\n * Create an attr attribute.\r\n */\r\n static attr(value, mutator) {\r\n return new Attr(this, value, mutator);\r\n }\r\n /**\r\n * Create a string attribute.\r\n */\r\n static string(value, mutator) {\r\n return new String$1(this, value, mutator);\r\n }\r\n /**\r\n * Create a number attribute.\r\n */\r\n static number(value, mutator) {\r\n return new Number(this, value, mutator);\r\n }\r\n /**\r\n * Create a boolean attribute.\r\n */\r\n static boolean(value, mutator) {\r\n return new Boolean(this, value, mutator);\r\n }\r\n /**\r\n * Create an uid attribute.\r\n */\r\n static uid(value) {\r\n return new Uid(this, value);\r\n }\r\n /**\r\n * @deprecated Use `uid` attribute instead.\r\n */\r\n static increment() {\r\n /* istanbul ignore next */\r\n {\r\n console.warn('[Vuex ORM] Attribute type `increment` has been deprecated and replaced with `uid`.');\r\n }\r\n return this.uid();\r\n }\r\n /**\r\n * Create a has one relationship.\r\n */\r\n static hasOne(related, foreignKey, localKey) {\r\n return new HasOne(this, related, foreignKey, this.localKey(localKey));\r\n }\r\n /**\r\n * Create a belongs to relationship.\r\n */\r\n static belongsTo(parent, foreignKey, ownerKey) {\r\n return new BelongsTo(this, parent, foreignKey, this.relation(parent).localKey(ownerKey));\r\n }\r\n /**\r\n * Create a has many relationship.\r\n */\r\n static hasMany(related, foreignKey, localKey) {\r\n return new HasMany(this, related, foreignKey, this.localKey(localKey));\r\n }\r\n /**\r\n * Create a has many by relationship.\r\n */\r\n static hasManyBy(parent, foreignKey, ownerKey) {\r\n return new HasManyBy(this, parent, foreignKey, this.relation(parent).localKey(ownerKey));\r\n }\r\n /**\r\n * Create a has many through relationship.\r\n */\r\n static hasManyThrough(related, through, firstKey, secondKey, localKey, secondLocalKey) {\r\n return new HasManyThrough(this, related, through, firstKey, secondKey, this.localKey(localKey), this.relation(through).localKey(secondLocalKey));\r\n }\r\n /**\r\n * Create a belongs to many relationship.\r\n */\r\n static belongsToMany(related, pivot, foreignPivotKey, relatedPivotKey, parentKey, relatedKey) {\r\n return new BelongsToMany(this, related, pivot, foreignPivotKey, relatedPivotKey, this.localKey(parentKey), this.relation(related).localKey(relatedKey));\r\n }\r\n /**\r\n * Create a morph to relationship.\r\n */\r\n static morphTo(id, type) {\r\n return new MorphTo(this, id, type);\r\n }\r\n /**\r\n * Create a morph one relationship.\r\n */\r\n static morphOne(related, id, type, localKey) {\r\n return new MorphOne(this, related, id, type, this.localKey(localKey));\r\n }\r\n /**\r\n * Create a morph many relationship.\r\n */\r\n static morphMany(related, id, type, localKey) {\r\n return new MorphMany(this, related, id, type, this.localKey(localKey));\r\n }\r\n /**\r\n * Create a morph to many relationship.\r\n */\r\n static morphToMany(related, pivot, relatedId, id, type, parentKey, relatedKey) {\r\n return new MorphToMany(this, related, pivot, relatedId, id, type, this.localKey(parentKey), this.relation(related).localKey(relatedKey));\r\n }\r\n /**\r\n * Create a morphed by many relationship.\r\n */\r\n static morphedByMany(related, pivot, relatedId, id, type, parentKey, relatedKey) {\r\n return new MorphedByMany(this, related, pivot, relatedId, id, type, this.localKey(parentKey), this.relation(related).localKey(relatedKey));\r\n }\r\n /**\r\n * Mutators to mutate matching fields when instantiating the model.\r\n */\r\n static mutators() {\r\n return {};\r\n }\r\n /**\r\n * Types mapping used to dispatch entities based on their discriminator field\r\n */\r\n static types() {\r\n return {};\r\n }\r\n /**\r\n * Get the store instance from the container.\r\n */\r\n static store() {\r\n return Container.store;\r\n }\r\n /**\r\n * Get the database instance from store.\r\n */\r\n static database() {\r\n return this.store().$db();\r\n }\r\n /**\r\n * Create a namespaced method name for Vuex Module from the given\r\n * method name.\r\n */\r\n static namespace(method) {\r\n return `${this.database().namespace}/${this.entity}/${method}`;\r\n }\r\n /**\r\n * Call Vuex Getters.\r\n */\r\n static getters(method) {\r\n return this.store().getters[this.namespace(method)];\r\n }\r\n /**\r\n * Dispatch Vuex Action.\r\n */\r\n static dispatch(method, payload) {\r\n return this.store().dispatch(this.namespace(method), payload);\r\n }\r\n /**\r\n * Commit Vuex Mutation.\r\n */\r\n static commit(callback) {\r\n this.store().commit(`${this.database().namespace}/$mutate`, {\r\n entity: this.entity,\r\n callback\r\n });\r\n }\r\n /**\r\n * Get the Model schema definition from the cache.\r\n */\r\n static getFields() {\r\n if (!this.cachedFields) {\r\n this.cachedFields = {};\r\n }\r\n if (this.cachedFields[this.entity]) {\r\n return this.cachedFields[this.entity];\r\n }\r\n this.cachedFields[this.entity] = this.fields();\r\n return this.cachedFields[this.entity];\r\n }\r\n /**\r\n * Get all records.\r\n */\r\n static all() {\r\n return this.getters('all')();\r\n }\r\n /**\r\n * Find a record.\r\n */\r\n static find(id) {\r\n return this.getters('find')(id);\r\n }\r\n /**\r\n * Get the record of the given array of ids.\r\n */\r\n static findIn(idList) {\r\n return this.getters('findIn')(idList);\r\n }\r\n /**\r\n * Get query instance.\r\n */\r\n static query() {\r\n return this.getters('query')();\r\n }\r\n /**\r\n * Check wether the associated database contains data.\r\n */\r\n static exists() {\r\n return this.query().exists();\r\n }\r\n /**\r\n * Create new data with all fields filled by default values.\r\n */\r\n static new() {\r\n return this.dispatch('new');\r\n }\r\n /**\r\n * Save given data to the store by replacing all existing records in the\r\n * store. If you want to save data without replacing existing records,\r\n * use the `insert` method instead.\r\n */\r\n static create(payload) {\r\n return this.dispatch('create', payload);\r\n }\r\n /**\r\n * Insert records.\r\n */\r\n static insert(payload) {\r\n return this.dispatch('insert', payload);\r\n }\r\n /**\r\n * Update records.\r\n */\r\n static update(payload) {\r\n return this.dispatch('update', payload);\r\n }\r\n /**\r\n * Insert or update records.\r\n */\r\n static insertOrUpdate(payload) {\r\n return this.dispatch('insertOrUpdate', payload);\r\n }\r\n static delete(payload) {\r\n return this.dispatch('delete', payload);\r\n }\r\n /**\r\n * Delete all records from the store.\r\n */\r\n static deleteAll() {\r\n return this.dispatch('deleteAll');\r\n }\r\n /**\r\n * Check if the given key is the primary key. If the model has composite\r\n * primary key, this method is going to check if the given key is included\r\n * in the composite key.\r\n */\r\n static isPrimaryKey(key) {\r\n if (!Utils.isArray(this.primaryKey)) {\r\n return this.primaryKey === key;\r\n }\r\n return this.primaryKey.includes(key);\r\n }\r\n /**\r\n * Check if the primary key is a composite key.\r\n */\r\n static isCompositePrimaryKey() {\r\n return Utils.isArray(this.primaryKey);\r\n }\r\n /**\r\n * Get the id (value of primary key) from teh given record. If primary key is\r\n * not present, or it is invalid primary key value, which is other than\r\n * `string` or `number`, it's going to return `null`.\r\n *\r\n * If the model has composite key, it's going to return array of ids. If any\r\n * composite key missing, it will return `null`.\r\n */\r\n static getIdFromRecord(record) {\r\n const key = this.primaryKey;\r\n if (typeof key === 'string') {\r\n return this.getIdFromValue(record[key]);\r\n }\r\n const ids = key.reduce((keys, k) => {\r\n const id = this.getIdFromValue(record[k]);\r\n id !== null && keys.push(id);\r\n return keys;\r\n }, []);\r\n return ids.length === key.length ? ids : null;\r\n }\r\n /**\r\n * Get correct index id, which is `string` | `number`, from the given value.\r\n */\r\n static getIdFromValue(value) {\r\n if (typeof value === 'string' && value !== '') {\r\n return value;\r\n }\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get the index ID value from the given record. An index ID is a value that\r\n * used as a key for records within the Vuex Store.\r\n *\r\n * Most of the time, it's same as the value for the Model's primary key but\r\n * it's always `string`, even if the primary key value is `number`.\r\n *\r\n * If the Model has a composite primary key, each value corresponding to\r\n * those primary key will be stringified and become a single string value\r\n * such as `'[1,2]'`.\r\n *\r\n * If the primary key is not present at the given record, it returns `null`.\r\n * For the composite primary key, every key must exist at a given record,\r\n * or it will return `null`.\r\n */\r\n static getIndexIdFromRecord(record) {\r\n const id = this.getIdFromRecord(record);\r\n if (id === null) {\r\n return null;\r\n }\r\n if (Utils.isArray(id)) {\r\n return JSON.stringify(id);\r\n }\r\n return String(id);\r\n }\r\n /**\r\n * Get local key to pass to the attributes.\r\n */\r\n static localKey(key) {\r\n if (key) {\r\n return key;\r\n }\r\n return typeof this.primaryKey === 'string' ? this.primaryKey : 'id';\r\n }\r\n /**\r\n * Get the model object that matches the given record type. The method is for\r\n * getting the correct model object when the model has any inheritance\r\n * children model.\r\n *\r\n * For example, if a User Model have `static types()` declared, and if you\r\n * pass record with `{ type: 'admin' }`, then the method will likely to\r\n * return SuperUser class.\r\n */\r\n static getModelFromRecord(record) {\r\n // If the given record is already a model instance, return the\r\n // model object.\r\n if (record instanceof this) {\r\n return record.$self();\r\n }\r\n // Else, get the corresponding model for the type value if there's any.\r\n return this.getTypeModel(record[this.typeKey]);\r\n }\r\n /**\r\n * Get a model from the container.\r\n */\r\n static relation(model) {\r\n if (typeof model !== 'string') {\r\n return model;\r\n }\r\n return this.database().model(model);\r\n }\r\n /**\r\n * Get all `belongsToMany` fields from the schema.\r\n */\r\n static pivotFields() {\r\n const fields = [];\r\n Utils.forOwn(this.getFields(), (field, key) => {\r\n if (field instanceof BelongsToMany ||\r\n field instanceof MorphToMany ||\r\n field instanceof MorphedByMany) {\r\n fields.push({ [key]: field });\r\n }\r\n });\r\n return fields;\r\n }\r\n /**\r\n * Check if fields contains the `belongsToMany` field type.\r\n */\r\n static hasPivotFields() {\r\n return this.pivotFields().length > 0;\r\n }\r\n /**\r\n * Check if the current model has a type definition\r\n */\r\n static hasTypes() {\r\n return Object.keys(this.types()).length > 0;\r\n }\r\n /**\r\n * Get the model corresponding to the given type name. If it can't be found,\r\n * it'll return `null`.\r\n */\r\n static getTypeModel(name) {\r\n const model = this.types()[name];\r\n if (!model) {\r\n return null;\r\n }\r\n return model;\r\n }\r\n /**\r\n * Given a Model, this returns the corresponding key in the InheritanceTypes mapping\r\n */\r\n static getTypeKeyValueFromModel(model) {\r\n const modelToCheck = model || this;\r\n const types = this.types();\r\n for (const type in types) {\r\n if (types[type].entity === modelToCheck.entity) {\r\n return type;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Tries to find a Relation field in all types defined in the InheritanceTypes mapping\r\n */\r\n static findRelationInSubTypes(relationName) {\r\n const types = this.types();\r\n for (const type in types) {\r\n const fields = types[type].getFields();\r\n for (const fieldName in fields) {\r\n if (fieldName === relationName &&\r\n fields[fieldName] instanceof Relation) {\r\n return fields[fieldName];\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Fill any missing fields in the given record with the default value defined\r\n * in the model schema.\r\n */\r\n static hydrate(record) {\r\n return new this(record).$getAttributes();\r\n }\r\n /**\r\n * Get the constructor of this model.\r\n */\r\n $self() {\r\n return this.constructor;\r\n }\r\n /**\r\n * Get the primary key for the model.\r\n */\r\n $primaryKey() {\r\n return this.$self().primaryKey;\r\n }\r\n /**\r\n * The definition of the fields of the model and its relations.\r\n */\r\n $fields() {\r\n return this.$self().getFields();\r\n }\r\n /**\r\n * Set index id.\r\n */\r\n $setIndexId(id) {\r\n this.$id = id;\r\n return this;\r\n }\r\n /**\r\n * Get the store instance from the container.\r\n */\r\n $store() {\r\n return this.$self().store();\r\n }\r\n /**\r\n * Create a namespaced method name for Vuex Module from the given\r\n * method name.\r\n */\r\n $namespace(method) {\r\n return this.$self().namespace(method);\r\n }\r\n /**\r\n * Call Vuex Getetrs.\r\n */\r\n $getters(method) {\r\n return this.$self().getters(method);\r\n }\r\n /**\r\n * Dispatch Vuex Action.\r\n */\r\n async $dispatch(method, payload) {\r\n return this.$self().dispatch(method, payload);\r\n }\r\n /**\r\n * Get all records.\r\n */\r\n $all() {\r\n return this.$getters('all')();\r\n }\r\n /**\r\n * Find a record.\r\n */\r\n $find(id) {\r\n return this.$getters('find')(id);\r\n }\r\n /**\r\n * Find record of the given array of ids.\r\n */\r\n $findIn(idList) {\r\n return this.$getters('findIn')(idList);\r\n }\r\n /**\r\n * Get query instance.\r\n */\r\n $query() {\r\n return this.$getters('query')();\r\n }\r\n /**\r\n * Create records.\r\n */\r\n async $create(payload) {\r\n return this.$dispatch('create', payload);\r\n }\r\n /**\r\n * Create records.\r\n */\r\n async $insert(payload) {\r\n return this.$dispatch('insert', payload);\r\n }\r\n /**\r\n * Update records.\r\n */\r\n async $update(payload) {\r\n if (Utils.isArray(payload)) {\r\n return this.$dispatch('update', payload);\r\n }\r\n if (payload.where !== undefined) {\r\n return this.$dispatch('update', payload);\r\n }\r\n if (this.$self().getIndexIdFromRecord(payload) === null) {\r\n return this.$dispatch('update', {\r\n where: this.$self().getIdFromRecord(this),\r\n data: payload\r\n });\r\n }\r\n return this.$dispatch('update', payload);\r\n }\r\n /**\r\n * Insert or update records.\r\n */\r\n async $insertOrUpdate(payload) {\r\n return this.$dispatch('insertOrUpdate', payload);\r\n }\r\n /**\r\n * Save record.\r\n */\r\n async $save() {\r\n const fields = this.$self().getFields();\r\n const record = Object.keys(fields).reduce((record, key) => {\r\n if (fields[key] instanceof Type) {\r\n record[key] = this[key];\r\n }\r\n return record;\r\n }, {});\r\n const records = await this.$dispatch('insertOrUpdate', { data: record });\r\n this.$fill(records[this.$self().entity][0]);\r\n return this;\r\n }\r\n /**\r\n * Delete records that matches the given condition.\r\n */\r\n async $delete() {\r\n const primaryKey = this.$primaryKey();\r\n if (!Utils.isArray(primaryKey)) {\r\n return this.$dispatch('delete', this[primaryKey]);\r\n }\r\n return this.$dispatch('delete', (model) => {\r\n return primaryKey.every((id) => model[id] === this[id]);\r\n });\r\n }\r\n /**\r\n * Delete all records.\r\n */\r\n async $deleteAll() {\r\n return this.$dispatch('deleteAll');\r\n }\r\n /**\r\n * Fill the model instance with the given record. If no record were passed,\r\n * or if the record has any missing fields, each value of the fields will\r\n * be filled with its default value defined at model fields definition.\r\n */\r\n $fill(record = {}) {\r\n const fields = this.$fields();\r\n for (const key in fields) {\r\n const field = fields[key];\r\n const value = record[key];\r\n this[key] = field.make(value, record, key);\r\n }\r\n // If the record contains index id, set it to the model.\r\n record.$id !== undefined && this.$setIndexId(record.$id);\r\n }\r\n /**\r\n * Generate missing primary ids and index id.\r\n */\r\n $generateId() {\r\n return this.$generatePrimaryId().$generateIndexId();\r\n }\r\n /**\r\n * Generate any missing primary ids.\r\n */\r\n $generatePrimaryId() {\r\n const key = this.$self().primaryKey;\r\n const keys = Utils.isArray(key) ? key : [key];\r\n keys.forEach((k) => {\r\n if (this[k] === undefined || this[k] === null) {\r\n this[k] = Uid$1.make();\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Generate index id from current model attributes.\r\n */\r\n $generateIndexId() {\r\n return this.$setIndexId(this.$getIndexIdFromAttributes());\r\n }\r\n /**\r\n * Get index id based on current model attributes.\r\n */\r\n $getIndexIdFromAttributes() {\r\n return this.$self().getIndexIdFromRecord(this);\r\n }\r\n /**\r\n * Get all of the current attributes on the model. It includes index id\r\n * value as well. This method is mainly used when saving a model to\r\n * the store.\r\n */\r\n $getAttributes() {\r\n return toAttributes(this);\r\n }\r\n /**\r\n * Serialize field values into json.\r\n */\r\n $toJson() {\r\n return toJson(this);\r\n }\r\n}\r\n/**\r\n * The primary key to be used for the model.\r\n */\r\nModel.primaryKey = 'id';\r\n/**\r\n * The discriminator key to be used for the model when inheritance is used\r\n */\r\nModel.typeKey = 'type';\r\n/**\r\n * Vuex Store state definition.\r\n */\r\nModel.state = {};\n\n/**\r\n * Create a new Query instance.\r\n */\r\nconst query$1 = (state, _getters, _rootState, rootGetters) => () => {\r\n return rootGetters[`${state.$connection}/query`](state.$name);\r\n};\r\n/**\r\n * Get all data of given entity.\r\n */\r\nconst all$1 = (state, _getters, _rootState, rootGetters) => () => {\r\n return rootGetters[`${state.$connection}/all`](state.$name);\r\n};\r\n/**\r\n * Find a data of the given entity by given id.\r\n */\r\nconst find$1 = (state, _getters, _rootState, rootGetters) => (id) => {\r\n return rootGetters[`${state.$connection}/find`](state.$name, id);\r\n};\r\n/**\r\n * Find array of data of the given entity by given ids.\r\n */\r\nconst findIn$1 = (state, _getters, _rootState, rootGetters) => (idList) => {\r\n return rootGetters[`${state.$connection}/findIn`](state.$name, idList);\r\n};\r\nconst Getters = {\r\n query: query$1,\r\n all: all$1,\r\n find: find$1,\r\n findIn: findIn$1\r\n};\n\n/**\r\n * Create new data with all fields filled by default values.\r\n */\r\nasync function newRecord$1(context) {\r\n const state = context.state;\r\n const entity = state.$name;\r\n return context.dispatch(`${state.$connection}/new`, { entity }, { root: true });\r\n}\r\n/**\r\n * Save given data to the store by replacing all existing records in the\r\n * store. If you want to save data without replacing existing records,\r\n * use the `insert` method instead.\r\n */\r\nasync function create$1(context, payload) {\r\n const state = context.state;\r\n const entity = state.$name;\r\n return context.dispatch(`${state.$connection}/create`, { ...payload, entity }, { root: true });\r\n}\r\n/**\r\n * Insert given data to the state. Unlike `create`, this method will not\r\n * remove existing data within the state, but it will update the data\r\n * with the same primary key.\r\n */\r\nasync function insert$2(context, payload) {\r\n const state = context.state;\r\n const entity = state.$name;\r\n return context.dispatch(`${state.$connection}/insert`, { ...payload, entity }, { root: true });\r\n}\r\n/**\r\n * Update data in the store.\r\n */\r\nasync function update$1(context, payload) {\r\n const state = context.state;\r\n const entity = state.$name;\r\n // If the payload is an array, then the payload should be an array of\r\n // data so let's pass the whole payload as data.\r\n if (isArray(payload)) {\r\n return context.dispatch(`${state.$connection}/update`, { entity, data: payload }, { root: true });\r\n }\r\n // If the payload doesn't have `data` property, we'll assume that\r\n // the user has passed the object as the payload so let's define\r\n // the whole payload as a data.\r\n if (payload.data === undefined) {\r\n return context.dispatch(`${state.$connection}/update`, { entity, data: payload }, { root: true });\r\n }\r\n // Else destructure the payload and let root action handle it.\r\n return context.dispatch(`${state.$connection}/update`, { entity, ...payload }, { root: true });\r\n}\r\n/**\r\n * Insert or update given data to the state. Unlike `insert`, this method\r\n * will not replace existing data within the state, but it will update only\r\n * the submitted data with the same primary key.\r\n */\r\nasync function insertOrUpdate$1(context, payload) {\r\n const state = context.state;\r\n const entity = state.$name;\r\n return context.dispatch(`${state.$connection}/insertOrUpdate`, { entity, ...payload }, { root: true });\r\n}\r\nasync function destroy$2(context, payload) {\r\n const state = context.state;\r\n const entity = state.$name;\r\n const where = payload;\r\n return context.dispatch(`${state.$connection}/delete`, { entity, where }, { root: true });\r\n}\r\n/**\r\n * Delete all data from the store.\r\n */\r\nasync function deleteAll$1(context) {\r\n const state = context.state;\r\n const entity = state.$name;\r\n return context.dispatch(`${state.$connection}/deleteAll`, { entity }, { root: true });\r\n}\r\nconst Actions = {\r\n new: newRecord$1,\r\n create: create$1,\r\n insert: insert$2,\r\n update: update$1,\r\n insertOrUpdate: insertOrUpdate$1,\r\n delete: destroy$2,\r\n deleteAll: deleteAll$1\r\n};\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\n/**\n * Helpers to enable Immutable compatibility *without* bringing in\n * the 'immutable' package as a dependency.\n */\n\n/**\n * Check if an object is immutable by checking if it has a key specific\n * to the immutable library.\n *\n * @param {any} object\n * @return {bool}\n */\nfunction isImmutable(object) {\n return !!(object && typeof object.hasOwnProperty === 'function' && (object.hasOwnProperty('__ownerID') || // Immutable.Map\n object._map && object._map.hasOwnProperty('__ownerID'))); // Immutable.Record\n}\n/**\n * Denormalize an immutable entity.\n *\n * @param {Schema} schema\n * @param {Immutable.Map|Immutable.Record} input\n * @param {function} unvisit\n * @param {function} getDenormalizedEntity\n * @return {Immutable.Map|Immutable.Record}\n */\n\nfunction denormalizeImmutable(schema, input, unvisit) {\n return Object.keys(schema).reduce(function (object, key) {\n // Immutable maps cast keys to strings on write so we need to ensure\n // we're accessing them using string keys.\n var stringKey = \"\" + key;\n\n if (object.has(stringKey)) {\n return object.set(stringKey, unvisit(object.get(stringKey), schema[stringKey]));\n } else {\n return object;\n }\n }, input);\n}\n\nvar getDefaultGetId = function getDefaultGetId(idAttribute) {\n return function (input) {\n return isImmutable(input) ? input.get(idAttribute) : input[idAttribute];\n };\n};\n\nvar EntitySchema = /*#__PURE__*/function () {\n function EntitySchema(key, definition, options) {\n if (definition === void 0) {\n definition = {};\n }\n\n if (options === void 0) {\n options = {};\n }\n\n if (!key || typeof key !== 'string') {\n throw new Error(\"Expected a string key for Entity, but found \" + key + \".\");\n }\n\n var _options = options,\n _options$idAttribute = _options.idAttribute,\n idAttribute = _options$idAttribute === void 0 ? 'id' : _options$idAttribute,\n _options$mergeStrateg = _options.mergeStrategy,\n mergeStrategy = _options$mergeStrateg === void 0 ? function (entityA, entityB) {\n return _extends({}, entityA, entityB);\n } : _options$mergeStrateg,\n _options$processStrat = _options.processStrategy,\n processStrategy = _options$processStrat === void 0 ? function (input) {\n return _extends({}, input);\n } : _options$processStrat,\n _options$fallbackStra = _options.fallbackStrategy,\n fallbackStrategy = _options$fallbackStra === void 0 ? function (key, schema) {\n return undefined;\n } : _options$fallbackStra;\n this._key = key;\n this._getId = typeof idAttribute === 'function' ? idAttribute : getDefaultGetId(idAttribute);\n this._idAttribute = idAttribute;\n this._mergeStrategy = mergeStrategy;\n this._processStrategy = processStrategy;\n this._fallbackStrategy = fallbackStrategy;\n this.define(definition);\n }\n\n var _proto = EntitySchema.prototype;\n\n _proto.define = function define(definition) {\n this.schema = Object.keys(definition).reduce(function (entitySchema, key) {\n var _extends2;\n\n var schema = definition[key];\n return _extends({}, entitySchema, (_extends2 = {}, _extends2[key] = schema, _extends2));\n }, this.schema || {});\n };\n\n _proto.getId = function getId(input, parent, key) {\n return this._getId(input, parent, key);\n };\n\n _proto.merge = function merge(entityA, entityB) {\n return this._mergeStrategy(entityA, entityB);\n };\n\n _proto.fallback = function fallback(id, schema) {\n return this._fallbackStrategy(id, schema);\n };\n\n _proto.normalize = function normalize(input, parent, key, visit, addEntity, visitedEntities) {\n var _this = this;\n\n var id = this.getId(input, parent, key);\n var entityType = this.key;\n\n if (!(entityType in visitedEntities)) {\n visitedEntities[entityType] = {};\n }\n\n if (!(id in visitedEntities[entityType])) {\n visitedEntities[entityType][id] = [];\n }\n\n if (visitedEntities[entityType][id].some(function (entity) {\n return entity === input;\n })) {\n return id;\n }\n\n visitedEntities[entityType][id].push(input);\n\n var processedEntity = this._processStrategy(input, parent, key);\n\n Object.keys(this.schema).forEach(function (key) {\n if (processedEntity.hasOwnProperty(key) && typeof processedEntity[key] === 'object') {\n var schema = _this.schema[key];\n var resolvedSchema = typeof schema === 'function' ? schema(input) : schema;\n processedEntity[key] = visit(processedEntity[key], processedEntity, key, resolvedSchema, addEntity, visitedEntities);\n }\n });\n addEntity(this, processedEntity, input, parent, key);\n return id;\n };\n\n _proto.denormalize = function denormalize(entity, unvisit) {\n var _this2 = this;\n\n if (isImmutable(entity)) {\n return denormalizeImmutable(this.schema, entity, unvisit);\n }\n\n Object.keys(this.schema).forEach(function (key) {\n if (entity.hasOwnProperty(key)) {\n var schema = _this2.schema[key];\n entity[key] = unvisit(entity[key], schema);\n }\n });\n return entity;\n };\n\n _createClass(EntitySchema, [{\n key: \"key\",\n get: function get() {\n return this._key;\n }\n }, {\n key: \"idAttribute\",\n get: function get() {\n return this._idAttribute;\n }\n }]);\n\n return EntitySchema;\n}();\n\nvar PolymorphicSchema = /*#__PURE__*/function () {\n function PolymorphicSchema(definition, schemaAttribute) {\n if (schemaAttribute) {\n this._schemaAttribute = typeof schemaAttribute === 'string' ? function (input) {\n return input[schemaAttribute];\n } : schemaAttribute;\n }\n\n this.define(definition);\n }\n\n var _proto = PolymorphicSchema.prototype;\n\n _proto.define = function define(definition) {\n this.schema = definition;\n };\n\n _proto.getSchemaAttribute = function getSchemaAttribute(input, parent, key) {\n return !this.isSingleSchema && this._schemaAttribute(input, parent, key);\n };\n\n _proto.inferSchema = function inferSchema(input, parent, key) {\n if (this.isSingleSchema) {\n return this.schema;\n }\n\n var attr = this.getSchemaAttribute(input, parent, key);\n return this.schema[attr];\n };\n\n _proto.normalizeValue = function normalizeValue(value, parent, key, visit, addEntity, visitedEntities) {\n var schema = this.inferSchema(value, parent, key);\n\n if (!schema) {\n return value;\n }\n\n var normalizedValue = visit(value, parent, key, schema, addEntity, visitedEntities);\n return this.isSingleSchema || normalizedValue === undefined || normalizedValue === null ? normalizedValue : {\n id: normalizedValue,\n schema: this.getSchemaAttribute(value, parent, key)\n };\n };\n\n _proto.denormalizeValue = function denormalizeValue(value, unvisit) {\n var schemaKey = isImmutable(value) ? value.get('schema') : value.schema;\n\n if (!this.isSingleSchema && !schemaKey) {\n return value;\n }\n\n var id = this.isSingleSchema ? undefined : isImmutable(value) ? value.get('id') : value.id;\n var schema = this.isSingleSchema ? this.schema : this.schema[schemaKey];\n return unvisit(id || value, schema);\n };\n\n _createClass(PolymorphicSchema, [{\n key: \"isSingleSchema\",\n get: function get() {\n return !this._schemaAttribute;\n }\n }]);\n\n return PolymorphicSchema;\n}();\n\nvar UnionSchema = /*#__PURE__*/function (_PolymorphicSchema) {\n _inheritsLoose(UnionSchema, _PolymorphicSchema);\n\n function UnionSchema(definition, schemaAttribute) {\n if (!schemaAttribute) {\n throw new Error('Expected option \"schemaAttribute\" not found on UnionSchema.');\n }\n\n return _PolymorphicSchema.call(this, definition, schemaAttribute) || this;\n }\n\n var _proto = UnionSchema.prototype;\n\n _proto.normalize = function normalize(input, parent, key, visit, addEntity, visitedEntities) {\n return this.normalizeValue(input, parent, key, visit, addEntity, visitedEntities);\n };\n\n _proto.denormalize = function denormalize(input, unvisit) {\n return this.denormalizeValue(input, unvisit);\n };\n\n return UnionSchema;\n}(PolymorphicSchema);\n\nvar ValuesSchema = /*#__PURE__*/function (_PolymorphicSchema) {\n _inheritsLoose(ValuesSchema, _PolymorphicSchema);\n\n function ValuesSchema() {\n return _PolymorphicSchema.apply(this, arguments) || this;\n }\n\n var _proto = ValuesSchema.prototype;\n\n _proto.normalize = function normalize(input, parent, key, visit, addEntity, visitedEntities) {\n var _this = this;\n\n return Object.keys(input).reduce(function (output, key, index) {\n var _extends2;\n\n var value = input[key];\n return value !== undefined && value !== null ? _extends({}, output, (_extends2 = {}, _extends2[key] = _this.normalizeValue(value, input, key, visit, addEntity, visitedEntities), _extends2)) : output;\n }, {});\n };\n\n _proto.denormalize = function denormalize(input, unvisit) {\n var _this2 = this;\n\n return Object.keys(input).reduce(function (output, key) {\n var _extends3;\n\n var entityOrId = input[key];\n return _extends({}, output, (_extends3 = {}, _extends3[key] = _this2.denormalizeValue(entityOrId, unvisit), _extends3));\n }, {});\n };\n\n return ValuesSchema;\n}(PolymorphicSchema);\n\nvar validateSchema = function validateSchema(definition) {\n var isArray = Array.isArray(definition);\n\n if (isArray && definition.length > 1) {\n throw new Error(\"Expected schema definition to be a single schema, but found \" + definition.length + \".\");\n }\n\n return definition[0];\n};\n\nvar getValues = function getValues(input) {\n return Array.isArray(input) ? input : Object.keys(input).map(function (key) {\n return input[key];\n });\n};\n\nvar normalize = function normalize(schema, input, parent, key, visit, addEntity, visitedEntities) {\n schema = validateSchema(schema);\n var values = getValues(input); // Special case: Arrays pass *their* parent on to their children, since there\n // is not any special information that can be gathered from themselves directly\n\n return values.map(function (value, index) {\n return visit(value, parent, key, schema, addEntity, visitedEntities);\n });\n};\n\nvar ArraySchema = /*#__PURE__*/function (_PolymorphicSchema) {\n _inheritsLoose(ArraySchema, _PolymorphicSchema);\n\n function ArraySchema() {\n return _PolymorphicSchema.apply(this, arguments) || this;\n }\n\n var _proto = ArraySchema.prototype;\n\n _proto.normalize = function normalize(input, parent, key, visit, addEntity, visitedEntities) {\n var _this = this;\n\n var values = getValues(input);\n return values.map(function (value, index) {\n return _this.normalizeValue(value, parent, key, visit, addEntity, visitedEntities);\n }).filter(function (value) {\n return value !== undefined && value !== null;\n });\n };\n\n _proto.denormalize = function denormalize(input, unvisit) {\n var _this2 = this;\n\n return input && input.map ? input.map(function (value) {\n return _this2.denormalizeValue(value, unvisit);\n }) : input;\n };\n\n return ArraySchema;\n}(PolymorphicSchema);\n\nvar _normalize = function normalize(schema, input, parent, key, visit, addEntity, visitedEntities) {\n var object = _extends({}, input);\n\n Object.keys(schema).forEach(function (key) {\n var localSchema = schema[key];\n var resolvedLocalSchema = typeof localSchema === 'function' ? localSchema(input) : localSchema;\n var value = visit(input[key], input, key, resolvedLocalSchema, addEntity, visitedEntities);\n\n if (value === undefined || value === null) {\n delete object[key];\n } else {\n object[key] = value;\n }\n });\n return object;\n};\n\nvar _denormalize = function denormalize(schema, input, unvisit) {\n if (isImmutable(input)) {\n return denormalizeImmutable(schema, input, unvisit);\n }\n\n var object = _extends({}, input);\n\n Object.keys(schema).forEach(function (key) {\n if (object[key] != null) {\n object[key] = unvisit(object[key], schema[key]);\n }\n });\n return object;\n};\n\nvar ObjectSchema = /*#__PURE__*/function () {\n function ObjectSchema(definition) {\n this.define(definition);\n }\n\n var _proto = ObjectSchema.prototype;\n\n _proto.define = function define(definition) {\n this.schema = Object.keys(definition).reduce(function (entitySchema, key) {\n var _extends2;\n\n var schema = definition[key];\n return _extends({}, entitySchema, (_extends2 = {}, _extends2[key] = schema, _extends2));\n }, this.schema || {});\n };\n\n _proto.normalize = function normalize() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _normalize.apply(void 0, [this.schema].concat(args));\n };\n\n _proto.denormalize = function denormalize() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _denormalize.apply(void 0, [this.schema].concat(args));\n };\n\n return ObjectSchema;\n}();\n\nvar visit = function visit(value, parent, key, schema, addEntity, visitedEntities) {\n if (typeof value !== 'object' || !value) {\n return value;\n }\n\n if (typeof schema === 'object' && (!schema.normalize || typeof schema.normalize !== 'function')) {\n var method = Array.isArray(schema) ? normalize : _normalize;\n return method(schema, value, parent, key, visit, addEntity, visitedEntities);\n }\n\n return schema.normalize(value, parent, key, visit, addEntity, visitedEntities);\n};\n\nvar addEntities = function addEntities(entities) {\n return function (schema, processedEntity, value, parent, key) {\n var schemaKey = schema.key;\n var id = schema.getId(value, parent, key);\n\n if (!(schemaKey in entities)) {\n entities[schemaKey] = {};\n }\n\n var existingEntity = entities[schemaKey][id];\n\n if (existingEntity) {\n entities[schemaKey][id] = schema.merge(existingEntity, processedEntity);\n } else {\n entities[schemaKey][id] = processedEntity;\n }\n };\n};\n\nvar schema = {\n Array: ArraySchema,\n Entity: EntitySchema,\n Object: ObjectSchema,\n Union: UnionSchema,\n Values: ValuesSchema\n};\nvar normalize$1 = function normalize(input, schema) {\n if (!input || typeof input !== 'object') {\n throw new Error(\"Unexpected input given to normalize. Expected type to be \\\"object\\\", found \\\"\" + (input === null ? 'null' : typeof input) + \"\\\".\");\n }\n\n var entities = {};\n var addEntity = addEntities(entities);\n var visitedEntities = {};\n var result = visit(input, input, null, schema, addEntity, visitedEntities);\n return {\n entities: entities,\n result: result\n };\n};\n\nclass Normalizer {\r\n /**\r\n * Normalize the record.\r\n */\r\n static process(query, record) {\r\n if (Utils.isEmpty(record)) {\r\n return {};\r\n }\r\n const entity = query.database.schemas[query.model.entity];\r\n const schema = Utils.isArray(record) ? [entity] : entity;\r\n return normalize$1(record, schema).entities;\r\n }\r\n}\n\nclass PivotCreator {\r\n /**\r\n * Create an intermediate entity if the data contains any entities that\r\n * require it for example `belongsTo` or `morphMany`.\r\n */\r\n static process(query, data) {\r\n Object.keys(data).forEach((entity) => {\r\n const model = query.getModel(entity);\r\n if (model.hasPivotFields()) {\r\n Utils.forOwn(model.pivotFields(), (field) => {\r\n Utils.forOwn(field, (attr, key) => {\r\n attr.createPivots(model, data, key);\r\n });\r\n });\r\n }\r\n });\r\n return data;\r\n }\r\n}\n\nclass Attacher {\r\n /**\r\n * Attach missing relational key to the records.\r\n */\r\n static process(query, data) {\r\n Utils.forOwn(data, (entity, name) => {\r\n const fields = query.getModel(name).fields();\r\n Utils.forOwn(entity, (record) => {\r\n Utils.forOwn(record, (value, key) => {\r\n const field = fields[key];\r\n if (field instanceof Relation) {\r\n value !== null && field.attach(value, record, data);\r\n }\r\n });\r\n });\r\n });\r\n return data;\r\n }\r\n}\n\nclass Processor {\r\n /**\r\n * Normalize the given data.\r\n */\r\n static normalize(query, record) {\r\n // First, let's normalize the data.\r\n let data = Normalizer.process(query, record);\r\n // Then, attach any missing foreign keys. For example, if a User has many\r\n // Post nested but without foreign key such as `user_id`, we can attach\r\n // the `user_id` value to the Post entities.\r\n data = Attacher.process(query, data);\r\n // Now we'll create any missing pivot entities for relationships such as\r\n // `belongsTo` or `morphMany`.\r\n data = PivotCreator.process(query, data);\r\n // And we'll return the result as a normalized data.\r\n return data;\r\n }\r\n}\n\nclass WhereFilter {\r\n /**\r\n * Filter the given data by registered where clause.\r\n */\r\n static filter(query, records) {\r\n if (query.wheres.length === 0) {\r\n return records;\r\n }\r\n return records.filter((record) => this.check(query, record));\r\n }\r\n /**\r\n * Checks if given Record matches the registered where clause.\r\n */\r\n static check(query, record) {\r\n const whereTypes = Utils.groupBy(query.wheres, (where) => where.boolean);\r\n const comparator = this.getComparator(query, record);\r\n let results = [];\r\n whereTypes.and && results.push(whereTypes.and.every(comparator));\r\n whereTypes.or && results.push(whereTypes.or.some(comparator));\r\n return results.indexOf(true) !== -1;\r\n }\r\n /**\r\n * Get comparator for the where clause.\r\n */\r\n static getComparator(query, record) {\r\n return (where) => {\r\n // Function with Record and Query as argument.\r\n if (typeof where.field === 'function') {\r\n const newQuery = new Query(query.store, query.entity);\r\n const result = this.executeWhereClosure(newQuery, record, where.field);\r\n if (typeof result === 'boolean') {\r\n return result;\r\n }\r\n // If closure returns undefined, we need to execute the local query.\r\n const matchingRecords = newQuery.get();\r\n // And check if current record is part of the result.\r\n return !Utils.isEmpty(matchingRecords.filter((rec) => {\r\n return rec['$id'] === record['$id'];\r\n }));\r\n }\r\n // Function with Record value as argument.\r\n if (typeof where.value === 'function') {\r\n return where.value(record[where.field]);\r\n }\r\n // Check if field value is in given where Array.\r\n if (Utils.isArray(where.value)) {\r\n return where.value.indexOf(record[where.field]) !== -1;\r\n }\r\n // Simple equal check.\r\n return record[where.field] === where.value;\r\n };\r\n }\r\n /**\r\n * Execute where closure.\r\n */\r\n static executeWhereClosure(query, record, closure) {\r\n if (closure.length !== 3) {\r\n return closure(record, query);\r\n }\r\n const model = new query.model(record);\r\n return closure(record, query, model);\r\n }\r\n}\n\nclass OrderByFilter {\r\n /**\r\n * Sort the given data by registered orders.\r\n */\r\n static filter(query, records) {\r\n if (query.orders.length === 0) {\r\n return records;\r\n }\r\n const keys = query.orders.map((order) => order.key);\r\n const directions = query.orders.map((order) => order.direction);\r\n return Utils.orderBy(records, keys, directions);\r\n }\r\n}\n\nclass LimitFilter {\r\n /**\r\n * Limit the given records by the lmilt and offset.\r\n */\r\n static filter(query, records) {\r\n return records.slice(query.offsetNumber, query.offsetNumber + query.limitNumber);\r\n }\r\n}\n\nclass Filter {\r\n /**\r\n * Filter the given data by registered where clause.\r\n */\r\n static where(query, records) {\r\n return WhereFilter.filter(query, records);\r\n }\r\n /**\r\n * Sort the given data by registered orders.\r\n */\r\n static orderBy(query, records) {\r\n return OrderByFilter.filter(query, records);\r\n }\r\n /**\r\n * Limit the given records by the lmilt and offset.\r\n */\r\n static limit(query, records) {\r\n return LimitFilter.filter(query, records);\r\n }\r\n}\n\nclass Loader {\r\n /**\r\n * Set the relationships that should be eager loaded with the query.\r\n */\r\n static with(query, name, constraint) {\r\n // If the name of the relation is `*`, we'll load all relationships.\r\n if (name === '*') {\r\n this.withAll(query, constraint);\r\n return;\r\n }\r\n // If we passed an array, we dispatch the bits to with queries.\r\n if (isArray(name)) {\r\n name.forEach((relationName) => this.with(query, relationName, constraint));\r\n return;\r\n }\r\n // Else parse relations and set appropriate constraints.\r\n this.parseWithRelations(query, name.split('.'), constraint);\r\n }\r\n /**\r\n * Set all relationships to be eager loaded with the query.\r\n */\r\n static withAll(query, constraint) {\r\n const fields = query.model.getFields();\r\n for (const field in fields) {\r\n fields[field] instanceof Relation && this.with(query, field, constraint);\r\n }\r\n }\r\n /**\r\n * Set relationships to be recursively eager loaded with the query.\r\n */\r\n static withAllRecursive(query, depth) {\r\n this.withAll(query, (relatedQuery) => {\r\n depth > 0 && relatedQuery.withAllRecursive(depth - 1);\r\n });\r\n }\r\n /**\r\n * Set eager load relation and constraint.\r\n */\r\n static setEagerLoad(query, name, constraint = null) {\r\n if (!query.load[name]) {\r\n query.load[name] = [];\r\n }\r\n constraint && query.load[name].push(constraint);\r\n }\r\n /**\r\n * Parse a list of relations into individuals.\r\n */\r\n static parseWithRelations(query, relations, constraint) {\r\n // First we'll get the very first relationship from teh whole relations.\r\n const relation = relations[0];\r\n // If the first relation has \"or\" syntax which is `|` for example\r\n // `posts|videos`, set each of them as separate eager load.\r\n relation.split('|').forEach((name) => {\r\n // If there's only one relationship in relations array, that means\r\n // there's no nested relationship. So we'll set the given\r\n // constraint to the relationship loading.\r\n if (relations.length === 1) {\r\n this.setEagerLoad(query, name, constraint);\r\n return;\r\n }\r\n // Else we'll skip adding constraint because the constraint has to be\r\n // applied to the nested relationship. We'll let `addNestedWiths`\r\n // method to handle that later.\r\n this.setEagerLoad(query, name);\r\n });\r\n // If the given relations only contains a single name, which means it\r\n // doesn't have any nested relations such as `posts.comments`, we\r\n // don't need go farther so return here.\r\n if (relations.length === 1) {\r\n return;\r\n }\r\n // Finally, we shift the first relation from the array and handle lest\r\n // of relations as a nested relation.\r\n relations.shift();\r\n this.addNestedWiths(query, relation, relations, constraint);\r\n }\r\n /**\r\n * Parse the nested relationships in a relation.\r\n */\r\n static addNestedWiths(query, name, children, constraint) {\r\n this.setEagerLoad(query, name, (nestedQuery) => {\r\n nestedQuery.with(children.join('.'), constraint);\r\n });\r\n }\r\n /**\r\n * Eager load the relationships for the given collection.\r\n */\r\n static eagerLoadRelations(query, collection) {\r\n const fields = query.model.getFields();\r\n for (const name in query.load) {\r\n const constraints = query.load[name];\r\n let relation = fields[name];\r\n if (relation instanceof Relation) {\r\n relation.load(query, collection, name, constraints);\r\n continue;\r\n }\r\n // If no relation was found on the query, it might be run on the\r\n // base entity of a hierarchy. In this case, we try looking up\r\n // the relation on the derived entities\r\n if (query.model.hasTypes()) {\r\n const candidateRelation = query.model.findRelationInSubTypes(name);\r\n if (candidateRelation !== null) {\r\n candidateRelation.load(query, collection, name, constraints);\r\n }\r\n }\r\n }\r\n }\r\n}\n\nclass Rollcaller {\r\n /**\r\n * Set where constraint based on relationship existence.\r\n */\r\n static has(query, relation, operator, count) {\r\n this.setHas(query, relation, 'exists', operator, count);\r\n }\r\n /**\r\n * Set where constraint based on relationship absence.\r\n */\r\n static hasNot(query, relation, operator, count) {\r\n this.setHas(query, relation, 'doesntExist', operator, count);\r\n }\r\n /**\r\n * Add where has condition.\r\n */\r\n static whereHas(query, relation, constraint) {\r\n this.setHas(query, relation, 'exists', undefined, undefined, constraint);\r\n }\r\n /**\r\n * Add where has not condition.\r\n */\r\n static whereHasNot(query, relation, constraint) {\r\n this.setHas(query, relation, 'doesntExist', undefined, undefined, constraint);\r\n }\r\n /**\r\n * Set `has` condition.\r\n */\r\n static setHas(query, relation, type, operator = '>=', count = 1, constraint = null) {\r\n if (typeof operator === 'number') {\r\n query.have.push({\r\n relation,\r\n type,\r\n operator: '>=',\r\n count: operator,\r\n constraint\r\n });\r\n return;\r\n }\r\n query.have.push({ relation, type, operator, count, constraint });\r\n }\r\n /**\r\n * Convert `has` conditions to where clause. It will check any relationship\r\n * existence, or absence for the records then set ids of the records that\r\n * matched the condition to `where` clause.\r\n *\r\n * This way, when the query gets executed, only those records that matched\r\n * the `has` condition get retrieved. In the future, once relationship index\r\n * mapping is implemented, we can simply do all checks inside the where\r\n * filter since we can treat `has` condition as usual `where` condition.\r\n *\r\n * For now, since we must fetch any relationship by eager loading them, due\r\n * to performance concern, we'll apply `has` conditions this way to gain\r\n * maximum performance.\r\n */\r\n static applyConstraints(query) {\r\n if (query.have.length === 0) {\r\n return;\r\n }\r\n const newQuery = query.newQuery();\r\n this.addHasWhereConstraints(query, newQuery);\r\n this.addHasConstraints(query, newQuery.get());\r\n }\r\n /**\r\n * Add has constraints to the given query. It's going to set all relationship\r\n * as `with` alongside with its closure constraints.\r\n */\r\n static addHasWhereConstraints(query, newQuery) {\r\n query.have.forEach((constraint) => {\r\n newQuery.with(constraint.relation, constraint.constraint);\r\n });\r\n }\r\n /**\r\n * Add has constraints as where clause.\r\n */\r\n static addHasConstraints(query, collection) {\r\n const comparators = this.getComparators(query);\r\n const ids = [];\r\n collection.forEach((model) => {\r\n if (comparators.every((comparator) => comparator(model))) {\r\n ids.push(model.$self().getIdFromRecord(model));\r\n }\r\n });\r\n query.whereIdIn(ids);\r\n }\r\n /**\r\n * Get comparators for the has clause.\r\n */\r\n static getComparators(query) {\r\n return query.have.map((constraint) => this.getComparator(constraint));\r\n }\r\n /**\r\n * Get a comparator for the has clause.\r\n */\r\n static getComparator(constraint) {\r\n const compare = this.getCountComparator(constraint.operator);\r\n return (model) => {\r\n const count = this.getRelationshipCount(model[constraint.relation]);\r\n const result = compare(count, constraint.count);\r\n return constraint.type === 'exists' ? result : !result;\r\n };\r\n }\r\n /**\r\n * Get count of the relationship.\r\n */\r\n static getRelationshipCount(relation) {\r\n if (isArray(relation)) {\r\n return relation.length;\r\n }\r\n return relation ? 1 : 0;\r\n }\r\n /**\r\n * Get comparator function for the `has` clause.\r\n */\r\n static getCountComparator(operator) {\r\n switch (operator) {\r\n case '=':\r\n return (x, y) => x === y;\r\n case '>':\r\n return (x, y) => x > y;\r\n case '>=':\r\n return (x, y) => x >= y;\r\n case '<':\r\n return (x, y) => x > 0 && x < y;\r\n case '<=':\r\n return (x, y) => x > 0 && x <= y;\r\n default:\r\n return (x, y) => x === y;\r\n }\r\n }\r\n}\n\nclass Query {\r\n /**\r\n * Create a new Query instance.\r\n */\r\n constructor(store, entity) {\r\n /**\r\n * This flag lets us know if current Query instance applies to\r\n * a base class or not (in order to know when to filter out\r\n * some records).\r\n */\r\n this.appliedOnBase = true;\r\n /**\r\n * Primary key ids to filter records by. It is used for filtering records\r\n * direct key lookup when a user is trying to fetch records by its\r\n * primary key.\r\n *\r\n * It should not be used if there is a logic which prevents index usage, for\r\n * example, an \"or\" condition which already requires a full scan of records.\r\n */\r\n this.idFilter = null;\r\n /**\r\n * Whether to use `idFilter` key lookup. True if there is a logic which\r\n * prevents index usage, for example, an \"or\" condition which already\r\n * requires full scan.\r\n */\r\n this.cancelIdFilter = false;\r\n /**\r\n * Primary key ids to filter joined records. It is used for filtering\r\n * records direct key lookup. It should not be cancelled, because it\r\n * is free from the effects of normal where methods.\r\n */\r\n this.joinedIdFilter = null;\r\n /**\r\n * The where constraints for the query.\r\n */\r\n this.wheres = [];\r\n /**\r\n * The has constraints for the query.\r\n */\r\n this.have = [];\r\n /**\r\n * The orders of the query result.\r\n */\r\n this.orders = [];\r\n /**\r\n * Number of results to skip.\r\n */\r\n this.offsetNumber = 0;\r\n /**\r\n * Maximum number of records to return.\r\n *\r\n * We use polyfill of `Number.MAX_SAFE_INTEGER` for IE11 here.\r\n */\r\n this.limitNumber = Math.pow(2, 53) - 1;\r\n /**\r\n * The relationships that should be eager loaded with the result.\r\n */\r\n this.load = {};\r\n this.store = store;\r\n this.database = store.$db();\r\n this.model = this.getModel(entity);\r\n this.baseModel = this.getBaseModel(entity);\r\n this.entity = entity;\r\n this.baseEntity = this.baseModel.entity;\r\n this.rootState = this.database.getState();\r\n this.state = this.rootState[this.baseEntity];\r\n this.appliedOnBase = this.baseEntity === this.entity;\r\n }\r\n /**\r\n * Delete all records from the store.\r\n */\r\n static deleteAll(store) {\r\n const database = store.$db();\r\n const models = database.models();\r\n for (const entity in models) {\r\n const state = database.getState()[entity];\r\n state && new this(store, entity).deleteAll();\r\n }\r\n }\r\n /**\r\n * Register a global hook. It will return ID for the hook that users may use\r\n * it to unregister hooks.\r\n */\r\n static on(on, callback) {\r\n const id = ++this.lastHookId;\r\n if (!this.hooks[on]) {\r\n this.hooks[on] = [];\r\n }\r\n this.hooks[on].push({ id, callback });\r\n return id;\r\n }\r\n /**\r\n * Unregister global hook with the given id.\r\n */\r\n static off(id) {\r\n return Object.keys(this.hooks).some((on) => {\r\n const hooks = this.hooks[on];\r\n const index = hooks.findIndex((h) => h.id === id);\r\n if (index === -1) {\r\n return false;\r\n }\r\n hooks.splice(index, 1);\r\n return true;\r\n });\r\n }\r\n /**\r\n * Get query class.\r\n */\r\n self() {\r\n return this.constructor;\r\n }\r\n /**\r\n * Create a new query instance.\r\n */\r\n newQuery(entity) {\r\n entity = entity || this.entity;\r\n return new Query(this.store, entity);\r\n }\r\n /**\r\n * Get model of given name from the container.\r\n */\r\n getModel(name) {\r\n const entity = name || this.entity;\r\n return this.database.model(entity);\r\n }\r\n /**\r\n * Get all models from the container.\r\n */\r\n getModels() {\r\n return this.database.models();\r\n }\r\n /**\r\n * Get base model of given name from the container.\r\n */\r\n getBaseModel(name) {\r\n return this.database.baseModel(name);\r\n }\r\n /**\r\n * Returns all record of the query chain result. This method is alias\r\n * of the `get` method.\r\n */\r\n all() {\r\n return this.get();\r\n }\r\n /**\r\n * Find the record by the given id.\r\n */\r\n find(value) {\r\n const record = this.state.data[this.normalizeIndexId(value)];\r\n if (!record) {\r\n return null;\r\n }\r\n return this.item(this.hydrate(record));\r\n }\r\n /**\r\n * Get the record of the given array of ids.\r\n */\r\n findIn(values) {\r\n if (!Utils.isArray(values)) {\r\n return [];\r\n }\r\n const records = values.reduce((collection, value) => {\r\n const record = this.state.data[this.normalizeIndexId(value)];\r\n if (!record) {\r\n return collection;\r\n }\r\n collection.push(this.hydrate(record));\r\n return collection;\r\n }, []);\r\n return this.collect(records);\r\n }\r\n /**\r\n * Returns all record of the query chain result.\r\n */\r\n get() {\r\n const records = this.select();\r\n return this.collect(records);\r\n }\r\n /**\r\n * Returns the first record of the query chain result.\r\n */\r\n first() {\r\n const records = this.select();\r\n if (records.length === 0) {\r\n return null;\r\n }\r\n return this.item(this.hydrate(records[0]));\r\n }\r\n /**\r\n * Returns the last record of the query chain result.\r\n */\r\n last() {\r\n const records = this.select();\r\n if (records.length === 0) {\r\n return null;\r\n }\r\n return this.item(this.hydrate(records[records.length - 1]));\r\n }\r\n /**\r\n * Checks whether a result of the query chain exists.\r\n */\r\n exists() {\r\n const records = this.select();\r\n return records.length > 0;\r\n }\r\n /**\r\n * Add a and where clause to the query.\r\n */\r\n where(field, value) {\r\n if (this.isIdfilterable(field)) {\r\n this.setIdFilter(value);\r\n }\r\n this.wheres.push({ field, value, boolean: 'and' });\r\n return this;\r\n }\r\n /**\r\n * Add a or where clause to the query.\r\n */\r\n orWhere(field, value) {\r\n // Cancel id filter usage, since \"or\" needs full scan.\r\n this.cancelIdFilter = true;\r\n this.wheres.push({ field, value, boolean: 'or' });\r\n return this;\r\n }\r\n /**\r\n * Filter records by their primary key.\r\n */\r\n whereId(value) {\r\n if (this.model.isCompositePrimaryKey()) {\r\n return this.where('$id', this.normalizeIndexId(value));\r\n }\r\n return this.where(this.model.primaryKey, value);\r\n }\r\n /**\r\n * Filter records by their primary keys.\r\n */\r\n whereIdIn(values) {\r\n if (this.model.isCompositePrimaryKey()) {\r\n const idList = values.reduce((keys, value) => {\r\n return [...keys, this.normalizeIndexId(value)];\r\n }, []);\r\n return this.where('$id', idList);\r\n }\r\n return this.where(this.model.primaryKey, values);\r\n }\r\n /**\r\n * Fast comparison for foreign keys. If the foreign key is the primary key,\r\n * it uses object lookup, fallback normal where otherwise.\r\n *\r\n * Why separate `whereFk` instead of just `where`? Additional logic needed\r\n * for the distinction between where and orWhere in normal queries, but\r\n * Fk lookups are always \"and\" type.\r\n */\r\n whereFk(field, value) {\r\n const values = Utils.isArray(value) ? value : [value];\r\n // If lookup filed is the primary key. Initialize or get intersection,\r\n // because boolean and could have a condition such as\r\n // `whereId(1).whereId(2).get()`.\r\n if (field === this.model.primaryKey) {\r\n this.setJoinedIdFilter(values);\r\n return this;\r\n }\r\n // Else fallback to normal where.\r\n this.where(field, values);\r\n return this;\r\n }\r\n /**\r\n * Convert value to string for composite primary keys as it expects an array.\r\n * Otherwise return as is.\r\n *\r\n * Throws an error when malformed value is given:\r\n * - Composite primary key defined on model, expects value to be array.\r\n * - Normal primary key defined on model, expects a primitive value.\r\n */\r\n normalizeIndexId(value) {\r\n if (this.model.isCompositePrimaryKey()) {\r\n if (!Utils.isArray(value)) {\r\n throw new Error('[Vuex ORM] Entity `' +\r\n this.entity +\r\n '` is configured with a composite ' +\r\n 'primary key and expects an array value but instead received: ' +\r\n JSON.stringify(value));\r\n }\r\n return JSON.stringify(value);\r\n }\r\n if (Utils.isArray(value)) {\r\n throw new Error('[Vuex ORM] Entity `' +\r\n this.entity +\r\n '` expects a single value but ' +\r\n 'instead received: ' +\r\n JSON.stringify(value));\r\n }\r\n return value;\r\n }\r\n /**\r\n * Check whether the given field is filterable through primary key\r\n * direct look up.\r\n */\r\n isIdfilterable(field) {\r\n return ((field === this.model.primaryKey || field === '$id') &&\r\n !this.cancelIdFilter);\r\n }\r\n /**\r\n * Set id filter for the given where condition.\r\n */\r\n setIdFilter(value) {\r\n const values = Utils.isArray(value) ? value : [value];\r\n // Initialize or get intersection, because boolean and could have a\r\n // condition such as `whereIdIn([1,2,3]).whereIdIn([1,2]).get()`.\r\n if (this.idFilter === null) {\r\n this.idFilter = new Set(values);\r\n return;\r\n }\r\n this.idFilter = new Set(values.filter((v) => this.idFilter.has(v)));\r\n }\r\n /**\r\n * Set joined id filter for the given where condition.\r\n */\r\n setJoinedIdFilter(values) {\r\n // Initialize or get intersection, because boolean and could have a\r\n // condition such as `whereId(1).whereId(2).get()`.\r\n if (this.joinedIdFilter === null) {\r\n this.joinedIdFilter = new Set(values);\r\n return;\r\n }\r\n this.joinedIdFilter = new Set(values.filter((v) => this.joinedIdFilter.has(v)));\r\n }\r\n /**\r\n * Add an order to the query.\r\n */\r\n orderBy(key, direction = 'asc') {\r\n this.orders.push({ key, direction });\r\n return this;\r\n }\r\n /**\r\n * Add an offset to the query.\r\n */\r\n offset(offset) {\r\n this.offsetNumber = offset;\r\n return this;\r\n }\r\n /**\r\n * Add limit to the query.\r\n */\r\n limit(limit) {\r\n this.limitNumber = limit;\r\n return this;\r\n }\r\n /**\r\n * Set the relationships that should be loaded.\r\n */\r\n with(name, constraint = null) {\r\n Loader.with(this, name, constraint);\r\n return this;\r\n }\r\n /**\r\n * Query all relations.\r\n */\r\n withAll(constraint = null) {\r\n Loader.withAll(this, constraint);\r\n return this;\r\n }\r\n /**\r\n * Query all relations recursively.\r\n */\r\n withAllRecursive(depth = 3) {\r\n Loader.withAllRecursive(this, depth);\r\n return this;\r\n }\r\n /**\r\n * Set where constraint based on relationship existence.\r\n */\r\n has(relation, operator, count) {\r\n Rollcaller.has(this, relation, operator, count);\r\n return this;\r\n }\r\n /**\r\n * Set where constraint based on relationship absence.\r\n */\r\n hasNot(relation, operator, count) {\r\n Rollcaller.hasNot(this, relation, operator, count);\r\n return this;\r\n }\r\n /**\r\n * Add where has condition.\r\n */\r\n whereHas(relation, constraint) {\r\n Rollcaller.whereHas(this, relation, constraint);\r\n return this;\r\n }\r\n /**\r\n * Add where has not condition.\r\n */\r\n whereHasNot(relation, constraint) {\r\n Rollcaller.whereHasNot(this, relation, constraint);\r\n return this;\r\n }\r\n /**\r\n * Get all records from the state and convert them into the array of\r\n * model instances.\r\n */\r\n records() {\r\n this.finalizeIdFilter();\r\n return this.getIdsToLookup().reduce((models, id) => {\r\n const record = this.state.data[id];\r\n if (!record) {\r\n return models;\r\n }\r\n const model = this.hydrate(record);\r\n // Ignore if the model is not current type of model.\r\n if (!this.appliedOnBase &&\r\n !(this.model.entity === model.$self().entity)) {\r\n return models;\r\n }\r\n models.push(model);\r\n return models;\r\n }, []);\r\n }\r\n /**\r\n * Check whether if id filters should on select. If not, clear out id filter.\r\n */\r\n finalizeIdFilter() {\r\n if (!this.cancelIdFilter || this.idFilter === null) {\r\n return;\r\n }\r\n this.where(this.model.isCompositePrimaryKey() ? '$id' : this.model.primaryKey, Array.from(this.idFilter.values()));\r\n this.idFilter = null;\r\n }\r\n /**\r\n * Get a list of id that should be used to lookup when fetching records\r\n * from the state.\r\n */\r\n getIdsToLookup() {\r\n // If both id filter and joined id filter are set, intersect them.\r\n if (this.idFilter && this.joinedIdFilter) {\r\n return Array.from(this.idFilter.values()).filter((id) => {\r\n return this.joinedIdFilter.has(id);\r\n });\r\n }\r\n // If only either one is set, return which one is set.\r\n if (this.idFilter || this.joinedIdFilter) {\r\n return Array.from((this.idFilter || this.joinedIdFilter).values());\r\n }\r\n // If none is set, return all keys.\r\n return Object.keys(this.state.data);\r\n }\r\n /**\r\n * Process the query and filter data.\r\n */\r\n select() {\r\n // At first, well apply any `has` condition to the query.\r\n Rollcaller.applyConstraints(this);\r\n // Next, get all record as an array and then start filtering it through.\r\n let records = this.records();\r\n // Process `beforeSelect` hook.\r\n records = this.executeSelectHook('beforeSelect', records);\r\n // Let's filter the records at first by the where clauses.\r\n records = this.filterWhere(records);\r\n // Process `afterWhere` hook.\r\n records = this.executeSelectHook('afterWhere', records);\r\n // Next, lets sort the data.\r\n records = this.filterOrderBy(records);\r\n // Process `afterOrderBy` hook.\r\n records = this.executeSelectHook('afterOrderBy', records);\r\n // Finally, slice the record by limit and offset.\r\n records = this.filterLimit(records);\r\n // Process `afterLimit` hook.\r\n records = this.executeSelectHook('afterLimit', records);\r\n return records;\r\n }\r\n /**\r\n * Filter the given data by registered where clause.\r\n */\r\n filterWhere(records) {\r\n return Filter.where(this, records);\r\n }\r\n /**\r\n * Sort the given data by registered orders.\r\n */\r\n filterOrderBy(records) {\r\n return Filter.orderBy(this, records);\r\n }\r\n /**\r\n * Limit the given records by the limit and offset.\r\n */\r\n filterLimit(records) {\r\n return Filter.limit(this, records);\r\n }\r\n /**\r\n * Get the count of the retrieved data.\r\n */\r\n count() {\r\n return this.get().length;\r\n }\r\n /**\r\n * Get the max value of the specified filed.\r\n */\r\n max(field) {\r\n const numbers = this.get().reduce((numbers, item) => {\r\n if (typeof item[field] === 'number') {\r\n numbers.push(item[field]);\r\n }\r\n return numbers;\r\n }, []);\r\n return numbers.length === 0 ? 0 : Math.max(...numbers);\r\n }\r\n /**\r\n * Get the min value of the specified filed.\r\n */\r\n min(field) {\r\n const numbers = this.get().reduce((numbers, item) => {\r\n if (typeof item[field] === 'number') {\r\n numbers.push(item[field]);\r\n }\r\n return numbers;\r\n }, []);\r\n return numbers.length === 0 ? 0 : Math.min(...numbers);\r\n }\r\n /**\r\n * Get the sum value of the specified filed.\r\n */\r\n sum(field) {\r\n return this.get().reduce((sum, item) => {\r\n if (typeof item[field] === 'number') {\r\n sum += item[field];\r\n }\r\n return sum;\r\n }, 0);\r\n }\r\n /**\r\n * Create a item from given record.\r\n */\r\n item(item) {\r\n if (Object.keys(this.load).length > 0) {\r\n Loader.eagerLoadRelations(this, [item]);\r\n }\r\n return item;\r\n }\r\n /**\r\n * Create a collection (array) from given records.\r\n */\r\n collect(collection) {\r\n if (collection.length < 1) {\r\n return [];\r\n }\r\n if (Object.keys(this.load).length > 0) {\r\n collection = collection.map((item) => {\r\n const model = this.model.getModelFromRecord(item);\r\n return new model(item);\r\n });\r\n Loader.eagerLoadRelations(this, collection);\r\n }\r\n return collection;\r\n }\r\n /**\r\n * Create new data with all fields filled by default values.\r\n */\r\n new() {\r\n const model = new this.model().$generateId();\r\n this.commitInsert(model.$getAttributes());\r\n return model;\r\n }\r\n /**\r\n * Save given data to the store by replacing all existing records in the\r\n * store. If you want to save data without replacing existing records,\r\n * use the `insert` method instead.\r\n */\r\n create(data, options) {\r\n return this.persist('create', data, options);\r\n }\r\n /**\r\n * Create records to the state.\r\n */\r\n createRecords(records) {\r\n this.deleteAll();\r\n return this.insertRecords(records);\r\n }\r\n /**\r\n * Insert given data to the store. Unlike `create`, this method will not\r\n * remove existing data within the store, but it will update the data\r\n * with the same primary key.\r\n */\r\n insert(data, options) {\r\n return this.persist('insert', data, options);\r\n }\r\n /**\r\n * Insert records to the store.\r\n */\r\n insertRecords(records) {\r\n let collection = this.mapHydrateRecords(records);\r\n collection = this.executeMutationHooks('beforeCreate', collection);\r\n this.commitInsertRecords(this.convertCollectionToRecords(collection));\r\n this.executeMutationHooks('afterCreate', collection);\r\n return collection;\r\n }\r\n /**\r\n * Update data in the state.\r\n */\r\n update(data, condition, options) {\r\n // If the data is array, simply normalize the data and update them.\r\n if (Utils.isArray(data)) {\r\n return this.persist('update', data, options);\r\n }\r\n // OK, the data is not an array. Now let's check `data` to see what we can\r\n // do if it's a closure.\r\n if (typeof data === 'function') {\r\n // If the data is closure, but if there's no condition, we wouldn't know\r\n // what record to update so raise an error and abort.\r\n if (!condition) {\r\n throw new Error('You must specify `where` to update records by specifying `data` as a closure.');\r\n }\r\n // If the condition is a closure, then update records by the closure.\r\n if (typeof condition === 'function') {\r\n return this.updateByCondition(data, condition);\r\n }\r\n // Else the condition is either String or Number, so let's\r\n // update the record by ID.\r\n return this.updateById(data, condition);\r\n }\r\n // Now the data is not a closure, and it's not an array, so it should be an object.\r\n // If the condition is closure, we can't normalize the data so let's update\r\n // records using the closure.\r\n if (typeof condition === 'function') {\r\n return this.updateByCondition(data, condition);\r\n }\r\n // If there's no condition, let's normalize the data and update them.\r\n if (!condition) {\r\n return this.persist('update', data, options);\r\n }\r\n // Now since the condition is either String or Number, let's check if the\r\n // model's primary key is not a composite key. If yes, we can't set the\r\n // condition as ID value for the record so throw an error and abort.\r\n if (this.model.isCompositePrimaryKey() && !Utils.isArray(condition)) {\r\n throw new Error(\"[Vuex ORM] You can't specify `where` value as `string` or `number` \" +\r\n 'when you have a composite key defined in your model. Please include ' +\r\n 'composite keys to the `data` fields.');\r\n }\r\n // Finally, let's add condition as the primary key of the object and\r\n // then normalize them to update the records.\r\n return this.updateById(data, condition);\r\n }\r\n /**\r\n * Update all records.\r\n */\r\n updateRecords(records) {\r\n const models = this.hydrateRecordsByMerging(records);\r\n return this.performUpdate(models);\r\n }\r\n /**\r\n * Update the state by id.\r\n */\r\n updateById(data, id) {\r\n id = typeof id === 'number' ? id.toString() : this.normalizeIndexId(id);\r\n const record = this.state.data[id];\r\n if (!record) {\r\n return null;\r\n }\r\n const model = this.hydrate(record);\r\n const instances = {\r\n [id]: this.processUpdate(data, model)\r\n };\r\n this.performUpdate(instances);\r\n return instances[id];\r\n }\r\n /**\r\n * Update the state by condition.\r\n */\r\n updateByCondition(data, condition) {\r\n const instances = Object.keys(this.state.data).reduce((instances, id) => {\r\n const instance = this.hydrate(this.state.data[id]);\r\n if (!condition(instance)) {\r\n return instances;\r\n }\r\n instances[id] = this.processUpdate(data, instance);\r\n return instances;\r\n }, {});\r\n return this.performUpdate(instances);\r\n }\r\n /**\r\n * Update the given record with given data.\r\n */\r\n processUpdate(data, instance) {\r\n if (typeof data === 'function') {\r\n data(instance);\r\n return instance;\r\n }\r\n // When the updated instance is not the base model, we tell te hydrate what model to use\r\n if (instance.constructor !== this.model && instance instanceof Model) {\r\n return this.hydrate({ ...instance, ...data }, instance.constructor);\r\n }\r\n return this.hydrate({ ...instance, ...data });\r\n }\r\n /**\r\n * Commit `update` to the state.\r\n */\r\n performUpdate(models) {\r\n models = this.updateIndexes(models);\r\n const beforeHooks = this.buildHooks('beforeUpdate');\r\n const afterHooks = this.buildHooks('afterUpdate');\r\n const updated = [];\r\n for (const id in models) {\r\n const model = models[id];\r\n if (beforeHooks.some((hook) => hook(model, null, this.entity) === false)) {\r\n continue;\r\n }\r\n this.commitInsert(model.$getAttributes());\r\n afterHooks.forEach((hook) => {\r\n hook(model, null, this.entity);\r\n });\r\n updated.push(model);\r\n }\r\n return updated;\r\n }\r\n /**\r\n * Update the key of the instances. This is needed when a user updates\r\n * record's primary key. We must then update the index key to\r\n * correspond with new id value.\r\n */\r\n updateIndexes(instances) {\r\n return Object.keys(instances).reduce((instances, key) => {\r\n const instance = instances[key];\r\n const id = String(this.model.getIndexIdFromRecord(instance));\r\n if (key !== id) {\r\n instance.$id = id;\r\n instances[id] = instance;\r\n delete instances[key];\r\n }\r\n return instances;\r\n }, instances);\r\n }\r\n /**\r\n * Insert or update given data to the state. Unlike `insert`, this method\r\n * will not replace existing data within the state, but it will update only\r\n * the submitted data with the same primary key.\r\n */\r\n insertOrUpdate(data, options) {\r\n return this.persist('insertOrUpdate', data, options);\r\n }\r\n /**\r\n * Insert or update the records.\r\n */\r\n insertOrUpdateRecords(records) {\r\n let toBeInserted = {};\r\n let toBeUpdated = {};\r\n Object.keys(records).forEach((id) => {\r\n const record = records[id];\r\n if (this.state.data[id]) {\r\n toBeUpdated[id] = record;\r\n return;\r\n }\r\n toBeInserted[id] = record;\r\n });\r\n return [\r\n ...this.insertRecords(toBeInserted),\r\n ...this.updateRecords(toBeUpdated)\r\n ];\r\n }\r\n /**\r\n * Persist data into the state while preserving it's original structure.\r\n */\r\n persist(method, data, options) {\r\n const clonedData = Utils.cloneDeep(data);\r\n const normalizedData = this.normalize(clonedData);\r\n if (Utils.isEmpty(normalizedData)) {\r\n if (method === 'create') {\r\n this.emptyState();\r\n }\r\n return {};\r\n }\r\n return Object.entries(normalizedData).reduce((collections, [entity, records]) => {\r\n const newQuery = this.newQuery(entity);\r\n const methodForEntity = this.getPersistMethod(entity, options, method);\r\n const collection = newQuery.persistRecords(methodForEntity, records);\r\n if (collection.length > 0) {\r\n collections[entity] = collection;\r\n }\r\n return collections;\r\n }, {});\r\n }\r\n /**\r\n * Persist given records to the store by the given method.\r\n */\r\n persistRecords(method, records) {\r\n switch (method) {\r\n case 'create':\r\n return this.createRecords(records);\r\n case 'insert':\r\n return this.insertRecords(records);\r\n case 'update':\r\n return this.updateRecords(records);\r\n case 'insertOrUpdate':\r\n return this.insertOrUpdateRecords(records);\r\n }\r\n }\r\n /**\r\n * Get persist method from given information.\r\n */\r\n getPersistMethod(entity, options, fallback) {\r\n if (options.create && options.create.includes(entity)) {\r\n return 'create';\r\n }\r\n if (options.insert && options.insert.includes(entity)) {\r\n return 'insert';\r\n }\r\n if (options.update && options.update.includes(entity)) {\r\n return 'update';\r\n }\r\n if (options.insertOrUpdate && options.insertOrUpdate.includes(entity)) {\r\n return 'insertOrUpdate';\r\n }\r\n return fallback;\r\n }\r\n delete(condition) {\r\n if (typeof condition === 'function') {\r\n return this.deleteByCondition(condition);\r\n }\r\n return this.deleteById(condition);\r\n }\r\n /**\r\n * Delete all records from the store. Even when deleting all records, we'll\r\n * iterate over all records to ensure that before and after hook will be\r\n * called for each existing records.\r\n */\r\n deleteAll() {\r\n // If the target entity is the base entity and not inherited entity, we can\r\n // just delete all records.\r\n if (this.appliedOnBase) {\r\n return this.deleteByCondition(() => true);\r\n }\r\n // Otherwise, we should filter out any derived entities from being deleted\r\n // so we'll add such filter here.\r\n return this.deleteByCondition((model) => model.$self().entity === this.model.entity);\r\n }\r\n /**\r\n * Delete a record from the store by given id.\r\n */\r\n deleteById(id) {\r\n const item = this.find(id);\r\n if (!item) {\r\n return null;\r\n }\r\n return this.deleteByCondition((model) => model.$id === item.$id)[0];\r\n }\r\n /**\r\n * Perform the actual delete query to the store.\r\n */\r\n deleteByCondition(condition) {\r\n let collection = this.mapHydrateAndFilterRecords(this.state.data, condition);\r\n collection = this.executeMutationHooks('beforeDelete', collection);\r\n if (collection.length === 0) {\r\n return [];\r\n }\r\n this.commitDelete(collection.map((model) => model.$id));\r\n this.executeMutationHooks('afterDelete', collection);\r\n return collection;\r\n }\r\n /**\r\n * Commit mutation.\r\n */\r\n commit(name, payload) {\r\n this.store.commit(`${this.database.namespace}/${name}`, {\r\n entity: this.baseEntity,\r\n ...payload\r\n });\r\n }\r\n /**\r\n * Commit insert mutation.\r\n */\r\n commitInsert(record) {\r\n this.commit('insert', { record });\r\n }\r\n /**\r\n * Commit insert records mutation.\r\n */\r\n commitInsertRecords(records) {\r\n this.commit('insertRecords', { records });\r\n }\r\n /**\r\n * Commit delete mutation.\r\n */\r\n commitDelete(id) {\r\n this.commit('delete', { id });\r\n }\r\n /**\r\n * Normalize the given data.\r\n */\r\n normalize(data) {\r\n return Processor.normalize(this, data);\r\n }\r\n /**\r\n * Convert given record to the model instance.\r\n */\r\n hydrate(record, forceModel) {\r\n if (forceModel) {\r\n return new forceModel(record);\r\n }\r\n const newModel = this.model.getModelFromRecord(record);\r\n if (newModel !== null) {\r\n return new newModel(record);\r\n }\r\n if (!this.appliedOnBase && record[this.model.typeKey] === undefined) {\r\n const typeValue = this.model.getTypeKeyValueFromModel();\r\n record = { ...record, [this.model.typeKey]: typeValue };\r\n return new this.model(record);\r\n }\r\n const baseModel = this.getBaseModel(this.entity);\r\n return new baseModel(record);\r\n }\r\n /**\r\n * Convert given records to instances by merging existing record. If there's\r\n * no existing record, that record will not be included in the result.\r\n */\r\n hydrateRecordsByMerging(records) {\r\n return Object.keys(records).reduce((instances, id) => {\r\n const recordInStore = this.state.data[id];\r\n if (!recordInStore) {\r\n return instances;\r\n }\r\n const record = records[id];\r\n const modelForRecordInStore = this.model.getModelFromRecord(recordInStore);\r\n if (modelForRecordInStore === null) {\r\n instances[id] = this.hydrate({ ...recordInStore, ...record });\r\n return instances;\r\n }\r\n instances[id] = this.hydrate({ ...recordInStore, ...record }, modelForRecordInStore);\r\n return instances;\r\n }, {});\r\n }\r\n /**\r\n * Convert all given records and return it as a collection.\r\n */\r\n mapHydrateRecords(records) {\r\n return Utils.map(records, (record) => this.hydrate(record));\r\n }\r\n /**\r\n * Convert all given records and return it as a collection.\r\n */\r\n mapHydrateAndFilterRecords(records, condition) {\r\n const collection = [];\r\n for (const key in records) {\r\n const model = this.hydrate(records[key]);\r\n condition(model) && collection.push(model);\r\n }\r\n return collection;\r\n }\r\n /**\r\n * Convert given collection to records by using index id as a key.\r\n */\r\n convertCollectionToRecords(collection) {\r\n return collection.reduce((carry, model) => {\r\n carry[model['$id']] = model.$getAttributes();\r\n return carry;\r\n }, {});\r\n }\r\n /**\r\n * Clears the current state from any data related to current model.\r\n *\r\n * - Everything if not in a inheritance scheme.\r\n * - Only derived instances if applied to a derived entity.\r\n */\r\n emptyState() {\r\n this.deleteAll();\r\n }\r\n /**\r\n * Build executable hook collection for the given hook.\r\n */\r\n buildHooks(on) {\r\n const hooks = this.getGlobalHookAsArray(on);\r\n const localHook = this.model[on];\r\n localHook && hooks.push(localHook.bind(this.model));\r\n return hooks;\r\n }\r\n /**\r\n * Get global hook of the given name as array by stripping id key and keep\r\n * only hook functions.\r\n */\r\n getGlobalHookAsArray(on) {\r\n const hooks = this.self().hooks[on];\r\n return hooks ? hooks.map((h) => h.callback.bind(this)) : [];\r\n }\r\n /**\r\n * Execute mutation hooks to the given collection.\r\n */\r\n executeMutationHooks(on, collection) {\r\n const hooks = this.buildHooks(on);\r\n if (hooks.length === 0) {\r\n return collection;\r\n }\r\n return collection.filter((model) => {\r\n return !hooks.some((hook) => hook(model, null, this.entity) === false);\r\n });\r\n }\r\n /**\r\n * Execute retrieve hook for the given method.\r\n */\r\n executeSelectHook(on, models) {\r\n const hooks = this.buildHooks(on);\r\n return hooks.reduce((collection, hook) => {\r\n collection = hook(models, this.entity);\r\n return collection;\r\n }, models);\r\n }\r\n}\r\n/**\r\n * The global lifecycle hook registries.\r\n */\r\nQuery.hooks = {};\r\n/**\r\n * The counter to generate the UID for global hooks.\r\n */\r\nQuery.lastHookId = 0;\n\n/**\r\n * Create a new Query instance.\r\n */\r\nfunction query(_state) {\r\n return (entity) => new Query(this, entity);\r\n}\r\n/**\r\n * Get all data of given entity.\r\n */\r\nfunction all(_state) {\r\n return (entity) => new Query(this, entity).all();\r\n}\r\n/**\r\n * Find a data of the given entity by given id.\r\n */\r\nfunction find(_state) {\r\n return (entity, id) => {\r\n return new Query(this, entity).find(id);\r\n };\r\n}\r\n/**\r\n * Find a data of the given entity by given id.\r\n */\r\nfunction findIn(_state) {\r\n return (entity, idList) => {\r\n return new Query(this, entity).findIn(idList);\r\n };\r\n}\r\nconst RootGetters = {\r\n query,\r\n all,\r\n find,\r\n findIn\r\n};\n\nclass OptionsBuilder {\r\n /**\r\n * Get persist options from the given payload.\r\n */\r\n static createPersistOptions(payload) {\r\n return {\r\n create: payload.create,\r\n insert: payload.insert,\r\n update: payload.update,\r\n insertOrUpdate: payload.insertOrUpdate\r\n };\r\n }\r\n}\n\n/**\r\n * Create new data with all fields filled by default values.\r\n */\r\nasync function newRecord(_context, payload) {\r\n return new Query(this, payload.entity).new();\r\n}\r\n/**\r\n * Save given data to the store by replacing all existing records in the\r\n * store. If you want to save data without replacing existing records,\r\n * use the `insert` method instead.\r\n */\r\nasync function create(_context, payload) {\r\n const entity = payload.entity;\r\n const data = payload.data;\r\n const options = OptionsBuilder.createPersistOptions(payload);\r\n return new Query(this, entity).create(data, options);\r\n}\r\n/**\r\n * Insert given data to the state. Unlike `create`, this method will not\r\n * remove existing data within the state, but it will update the data\r\n * with the same primary key.\r\n */\r\nasync function insert$1(_context, payload) {\r\n const entity = payload.entity;\r\n const data = payload.data;\r\n const options = OptionsBuilder.createPersistOptions(payload);\r\n return new Query(this, entity).insert(data, options);\r\n}\r\n/**\r\n * Update data in the store.\r\n */\r\nasync function update(_context, payload) {\r\n const entity = payload.entity;\r\n const data = payload.data;\r\n const where = payload.where || null;\r\n const options = OptionsBuilder.createPersistOptions(payload);\r\n return new Query(this, entity).update(data, where, options);\r\n}\r\n/**\r\n * Insert or update given data to the state. Unlike `insert`, this method\r\n * will not replace existing data within the state, but it will update only\r\n * the submitted data with the same primary key.\r\n */\r\nasync function insertOrUpdate(_context, payload) {\r\n const entity = payload.entity;\r\n const data = payload.data;\r\n const options = OptionsBuilder.createPersistOptions(payload);\r\n return new Query(this, entity).insertOrUpdate(data, options);\r\n}\r\nasync function destroy$1(_context, payload) {\r\n const { entity, where } = payload;\r\n return new Query(this, entity).delete(where);\r\n}\r\n/**\r\n * Delete all data from the store.\r\n */\r\nasync function deleteAll(_context, payload) {\r\n if (payload && payload.entity) {\r\n new Query(this, payload.entity).deleteAll();\r\n return;\r\n }\r\n Query.deleteAll(this);\r\n}\r\nconst RootActions = {\r\n new: newRecord,\r\n create,\r\n insert: insert$1,\r\n update,\r\n insertOrUpdate,\r\n delete: destroy$1,\r\n deleteAll\r\n};\n\nclass Connection {\r\n /**\r\n * Create a new connection instance.\r\n */\r\n constructor(store, connection, entity) {\r\n this.store = store;\r\n this.connection = connection;\r\n this.entity = entity;\r\n this.rootState = this.store.state[connection];\r\n this.state = this.rootState[entity];\r\n }\r\n /**\r\n * Insert the given record.\r\n */\r\n insert(record) {\r\n this.state.data = { ...this.state.data, [record.$id]: record };\r\n }\r\n /**\r\n * Insert the given records.\r\n */\r\n insertRecords(records) {\r\n this.state.data = { ...this.state.data, ...records };\r\n }\r\n /**\r\n * Delete records that matches the given id.\r\n */\r\n delete(id) {\r\n const data = {};\r\n for (const i in this.state.data) {\r\n if (!id.includes(i)) {\r\n data[i] = this.state.data[i];\r\n }\r\n }\r\n this.state.data = data;\r\n }\r\n}\n\n/**\r\n * Execute generic mutation. This method is used by `Model.commit` method so\r\n * that user can commit any state changes easily through models.\r\n */\r\nfunction $mutate(state, payload) {\r\n payload.callback(state[payload.entity]);\r\n}\r\n/**\r\n * Insert the given record.\r\n */\r\nfunction insert(state, payload) {\r\n const { entity, record } = payload;\r\n new Connection(this, state.$name, entity).insert(record);\r\n}\r\n/**\r\n * Insert the given records.\r\n */\r\nfunction insertRecords(state, payload) {\r\n const { entity, records } = payload;\r\n new Connection(this, state.$name, entity).insertRecords(records);\r\n}\r\n/**\r\n * Delete records from the store. The actual name for this mutation is\r\n * `delete`, but named `destroy` here because `delete` can't be declared at\r\n * this scope level.\r\n */\r\nfunction destroy(state, payload) {\r\n const { entity, id } = payload;\r\n new Connection(this, state.$name, entity).delete(id);\r\n}\r\nconst RootMutations = {\r\n $mutate,\r\n insert,\r\n insertRecords,\r\n delete: destroy\r\n};\n\nclass IdAttribute {\r\n /**\r\n * Creates a closure that generates the required id's for an entity.\r\n */\r\n static create(model) {\r\n return (value, _parentValue, _key) => {\r\n this.generateIds(value, model);\r\n const indexId = this.generateIndexId(value, model);\r\n return indexId;\r\n };\r\n }\r\n /**\r\n * Generate a field that is defined as primary keys. For keys with a proper\r\n * value set, it will do nothing. If a key is missing, it will generate\r\n * UID for it.\r\n */\r\n static generateIds(record, model) {\r\n const keys = isArray(model.primaryKey)\r\n ? model.primaryKey\r\n : [model.primaryKey];\r\n keys.forEach((k) => {\r\n if (record[k] !== undefined && record[k] !== null) {\r\n return;\r\n }\r\n const attr = model.getFields()[k];\r\n record[k] = attr instanceof Uid ? attr.make() : Uid$1.make();\r\n });\r\n }\r\n /**\r\n * Generate index id field (which is `$id`) and attach to the given record.\r\n */\r\n static generateIndexId(record, model) {\r\n record.$id = model.getIndexIdFromRecord(record);\r\n return record.$id;\r\n }\r\n}\n\nclass Schema {\r\n /**\r\n * Create a new schema instance.\r\n */\r\n constructor(model) {\r\n /**\r\n * List of generated schemas.\r\n */\r\n this.schemas = {};\r\n this.model = model;\r\n const models = model.database().models();\r\n Object.keys(models).forEach((name) => {\r\n this.one(models[name]);\r\n });\r\n }\r\n /**\r\n * Create a schema for the given model.\r\n */\r\n static create(model) {\r\n return new this(model).one();\r\n }\r\n /**\r\n * Create a single schema for the given model.\r\n */\r\n one(model) {\r\n model = model || this.model;\r\n if (this.schemas[model.entity]) {\r\n return this.schemas[model.entity];\r\n }\r\n const schema$1 = new schema.Entity(model.entity, {}, {\r\n idAttribute: IdAttribute.create(model)\r\n });\r\n this.schemas[model.entity] = schema$1;\r\n const definition = this.definition(model);\r\n schema$1.define(definition);\r\n return schema$1;\r\n }\r\n /**\r\n * Create an array schema for the given model.\r\n */\r\n many(model) {\r\n return new schema.Array(this.one(model));\r\n }\r\n /**\r\n * Create an union schema for the given model.\r\n */\r\n union(callback) {\r\n return new schema.Union(this.schemas, callback);\r\n }\r\n /**\r\n * Create a dfinition for the given model.\r\n */\r\n definition(model) {\r\n const fields = model.getFields();\r\n return Object.keys(fields).reduce((definition, key) => {\r\n const field = fields[key];\r\n if (field instanceof Relation) {\r\n definition[key] = field.define(this);\r\n }\r\n return definition;\r\n }, {});\r\n }\r\n}\n\nclass Database {\r\n constructor() {\r\n /**\r\n * The list of entities. It contains models and modules with its name.\r\n * The name is going to be the namespace for the Vuex Modules.\r\n */\r\n this.entities = [];\r\n /**\r\n * The normalizr schema.\r\n */\r\n this.schemas = {};\r\n /**\r\n * Whether the database has already been installed to Vuex or not.\r\n * Model registration steps depend on its value.\r\n */\r\n this.isStarted = false;\r\n }\r\n /**\r\n * Initialize the database before a user can start using it.\r\n */\r\n start(store, namespace) {\r\n this.store = store;\r\n this.namespace = namespace;\r\n this.connect();\r\n this.registerModules();\r\n this.createSchema();\r\n this.isStarted = true;\r\n }\r\n /**\r\n * Register a model and a module to Database.\r\n */\r\n register(model, module = {}) {\r\n this.checkModelTypeMappingCapability(model);\r\n const entity = {\r\n name: model.entity,\r\n base: model.baseEntity || model.entity,\r\n model: this.createBindingModel(model),\r\n module\r\n };\r\n this.entities.push(entity);\r\n if (this.isStarted) {\r\n this.registerModule(entity);\r\n this.registerSchema(entity);\r\n }\r\n }\r\n model(model) {\r\n const name = typeof model === 'string' ? model : model.entity;\r\n const entity = this.entities.find((entity) => {\r\n return entity.name === name;\r\n });\r\n const m = entity ? entity.model : null;\r\n if (!m) {\r\n throw new Error(`[Vuex ORM] Could not find the model \\`${name}\\`. Please check if you ` +\r\n 'have registered the model to the database.');\r\n }\r\n return m;\r\n }\r\n baseModel(model) {\r\n const name = typeof model === 'string' ? model : model.entity;\r\n const entity = this.entities.find((entity) => {\r\n return entity.name === name;\r\n });\r\n const m = entity ? this.model(entity.base) : null;\r\n if (!m) {\r\n throw new Error(`[Vuex ORM] Could not find the model \\`${name}\\`. Please check if you ` +\r\n 'have registered the model to the database.');\r\n }\r\n return m;\r\n }\r\n /**\r\n * Get all models from the entities list.\r\n */\r\n models() {\r\n return this.entities.reduce((models, entity) => {\r\n models[entity.name] = entity.model;\r\n return models;\r\n }, {});\r\n }\r\n /**\r\n * Get all base models from the entities list.\r\n */\r\n baseModels() {\r\n return this.entities.reduce((models, entity) => {\r\n models[entity.name] = this.model(entity.base);\r\n return models;\r\n }, {});\r\n }\r\n /**\r\n * Get the module of the given name from the entities list.\r\n */\r\n module(name) {\r\n const module = this.modules()[name];\r\n if (!module) {\r\n throw new Error(`[Vuex ORM] Could not find the module \\`${name}\\`. Please check if you ` +\r\n 'have registered the module to the database.');\r\n }\r\n return module;\r\n }\r\n /**\r\n * Get all modules from the entities list.\r\n */\r\n modules() {\r\n return this.entities.reduce((modules, entity) => {\r\n modules[entity.name] = entity.module;\r\n return modules;\r\n }, {});\r\n }\r\n /**\r\n * Get the root state from the store.\r\n */\r\n getState() {\r\n return this.store.state[this.namespace];\r\n }\r\n /**\r\n * Create a new model that binds the database.\r\n *\r\n * Transpiled classes cannot extend native classes. Implemented a workaround\r\n * until Babel releases a fix (https://github.com/babel/babel/issues/9367).\r\n */\r\n createBindingModel(model) {\r\n let proxy;\r\n try {\r\n proxy = new Function('model', `\n 'use strict';\n return class ${model.name} extends model {}\n `)(model);\r\n }\r\n catch (_a) {\r\n /* istanbul ignore next: rollback (mostly <= IE10) */\r\n proxy = class extends model {\r\n };\r\n /* istanbul ignore next: allocate model name */\r\n Object.defineProperty(proxy, 'name', { get: () => model.name });\r\n }\r\n Object.defineProperty(proxy, 'store', {\r\n value: () => this.store\r\n });\r\n return proxy;\r\n }\r\n /**\r\n * Create Vuex Module from the registered entities, and register to\r\n * the store.\r\n */\r\n registerModules() {\r\n this.store.registerModule(this.namespace, this.createModule());\r\n }\r\n /**\r\n * Generate module from the given entity, and register to the store.\r\n */\r\n registerModule(entity) {\r\n this.store.registerModule([this.namespace, entity.name], this.createSubModule(entity));\r\n }\r\n /**\r\n * Create Vuex Module from the registered entities.\r\n */\r\n createModule() {\r\n const module = this.createRootModule();\r\n this.entities.forEach((entity) => {\r\n module.modules[entity.name] = this.createSubModule(entity);\r\n });\r\n return module;\r\n }\r\n /**\r\n * Create root module.\r\n */\r\n createRootModule() {\r\n return {\r\n namespaced: true,\r\n state: this.createRootState(),\r\n getters: this.createRootGetters(),\r\n actions: this.createRootActions(),\r\n mutations: this.createRootMutations(),\r\n modules: {}\r\n };\r\n }\r\n /**\r\n * Create root state.\r\n */\r\n createRootState() {\r\n return () => ({ $name: this.namespace });\r\n }\r\n /**\r\n * Create root getters. For the getters, we bind the store instance to each\r\n * function to retrieve database instances within getters. We only need this\r\n * for the getter since actions and mutations are already bound to store.\r\n */\r\n createRootGetters() {\r\n return mapValues(RootGetters, (_getter, name) => {\r\n return RootGetters[name].bind(this.store);\r\n });\r\n }\r\n /**\r\n * Create root actions.\r\n */\r\n createRootActions() {\r\n return RootActions;\r\n }\r\n /**\r\n * Create root mutations.\r\n */\r\n createRootMutations() {\r\n return RootMutations;\r\n }\r\n /**\r\n * Create sub module.\r\n */\r\n createSubModule(entity) {\r\n return {\r\n namespaced: true,\r\n state: this.createSubState(entity),\r\n getters: this.createSubGetters(entity),\r\n actions: this.createSubActions(entity),\r\n mutations: this.createSubMutations(entity)\r\n };\r\n }\r\n /**\r\n * Create sub state.\r\n */\r\n createSubState(entity) {\r\n const { name, model, module } = entity;\r\n const modelState = typeof model.state === 'function' ? model.state() : model.state;\r\n const moduleState = typeof module.state === 'function' ? module.state() : module.state;\r\n return () => ({\r\n ...modelState,\r\n ...moduleState,\r\n $connection: this.namespace,\r\n $name: name,\r\n data: {}\r\n });\r\n }\r\n /**\r\n * Create sub getters.\r\n */\r\n createSubGetters(entity) {\r\n return { ...Getters, ...entity.module.getters };\r\n }\r\n /**\r\n * Create sub actions.\r\n */\r\n createSubActions(entity) {\r\n return { ...Actions, ...entity.module.actions };\r\n }\r\n /**\r\n * Create sub mutations.\r\n */\r\n createSubMutations(entity) {\r\n var _a;\r\n return (_a = entity.module.mutations) !== null && _a !== void 0 ? _a : {};\r\n }\r\n /**\r\n * Create the schema definition from registered entities list and set it to\r\n * the `schema` property. This schema will be used by the normalizer\r\n * to normalize data before persisting them to the Vuex Store.\r\n */\r\n createSchema() {\r\n this.entities.forEach((entity) => {\r\n this.registerSchema(entity);\r\n });\r\n }\r\n /**\r\n * Generate schema from the given entity.\r\n */\r\n registerSchema(entity) {\r\n this.schemas[entity.name] = Schema.create(entity.model);\r\n }\r\n /**\r\n * Inject database to the store instance.\r\n */\r\n connect() {\r\n this.store.$db = () => this;\r\n }\r\n /**\r\n * Warn user if the given model is a type of an inherited model that is being\r\n * defined without overwriting `Model.types()` because the user will not be\r\n * able to use the type mapping feature in this case.\r\n */\r\n checkModelTypeMappingCapability(model) {\r\n // If the model doesn't have `baseEntity` property set, we'll assume it is\r\n // not an inherited model so we can stop here.\r\n if (!model.baseEntity) {\r\n return;\r\n }\r\n // Now it seems like the model is indeed an inherited model. Let's check if\r\n // it has `types()` method declared, or we'll warn the user that it's not\r\n // possible to use type mapping feature.\r\n const baseModel = this.model(model.baseEntity);\r\n if (baseModel && baseModel.types === Model.types) {\r\n console.warn(`[Vuex ORM] Model \\`${model.name}\\` extends \\`${baseModel.name}\\` which doesn't ` +\r\n 'overwrite Model.types(). You will not be able to use type mapping.');\r\n }\r\n }\r\n}\n\nfunction use (plugin, options = {}) {\r\n const components = {\r\n Model,\r\n Attribute,\r\n Type,\r\n Attr,\r\n String: String$1,\r\n Number,\r\n Boolean,\r\n Uid,\r\n Relation,\r\n HasOne,\r\n BelongsTo,\r\n HasMany,\r\n HasManyBy,\r\n BelongsToMany,\r\n HasManyThrough,\r\n MorphTo,\r\n MorphOne,\r\n MorphMany,\r\n MorphToMany,\r\n MorphedByMany,\r\n Getters,\r\n Actions,\r\n RootGetters,\r\n RootActions,\r\n RootMutations,\r\n Query,\r\n Database\r\n };\r\n plugin.install(components, options);\r\n}\n\nvar index = {\r\n install,\r\n use,\r\n Container,\r\n Database,\r\n Model,\r\n Attribute,\r\n Type,\r\n Attr,\r\n String: String$1,\r\n Number,\r\n Boolean,\r\n Uid,\r\n Relation,\r\n HasOne,\r\n BelongsTo,\r\n HasMany,\r\n HasManyBy,\r\n BelongsToMany,\r\n HasManyThrough,\r\n MorphTo,\r\n MorphOne,\r\n MorphMany,\r\n MorphToMany,\r\n MorphedByMany,\r\n Getters,\r\n Actions,\r\n RootGetters,\r\n RootActions,\r\n RootMutations,\r\n Query\r\n};\n\nexport default index;\nexport { Actions, Attr, Attribute, BelongsTo, BelongsToMany, Boolean, Container, Database, Getters, HasMany, HasManyBy, HasManyThrough, HasOne, Model, MorphMany, MorphOne, MorphTo, MorphToMany, MorphedByMany, Number, Query, Relation, RootActions, RootGetters, RootMutations, String$1 as String, Type, Uid, install, use };\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","/*!\n * Chart.js v2.9.4\n * https://www.chartjs.org\n * (c) 2020 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :\ntypeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :\n(global = global || self, global.Chart = factory(global.moment));\n}(this, (function (moment) { 'use strict';\n\nmoment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nfunction getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}\n\nvar colorName = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\nvar conversions = createCommonjsModule(function (module) {\n/* MIT license */\n\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in colorName) {\n\tif (colorName.hasOwnProperty(key)) {\n\t\treverseKeywords[colorName[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in colorName) {\n\t\tif (colorName.hasOwnProperty(keyword)) {\n\t\t\tvar value = colorName[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn colorName[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n});\nvar conversions_1 = conversions.rgb;\nvar conversions_2 = conversions.hsl;\nvar conversions_3 = conversions.hsv;\nvar conversions_4 = conversions.hwb;\nvar conversions_5 = conversions.cmyk;\nvar conversions_6 = conversions.xyz;\nvar conversions_7 = conversions.lab;\nvar conversions_8 = conversions.lch;\nvar conversions_9 = conversions.hex;\nvar conversions_10 = conversions.keyword;\nvar conversions_11 = conversions.ansi16;\nvar conversions_12 = conversions.ansi256;\nvar conversions_13 = conversions.hcg;\nvar conversions_14 = conversions.apple;\nvar conversions_15 = conversions.gray;\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nvar route = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nvar colorConvert = convert;\n\nvar colorName$1 = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\n/* MIT license */\n\n\nvar colorString = {\n getRgba: getRgba,\n getHsla: getHsla,\n getRgb: getRgb,\n getHsl: getHsl,\n getHwb: getHwb,\n getAlpha: getAlpha,\n\n hexString: hexString,\n rgbString: rgbString,\n rgbaString: rgbaString,\n percentString: percentString,\n percentaString: percentaString,\n hslString: hslString,\n hslaString: hslaString,\n hwbString: hwbString,\n keyword: keyword\n};\n\nfunction getRgba(string) {\n if (!string) {\n return;\n }\n var abbr = /^#([a-fA-F0-9]{3,4})$/i,\n hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n keyword = /(\\w+)/;\n\n var rgb = [0, 0, 0],\n a = 1,\n match = string.match(abbr),\n hexAlpha = \"\";\n if (match) {\n match = match[1];\n hexAlpha = match[3];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i] + match[i], 16);\n }\n if (hexAlpha) {\n a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n }\n }\n else if (match = string.match(hex)) {\n hexAlpha = match[2];\n match = match[1];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n }\n if (hexAlpha) {\n a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n }\n }\n else if (match = string.match(rgba)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i + 1]);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(per)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(keyword)) {\n if (match[1] == \"transparent\") {\n return [0, 0, 0, 0];\n }\n rgb = colorName$1[match[1]];\n if (!rgb) {\n return;\n }\n }\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = scale(rgb[i], 0, 255);\n }\n if (!a && a != 0) {\n a = 1;\n }\n else {\n a = scale(a, 0, 1);\n }\n rgb[3] = a;\n return rgb;\n}\n\nfunction getHsla(string) {\n if (!string) {\n return;\n }\n var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hsl);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n s = scale(parseFloat(match[2]), 0, 100),\n l = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, s, l, a];\n }\n}\n\nfunction getHwb(string) {\n if (!string) {\n return;\n }\n var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hwb);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n w = scale(parseFloat(match[2]), 0, 100),\n b = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, w, b, a];\n }\n}\n\nfunction getRgb(string) {\n var rgba = getRgba(string);\n return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n var hsla = getHsla(string);\n return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n var vals = getRgba(string);\n if (vals) {\n return vals[3];\n }\n else if (vals = getHsla(string)) {\n return vals[3];\n }\n else if (vals = getHwb(string)) {\n return vals[3];\n }\n}\n\n// generators\nfunction hexString(rgba, a) {\n var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n return \"#\" + hexDouble(rgba[0]) \n + hexDouble(rgba[1])\n + hexDouble(rgba[2])\n + (\n (a >= 0 && a < 1)\n ? hexDouble(Math.round(a * 255))\n : \"\"\n );\n}\n\nfunction rgbString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return rgbaString(rgba, alpha);\n }\n return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n if (alpha === undefined) {\n alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n }\n return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return percentaString(rgba, alpha);\n }\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n\n return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n return hslaString(hsla, alpha);\n }\n return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n if (alpha === undefined) {\n alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n }\n return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n if (alpha === undefined) {\n alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n }\n return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n var str = num.toString(16).toUpperCase();\n return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorName$1) {\n reverseNames[colorName$1[name]] = name;\n}\n\n/* MIT license */\n\n\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = colorString.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = colorString.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = colorString.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn colorString.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn colorString.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn colorString.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn colorString.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn colorString.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn colorString.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn colorString.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn colorString.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = colorConvert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nvar chartjsColor = Color;\n\nfunction isValidKey(key) {\r\n\treturn ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\r\n}\r\n\r\n/**\r\n * @namespace Chart.helpers\r\n */\r\nvar helpers = {\r\n\t/**\r\n\t * An empty function that can be used, for example, for optional callback.\r\n\t */\r\n\tnoop: function() {},\r\n\r\n\t/**\r\n\t * Returns a unique id, sequentially generated from a global variable.\r\n\t * @returns {number}\r\n\t * @function\r\n\t */\r\n\tuid: (function() {\r\n\t\tvar id = 0;\r\n\t\treturn function() {\r\n\t\t\treturn id++;\r\n\t\t};\r\n\t}()),\r\n\r\n\t/**\r\n\t * Returns true if `value` is neither null nor undefined, else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisNullOrUndef: function(value) {\r\n\t\treturn value === null || typeof value === 'undefined';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an array (including typed arrays), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @function\r\n\t */\r\n\tisArray: function(value) {\r\n\t\tif (Array.isArray && Array.isArray(value)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar type = Object.prototype.toString.call(value);\r\n\t\tif (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an object (excluding null), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisObject: function(value) {\r\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is a finite number, else returns false\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t */\r\n\tisFinite: function(value) {\r\n\t\treturn (typeof value === 'number' || value instanceof Number) && isFinite(value);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns `value` if defined, else returns `defaultValue`.\r\n\t * @param {*} value - The value to return if defined.\r\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueOrDefault: function(value, defaultValue) {\r\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n\t * @param {Array} value - The array to lookup for value at `index`.\r\n\t * @param {number} index - The index in `value` to lookup for value.\r\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\r\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n\t * @param {function} fn - The function to call.\r\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @returns {*}\r\n\t */\r\n\tcallback: function(fn, args, thisArg) {\r\n\t\tif (fn && typeof fn.call === 'function') {\r\n\t\t\treturn fn.apply(thisArg, args);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Note(SB) for performance sake, this method should only be used when loopable type\r\n\t * is unknown or in none intensive code (not called often and small loopable). Else\r\n\t * it's preferable to use a regular for() loop and save extra function calls.\r\n\t * @param {object|Array} loopable - The object or array to be iterated.\r\n\t * @param {function} fn - The function to call for each item.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @param {boolean} [reverse] - If true, iterates backward on the loopable.\r\n\t */\r\n\teach: function(loopable, fn, thisArg, reverse) {\r\n\t\tvar i, len, keys;\r\n\t\tif (helpers.isArray(loopable)) {\r\n\t\t\tlen = loopable.length;\r\n\t\t\tif (reverse) {\r\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (helpers.isObject(loopable)) {\r\n\t\t\tkeys = Object.keys(loopable);\r\n\t\t\tlen = keys.length;\r\n\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n\t * @see https://stackoverflow.com/a/14853974\r\n\t * @param {Array} a0 - The array to compare\r\n\t * @param {Array} a1 - The array to compare\r\n\t * @returns {boolean}\r\n\t */\r\n\tarrayEquals: function(a0, a1) {\r\n\t\tvar i, ilen, v0, v1;\r\n\r\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\r\n\t\t\tv0 = a0[i];\r\n\t\t\tv1 = a1[i];\r\n\r\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\r\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (v0 !== v1) {\r\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n\t * @param {*} source - The value to clone.\r\n\t * @returns {*}\r\n\t */\r\n\tclone: function(source) {\r\n\t\tif (helpers.isArray(source)) {\r\n\t\t\treturn source.map(helpers.clone);\r\n\t\t}\r\n\r\n\t\tif (helpers.isObject(source)) {\r\n\t\t\tvar target = Object.create(source);\r\n\t\t\tvar keys = Object.keys(source);\r\n\t\t\tvar klen = keys.length;\r\n\t\t\tvar k = 0;\r\n\r\n\t\t\tfor (; k < klen; ++k) {\r\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\r\n\t\t\t}\r\n\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\treturn source;\r\n\t},\r\n\r\n\t/**\r\n\t * The default merger when Chart.helpers.merge is called without merger option.\r\n\t * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\r\n\t * @private\r\n\t */\r\n\t_merger: function(key, target, source, options) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.merge(tval, sval, options);\r\n\t\t} else {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Merges source[key] in target[key] only if target[key] is undefined.\r\n\t * @private\r\n\t */\r\n\t_mergerIf: function(key, target, source) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.mergeIf(tval, sval);\r\n\t\t} else if (!target.hasOwnProperty(key)) {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @param {object} [options] - Merging options:\r\n\t * @param {function} [options.merger] - The merge method (key, target, source, options)\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmerge: function(target, source, options) {\r\n\t\tvar sources = helpers.isArray(source) ? source : [source];\r\n\t\tvar ilen = sources.length;\r\n\t\tvar merge, i, keys, klen, k;\r\n\r\n\t\tif (!helpers.isObject(target)) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\toptions = options || {};\r\n\t\tmerge = options.merger || helpers._merger;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!helpers.isObject(source)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tkeys = Object.keys(source);\r\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\r\n\t\t\t\tmerge(keys[k], target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmergeIf: function(target, source) {\r\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\r\n\t},\r\n\r\n\t/**\r\n\t * Applies the contents of two or more objects together into the first object.\r\n\t * @param {object} target - The target object in which all objects are merged into.\r\n\t * @param {object} arg1 - Object containing additional properties to merge in target.\r\n\t * @param {object} argN - Additional objects containing properties to merge in target.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\textend: Object.assign || function(target) {\r\n\t\treturn helpers.merge(target, [].slice.call(arguments, 1), {\r\n\t\t\tmerger: function(key, dst, src) {\r\n\t\t\t\tdst[key] = src[key];\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * Basic javascript inheritance based on the model created in Backbone.js\r\n\t */\r\n\tinherits: function(extensions) {\r\n\t\tvar me = this;\r\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\r\n\t\t\treturn me.apply(this, arguments);\r\n\t\t};\r\n\r\n\t\tvar Surrogate = function() {\r\n\t\t\tthis.constructor = ChartElement;\r\n\t\t};\r\n\r\n\t\tSurrogate.prototype = me.prototype;\r\n\t\tChartElement.prototype = new Surrogate();\r\n\t\tChartElement.extend = helpers.inherits;\r\n\r\n\t\tif (extensions) {\r\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\r\n\t\t}\r\n\r\n\t\tChartElement.__super__ = me.prototype;\r\n\t\treturn ChartElement;\r\n\t},\r\n\r\n\t_deprecated: function(scope, value, previous, current) {\r\n\t\tif (value !== undefined) {\r\n\t\t\tconsole.warn(scope + ': \"' + previous +\r\n\t\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar helpers_core = helpers;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n * @function Chart.helpers.callCallback\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.callCallback = helpers.callback;\r\n\r\n/**\r\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n * @function Chart.helpers.indexOf\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.indexOf = function(array, item, fromIndex) {\r\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\r\n};\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n * @function Chart.helpers.getValueOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueOrDefault = helpers.valueOrDefault;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n * @function Chart.helpers.getValueAtIndexOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n/**\r\n * Easing functions adapted from Robert Penner's easing equations.\r\n * @namespace Chart.helpers.easingEffects\r\n * @see http://www.robertpenner.com/easing/\r\n */\r\nvar effects = {\r\n\tlinear: function(t) {\r\n\t\treturn t;\r\n\t},\r\n\r\n\teaseInQuad: function(t) {\r\n\t\treturn t * t;\r\n\t},\r\n\r\n\teaseOutQuad: function(t) {\r\n\t\treturn -t * (t - 2);\r\n\t},\r\n\r\n\teaseInOutQuad: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\r\n\t},\r\n\r\n\teaseInCubic: function(t) {\r\n\t\treturn t * t * t;\r\n\t},\r\n\r\n\teaseOutCubic: function(t) {\r\n\t\treturn (t = t - 1) * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutCubic: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\r\n\t},\r\n\r\n\teaseInQuart: function(t) {\r\n\t\treturn t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuart: function(t) {\r\n\t\treturn -((t = t - 1) * t * t * t - 1);\r\n\t},\r\n\r\n\teaseInOutQuart: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\r\n\t},\r\n\r\n\teaseInQuint: function(t) {\r\n\t\treturn t * t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuint: function(t) {\r\n\t\treturn (t = t - 1) * t * t * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutQuint: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\r\n\t},\r\n\r\n\teaseInSine: function(t) {\r\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\r\n\t},\r\n\r\n\teaseOutSine: function(t) {\r\n\t\treturn Math.sin(t * (Math.PI / 2));\r\n\t},\r\n\r\n\teaseInOutSine: function(t) {\r\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\r\n\t},\r\n\r\n\teaseInExpo: function(t) {\r\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\r\n\t},\r\n\r\n\teaseOutExpo: function(t) {\r\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\r\n\t},\r\n\r\n\teaseInOutExpo: function(t) {\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\r\n\t\t}\r\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\r\n\t},\r\n\r\n\teaseInCirc: function(t) {\r\n\t\tif (t >= 1) {\r\n\t\t\treturn t;\r\n\t\t}\r\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\r\n\t},\r\n\r\n\teaseOutCirc: function(t) {\r\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\r\n\t},\r\n\r\n\teaseInOutCirc: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\r\n\t\t}\r\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\r\n\t},\r\n\r\n\teaseInElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t},\r\n\r\n\teaseOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\r\n\t},\r\n\r\n\teaseInOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif ((t /= 0.5) === 2) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.45;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\tif (t < 1) {\r\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n\t},\r\n\teaseInBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn t * t * ((s + 1) * t - s);\r\n\t},\r\n\r\n\teaseOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\r\n\t},\r\n\r\n\teaseInOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\r\n\t},\r\n\r\n\teaseInBounce: function(t) {\r\n\t\treturn 1 - effects.easeOutBounce(1 - t);\r\n\t},\r\n\r\n\teaseOutBounce: function(t) {\r\n\t\tif (t < (1 / 2.75)) {\r\n\t\t\treturn 7.5625 * t * t;\r\n\t\t}\r\n\t\tif (t < (2 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\r\n\t\t}\r\n\t\tif (t < (2.5 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\r\n\t\t}\r\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\r\n\t},\r\n\r\n\teaseInOutBounce: function(t) {\r\n\t\tif (t < 0.5) {\r\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\r\n\t\t}\r\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\r\n\t}\r\n};\r\n\r\nvar helpers_easing = {\r\n\teffects: effects\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n * @function Chart.helpers.easingEffects\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.easingEffects = effects;\n\nvar PI = Math.PI;\r\nvar RAD_PER_DEG = PI / 180;\r\nvar DOUBLE_PI = PI * 2;\r\nvar HALF_PI = PI / 2;\r\nvar QUARTER_PI = PI / 4;\r\nvar TWO_THIRDS_PI = PI * 2 / 3;\r\n\r\n/**\r\n * @namespace Chart.helpers.canvas\r\n */\r\nvar exports$1 = {\r\n\t/**\r\n\t * Clears the entire canvas associated to the given `chart`.\r\n\t * @param {Chart} chart - The chart for which to clear the canvas.\r\n\t */\r\n\tclear: function(chart) {\r\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\r\n\t},\r\n\r\n\t/**\r\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n\t * given size (width, height) and the same `radius` for all corners.\r\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n\t * @param {number} x - The x axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} y - The y axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} width - The rectangle's width.\r\n\t * @param {number} height - The rectangle's height.\r\n\t * @param {number} radius - The rounded amount (in pixels) for the four corners.\r\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n\t */\r\n\troundedRect: function(ctx, x, y, width, height, radius) {\r\n\t\tif (radius) {\r\n\t\t\tvar r = Math.min(radius, height / 2, width / 2);\r\n\t\t\tvar left = x + r;\r\n\t\t\tvar top = y + r;\r\n\t\t\tvar right = x + width - r;\r\n\t\t\tvar bottom = y + height - r;\r\n\r\n\t\t\tctx.moveTo(x, top);\r\n\t\t\tif (left < right && top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, -HALF_PI);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, 0);\r\n\t\t\t\tctx.arc(right, bottom, r, 0, HALF_PI);\r\n\t\t\t\tctx.arc(left, bottom, r, HALF_PI, PI);\r\n\t\t\t} else if (left < right) {\r\n\t\t\t\tctx.moveTo(left, y);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, HALF_PI);\r\n\t\t\t\tctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\r\n\t\t\t} else if (top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, 0);\r\n\t\t\t\tctx.arc(left, bottom, r, 0, PI);\r\n\t\t\t} else {\r\n\t\t\t\tctx.arc(left, top, r, -PI, PI);\r\n\t\t\t}\r\n\t\t\tctx.closePath();\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t} else {\r\n\t\t\tctx.rect(x, y, width, height);\r\n\t\t}\r\n\t},\r\n\r\n\tdrawPoint: function(ctx, style, radius, x, y, rotation) {\r\n\t\tvar type, xOffset, yOffset, size, cornerRadius;\r\n\t\tvar rad = (rotation || 0) * RAD_PER_DEG;\r\n\r\n\t\tif (style && typeof style === 'object') {\r\n\t\t\ttype = style.toString();\r\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tctx.rotate(rad);\r\n\t\t\t\tctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\r\n\t\t\t\tctx.restore();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isNaN(radius) || radius <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\r\n\t\tswitch (style) {\r\n\t\t// Default includes circle\r\n\t\tdefault:\r\n\t\t\tctx.arc(x, y, radius, 0, DOUBLE_PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'triangle':\r\n\t\t\tctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rectRounded':\r\n\t\t\t// NOTE: the rounded rect implementation changed to use `arc` instead of\r\n\t\t\t// `quadraticCurveTo` since it generates better results when rect is\r\n\t\t\t// almost a circle. 0.516 (instead of 0.5) produces results with visually\r\n\t\t\t// closer proportion to the previous impl and it is inscribed in the\r\n\t\t\t// circle with `radius`. For more details, see the following PRs:\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5597\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5858\r\n\t\t\tcornerRadius = radius * 0.516;\r\n\t\t\tsize = radius - cornerRadius;\r\n\t\t\txOffset = Math.cos(rad + QUARTER_PI) * size;\r\n\t\t\tyOffset = Math.sin(rad + QUARTER_PI) * size;\r\n\t\t\tctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\r\n\t\t\tctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\r\n\t\t\tctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\r\n\t\t\tctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (!rotation) {\r\n\t\t\t\tsize = Math.SQRT1_2 * radius;\r\n\t\t\t\tctx.rect(x - size, y - size, 2 * size, 2 * size);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'rectRot':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'crossRot':\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'cross':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'star':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'dash':\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t\tctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tctx.fill();\r\n\t\tctx.stroke();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the point is inside the rectangle\r\n\t * @param {object} point - The point to test\r\n\t * @param {object} area - The rectangle\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\t_isPointInArea: function(point, area) {\r\n\t\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\r\n\t\treturn point.x > area.left - epsilon && point.x < area.right + epsilon &&\r\n\t\t\tpoint.y > area.top - epsilon && point.y < area.bottom + epsilon;\r\n\t},\r\n\r\n\tclipArea: function(ctx, area) {\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\r\n\t\tctx.clip();\r\n\t},\r\n\r\n\tunclipArea: function(ctx) {\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tlineTo: function(ctx, previous, target, flip) {\r\n\t\tvar stepped = target.steppedLine;\r\n\t\tif (stepped) {\r\n\t\t\tif (stepped === 'middle') {\r\n\t\t\t\tvar midpoint = (previous.x + target.x) / 2.0;\r\n\t\t\t\tctx.lineTo(midpoint, flip ? target.y : previous.y);\r\n\t\t\t\tctx.lineTo(midpoint, flip ? previous.y : target.y);\r\n\t\t\t} else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {\r\n\t\t\t\tctx.lineTo(previous.x, target.y);\r\n\t\t\t} else {\r\n\t\t\t\tctx.lineTo(target.x, previous.y);\r\n\t\t\t}\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!target.tension) {\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.bezierCurveTo(\r\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\r\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\r\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\r\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\r\n\t\t\ttarget.x,\r\n\t\t\ttarget.y);\r\n\t}\r\n};\r\n\r\nvar helpers_canvas = exports$1;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n * @namespace Chart.helpers.clear\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.clear = exports$1.clear;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n * @namespace Chart.helpers.drawRoundedRectangle\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.drawRoundedRectangle = function(ctx) {\r\n\tctx.beginPath();\r\n\texports$1.roundedRect.apply(exports$1, arguments);\r\n};\n\nvar defaults = {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_set: function(scope, values) {\r\n\t\treturn helpers_core.merge(this[scope] || (this[scope] = {}), values);\r\n\t}\r\n};\r\n\r\n// TODO(v3): remove 'global' from namespace. all default are global and\r\n// there's inconsistency around which options are under 'global'\r\ndefaults._set('global', {\r\n\tdefaultColor: 'rgba(0,0,0,0.1)',\r\n\tdefaultFontColor: '#666',\r\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\r\n\tdefaultFontSize: 12,\r\n\tdefaultFontStyle: 'normal',\r\n\tdefaultLineHeight: 1.2,\r\n\tshowLines: true\r\n});\r\n\r\nvar core_defaults = defaults;\n\nvar valueOrDefault = helpers_core.valueOrDefault;\r\n\r\n/**\r\n * Converts the given font object into a CSS font string.\r\n * @param {object} font - A font object.\r\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n * @private\r\n */\r\nfunction toFontString(font) {\r\n\tif (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (font.style ? font.style + ' ' : '')\r\n\t\t+ (font.weight ? font.weight + ' ' : '')\r\n\t\t+ font.size + 'px '\r\n\t\t+ font.family;\r\n}\r\n\r\n/**\r\n * @alias Chart.helpers.options\r\n * @namespace\r\n */\r\nvar helpers_options = {\r\n\t/**\r\n\t * Converts the given line height `value` in pixels for a specific font `size`.\r\n\t * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n\t * @param {number} size - The font size (in pixels) used to resolve relative `value`.\r\n\t * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoLineHeight: function(value, size) {\r\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\r\n\t\tif (!matches || matches[1] === 'normal') {\r\n\t\t\treturn size * 1.2;\r\n\t\t}\r\n\r\n\t\tvalue = +matches[2];\r\n\r\n\t\tswitch (matches[3]) {\r\n\t\tcase 'px':\r\n\t\t\treturn value;\r\n\t\tcase '%':\r\n\t\t\tvalue /= 100;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn size * value;\r\n\t},\r\n\r\n\t/**\r\n\t * Converts the given value into a padding object with pre-computed width/height.\r\n\t * @param {number|object} value - If a number, set the value to all TRBL component,\r\n\t * else, if and object, use defined properties and sets undefined ones to 0.\r\n\t * @returns {object} The padding values (top, right, bottom, left, width, height)\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoPadding: function(value) {\r\n\t\tvar t, r, b, l;\r\n\r\n\t\tif (helpers_core.isObject(value)) {\r\n\t\t\tt = +value.top || 0;\r\n\t\t\tr = +value.right || 0;\r\n\t\t\tb = +value.bottom || 0;\r\n\t\t\tl = +value.left || 0;\r\n\t\t} else {\r\n\t\t\tt = r = b = l = +value || 0;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: t,\r\n\t\t\tright: r,\r\n\t\t\tbottom: b,\r\n\t\t\tleft: l,\r\n\t\t\theight: t + b,\r\n\t\t\twidth: l + r\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Parses font options and returns the font object.\r\n\t * @param {object} options - A object that contains font options to be parsed.\r\n\t * @return {object} The font object.\r\n\t * @todo Support font.* options and renamed to toFont().\r\n\t * @private\r\n\t */\r\n\t_parseFont: function(options) {\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\r\n\t\tvar font = {\r\n\t\t\tfamily: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\r\n\t\t\tlineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\r\n\t\t\tsize: size,\r\n\t\t\tstyle: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\r\n\t\t\tweight: null,\r\n\t\t\tstring: ''\r\n\t\t};\r\n\r\n\t\tfont.string = toFontString(font);\r\n\t\treturn font;\r\n\t},\r\n\r\n\t/**\r\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n\t * @param {Array} inputs - An array of values, falling back to the last value.\r\n\t * @param {object} [context] - If defined and the current value is a function, the value\r\n\t * is called with `context` as first argument and the result becomes the new input.\r\n\t * @param {number} [index] - If defined and the current value is an array, the value\r\n\t * at `index` become the new input.\r\n\t * @param {object} [info] - object to return information about resolution in\r\n\t * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.\r\n\t * @since 2.7.0\r\n\t */\r\n\tresolve: function(inputs, context, index, info) {\r\n\t\tvar cacheable = true;\r\n\t\tvar i, ilen, value;\r\n\r\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\r\n\t\t\tvalue = inputs[i];\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (context !== undefined && typeof value === 'function') {\r\n\t\t\t\tvalue = value(context);\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (index !== undefined && helpers_core.isArray(value)) {\r\n\t\t\t\tvalue = value[index];\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (value !== undefined) {\r\n\t\t\t\tif (info && !cacheable) {\r\n\t\t\t\t\tinfo.cacheable = false;\r\n\t\t\t\t}\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\n/**\r\n * @alias Chart.helpers.math\r\n * @namespace\r\n */\r\nvar exports$2 = {\r\n\t/**\r\n\t * Returns an array of factors sorted from 1 to sqrt(value)\r\n\t * @private\r\n\t */\r\n\t_factorize: function(value) {\r\n\t\tvar result = [];\r\n\t\tvar sqrt = Math.sqrt(value);\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 1; i < sqrt; i++) {\r\n\t\t\tif (value % i === 0) {\r\n\t\t\t\tresult.push(i);\r\n\t\t\t\tresult.push(value / i);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (sqrt === (sqrt | 0)) { // if value is a square number\r\n\t\t\tresult.push(sqrt);\r\n\t\t}\r\n\r\n\t\tresult.sort(function(a, b) {\r\n\t\t\treturn a - b;\r\n\t\t}).pop();\r\n\t\treturn result;\r\n\t},\r\n\r\n\tlog10: Math.log10 || function(x) {\r\n\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\r\n\t\t// Check for whole powers of 10,\r\n\t\t// which due to floating point rounding error should be corrected.\r\n\t\tvar powerOf10 = Math.round(exponent);\r\n\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\r\n\r\n\t\treturn isPowerOf10 ? powerOf10 : exponent;\r\n\t}\r\n};\r\n\r\nvar helpers_math = exports$2;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.math.log10 instead.\r\n * @namespace Chart.helpers.log10\r\n * @deprecated since version 2.9.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.log10 = exports$2.log10;\n\nvar getRtlAdapter = function(rectX, width) {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn rectX + rectX + width - x;\r\n\t\t},\r\n\t\tsetWidth: function(w) {\r\n\t\t\twidth = w;\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\tif (align === 'center') {\r\n\t\t\t\treturn align;\r\n\t\t\t}\r\n\t\t\treturn align === 'right' ? 'left' : 'right';\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x - value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, itemWidth) {\r\n\t\t\treturn x - itemWidth;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getLtrAdapter = function() {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn x;\r\n\t\t},\r\n\t\tsetWidth: function(w) { // eslint-disable-line no-unused-vars\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\treturn align;\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x + value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars\r\n\t\t\treturn x;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getAdapter = function(rtl, rectX, width) {\r\n\treturn rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();\r\n};\r\n\r\nvar overrideTextDirection = function(ctx, direction) {\r\n\tvar style, original;\r\n\tif (direction === 'ltr' || direction === 'rtl') {\r\n\t\tstyle = ctx.canvas.style;\r\n\t\toriginal = [\r\n\t\t\tstyle.getPropertyValue('direction'),\r\n\t\t\tstyle.getPropertyPriority('direction'),\r\n\t\t];\r\n\r\n\t\tstyle.setProperty('direction', direction, 'important');\r\n\t\tctx.prevTextDirection = original;\r\n\t}\r\n};\r\n\r\nvar restoreTextDirection = function(ctx) {\r\n\tvar original = ctx.prevTextDirection;\r\n\tif (original !== undefined) {\r\n\t\tdelete ctx.prevTextDirection;\r\n\t\tctx.canvas.style.setProperty('direction', original[0], original[1]);\r\n\t}\r\n};\r\n\r\nvar helpers_rtl = {\r\n\tgetRtlAdapter: getAdapter,\r\n\toverrideTextDirection: overrideTextDirection,\r\n\trestoreTextDirection: restoreTextDirection,\r\n};\n\nvar helpers$1 = helpers_core;\r\nvar easing = helpers_easing;\r\nvar canvas = helpers_canvas;\r\nvar options = helpers_options;\r\nvar math = helpers_math;\r\nvar rtl = helpers_rtl;\nhelpers$1.easing = easing;\nhelpers$1.canvas = canvas;\nhelpers$1.options = options;\nhelpers$1.math = math;\nhelpers$1.rtl = rtl;\n\nfunction interpolate(start, view, model, ease) {\r\n\tvar keys = Object.keys(model);\r\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\r\n\r\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\tkey = keys[i];\r\n\r\n\t\ttarget = model[key];\r\n\r\n\t\t// if a value is added to the model after pivot() has been called, the view\r\n\t\t// doesn't contain it, so let's initialize the view to the target value.\r\n\t\tif (!view.hasOwnProperty(key)) {\r\n\t\t\tview[key] = target;\r\n\t\t}\r\n\r\n\t\tactual = view[key];\r\n\r\n\t\tif (actual === target || key[0] === '_') {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif (!start.hasOwnProperty(key)) {\r\n\t\t\tstart[key] = actual;\r\n\t\t}\r\n\r\n\t\torigin = start[key];\r\n\r\n\t\ttype = typeof target;\r\n\r\n\t\tif (type === typeof origin) {\r\n\t\t\tif (type === 'string') {\r\n\t\t\t\tc0 = chartjsColor(origin);\r\n\t\t\t\tif (c0.valid) {\r\n\t\t\t\t\tc1 = chartjsColor(target);\r\n\t\t\t\t\tif (c1.valid) {\r\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\r\n\t\t\t\tview[key] = origin + (target - origin) * ease;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tview[key] = target;\r\n\t}\r\n}\r\n\r\nvar Element = function(configuration) {\r\n\thelpers$1.extend(this, configuration);\r\n\tthis.initialize.apply(this, arguments);\r\n};\r\n\r\nhelpers$1.extend(Element.prototype, {\r\n\t_type: undefined,\r\n\r\n\tinitialize: function() {\r\n\t\tthis.hidden = false;\r\n\t},\r\n\r\n\tpivot: function() {\r\n\t\tvar me = this;\r\n\t\tif (!me._view) {\r\n\t\t\tme._view = helpers$1.extend({}, me._model);\r\n\t\t}\r\n\t\tme._start = {};\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttransition: function(ease) {\r\n\t\tvar me = this;\r\n\t\tvar model = me._model;\r\n\t\tvar start = me._start;\r\n\t\tvar view = me._view;\r\n\r\n\t\t// No animation -> No Transition\r\n\t\tif (!model || ease === 1) {\r\n\t\t\tme._view = helpers$1.extend({}, model);\r\n\t\t\tme._start = null;\r\n\t\t\treturn me;\r\n\t\t}\r\n\r\n\t\tif (!view) {\r\n\t\t\tview = me._view = {};\r\n\t\t}\r\n\r\n\t\tif (!start) {\r\n\t\t\tstart = me._start = {};\r\n\t\t}\r\n\r\n\t\tinterpolate(start, view, model, ease);\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\treturn {\r\n\t\t\tx: this._model.x,\r\n\t\t\ty: this._model.y\r\n\t\t};\r\n\t},\r\n\r\n\thasValue: function() {\r\n\t\treturn helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\r\n\t}\r\n});\r\n\r\nElement.extend = helpers$1.inherits;\r\n\r\nvar core_element = Element;\n\nvar exports$3 = core_element.extend({\r\n\tchart: null, // the animation associated chart instance\r\n\tcurrentStep: 0, // the current animation step\r\n\tnumSteps: 60, // default number of steps\r\n\teasing: '', // the easing to use for this animation\r\n\trender: null, // render function used by the animation service\r\n\r\n\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\r\n\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\r\n});\r\n\r\nvar core_animation = exports$3;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation instead\r\n * @prop Chart.Animation#animationObject\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'animationObject', {\r\n\tget: function() {\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation#chart instead\r\n * @prop Chart.Animation#chartInstance\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'chartInstance', {\r\n\tget: function() {\r\n\t\treturn this.chart;\r\n\t},\r\n\tset: function(value) {\r\n\t\tthis.chart = value;\r\n\t}\r\n});\n\ncore_defaults._set('global', {\r\n\tanimation: {\r\n\t\tduration: 1000,\r\n\t\teasing: 'easeOutQuart',\r\n\t\tonProgress: helpers$1.noop,\r\n\t\tonComplete: helpers$1.noop\r\n\t}\r\n});\r\n\r\nvar core_animations = {\r\n\tanimations: [],\r\n\trequest: null,\r\n\r\n\t/**\r\n\t * @param {Chart} chart - The chart to animate.\r\n\t * @param {Chart.Animation} animation - The animation that we will animate.\r\n\t * @param {number} duration - The animation duration in ms.\r\n\t * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n\t */\r\n\taddAnimation: function(chart, animation, duration, lazy) {\r\n\t\tvar animations = this.animations;\r\n\t\tvar i, ilen;\r\n\r\n\t\tanimation.chart = chart;\r\n\t\tanimation.startTime = Date.now();\r\n\t\tanimation.duration = duration;\r\n\r\n\t\tif (!lazy) {\r\n\t\t\tchart.animating = true;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\r\n\t\t\tif (animations[i].chart === chart) {\r\n\t\t\t\tanimations[i] = animation;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tanimations.push(animation);\r\n\r\n\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\r\n\t\tif (animations.length === 1) {\r\n\t\t\tthis.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\tcancelAnimation: function(chart) {\r\n\t\tvar index = helpers$1.findIndex(this.animations, function(animation) {\r\n\t\t\treturn animation.chart === chart;\r\n\t\t});\r\n\r\n\t\tif (index !== -1) {\r\n\t\t\tthis.animations.splice(index, 1);\r\n\t\t\tchart.animating = false;\r\n\t\t}\r\n\t},\r\n\r\n\trequestAnimationFrame: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.request === null) {\r\n\t\t\t// Skip animation frame requests until the active one is executed.\r\n\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\r\n\t\t\t// and 'mouseout' events will trigger multiple renders.\r\n\t\t\tme.request = helpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tme.request = null;\r\n\t\t\t\tme.startDigest();\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tstartDigest: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tme.advance();\r\n\r\n\t\t// Do we have more stuff to animate?\r\n\t\tif (me.animations.length > 0) {\r\n\t\t\tme.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tadvance: function() {\r\n\t\tvar animations = this.animations;\r\n\t\tvar animation, chart, numSteps, nextStep;\r\n\t\tvar i = 0;\r\n\r\n\t\t// 1 animation per chart, so we are looping charts here\r\n\t\twhile (i < animations.length) {\r\n\t\t\tanimation = animations[i];\r\n\t\t\tchart = animation.chart;\r\n\t\t\tnumSteps = animation.numSteps;\r\n\r\n\t\t\t// Make sure that currentStep starts at 1\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/6104\r\n\t\t\tnextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\r\n\t\t\tanimation.currentStep = Math.min(nextStep, numSteps);\r\n\r\n\t\t\thelpers$1.callback(animation.render, [chart, animation], chart);\r\n\t\t\thelpers$1.callback(animation.onAnimationProgress, [animation], chart);\r\n\r\n\t\t\tif (animation.currentStep >= numSteps) {\r\n\t\t\t\thelpers$1.callback(animation.onAnimationComplete, [animation], chart);\r\n\t\t\t\tchart.animating = false;\r\n\t\t\t\tanimations.splice(i, 1);\r\n\t\t\t} else {\r\n\t\t\t\t++i;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar resolve = helpers$1.options.resolve;\r\n\r\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\r\n\r\n/**\r\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n */\r\nfunction listenArrayEvents(array, listener) {\r\n\tif (array._chartjs) {\r\n\t\tarray._chartjs.listeners.push(listener);\r\n\t\treturn;\r\n\t}\r\n\r\n\tObject.defineProperty(array, '_chartjs', {\r\n\t\tconfigurable: true,\r\n\t\tenumerable: false,\r\n\t\tvalue: {\r\n\t\t\tlisteners: [listener]\r\n\t\t}\r\n\t});\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tvar base = array[key];\r\n\r\n\t\tObject.defineProperty(array, key, {\r\n\t\t\tconfigurable: true,\r\n\t\t\tenumerable: false,\r\n\t\t\tvalue: function() {\r\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\tvar res = base.apply(this, args);\r\n\r\n\t\t\t\thelpers$1.each(array._chartjs.listeners, function(object) {\r\n\t\t\t\t\tif (typeof object[method] === 'function') {\r\n\t\t\t\t\t\tobject[method].apply(object, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Removes the given array event listener and cleanup extra attached properties (such as\r\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n */\r\nfunction unlistenArrayEvents(array, listener) {\r\n\tvar stub = array._chartjs;\r\n\tif (!stub) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar listeners = stub.listeners;\r\n\tvar index = listeners.indexOf(listener);\r\n\tif (index !== -1) {\r\n\t\tlisteners.splice(index, 1);\r\n\t}\r\n\r\n\tif (listeners.length > 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tdelete array[key];\r\n\t});\r\n\r\n\tdelete array._chartjs;\r\n}\r\n\r\n// Base class for all dataset controllers (line, bar, etc)\r\nvar DatasetController = function(chart, datasetIndex) {\r\n\tthis.initialize(chart, datasetIndex);\r\n};\r\n\r\nhelpers$1.extend(DatasetController.prototype, {\r\n\r\n\t/**\r\n\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdatasetElementType: null,\r\n\r\n\t/**\r\n\t * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdataElementType: null,\r\n\r\n\t/**\r\n\t * Dataset element option keys to be resolved in _resolveDatasetElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth'\r\n\t],\r\n\r\n\t/**\r\n\t * Data element option keys to be resolved in _resolveDataElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'pointStyle'\r\n\t],\r\n\r\n\tinitialize: function(chart, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tme.chart = chart;\r\n\t\tme.index = datasetIndex;\r\n\t\tme.linkScales();\r\n\t\tme.addElements();\r\n\t\tme._type = me.getMeta().type;\r\n\t},\r\n\r\n\tupdateIndex: function(datasetIndex) {\r\n\t\tthis.index = datasetIndex;\r\n\t},\r\n\r\n\tlinkScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar chart = me.chart;\r\n\t\tvar scales = chart.scales;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scalesOpts = chart.options.scales;\r\n\r\n\t\tif (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {\r\n\t\t\tmeta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;\r\n\t\t}\r\n\t\tif (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {\r\n\t\t\tmeta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;\r\n\t\t}\r\n\t},\r\n\r\n\tgetDataset: function() {\r\n\t\treturn this.chart.data.datasets[this.index];\r\n\t},\r\n\r\n\tgetMeta: function() {\r\n\t\treturn this.chart.getDatasetMeta(this.index);\r\n\t},\r\n\r\n\tgetScaleForId: function(scaleID) {\r\n\t\treturn this.chart.scales[scaleID];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScale: function() {\r\n\t\treturn this.getScaleForId(this._getValueScaleId());\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScale: function() {\r\n\t\treturn this.getScaleForId(this._getIndexScaleId());\r\n\t},\r\n\r\n\treset: function() {\r\n\t\tthis._update(true);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroy: function() {\r\n\t\tif (this._data) {\r\n\t\t\tunlistenArrayEvents(this._data, this);\r\n\t\t}\r\n\t},\r\n\r\n\tcreateMetaDataset: function() {\r\n\t\tvar me = this;\r\n\t\tvar type = me.datasetElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index\r\n\t\t});\r\n\t},\r\n\r\n\tcreateMetaData: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar type = me.dataElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index\r\n\t\t});\r\n\t},\r\n\r\n\taddElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data || [];\r\n\t\tvar metaData = meta.data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\r\n\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\r\n\t\t}\r\n\r\n\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\r\n\t},\r\n\r\n\taddElementAndReset: function(index) {\r\n\t\tvar element = this.createMetaData(index);\r\n\t\tthis.getMeta().data.splice(index, 0, element);\r\n\t\tthis.updateElement(element, index, true);\r\n\t},\r\n\r\n\tbuildOrUpdateElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar data = dataset.data || (dataset.data = []);\r\n\r\n\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\r\n\t\t// real-time charts), we need to monitor these data modifications and synchronize\r\n\t\t// the internal meta data accordingly.\r\n\t\tif (me._data !== data) {\r\n\t\t\tif (me._data) {\r\n\t\t\t\t// This case happens when the user replaced the data array instance.\r\n\t\t\t\tunlistenArrayEvents(me._data, me);\r\n\t\t\t}\r\n\r\n\t\t\tif (data && Object.isExtensible(data)) {\r\n\t\t\t\tlistenArrayEvents(data, me);\r\n\t\t\t}\r\n\t\t\tme._data = data;\r\n\t\t}\r\n\r\n\t\t// Re-sync meta data in case the user replaced the data array or if we missed\r\n\t\t// any updates and so make sure that we handle number of datapoints changing.\r\n\t\tme.resyncElements();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the merged user-supplied and default dataset-level options\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tme._config = helpers$1.merge(Object.create(null), [\r\n\t\t\tme.chart.options.datasets[me._type],\r\n\t\t\tme.getDataset(),\r\n\t\t], {\r\n\t\t\tmerger: function(key, target, source) {\r\n\t\t\t\tif (key !== '_meta' && key !== 'data') {\r\n\t\t\t\t\thelpers$1._merger(key, target, source);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_update: function(reset) {\r\n\t\tvar me = this;\r\n\t\tme._configure();\r\n\t\tme._cachedDataOpts = null;\r\n\t\tme.update(reset);\r\n\t},\r\n\r\n\tupdate: helpers$1.noop,\r\n\r\n\ttransition: function(easingValue) {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].transition(easingValue);\r\n\t\t}\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.transition(easingValue);\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.draw();\r\n\t\t}\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].draw();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a set of predefined style properties that should be used to represent the dataset\r\n\t * or the data if the index is specified\r\n\t * @param {number} index - data index\r\n\t * @return {IStyleInterface} style object\r\n\t */\r\n\tgetStyle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = meta.dataset;\r\n\t\tvar style;\r\n\r\n\t\tme._configure();\r\n\t\tif (dataset && index === undefined) {\r\n\t\t\tstyle = me._resolveDatasetElementOptions(dataset || {});\r\n\t\t} else {\r\n\t\t\tindex = index || 0;\r\n\t\t\tstyle = me._resolveDataElementOptions(meta.data[index] || {}, index);\r\n\t\t}\r\n\r\n\t\tif (style.fill === false || style.fill === null) {\r\n\t\t\tstyle.backgroundColor = style.borderColor;\r\n\t\t}\r\n\r\n\t\treturn style;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element, hover) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = chart.options.elements[me.datasetElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._datasetElementOptions;\r\n\t\tvar values = {};\r\n\t\tvar i, ilen, key, readKey;\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index,\r\n\t\t\thover: hover\r\n\t\t};\r\n\r\n\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\tkey = elementOptions[i];\r\n\t\t\treadKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;\r\n\t\t\tvalues[key] = resolve([\r\n\t\t\t\tcustom[readKey],\r\n\t\t\t\tdatasetOpts[readKey],\r\n\t\t\t\toptions[readKey]\r\n\t\t\t], context);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(element, index) {\r\n\t\tvar me = this;\r\n\t\tvar custom = element && element.custom;\r\n\t\tvar cached = me._cachedDataOpts;\r\n\t\tif (cached && !custom) {\r\n\t\t\treturn cached;\r\n\t\t}\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar options = chart.options.elements[me.dataElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._dataElementOptions;\r\n\t\tvar values = {};\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// `resolve` sets cacheable to `false` if any option is indexed or scripted\r\n\t\tvar info = {cacheable: !custom};\r\n\r\n\t\tvar keys, i, ilen, key;\r\n\r\n\t\tcustom = custom || {};\r\n\r\n\t\tif (helpers$1.isArray(elementOptions)) {\r\n\t\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\t\tkey = elementOptions[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tkeys = Object.keys(elementOptions);\r\n\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\t\tkey = keys[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[elementOptions[key]],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (info.cacheable) {\r\n\t\t\tme._cachedDataOpts = Object.freeze(values);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tremoveHoverStyle: function(element) {\r\n\t\thelpers$1.merge(element._model, element.$previousStyle || {});\r\n\t\tdelete element.$previousStyle;\r\n\t},\r\n\r\n\tsetHoverStyle: function(element) {\r\n\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\r\n\t\tvar index = element._index;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar model = element._model;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\telement.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\r\n\t\tmodel.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\r\n\t\tmodel.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_removeDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\r\n\t\tif (element) {\r\n\t\t\tthis.removeHoverStyle(element);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_setDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\t\tvar prev = {};\r\n\t\tvar i, ilen, key, keys, hoverOptions, model;\r\n\r\n\t\tif (!element) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmodel = element._model;\r\n\t\thoverOptions = this._resolveDatasetElementOptions(element, true);\r\n\r\n\t\tkeys = Object.keys(hoverOptions);\r\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\tkey = keys[i];\r\n\t\t\tprev[key] = model[key];\r\n\t\t\tmodel[key] = hoverOptions[key];\r\n\t\t}\r\n\r\n\t\telement.$previousStyle = prev;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tresyncElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data;\r\n\t\tvar numMeta = meta.data.length;\r\n\t\tvar numData = data.length;\r\n\r\n\t\tif (numData < numMeta) {\r\n\t\t\tmeta.data.splice(numData, numMeta - numData);\r\n\t\t} else if (numData > numMeta) {\r\n\t\t\tme.insertElements(numMeta, numData - numMeta);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinsertElements: function(start, count) {\r\n\t\tfor (var i = 0; i < count; ++i) {\r\n\t\t\tthis.addElementAndReset(start + i);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPush: function() {\r\n\t\tvar count = arguments.length;\r\n\t\tthis.insertElements(this.getDataset().data.length - count, count);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPop: function() {\r\n\t\tthis.getMeta().data.pop();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataShift: function() {\r\n\t\tthis.getMeta().data.shift();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataSplice: function(start, count) {\r\n\t\tthis.getMeta().data.splice(start, count);\r\n\t\tthis.insertElements(start, arguments.length - 2);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataUnshift: function() {\r\n\t\tthis.insertElements(0, arguments.length);\r\n\t}\r\n});\r\n\r\nDatasetController.extend = helpers$1.inherits;\r\n\r\nvar core_datasetController = DatasetController;\n\nvar TAU = Math.PI * 2;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tarc: {\r\n\t\t\tbackgroundColor: core_defaults.global.defaultColor,\r\n\t\t\tborderColor: '#fff',\r\n\t\t\tborderWidth: 2,\r\n\t\t\tborderAlign: 'center'\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction clipArc(ctx, arc) {\r\n\tvar startAngle = arc.startAngle;\r\n\tvar endAngle = arc.endAngle;\r\n\tvar pixelMargin = arc.pixelMargin;\r\n\tvar angleMargin = pixelMargin / arc.outerRadius;\r\n\tvar x = arc.x;\r\n\tvar y = arc.y;\r\n\r\n\t// Draw an inner border by cliping the arc and drawing a double-width border\r\n\t// Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\r\n\tctx.beginPath();\r\n\tctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);\r\n\tif (arc.innerRadius > pixelMargin) {\r\n\t\tangleMargin = pixelMargin / arc.innerRadius;\r\n\t\tctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);\r\n\t} else {\r\n\t\tctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);\r\n\t}\r\n\tctx.closePath();\r\n\tctx.clip();\r\n}\r\n\r\nfunction drawFullCircleBorders(ctx, vm, arc, inner) {\r\n\tvar endAngle = arc.endAngle;\r\n\tvar i;\r\n\r\n\tif (inner) {\r\n\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\tclipArc(ctx, arc);\r\n\t\tarc.endAngle = endAngle;\r\n\t\tif (arc.endAngle === arc.startAngle && arc.fullCircles) {\r\n\t\t\tarc.endAngle += TAU;\r\n\t\t\tarc.fullCircles--;\r\n\t\t}\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n}\r\n\r\nfunction drawBorder(ctx, vm, arc) {\r\n\tvar inner = vm.borderAlign === 'inner';\r\n\r\n\tif (inner) {\r\n\t\tctx.lineWidth = vm.borderWidth * 2;\r\n\t\tctx.lineJoin = 'round';\r\n\t} else {\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tctx.lineJoin = 'bevel';\r\n\t}\r\n\r\n\tif (arc.fullCircles) {\r\n\t\tdrawFullCircleBorders(ctx, vm, arc, inner);\r\n\t}\r\n\r\n\tif (inner) {\r\n\t\tclipArc(ctx, arc);\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n}\r\n\r\nvar element_arc = core_element.extend({\r\n\t_type: 'arc',\r\n\r\n\tinLabelRange: function(mouseX) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tinRange: function(chartX, chartY) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\tvar pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});\r\n\t\t\tvar angle = pointRelativePosition.angle;\r\n\t\t\tvar distance = pointRelativePosition.distance;\r\n\r\n\t\t\t// Sanitise angle range\r\n\t\t\tvar startAngle = vm.startAngle;\r\n\t\t\tvar endAngle = vm.endAngle;\r\n\t\t\twhile (endAngle < startAngle) {\r\n\t\t\t\tendAngle += TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle > endAngle) {\r\n\t\t\t\tangle -= TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle < startAngle) {\r\n\t\t\t\tangle += TAU;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if within the range of the open/close angle\r\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\r\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\r\n\r\n\t\t\treturn (betweenAngles && withinRadius);\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\r\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\r\n\t\treturn {\r\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\r\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\r\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\r\n\r\n\t\treturn {\r\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\r\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;\r\n\t\tvar arc = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tinnerRadius: vm.innerRadius,\r\n\t\t\touterRadius: Math.max(vm.outerRadius - pixelMargin, 0),\r\n\t\t\tpixelMargin: pixelMargin,\r\n\t\t\tstartAngle: vm.startAngle,\r\n\t\t\tendAngle: vm.endAngle,\r\n\t\t\tfullCircles: Math.floor(vm.circumference / TAU)\r\n\t\t};\r\n\t\tvar i;\r\n\r\n\t\tctx.save();\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\r\n\t\tif (arc.fullCircles) {\r\n\t\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\t\tctx.closePath();\r\n\t\t\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\t\t\tctx.fill();\r\n\t\t\t}\r\n\t\t\tarc.endAngle = arc.startAngle + vm.circumference % TAU;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\tctx.closePath();\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth) {\r\n\t\t\tdrawBorder(ctx, vm, arc);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$1 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tline: {\r\n\t\t\ttension: 0.4,\r\n\t\t\tbackgroundColor: defaultColor,\r\n\t\t\tborderWidth: 3,\r\n\t\t\tborderColor: defaultColor,\r\n\t\t\tborderCapStyle: 'butt',\r\n\t\t\tborderDash: [],\r\n\t\t\tborderDashOffset: 0.0,\r\n\t\t\tborderJoinStyle: 'miter',\r\n\t\t\tcapBezierPoints: true,\r\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar element_line = core_element.extend({\r\n\t_type: 'line',\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar vm = me._view;\r\n\t\tvar ctx = me._chart.ctx;\r\n\t\tvar spanGaps = vm.spanGaps;\r\n\t\tvar points = me._children.slice(); // clone array\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\r\n\t\tvar lastDrawnIndex = -1;\r\n\t\tvar closePath = me._loop;\r\n\t\tvar index, previous, currentVM;\r\n\r\n\t\tif (!points.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (me._loop) {\r\n\t\t\tfor (index = 0; index < points.length; ++index) {\r\n\t\t\t\tprevious = helpers$1.previousItem(points, index);\r\n\t\t\t\t// If the line has an open path, shift the point array\r\n\t\t\t\tif (!points[index]._view.skip && previous._view.skip) {\r\n\t\t\t\t\tpoints = points.slice(index).concat(points.slice(0, index));\r\n\t\t\t\t\tclosePath = spanGaps;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If the line has a close path, add the first point again\r\n\t\t\tif (closePath) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\r\n\t\t// Stroke Line Options\r\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\r\n\r\n\t\t// IE 9 and 10 do not support line dash\r\n\t\tif (ctx.setLineDash) {\r\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\r\n\t\t}\r\n\r\n\t\tctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\r\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\r\n\t\tctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\r\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\r\n\r\n\t\t// Stroke Line\r\n\t\tctx.beginPath();\r\n\r\n\t\t// First point moves to it's starting position no matter what\r\n\t\tcurrentVM = points[0]._view;\r\n\t\tif (!currentVM.skip) {\r\n\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\tlastDrawnIndex = 0;\r\n\t\t}\r\n\r\n\t\tfor (index = 1; index < points.length; ++index) {\r\n\t\t\tcurrentVM = points[index]._view;\r\n\t\t\tprevious = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];\r\n\r\n\t\t\tif (!currentVM.skip) {\r\n\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\r\n\t\t\t\t\t// There was a gap and this is the first point after the gap\r\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Line to next point\r\n\t\t\t\t\thelpers$1.canvas.lineTo(ctx, previous._view, currentVM);\r\n\t\t\t\t}\r\n\t\t\t\tlastDrawnIndex = index;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (closePath) {\r\n\t\t\tctx.closePath();\r\n\t\t}\r\n\r\n\t\tctx.stroke();\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$2 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor$1 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tpoint: {\r\n\t\t\tradius: 3,\r\n\t\t\tpointStyle: 'circle',\r\n\t\t\tbackgroundColor: defaultColor$1,\r\n\t\t\tborderColor: defaultColor$1,\r\n\t\t\tborderWidth: 1,\r\n\t\t\t// Hover\r\n\t\t\thitRadius: 1,\r\n\t\t\thoverRadius: 4,\r\n\t\t\thoverBorderWidth: 1\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction xRange(mouseX) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nfunction yRange(mouseY) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nvar element_point = core_element.extend({\r\n\t_type: 'point',\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\r\n\t},\r\n\r\n\tinLabelRange: xRange,\r\n\tinXRange: xRange,\r\n\tinYRange: yRange,\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tpadding: vm.radius + vm.borderWidth\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar vm = this._view;\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar pointStyle = vm.pointStyle;\r\n\t\tvar rotation = vm.rotation;\r\n\t\tvar radius = vm.radius;\r\n\t\tvar x = vm.x;\r\n\t\tvar y = vm.y;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\r\n\r\n\t\tif (vm.skip) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Clipping for Points.\r\n\t\tif (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\r\n\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\r\n\t\t\tctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\r\n\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\r\n\t\t\thelpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\r\n\t\t}\r\n\t}\r\n});\n\nvar defaultColor$2 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tbackgroundColor: defaultColor$2,\r\n\t\t\tborderColor: defaultColor$2,\r\n\t\t\tborderSkipped: 'bottom',\r\n\t\t\tborderWidth: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction isVertical(vm) {\r\n\treturn vm && vm.width !== undefined;\r\n}\r\n\r\n/**\r\n * Helper function to get the bounds of the bar regardless of the orientation\r\n * @param bar {Chart.Element.Rectangle} the bar\r\n * @return {Bounds} bounds of the bar\r\n * @private\r\n */\r\nfunction getBarBounds(vm) {\r\n\tvar x1, x2, y1, y2, half;\r\n\r\n\tif (isVertical(vm)) {\r\n\t\thalf = vm.width / 2;\r\n\t\tx1 = vm.x - half;\r\n\t\tx2 = vm.x + half;\r\n\t\ty1 = Math.min(vm.y, vm.base);\r\n\t\ty2 = Math.max(vm.y, vm.base);\r\n\t} else {\r\n\t\thalf = vm.height / 2;\r\n\t\tx1 = Math.min(vm.x, vm.base);\r\n\t\tx2 = Math.max(vm.x, vm.base);\r\n\t\ty1 = vm.y - half;\r\n\t\ty2 = vm.y + half;\r\n\t}\r\n\r\n\treturn {\r\n\t\tleft: x1,\r\n\t\ttop: y1,\r\n\t\tright: x2,\r\n\t\tbottom: y2\r\n\t};\r\n}\r\n\r\nfunction swap(orig, v1, v2) {\r\n\treturn orig === v1 ? v2 : orig === v2 ? v1 : orig;\r\n}\r\n\r\nfunction parseBorderSkipped(vm) {\r\n\tvar edge = vm.borderSkipped;\r\n\tvar res = {};\r\n\r\n\tif (!edge) {\r\n\t\treturn res;\r\n\t}\r\n\r\n\tif (vm.horizontal) {\r\n\t\tif (vm.base > vm.x) {\r\n\t\t\tedge = swap(edge, 'left', 'right');\r\n\t\t}\r\n\t} else if (vm.base < vm.y) {\r\n\t\tedge = swap(edge, 'bottom', 'top');\r\n\t}\r\n\r\n\tres[edge] = true;\r\n\treturn res;\r\n}\r\n\r\nfunction parseBorderWidth(vm, maxW, maxH) {\r\n\tvar value = vm.borderWidth;\r\n\tvar skip = parseBorderSkipped(vm);\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = +value.top || 0;\r\n\t\tr = +value.right || 0;\r\n\t\tb = +value.bottom || 0;\r\n\t\tl = +value.left || 0;\r\n\t} else {\r\n\t\tt = r = b = l = +value || 0;\r\n\t}\r\n\r\n\treturn {\r\n\t\tt: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,\r\n\t\tr: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,\r\n\t\tb: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,\r\n\t\tl: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l\r\n\t};\r\n}\r\n\r\nfunction boundingRects(vm) {\r\n\tvar bounds = getBarBounds(vm);\r\n\tvar width = bounds.right - bounds.left;\r\n\tvar height = bounds.bottom - bounds.top;\r\n\tvar border = parseBorderWidth(vm, width / 2, height / 2);\r\n\r\n\treturn {\r\n\t\touter: {\r\n\t\t\tx: bounds.left,\r\n\t\t\ty: bounds.top,\r\n\t\t\tw: width,\r\n\t\t\th: height\r\n\t\t},\r\n\t\tinner: {\r\n\t\t\tx: bounds.left + border.l,\r\n\t\t\ty: bounds.top + border.t,\r\n\t\t\tw: width - border.l - border.r,\r\n\t\t\th: height - border.t - border.b\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction inRange(vm, x, y) {\r\n\tvar skipX = x === null;\r\n\tvar skipY = y === null;\r\n\tvar bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);\r\n\r\n\treturn bounds\r\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\r\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\r\n}\r\n\r\nvar element_rectangle = core_element.extend({\r\n\t_type: 'rectangle',\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar rects = boundingRects(vm);\r\n\t\tvar outer = rects.outer;\r\n\t\tvar inner = rects.inner;\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.fillRect(outer.x, outer.y, outer.w, outer.h);\r\n\r\n\t\tif (outer.w === inner.w && outer.h === inner.h) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(outer.x, outer.y, outer.w, outer.h);\r\n\t\tctx.clip();\r\n\t\tctx.fillStyle = vm.borderColor;\r\n\t\tctx.rect(inner.x, inner.y, inner.w, inner.h);\r\n\t\tctx.fill('evenodd');\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\theight: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm.base - vm.y;\r\n\t},\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\treturn inRange(this._view, mouseX, mouseY);\r\n\t},\r\n\r\n\tinLabelRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn isVertical(vm)\r\n\t\t\t? inRange(vm, mouseX, null)\r\n\t\t\t: inRange(vm, null, mouseY);\r\n\t},\r\n\r\n\tinXRange: function(mouseX) {\r\n\t\treturn inRange(this._view, mouseX, null);\r\n\t},\r\n\r\n\tinYRange: function(mouseY) {\r\n\t\treturn inRange(this._view, null, mouseY);\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar x, y;\r\n\t\tif (isVertical(vm)) {\r\n\t\t\tx = vm.x;\r\n\t\t\ty = (vm.y + vm.base) / 2;\r\n\t\t} else {\r\n\t\t\tx = (vm.x + vm.base) / 2;\r\n\t\t\ty = vm.y;\r\n\t\t}\r\n\r\n\t\treturn {x: x, y: y};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\r\n\t\treturn isVertical(vm)\r\n\t\t\t? vm.width * Math.abs(vm.y - vm.base)\r\n\t\t\t: vm.height * Math.abs(vm.x - vm.base);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t}\r\n});\n\nvar elements = {};\r\nvar Arc = element_arc;\r\nvar Line = element_line;\r\nvar Point = element_point;\r\nvar Rectangle = element_rectangle;\nelements.Arc = Arc;\nelements.Line = Line;\nelements.Point = Point;\nelements.Rectangle = Rectangle;\n\nvar deprecated = helpers$1._deprecated;\r\nvar valueOrDefault$3 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('bar', {\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tbar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n * @private\r\n */\r\nfunction computeMinSampleSize(scale, pixels) {\r\n\tvar min = scale._length;\r\n\tvar prev, curr, i, ilen;\r\n\r\n\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\r\n\t\tmin = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\r\n\t}\r\n\r\n\tfor (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {\r\n\t\tcurr = scale.getPixelForTick(i);\r\n\t\tmin = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;\r\n\t\tprev = curr;\r\n\t}\r\n\r\n\treturn min;\r\n}\r\n\r\n/**\r\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n * @private\r\n */\r\nfunction computeFitCategoryTraits(index, ruler, options) {\r\n\tvar thickness = options.barThickness;\r\n\tvar count = ruler.stackCount;\r\n\tvar curr = ruler.pixels[index];\r\n\tvar min = helpers$1.isNullOrUndef(thickness)\r\n\t\t? computeMinSampleSize(ruler.scale, ruler.pixels)\r\n\t\t: -1;\r\n\tvar size, ratio;\r\n\r\n\tif (helpers$1.isNullOrUndef(thickness)) {\r\n\t\tsize = min * options.categoryPercentage;\r\n\t\tratio = options.barPercentage;\r\n\t} else {\r\n\t\t// When bar thickness is enforced, category and bar percentages are ignored.\r\n\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\r\n\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\r\n\t\tsize = thickness * count;\r\n\t\tratio = 1;\r\n\t}\r\n\r\n\treturn {\r\n\t\tchunk: size / count,\r\n\t\tratio: ratio,\r\n\t\tstart: curr - (size / 2)\r\n\t};\r\n}\r\n\r\n/**\r\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n * percentage options are 1), based on the previous and following categories. This mode\r\n * generates bars with different widths when data are not evenly spaced.\r\n * @private\r\n */\r\nfunction computeFlexCategoryTraits(index, ruler, options) {\r\n\tvar pixels = ruler.pixels;\r\n\tvar curr = pixels[index];\r\n\tvar prev = index > 0 ? pixels[index - 1] : null;\r\n\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\r\n\tvar percent = options.categoryPercentage;\r\n\tvar start, size;\r\n\r\n\tif (prev === null) {\r\n\t\t// first data: its size is double based on the next point or,\r\n\t\t// if it's also the last data, we use the scale size.\r\n\t\tprev = curr - (next === null ? ruler.end - ruler.start : next - curr);\r\n\t}\r\n\r\n\tif (next === null) {\r\n\t\t// last data: its size is also double based on the previous point.\r\n\t\tnext = curr + curr - prev;\r\n\t}\r\n\r\n\tstart = curr - (curr - Math.min(prev, next)) / 2 * percent;\r\n\tsize = Math.abs(next - prev) / 2 * percent;\r\n\r\n\treturn {\r\n\t\tchunk: size / ruler.stackCount,\r\n\t\tratio: options.barPercentage,\r\n\t\tstart: start\r\n\t};\r\n}\r\n\r\nvar controller_bar = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Rectangle,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderSkipped',\r\n\t\t'borderWidth',\r\n\t\t'barPercentage',\r\n\t\t'barThickness',\r\n\t\t'categoryPercentage',\r\n\t\t'maxBarThickness',\r\n\t\t'minBarLength'\r\n\t],\r\n\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta, scaleOpts;\r\n\r\n\t\tcore_datasetController.prototype.initialize.apply(me, arguments);\r\n\r\n\t\tmeta = me.getMeta();\r\n\t\tmeta.stack = me.getDataset().stack;\r\n\t\tmeta.bar = true;\r\n\r\n\t\tscaleOpts = me._getIndexScale().options;\r\n\t\tdeprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');\r\n\t\tdeprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');\r\n\t\tdeprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');\r\n\t\tdeprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');\r\n\t\tdeprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._ruler = me.getRuler();\r\n\r\n\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(rects[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(rectangle, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar options = me._resolveDataElementOptions(rectangle, index);\r\n\r\n\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\r\n\t\trectangle._datasetIndex = me.index;\r\n\t\trectangle._index = index;\r\n\t\trectangle._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderSkipped: options.borderSkipped,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\tdatasetLabel: dataset.label,\r\n\t\t\tlabel: me.chart.data.labels[index]\r\n\t\t};\r\n\r\n\t\tif (helpers$1.isArray(dataset.data[index])) {\r\n\t\t\trectangle._model.borderSkipped = null;\r\n\t\t}\r\n\r\n\t\tme._updateElementGeometry(rectangle, index, reset, options);\r\n\r\n\t\trectangle.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateElementGeometry: function(rectangle, index, reset, options) {\r\n\t\tvar me = this;\r\n\t\tvar model = rectangle._model;\r\n\t\tvar vscale = me._getValueScale();\r\n\t\tvar base = vscale.getBasePixel();\r\n\t\tvar horizontal = vscale.isHorizontal();\r\n\t\tvar ruler = me._ruler || me.getRuler();\r\n\t\tvar vpixels = me.calculateBarValuePixels(me.index, index, options);\r\n\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);\r\n\r\n\t\tmodel.horizontal = horizontal;\r\n\t\tmodel.base = reset ? base : vpixels.base;\r\n\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\r\n\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\r\n\t\tmodel.height = horizontal ? ipixels.size : undefined;\r\n\t\tmodel.width = horizontal ? undefined : ipixels.size;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stacks based on groups and bar visibility.\r\n\t * @param {number} [last] - The dataset index\r\n\t * @returns {string[]} The list of stack IDs\r\n\t * @private\r\n\t */\r\n\t_getStacks: function(last) {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar stacks = [];\r\n\t\tvar i, meta;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\t// stacked | meta.stack\r\n\t\t\t// | found | not found | undefined\r\n\t\t\t// false | x | x | x\r\n\t\t\t// true | | x |\r\n\t\t\t// undefined | | x | x\r\n\t\t\tif (stacked === false || stacks.indexOf(meta.stack) === -1 ||\r\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\r\n\t\t\t\tstacks.push(meta.stack);\r\n\t\t\t}\r\n\t\t\tif (meta.index === last) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn stacks;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the effective number of stacks based on groups and bar visibility.\r\n\t * @private\r\n\t */\r\n\tgetStackCount: function() {\r\n\t\treturn this._getStacks().length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\r\n\t * @param {number} [datasetIndex] - The dataset index\r\n\t * @param {string} [name] - The stack name to find\r\n\t * @returns {number} The stack index\r\n\t * @private\r\n\t */\r\n\tgetStackIndex: function(datasetIndex, name) {\r\n\t\tvar stacks = this._getStacks(datasetIndex);\r\n\t\tvar index = (name !== undefined)\r\n\t\t\t? stacks.indexOf(name)\r\n\t\t\t: -1; // indexOf returns -1 if element is not present\r\n\r\n\t\treturn (index === -1)\r\n\t\t\t? stacks.length - 1\r\n\t\t\t: index;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetRuler: function() {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar pixels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\r\n\t\t\tpixels.push(scale.getPixelForValue(null, i, me.index));\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tpixels: pixels,\r\n\t\t\tstart: scale._startPixel,\r\n\t\t\tend: scale._endPixel,\r\n\t\t\tstackCount: me.getStackCount(),\r\n\t\t\tscale: scale\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Note: pixel values are not clamped to the scale area.\r\n\t * @private\r\n\t */\r\n\tcalculateBarValuePixels: function(datasetIndex, index, options) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar isHorizontal = scale.isHorizontal();\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar value = scale._parseValue(datasets[datasetIndex].data[index]);\r\n\t\tvar minBarLength = options.minBarLength;\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar stack = me.getMeta().stack;\r\n\t\tvar start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;\r\n\t\tvar length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, imeta, ivalue, base, head, size, stackLength;\r\n\r\n\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\timeta = metasets[i];\r\n\r\n\t\t\t\tif (imeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (imeta.stack === stack) {\r\n\t\t\t\t\tstackLength = scale._parseValue(datasets[imeta.index].data[index]);\r\n\t\t\t\t\tivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;\r\n\r\n\t\t\t\t\tif ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) {\r\n\t\t\t\t\t\tstart += ivalue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbase = scale.getPixelForValue(start);\r\n\t\thead = scale.getPixelForValue(start + length);\r\n\t\tsize = head - base;\r\n\r\n\t\tif (minBarLength !== undefined && Math.abs(size) < minBarLength) {\r\n\t\t\tsize = minBarLength;\r\n\t\t\tif (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {\r\n\t\t\t\thead = base - minBarLength;\r\n\t\t\t} else {\r\n\t\t\t\thead = base + minBarLength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tsize: size,\r\n\t\t\tbase: base,\r\n\t\t\thead: head,\r\n\t\t\tcenter: head + size / 2\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tcalculateBarIndexPixels: function(datasetIndex, index, ruler, options) {\r\n\t\tvar me = this;\r\n\t\tvar range = options.barThickness === 'flex'\r\n\t\t\t? computeFlexCategoryTraits(index, ruler, options)\r\n\t\t\t: computeFitCategoryTraits(index, ruler, options);\r\n\r\n\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\r\n\t\tvar center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\r\n\t\tvar size = Math.min(\r\n\t\t\tvalueOrDefault$3(options.maxBarThickness, Infinity),\r\n\t\t\trange.chunk * range.ratio);\r\n\r\n\t\treturn {\r\n\t\t\tbase: center - size / 2,\r\n\t\t\thead: center + size / 2,\r\n\t\t\tcenter: center,\r\n\t\t\tsize: size\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar ilen = rects.length;\r\n\t\tvar i = 0;\r\n\r\n\t\thelpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tvar val = scale._parseValue(dataset.data[i]);\r\n\t\t\tif (!isNaN(val.min) && !isNaN(val.max)) {\r\n\t\t\t\trects[i].draw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));\r\n\t\tvar indexOpts = me._getIndexScale().options;\r\n\t\tvar valueOpts = me._getValueScale().options;\r\n\r\n\t\tvalues.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);\r\n\t\tvalues.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);\r\n\t\tvalues.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);\r\n\t\tvalues.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);\r\n\t\tvalues.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);\r\n\r\n\t\treturn values;\r\n\t}\r\n\r\n});\n\nvar valueOrDefault$4 = helpers$1.valueOrDefault;\r\nvar resolve$1 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('bubble', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\r\n\t\t\tposition: 'bottom',\r\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\r\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\r\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_bubble = core_datasetController.extend({\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t\t'hoverRadius',\r\n\t\t'hitRadius',\r\n\t\t'pointStyle',\r\n\t\t'rotation'\r\n\t],\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data;\r\n\r\n\t\t// Update Points\r\n\t\thelpers$1.each(points, function(point, index) {\r\n\t\t\tme.updateElement(point, index, reset);\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar data = me.getDataset().data[index];\r\n\t\tvar dsIndex = me.index;\r\n\r\n\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\r\n\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\r\n\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = dsIndex;\r\n\t\tpoint._index = index;\r\n\t\tpoint._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\thitRadius: options.hitRadius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tradius: reset ? 0 : options.radius,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t};\r\n\r\n\t\tpoint.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = options.radius + options.hoverRadius;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(point, index) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar data = dataset.data[index] || {};\r\n\t\tvar values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// In case values were cached (and thus frozen), we need to clone the values\r\n\t\tif (me._cachedDataOpts === values) {\r\n\t\t\tvalues = helpers$1.extend({}, values);\r\n\t\t}\r\n\r\n\t\t// Custom radius resolution\r\n\t\tvalues.radius = resolve$1([\r\n\t\t\tcustom.radius,\r\n\t\t\tdata.r,\r\n\t\t\tme._config.radius,\r\n\t\t\tchart.options.elements.point.radius\r\n\t\t], context, index);\r\n\r\n\t\treturn values;\r\n\t}\r\n});\n\nvar valueOrDefault$5 = helpers$1.valueOrDefault;\r\n\r\nvar PI$1 = Math.PI;\r\nvar DOUBLE_PI$1 = PI$1 * 2;\r\nvar HALF_PI$1 = PI$1 / 2;\r\n\r\ncore_defaults._set('doughnut', {\r\n\tanimation: {\r\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\r\n\t\tanimateRotate: true,\r\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\r\n\t\tanimateScale: false\r\n\t},\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t// toggle visibility of index if exists\r\n\t\t\t\tif (meta.data[index]) {\r\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// The percentage of the chart that we cut out of the middle.\r\n\tcutoutPercentage: 50,\r\n\r\n\t// The rotation of the chart, where the first data arc begins.\r\n\trotation: -HALF_PI$1,\r\n\r\n\t// The total circumference of the chart.\r\n\tcircumference: DOUBLE_PI$1,\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\r\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\r\n\r\n\t\t\t\tif (helpers$1.isArray(dataLabel)) {\r\n\t\t\t\t\t// show value on first line of multiline label\r\n\t\t\t\t\t// need to clone because we are changing the value\r\n\t\t\t\t\tdataLabel = dataLabel.slice();\r\n\t\t\t\t\tdataLabel[0] += value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdataLabel += value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dataLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_doughnut = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\r\n\tgetRingIndex: function(datasetIndex) {\r\n\t\tvar ringIndex = 0;\r\n\r\n\t\tfor (var j = 0; j < datasetIndex; ++j) {\r\n\t\t\tif (this.chart.isDatasetVisible(j)) {\r\n\t\t\t\t++ringIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringIndex;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar ratioX = 1;\r\n\t\tvar ratioY = 1;\r\n\t\tvar offsetX = 0;\r\n\t\tvar offsetY = 0;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar arcs = meta.data;\r\n\t\tvar cutout = opts.cutoutPercentage / 100 || 0;\r\n\t\tvar circumference = opts.circumference;\r\n\t\tvar chartWeight = me._getRingWeight(me.index);\r\n\t\tvar maxWidth, maxHeight, i, ilen;\r\n\r\n\t\t// If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\r\n\t\tif (circumference < DOUBLE_PI$1) {\r\n\t\t\tvar startAngle = opts.rotation % DOUBLE_PI$1;\r\n\t\t\tstartAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;\r\n\t\t\tvar endAngle = startAngle + circumference;\r\n\t\t\tvar startX = Math.cos(startAngle);\r\n\t\t\tvar startY = Math.sin(startAngle);\r\n\t\t\tvar endX = Math.cos(endAngle);\r\n\t\t\tvar endY = Math.sin(endAngle);\r\n\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1;\r\n\t\t\tvar contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1;\r\n\t\t\tvar contains180 = startAngle === -PI$1 || endAngle >= PI$1;\r\n\t\t\tvar contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1;\r\n\t\t\tvar minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tvar maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tratioX = (maxX - minX) / 2;\r\n\t\t\tratioY = (maxY - minY) / 2;\r\n\t\t\toffsetX = -(maxX + minX) / 2;\r\n\t\t\toffsetY = -(maxY + minY) / 2;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t}\r\n\r\n\t\tchart.borderWidth = me.getMaxBorderWidth();\r\n\t\tmaxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;\r\n\t\tmaxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;\r\n\t\tchart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\r\n\t\tchart.innerRadius = Math.max(chart.outerRadius * cutout, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\r\n\t\tchart.offsetX = offsetX * chart.outerRadius;\r\n\t\tchart.offsetY = offsetY * chart.outerRadius;\r\n\r\n\t\tmeta.total = me.calculateTotal();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\r\n\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\r\n\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\r\n\t\tvar startAngle = opts.rotation; // non reset case handled later\r\n\t\tvar endAngle = opts.rotation; // non reset case handled later\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);\r\n\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\r\n\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX + chart.offsetX,\r\n\t\t\t\ty: centerY + chart.offsetY,\r\n\t\t\t\tstartAngle: startAngle,\r\n\t\t\t\tendAngle: endAngle,\r\n\t\t\t\tcircumference: circumference,\r\n\t\t\t\touterRadius: outerRadius,\r\n\t\t\t\tinnerRadius: innerRadius,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar model = arc._model;\r\n\r\n\t\t// Set correct angles if not resetting\r\n\t\tif (!reset || !animationOpts.animateRotate) {\r\n\t\t\tif (index === 0) {\r\n\t\t\t\tmodel.startAngle = opts.rotation;\r\n\t\t\t} else {\r\n\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\r\n\t\t\t}\r\n\r\n\t\t\tmodel.endAngle = model.startAngle + model.circumference;\r\n\t\t}\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcalculateTotal: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar total = 0;\r\n\t\tvar value;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tvalue = dataset.data[index];\r\n\t\t\tif (!isNaN(value) && !element.hidden) {\r\n\t\t\t\ttotal += Math.abs(value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* if (total === 0) {\r\n\t\t\ttotal = NaN;\r\n\t\t}*/\r\n\r\n\t\treturn total;\r\n\t},\r\n\r\n\tcalculateCircumference: function(value) {\r\n\t\tvar total = this.getMeta().total;\r\n\t\tif (total > 0 && !isNaN(value)) {\r\n\t\t\treturn DOUBLE_PI$1 * (Math.abs(value) / total);\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// gets the max border or hover width to properly scale pie charts\r\n\tgetMaxBorderWidth: function(arcs) {\r\n\t\tvar me = this;\r\n\t\tvar max = 0;\r\n\t\tvar chart = me.chart;\r\n\t\tvar i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\r\n\r\n\t\tif (!arcs) {\r\n\t\t\t// Find the outmost visible dataset\r\n\t\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t\tarcs = meta.data;\r\n\t\t\t\t\tif (i !== me.index) {\r\n\t\t\t\t\t\tcontroller = meta.controller;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!arcs) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarc = arcs[i];\r\n\t\t\tif (controller) {\r\n\t\t\t\tcontroller._configure();\r\n\t\t\t\toptions = controller._resolveDataElementOptions(arc, i);\r\n\t\t\t} else {\r\n\t\t\t\toptions = arc._options;\r\n\t\t\t}\r\n\t\t\tif (options.borderAlign !== 'inner') {\r\n\t\t\t\tborderWidth = options.borderWidth;\r\n\t\t\t\thoverWidth = options.hoverBorderWidth;\r\n\r\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\r\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn max;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\r\n\t * @private\r\n\t */\r\n\t_getRingWeightOffset: function(datasetIndex) {\r\n\t\tvar ringWeightOffset = 0;\r\n\r\n\t\tfor (var i = 0; i < datasetIndex; ++i) {\r\n\t\t\tif (this.chart.isDatasetVisible(i)) {\r\n\t\t\t\tringWeightOffset += this._getRingWeight(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringWeightOffset;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getRingWeight: function(dataSetIndex) {\r\n\t\treturn Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the sum of all visibile data set weights. This value can be 0.\r\n\t * @private\r\n\t */\r\n\t_getVisibleDatasetWeightTotal: function() {\r\n\t\treturn this._getRingWeightOffset(this.chart.data.datasets.length);\r\n\t}\r\n});\n\ncore_defaults._set('horizontalBar', {\r\n\thover: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tposition: 'left',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}]\r\n\t},\r\n\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tborderSkipped: 'left'\r\n\t\t}\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\thorizontalBar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_horizontalBar = controller_bar.extend({\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t}\r\n});\n\nvar valueOrDefault$6 = helpers$1.valueOrDefault;\r\nvar resolve$2 = helpers$1.options.resolve;\r\nvar isPointInArea = helpers$1.canvas._isPointInArea;\r\n\r\ncore_defaults._set('line', {\r\n\tshowLines: true,\r\n\tspanGaps: false,\r\n\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tid: 'x-axis-0'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\nfunction scaleClip(scale, halfBorderWidth) {\r\n\tvar tickOpts = scale && scale.options.ticks || {};\r\n\tvar reverse = tickOpts.reverse;\r\n\tvar min = tickOpts.min === undefined ? halfBorderWidth : 0;\r\n\tvar max = tickOpts.max === undefined ? halfBorderWidth : 0;\r\n\treturn {\r\n\t\tstart: reverse ? max : min,\r\n\t\tend: reverse ? min : max\r\n\t};\r\n}\r\n\r\nfunction defaultClip(xScale, yScale, borderWidth) {\r\n\tvar halfBorderWidth = borderWidth / 2;\r\n\tvar x = scaleClip(xScale, halfBorderWidth);\r\n\tvar y = scaleClip(yScale, halfBorderWidth);\r\n\r\n\treturn {\r\n\t\ttop: y.end,\r\n\t\tright: x.end,\r\n\t\tbottom: y.start,\r\n\t\tleft: x.start\r\n\t};\r\n}\r\n\r\nfunction toClip(value) {\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = value.top;\r\n\t\tr = value.right;\r\n\t\tb = value.bottom;\r\n\t\tl = value.left;\r\n\t} else {\r\n\t\tt = r = b = l = value;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttop: t,\r\n\t\tright: r,\r\n\t\tbottom: b,\r\n\t\tleft: l\r\n\t};\r\n}\r\n\r\n\r\nvar controller_line = core_datasetController.extend({\r\n\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth',\r\n\t\t'cubicInterpolationMode',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar options = me.chart.options;\r\n\t\tvar config = me._config;\r\n\t\tvar showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tme._yScale = me.getScaleForId(meta.yAxisID);\r\n\r\n\t\t// Update Line\r\n\t\tif (showLine) {\r\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\t\tconfig.lineTension = config.tension;\r\n\t\t\t}\r\n\r\n\t\t\t// Utility\r\n\t\t\tline._scale = me._yScale;\r\n\t\t\tline._datasetIndex = me.index;\r\n\t\t\t// Data\r\n\t\t\tline._children = points;\r\n\t\t\t// Model\r\n\t\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\t\tline.pivot();\r\n\t\t}\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\tif (showLine && line._model.tension !== 0) {\r\n\t\t\tme.updateBezierControlPoints();\r\n\t\t}\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar datasetIndex = me.index;\r\n\t\tvar value = dataset.data[index];\r\n\t\tvar xScale = me._xScale;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar x, y;\r\n\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\r\n\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\r\n\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\r\n\r\n\t\t// Utility\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = datasetIndex;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\r\n\t\t\tsteppedLine: lineModel ? lineModel.steppedLine : false,\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element) {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = me.chart.options;\r\n\t\tvar lineOptions = options.elements.line;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\t// The default behavior of lines is to break at null values, according\r\n\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\r\n\t\t// This option gives lines the ability to span gaps\r\n\t\tvalues.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);\r\n\t\tvalues.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);\r\n\t\tvalues.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tcalculatePointY: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar sumPos = 0;\r\n\t\tvar sumNeg = 0;\r\n\t\tvar i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;\r\n\r\n\t\tif (yScale.options.stacked) {\r\n\t\t\trightValue = +yScale.getRightValue(value);\r\n\t\t\tmetasets = chart._getSortedVisibleDatasetMetas();\r\n\t\t\tilen = metasets.length;\r\n\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\tdsMeta = metasets[i];\r\n\t\t\t\tif (dsMeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tds = chart.data.datasets[dsMeta.index];\r\n\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {\r\n\t\t\t\t\tstackedRightValue = +yScale.getRightValue(ds.data[index]);\r\n\t\t\t\t\tif (stackedRightValue < 0) {\r\n\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsumPos += stackedRightValue || 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (rightValue < 0) {\r\n\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\r\n\t\t\t}\r\n\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\r\n\t\t}\r\n\t\treturn yScale.getPixelForValue(value);\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (lineModel.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tif (lineModel.cubicInterpolationMode === 'monotone') {\r\n\t\t\thelpers$1.splineCurveMonotone(points);\r\n\t\t} else {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\t\thelpers$1.previousItem(points, i)._model,\r\n\t\t\t\t\tmodel,\r\n\t\t\t\t\thelpers$1.nextItem(points, i)._model,\r\n\t\t\t\t\tlineModel.tension\r\n\t\t\t\t);\r\n\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\r\n\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\r\n\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\r\n\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (chart.options.elements.line.capBezierPoints) {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tif (isPointInArea(model, area)) {\r\n\t\t\t\t\tif (i > 0 && isPointInArea(points[i - 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data || [];\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar i = 0;\r\n\t\tvar ilen = points.length;\r\n\t\tvar clip;\r\n\r\n\t\tif (me._showLine) {\r\n\t\t\tclip = meta.dataset._model.clip;\r\n\r\n\t\t\thelpers$1.canvas.clipArea(chart.ctx, {\r\n\t\t\t\tleft: clip.left === false ? 0 : area.left - clip.left,\r\n\t\t\t\tright: clip.right === false ? canvas.width : area.right + clip.right,\r\n\t\t\t\ttop: clip.top === false ? 0 : area.top - clip.top,\r\n\t\t\t\tbottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom\r\n\t\t\t});\r\n\r\n\t\t\tmeta.dataset.draw();\r\n\r\n\t\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t\t}\r\n\r\n\t\t// Draw the points\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tpoints[i].draw(area);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$6(options.hoverRadius, options.radius);\r\n\t},\r\n});\n\nvar resolve$3 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('polarArea', {\r\n\tscale: {\r\n\t\ttype: 'radialLinear',\r\n\t\tangleLines: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tgridLines: {\r\n\t\t\tcircular: true\r\n\t\t},\r\n\t\tpointLabels: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tticks: {\r\n\t\t\tbeginAtZero: true\r\n\t\t}\r\n\t},\r\n\r\n\t// Boolean - Whether to animate the rotation of the chart\r\n\tanimation: {\r\n\t\tanimateRotate: true,\r\n\t\tanimateScale: true\r\n\t},\r\n\r\n\tstartAngle: -0.5 * Math.PI,\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_polarArea = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar start = me.chart.options.startAngle || 0;\r\n\t\tvar starts = me._starts = [];\r\n\t\tvar angles = me._angles = [];\r\n\t\tvar arcs = meta.data;\r\n\t\tvar i, ilen, angle;\r\n\r\n\t\tme._updateRadius();\r\n\r\n\t\tmeta.count = me.countVisibleElements();\r\n\r\n\t\tfor (i = 0, ilen = dataset.data.length; i < ilen; i++) {\r\n\t\t\tstarts[i] = start;\r\n\t\t\tangle = me._computeAngle(i);\r\n\t\t\tangles[i] = angle;\r\n\t\t\tstart += angle;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateRadius: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\r\n\r\n\t\tchart.outerRadius = Math.max(minSize / 2, 0);\r\n\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\r\n\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar scale = chart.scale;\r\n\t\tvar labels = chart.data.labels;\r\n\r\n\t\tvar centerX = scale.xCenter;\r\n\t\tvar centerY = scale.yCenter;\r\n\r\n\t\t// var negHalfPI = -0.5 * Math.PI;\r\n\t\tvar datasetStartAngle = opts.startAngle;\r\n\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar startAngle = me._starts[index];\r\n\t\tvar endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\r\n\r\n\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\t\t\t_scale: scale,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX,\r\n\t\t\t\ty: centerY,\r\n\t\t\t\tinnerRadius: 0,\r\n\t\t\t\touterRadius: reset ? resetRadius : distance,\r\n\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\r\n\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcountVisibleElements: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar count = 0;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn count;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\t\tvar valueOrDefault = helpers$1.valueOrDefault;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeAngle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar count = this.getMeta().count;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\r\n\t\tif (isNaN(dataset.data[index]) || meta.data[index].hidden) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: me.chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\treturn resolve$3([\r\n\t\t\tme.chart.options.elements.arc.angle,\r\n\t\t\t(2 * Math.PI) / count\r\n\t\t], context, index);\r\n\t}\r\n});\n\ncore_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\r\ncore_defaults._set('pie', {\r\n\tcutoutPercentage: 0\r\n});\r\n\r\n// Pie charts are Doughnut chart with different defaults\r\nvar controller_pie = controller_doughnut;\n\nvar valueOrDefault$7 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('radar', {\r\n\tspanGaps: false,\r\n\tscale: {\r\n\t\ttype: 'radialLinear'\r\n\t},\r\n\telements: {\r\n\t\tline: {\r\n\t\t\tfill: 'start',\r\n\t\t\ttension: 0 // no bezier in radar\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_radar = core_datasetController.extend({\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderWidth',\r\n\t\t'borderColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar config = me._config;\r\n\t\tvar i, ilen;\r\n\r\n\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\tconfig.lineTension = config.tension;\r\n\t\t}\r\n\r\n\t\t// Utility\r\n\t\tline._scale = scale;\r\n\t\tline._datasetIndex = me.index;\r\n\t\t// Data\r\n\t\tline._children = points;\r\n\t\tline._loop = true;\r\n\t\t// Model\r\n\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\tline.pivot();\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\t// Update bezier control points\r\n\t\tme.updateBezierControlPoints();\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar lineModel = me.getMeta().dataset._model;\r\n\t\tvar x = reset ? scale.xCenter : pointPosition.x;\r\n\t\tvar y = reset ? scale.yCenter : pointPosition.y;\r\n\r\n\t\t// Utility\r\n\t\tpoint._scale = scale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = me.index;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x, // value not used in dataset scale, but we want a consistent API between scales\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),\r\n\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar options = me.chart.options;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\tvalues.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar area = me.chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (meta.dataset._model.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tmodel = points[i]._model;\r\n\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\thelpers$1.previousItem(points, i, true)._model,\r\n\t\t\t\tmodel,\r\n\t\t\t\thelpers$1.nextItem(points, i, true)._model,\r\n\t\t\t\tmodel.tension\r\n\t\t\t);\r\n\r\n\t\t\t// Prevent the bezier going outside of the bounds of the graph\r\n\t\t\tmodel.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\r\n\t\t\tmodel.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\r\n\t\t\tmodel.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\r\n\t\t\tmodel.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$7(options.hoverRadius, options.radius);\r\n\t}\r\n});\n\ncore_defaults._set('scatter', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\tid: 'x-axis-1', // need an ID so datasets can reference the scale\r\n\t\t\ttype: 'linear', // scatter should not use a category axis\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\tid: 'y-axis-1',\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn ''; // doesn't make sense for scatter since data are formatted as a point\r\n\t\t\t},\r\n\t\t\tlabel: function(item) {\r\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tscatter: {\r\n\t\t\tshowLine: false\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Scatter charts use line controllers\r\nvar controller_scatter = controller_line;\n\n// NOTE export a map in which the key represents the controller type, not\r\n// the class, and so must be CamelCase in order to be correctly retrieved\r\n// by the controller in core.controller.js (`controllers[meta.type]`).\r\n\r\nvar controllers = {\r\n\tbar: controller_bar,\r\n\tbubble: controller_bubble,\r\n\tdoughnut: controller_doughnut,\r\n\thorizontalBar: controller_horizontalBar,\r\n\tline: controller_line,\r\n\tpolarArea: controller_polarArea,\r\n\tpie: controller_pie,\r\n\tradar: controller_radar,\r\n\tscatter: controller_scatter\r\n};\n\n/**\r\n * Helper function to get relative position for an event\r\n * @param {Event|IEvent} event - The event to get the position for\r\n * @param {Chart} chart - The chart\r\n * @returns {object} the event position\r\n */\r\nfunction getRelativePosition(e, chart) {\r\n\tif (e.native) {\r\n\t\treturn {\r\n\t\t\tx: e.x,\r\n\t\t\ty: e.y\r\n\t\t};\r\n\t}\r\n\r\n\treturn helpers$1.getRelativePosition(e, chart);\r\n}\r\n\r\n/**\r\n * Helper function to traverse all of the visible elements in the chart\r\n * @param {Chart} chart - the chart\r\n * @param {function} handler - the callback to execute for each visible item\r\n */\r\nfunction parseVisibleItems(chart, handler) {\r\n\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\tvar metadata, i, j, ilen, jlen, element;\r\n\r\n\tfor (i = 0, ilen = metasets.length; i < ilen; ++i) {\r\n\t\tmetadata = metasets[i].data;\r\n\t\tfor (j = 0, jlen = metadata.length; j < jlen; ++j) {\r\n\t\t\telement = metadata[j];\r\n\t\t\tif (!element._view.skip) {\r\n\t\t\t\thandler(element);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Helper function to get the items that intersect the event position\r\n * @param {ChartElement[]} items - elements to filter\r\n * @param {object} position - the point to be nearest to\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getIntersectItems(chart, position) {\r\n\tvar elements = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n * @param {Chart} chart - the chart to look at elements from\r\n * @param {object} position - the point to be nearest to\r\n * @param {boolean} intersect - if true, only consider items that intersect the position\r\n * @param {function} distanceMetric - function to provide the distance between points\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\r\n\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\tvar nearestItems = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar center = element.getCenterPoint();\r\n\t\tvar distance = distanceMetric(position, center);\r\n\t\tif (distance < minDistance) {\r\n\t\t\tnearestItems = [element];\r\n\t\t\tminDistance = distance;\r\n\t\t} else if (distance === minDistance) {\r\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\r\n\t\t\tnearestItems.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn nearestItems;\r\n}\r\n\r\n/**\r\n * Get a distance metric function for two points based on the\r\n * axis mode setting\r\n * @param {string} axis - the axis mode. x|y|xy\r\n */\r\nfunction getDistanceMetricForAxis(axis) {\r\n\tvar useX = axis.indexOf('x') !== -1;\r\n\tvar useY = axis.indexOf('y') !== -1;\r\n\r\n\treturn function(pt1, pt2) {\r\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\r\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\r\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\r\n\t};\r\n}\r\n\r\nfunction indexMode(chart, e, options) {\r\n\tvar position = getRelativePosition(e, chart);\r\n\t// Default axis for index mode is 'x' to match old behaviour\r\n\toptions.axis = options.axis || 'x';\r\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\tvar elements = [];\r\n\r\n\tif (!items.length) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tchart._getSortedVisibleDatasetMetas().forEach(function(meta) {\r\n\t\tvar element = meta.data[items[0]._index];\r\n\r\n\t\t// don't count items that are skipped (null data)\r\n\t\tif (element && !element._view.skip) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * @interface IInteractionOptions\r\n */\r\n/**\r\n * If true, only consider items that intersect the point\r\n * @name IInterfaceOptions#boolean\r\n * @type Boolean\r\n */\r\n\r\n/**\r\n * Contains interaction related functions\r\n * @namespace Chart.Interaction\r\n */\r\nvar core_interaction = {\r\n\t// Helper function for different modes\r\n\tmodes: {\r\n\t\tsingle: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar elements = [];\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\telements.push(element);\r\n\t\t\t\t\treturn elements;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn elements.slice(0, 1);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.label\r\n\t\t * @deprecated since version 2.4.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tlabel: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n\t\t * @function Chart.Interaction.modes.index\r\n\t\t * @since v2.4.0\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tindex: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n\t\t * @function Chart.Interaction.modes.dataset\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tdataset: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\r\n\t\t\tif (items.length > 0) {\r\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\r\n\t\t\t}\r\n\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.x-axis\r\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\t'x-axis': function(chart, e) {\r\n\t\t\treturn indexMode(chart, e, {intersect: false});\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Point mode returns all elements that hit test based on the event position\r\n\t\t * of the event\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tpoint: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\treturn getIntersectItems(chart, position);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * nearest mode returns the element closest to the point\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tnearest: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\treturn getNearestItems(chart, position, options.intersect, distanceMetric);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * x mode returns the elements that hit-test at the current x coordinate\r\n\t\t * @function Chart.Interaction.modes.x\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tx: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inXRange(position.x)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * y mode returns the elements that hit-test at the current y coordinate\r\n\t\t * @function Chart.Interaction.modes.y\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\ty: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inYRange(position.y)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t}\r\n\t}\r\n};\n\nvar extend = helpers$1.extend;\r\n\r\nfunction filterByPosition(array, position) {\r\n\treturn helpers$1.where(array, function(v) {\r\n\t\treturn v.pos === position;\r\n\t});\r\n}\r\n\r\nfunction sortByWeight(array, reverse) {\r\n\treturn array.sort(function(a, b) {\r\n\t\tvar v0 = reverse ? b : a;\r\n\t\tvar v1 = reverse ? a : b;\r\n\t\treturn v0.weight === v1.weight ?\r\n\t\t\tv0.index - v1.index :\r\n\t\t\tv0.weight - v1.weight;\r\n\t});\r\n}\r\n\r\nfunction wrapBoxes(boxes) {\r\n\tvar layoutBoxes = [];\r\n\tvar i, ilen, box;\r\n\r\n\tfor (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\r\n\t\tbox = boxes[i];\r\n\t\tlayoutBoxes.push({\r\n\t\t\tindex: i,\r\n\t\t\tbox: box,\r\n\t\t\tpos: box.position,\r\n\t\t\thorizontal: box.isHorizontal(),\r\n\t\t\tweight: box.weight\r\n\t\t});\r\n\t}\r\n\treturn layoutBoxes;\r\n}\r\n\r\nfunction setLayoutDims(layouts, params) {\r\n\tvar i, ilen, layout;\r\n\tfor (i = 0, ilen = layouts.length; i < ilen; ++i) {\r\n\t\tlayout = layouts[i];\r\n\t\t// store width used instead of chartArea.w in fitBoxes\r\n\t\tlayout.width = layout.horizontal\r\n\t\t\t? layout.box.fullWidth && params.availableWidth\r\n\t\t\t: params.vBoxMaxWidth;\r\n\t\t// store height used instead of chartArea.h in fitBoxes\r\n\t\tlayout.height = layout.horizontal && params.hBoxMaxHeight;\r\n\t}\r\n}\r\n\r\nfunction buildLayoutBoxes(boxes) {\r\n\tvar layoutBoxes = wrapBoxes(boxes);\r\n\tvar left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\r\n\tvar right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\r\n\tvar top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\r\n\tvar bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\r\n\r\n\treturn {\r\n\t\tleftAndTop: left.concat(top),\r\n\t\trightAndBottom: right.concat(bottom),\r\n\t\tchartArea: filterByPosition(layoutBoxes, 'chartArea'),\r\n\t\tvertical: left.concat(right),\r\n\t\thorizontal: top.concat(bottom)\r\n\t};\r\n}\r\n\r\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\r\n\treturn Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\r\n}\r\n\r\nfunction updateDims(chartArea, params, layout) {\r\n\tvar box = layout.box;\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\tvar newWidth, newHeight;\r\n\r\n\tif (layout.size) {\r\n\t\t// this layout was already counted for, lets first reduce old size\r\n\t\tchartArea[layout.pos] -= layout.size;\r\n\t}\r\n\tlayout.size = layout.horizontal ? box.height : box.width;\r\n\tchartArea[layout.pos] += layout.size;\r\n\r\n\tif (box.getPadding) {\r\n\t\tvar boxPadding = box.getPadding();\r\n\t\tmaxPadding.top = Math.max(maxPadding.top, boxPadding.top);\r\n\t\tmaxPadding.left = Math.max(maxPadding.left, boxPadding.left);\r\n\t\tmaxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\r\n\t\tmaxPadding.right = Math.max(maxPadding.right, boxPadding.right);\r\n\t}\r\n\r\n\tnewWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');\r\n\tnewHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');\r\n\r\n\tif (newWidth !== chartArea.w || newHeight !== chartArea.h) {\r\n\t\tchartArea.w = newWidth;\r\n\t\tchartArea.h = newHeight;\r\n\r\n\t\t// return true if chart area changed in layout's direction\r\n\t\tvar sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];\r\n\t\treturn sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));\r\n\t}\r\n}\r\n\r\nfunction handleMaxPadding(chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction updatePos(pos) {\r\n\t\tvar change = Math.max(maxPadding[pos] - chartArea[pos], 0);\r\n\t\tchartArea[pos] += change;\r\n\t\treturn change;\r\n\t}\r\n\tchartArea.y += updatePos('top');\r\n\tchartArea.x += updatePos('left');\r\n\tupdatePos('right');\r\n\tupdatePos('bottom');\r\n}\r\n\r\nfunction getMargins(horizontal, chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction marginForPositions(positions) {\r\n\t\tvar margin = {left: 0, top: 0, right: 0, bottom: 0};\r\n\t\tpositions.forEach(function(pos) {\r\n\t\t\tmargin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\r\n\t\t});\r\n\t\treturn margin;\r\n\t}\r\n\r\n\treturn horizontal\r\n\t\t? marginForPositions(['left', 'right'])\r\n\t\t: marginForPositions(['top', 'bottom']);\r\n}\r\n\r\nfunction fitBoxes(boxes, chartArea, params) {\r\n\tvar refitBoxes = [];\r\n\tvar i, ilen, layout, box, refit, changed;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\r\n\t\tbox.update(\r\n\t\t\tlayout.width || chartArea.w,\r\n\t\t\tlayout.height || chartArea.h,\r\n\t\t\tgetMargins(layout.horizontal, chartArea)\r\n\t\t);\r\n\t\tif (updateDims(chartArea, params, layout)) {\r\n\t\t\tchanged = true;\r\n\t\t\tif (refitBoxes.length) {\r\n\t\t\t\t// Dimensions changed and there were non full width boxes before this\r\n\t\t\t\t// -> we have to refit those\r\n\t\t\t\trefit = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case\r\n\t\t\trefitBoxes.push(layout);\r\n\t\t}\r\n\t}\r\n\r\n\treturn refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;\r\n}\r\n\r\nfunction placeBoxes(boxes, chartArea, params) {\r\n\tvar userPadding = params.padding;\r\n\tvar x = chartArea.x;\r\n\tvar y = chartArea.y;\r\n\tvar i, ilen, layout, box;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\t\tif (layout.horizontal) {\r\n\t\t\tbox.left = box.fullWidth ? userPadding.left : chartArea.left;\r\n\t\t\tbox.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\r\n\t\t\tbox.top = y;\r\n\t\t\tbox.bottom = y + box.height;\r\n\t\t\tbox.width = box.right - box.left;\r\n\t\t\ty = box.bottom;\r\n\t\t} else {\r\n\t\t\tbox.left = x;\r\n\t\t\tbox.right = x + box.width;\r\n\t\t\tbox.top = chartArea.top;\r\n\t\t\tbox.bottom = chartArea.top + chartArea.h;\r\n\t\t\tbox.height = box.bottom - box.top;\r\n\t\t\tx = box.right;\r\n\t\t}\r\n\t}\r\n\r\n\tchartArea.x = x;\r\n\tchartArea.y = y;\r\n}\r\n\r\ncore_defaults._set('global', {\r\n\tlayout: {\r\n\t\tpadding: {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * @interface ILayoutItem\r\n * @prop {string} position - The position of the item in the chart layout. Possible values are\r\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\r\n * @prop {function} getPadding - Returns an object with padding on the edges\r\n * @prop {number} width - Width of item. Must be valid after update()\r\n * @prop {number} height - Height of item. Must be valid after update()\r\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n */\r\n\r\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\r\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\r\n// It is this service's responsibility of carrying out that layout.\r\nvar core_layouts = {\r\n\tdefaults: {},\r\n\r\n\t/**\r\n\t * Register a box to a chart.\r\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n\t * @param {Chart} chart - the chart to use\r\n\t * @param {ILayoutItem} item - the item to add to be layed out\r\n\t */\r\n\taddBox: function(chart, item) {\r\n\t\tif (!chart.boxes) {\r\n\t\t\tchart.boxes = [];\r\n\t\t}\r\n\r\n\t\t// initialize item with default values\r\n\t\titem.fullWidth = item.fullWidth || false;\r\n\t\titem.position = item.position || 'top';\r\n\t\titem.weight = item.weight || 0;\r\n\t\titem._layers = item._layers || function() {\r\n\t\t\treturn [{\r\n\t\t\t\tz: 0,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\titem.draw.apply(item, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t};\r\n\r\n\t\tchart.boxes.push(item);\r\n\t},\r\n\r\n\t/**\r\n\t * Remove a layoutItem from a chart\r\n\t * @param {Chart} chart - the chart to remove the box from\r\n\t * @param {ILayoutItem} layoutItem - the item to remove from the layout\r\n\t */\r\n\tremoveBox: function(chart, layoutItem) {\r\n\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\r\n\t\tif (index !== -1) {\r\n\t\t\tchart.boxes.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Sets (or updates) options on the given `item`.\r\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n\t * @param {ILayoutItem} item - the item to configure with the given options\r\n\t * @param {object} options - the new item options.\r\n\t */\r\n\tconfigure: function(chart, item, options) {\r\n\t\tvar props = ['fullWidth', 'position', 'weight'];\r\n\t\tvar ilen = props.length;\r\n\t\tvar i = 0;\r\n\t\tvar prop;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tprop = props[i];\r\n\t\t\tif (options.hasOwnProperty(prop)) {\r\n\t\t\t\titem[prop] = options[prop];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Fits boxes of the given chart into the given size by having each box measure itself\r\n\t * then running a fitting algorithm\r\n\t * @param {Chart} chart - the chart\r\n\t * @param {number} width - the width to fit into\r\n\t * @param {number} height - the height to fit into\r\n\t */\r\n\tupdate: function(chart, width, height) {\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar layoutOptions = chart.options.layout || {};\r\n\t\tvar padding = helpers$1.options.toPadding(layoutOptions.padding);\r\n\r\n\t\tvar availableWidth = width - padding.width;\r\n\t\tvar availableHeight = height - padding.height;\r\n\t\tvar boxes = buildLayoutBoxes(chart.boxes);\r\n\t\tvar verticalBoxes = boxes.vertical;\r\n\t\tvar horizontalBoxes = boxes.horizontal;\r\n\r\n\t\t// Essentially we now have any number of boxes on each of the 4 sides.\r\n\t\t// Our canvas looks like the following.\r\n\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\r\n\t\t// B1 is the bottom axis\r\n\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\r\n\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\r\n\t\t// an error will be thrown.\r\n\t\t//\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | T1 (Full Width) |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | | | T2 | |\r\n\t\t// | |----|-------------------------------------|----|\r\n\t\t// | | | C1 | | C2 | |\r\n\t\t// | | |----| |----| |\r\n\t\t// | | | | |\r\n\t\t// | L1 | L2 | ChartArea (C0) | R1 |\r\n\t\t// | | | | |\r\n\t\t// | | |----| |----| |\r\n\t\t// | | | C3 | | C4 | |\r\n\t\t// | |----|-------------------------------------|----|\r\n\t\t// | | | B1 | |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | B2 (Full Width) |\r\n\t\t// |----------------------------------------------------|\r\n\t\t//\r\n\r\n\t\tvar params = Object.freeze({\r\n\t\t\touterWidth: width,\r\n\t\t\touterHeight: height,\r\n\t\t\tpadding: padding,\r\n\t\t\tavailableWidth: availableWidth,\r\n\t\t\tvBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,\r\n\t\t\thBoxMaxHeight: availableHeight / 2\r\n\t\t});\r\n\t\tvar chartArea = extend({\r\n\t\t\tmaxPadding: extend({}, padding),\r\n\t\t\tw: availableWidth,\r\n\t\t\th: availableHeight,\r\n\t\t\tx: padding.left,\r\n\t\t\ty: padding.top\r\n\t\t}, padding);\r\n\r\n\t\tsetLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\r\n\r\n\t\t// First fit vertical boxes\r\n\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\r\n\t\t// Then fit horizontal boxes\r\n\t\tif (fitBoxes(horizontalBoxes, chartArea, params)) {\r\n\t\t\t// if the area changed, re-fit vertical boxes\r\n\t\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\t\t}\r\n\r\n\t\thandleMaxPadding(chartArea);\r\n\r\n\t\t// Finally place the boxes to correct coordinates\r\n\t\tplaceBoxes(boxes.leftAndTop, chartArea, params);\r\n\r\n\t\t// Move to opposite side of chart\r\n\t\tchartArea.x += chartArea.w;\r\n\t\tchartArea.y += chartArea.h;\r\n\r\n\t\tplaceBoxes(boxes.rightAndBottom, chartArea, params);\r\n\r\n\t\tchart.chartArea = {\r\n\t\t\tleft: chartArea.left,\r\n\t\t\ttop: chartArea.top,\r\n\t\t\tright: chartArea.left + chartArea.w,\r\n\t\t\tbottom: chartArea.top + chartArea.h\r\n\t\t};\r\n\r\n\t\t// Finally update boxes in chartArea (radial scale for example)\r\n\t\thelpers$1.each(boxes.chartArea, function(layout) {\r\n\t\t\tvar box = layout.box;\r\n\t\t\textend(box, chart.chartArea);\r\n\t\t\tbox.update(chartArea.w, chartArea.h);\r\n\t\t});\r\n\t}\r\n};\n\n/**\r\n * Platform fallback implementation (minimal).\r\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n */\r\n\r\nvar platform_basic = {\r\n\tacquireContext: function(item) {\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\treturn item && item.getContext('2d') || null;\r\n\t}\r\n};\n\nvar platform_dom = \"/*\\r\\n * DOM element rendering detection\\r\\n * https://davidwalsh.name/detect-node-insertion\\r\\n */\\r\\n@keyframes chartjs-render-animation {\\r\\n\\tfrom { opacity: 0.99; }\\r\\n\\tto { opacity: 1; }\\r\\n}\\r\\n\\r\\n.chartjs-render-monitor {\\r\\n\\tanimation: chartjs-render-animation 0.001s;\\r\\n}\\r\\n\\r\\n/*\\r\\n * DOM element resizing detection\\r\\n * https://github.com/marcj/css-element-queries\\r\\n */\\r\\n.chartjs-size-monitor,\\r\\n.chartjs-size-monitor-expand,\\r\\n.chartjs-size-monitor-shrink {\\r\\n\\tposition: absolute;\\r\\n\\tdirection: ltr;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n\\tright: 0;\\r\\n\\tbottom: 0;\\r\\n\\toverflow: hidden;\\r\\n\\tpointer-events: none;\\r\\n\\tvisibility: hidden;\\r\\n\\tz-index: -1;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-expand > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 1000000px;\\r\\n\\theight: 1000000px;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-shrink > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 200%;\\r\\n\\theight: 200%;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\";\n\nvar platform_dom$1 = /*#__PURE__*/Object.freeze({\n__proto__: null,\n'default': platform_dom\n});\n\nvar stylesheet = getCjsExportFromNamespace(platform_dom$1);\n\nvar EXPANDO_KEY = '$chartjs';\r\nvar CSS_PREFIX = 'chartjs-';\r\nvar CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\r\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\r\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\r\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\r\n\r\n/**\r\n * DOM event types -> Chart.js event types.\r\n * Note: only events with different types are mapped.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n */\r\nvar EVENT_TYPES = {\r\n\ttouchstart: 'mousedown',\r\n\ttouchmove: 'mousemove',\r\n\ttouchend: 'mouseup',\r\n\tpointerenter: 'mouseenter',\r\n\tpointerdown: 'mousedown',\r\n\tpointermove: 'mousemove',\r\n\tpointerup: 'mouseup',\r\n\tpointerleave: 'mouseout',\r\n\tpointerout: 'mouseout'\r\n};\r\n\r\n/**\r\n * The \"used\" size is the final value of a dimension property after all calculations have\r\n * been performed. This method uses the computed style of `element` but returns undefined\r\n * if the computed style is not expressed in pixels. That can happen in some cases where\r\n * `element` has a size relative to its parent and this last one is not yet displayed,\r\n * for example because of `display: none` on a parent node.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n * @returns {number} Size in pixels or undefined if unknown.\r\n */\r\nfunction readUsedSize(element, property) {\r\n\tvar value = helpers$1.getStyle(element, property);\r\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\r\n\treturn matches ? Number(matches[1]) : undefined;\r\n}\r\n\r\n/**\r\n * Initializes the canvas style and render size without modifying the canvas display size,\r\n * since responsiveness is handled by the controller.resize() method. The config is used\r\n * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n */\r\nfunction initCanvas(canvas, config) {\r\n\tvar style = canvas.style;\r\n\r\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\r\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\r\n\tvar renderHeight = canvas.getAttribute('height');\r\n\tvar renderWidth = canvas.getAttribute('width');\r\n\r\n\t// Chart.js modifies some canvas values that we want to restore on destroy\r\n\tcanvas[EXPANDO_KEY] = {\r\n\t\tinitial: {\r\n\t\t\theight: renderHeight,\r\n\t\t\twidth: renderWidth,\r\n\t\t\tstyle: {\r\n\t\t\t\tdisplay: style.display,\r\n\t\t\t\theight: style.height,\r\n\t\t\t\twidth: style.width\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Force canvas to display as block to avoid extra space caused by inline\r\n\t// elements, which would interfere with the responsive resize process.\r\n\t// https://github.com/chartjs/Chart.js/issues/2538\r\n\tstyle.display = style.display || 'block';\r\n\r\n\tif (renderWidth === null || renderWidth === '') {\r\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\r\n\t\tif (displayWidth !== undefined) {\r\n\t\t\tcanvas.width = displayWidth;\r\n\t\t}\r\n\t}\r\n\r\n\tif (renderHeight === null || renderHeight === '') {\r\n\t\tif (canvas.style.height === '') {\r\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\r\n\t\t\t// which one can be specified by the user but also by charts as default option\r\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\r\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\r\n\t\t} else {\r\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\r\n\t\t\tif (displayWidth !== undefined) {\r\n\t\t\t\tcanvas.height = displayHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn canvas;\r\n}\r\n\r\n/**\r\n * Detects support for options object argument in addEventListener.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n * @private\r\n */\r\nvar supportsEventListenerOptions = (function() {\r\n\tvar supports = false;\r\n\ttry {\r\n\t\tvar options = Object.defineProperty({}, 'passive', {\r\n\t\t\t// eslint-disable-next-line getter-return\r\n\t\t\tget: function() {\r\n\t\t\t\tsupports = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('e', null, options);\r\n\t} catch (e) {\r\n\t\t// continue regardless of error\r\n\t}\r\n\treturn supports;\r\n}());\r\n\r\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\r\n// https://github.com/chartjs/Chart.js/issues/4287\r\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\r\n\r\nfunction addListener(node, type, listener) {\r\n\tnode.addEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction removeListener(node, type, listener) {\r\n\tnode.removeEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction createEvent(type, chart, x, y, nativeEvent) {\r\n\treturn {\r\n\t\ttype: type,\r\n\t\tchart: chart,\r\n\t\tnative: nativeEvent || null,\r\n\t\tx: x !== undefined ? x : null,\r\n\t\ty: y !== undefined ? y : null,\r\n\t};\r\n}\r\n\r\nfunction fromNativeEvent(event, chart) {\r\n\tvar type = EVENT_TYPES[event.type] || event.type;\r\n\tvar pos = helpers$1.getRelativePosition(event, chart);\r\n\treturn createEvent(type, chart, pos.x, pos.y, event);\r\n}\r\n\r\nfunction throttled(fn, thisArg) {\r\n\tvar ticking = false;\r\n\tvar args = [];\r\n\r\n\treturn function() {\r\n\t\targs = Array.prototype.slice.call(arguments);\r\n\t\tthisArg = thisArg || this;\r\n\r\n\t\tif (!ticking) {\r\n\t\t\tticking = true;\r\n\t\t\thelpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tticking = false;\r\n\t\t\t\tfn.apply(thisArg, args);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction createDiv(cls) {\r\n\tvar el = document.createElement('div');\r\n\tel.className = cls || '';\r\n\treturn el;\r\n}\r\n\r\n// Implementation based on https://github.com/marcj/css-element-queries\r\nfunction createResizer(handler) {\r\n\tvar maxSize = 1000000;\r\n\r\n\t// NOTE(SB) Don't use innerHTML because it could be considered unsafe.\r\n\t// https://github.com/chartjs/Chart.js/issues/5902\r\n\tvar resizer = createDiv(CSS_SIZE_MONITOR);\r\n\tvar expand = createDiv(CSS_SIZE_MONITOR + '-expand');\r\n\tvar shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\r\n\r\n\texpand.appendChild(createDiv());\r\n\tshrink.appendChild(createDiv());\r\n\r\n\tresizer.appendChild(expand);\r\n\tresizer.appendChild(shrink);\r\n\tresizer._reset = function() {\r\n\t\texpand.scrollLeft = maxSize;\r\n\t\texpand.scrollTop = maxSize;\r\n\t\tshrink.scrollLeft = maxSize;\r\n\t\tshrink.scrollTop = maxSize;\r\n\t};\r\n\r\n\tvar onScroll = function() {\r\n\t\tresizer._reset();\r\n\t\thandler();\r\n\t};\r\n\r\n\taddListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\r\n\taddListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\r\n\r\n\treturn resizer;\r\n}\r\n\r\n// https://davidwalsh.name/detect-node-insertion\r\nfunction watchForRender(node, handler) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\tvar proxy = expando.renderProxy = function(e) {\r\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\r\n\t\t\thandler();\r\n\t\t}\r\n\t};\r\n\r\n\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\taddListener(node, type, proxy);\r\n\t});\r\n\r\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\r\n\t// is removed then added back immediately (same animation frame?). Accessing the\r\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\r\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\r\n\t// https://github.com/chartjs/Chart.js/issues/4737\r\n\texpando.reflow = !!node.offsetParent;\r\n\r\n\tnode.classList.add(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction unwatchForRender(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar proxy = expando.renderProxy;\r\n\r\n\tif (proxy) {\r\n\t\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\t\tremoveListener(node, type, proxy);\r\n\t\t});\r\n\r\n\t\tdelete expando.renderProxy;\r\n\t}\r\n\r\n\tnode.classList.remove(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction addResizeListener(node, listener, chart) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\r\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\r\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = chart.options.maintainAspectRatio && node.parentNode;\r\n\t\t\tvar w = container ? container.clientWidth : 0;\r\n\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\tif (container && container.clientWidth < w && chart.canvas) {\r\n\t\t\t\t// If the container size shrank during chart resize, let's assume\r\n\t\t\t\t// scrollbar appeared. So we resize again with the scrollbar visible -\r\n\t\t\t\t// effectively making chart smaller and the scrollbar hidden again.\r\n\t\t\t\t// Because we are inside `throttled`, and currently `ticking`, scroll\r\n\t\t\t\t// events are ignored during this whole 2 resize process.\r\n\t\t\t\t// If we assumed wrong and something else happened, we are resizing\r\n\t\t\t\t// twice in a frame (potential performance issue)\r\n\t\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\t}\r\n\t\t}\r\n\t}));\r\n\r\n\t// The resizer needs to be attached to the node parent, so we first need to be\r\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\r\n\twatchForRender(node, function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = node.parentNode;\r\n\t\t\tif (container && container !== resizer.parentNode) {\r\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\r\n\t\t\t}\r\n\r\n\t\t\t// The container size might have changed, let's reset the resizer state.\r\n\t\t\tresizer._reset();\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction removeResizeListener(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar resizer = expando.resizer;\r\n\r\n\tdelete expando.resizer;\r\n\tunwatchForRender(node);\r\n\r\n\tif (resizer && resizer.parentNode) {\r\n\t\tresizer.parentNode.removeChild(resizer);\r\n\t}\r\n}\r\n\r\n/**\r\n * Injects CSS styles inline if the styles are not already present.\r\n * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the <style>.\r\n * @param {string} css - the CSS to be injected.\r\n */\r\nfunction injectCSS(rootNode, css) {\r\n\t// https://stackoverflow.com/q/3922139\r\n\tvar expando = rootNode[EXPANDO_KEY] || (rootNode[EXPANDO_KEY] = {});\r\n\tif (!expando.containsStyles) {\r\n\t\texpando.containsStyles = true;\r\n\t\tcss = '/* Chart.js */\\n' + css;\r\n\t\tvar style = document.createElement('style');\r\n\t\tstyle.setAttribute('type', 'text/css');\r\n\t\tstyle.appendChild(document.createTextNode(css));\r\n\t\trootNode.appendChild(style);\r\n\t}\r\n}\r\n\r\nvar platform_dom$2 = {\r\n\t/**\r\n\t * When `true`, prevents the automatic injection of the stylesheet required to\r\n\t * correctly detect when the chart is added to the DOM and then resized. This\r\n\t * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\r\n\t * to be manually imported to make this library compatible with any CSP.\r\n\t * See https://github.com/chartjs/Chart.js/issues/5208\r\n\t */\r\n\tdisableCSSInjection: false,\r\n\r\n\t/**\r\n\t * This property holds whether this platform is enabled for the current environment.\r\n\t * Currently used by platform.js to select the proper implementation.\r\n\t * @private\r\n\t */\r\n\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\r\n\r\n\t/**\r\n\t * Initializes resources that depend on platform options.\r\n\t * @param {HTMLCanvasElement} canvas - The Canvas element.\r\n\t * @private\r\n\t */\r\n\t_ensureLoaded: function(canvas) {\r\n\t\tif (!this.disableCSSInjection) {\r\n\t\t\t// If the canvas is in a shadow DOM, then the styles must also be inserted\r\n\t\t\t// into the same shadow DOM.\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5763\r\n\t\t\tvar root = canvas.getRootNode ? canvas.getRootNode() : document;\r\n\t\t\tvar targetNode = root.host ? root : document.head;\r\n\t\t\tinjectCSS(targetNode, stylesheet);\r\n\t\t}\r\n\t},\r\n\r\n\tacquireContext: function(item, config) {\r\n\t\tif (typeof item === 'string') {\r\n\t\t\titem = document.getElementById(item);\r\n\t\t} else if (item.length) {\r\n\t\t\t// Support for array based queries (such as jQuery)\r\n\t\t\titem = item[0];\r\n\t\t}\r\n\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\r\n\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\r\n\t\t// https://github.com/chartjs/Chart.js/issues/2807\r\n\t\tvar context = item && item.getContext && item.getContext('2d');\r\n\r\n\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\r\n\t\t// inside an iframe or when running in a protected environment. We could guess the\r\n\t\t// types from their toString() value but let's keep things flexible and assume it's\r\n\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\r\n\t\t// https://github.com/chartjs/Chart.js/issues/3887\r\n\t\t// https://github.com/chartjs/Chart.js/issues/4102\r\n\t\t// https://github.com/chartjs/Chart.js/issues/4152\r\n\t\tif (context && context.canvas === item) {\r\n\t\t\t// Load platform resources on first chart creation, to make it possible to\r\n\t\t\t// import the library before setting platform options.\r\n\t\t\tthis._ensureLoaded(item);\r\n\t\t\tinitCanvas(item, config);\r\n\t\t\treturn context;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\treleaseContext: function(context) {\r\n\t\tvar canvas = context.canvas;\r\n\t\tif (!canvas[EXPANDO_KEY]) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar initial = canvas[EXPANDO_KEY].initial;\r\n\t\t['height', 'width'].forEach(function(prop) {\r\n\t\t\tvar value = initial[prop];\r\n\t\t\tif (helpers$1.isNullOrUndef(value)) {\r\n\t\t\t\tcanvas.removeAttribute(prop);\r\n\t\t\t} else {\r\n\t\t\t\tcanvas.setAttribute(prop, value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.each(initial.style || {}, function(value, key) {\r\n\t\t\tcanvas.style[key] = value;\r\n\t\t});\r\n\r\n\t\t// The canvas render size might have been changed (and thus the state stack discarded),\r\n\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\r\n\t\t// least the canvas context is reset to the default state by setting the canvas width.\r\n\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\r\n\t\t// eslint-disable-next-line no-self-assign\r\n\t\tcanvas.width = canvas.width;\r\n\r\n\t\tdelete canvas[EXPANDO_KEY];\r\n\t},\r\n\r\n\taddEventListener: function(chart, type, listener) {\r\n\t\tvar canvas = chart.canvas;\r\n\t\tif (type === 'resize') {\r\n\t\t\t// Note: the resize event is not supported on all browsers.\r\n\t\t\taddResizeListener(canvas, listener, chart);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\r\n\t\tvar proxies = expando.proxies || (expando.proxies = {});\r\n\t\tvar proxy = proxies[chart.id + '_' + type] = function(event) {\r\n\t\t\tlistener(fromNativeEvent(event, chart));\r\n\t\t};\r\n\r\n\t\taddListener(canvas, type, proxy);\r\n\t},\r\n\r\n\tremoveEventListener: function(chart, type, listener) {\r\n\t\tvar canvas = chart.canvas;\r\n\t\tif (type === 'resize') {\r\n\t\t\t// Note: the resize event is not supported on all browsers.\r\n\t\t\tremoveResizeListener(canvas);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar expando = listener[EXPANDO_KEY] || {};\r\n\t\tvar proxies = expando.proxies || {};\r\n\t\tvar proxy = proxies[chart.id + '_' + type];\r\n\t\tif (!proxy) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tremoveListener(canvas, type, proxy);\r\n\t}\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\r\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n * @function Chart.helpers.addEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.addEvent = addListener;\r\n\r\n/**\r\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\r\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\r\n * @function Chart.helpers.removeEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.removeEvent = removeListener;\n\n// @TODO Make possible to select another platform at build time.\r\nvar implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\r\n\r\n/**\r\n * @namespace Chart.platform\r\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\r\n * @since 2.4.0\r\n */\r\nvar platform = helpers$1.extend({\r\n\t/**\r\n\t * @since 2.7.0\r\n\t */\r\n\tinitialize: function() {},\r\n\r\n\t/**\r\n\t * Called at chart construction time, returns a context2d instance implementing\r\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\r\n\t * @param {*} item - The native item from which to acquire context (platform specific)\r\n\t * @param {object} options - The chart options\r\n\t * @returns {CanvasRenderingContext2D} context2d instance\r\n\t */\r\n\tacquireContext: function() {},\r\n\r\n\t/**\r\n\t * Called at chart destruction time, releases any resources associated to the context\r\n\t * previously returned by the acquireContext() method.\r\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\r\n\t * @returns {boolean} true if the method succeeded, else false\r\n\t */\r\n\treleaseContext: function() {},\r\n\r\n\t/**\r\n\t * Registers the specified listener on the given chart.\r\n\t * @param {Chart} chart - Chart from which to listen for event\r\n\t * @param {string} type - The ({@link IEvent}) type to listen for\r\n\t * @param {function} listener - Receives a notification (an object that implements\r\n\t * the {@link IEvent} interface) when an event of the specified type occurs.\r\n\t */\r\n\taddEventListener: function() {},\r\n\r\n\t/**\r\n\t * Removes the specified listener previously registered with addEventListener.\r\n\t * @param {Chart} chart - Chart from which to remove the listener\r\n\t * @param {string} type - The ({@link IEvent}) type to remove\r\n\t * @param {function} listener - The listener function to remove from the event target.\r\n\t */\r\n\tremoveEventListener: function() {}\r\n\r\n}, implementation);\n\ncore_defaults._set('global', {\r\n\tplugins: {}\r\n});\r\n\r\n/**\r\n * The plugin service singleton\r\n * @namespace Chart.plugins\r\n * @since 2.1.0\r\n */\r\nvar core_plugins = {\r\n\t/**\r\n\t * Globally registered plugins.\r\n\t * @private\r\n\t */\r\n\t_plugins: [],\r\n\r\n\t/**\r\n\t * This identifier is used to invalidate the descriptors cache attached to each chart\r\n\t * when a global plugin is registered or unregistered. In this case, the cache ID is\r\n\t * incremented and descriptors are regenerated during following API calls.\r\n\t * @private\r\n\t */\r\n\t_cacheId: 0,\r\n\r\n\t/**\r\n\t * Registers the given plugin(s) if not already registered.\r\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n\t */\r\n\tregister: function(plugins) {\r\n\t\tvar p = this._plugins;\r\n\t\t([]).concat(plugins).forEach(function(plugin) {\r\n\t\t\tif (p.indexOf(plugin) === -1) {\r\n\t\t\t\tp.push(plugin);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Unregisters the given plugin(s) only if registered.\r\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n\t */\r\n\tunregister: function(plugins) {\r\n\t\tvar p = this._plugins;\r\n\t\t([]).concat(plugins).forEach(function(plugin) {\r\n\t\t\tvar idx = p.indexOf(plugin);\r\n\t\t\tif (idx !== -1) {\r\n\t\t\t\tp.splice(idx, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Remove all registered plugins.\r\n\t * @since 2.1.5\r\n\t */\r\n\tclear: function() {\r\n\t\tthis._plugins = [];\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the number of registered plugins?\r\n\t * @returns {number}\r\n\t * @since 2.1.5\r\n\t */\r\n\tcount: function() {\r\n\t\treturn this._plugins.length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns all registered plugin instances.\r\n\t * @returns {IPlugin[]} array of plugin objects.\r\n\t * @since 2.1.5\r\n\t */\r\n\tgetAll: function() {\r\n\t\treturn this._plugins;\r\n\t},\r\n\r\n\t/**\r\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\r\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\r\n\t * returned value can be used, for instance, to interrupt the current action.\r\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\r\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\r\n\t * @param {Array} [args] - Extra arguments to apply to the hook call.\r\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\r\n\t */\r\n\tnotify: function(chart, hook, args) {\r\n\t\tvar descriptors = this.descriptors(chart);\r\n\t\tvar ilen = descriptors.length;\r\n\t\tvar i, descriptor, plugin, params, method;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tdescriptor = descriptors[i];\r\n\t\t\tplugin = descriptor.plugin;\r\n\t\t\tmethod = plugin[hook];\r\n\t\t\tif (typeof method === 'function') {\r\n\t\t\t\tparams = [chart].concat(args || []);\r\n\t\t\t\tparams.push(descriptor.options);\r\n\t\t\t\tif (method.apply(plugin, params) === false) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns descriptors of enabled plugins for the given chart.\r\n\t * @returns {object[]} [{ plugin, options }]\r\n\t * @private\r\n\t */\r\n\tdescriptors: function(chart) {\r\n\t\tvar cache = chart.$plugins || (chart.$plugins = {});\r\n\t\tif (cache.id === this._cacheId) {\r\n\t\t\treturn cache.descriptors;\r\n\t\t}\r\n\r\n\t\tvar plugins = [];\r\n\t\tvar descriptors = [];\r\n\t\tvar config = (chart && chart.config) || {};\r\n\t\tvar options = (config.options && config.options.plugins) || {};\r\n\r\n\t\tthis._plugins.concat(config.plugins || []).forEach(function(plugin) {\r\n\t\t\tvar idx = plugins.indexOf(plugin);\r\n\t\t\tif (idx !== -1) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar id = plugin.id;\r\n\t\t\tvar opts = options[id];\r\n\t\t\tif (opts === false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (opts === true) {\r\n\t\t\t\topts = helpers$1.clone(core_defaults.global.plugins[id]);\r\n\t\t\t}\r\n\r\n\t\t\tplugins.push(plugin);\r\n\t\t\tdescriptors.push({\r\n\t\t\t\tplugin: plugin,\r\n\t\t\t\toptions: opts || {}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tcache.descriptors = descriptors;\r\n\t\tcache.id = this._cacheId;\r\n\t\treturn descriptors;\r\n\t},\r\n\r\n\t/**\r\n\t * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\r\n\t * but in some cases, this reference can be changed by the user when updating options.\r\n\t * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n\t * @private\r\n\t */\r\n\t_invalidate: function(chart) {\r\n\t\tdelete chart.$plugins;\r\n\t}\r\n};\n\nvar core_scaleService = {\r\n\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\r\n\t// use the new chart options to grab the correct scale\r\n\tconstructors: {},\r\n\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\r\n\t// old browsers\r\n\r\n\t// Scale config defaults\r\n\tdefaults: {},\r\n\tregisterScaleType: function(type, scaleConstructor, scaleDefaults) {\r\n\t\tthis.constructors[type] = scaleConstructor;\r\n\t\tthis.defaults[type] = helpers$1.clone(scaleDefaults);\r\n\t},\r\n\tgetScaleConstructor: function(type) {\r\n\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\r\n\t},\r\n\tgetScaleDefaults: function(type) {\r\n\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\r\n\t\treturn this.defaults.hasOwnProperty(type) ? helpers$1.merge(Object.create(null), [core_defaults.scale, this.defaults[type]]) : {};\r\n\t},\r\n\tupdateScaleDefaults: function(type, additions) {\r\n\t\tvar me = this;\r\n\t\tif (me.defaults.hasOwnProperty(type)) {\r\n\t\t\tme.defaults[type] = helpers$1.extend(me.defaults[type], additions);\r\n\t\t}\r\n\t},\r\n\taddScalesToLayout: function(chart) {\r\n\t\t// Adds each scale to the chart.boxes array to be sized accordingly\r\n\t\thelpers$1.each(chart.scales, function(scale) {\r\n\t\t\t// Set ILayoutItem parameters for backwards compatibility\r\n\t\t\tscale.fullWidth = scale.options.fullWidth;\r\n\t\t\tscale.position = scale.options.position;\r\n\t\t\tscale.weight = scale.options.weight;\r\n\t\t\tcore_layouts.addBox(chart, scale);\r\n\t\t});\r\n\t}\r\n};\n\nvar valueOrDefault$8 = helpers$1.valueOrDefault;\r\nvar getRtlHelper = helpers$1.rtl.getRtlAdapter;\r\n\r\ncore_defaults._set('global', {\r\n\ttooltips: {\r\n\t\tenabled: true,\r\n\t\tcustom: null,\r\n\t\tmode: 'nearest',\r\n\t\tposition: 'average',\r\n\t\tintersect: true,\r\n\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\r\n\t\ttitleFontStyle: 'bold',\r\n\t\ttitleSpacing: 2,\r\n\t\ttitleMarginBottom: 6,\r\n\t\ttitleFontColor: '#fff',\r\n\t\ttitleAlign: 'left',\r\n\t\tbodySpacing: 2,\r\n\t\tbodyFontColor: '#fff',\r\n\t\tbodyAlign: 'left',\r\n\t\tfooterFontStyle: 'bold',\r\n\t\tfooterSpacing: 2,\r\n\t\tfooterMarginTop: 6,\r\n\t\tfooterFontColor: '#fff',\r\n\t\tfooterAlign: 'left',\r\n\t\tyPadding: 6,\r\n\t\txPadding: 6,\r\n\t\tcaretPadding: 2,\r\n\t\tcaretSize: 5,\r\n\t\tcornerRadius: 6,\r\n\t\tmultiKeyBackground: '#fff',\r\n\t\tdisplayColors: true,\r\n\t\tborderColor: 'rgba(0,0,0,0)',\r\n\t\tborderWidth: 0,\r\n\t\tcallbacks: {\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeTitle: helpers$1.noop,\r\n\t\t\ttitle: function(tooltipItems, data) {\r\n\t\t\t\tvar title = '';\r\n\t\t\t\tvar labels = data.labels;\r\n\t\t\t\tvar labelCount = labels ? labels.length : 0;\r\n\r\n\t\t\t\tif (tooltipItems.length > 0) {\r\n\t\t\t\t\tvar item = tooltipItems[0];\r\n\t\t\t\t\tif (item.label) {\r\n\t\t\t\t\t\ttitle = item.label;\r\n\t\t\t\t\t} else if (item.xLabel) {\r\n\t\t\t\t\t\ttitle = item.xLabel;\r\n\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\r\n\t\t\t\t\t\ttitle = labels[item.index];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn title;\r\n\t\t\t},\r\n\t\t\tafterTitle: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeBody: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItem, data)\r\n\t\t\tbeforeLabel: helpers$1.noop,\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar label = data.datasets[tooltipItem.datasetIndex].label || '';\r\n\r\n\t\t\t\tif (label) {\r\n\t\t\t\t\tlabel += ': ';\r\n\t\t\t\t}\r\n\t\t\t\tif (!helpers$1.isNullOrUndef(tooltipItem.value)) {\r\n\t\t\t\t\tlabel += tooltipItem.value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlabel += tooltipItem.yLabel;\r\n\t\t\t\t}\r\n\t\t\t\treturn label;\r\n\t\t\t},\r\n\t\t\tlabelColor: function(tooltipItem, chart) {\r\n\t\t\t\tvar meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\r\n\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\r\n\t\t\t\tvar view = activeElement._view;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tborderColor: view.borderColor,\r\n\t\t\t\t\tbackgroundColor: view.backgroundColor\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t\tlabelTextColor: function() {\r\n\t\t\t\treturn this._options.bodyFontColor;\r\n\t\t\t},\r\n\t\t\tafterLabel: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tafterBody: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeFooter: helpers$1.noop,\r\n\t\t\tfooter: helpers$1.noop,\r\n\t\t\tafterFooter: helpers$1.noop\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar positioners = {\r\n\t/**\r\n\t * Average mode places the tooltip at the average position of the elements shown\r\n\t * @function Chart.Tooltip.positioners.average\r\n\t * @param elements {ChartElement[]} the elements being displayed in the tooltip\r\n\t * @returns {object} tooltip position\r\n\t */\r\n\taverage: function(elements) {\r\n\t\tif (!elements.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar i, len;\r\n\t\tvar x = 0;\r\n\t\tvar y = 0;\r\n\t\tvar count = 0;\r\n\r\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\r\n\t\t\tvar el = elements[i];\r\n\t\t\tif (el && el.hasValue()) {\r\n\t\t\t\tvar pos = el.tooltipPosition();\r\n\t\t\t\tx += pos.x;\r\n\t\t\t\ty += pos.y;\r\n\t\t\t\t++count;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x / count,\r\n\t\t\ty: y / count\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Gets the tooltip position nearest of the item nearest to the event position\r\n\t * @function Chart.Tooltip.positioners.nearest\r\n\t * @param elements {Chart.Element[]} the tooltip elements\r\n\t * @param eventPosition {object} the position of the event in canvas coordinates\r\n\t * @returns {object} the tooltip position\r\n\t */\r\n\tnearest: function(elements, eventPosition) {\r\n\t\tvar x = eventPosition.x;\r\n\t\tvar y = eventPosition.y;\r\n\t\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\t\tvar i, len, nearestElement;\r\n\r\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\r\n\t\t\tvar el = elements[i];\r\n\t\t\tif (el && el.hasValue()) {\r\n\t\t\t\tvar center = el.getCenterPoint();\r\n\t\t\t\tvar d = helpers$1.distanceBetweenPoints(eventPosition, center);\r\n\r\n\t\t\t\tif (d < minDistance) {\r\n\t\t\t\t\tminDistance = d;\r\n\t\t\t\t\tnearestElement = el;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (nearestElement) {\r\n\t\t\tvar tp = nearestElement.tooltipPosition();\r\n\t\t\tx = tp.x;\r\n\t\t\ty = tp.y;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x,\r\n\t\t\ty: y\r\n\t\t};\r\n\t}\r\n};\r\n\r\n// Helper to push or concat based on if the 2nd parameter is an array or not\r\nfunction pushOrConcat(base, toPush) {\r\n\tif (toPush) {\r\n\t\tif (helpers$1.isArray(toPush)) {\r\n\t\t\t// base = base.concat(toPush);\r\n\t\t\tArray.prototype.push.apply(base, toPush);\r\n\t\t} else {\r\n\t\t\tbase.push(toPush);\r\n\t\t}\r\n\t}\r\n\r\n\treturn base;\r\n}\r\n\r\n/**\r\n * Returns array of strings split by newline\r\n * @param {string} value - The value to split by newline.\r\n * @returns {string[]} value if newline present - Returned from String split() method\r\n * @function\r\n */\r\nfunction splitNewlines(str) {\r\n\tif ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\r\n\t\treturn str.split('\\n');\r\n\t}\r\n\treturn str;\r\n}\r\n\r\n\r\n/**\r\n * Private helper to create a tooltip item model\r\n * @param element - the chart element (point, arc, bar) to create the tooltip item for\r\n * @return new tooltip item\r\n */\r\nfunction createTooltipItem(element) {\r\n\tvar xScale = element._xScale;\r\n\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\r\n\tvar index = element._index;\r\n\tvar datasetIndex = element._datasetIndex;\r\n\tvar controller = element._chart.getDatasetMeta(datasetIndex).controller;\r\n\tvar indexScale = controller._getIndexScale();\r\n\tvar valueScale = controller._getValueScale();\r\n\r\n\treturn {\r\n\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tlabel: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tvalue: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tindex: index,\r\n\t\tdatasetIndex: datasetIndex,\r\n\t\tx: element._model.x,\r\n\t\ty: element._model.y\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the reset model for the tooltip\r\n * @param tooltipOpts {object} the tooltip options\r\n */\r\nfunction getBaseModel(tooltipOpts) {\r\n\tvar globalDefaults = core_defaults.global;\r\n\r\n\treturn {\r\n\t\t// Positioning\r\n\t\txPadding: tooltipOpts.xPadding,\r\n\t\tyPadding: tooltipOpts.yPadding,\r\n\t\txAlign: tooltipOpts.xAlign,\r\n\t\tyAlign: tooltipOpts.yAlign,\r\n\r\n\t\t// Drawing direction and text direction\r\n\t\trtl: tooltipOpts.rtl,\r\n\t\ttextDirection: tooltipOpts.textDirection,\r\n\r\n\t\t// Body\r\n\t\tbodyFontColor: tooltipOpts.bodyFontColor,\r\n\t\t_bodyFontFamily: valueOrDefault$8(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_bodyFontStyle: valueOrDefault$8(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\r\n\t\t_bodyAlign: tooltipOpts.bodyAlign,\r\n\t\tbodyFontSize: valueOrDefault$8(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\r\n\t\tbodySpacing: tooltipOpts.bodySpacing,\r\n\r\n\t\t// Title\r\n\t\ttitleFontColor: tooltipOpts.titleFontColor,\r\n\t\t_titleFontFamily: valueOrDefault$8(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_titleFontStyle: valueOrDefault$8(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\r\n\t\ttitleFontSize: valueOrDefault$8(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\r\n\t\t_titleAlign: tooltipOpts.titleAlign,\r\n\t\ttitleSpacing: tooltipOpts.titleSpacing,\r\n\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\r\n\r\n\t\t// Footer\r\n\t\tfooterFontColor: tooltipOpts.footerFontColor,\r\n\t\t_footerFontFamily: valueOrDefault$8(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_footerFontStyle: valueOrDefault$8(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\r\n\t\tfooterFontSize: valueOrDefault$8(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\r\n\t\t_footerAlign: tooltipOpts.footerAlign,\r\n\t\tfooterSpacing: tooltipOpts.footerSpacing,\r\n\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\r\n\r\n\t\t// Appearance\r\n\t\tcaretSize: tooltipOpts.caretSize,\r\n\t\tcornerRadius: tooltipOpts.cornerRadius,\r\n\t\tbackgroundColor: tooltipOpts.backgroundColor,\r\n\t\topacity: 0,\r\n\t\tlegendColorBackground: tooltipOpts.multiKeyBackground,\r\n\t\tdisplayColors: tooltipOpts.displayColors,\r\n\t\tborderColor: tooltipOpts.borderColor,\r\n\t\tborderWidth: tooltipOpts.borderWidth\r\n\t};\r\n}\r\n\r\n/**\r\n * Get the size of the tooltip\r\n */\r\nfunction getTooltipSize(tooltip, model) {\r\n\tvar ctx = tooltip._chart.ctx;\r\n\r\n\tvar height = model.yPadding * 2; // Tooltip Padding\r\n\tvar width = 0;\r\n\r\n\t// Count of all lines in the body\r\n\tvar body = model.body;\r\n\tvar combinedBodyLength = body.reduce(function(count, bodyItem) {\r\n\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\r\n\t}, 0);\r\n\tcombinedBodyLength += model.beforeBody.length + model.afterBody.length;\r\n\r\n\tvar titleLineCount = model.title.length;\r\n\tvar footerLineCount = model.footer.length;\r\n\tvar titleFontSize = model.titleFontSize;\r\n\tvar bodyFontSize = model.bodyFontSize;\r\n\tvar footerFontSize = model.footerFontSize;\r\n\r\n\theight += titleLineCount * titleFontSize; // Title Lines\r\n\theight += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\r\n\theight += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\r\n\theight += combinedBodyLength * bodyFontSize; // Body Lines\r\n\theight += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\r\n\theight += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\r\n\theight += footerLineCount * (footerFontSize); // Footer Lines\r\n\theight += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\r\n\r\n\t// Title width\r\n\tvar widthPadding = 0;\r\n\tvar maxLineWidth = function(line) {\r\n\t\twidth = Math.max(width, ctx.measureText(line).width + widthPadding);\r\n\t};\r\n\r\n\tctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\r\n\thelpers$1.each(model.title, maxLineWidth);\r\n\r\n\t// Body width\r\n\tctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\r\n\thelpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\r\n\r\n\t// Body lines may include some extra width due to the color box\r\n\twidthPadding = model.displayColors ? (bodyFontSize + 2) : 0;\r\n\thelpers$1.each(body, function(bodyItem) {\r\n\t\thelpers$1.each(bodyItem.before, maxLineWidth);\r\n\t\thelpers$1.each(bodyItem.lines, maxLineWidth);\r\n\t\thelpers$1.each(bodyItem.after, maxLineWidth);\r\n\t});\r\n\r\n\t// Reset back to 0\r\n\twidthPadding = 0;\r\n\r\n\t// Footer width\r\n\tctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\r\n\thelpers$1.each(model.footer, maxLineWidth);\r\n\r\n\t// Add padding\r\n\twidth += 2 * model.xPadding;\r\n\r\n\treturn {\r\n\t\twidth: width,\r\n\t\theight: height\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the alignment of a tooltip given the size\r\n */\r\nfunction determineAlignment(tooltip, size) {\r\n\tvar model = tooltip._model;\r\n\tvar chart = tooltip._chart;\r\n\tvar chartArea = tooltip._chart.chartArea;\r\n\tvar xAlign = 'center';\r\n\tvar yAlign = 'center';\r\n\r\n\tif (model.y < size.height) {\r\n\t\tyAlign = 'top';\r\n\t} else if (model.y > (chart.height - size.height)) {\r\n\t\tyAlign = 'bottom';\r\n\t}\r\n\r\n\tvar lf, rf; // functions to determine left, right alignment\r\n\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\r\n\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\r\n\tvar midX = (chartArea.left + chartArea.right) / 2;\r\n\tvar midY = (chartArea.top + chartArea.bottom) / 2;\r\n\r\n\tif (yAlign === 'center') {\r\n\t\tlf = function(x) {\r\n\t\t\treturn x <= midX;\r\n\t\t};\r\n\t\trf = function(x) {\r\n\t\t\treturn x > midX;\r\n\t\t};\r\n\t} else {\r\n\t\tlf = function(x) {\r\n\t\t\treturn x <= (size.width / 2);\r\n\t\t};\r\n\t\trf = function(x) {\r\n\t\t\treturn x >= (chart.width - (size.width / 2));\r\n\t\t};\r\n\t}\r\n\r\n\tolf = function(x) {\r\n\t\treturn x + size.width + model.caretSize + model.caretPadding > chart.width;\r\n\t};\r\n\torf = function(x) {\r\n\t\treturn x - size.width - model.caretSize - model.caretPadding < 0;\r\n\t};\r\n\tyf = function(y) {\r\n\t\treturn y <= midY ? 'top' : 'bottom';\r\n\t};\r\n\r\n\tif (lf(model.x)) {\r\n\t\txAlign = 'left';\r\n\r\n\t\t// Is tooltip too wide and goes over the right side of the chart.?\r\n\t\tif (olf(model.x)) {\r\n\t\t\txAlign = 'center';\r\n\t\t\tyAlign = yf(model.y);\r\n\t\t}\r\n\t} else if (rf(model.x)) {\r\n\t\txAlign = 'right';\r\n\r\n\t\t// Is tooltip too wide and goes outside left edge of canvas?\r\n\t\tif (orf(model.x)) {\r\n\t\t\txAlign = 'center';\r\n\t\t\tyAlign = yf(model.y);\r\n\t\t}\r\n\t}\r\n\r\n\tvar opts = tooltip._options;\r\n\treturn {\r\n\t\txAlign: opts.xAlign ? opts.xAlign : xAlign,\r\n\t\tyAlign: opts.yAlign ? opts.yAlign : yAlign\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\r\n */\r\nfunction getBackgroundPoint(vm, size, alignment, chart) {\r\n\t// Background Position\r\n\tvar x = vm.x;\r\n\tvar y = vm.y;\r\n\r\n\tvar caretSize = vm.caretSize;\r\n\tvar caretPadding = vm.caretPadding;\r\n\tvar cornerRadius = vm.cornerRadius;\r\n\tvar xAlign = alignment.xAlign;\r\n\tvar yAlign = alignment.yAlign;\r\n\tvar paddingAndSize = caretSize + caretPadding;\r\n\tvar radiusAndPadding = cornerRadius + caretPadding;\r\n\r\n\tif (xAlign === 'right') {\r\n\t\tx -= size.width;\r\n\t} else if (xAlign === 'center') {\r\n\t\tx -= (size.width / 2);\r\n\t\tif (x + size.width > chart.width) {\r\n\t\t\tx = chart.width - size.width;\r\n\t\t}\r\n\t\tif (x < 0) {\r\n\t\t\tx = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tif (yAlign === 'top') {\r\n\t\ty += paddingAndSize;\r\n\t} else if (yAlign === 'bottom') {\r\n\t\ty -= size.height + paddingAndSize;\r\n\t} else {\r\n\t\ty -= (size.height / 2);\r\n\t}\r\n\r\n\tif (yAlign === 'center') {\r\n\t\tif (xAlign === 'left') {\r\n\t\t\tx += paddingAndSize;\r\n\t\t} else if (xAlign === 'right') {\r\n\t\t\tx -= paddingAndSize;\r\n\t\t}\r\n\t} else if (xAlign === 'left') {\r\n\t\tx -= radiusAndPadding;\r\n\t} else if (xAlign === 'right') {\r\n\t\tx += radiusAndPadding;\r\n\t}\r\n\r\n\treturn {\r\n\t\tx: x,\r\n\t\ty: y\r\n\t};\r\n}\r\n\r\nfunction getAlignedX(vm, align) {\r\n\treturn align === 'center'\r\n\t\t? vm.x + vm.width / 2\r\n\t\t: align === 'right'\r\n\t\t\t? vm.x + vm.width - vm.xPadding\r\n\t\t\t: vm.x + vm.xPadding;\r\n}\r\n\r\n/**\r\n * Helper to build before and after body lines\r\n */\r\nfunction getBeforeAfterBodyLines(callback) {\r\n\treturn pushOrConcat([], splitNewlines(callback));\r\n}\r\n\r\nvar exports$4 = core_element.extend({\r\n\tinitialize: function() {\r\n\t\tthis._model = getBaseModel(this._options);\r\n\t\tthis._lastActive = [];\r\n\t},\r\n\r\n\t// Get the title\r\n\t// Args are: (tooltipItem, data)\r\n\tgetTitle: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me._options;\r\n\t\tvar callbacks = opts.callbacks;\r\n\r\n\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments);\r\n\t\tvar title = callbacks.title.apply(me, arguments);\r\n\t\tvar afterTitle = callbacks.afterTitle.apply(me, arguments);\r\n\r\n\t\tvar lines = [];\r\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeTitle));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(title));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(afterTitle));\r\n\r\n\t\treturn lines;\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetBeforeBody: function() {\r\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetBody: function(tooltipItems, data) {\r\n\t\tvar me = this;\r\n\t\tvar callbacks = me._options.callbacks;\r\n\t\tvar bodyItems = [];\r\n\r\n\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\r\n\t\t\tvar bodyItem = {\r\n\t\t\t\tbefore: [],\r\n\t\t\t\tlines: [],\r\n\t\t\t\tafter: []\r\n\t\t\t};\r\n\t\t\tpushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\r\n\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\r\n\t\t\tpushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\r\n\r\n\t\t\tbodyItems.push(bodyItem);\r\n\t\t});\r\n\r\n\t\treturn bodyItems;\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetAfterBody: function() {\r\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\r\n\t},\r\n\r\n\t// Get the footer and beforeFooter and afterFooter lines\r\n\t// Args are: (tooltipItem, data)\r\n\tgetFooter: function() {\r\n\t\tvar me = this;\r\n\t\tvar callbacks = me._options.callbacks;\r\n\r\n\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\r\n\t\tvar footer = callbacks.footer.apply(me, arguments);\r\n\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\r\n\r\n\t\tvar lines = [];\r\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeFooter));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(footer));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(afterFooter));\r\n\r\n\t\treturn lines;\r\n\t},\r\n\r\n\tupdate: function(changed) {\r\n\t\tvar me = this;\r\n\t\tvar opts = me._options;\r\n\r\n\t\t// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\r\n\t\t// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\r\n\t\t// which breaks any animations.\r\n\t\tvar existingModel = me._model;\r\n\t\tvar model = me._model = getBaseModel(opts);\r\n\t\tvar active = me._active;\r\n\r\n\t\tvar data = me._data;\r\n\r\n\t\t// In the case where active.length === 0 we need to keep these at existing values for good animations\r\n\t\tvar alignment = {\r\n\t\t\txAlign: existingModel.xAlign,\r\n\t\t\tyAlign: existingModel.yAlign\r\n\t\t};\r\n\t\tvar backgroundPoint = {\r\n\t\t\tx: existingModel.x,\r\n\t\t\ty: existingModel.y\r\n\t\t};\r\n\t\tvar tooltipSize = {\r\n\t\t\twidth: existingModel.width,\r\n\t\t\theight: existingModel.height\r\n\t\t};\r\n\t\tvar tooltipPosition = {\r\n\t\t\tx: existingModel.caretX,\r\n\t\t\ty: existingModel.caretY\r\n\t\t};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (active.length) {\r\n\t\t\tmodel.opacity = 1;\r\n\r\n\t\t\tvar labelColors = [];\r\n\t\t\tvar labelTextColors = [];\r\n\t\t\ttooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\r\n\r\n\t\t\tvar tooltipItems = [];\r\n\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\r\n\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\r\n\t\t\t}\r\n\r\n\t\t\t// If the user provided a filter function, use it to modify the tooltip items\r\n\t\t\tif (opts.filter) {\r\n\t\t\t\ttooltipItems = tooltipItems.filter(function(a) {\r\n\t\t\t\t\treturn opts.filter(a, data);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\r\n\t\t\tif (opts.itemSort) {\r\n\t\t\t\ttooltipItems = tooltipItems.sort(function(a, b) {\r\n\t\t\t\t\treturn opts.itemSort(a, b, data);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Determine colors for boxes\r\n\t\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\r\n\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\r\n\t\t\t\tlabelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\r\n\t\t\t});\r\n\r\n\r\n\t\t\t// Build the Text Lines\r\n\t\t\tmodel.title = me.getTitle(tooltipItems, data);\r\n\t\t\tmodel.beforeBody = me.getBeforeBody(tooltipItems, data);\r\n\t\t\tmodel.body = me.getBody(tooltipItems, data);\r\n\t\t\tmodel.afterBody = me.getAfterBody(tooltipItems, data);\r\n\t\t\tmodel.footer = me.getFooter(tooltipItems, data);\r\n\r\n\t\t\t// Initial positioning and colors\r\n\t\t\tmodel.x = tooltipPosition.x;\r\n\t\t\tmodel.y = tooltipPosition.y;\r\n\t\t\tmodel.caretPadding = opts.caretPadding;\r\n\t\t\tmodel.labelColors = labelColors;\r\n\t\t\tmodel.labelTextColors = labelTextColors;\r\n\r\n\t\t\t// data points\r\n\t\t\tmodel.dataPoints = tooltipItems;\r\n\r\n\t\t\t// We need to determine alignment of the tooltip\r\n\t\t\ttooltipSize = getTooltipSize(this, model);\r\n\t\t\talignment = determineAlignment(this, tooltipSize);\r\n\t\t\t// Final Size and Position\r\n\t\t\tbackgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\r\n\t\t} else {\r\n\t\t\tmodel.opacity = 0;\r\n\t\t}\r\n\r\n\t\tmodel.xAlign = alignment.xAlign;\r\n\t\tmodel.yAlign = alignment.yAlign;\r\n\t\tmodel.x = backgroundPoint.x;\r\n\t\tmodel.y = backgroundPoint.y;\r\n\t\tmodel.width = tooltipSize.width;\r\n\t\tmodel.height = tooltipSize.height;\r\n\r\n\t\t// Point where the caret on the tooltip points to\r\n\t\tmodel.caretX = tooltipPosition.x;\r\n\t\tmodel.caretY = tooltipPosition.y;\r\n\r\n\t\tme._model = model;\r\n\r\n\t\tif (changed && opts.custom) {\r\n\t\t\topts.custom.call(me, model);\r\n\t\t}\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tdrawCaret: function(tooltipPoint, size) {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\r\n\r\n\t\tctx.lineTo(caretPosition.x1, caretPosition.y1);\r\n\t\tctx.lineTo(caretPosition.x2, caretPosition.y2);\r\n\t\tctx.lineTo(caretPosition.x3, caretPosition.y3);\r\n\t},\r\n\tgetCaretPosition: function(tooltipPoint, size, vm) {\r\n\t\tvar x1, x2, x3, y1, y2, y3;\r\n\t\tvar caretSize = vm.caretSize;\r\n\t\tvar cornerRadius = vm.cornerRadius;\r\n\t\tvar xAlign = vm.xAlign;\r\n\t\tvar yAlign = vm.yAlign;\r\n\t\tvar ptX = tooltipPoint.x;\r\n\t\tvar ptY = tooltipPoint.y;\r\n\t\tvar width = size.width;\r\n\t\tvar height = size.height;\r\n\r\n\t\tif (yAlign === 'center') {\r\n\t\t\ty2 = ptY + (height / 2);\r\n\r\n\t\t\tif (xAlign === 'left') {\r\n\t\t\t\tx1 = ptX;\r\n\t\t\t\tx2 = x1 - caretSize;\r\n\t\t\t\tx3 = x1;\r\n\r\n\t\t\t\ty1 = y2 + caretSize;\r\n\t\t\t\ty3 = y2 - caretSize;\r\n\t\t\t} else {\r\n\t\t\t\tx1 = ptX + width;\r\n\t\t\t\tx2 = x1 + caretSize;\r\n\t\t\t\tx3 = x1;\r\n\r\n\t\t\t\ty1 = y2 - caretSize;\r\n\t\t\t\ty3 = y2 + caretSize;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (xAlign === 'left') {\r\n\t\t\t\tx2 = ptX + cornerRadius + (caretSize);\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t} else if (xAlign === 'right') {\r\n\t\t\t\tx2 = ptX + width - cornerRadius - caretSize;\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t} else {\r\n\t\t\t\tx2 = vm.caretX;\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t}\r\n\t\t\tif (yAlign === 'top') {\r\n\t\t\t\ty1 = ptY;\r\n\t\t\t\ty2 = y1 - caretSize;\r\n\t\t\t\ty3 = y1;\r\n\t\t\t} else {\r\n\t\t\t\ty1 = ptY + height;\r\n\t\t\t\ty2 = y1 + caretSize;\r\n\t\t\t\ty3 = y1;\r\n\t\t\t\t// invert drawing order\r\n\t\t\t\tvar tmp = x3;\r\n\t\t\t\tx3 = x1;\r\n\t\t\t\tx1 = tmp;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};\r\n\t},\r\n\r\n\tdrawTitle: function(pt, vm, ctx) {\r\n\t\tvar title = vm.title;\r\n\t\tvar length = title.length;\r\n\t\tvar titleFontSize, titleSpacing, i;\r\n\r\n\t\tif (length) {\r\n\t\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\t\tpt.x = getAlignedX(vm, vm._titleAlign);\r\n\r\n\t\t\tctx.textAlign = rtlHelper.textAlign(vm._titleAlign);\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\ttitleFontSize = vm.titleFontSize;\r\n\t\t\ttitleSpacing = vm.titleSpacing;\r\n\r\n\t\t\tctx.fillStyle = vm.titleFontColor;\r\n\t\t\tctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\r\n\r\n\t\t\tfor (i = 0; i < length; ++i) {\r\n\t\t\t\tctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFontSize / 2);\r\n\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\r\n\r\n\t\t\t\tif (i + 1 === length) {\r\n\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdrawBody: function(pt, vm, ctx) {\r\n\t\tvar bodyFontSize = vm.bodyFontSize;\r\n\t\tvar bodySpacing = vm.bodySpacing;\r\n\t\tvar bodyAlign = vm._bodyAlign;\r\n\t\tvar body = vm.body;\r\n\t\tvar drawColorBoxes = vm.displayColors;\r\n\t\tvar xLinePadding = 0;\r\n\t\tvar colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\r\n\r\n\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\tvar fillLineOfText = function(line) {\r\n\t\t\tctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyFontSize / 2);\r\n\t\t\tpt.y += bodyFontSize + bodySpacing;\r\n\t\t};\r\n\r\n\t\tvar bodyItem, textColor, labelColors, lines, i, j, ilen, jlen;\r\n\t\tvar bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\r\n\r\n\t\tctx.textAlign = bodyAlign;\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\r\n\r\n\t\tpt.x = getAlignedX(vm, bodyAlignForCalculation);\r\n\r\n\t\t// Before body lines\r\n\t\tctx.fillStyle = vm.bodyFontColor;\r\n\t\thelpers$1.each(vm.beforeBody, fillLineOfText);\r\n\r\n\t\txLinePadding = drawColorBoxes && bodyAlignForCalculation !== 'right'\r\n\t\t\t? bodyAlign === 'center' ? (bodyFontSize / 2 + 1) : (bodyFontSize + 2)\r\n\t\t\t: 0;\r\n\r\n\t\t// Draw body lines now\r\n\t\tfor (i = 0, ilen = body.length; i < ilen; ++i) {\r\n\t\t\tbodyItem = body[i];\r\n\t\t\ttextColor = vm.labelTextColors[i];\r\n\t\t\tlabelColors = vm.labelColors[i];\r\n\r\n\t\t\tctx.fillStyle = textColor;\r\n\t\t\thelpers$1.each(bodyItem.before, fillLineOfText);\r\n\r\n\t\t\tlines = bodyItem.lines;\r\n\t\t\tfor (j = 0, jlen = lines.length; j < jlen; ++j) {\r\n\t\t\t\t// Draw Legend-like boxes if needed\r\n\t\t\t\tif (drawColorBoxes) {\r\n\t\t\t\t\tvar rtlColorX = rtlHelper.x(colorX);\r\n\r\n\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\r\n\t\t\t\t\tctx.fillStyle = vm.legendColorBackground;\r\n\t\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\r\n\r\n\t\t\t\t\t// Border\r\n\t\t\t\t\tctx.lineWidth = 1;\r\n\t\t\t\t\tctx.strokeStyle = labelColors.borderColor;\r\n\t\t\t\t\tctx.strokeRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\r\n\r\n\t\t\t\t\t// Inner square\r\n\t\t\t\t\tctx.fillStyle = labelColors.backgroundColor;\r\n\t\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), bodyFontSize - 2), pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\r\n\t\t\t\t\tctx.fillStyle = textColor;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfillLineOfText(lines[j]);\r\n\t\t\t}\r\n\r\n\t\t\thelpers$1.each(bodyItem.after, fillLineOfText);\r\n\t\t}\r\n\r\n\t\t// Reset back to 0 for after body\r\n\t\txLinePadding = 0;\r\n\r\n\t\t// After body lines\r\n\t\thelpers$1.each(vm.afterBody, fillLineOfText);\r\n\t\tpt.y -= bodySpacing; // Remove last body spacing\r\n\t},\r\n\r\n\tdrawFooter: function(pt, vm, ctx) {\r\n\t\tvar footer = vm.footer;\r\n\t\tvar length = footer.length;\r\n\t\tvar footerFontSize, i;\r\n\r\n\t\tif (length) {\r\n\t\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\t\tpt.x = getAlignedX(vm, vm._footerAlign);\r\n\t\t\tpt.y += vm.footerMarginTop;\r\n\r\n\t\t\tctx.textAlign = rtlHelper.textAlign(vm._footerAlign);\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\tfooterFontSize = vm.footerFontSize;\r\n\r\n\t\t\tctx.fillStyle = vm.footerFontColor;\r\n\t\t\tctx.font = helpers$1.fontString(footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\r\n\r\n\t\t\tfor (i = 0; i < length; ++i) {\r\n\t\t\t\tctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFontSize / 2);\r\n\t\t\t\tpt.y += footerFontSize + vm.footerSpacing;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdrawBackground: function(pt, vm, ctx, tooltipSize) {\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tvar xAlign = vm.xAlign;\r\n\t\tvar yAlign = vm.yAlign;\r\n\t\tvar x = pt.x;\r\n\t\tvar y = pt.y;\r\n\t\tvar width = tooltipSize.width;\r\n\t\tvar height = tooltipSize.height;\r\n\t\tvar radius = vm.cornerRadius;\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.moveTo(x + radius, y);\r\n\t\tif (yAlign === 'top') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + width - radius, y);\r\n\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\r\n\t\tif (yAlign === 'center' && xAlign === 'right') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + width, y + height - radius);\r\n\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\r\n\t\tif (yAlign === 'bottom') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + radius, y + height);\r\n\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\r\n\t\tif (yAlign === 'center' && xAlign === 'left') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x, y + radius);\r\n\t\tctx.quadraticCurveTo(x, y, x + radius, y);\r\n\t\tctx.closePath();\r\n\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth > 0) {\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm.opacity === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tooltipSize = {\r\n\t\t\twidth: vm.width,\r\n\t\t\theight: vm.height\r\n\t\t};\r\n\t\tvar pt = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\r\n\t\t// IE11/Edge does not like very small opacities, so snap to 0\r\n\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\r\n\r\n\t\t// Truthy/falsey value for empty tooltip\r\n\t\tvar hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\r\n\r\n\t\tif (this._options.enabled && hasTooltipContent) {\r\n\t\t\tctx.save();\r\n\t\t\tctx.globalAlpha = opacity;\r\n\r\n\t\t\t// Draw Background\r\n\t\t\tthis.drawBackground(pt, vm, ctx, tooltipSize);\r\n\r\n\t\t\t// Draw Title, Body, and Footer\r\n\t\t\tpt.y += vm.yPadding;\r\n\r\n\t\t\thelpers$1.rtl.overrideTextDirection(ctx, vm.textDirection);\r\n\r\n\t\t\t// Titles\r\n\t\t\tthis.drawTitle(pt, vm, ctx);\r\n\r\n\t\t\t// Body\r\n\t\t\tthis.drawBody(pt, vm, ctx);\r\n\r\n\t\t\t// Footer\r\n\t\t\tthis.drawFooter(pt, vm, ctx);\r\n\r\n\t\t\thelpers$1.rtl.restoreTextDirection(ctx, vm.textDirection);\r\n\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event - The event to handle\r\n\t * @returns {boolean} true if the tooltip changed\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar options = me._options;\r\n\t\tvar changed = false;\r\n\r\n\t\tme._lastActive = me._lastActive || [];\r\n\r\n\t\t// Find Active Elements for tooltips\r\n\t\tif (e.type === 'mouseout') {\r\n\t\t\tme._active = [];\r\n\t\t} else {\r\n\t\t\tme._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\r\n\t\t\tif (options.reverse) {\r\n\t\t\t\tme._active.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remember Last Actives\r\n\t\tchanged = !helpers$1.arrayEquals(me._active, me._lastActive);\r\n\r\n\t\t// Only handle target event on tooltip change\r\n\t\tif (changed) {\r\n\t\t\tme._lastActive = me._active;\r\n\r\n\t\t\tif (options.enabled || options.custom) {\r\n\t\t\t\tme._eventPosition = {\r\n\t\t\t\t\tx: e.x,\r\n\t\t\t\t\ty: e.y\r\n\t\t\t\t};\r\n\r\n\t\t\t\tme.update(true);\r\n\t\t\t\tme.pivot();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n});\r\n\r\n/**\r\n * @namespace Chart.Tooltip.positioners\r\n */\r\nvar positioners_1 = positioners;\r\n\r\nvar core_tooltip = exports$4;\ncore_tooltip.positioners = positioners_1;\n\nvar valueOrDefault$9 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {},\r\n\tevents: [\r\n\t\t'mousemove',\r\n\t\t'mouseout',\r\n\t\t'click',\r\n\t\t'touchstart',\r\n\t\t'touchmove'\r\n\t],\r\n\thover: {\r\n\t\tonHover: null,\r\n\t\tmode: 'nearest',\r\n\t\tintersect: true,\r\n\t\tanimationDuration: 400\r\n\t},\r\n\tonClick: null,\r\n\tmaintainAspectRatio: true,\r\n\tresponsive: true,\r\n\tresponsiveAnimationDuration: 0\r\n});\r\n\r\n/**\r\n * Recursively merge the given config objects representing the `scales` option\r\n * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\r\n * returns a deep copy of the result, thus doesn't alter inputs.\r\n */\r\nfunction mergeScaleConfig(/* config objects ... */) {\r\n\treturn helpers$1.merge(Object.create(null), [].slice.call(arguments), {\r\n\t\tmerger: function(key, target, source, options) {\r\n\t\t\tif (key === 'xAxes' || key === 'yAxes') {\r\n\t\t\t\tvar slen = source[key].length;\r\n\t\t\t\tvar i, type, scale;\r\n\r\n\t\t\t\tif (!target[key]) {\r\n\t\t\t\t\ttarget[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (i = 0; i < slen; ++i) {\r\n\t\t\t\t\tscale = source[key][i];\r\n\t\t\t\t\ttype = valueOrDefault$9(scale.type, key === 'xAxes' ? 'category' : 'linear');\r\n\r\n\t\t\t\t\tif (i >= target[key].length) {\r\n\t\t\t\t\t\ttarget[key].push({});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {\r\n\t\t\t\t\t\t// new/untyped scale or type changed: let's apply the new defaults\r\n\t\t\t\t\t\t// then merge source scale to correctly overwrite the defaults.\r\n\t\t\t\t\t\thelpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// scales type are the same\r\n\t\t\t\t\t\thelpers$1.merge(target[key][i], scale);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\thelpers$1._merger(key, target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Recursively merge the given config objects as the root options by handling\r\n * default scale options for the `scales` and `scale` properties, then returns\r\n * a deep copy of the result, thus doesn't alter inputs.\r\n */\r\nfunction mergeConfig(/* config objects ... */) {\r\n\treturn helpers$1.merge(Object.create(null), [].slice.call(arguments), {\r\n\t\tmerger: function(key, target, source, options) {\r\n\t\t\tvar tval = target[key] || Object.create(null);\r\n\t\t\tvar sval = source[key];\r\n\r\n\t\t\tif (key === 'scales') {\r\n\t\t\t\t// scale config merging is complex. Add our own function here for that\r\n\t\t\t\ttarget[key] = mergeScaleConfig(tval, sval);\r\n\t\t\t} else if (key === 'scale') {\r\n\t\t\t\t// used in polar area & radar charts since there is only one scale\r\n\t\t\t\ttarget[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\r\n\t\t\t} else {\r\n\t\t\t\thelpers$1._merger(key, target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction initConfig(config) {\r\n\tconfig = config || Object.create(null);\r\n\r\n\t// Do NOT use mergeConfig for the data object because this method merges arrays\r\n\t// and so would change references to labels and datasets, preventing data updates.\r\n\tvar data = config.data = config.data || {};\r\n\tdata.datasets = data.datasets || [];\r\n\tdata.labels = data.labels || [];\r\n\r\n\tconfig.options = mergeConfig(\r\n\t\tcore_defaults.global,\r\n\t\tcore_defaults[config.type],\r\n\t\tconfig.options || {});\r\n\r\n\treturn config;\r\n}\r\n\r\nfunction updateConfig(chart) {\r\n\tvar newOptions = chart.options;\r\n\r\n\thelpers$1.each(chart.scales, function(scale) {\r\n\t\tcore_layouts.removeBox(chart, scale);\r\n\t});\r\n\r\n\tnewOptions = mergeConfig(\r\n\t\tcore_defaults.global,\r\n\t\tcore_defaults[chart.config.type],\r\n\t\tnewOptions);\r\n\r\n\tchart.options = chart.config.options = newOptions;\r\n\tchart.ensureScalesHaveIDs();\r\n\tchart.buildOrUpdateScales();\r\n\r\n\t// Tooltip\r\n\tchart.tooltip._options = newOptions.tooltips;\r\n\tchart.tooltip.initialize();\r\n}\r\n\r\nfunction nextAvailableScaleId(axesOpts, prefix, index) {\r\n\tvar id;\r\n\tvar hasId = function(obj) {\r\n\t\treturn obj.id === id;\r\n\t};\r\n\r\n\tdo {\r\n\t\tid = prefix + index++;\r\n\t} while (helpers$1.findIndex(axesOpts, hasId) >= 0);\r\n\r\n\treturn id;\r\n}\r\n\r\nfunction positionIsHorizontal(position) {\r\n\treturn position === 'top' || position === 'bottom';\r\n}\r\n\r\nfunction compare2Level(l1, l2) {\r\n\treturn function(a, b) {\r\n\t\treturn a[l1] === b[l1]\r\n\t\t\t? a[l2] - b[l2]\r\n\t\t\t: a[l1] - b[l1];\r\n\t};\r\n}\r\n\r\nvar Chart = function(item, config) {\r\n\tthis.construct(item, config);\r\n\treturn this;\r\n};\r\n\r\nhelpers$1.extend(Chart.prototype, /** @lends Chart */ {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tconstruct: function(item, config) {\r\n\t\tvar me = this;\r\n\r\n\t\tconfig = initConfig(config);\r\n\r\n\t\tvar context = platform.acquireContext(item, config);\r\n\t\tvar canvas = context && context.canvas;\r\n\t\tvar height = canvas && canvas.height;\r\n\t\tvar width = canvas && canvas.width;\r\n\r\n\t\tme.id = helpers$1.uid();\r\n\t\tme.ctx = context;\r\n\t\tme.canvas = canvas;\r\n\t\tme.config = config;\r\n\t\tme.width = width;\r\n\t\tme.height = height;\r\n\t\tme.aspectRatio = height ? width / height : null;\r\n\t\tme.options = config.options;\r\n\t\tme._bufferedRender = false;\r\n\t\tme._layers = [];\r\n\r\n\t\t/**\r\n\t\t * Provided for backward compatibility, Chart and Chart.Controller have been merged,\r\n\t\t * the \"instance\" still need to be defined since it might be called from plugins.\r\n\t\t * @prop Chart#chart\r\n\t\t * @deprecated since version 2.6.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tme.chart = me;\r\n\t\tme.controller = me; // chart.chart.controller #inception\r\n\r\n\t\t// Add the chart instance to the global namespace\r\n\t\tChart.instances[me.id] = me;\r\n\r\n\t\t// Define alias to the config data: `chart.data === chart.config.data`\r\n\t\tObject.defineProperty(me, 'data', {\r\n\t\t\tget: function() {\r\n\t\t\t\treturn me.config.data;\r\n\t\t\t},\r\n\t\t\tset: function(value) {\r\n\t\t\t\tme.config.data = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (!context || !canvas) {\r\n\t\t\t// The given item is not a compatible context2d element, let's return before finalizing\r\n\t\t\t// the chart initialization but after setting basic chart / controller properties that\r\n\t\t\t// can help to figure out that the chart is not valid (e.g chart.canvas !== null);\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\r\n\t\t\tconsole.error(\"Failed to create chart: can't acquire context from the given item\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme.initialize();\r\n\t\tme.update();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\r\n\t\t// Before init plugin notification\r\n\t\tcore_plugins.notify(me, 'beforeInit');\r\n\r\n\t\thelpers$1.retinaScale(me, me.options.devicePixelRatio);\r\n\r\n\t\tme.bindEvents();\r\n\r\n\t\tif (me.options.responsive) {\r\n\t\t\t// Initial resize before chart draws (must be silent to preserve initial animations).\r\n\t\t\tme.resize(true);\r\n\t\t}\r\n\r\n\t\tme.initToolTip();\r\n\r\n\t\t// After init plugin notification\r\n\t\tcore_plugins.notify(me, 'afterInit');\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tclear: function() {\r\n\t\thelpers$1.canvas.clear(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tstop: function() {\r\n\t\t// Stops any current animation loop occurring\r\n\t\tcore_animations.cancelAnimation(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tresize: function(silent) {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar canvas = me.canvas;\r\n\t\tvar aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;\r\n\r\n\t\t// the canvas render width and height will be casted to integers so make sure that\r\n\t\t// the canvas display style uses the same integer values to avoid blurring effect.\r\n\r\n\t\t// Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\r\n\t\tvar newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\r\n\t\tvar newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\r\n\r\n\t\tif (me.width === newWidth && me.height === newHeight) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcanvas.width = me.width = newWidth;\r\n\t\tcanvas.height = me.height = newHeight;\r\n\t\tcanvas.style.width = newWidth + 'px';\r\n\t\tcanvas.style.height = newHeight + 'px';\r\n\r\n\t\thelpers$1.retinaScale(me, options.devicePixelRatio);\r\n\r\n\t\tif (!silent) {\r\n\t\t\t// Notify any plugins about the resize\r\n\t\t\tvar newSize = {width: newWidth, height: newHeight};\r\n\t\t\tcore_plugins.notify(me, 'resize', [newSize]);\r\n\r\n\t\t\t// Notify of resize\r\n\t\t\tif (options.onResize) {\r\n\t\t\t\toptions.onResize(me, newSize);\r\n\t\t\t}\r\n\r\n\t\t\tme.stop();\r\n\t\t\tme.update({\r\n\t\t\t\tduration: options.responsiveAnimationDuration\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tensureScalesHaveIDs: function() {\r\n\t\tvar options = this.options;\r\n\t\tvar scalesOptions = options.scales || {};\r\n\t\tvar scaleOptions = options.scale;\r\n\r\n\t\thelpers$1.each(scalesOptions.xAxes, function(xAxisOptions, index) {\r\n\t\t\tif (!xAxisOptions.id) {\r\n\t\t\t\txAxisOptions.id = nextAvailableScaleId(scalesOptions.xAxes, 'x-axis-', index);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.each(scalesOptions.yAxes, function(yAxisOptions, index) {\r\n\t\t\tif (!yAxisOptions.id) {\r\n\t\t\t\tyAxisOptions.id = nextAvailableScaleId(scalesOptions.yAxes, 'y-axis-', index);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (scaleOptions) {\r\n\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Builds a map of scale ID to scale object for future lookup.\r\n\t */\r\n\tbuildOrUpdateScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar scales = me.scales || {};\r\n\t\tvar items = [];\r\n\t\tvar updated = Object.keys(scales).reduce(function(obj, id) {\r\n\t\t\tobj[id] = false;\r\n\t\t\treturn obj;\r\n\t\t}, {});\r\n\r\n\t\tif (options.scales) {\r\n\t\t\titems = items.concat(\r\n\t\t\t\t(options.scales.xAxes || []).map(function(xAxisOptions) {\r\n\t\t\t\t\treturn {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};\r\n\t\t\t\t}),\r\n\t\t\t\t(options.scales.yAxes || []).map(function(yAxisOptions) {\r\n\t\t\t\t\treturn {options: yAxisOptions, dtype: 'linear', dposition: 'left'};\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (options.scale) {\r\n\t\t\titems.push({\r\n\t\t\t\toptions: options.scale,\r\n\t\t\t\tdtype: 'radialLinear',\r\n\t\t\t\tisDefault: true,\r\n\t\t\t\tdposition: 'chartArea'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\thelpers$1.each(items, function(item) {\r\n\t\t\tvar scaleOptions = item.options;\r\n\t\t\tvar id = scaleOptions.id;\r\n\t\t\tvar scaleType = valueOrDefault$9(scaleOptions.type, item.dtype);\r\n\r\n\t\t\tif (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\r\n\t\t\t\tscaleOptions.position = item.dposition;\r\n\t\t\t}\r\n\r\n\t\t\tupdated[id] = true;\r\n\t\t\tvar scale = null;\r\n\t\t\tif (id in scales && scales[id].type === scaleType) {\r\n\t\t\t\tscale = scales[id];\r\n\t\t\t\tscale.options = scaleOptions;\r\n\t\t\t\tscale.ctx = me.ctx;\r\n\t\t\t\tscale.chart = me;\r\n\t\t\t} else {\r\n\t\t\t\tvar scaleClass = core_scaleService.getScaleConstructor(scaleType);\r\n\t\t\t\tif (!scaleClass) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tscale = new scaleClass({\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\ttype: scaleType,\r\n\t\t\t\t\toptions: scaleOptions,\r\n\t\t\t\t\tctx: me.ctx,\r\n\t\t\t\t\tchart: me\r\n\t\t\t\t});\r\n\t\t\t\tscales[scale.id] = scale;\r\n\t\t\t}\r\n\r\n\t\t\tscale.mergeTicksOptions();\r\n\r\n\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\r\n\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\r\n\t\t\t// make the logic easier and remove some useless? custom code.\r\n\t\t\tif (item.isDefault) {\r\n\t\t\t\tme.scale = scale;\r\n\t\t\t}\r\n\t\t});\r\n\t\t// clear up discarded scales\r\n\t\thelpers$1.each(updated, function(hasUpdated, id) {\r\n\t\t\tif (!hasUpdated) {\r\n\t\t\t\tdelete scales[id];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tme.scales = scales;\r\n\r\n\t\tcore_scaleService.addScalesToLayout(this);\r\n\t},\r\n\r\n\tbuildOrUpdateControllers: function() {\r\n\t\tvar me = this;\r\n\t\tvar newControllers = [];\r\n\t\tvar datasets = me.data.datasets;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; i++) {\r\n\t\t\tvar dataset = datasets[i];\r\n\t\t\tvar meta = me.getDatasetMeta(i);\r\n\t\t\tvar type = dataset.type || me.config.type;\r\n\r\n\t\t\tif (meta.type && meta.type !== type) {\r\n\t\t\t\tme.destroyDatasetMeta(i);\r\n\t\t\t\tmeta = me.getDatasetMeta(i);\r\n\t\t\t}\r\n\t\t\tmeta.type = type;\r\n\t\t\tmeta.order = dataset.order || 0;\r\n\t\t\tmeta.index = i;\r\n\r\n\t\t\tif (meta.controller) {\r\n\t\t\t\tmeta.controller.updateIndex(i);\r\n\t\t\t\tmeta.controller.linkScales();\r\n\t\t\t} else {\r\n\t\t\t\tvar ControllerClass = controllers[meta.type];\r\n\t\t\t\tif (ControllerClass === undefined) {\r\n\t\t\t\t\tthrow new Error('\"' + meta.type + '\" is not a chart type.');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmeta.controller = new ControllerClass(me, i);\r\n\t\t\t\tnewControllers.push(meta.controller);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn newControllers;\r\n\t},\r\n\r\n\t/**\r\n\t * Reset the elements of all datasets\r\n\t * @private\r\n\t */\r\n\tresetElements: function() {\r\n\t\tvar me = this;\r\n\t\thelpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\r\n\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\r\n\t\t}, me);\r\n\t},\r\n\r\n\t/**\r\n\t* Resets the chart back to it's state before the initial animation\r\n\t*/\r\n\treset: function() {\r\n\t\tthis.resetElements();\r\n\t\tthis.tooltip.initialize();\r\n\t},\r\n\r\n\tupdate: function(config) {\r\n\t\tvar me = this;\r\n\t\tvar i, ilen;\r\n\r\n\t\tif (!config || typeof config !== 'object') {\r\n\t\t\t// backwards compatibility\r\n\t\t\tconfig = {\r\n\t\t\t\tduration: config,\r\n\t\t\t\tlazy: arguments[1]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tupdateConfig(me);\r\n\r\n\t\t// plugins options references might have change, let's invalidate the cache\r\n\t\t// https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n\t\tcore_plugins._invalidate(me);\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeUpdate') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// In case the entire data object changed\r\n\t\tme.tooltip._data = me.data;\r\n\r\n\t\t// Make sure dataset controllers are updated and new controllers are reset\r\n\t\tvar newControllers = me.buildOrUpdateControllers();\r\n\r\n\t\t// Make sure all dataset controllers have correct meta data counts\r\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\r\n\t\t\tme.getDatasetMeta(i).controller.buildOrUpdateElements();\r\n\t\t}\r\n\r\n\t\tme.updateLayout();\r\n\r\n\t\t// Can only reset the new controllers after the scales have been updated\r\n\t\tif (me.options.animation && me.options.animation.duration) {\r\n\t\t\thelpers$1.each(newControllers, function(controller) {\r\n\t\t\t\tcontroller.reset();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tme.updateDatasets();\r\n\r\n\t\t// Need to reset tooltip in case it is displayed with elements that are removed\r\n\t\t// after update.\r\n\t\tme.tooltip.initialize();\r\n\r\n\t\t// Last active contains items that were previously in the tooltip.\r\n\t\t// When we reset the tooltip, we need to clear it\r\n\t\tme.lastActive = [];\r\n\r\n\t\t// Do this before render so that any plugins that need final scale updates can use it\r\n\t\tcore_plugins.notify(me, 'afterUpdate');\r\n\r\n\t\tme._layers.sort(compare2Level('z', '_idx'));\r\n\r\n\t\tif (me._bufferedRender) {\r\n\t\t\tme._bufferedRequest = {\r\n\t\t\t\tduration: config.duration,\r\n\t\t\t\teasing: config.easing,\r\n\t\t\t\tlazy: config.lazy\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tme.render(config);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\r\n\t * hook, in which case, plugins will not be called on `afterLayout`.\r\n\t * @private\r\n\t */\r\n\tupdateLayout: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeLayout') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcore_layouts.update(this, this.width, this.height);\r\n\r\n\t\tme._layers = [];\r\n\t\thelpers$1.each(me.boxes, function(box) {\r\n\t\t\t// _configure is called twice, once in core.scale.update and once here.\r\n\t\t\t// Here the boxes are fully updated and at their final positions.\r\n\t\t\tif (box._configure) {\r\n\t\t\t\tbox._configure();\r\n\t\t\t}\r\n\t\t\tme._layers.push.apply(me._layers, box._layers());\r\n\t\t}, me);\r\n\r\n\t\tme._layers.forEach(function(item, index) {\r\n\t\t\titem._idx = index;\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Provided for backward compatibility, use `afterLayout` instead.\r\n\t\t * @method IPlugin#afterScaleUpdate\r\n\t\t * @deprecated since version 2.5.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tcore_plugins.notify(me, 'afterScaleUpdate');\r\n\t\tcore_plugins.notify(me, 'afterLayout');\r\n\t},\r\n\r\n\t/**\r\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\r\n\t * @private\r\n\t */\r\n\tupdateDatasets: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tme.updateDataset(i);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetsUpdate');\r\n\t},\r\n\r\n\t/**\r\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\r\n\t * @private\r\n\t */\r\n\tupdateDataset: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getDatasetMeta(index);\r\n\t\tvar args = {\r\n\t\t\tmeta: meta,\r\n\t\t\tindex: index\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmeta.controller._update();\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetUpdate', [args]);\r\n\t},\r\n\r\n\trender: function(config) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (!config || typeof config !== 'object') {\r\n\t\t\t// backwards compatibility\r\n\t\t\tconfig = {\r\n\t\t\t\tduration: config,\r\n\t\t\t\tlazy: arguments[1]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar animationOptions = me.options.animation;\r\n\t\tvar duration = valueOrDefault$9(config.duration, animationOptions && animationOptions.duration);\r\n\t\tvar lazy = config.lazy;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeRender') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar onComplete = function(animation) {\r\n\t\t\tcore_plugins.notify(me, 'afterRender');\r\n\t\t\thelpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\r\n\t\t};\r\n\r\n\t\tif (animationOptions && duration) {\r\n\t\t\tvar animation = new core_animation({\r\n\t\t\t\tnumSteps: duration / 16.66, // 60 fps\r\n\t\t\t\teasing: config.easing || animationOptions.easing,\r\n\r\n\t\t\t\trender: function(chart, animationObject) {\r\n\t\t\t\t\tvar easingFunction = helpers$1.easing.effects[animationObject.easing];\r\n\t\t\t\t\tvar currentStep = animationObject.currentStep;\r\n\t\t\t\t\tvar stepDecimal = currentStep / animationObject.numSteps;\r\n\r\n\t\t\t\t\tchart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tonAnimationProgress: animationOptions.onProgress,\r\n\t\t\t\tonAnimationComplete: onComplete\r\n\t\t\t});\r\n\r\n\t\t\tcore_animations.addAnimation(me, animation, duration, lazy);\r\n\t\t} else {\r\n\t\t\tme.draw();\r\n\r\n\t\t\t// See https://github.com/chartjs/Chart.js/issues/3781\r\n\t\t\tonComplete(new core_animation({numSteps: 0, chart: me}));\r\n\t\t}\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tdraw: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar i, layers;\r\n\r\n\t\tme.clear();\r\n\r\n\t\tif (helpers$1.isNullOrUndef(easingValue)) {\r\n\t\t\teasingValue = 1;\r\n\t\t}\r\n\r\n\t\tme.transition(easingValue);\r\n\r\n\t\tif (me.width <= 0 || me.height <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Because of plugin hooks (before/afterDatasetsDraw), datasets can't\r\n\t\t// currently be part of layers. Instead, we draw\r\n\t\t// layers <= 0 before(default, backward compat), and the rest after\r\n\t\tlayers = me._layers;\r\n\t\tfor (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\r\n\t\t\tlayers[i].draw(me.chartArea);\r\n\t\t}\r\n\r\n\t\tme.drawDatasets(easingValue);\r\n\r\n\t\t// Rest of layers\r\n\t\tfor (; i < layers.length; ++i) {\r\n\t\t\tlayers[i].draw(me.chartArea);\r\n\t\t}\r\n\r\n\t\tme._drawTooltip(easingValue);\r\n\r\n\t\tcore_plugins.notify(me, 'afterDraw', [easingValue]);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\ttransition: function(easingValue) {\r\n\t\tvar me = this;\r\n\r\n\t\tfor (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\tif (me.isDatasetVisible(i)) {\r\n\t\t\t\tme.getDatasetMeta(i).controller.transition(easingValue);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.tooltip.transition(easingValue);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getSortedDatasetMetas: function(filterVisible) {\r\n\t\tvar me = this;\r\n\t\tvar datasets = me.data.datasets || [];\r\n\t\tvar result = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; ++i) {\r\n\t\t\tif (!filterVisible || me.isDatasetVisible(i)) {\r\n\t\t\t\tresult.push(me.getDatasetMeta(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.sort(compare2Level('order', 'index'));\r\n\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getSortedVisibleDatasetMetas: function() {\r\n\t\treturn this._getSortedDatasetMetas(true);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\r\n\t * @private\r\n\t */\r\n\tdrawDatasets: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar metasets, i;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmetasets = me._getSortedVisibleDatasetMetas();\r\n\t\tfor (i = metasets.length - 1; i >= 0; --i) {\r\n\t\t\tme.drawDataset(metasets[i], easingValue);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\r\n\t * @private\r\n\t */\r\n\tdrawDataset: function(meta, easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar args = {\r\n\t\t\tmeta: meta,\r\n\t\t\tindex: meta.index,\r\n\t\t\teasingValue: easingValue\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmeta.controller.draw(easingValue);\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetDraw', [args]);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\r\n\t * hook, in which case, plugins will not be called on `afterTooltipDraw`.\r\n\t * @private\r\n\t */\r\n\t_drawTooltip: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar tooltip = me.tooltip;\r\n\t\tvar args = {\r\n\t\t\ttooltip: tooltip,\r\n\t\t\teasingValue: easingValue\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttooltip.draw();\r\n\r\n\t\tcore_plugins.notify(me, 'afterTooltipDraw', [args]);\r\n\t},\r\n\r\n\t/**\r\n\t * Get the single element that was clicked on\r\n\t * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\r\n\t */\r\n\tgetElementAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.single(this, e);\r\n\t},\r\n\r\n\tgetElementsAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.label(this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetElementsAtXAxis: function(e) {\r\n\t\treturn core_interaction.modes['x-axis'](this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetElementsAtEventForMode: function(e, mode, options) {\r\n\t\tvar method = core_interaction.modes[mode];\r\n\t\tif (typeof method === 'function') {\r\n\t\t\treturn method(this, e, options);\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t},\r\n\r\n\tgetDatasetAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.dataset(this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetDatasetMeta: function(datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.data.datasets[datasetIndex];\r\n\t\tif (!dataset._meta) {\r\n\t\t\tdataset._meta = {};\r\n\t\t}\r\n\r\n\t\tvar meta = dataset._meta[me.id];\r\n\t\tif (!meta) {\r\n\t\t\tmeta = dataset._meta[me.id] = {\r\n\t\t\t\ttype: null,\r\n\t\t\t\tdata: [],\r\n\t\t\t\tdataset: null,\r\n\t\t\t\tcontroller: null,\r\n\t\t\t\thidden: null,\t\t\t// See isDatasetVisible() comment\r\n\t\t\t\txAxisID: null,\r\n\t\t\t\tyAxisID: null,\r\n\t\t\t\torder: dataset.order || 0,\r\n\t\t\t\tindex: datasetIndex\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn meta;\r\n\t},\r\n\r\n\tgetVisibleDatasetCount: function() {\r\n\t\tvar count = 0;\r\n\t\tfor (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tif (this.isDatasetVisible(i)) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn count;\r\n\t},\r\n\r\n\tisDatasetVisible: function(datasetIndex) {\r\n\t\tvar meta = this.getDatasetMeta(datasetIndex);\r\n\r\n\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\r\n\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\r\n\t\treturn typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\r\n\t},\r\n\r\n\tgenerateLegend: function() {\r\n\t\treturn this.options.legendCallback(this);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroyDatasetMeta: function(datasetIndex) {\r\n\t\tvar id = this.id;\r\n\t\tvar dataset = this.data.datasets[datasetIndex];\r\n\t\tvar meta = dataset._meta && dataset._meta[id];\r\n\r\n\t\tif (meta) {\r\n\t\t\tmeta.controller.destroy();\r\n\t\t\tdelete dataset._meta[id];\r\n\t\t}\r\n\t},\r\n\r\n\tdestroy: function() {\r\n\t\tvar me = this;\r\n\t\tvar canvas = me.canvas;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme.stop();\r\n\r\n\t\t// dataset controllers need to cleanup associated data\r\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tme.destroyDatasetMeta(i);\r\n\t\t}\r\n\r\n\t\tif (canvas) {\r\n\t\t\tme.unbindEvents();\r\n\t\t\thelpers$1.canvas.clear(me);\r\n\t\t\tplatform.releaseContext(me.ctx);\r\n\t\t\tme.canvas = null;\r\n\t\t\tme.ctx = null;\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'destroy');\r\n\r\n\t\tdelete Chart.instances[me.id];\r\n\t},\r\n\r\n\ttoBase64Image: function() {\r\n\t\treturn this.canvas.toDataURL.apply(this.canvas, arguments);\r\n\t},\r\n\r\n\tinitToolTip: function() {\r\n\t\tvar me = this;\r\n\t\tme.tooltip = new core_tooltip({\r\n\t\t\t_chart: me,\r\n\t\t\t_chartInstance: me, // deprecated, backward compatibility\r\n\t\t\t_data: me.data,\r\n\t\t\t_options: me.options.tooltips\r\n\t\t}, me);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tbindEvents: function() {\r\n\t\tvar me = this;\r\n\t\tvar listeners = me._listeners = {};\r\n\t\tvar listener = function() {\r\n\t\t\tme.eventHandler.apply(me, arguments);\r\n\t\t};\r\n\r\n\t\thelpers$1.each(me.options.events, function(type) {\r\n\t\t\tplatform.addEventListener(me, type, listener);\r\n\t\t\tlisteners[type] = listener;\r\n\t\t});\r\n\r\n\t\t// Elements used to detect size change should not be injected for non responsive charts.\r\n\t\t// See https://github.com/chartjs/Chart.js/issues/2210\r\n\t\tif (me.options.responsive) {\r\n\t\t\tlistener = function() {\r\n\t\t\t\tme.resize();\r\n\t\t\t};\r\n\r\n\t\t\tplatform.addEventListener(me, 'resize', listener);\r\n\t\t\tlisteners.resize = listener;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tunbindEvents: function() {\r\n\t\tvar me = this;\r\n\t\tvar listeners = me._listeners;\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdelete me._listeners;\r\n\t\thelpers$1.each(listeners, function(listener, type) {\r\n\t\t\tplatform.removeEventListener(me, type, listener);\r\n\t\t});\r\n\t},\r\n\r\n\tupdateHoverStyle: function(elements, mode, enabled) {\r\n\t\tvar prefix = enabled ? 'set' : 'remove';\r\n\t\tvar element, i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = elements.length; i < ilen; ++i) {\r\n\t\t\telement = elements[i];\r\n\t\t\tif (element) {\r\n\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[prefix + 'HoverStyle'](element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (mode === 'dataset') {\r\n\t\t\tthis.getDatasetMeta(elements[0]._datasetIndex).controller['_' + prefix + 'DatasetHoverStyle']();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\teventHandler: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar tooltip = me.tooltip;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Buffer any update calls so that renders do not occur\r\n\t\tme._bufferedRender = true;\r\n\t\tme._bufferedRequest = null;\r\n\r\n\t\tvar changed = me.handleEvent(e);\r\n\t\t// for smooth tooltip animations issue #4989\r\n\t\t// the tooltip should be the source of change\r\n\t\t// Animation check workaround:\r\n\t\t// tooltip._start will be null when tooltip isn't animating\r\n\t\tif (tooltip) {\r\n\t\t\tchanged = tooltip._start\r\n\t\t\t\t? tooltip.handleEvent(e)\r\n\t\t\t\t: changed | tooltip.handleEvent(e);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterEvent', [e]);\r\n\r\n\t\tvar bufferedRequest = me._bufferedRequest;\r\n\t\tif (bufferedRequest) {\r\n\t\t\t// If we have an update that was triggered, we need to do a normal render\r\n\t\t\tme.render(bufferedRequest);\r\n\t\t} else if (changed && !me.animating) {\r\n\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\r\n\t\t\tme.stop();\r\n\r\n\t\t\t// We only need to render at this point. Updating will cause scales to be\r\n\t\t\t// recomputed generating flicker & using more memory than necessary.\r\n\t\t\tme.render({\r\n\t\t\t\tduration: me.options.hover.animationDuration,\r\n\t\t\t\tlazy: true\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tme._bufferedRender = false;\r\n\t\tme._bufferedRequest = null;\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event the event to handle\r\n\t * @return {boolean} true if the chart needs to re-render\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options || {};\r\n\t\tvar hoverOptions = options.hover;\r\n\t\tvar changed = false;\r\n\r\n\t\tme.lastActive = me.lastActive || [];\r\n\r\n\t\t// Find Active Elements for hover and tooltips\r\n\t\tif (e.type === 'mouseout') {\r\n\t\t\tme.active = [];\r\n\t\t} else {\r\n\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\r\n\t\t}\r\n\r\n\t\t// Invoke onHover hook\r\n\t\t// Need to call with native event here to not break backwards compatibility\r\n\t\thelpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\r\n\r\n\t\tif (e.type === 'mouseup' || e.type === 'click') {\r\n\t\t\tif (options.onClick) {\r\n\t\t\t\t// Use e.native here for backwards compatibility\r\n\t\t\t\toptions.onClick.call(me, e.native, me.active);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remove styling for last active (even if it may still be active)\r\n\t\tif (me.lastActive.length) {\r\n\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\r\n\t\t}\r\n\r\n\t\t// Built in hover styling\r\n\t\tif (me.active.length && hoverOptions.mode) {\r\n\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\r\n\t\t}\r\n\r\n\t\tchanged = !helpers$1.arrayEquals(me.active, me.lastActive);\r\n\r\n\t\t// Remember Last Actives\r\n\t\tme.lastActive = me.active;\r\n\r\n\t\treturn changed;\r\n\t}\r\n});\r\n\r\n/**\r\n * NOTE(SB) We actually don't use this container anymore but we need to keep it\r\n * for backward compatibility. Though, it can still be useful for plugins that\r\n * would need to work on multiple charts?!\r\n */\r\nChart.instances = {};\r\n\r\nvar core_controller = Chart;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart instead.\r\n * @class Chart.Controller\r\n * @deprecated since version 2.6\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nChart.Controller = Chart;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart\r\n * @deprecated since version 2.8\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nChart.types = {};\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.helpers.configMerge\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.configMerge = mergeConfig;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.helpers.scaleMerge\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.scaleMerge = mergeScaleConfig;\n\nvar core_helpers = function() {\r\n\r\n\t// -- Basic js utility methods\r\n\r\n\thelpers$1.where = function(collection, filterCallback) {\r\n\t\tif (helpers$1.isArray(collection) && Array.prototype.filter) {\r\n\t\t\treturn collection.filter(filterCallback);\r\n\t\t}\r\n\t\tvar filtered = [];\r\n\r\n\t\thelpers$1.each(collection, function(item) {\r\n\t\t\tif (filterCallback(item)) {\r\n\t\t\t\tfiltered.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filtered;\r\n\t};\r\n\thelpers$1.findIndex = Array.prototype.findIndex ?\r\n\t\tfunction(array, callback, scope) {\r\n\t\t\treturn array.findIndex(callback, scope);\r\n\t\t} :\r\n\t\tfunction(array, callback, scope) {\r\n\t\t\tscope = scope === undefined ? array : scope;\r\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\r\n\t\t\t\tif (callback.call(scope, array[i], i, array)) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\thelpers$1.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\r\n\t\t// Default to start of the array\r\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\r\n\t\t\tstartIndex = -1;\r\n\t\t}\r\n\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\r\n\t\t\tvar currentItem = arrayToSearch[i];\r\n\t\t\tif (filterCallback(currentItem)) {\r\n\t\t\t\treturn currentItem;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\thelpers$1.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\r\n\t\t// Default to end of the array\r\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\r\n\t\t\tstartIndex = arrayToSearch.length;\r\n\t\t}\r\n\t\tfor (var i = startIndex - 1; i >= 0; i--) {\r\n\t\t\tvar currentItem = arrayToSearch[i];\r\n\t\t\tif (filterCallback(currentItem)) {\r\n\t\t\t\treturn currentItem;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// -- Math methods\r\n\thelpers$1.isNumber = function(n) {\r\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\r\n\t};\r\n\thelpers$1.almostEquals = function(x, y, epsilon) {\r\n\t\treturn Math.abs(x - y) < epsilon;\r\n\t};\r\n\thelpers$1.almostWhole = function(x, epsilon) {\r\n\t\tvar rounded = Math.round(x);\r\n\t\treturn ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\r\n\t};\r\n\thelpers$1.max = function(array) {\r\n\t\treturn array.reduce(function(max, value) {\r\n\t\t\tif (!isNaN(value)) {\r\n\t\t\t\treturn Math.max(max, value);\r\n\t\t\t}\r\n\t\t\treturn max;\r\n\t\t}, Number.NEGATIVE_INFINITY);\r\n\t};\r\n\thelpers$1.min = function(array) {\r\n\t\treturn array.reduce(function(min, value) {\r\n\t\t\tif (!isNaN(value)) {\r\n\t\t\t\treturn Math.min(min, value);\r\n\t\t\t}\r\n\t\t\treturn min;\r\n\t\t}, Number.POSITIVE_INFINITY);\r\n\t};\r\n\thelpers$1.sign = Math.sign ?\r\n\t\tfunction(x) {\r\n\t\t\treturn Math.sign(x);\r\n\t\t} :\r\n\t\tfunction(x) {\r\n\t\t\tx = +x; // convert to a number\r\n\t\t\tif (x === 0 || isNaN(x)) {\r\n\t\t\t\treturn x;\r\n\t\t\t}\r\n\t\t\treturn x > 0 ? 1 : -1;\r\n\t\t};\r\n\thelpers$1.toRadians = function(degrees) {\r\n\t\treturn degrees * (Math.PI / 180);\r\n\t};\r\n\thelpers$1.toDegrees = function(radians) {\r\n\t\treturn radians * (180 / Math.PI);\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the number of decimal places\r\n\t * i.e. the number of digits after the decimal point, of the value of this Number.\r\n\t * @param {number} x - A number.\r\n\t * @returns {number} The number of decimal places.\r\n\t * @private\r\n\t */\r\n\thelpers$1._decimalPlaces = function(x) {\r\n\t\tif (!helpers$1.isFinite(x)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar e = 1;\r\n\t\tvar p = 0;\r\n\t\twhile (Math.round(x * e) / e !== x) {\r\n\t\t\te *= 10;\r\n\t\t\tp++;\r\n\t\t}\r\n\t\treturn p;\r\n\t};\r\n\r\n\t// Gets the angle from vertical upright to the point about a centre.\r\n\thelpers$1.getAngleFromPoint = function(centrePoint, anglePoint) {\r\n\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x;\r\n\t\tvar distanceFromYCenter = anglePoint.y - centrePoint.y;\r\n\t\tvar radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\r\n\r\n\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\r\n\r\n\t\tif (angle < (-0.5 * Math.PI)) {\r\n\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tangle: angle,\r\n\t\t\tdistance: radialDistanceFromCenter\r\n\t\t};\r\n\t};\r\n\thelpers$1.distanceBetweenPoints = function(pt1, pt2) {\r\n\t\treturn Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\r\n\t};\r\n\r\n\t/**\r\n\t * Provided for backward compatibility, not available anymore\r\n\t * @function Chart.helpers.aliasPixel\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t */\r\n\thelpers$1.aliasPixel = function(pixelWidth) {\r\n\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the aligned pixel value to avoid anti-aliasing blur\r\n\t * @param {Chart} chart - The chart instance.\r\n\t * @param {number} pixel - A pixel value.\r\n\t * @param {number} width - The width of the element.\r\n\t * @returns {number} The aligned pixel value.\r\n\t * @private\r\n\t */\r\n\thelpers$1._alignPixel = function(chart, pixel, width) {\r\n\t\tvar devicePixelRatio = chart.currentDevicePixelRatio;\r\n\t\tvar halfWidth = width / 2;\r\n\t\treturn Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\r\n\t};\r\n\r\n\thelpers$1.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\r\n\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\r\n\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\r\n\r\n\t\t// This function must also respect \"skipped\" points\r\n\r\n\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint;\r\n\t\tvar current = middlePoint;\r\n\t\tvar next = afterPoint.skip ? middlePoint : afterPoint;\r\n\r\n\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\r\n\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\r\n\r\n\t\tvar s01 = d01 / (d01 + d12);\r\n\t\tvar s12 = d12 / (d01 + d12);\r\n\r\n\t\t// If all points are the same, s01 & s02 will be inf\r\n\t\ts01 = isNaN(s01) ? 0 : s01;\r\n\t\ts12 = isNaN(s12) ? 0 : s12;\r\n\r\n\t\tvar fa = t * s01; // scaling factor for triangle Ta\r\n\t\tvar fb = t * s12;\r\n\r\n\t\treturn {\r\n\t\t\tprevious: {\r\n\t\t\t\tx: current.x - fa * (next.x - previous.x),\r\n\t\t\t\ty: current.y - fa * (next.y - previous.y)\r\n\t\t\t},\r\n\t\t\tnext: {\r\n\t\t\t\tx: current.x + fb * (next.x - previous.x),\r\n\t\t\t\ty: current.y + fb * (next.y - previous.y)\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\thelpers$1.EPSILON = Number.EPSILON || 1e-14;\r\n\thelpers$1.splineCurveMonotone = function(points) {\r\n\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\r\n\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\r\n\t\t// between the dataset discrete points due to the interpolation.\r\n\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\r\n\r\n\t\tvar pointsWithTangents = (points || []).map(function(point) {\r\n\t\t\treturn {\r\n\t\t\t\tmodel: point._model,\r\n\t\t\t\tdeltaK: 0,\r\n\t\t\t\tmK: 0\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\r\n\t\tvar pointsLen = pointsWithTangents.length;\r\n\t\tvar i, pointBefore, pointCurrent, pointAfter;\r\n\t\tfor (i = 0; i < pointsLen; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tif (pointCurrent.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\r\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\r\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\r\n\t\t\t\tvar slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);\r\n\r\n\t\t\t\t// In the case of two points that appear at the same x pixel, slopeDeltaX is 0\r\n\t\t\t\tpointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!pointBefore || pointBefore.model.skip) {\r\n\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\r\n\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\r\n\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\r\n\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\r\n\t\t\t\tpointCurrent.mK = 0;\r\n\t\t\t} else {\r\n\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Adjust tangents to ensure monotonic properties\r\n\t\tvar alphaK, betaK, tauK, squaredMagnitude;\r\n\t\tfor (i = 0; i < pointsLen - 1; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tpointAfter = pointsWithTangents[i + 1];\r\n\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\r\n\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\r\n\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\r\n\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\r\n\t\t\tif (squaredMagnitude <= 9) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\r\n\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\r\n\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\r\n\t\t}\r\n\r\n\t\t// Compute control points\r\n\t\tvar deltaX;\r\n\t\tfor (i = 0; i < pointsLen; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tif (pointCurrent.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\r\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\r\n\t\t\tif (pointBefore && !pointBefore.model.skip) {\r\n\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\r\n\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\r\n\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\r\n\t\t\t}\r\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\r\n\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\r\n\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\r\n\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\thelpers$1.nextItem = function(collection, index, loop) {\r\n\t\tif (loop) {\r\n\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\r\n\t\t}\r\n\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\r\n\t};\r\n\thelpers$1.previousItem = function(collection, index, loop) {\r\n\t\tif (loop) {\r\n\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\r\n\t\t}\r\n\t\treturn index <= 0 ? collection[0] : collection[index - 1];\r\n\t};\r\n\t// Implementation of the nice number algorithm used in determining where axis labels will go\r\n\thelpers$1.niceNum = function(range, round) {\r\n\t\tvar exponent = Math.floor(helpers$1.log10(range));\r\n\t\tvar fraction = range / Math.pow(10, exponent);\r\n\t\tvar niceFraction;\r\n\r\n\t\tif (round) {\r\n\t\t\tif (fraction < 1.5) {\r\n\t\t\t\tniceFraction = 1;\r\n\t\t\t} else if (fraction < 3) {\r\n\t\t\t\tniceFraction = 2;\r\n\t\t\t} else if (fraction < 7) {\r\n\t\t\t\tniceFraction = 5;\r\n\t\t\t} else {\r\n\t\t\t\tniceFraction = 10;\r\n\t\t\t}\r\n\t\t} else if (fraction <= 1.0) {\r\n\t\t\tniceFraction = 1;\r\n\t\t} else if (fraction <= 2) {\r\n\t\t\tniceFraction = 2;\r\n\t\t} else if (fraction <= 5) {\r\n\t\t\tniceFraction = 5;\r\n\t\t} else {\r\n\t\t\tniceFraction = 10;\r\n\t\t}\r\n\r\n\t\treturn niceFraction * Math.pow(10, exponent);\r\n\t};\r\n\t// Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\thelpers$1.requestAnimFrame = (function() {\r\n\t\tif (typeof window === 'undefined') {\r\n\t\t\treturn function(callback) {\r\n\t\t\t\tcallback();\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn window.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\twindow.msRequestAnimationFrame ||\r\n\t\t\tfunction(callback) {\r\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\r\n\t\t\t};\r\n\t}());\r\n\t// -- DOM methods\r\n\thelpers$1.getRelativePosition = function(evt, chart) {\r\n\t\tvar mouseX, mouseY;\r\n\t\tvar e = evt.originalEvent || evt;\r\n\t\tvar canvas = evt.target || evt.srcElement;\r\n\t\tvar boundingRect = canvas.getBoundingClientRect();\r\n\r\n\t\tvar touches = e.touches;\r\n\t\tif (touches && touches.length > 0) {\r\n\t\t\tmouseX = touches[0].clientX;\r\n\t\t\tmouseY = touches[0].clientY;\r\n\r\n\t\t} else {\r\n\t\t\tmouseX = e.clientX;\r\n\t\t\tmouseY = e.clientY;\r\n\t\t}\r\n\r\n\t\t// Scale mouse coordinates into canvas coordinates\r\n\t\t// by following the pattern laid out by 'jerryj' in the comments of\r\n\t\t// https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\r\n\t\tvar paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\r\n\t\tvar paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\r\n\t\tvar paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\r\n\t\tvar paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\r\n\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\r\n\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\r\n\r\n\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\r\n\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\r\n\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\r\n\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\r\n\r\n\t\treturn {\r\n\t\t\tx: mouseX,\r\n\t\t\ty: mouseY\r\n\t\t};\r\n\r\n\t};\r\n\r\n\t// Private helper function to convert max-width/max-height values that may be percentages into a number\r\n\tfunction parseMaxStyle(styleValue, node, parentProperty) {\r\n\t\tvar valueInPixels;\r\n\t\tif (typeof styleValue === 'string') {\r\n\t\t\tvalueInPixels = parseInt(styleValue, 10);\r\n\r\n\t\t\tif (styleValue.indexOf('%') !== -1) {\r\n\t\t\t\t// percentage * size in dimension\r\n\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvalueInPixels = styleValue;\r\n\t\t}\r\n\r\n\t\treturn valueInPixels;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns if the given value contains an effective constraint.\r\n\t * @private\r\n\t */\r\n\tfunction isConstrainedValue(value) {\r\n\t\treturn value !== undefined && value !== null && value !== 'none';\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\r\n\t * @param {HTMLElement} domNode - the node to check the constraint on\r\n\t * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\r\n\t * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\r\n\t * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\r\n\t */\r\n\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\r\n\t\tvar view = document.defaultView;\r\n\t\tvar parentNode = helpers$1._getParentNode(domNode);\r\n\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\r\n\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\r\n\t\tvar hasCNode = isConstrainedValue(constrainedNode);\r\n\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\r\n\t\tvar infinity = Number.POSITIVE_INFINITY;\r\n\r\n\t\tif (hasCNode || hasCContainer) {\r\n\t\t\treturn Math.min(\r\n\t\t\t\thasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\r\n\t\t\t\thasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\r\n\t\t}\r\n\r\n\t\treturn 'none';\r\n\t}\r\n\t// returns Number or undefined if no constraint\r\n\thelpers$1.getConstraintWidth = function(domNode) {\r\n\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\r\n\t};\r\n\t// returns Number or undefined if no constraint\r\n\thelpers$1.getConstraintHeight = function(domNode) {\r\n\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\r\n\t};\r\n\t/**\r\n\t * @private\r\n \t */\r\n\thelpers$1._calculatePadding = function(container, padding, parentDimension) {\r\n\t\tpadding = helpers$1.getStyle(container, padding);\r\n\r\n\t\treturn padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\r\n\t};\r\n\t/**\r\n\t * @private\r\n\t */\r\n\thelpers$1._getParentNode = function(domNode) {\r\n\t\tvar parent = domNode.parentNode;\r\n\t\tif (parent && parent.toString() === '[object ShadowRoot]') {\r\n\t\t\tparent = parent.host;\r\n\t\t}\r\n\t\treturn parent;\r\n\t};\r\n\thelpers$1.getMaximumWidth = function(domNode) {\r\n\t\tvar container = helpers$1._getParentNode(domNode);\r\n\t\tif (!container) {\r\n\t\t\treturn domNode.clientWidth;\r\n\t\t}\r\n\r\n\t\tvar clientWidth = container.clientWidth;\r\n\t\tvar paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\r\n\t\tvar paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\r\n\r\n\t\tvar w = clientWidth - paddingLeft - paddingRight;\r\n\t\tvar cw = helpers$1.getConstraintWidth(domNode);\r\n\t\treturn isNaN(cw) ? w : Math.min(w, cw);\r\n\t};\r\n\thelpers$1.getMaximumHeight = function(domNode) {\r\n\t\tvar container = helpers$1._getParentNode(domNode);\r\n\t\tif (!container) {\r\n\t\t\treturn domNode.clientHeight;\r\n\t\t}\r\n\r\n\t\tvar clientHeight = container.clientHeight;\r\n\t\tvar paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\r\n\t\tvar paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\r\n\r\n\t\tvar h = clientHeight - paddingTop - paddingBottom;\r\n\t\tvar ch = helpers$1.getConstraintHeight(domNode);\r\n\t\treturn isNaN(ch) ? h : Math.min(h, ch);\r\n\t};\r\n\thelpers$1.getStyle = function(el, property) {\r\n\t\treturn el.currentStyle ?\r\n\t\t\tel.currentStyle[property] :\r\n\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\r\n\t};\r\n\thelpers$1.retinaScale = function(chart, forceRatio) {\r\n\t\tvar pixelRatio = chart.currentDevicePixelRatio = forceRatio || (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\r\n\t\tif (pixelRatio === 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar height = chart.height;\r\n\t\tvar width = chart.width;\r\n\r\n\t\tcanvas.height = height * pixelRatio;\r\n\t\tcanvas.width = width * pixelRatio;\r\n\t\tchart.ctx.scale(pixelRatio, pixelRatio);\r\n\r\n\t\t// If no style has been set on the canvas, the render size is used as display size,\r\n\t\t// making the chart visually bigger, so let's enforce it to the \"correct\" values.\r\n\t\t// See https://github.com/chartjs/Chart.js/issues/3575\r\n\t\tif (!canvas.style.height && !canvas.style.width) {\r\n\t\t\tcanvas.style.height = height + 'px';\r\n\t\t\tcanvas.style.width = width + 'px';\r\n\t\t}\r\n\t};\r\n\t// -- Canvas methods\r\n\thelpers$1.fontString = function(pixelSize, fontStyle, fontFamily) {\r\n\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\r\n\t};\r\n\thelpers$1.longestText = function(ctx, font, arrayOfThings, cache) {\r\n\t\tcache = cache || {};\r\n\t\tvar data = cache.data = cache.data || {};\r\n\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\r\n\r\n\t\tif (cache.font !== font) {\r\n\t\t\tdata = cache.data = {};\r\n\t\t\tgc = cache.garbageCollect = [];\r\n\t\t\tcache.font = font;\r\n\t\t}\r\n\r\n\t\tctx.font = font;\r\n\t\tvar longest = 0;\r\n\t\tvar ilen = arrayOfThings.length;\r\n\t\tvar i, j, jlen, thing, nestedThing;\r\n\t\tfor (i = 0; i < ilen; i++) {\r\n\t\t\tthing = arrayOfThings[i];\r\n\r\n\t\t\t// Undefined strings and arrays should not be measured\r\n\t\t\tif (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\r\n\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, thing);\r\n\t\t\t} else if (helpers$1.isArray(thing)) {\r\n\t\t\t\t// if it is an array lets measure each element\r\n\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\r\n\t\t\t\tfor (j = 0, jlen = thing.length; j < jlen; j++) {\r\n\t\t\t\t\tnestedThing = thing[j];\r\n\t\t\t\t\t// Undefined strings and arrays should not be measured\r\n\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\r\n\t\t\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar gcLen = gc.length / 2;\r\n\t\tif (gcLen > arrayOfThings.length) {\r\n\t\t\tfor (i = 0; i < gcLen; i++) {\r\n\t\t\t\tdelete data[gc[i]];\r\n\t\t\t}\r\n\t\t\tgc.splice(0, gcLen);\r\n\t\t}\r\n\t\treturn longest;\r\n\t};\r\n\thelpers$1.measureText = function(ctx, data, gc, longest, string) {\r\n\t\tvar textWidth = data[string];\r\n\t\tif (!textWidth) {\r\n\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\r\n\t\t\tgc.push(string);\r\n\t\t}\r\n\t\tif (textWidth > longest) {\r\n\t\t\tlongest = textWidth;\r\n\t\t}\r\n\t\treturn longest;\r\n\t};\r\n\r\n\t/**\r\n\t * @deprecated\r\n\t */\r\n\thelpers$1.numberOfLabelLines = function(arrayOfThings) {\r\n\t\tvar numberOfLines = 1;\r\n\t\thelpers$1.each(arrayOfThings, function(thing) {\r\n\t\t\tif (helpers$1.isArray(thing)) {\r\n\t\t\t\tif (thing.length > numberOfLines) {\r\n\t\t\t\t\tnumberOfLines = thing.length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn numberOfLines;\r\n\t};\r\n\r\n\thelpers$1.color = !chartjsColor ?\r\n\t\tfunction(value) {\r\n\t\t\tconsole.error('Color.js not found!');\r\n\t\t\treturn value;\r\n\t\t} :\r\n\t\tfunction(value) {\r\n\t\t\t/* global CanvasGradient */\r\n\t\t\tif (value instanceof CanvasGradient) {\r\n\t\t\t\tvalue = core_defaults.global.defaultColor;\r\n\t\t\t}\r\n\r\n\t\t\treturn chartjsColor(value);\r\n\t\t};\r\n\r\n\thelpers$1.getHoverColor = function(colorValue) {\r\n\t\t/* global CanvasPattern */\r\n\t\treturn (colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient) ?\r\n\t\t\tcolorValue :\r\n\t\t\thelpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\r\n\t};\r\n};\n\nfunction abstract() {\r\n\tthrow new Error(\r\n\t\t'This method is not implemented: either no adapter can ' +\r\n\t\t'be found or an incomplete integration was provided.'\r\n\t);\r\n}\r\n\r\n/**\r\n * Date adapter (current used by the time scale)\r\n * @namespace Chart._adapters._date\r\n * @memberof Chart._adapters\r\n * @private\r\n */\r\n\r\n/**\r\n * Currently supported unit string values.\r\n * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\r\n * @memberof Chart._adapters._date\r\n * @name Unit\r\n */\r\n\r\n/**\r\n * @class\r\n */\r\nfunction DateAdapter(options) {\r\n\tthis.options = options || {};\r\n}\r\n\r\nhelpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */ {\r\n\t/**\r\n\t * Returns a map of time formats for the supported formatting units defined\r\n\t * in Unit as well as 'datetime' representing a detailed date/time string.\r\n\t * @returns {{string: string}}\r\n\t */\r\n\tformats: abstract,\r\n\r\n\t/**\r\n\t * Parses the given `value` and return the associated timestamp.\r\n\t * @param {any} value - the value to parse (usually comes from the data)\r\n\t * @param {string} [format] - the expected data format\r\n\t * @returns {(number|null)}\r\n\t * @function\r\n\t */\r\n\tparse: abstract,\r\n\r\n\t/**\r\n\t * Returns the formatted date in the specified `format` for a given `timestamp`.\r\n\t * @param {number} timestamp - the timestamp to format\r\n\t * @param {string} format - the date/time token\r\n\t * @return {string}\r\n\t * @function\r\n\t */\r\n\tformat: abstract,\r\n\r\n\t/**\r\n\t * Adds the specified `amount` of `unit` to the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {number} amount - the amount to add\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @return {number}\r\n\t * @function\r\n\t */\r\n\tadd: abstract,\r\n\r\n\t/**\r\n\t * Returns the number of `unit` between the given timestamps.\r\n\t * @param {number} max - the input timestamp (reference)\r\n\t * @param {number} min - the timestamp to substract\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @return {number}\r\n\t * @function\r\n\t */\r\n\tdiff: abstract,\r\n\r\n\t/**\r\n\t * Returns start of `unit` for the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @param {number} [weekday] - the ISO day of the week with 1 being Monday\r\n\t * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\r\n\t * @function\r\n\t */\r\n\tstartOf: abstract,\r\n\r\n\t/**\r\n\t * Returns end of `unit` for the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @function\r\n\t */\r\n\tendOf: abstract,\r\n\r\n\t// DEPRECATIONS\r\n\r\n\t/**\r\n\t * Provided for backward compatibility for scale.getValueForPixel(),\r\n\t * this method should be overridden only by the moment adapter.\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t * @private\r\n\t */\r\n\t_create: function(value) {\r\n\t\treturn value;\r\n\t}\r\n});\r\n\r\nDateAdapter.override = function(members) {\r\n\thelpers$1.extend(DateAdapter.prototype, members);\r\n};\r\n\r\nvar _date = DateAdapter;\n\nvar core_adapters = {\n\t_date: _date\n};\n\n/**\r\n * Namespace to hold static tick generation functions\r\n * @namespace Chart.Ticks\r\n */\r\nvar core_ticks = {\r\n\t/**\r\n\t * Namespace to hold formatters for different types of ticks\r\n\t * @namespace Chart.Ticks.formatters\r\n\t */\r\n\tformatters: {\r\n\t\t/**\r\n\t\t * Formatter for value labels\r\n\t\t * @method Chart.Ticks.formatters.values\r\n\t\t * @param value the value to display\r\n\t\t * @return {string|string[]} the label to display\r\n\t\t */\r\n\t\tvalues: function(value) {\r\n\t\t\treturn helpers$1.isArray(value) ? value : '' + value;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Formatter for linear numeric ticks\r\n\t\t * @method Chart.Ticks.formatters.linear\r\n\t\t * @param tickValue {number} the value to be formatted\r\n\t\t * @param index {number} the position of the tickValue parameter in the ticks array\r\n\t\t * @param ticks {number[]} the list of ticks being converted\r\n\t\t * @return {string} string representation of the tickValue parameter\r\n\t\t */\r\n\t\tlinear: function(tickValue, index, ticks) {\r\n\t\t\t// If we have lots of ticks, don't use the ones\r\n\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\r\n\r\n\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\r\n\t\t\tif (Math.abs(delta) > 1) {\r\n\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\r\n\t\t\t\t\t// not an integer\r\n\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar logDelta = helpers$1.log10(Math.abs(delta));\r\n\t\t\tvar tickString = '';\r\n\r\n\t\t\tif (tickValue !== 0) {\r\n\t\t\t\tvar maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\r\n\t\t\t\tif (maxTick < 1e-4) { // all ticks are small numbers; use scientific notation\r\n\t\t\t\t\tvar logTick = helpers$1.log10(Math.abs(tickValue));\r\n\t\t\t\t\tvar numExponential = Math.floor(logTick) - Math.floor(logDelta);\r\n\t\t\t\t\tnumExponential = Math.max(Math.min(numExponential, 20), 0);\r\n\t\t\t\t\ttickString = tickValue.toExponential(numExponential);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\r\n\t\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\r\n\t\t\t\t\ttickString = tickValue.toFixed(numDecimal);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttickString = '0'; // never show decimal places for 0\r\n\t\t\t}\r\n\r\n\t\t\treturn tickString;\r\n\t\t},\r\n\r\n\t\tlogarithmic: function(tickValue, index, ticks) {\r\n\t\t\tvar remain = tickValue / (Math.pow(10, Math.floor(helpers$1.log10(tickValue))));\r\n\r\n\t\t\tif (tickValue === 0) {\r\n\t\t\t\treturn '0';\r\n\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\r\n\t\t\t\treturn tickValue.toExponential();\r\n\t\t\t}\r\n\t\t\treturn '';\r\n\t\t}\r\n\t}\r\n};\n\nvar isArray = helpers$1.isArray;\r\nvar isNullOrUndef = helpers$1.isNullOrUndef;\r\nvar valueOrDefault$a = helpers$1.valueOrDefault;\r\nvar valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\r\n\r\ncore_defaults._set('scale', {\r\n\tdisplay: true,\r\n\tposition: 'left',\r\n\toffset: false,\r\n\r\n\t// grid line settings\r\n\tgridLines: {\r\n\t\tdisplay: true,\r\n\t\tcolor: 'rgba(0,0,0,0.1)',\r\n\t\tlineWidth: 1,\r\n\t\tdrawBorder: true,\r\n\t\tdrawOnChartArea: true,\r\n\t\tdrawTicks: true,\r\n\t\ttickMarkLength: 10,\r\n\t\tzeroLineWidth: 1,\r\n\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\r\n\t\tzeroLineBorderDash: [],\r\n\t\tzeroLineBorderDashOffset: 0.0,\r\n\t\toffsetGridLines: false,\r\n\t\tborderDash: [],\r\n\t\tborderDashOffset: 0.0\r\n\t},\r\n\r\n\t// scale label\r\n\tscaleLabel: {\r\n\t\t// display property\r\n\t\tdisplay: false,\r\n\r\n\t\t// actual label\r\n\t\tlabelString: '',\r\n\r\n\t\t// top/bottom padding\r\n\t\tpadding: {\r\n\t\t\ttop: 4,\r\n\t\t\tbottom: 4\r\n\t\t}\r\n\t},\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\tbeginAtZero: false,\r\n\t\tminRotation: 0,\r\n\t\tmaxRotation: 50,\r\n\t\tmirror: false,\r\n\t\tpadding: 0,\r\n\t\treverse: false,\r\n\t\tdisplay: true,\r\n\t\tautoSkip: true,\r\n\t\tautoSkipPadding: 0,\r\n\t\tlabelOffset: 0,\r\n\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\r\n\t\tcallback: core_ticks.formatters.values,\r\n\t\tminor: {},\r\n\t\tmajor: {}\r\n\t}\r\n});\r\n\r\n/** Returns a new array containing numItems from arr */\r\nfunction sample(arr, numItems) {\r\n\tvar result = [];\r\n\tvar increment = arr.length / numItems;\r\n\tvar i = 0;\r\n\tvar len = arr.length;\r\n\r\n\tfor (; i < len; i += increment) {\r\n\t\tresult.push(arr[Math.floor(i)]);\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\r\n\tvar length = scale.getTicks().length;\r\n\tvar validIndex = Math.min(index, length - 1);\r\n\tvar lineValue = scale.getPixelForTick(validIndex);\r\n\tvar start = scale._startPixel;\r\n\tvar end = scale._endPixel;\r\n\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\tvar offset;\r\n\r\n\tif (offsetGridLines) {\r\n\t\tif (length === 1) {\r\n\t\t\toffset = Math.max(lineValue - start, end - lineValue);\r\n\t\t} else if (index === 0) {\r\n\t\t\toffset = (scale.getPixelForTick(1) - lineValue) / 2;\r\n\t\t} else {\r\n\t\t\toffset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\r\n\t\t}\r\n\t\tlineValue += validIndex < index ? offset : -offset;\r\n\r\n\t\t// Return undefined if the pixel is out of the range\r\n\t\tif (lineValue < start - epsilon || lineValue > end + epsilon) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\treturn lineValue;\r\n}\r\n\r\nfunction garbageCollect(caches, length) {\r\n\thelpers$1.each(caches, function(cache) {\r\n\t\tvar gc = cache.gc;\r\n\t\tvar gcLen = gc.length / 2;\r\n\t\tvar i;\r\n\t\tif (gcLen > length) {\r\n\t\t\tfor (i = 0; i < gcLen; ++i) {\r\n\t\t\t\tdelete cache.data[gc[i]];\r\n\t\t\t}\r\n\t\t\tgc.splice(0, gcLen);\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Returns {width, height, offset} objects for the first, last, widest, highest tick\r\n * labels where offset indicates the anchor point offset from the top in pixels.\r\n */\r\nfunction computeLabelSizes(ctx, tickFonts, ticks, caches) {\r\n\tvar length = ticks.length;\r\n\tvar widths = [];\r\n\tvar heights = [];\r\n\tvar offsets = [];\r\n\tvar widestLabelSize = 0;\r\n\tvar highestLabelSize = 0;\r\n\tvar i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel, widest, highest;\r\n\r\n\tfor (i = 0; i < length; ++i) {\r\n\t\tlabel = ticks[i].label;\r\n\t\ttickFont = ticks[i].major ? tickFonts.major : tickFonts.minor;\r\n\t\tctx.font = fontString = tickFont.string;\r\n\t\tcache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\r\n\t\tlineHeight = tickFont.lineHeight;\r\n\t\twidth = height = 0;\r\n\t\t// Undefined labels and arrays should not be measured\r\n\t\tif (!isNullOrUndef(label) && !isArray(label)) {\r\n\t\t\twidth = helpers$1.measureText(ctx, cache.data, cache.gc, width, label);\r\n\t\t\theight = lineHeight;\r\n\t\t} else if (isArray(label)) {\r\n\t\t\t// if it is an array let's measure each element\r\n\t\t\tfor (j = 0, jlen = label.length; j < jlen; ++j) {\r\n\t\t\t\tnestedLabel = label[j];\r\n\t\t\t\t// Undefined labels and arrays should not be measured\r\n\t\t\t\tif (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\r\n\t\t\t\t\twidth = helpers$1.measureText(ctx, cache.data, cache.gc, width, nestedLabel);\r\n\t\t\t\t\theight += lineHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\twidths.push(width);\r\n\t\theights.push(height);\r\n\t\toffsets.push(lineHeight / 2);\r\n\t\twidestLabelSize = Math.max(width, widestLabelSize);\r\n\t\thighestLabelSize = Math.max(height, highestLabelSize);\r\n\t}\r\n\tgarbageCollect(caches, length);\r\n\r\n\twidest = widths.indexOf(widestLabelSize);\r\n\thighest = heights.indexOf(highestLabelSize);\r\n\r\n\tfunction valueAt(idx) {\r\n\t\treturn {\r\n\t\t\twidth: widths[idx] || 0,\r\n\t\t\theight: heights[idx] || 0,\r\n\t\t\toffset: offsets[idx] || 0\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tfirst: valueAt(0),\r\n\t\tlast: valueAt(length - 1),\r\n\t\twidest: valueAt(widest),\r\n\t\thighest: valueAt(highest)\r\n\t};\r\n}\r\n\r\nfunction getTickMarkLength(options) {\r\n\treturn options.drawTicks ? options.tickMarkLength : 0;\r\n}\r\n\r\nfunction getScaleLabelHeight(options) {\r\n\tvar font, padding;\r\n\r\n\tif (!options.display) {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfont = helpers$1.options._parseFont(options);\r\n\tpadding = helpers$1.options.toPadding(options.padding);\r\n\r\n\treturn font.lineHeight + padding.height;\r\n}\r\n\r\nfunction parseFontOptions(options, nestedOpts) {\r\n\treturn helpers$1.extend(helpers$1.options._parseFont({\r\n\t\tfontFamily: valueOrDefault$a(nestedOpts.fontFamily, options.fontFamily),\r\n\t\tfontSize: valueOrDefault$a(nestedOpts.fontSize, options.fontSize),\r\n\t\tfontStyle: valueOrDefault$a(nestedOpts.fontStyle, options.fontStyle),\r\n\t\tlineHeight: valueOrDefault$a(nestedOpts.lineHeight, options.lineHeight)\r\n\t}), {\r\n\t\tcolor: helpers$1.options.resolve([nestedOpts.fontColor, options.fontColor, core_defaults.global.defaultFontColor])\r\n\t});\r\n}\r\n\r\nfunction parseTickFontOptions(options) {\r\n\tvar minor = parseFontOptions(options, options.minor);\r\n\tvar major = options.major.enabled ? parseFontOptions(options, options.major) : minor;\r\n\r\n\treturn {minor: minor, major: major};\r\n}\r\n\r\nfunction nonSkipped(ticksToFilter) {\r\n\tvar filtered = [];\r\n\tvar item, index, len;\r\n\tfor (index = 0, len = ticksToFilter.length; index < len; ++index) {\r\n\t\titem = ticksToFilter[index];\r\n\t\tif (typeof item._index !== 'undefined') {\r\n\t\t\tfiltered.push(item);\r\n\t\t}\r\n\t}\r\n\treturn filtered;\r\n}\r\n\r\nfunction getEvenSpacing(arr) {\r\n\tvar len = arr.length;\r\n\tvar i, diff;\r\n\r\n\tif (len < 2) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfor (diff = arr[0], i = 1; i < len; ++i) {\r\n\t\tif (arr[i] - arr[i - 1] !== diff) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\treturn diff;\r\n}\r\n\r\nfunction calculateSpacing(majorIndices, ticks, axisLength, ticksLimit) {\r\n\tvar evenMajorSpacing = getEvenSpacing(majorIndices);\r\n\tvar spacing = (ticks.length - 1) / ticksLimit;\r\n\tvar factors, factor, i, ilen;\r\n\r\n\t// If the major ticks are evenly spaced apart, place the minor ticks\r\n\t// so that they divide the major ticks into even chunks\r\n\tif (!evenMajorSpacing) {\r\n\t\treturn Math.max(spacing, 1);\r\n\t}\r\n\r\n\tfactors = helpers$1.math._factorize(evenMajorSpacing);\r\n\tfor (i = 0, ilen = factors.length - 1; i < ilen; i++) {\r\n\t\tfactor = factors[i];\r\n\t\tif (factor > spacing) {\r\n\t\t\treturn factor;\r\n\t\t}\r\n\t}\r\n\treturn Math.max(spacing, 1);\r\n}\r\n\r\nfunction getMajorIndices(ticks) {\r\n\tvar result = [];\r\n\tvar i, ilen;\r\n\tfor (i = 0, ilen = ticks.length; i < ilen; i++) {\r\n\t\tif (ticks[i].major) {\r\n\t\t\tresult.push(i);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction skipMajors(ticks, majorIndices, spacing) {\r\n\tvar count = 0;\r\n\tvar next = majorIndices[0];\r\n\tvar i, tick;\r\n\r\n\tspacing = Math.ceil(spacing);\r\n\tfor (i = 0; i < ticks.length; i++) {\r\n\t\ttick = ticks[i];\r\n\t\tif (i === next) {\r\n\t\t\ttick._index = i;\r\n\t\t\tcount++;\r\n\t\t\tnext = majorIndices[count * spacing];\r\n\t\t} else {\r\n\t\t\tdelete tick.label;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction skip(ticks, spacing, majorStart, majorEnd) {\r\n\tvar start = valueOrDefault$a(majorStart, 0);\r\n\tvar end = Math.min(valueOrDefault$a(majorEnd, ticks.length), ticks.length);\r\n\tvar count = 0;\r\n\tvar length, i, tick, next;\r\n\r\n\tspacing = Math.ceil(spacing);\r\n\tif (majorEnd) {\r\n\t\tlength = majorEnd - majorStart;\r\n\t\tspacing = length / Math.floor(length / spacing);\r\n\t}\r\n\r\n\tnext = start;\r\n\r\n\twhile (next < 0) {\r\n\t\tcount++;\r\n\t\tnext = Math.round(start + count * spacing);\r\n\t}\r\n\r\n\tfor (i = Math.max(start, 0); i < end; i++) {\r\n\t\ttick = ticks[i];\r\n\t\tif (i === next) {\r\n\t\t\ttick._index = i;\r\n\t\t\tcount++;\r\n\t\t\tnext = Math.round(start + count * spacing);\r\n\t\t} else {\r\n\t\t\tdelete tick.label;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar Scale = core_element.extend({\r\n\r\n\tzeroLineIndex: 0,\r\n\r\n\t/**\r\n\t * Get the padding needed for the scale\r\n\t * @method getPadding\r\n\t * @private\r\n\t * @returns {Padding} the necessary padding\r\n\t */\r\n\tgetPadding: function() {\r\n\t\tvar me = this;\r\n\t\treturn {\r\n\t\t\tleft: me.paddingLeft || 0,\r\n\t\t\ttop: me.paddingTop || 0,\r\n\t\t\tright: me.paddingRight || 0,\r\n\t\t\tbottom: me.paddingBottom || 0\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the scale tick objects ({label, major})\r\n\t * @since 2.7\r\n\t */\r\n\tgetTicks: function() {\r\n\t\treturn this._ticks;\r\n\t},\r\n\r\n\t/**\r\n\t* @private\r\n\t*/\r\n\t_getLabels: function() {\r\n\t\tvar data = this.chart.data;\r\n\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\r\n\t},\r\n\r\n\t// These methods are ordered by lifecyle. Utilities then follow.\r\n\t// Any function defined here is inherited by all scale types.\r\n\t// Any function can be extended by the scale type\r\n\r\n\t/**\r\n\t * Provided for backward compatibility, not available anymore\r\n\t * @function Chart.Scale.mergeTicksOptions\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t */\r\n\tmergeTicksOptions: function() {\r\n\t\t// noop\r\n\t},\r\n\r\n\tbeforeUpdate: function() {\r\n\t\thelpers$1.callback(this.options.beforeUpdate, [this]);\r\n\t},\r\n\r\n\t/**\r\n\t * @param {number} maxWidth - the max width in pixels\r\n\t * @param {number} maxHeight - the max height in pixels\r\n\t * @param {object} margins - the space between the edge of the other scales and edge of the chart\r\n\t * This space comes from two sources:\r\n\t * - padding - space that's required to show the labels at the edges of the scale\r\n\t * - thickness of scales or legends in another orientation\r\n\t */\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar sampleSize = tickOpts.sampleSize;\r\n\t\tvar i, ilen, labels, ticks, samplingEnabled;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = helpers$1.extend({\r\n\t\t\tleft: 0,\r\n\t\t\tright: 0,\r\n\t\t\ttop: 0,\r\n\t\t\tbottom: 0\r\n\t\t}, margins);\r\n\r\n\t\tme._ticks = null;\r\n\t\tme.ticks = null;\r\n\t\tme._labelSizes = null;\r\n\t\tme._maxLabelLines = 0;\r\n\t\tme.longestLabelWidth = 0;\r\n\t\tme.longestTextCache = me.longestTextCache || {};\r\n\t\tme._gridLineItems = null;\r\n\t\tme._labelItems = null;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\r\n\t\t// Data min/max\r\n\t\tme.beforeDataLimits();\r\n\t\tme.determineDataLimits();\r\n\t\tme.afterDataLimits();\r\n\r\n\t\t// Ticks - `this.ticks` is now DEPRECATED!\r\n\t\t// Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\r\n\t\t// and must not be accessed directly from outside this class. `this.ticks` being\r\n\t\t// around for long time and not marked as private, we can't change its structure\r\n\t\t// without unexpected breaking changes. If you need to access the scale ticks,\r\n\t\t// use scale.getTicks() instead.\r\n\r\n\t\tme.beforeBuildTicks();\r\n\r\n\t\t// New implementations should return an array of objects but for BACKWARD COMPAT,\r\n\t\t// we still support no return (`this.ticks` internally set by calling this method).\r\n\t\tticks = me.buildTicks() || [];\r\n\r\n\t\t// Allow modification of ticks in callback.\r\n\t\tticks = me.afterBuildTicks(ticks) || ticks;\r\n\r\n\t\t// Ensure ticks contains ticks in new tick format\r\n\t\tif ((!ticks || !ticks.length) && me.ticks) {\r\n\t\t\tticks = [];\r\n\t\t\tfor (i = 0, ilen = me.ticks.length; i < ilen; ++i) {\r\n\t\t\t\tticks.push({\r\n\t\t\t\t\tvalue: me.ticks[i],\r\n\t\t\t\t\tmajor: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme._ticks = ticks;\r\n\r\n\t\t// Compute tick rotation and fit using a sampled subset of labels\r\n\t\t// We generally don't need to compute the size of every single label for determining scale size\r\n\t\tsamplingEnabled = sampleSize < ticks.length;\r\n\t\tlabels = me._convertTicksToLabels(samplingEnabled ? sample(ticks, sampleSize) : ticks);\r\n\r\n\t\t// _configure is called twice, once here, once from core.controller.updateLayout.\r\n\t\t// Here we haven't been positioned yet, but dimensions are correct.\r\n\t\t// Variables set in _configure are needed for calculateTickRotation, and\r\n\t\t// it's ok that coordinates are not correct there, only dimensions matter.\r\n\t\tme._configure();\r\n\r\n\t\t// Tick Rotation\r\n\t\tme.beforeCalculateTickRotation();\r\n\t\tme.calculateTickRotation();\r\n\t\tme.afterCalculateTickRotation();\r\n\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\r\n\t\t// Auto-skip\r\n\t\tme._ticksToDraw = tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto') ? me._autoSkip(ticks) : ticks;\r\n\r\n\t\tif (samplingEnabled) {\r\n\t\t\t// Generate labels using all non-skipped ticks\r\n\t\t\tlabels = me._convertTicksToLabels(me._ticksToDraw);\r\n\t\t}\r\n\r\n\t\tme.ticks = labels; // BACKWARD COMPATIBILITY\r\n\r\n\t\t// IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\r\n\r\n\t\tme.afterUpdate();\r\n\r\n\t\t// TODO(v3): remove minSize as a public property and return value from all layout boxes. It is unused\r\n\t\t// make maxWidth and maxHeight private\r\n\t\treturn me.minSize;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar reversePixels = me.options.ticks.reverse;\r\n\t\tvar startPixel, endPixel;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\tstartPixel = me.left;\r\n\t\t\tendPixel = me.right;\r\n\t\t} else {\r\n\t\t\tstartPixel = me.top;\r\n\t\t\tendPixel = me.bottom;\r\n\t\t\t// by default vertical scales are from bottom to top, so pixels are reversed\r\n\t\t\treversePixels = !reversePixels;\r\n\t\t}\r\n\t\tme._startPixel = startPixel;\r\n\t\tme._endPixel = endPixel;\r\n\t\tme._reversePixels = reversePixels;\r\n\t\tme._length = endPixel - startPixel;\r\n\t},\r\n\r\n\tafterUpdate: function() {\r\n\t\thelpers$1.callback(this.options.afterUpdate, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: function() {\r\n\t\thelpers$1.callback(this.options.beforeSetDimensions, [this]);\r\n\t},\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\t},\r\n\tafterSetDimensions: function() {\r\n\t\thelpers$1.callback(this.options.afterSetDimensions, [this]);\r\n\t},\r\n\r\n\t// Data limits\r\n\tbeforeDataLimits: function() {\r\n\t\thelpers$1.callback(this.options.beforeDataLimits, [this]);\r\n\t},\r\n\tdetermineDataLimits: helpers$1.noop,\r\n\tafterDataLimits: function() {\r\n\t\thelpers$1.callback(this.options.afterDataLimits, [this]);\r\n\t},\r\n\r\n\t//\r\n\tbeforeBuildTicks: function() {\r\n\t\thelpers$1.callback(this.options.beforeBuildTicks, [this]);\r\n\t},\r\n\tbuildTicks: helpers$1.noop,\r\n\tafterBuildTicks: function(ticks) {\r\n\t\tvar me = this;\r\n\t\t// ticks is empty for old axis implementations here\r\n\t\tif (isArray(ticks) && ticks.length) {\r\n\t\t\treturn helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\r\n\t\t}\r\n\t\t// Support old implementations (that modified `this.ticks` directly in buildTicks)\r\n\t\tme.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\r\n\t\treturn ticks;\r\n\t},\r\n\r\n\tbeforeTickToLabelConversion: function() {\r\n\t\thelpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\r\n\t},\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\t\t// Convert ticks to strings\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tme.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\r\n\t},\r\n\tafterTickToLabelConversion: function() {\r\n\t\thelpers$1.callback(this.options.afterTickToLabelConversion, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeCalculateTickRotation: function() {\r\n\t\thelpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\r\n\t},\r\n\tcalculateTickRotation: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar numTicks = me.getTicks().length;\r\n\t\tvar minRotation = tickOpts.minRotation || 0;\r\n\t\tvar maxRotation = tickOpts.maxRotation;\r\n\t\tvar labelRotation = minRotation;\r\n\t\tvar labelSizes, maxLabelWidth, maxLabelHeight, maxWidth, tickWidth, maxHeight, maxLabelDiagonal;\r\n\r\n\t\tif (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\r\n\t\t\tme.labelRotation = minRotation;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlabelSizes = me._getLabelSizes();\r\n\t\tmaxLabelWidth = labelSizes.widest.width;\r\n\t\tmaxLabelHeight = labelSizes.highest.height - labelSizes.highest.offset;\r\n\r\n\t\t// Estimate the width of each grid based on the canvas width, the maximum\r\n\t\t// label width and the number of tick intervals\r\n\t\tmaxWidth = Math.min(me.maxWidth, me.chart.width - maxLabelWidth);\r\n\t\ttickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\r\n\r\n\t\t// Allow 3 pixels x2 padding either side for label readability\r\n\t\tif (maxLabelWidth + 6 > tickWidth) {\r\n\t\t\ttickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\r\n\t\t\tmaxHeight = me.maxHeight - getTickMarkLength(options.gridLines)\r\n\t\t\t\t- tickOpts.padding - getScaleLabelHeight(options.scaleLabel);\r\n\t\t\tmaxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\r\n\t\t\tlabelRotation = helpers$1.toDegrees(Math.min(\r\n\t\t\t\tMath.asin(Math.min((labelSizes.highest.height + 6) / tickWidth, 1)),\r\n\t\t\t\tMath.asin(Math.min(maxHeight / maxLabelDiagonal, 1)) - Math.asin(maxLabelHeight / maxLabelDiagonal)\r\n\t\t\t));\r\n\t\t\tlabelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\r\n\t\t}\r\n\r\n\t\tme.labelRotation = labelRotation;\r\n\t},\r\n\tafterCalculateTickRotation: function() {\r\n\t\thelpers$1.callback(this.options.afterCalculateTickRotation, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeFit: function() {\r\n\t\thelpers$1.callback(this.options.beforeFit, [this]);\r\n\t},\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\t// Reset\r\n\t\tvar minSize = me.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\r\n\t\tvar chart = me.chart;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\t\tvar scaleLabelOpts = opts.scaleLabel;\r\n\t\tvar gridLineOpts = opts.gridLines;\r\n\t\tvar display = me._isVisible();\r\n\t\tvar isBottom = opts.position === 'bottom';\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\r\n\t\t// Width\r\n\t\tif (isHorizontal) {\r\n\t\t\tminSize.width = me.maxWidth;\r\n\t\t} else if (display) {\r\n\t\t\tminSize.width = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\r\n\t\t}\r\n\r\n\t\t// height\r\n\t\tif (!isHorizontal) {\r\n\t\t\tminSize.height = me.maxHeight; // fill all the height\r\n\t\t} else if (display) {\r\n\t\t\tminSize.height = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\r\n\t\t}\r\n\r\n\t\t// Don't bother fitting the ticks if we are not showing the labels\r\n\t\tif (tickOpts.display && display) {\r\n\t\t\tvar tickFonts = parseTickFontOptions(tickOpts);\r\n\t\t\tvar labelSizes = me._getLabelSizes();\r\n\t\t\tvar firstLabelSize = labelSizes.first;\r\n\t\t\tvar lastLabelSize = labelSizes.last;\r\n\t\t\tvar widestLabelSize = labelSizes.widest;\r\n\t\t\tvar highestLabelSize = labelSizes.highest;\r\n\t\t\tvar lineSpace = tickFonts.minor.lineHeight * 0.4;\r\n\t\t\tvar tickPadding = tickOpts.padding;\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\t// A horizontal axis is more constrained by the height.\r\n\t\t\t\tvar isRotated = me.labelRotation !== 0;\r\n\t\t\t\tvar angleRadians = helpers$1.toRadians(me.labelRotation);\r\n\t\t\t\tvar cosRotation = Math.cos(angleRadians);\r\n\t\t\t\tvar sinRotation = Math.sin(angleRadians);\r\n\r\n\t\t\t\tvar labelHeight = sinRotation * widestLabelSize.width\r\n\t\t\t\t\t+ cosRotation * (highestLabelSize.height - (isRotated ? highestLabelSize.offset : 0))\r\n\t\t\t\t\t+ (isRotated ? 0 : lineSpace); // padding\r\n\r\n\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\r\n\r\n\t\t\t\tvar offsetLeft = me.getPixelForTick(0) - me.left;\r\n\t\t\t\tvar offsetRight = me.right - me.getPixelForTick(me.getTicks().length - 1);\r\n\t\t\t\tvar paddingLeft, paddingRight;\r\n\r\n\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\r\n\t\t\t\t// which means that the right padding is dominated by the font height\r\n\t\t\t\tif (isRotated) {\r\n\t\t\t\t\tpaddingLeft = isBottom ?\r\n\t\t\t\t\t\tcosRotation * firstLabelSize.width + sinRotation * firstLabelSize.offset :\r\n\t\t\t\t\t\tsinRotation * (firstLabelSize.height - firstLabelSize.offset);\r\n\t\t\t\t\tpaddingRight = isBottom ?\r\n\t\t\t\t\t\tsinRotation * (lastLabelSize.height - lastLabelSize.offset) :\r\n\t\t\t\t\t\tcosRotation * lastLabelSize.width + sinRotation * lastLabelSize.offset;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpaddingLeft = firstLabelSize.width / 2;\r\n\t\t\t\t\tpaddingRight = lastLabelSize.width / 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Adjust padding taking into account changes in offsets\r\n\t\t\t\t// and add 3 px to move away from canvas edges\r\n\t\t\t\tme.paddingLeft = Math.max((paddingLeft - offsetLeft) * me.width / (me.width - offsetLeft), 0) + 3;\r\n\t\t\t\tme.paddingRight = Math.max((paddingRight - offsetRight) * me.width / (me.width - offsetRight), 0) + 3;\r\n\t\t\t} else {\r\n\t\t\t\t// A vertical axis is more constrained by the width. Labels are the\r\n\t\t\t\t// dominant factor here, so get that length first and account for padding\r\n\t\t\t\tvar labelWidth = tickOpts.mirror ? 0 :\r\n\t\t\t\t\t// use lineSpace for consistency with horizontal axis\r\n\t\t\t\t\t// tickPadding is not implemented for horizontal\r\n\t\t\t\t\twidestLabelSize.width + tickPadding + lineSpace;\r\n\r\n\t\t\t\tminSize.width = Math.min(me.maxWidth, minSize.width + labelWidth);\r\n\r\n\t\t\t\tme.paddingTop = firstLabelSize.height / 2;\r\n\t\t\t\tme.paddingBottom = lastLabelSize.height / 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.handleMargins();\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tme.width = me._length = chart.width - me.margins.left - me.margins.right;\r\n\t\t\tme.height = minSize.height;\r\n\t\t} else {\r\n\t\t\tme.width = minSize.width;\r\n\t\t\tme.height = me._length = chart.height - me.margins.top - me.margins.bottom;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Handle margins and padding interactions\r\n\t * @private\r\n\t */\r\n\thandleMargins: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.margins) {\r\n\t\t\tme.margins.left = Math.max(me.paddingLeft, me.margins.left);\r\n\t\t\tme.margins.top = Math.max(me.paddingTop, me.margins.top);\r\n\t\t\tme.margins.right = Math.max(me.paddingRight, me.margins.right);\r\n\t\t\tme.margins.bottom = Math.max(me.paddingBottom, me.margins.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tafterFit: function() {\r\n\t\thelpers$1.callback(this.options.afterFit, [this]);\r\n\t},\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\tvar pos = this.options.position;\r\n\t\treturn pos === 'top' || pos === 'bottom';\r\n\t},\r\n\tisFullWidth: function() {\r\n\t\treturn this.options.fullWidth;\r\n\t},\r\n\r\n\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\r\n\tgetRightValue: function(rawValue) {\r\n\t\t// Null and undefined values first\r\n\t\tif (isNullOrUndef(rawValue)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\t\t// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\r\n\t\tif ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\t// If it is in fact an object, dive in one more level\r\n\t\tif (rawValue) {\r\n\t\t\tif (this.isHorizontal()) {\r\n\t\t\t\tif (rawValue.x !== undefined) {\r\n\t\t\t\t\treturn this.getRightValue(rawValue.x);\r\n\t\t\t\t}\r\n\t\t\t} else if (rawValue.y !== undefined) {\r\n\t\t\t\treturn this.getRightValue(rawValue.y);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Value is good, return it\r\n\t\treturn rawValue;\r\n\t},\r\n\r\n\t_convertTicksToLabels: function(ticks) {\r\n\t\tvar me = this;\r\n\t\tvar labels, i, ilen;\r\n\r\n\t\tme.ticks = ticks.map(function(tick) {\r\n\t\t\treturn tick.value;\r\n\t\t});\r\n\r\n\t\tme.beforeTickToLabelConversion();\r\n\r\n\t\t// New implementations should return the formatted tick labels but for BACKWARD\r\n\t\t// COMPAT, we still support no return (`this.ticks` internally changed by calling\r\n\t\t// this method and supposed to contain only string values).\r\n\t\tlabels = me.convertTicksToLabels(ticks) || me.ticks;\r\n\r\n\t\tme.afterTickToLabelConversion();\r\n\r\n\t\t// BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\tticks[i].label = labels[i];\r\n\t\t}\r\n\r\n\t\treturn labels;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLabelSizes: function() {\r\n\t\tvar me = this;\r\n\t\tvar labelSizes = me._labelSizes;\r\n\r\n\t\tif (!labelSizes) {\r\n\t\t\tme._labelSizes = labelSizes = computeLabelSizes(me.ctx, parseTickFontOptions(me.options.ticks), me.getTicks(), me.longestTextCache);\r\n\t\t\tme.longestLabelWidth = labelSizes.widest.width;\r\n\t\t}\r\n\r\n\t\treturn labelSizes;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_parseValue: function(value) {\r\n\t\tvar start, end, min, max;\r\n\r\n\t\tif (isArray(value)) {\r\n\t\t\tstart = +this.getRightValue(value[0]);\r\n\t\t\tend = +this.getRightValue(value[1]);\r\n\t\t\tmin = Math.min(start, end);\r\n\t\t\tmax = Math.max(start, end);\r\n\t\t} else {\r\n\t\t\tvalue = +this.getRightValue(value);\r\n\t\t\tstart = undefined;\r\n\t\t\tend = value;\r\n\t\t\tmin = value;\r\n\t\t\tmax = value;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tmin: min,\r\n\t\t\tmax: max,\r\n\t\t\tstart: start,\r\n\t\t\tend: end\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t* @private\r\n\t*/\r\n\t_getScaleLabel: function(rawValue) {\r\n\t\tvar v = this._parseValue(rawValue);\r\n\t\tif (v.start !== undefined) {\r\n\t\t\treturn '[' + v.start + ', ' + v.end + ']';\r\n\t\t}\r\n\r\n\t\treturn +this.getRightValue(rawValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Used to get the value to display in the tooltip for the data at the given index\r\n\t * @param index\r\n\t * @param datasetIndex\r\n\t */\r\n\tgetLabelForIndex: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t * @param value\r\n\t * @param index\r\n\t * @param datasetIndex\r\n\t */\r\n\tgetPixelForValue: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t * @param pixel\r\n\t */\r\n\tgetValueForPixel: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Returns the location of the tick at the given index\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar offset = me.options.offset;\r\n\t\tvar numTicks = me._ticks.length;\r\n\t\tvar tickWidth = 1 / Math.max(numTicks - (offset ? 0 : 1), 1);\r\n\r\n\t\treturn index < 0 || index > numTicks - 1\r\n\t\t\t? null\r\n\t\t\t: me.getPixelForDecimal(index * tickWidth + (offset ? tickWidth / 2 : 0));\r\n\t},\r\n\r\n\t/**\r\n\t * Utility for getting the pixel location of a percentage of scale\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetPixelForDecimal: function(decimal) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (me._reversePixels) {\r\n\t\t\tdecimal = 1 - decimal;\r\n\t\t}\r\n\r\n\t\treturn me._startPixel + decimal * me._length;\r\n\t},\r\n\r\n\tgetDecimalForPixel: function(pixel) {\r\n\t\tvar decimal = (pixel - this._startPixel) / this._length;\r\n\t\treturn this._reversePixels ? 1 - decimal : decimal;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the pixel for the minimum chart value\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetBasePixel: function() {\r\n\t\treturn this.getPixelForValue(this.getBaseValue());\r\n\t},\r\n\r\n\tgetBaseValue: function() {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\r\n\t\treturn me.beginAtZero ? 0 :\r\n\t\t\tmin < 0 && max < 0 ? max :\r\n\t\t\tmin > 0 && max > 0 ? min :\r\n\t\t\t0;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a subset of ticks to be plotted to avoid overlapping labels.\r\n\t * @private\r\n\t */\r\n\t_autoSkip: function(ticks) {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar axisLength = me._length;\r\n\t\tvar ticksLimit = tickOpts.maxTicksLimit || axisLength / me._tickSize() + 1;\r\n\t\tvar majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\r\n\t\tvar numMajorIndices = majorIndices.length;\r\n\t\tvar first = majorIndices[0];\r\n\t\tvar last = majorIndices[numMajorIndices - 1];\r\n\t\tvar i, ilen, spacing, avgMajorSpacing;\r\n\r\n\t\t// If there are too many major ticks to display them all\r\n\t\tif (numMajorIndices > ticksLimit) {\r\n\t\t\tskipMajors(ticks, majorIndices, numMajorIndices / ticksLimit);\r\n\t\t\treturn nonSkipped(ticks);\r\n\t\t}\r\n\r\n\t\tspacing = calculateSpacing(majorIndices, ticks, axisLength, ticksLimit);\r\n\r\n\t\tif (numMajorIndices > 0) {\r\n\t\t\tfor (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\r\n\t\t\t\tskip(ticks, spacing, majorIndices[i], majorIndices[i + 1]);\r\n\t\t\t}\r\n\t\t\tavgMajorSpacing = numMajorIndices > 1 ? (last - first) / (numMajorIndices - 1) : null;\r\n\t\t\tskip(ticks, spacing, helpers$1.isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\r\n\t\t\tskip(ticks, spacing, last, helpers$1.isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\r\n\t\t\treturn nonSkipped(ticks);\r\n\t\t}\r\n\t\tskip(ticks, spacing);\r\n\t\treturn nonSkipped(ticks);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_tickSize: function() {\r\n\t\tvar me = this;\r\n\t\tvar optionTicks = me.options.ticks;\r\n\r\n\t\t// Calculate space needed by label in axis direction.\r\n\t\tvar rot = helpers$1.toRadians(me.labelRotation);\r\n\t\tvar cos = Math.abs(Math.cos(rot));\r\n\t\tvar sin = Math.abs(Math.sin(rot));\r\n\r\n\t\tvar labelSizes = me._getLabelSizes();\r\n\t\tvar padding = optionTicks.autoSkipPadding || 0;\r\n\t\tvar w = labelSizes ? labelSizes.widest.width + padding : 0;\r\n\t\tvar h = labelSizes ? labelSizes.highest.height + padding : 0;\r\n\r\n\t\t// Calculate space needed for 1 tick in axis direction.\r\n\t\treturn me.isHorizontal()\r\n\t\t\t? h * cos > w * sin ? w / cos : h / sin\r\n\t\t\t: h * sin < w * cos ? h / cos : w / sin;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_isVisible: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar display = me.options.display;\r\n\t\tvar i, ilen, meta;\r\n\r\n\t\tif (display !== 'auto') {\r\n\t\t\treturn !!display;\r\n\t\t}\r\n\r\n\t\t// When 'auto', the scale is visible if at least one associated dataset is visible.\r\n\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tif (meta.xAxisID === me.id || meta.yAxisID === me.id) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeGridLineItems: function(chartArea) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar options = me.options;\r\n\t\tvar gridLines = options.gridLines;\r\n\t\tvar position = options.position;\r\n\t\tvar offsetGridLines = gridLines.offsetGridLines;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar ticks = me._ticksToDraw;\r\n\t\tvar ticksLength = ticks.length + (offsetGridLines ? 1 : 0);\r\n\r\n\t\tvar tl = getTickMarkLength(gridLines);\r\n\t\tvar items = [];\r\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\r\n\t\tvar axisHalfWidth = axisWidth / 2;\r\n\t\tvar alignPixel = helpers$1._alignPixel;\r\n\t\tvar alignBorderValue = function(pixel) {\r\n\t\t\treturn alignPixel(chart, pixel, axisWidth);\r\n\t\t};\r\n\t\tvar borderValue, i, tick, lineValue, alignedLineValue;\r\n\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, lineWidth, lineColor, borderDash, borderDashOffset;\r\n\r\n\t\tif (position === 'top') {\r\n\t\t\tborderValue = alignBorderValue(me.bottom);\r\n\t\t\tty1 = me.bottom - tl;\r\n\t\t\tty2 = borderValue - axisHalfWidth;\r\n\t\t\ty1 = alignBorderValue(chartArea.top) + axisHalfWidth;\r\n\t\t\ty2 = chartArea.bottom;\r\n\t\t} else if (position === 'bottom') {\r\n\t\t\tborderValue = alignBorderValue(me.top);\r\n\t\t\ty1 = chartArea.top;\r\n\t\t\ty2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\r\n\t\t\tty1 = borderValue + axisHalfWidth;\r\n\t\t\tty2 = me.top + tl;\r\n\t\t} else if (position === 'left') {\r\n\t\t\tborderValue = alignBorderValue(me.right);\r\n\t\t\ttx1 = me.right - tl;\r\n\t\t\ttx2 = borderValue - axisHalfWidth;\r\n\t\t\tx1 = alignBorderValue(chartArea.left) + axisHalfWidth;\r\n\t\t\tx2 = chartArea.right;\r\n\t\t} else {\r\n\t\t\tborderValue = alignBorderValue(me.left);\r\n\t\t\tx1 = chartArea.left;\r\n\t\t\tx2 = alignBorderValue(chartArea.right) - axisHalfWidth;\r\n\t\t\ttx1 = borderValue + axisHalfWidth;\r\n\t\t\ttx2 = me.left + tl;\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < ticksLength; ++i) {\r\n\t\t\ttick = ticks[i] || {};\r\n\r\n\t\t\t// autoskipper skipped this tick (#4635)\r\n\t\t\tif (isNullOrUndef(tick.label) && i < ticks.length) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (i === me.zeroLineIndex && options.offset === offsetGridLines) {\r\n\t\t\t\t// Draw the first index specially\r\n\t\t\t\tlineWidth = gridLines.zeroLineWidth;\r\n\t\t\t\tlineColor = gridLines.zeroLineColor;\r\n\t\t\t\tborderDash = gridLines.zeroLineBorderDash || [];\r\n\t\t\t\tborderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\r\n\t\t\t} else {\r\n\t\t\t\tlineWidth = valueAtIndexOrDefault(gridLines.lineWidth, i, 1);\r\n\t\t\t\tlineColor = valueAtIndexOrDefault(gridLines.color, i, 'rgba(0,0,0,0.1)');\r\n\t\t\t\tborderDash = gridLines.borderDash || [];\r\n\t\t\t\tborderDashOffset = gridLines.borderDashOffset || 0.0;\r\n\t\t\t}\r\n\r\n\t\t\tlineValue = getPixelForGridLine(me, tick._index || i, offsetGridLines);\r\n\r\n\t\t\t// Skip if the pixel is out of the range\r\n\t\t\tif (lineValue === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\talignedLineValue = alignPixel(chart, lineValue, lineWidth);\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\ttx1 = tx2 = x1 = x2 = alignedLineValue;\r\n\t\t\t} else {\r\n\t\t\t\tty1 = ty2 = y1 = y2 = alignedLineValue;\r\n\t\t\t}\r\n\r\n\t\t\titems.push({\r\n\t\t\t\ttx1: tx1,\r\n\t\t\t\tty1: ty1,\r\n\t\t\t\ttx2: tx2,\r\n\t\t\t\tty2: ty2,\r\n\t\t\t\tx1: x1,\r\n\t\t\t\ty1: y1,\r\n\t\t\t\tx2: x2,\r\n\t\t\t\ty2: y2,\r\n\t\t\t\twidth: lineWidth,\r\n\t\t\t\tcolor: lineColor,\r\n\t\t\t\tborderDash: borderDash,\r\n\t\t\t\tborderDashOffset: borderDashOffset,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\titems.ticksLength = ticksLength;\r\n\t\titems.borderValue = borderValue;\r\n\r\n\t\treturn items;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeLabelItems: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar optionTicks = options.ticks;\r\n\t\tvar position = options.position;\r\n\t\tvar isMirrored = optionTicks.mirror;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar ticks = me._ticksToDraw;\r\n\t\tvar fonts = parseTickFontOptions(optionTicks);\r\n\t\tvar tickPadding = optionTicks.padding;\r\n\t\tvar tl = getTickMarkLength(options.gridLines);\r\n\t\tvar rotation = -helpers$1.toRadians(me.labelRotation);\r\n\t\tvar items = [];\r\n\t\tvar i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\r\n\r\n\t\tif (position === 'top') {\r\n\t\t\ty = me.bottom - tl - tickPadding;\r\n\t\t\ttextAlign = !rotation ? 'center' : 'left';\r\n\t\t} else if (position === 'bottom') {\r\n\t\t\ty = me.top + tl + tickPadding;\r\n\t\t\ttextAlign = !rotation ? 'center' : 'right';\r\n\t\t} else if (position === 'left') {\r\n\t\t\tx = me.right - (isMirrored ? 0 : tl) - tickPadding;\r\n\t\t\ttextAlign = isMirrored ? 'left' : 'right';\r\n\t\t} else {\r\n\t\t\tx = me.left + (isMirrored ? 0 : tl) + tickPadding;\r\n\t\t\ttextAlign = isMirrored ? 'right' : 'left';\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\ttick = ticks[i];\r\n\t\t\tlabel = tick.label;\r\n\r\n\t\t\t// autoskipper skipped this tick (#4635)\r\n\t\t\tif (isNullOrUndef(label)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpixel = me.getPixelForTick(tick._index || i) + optionTicks.labelOffset;\r\n\t\t\tfont = tick.major ? fonts.major : fonts.minor;\r\n\t\t\tlineHeight = font.lineHeight;\r\n\t\t\tlineCount = isArray(label) ? label.length : 1;\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tx = pixel;\r\n\t\t\t\ttextOffset = position === 'top'\r\n\t\t\t\t\t? ((!rotation ? 0.5 : 1) - lineCount) * lineHeight\r\n\t\t\t\t\t: (!rotation ? 0.5 : 0) * lineHeight;\r\n\t\t\t} else {\r\n\t\t\t\ty = pixel;\r\n\t\t\t\ttextOffset = (1 - lineCount) * lineHeight / 2;\r\n\t\t\t}\r\n\r\n\t\t\titems.push({\r\n\t\t\t\tx: x,\r\n\t\t\t\ty: y,\r\n\t\t\t\trotation: rotation,\r\n\t\t\t\tlabel: label,\r\n\t\t\t\tfont: font,\r\n\t\t\t\ttextOffset: textOffset,\r\n\t\t\t\ttextAlign: textAlign\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn items;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawGrid: function(chartArea) {\r\n\t\tvar me = this;\r\n\t\tvar gridLines = me.options.gridLines;\r\n\r\n\t\tif (!gridLines.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar chart = me.chart;\r\n\t\tvar alignPixel = helpers$1._alignPixel;\r\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\r\n\t\tvar items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\r\n\t\tvar width, color, i, ilen, item;\r\n\r\n\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\t\titem = items[i];\r\n\t\t\twidth = item.width;\r\n\t\t\tcolor = item.color;\r\n\r\n\t\t\tif (width && color) {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.lineWidth = width;\r\n\t\t\t\tctx.strokeStyle = color;\r\n\t\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\t\tctx.setLineDash(item.borderDash);\r\n\t\t\t\t\tctx.lineDashOffset = item.borderDashOffset;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctx.beginPath();\r\n\r\n\t\t\t\tif (gridLines.drawTicks) {\r\n\t\t\t\t\tctx.moveTo(item.tx1, item.ty1);\r\n\t\t\t\t\tctx.lineTo(item.tx2, item.ty2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gridLines.drawOnChartArea) {\r\n\t\t\t\t\tctx.moveTo(item.x1, item.y1);\r\n\t\t\t\t\tctx.lineTo(item.x2, item.y2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctx.stroke();\r\n\t\t\t\tctx.restore();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (axisWidth) {\r\n\t\t\t// Draw the line at the edge of the axis\r\n\t\t\tvar firstLineWidth = axisWidth;\r\n\t\t\tvar lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, items.ticksLength - 1, 1);\r\n\t\t\tvar borderValue = items.borderValue;\r\n\t\t\tvar x1, x2, y1, y2;\r\n\r\n\t\t\tif (me.isHorizontal()) {\r\n\t\t\t\tx1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\r\n\t\t\t\tx2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\r\n\t\t\t\ty1 = y2 = borderValue;\r\n\t\t\t} else {\r\n\t\t\t\ty1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\r\n\t\t\t\ty2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\r\n\t\t\t\tx1 = x2 = borderValue;\r\n\t\t\t}\r\n\r\n\t\t\tctx.lineWidth = axisWidth;\r\n\t\t\tctx.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.moveTo(x1, y1);\r\n\t\t\tctx.lineTo(x2, y2);\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar optionTicks = me.options.ticks;\r\n\r\n\t\tif (!optionTicks.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar items = me._labelItems || (me._labelItems = me._computeLabelItems());\r\n\t\tvar i, j, ilen, jlen, item, tickFont, label, y;\r\n\r\n\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\t\titem = items[i];\r\n\t\t\ttickFont = item.font;\r\n\r\n\t\t\t// Make sure we draw text in the correct color and font\r\n\t\t\tctx.save();\r\n\t\t\tctx.translate(item.x, item.y);\r\n\t\t\tctx.rotate(item.rotation);\r\n\t\t\tctx.font = tickFont.string;\r\n\t\t\tctx.fillStyle = tickFont.color;\r\n\t\t\tctx.textBaseline = 'middle';\r\n\t\t\tctx.textAlign = item.textAlign;\r\n\r\n\t\t\tlabel = item.label;\r\n\t\t\ty = item.textOffset;\r\n\t\t\tif (isArray(label)) {\r\n\t\t\t\tfor (j = 0, jlen = label.length; j < jlen; ++j) {\r\n\t\t\t\t\t// We just make sure the multiline element is a string here..\r\n\t\t\t\t\tctx.fillText('' + label[j], 0, y);\r\n\t\t\t\t\ty += tickFont.lineHeight;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tctx.fillText(label, 0, y);\r\n\t\t\t}\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawTitle: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar options = me.options;\r\n\t\tvar scaleLabel = options.scaleLabel;\r\n\r\n\t\tif (!scaleLabel.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar scaleLabelFontColor = valueOrDefault$a(scaleLabel.fontColor, core_defaults.global.defaultFontColor);\r\n\t\tvar scaleLabelFont = helpers$1.options._parseFont(scaleLabel);\r\n\t\tvar scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\r\n\t\tvar halfLineHeight = scaleLabelFont.lineHeight / 2;\r\n\t\tvar position = options.position;\r\n\t\tvar rotation = 0;\r\n\t\tvar scaleLabelX, scaleLabelY;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\tscaleLabelX = me.left + me.width / 2; // midpoint of the width\r\n\t\t\tscaleLabelY = position === 'bottom'\r\n\t\t\t\t? me.bottom - halfLineHeight - scaleLabelPadding.bottom\r\n\t\t\t\t: me.top + halfLineHeight + scaleLabelPadding.top;\r\n\t\t} else {\r\n\t\t\tvar isLeft = position === 'left';\r\n\t\t\tscaleLabelX = isLeft\r\n\t\t\t\t? me.left + halfLineHeight + scaleLabelPadding.top\r\n\t\t\t\t: me.right - halfLineHeight - scaleLabelPadding.top;\r\n\t\t\tscaleLabelY = me.top + me.height / 2;\r\n\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.translate(scaleLabelX, scaleLabelY);\r\n\t\tctx.rotate(rotation);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.fillStyle = scaleLabelFontColor; // render in correct colour\r\n\t\tctx.font = scaleLabelFont.string;\r\n\t\tctx.fillText(scaleLabel.labelString, 0, 0);\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (!me._isVisible()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme._drawGrid(chartArea);\r\n\t\tme._drawTitle();\r\n\t\tme._drawLabels();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_layers: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tz = opts.ticks && opts.ticks.z || 0;\r\n\t\tvar gz = opts.gridLines && opts.gridLines.z || 0;\r\n\r\n\t\tif (!me._isVisible() || tz === gz || me.draw !== me._draw) {\r\n\t\t\t// backward compatibility: draw has been overridden by custom scale\r\n\t\t\treturn [{\r\n\t\t\t\tz: tz,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\tme.draw.apply(me, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t}\r\n\r\n\t\treturn [{\r\n\t\t\tz: gz,\r\n\t\t\tdraw: function() {\r\n\t\t\t\tme._drawGrid.apply(me, arguments);\r\n\t\t\t\tme._drawTitle.apply(me, arguments);\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tz: tz,\r\n\t\t\tdraw: function() {\r\n\t\t\t\tme._drawLabels.apply(me, arguments);\r\n\t\t\t}\r\n\t\t}];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getMatchingVisibleMetas: function(type) {\r\n\t\tvar me = this;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\treturn me.chart._getSortedVisibleDatasetMetas()\r\n\t\t\t.filter(function(meta) {\r\n\t\t\t\treturn (!type || meta.type === type)\r\n\t\t\t\t\t&& (isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id);\r\n\t\t\t});\r\n\t}\r\n});\r\n\r\nScale.prototype._draw = Scale.prototype.draw;\r\n\r\nvar core_scale = Scale;\n\nvar isNullOrUndef$1 = helpers$1.isNullOrUndef;\r\n\r\nvar defaultConfig = {\r\n\tposition: 'bottom'\r\n};\r\n\r\nvar scale_category = core_scale.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar labels = me._getLabels();\r\n\t\tvar ticksOpts = me.options.ticks;\r\n\t\tvar min = ticksOpts.min;\r\n\t\tvar max = ticksOpts.max;\r\n\t\tvar minIndex = 0;\r\n\t\tvar maxIndex = labels.length - 1;\r\n\t\tvar findIndex;\r\n\r\n\t\tif (min !== undefined) {\r\n\t\t\t// user specified min value\r\n\t\t\tfindIndex = labels.indexOf(min);\r\n\t\t\tif (findIndex >= 0) {\r\n\t\t\t\tminIndex = findIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (max !== undefined) {\r\n\t\t\t// user specified max value\r\n\t\t\tfindIndex = labels.indexOf(max);\r\n\t\t\tif (findIndex >= 0) {\r\n\t\t\t\tmaxIndex = findIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.minIndex = minIndex;\r\n\t\tme.maxIndex = maxIndex;\r\n\t\tme.min = labels[minIndex];\r\n\t\tme.max = labels[maxIndex];\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar labels = me._getLabels();\r\n\t\tvar minIndex = me.minIndex;\r\n\t\tvar maxIndex = me.maxIndex;\r\n\r\n\t\t// If we are viewing some subset of labels, slice the original array\r\n\t\tme.ticks = (minIndex === 0 && maxIndex === labels.length - 1) ? labels : labels.slice(minIndex, maxIndex + 1);\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\r\n\t\tif (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\r\n\t\t\treturn me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\r\n\t\t}\r\n\r\n\t\treturn me._getLabels()[index];\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar offset = me.options.offset;\r\n\t\tvar ticks = me.ticks;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (!me.isHorizontal()) {\r\n\t\t\t// For backward compatibility, vertical category scale reverse is inverted.\r\n\t\t\tme._reversePixels = !me._reversePixels;\r\n\t\t}\r\n\r\n\t\tif (!ticks) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme._startValue = me.minIndex - (offset ? 0.5 : 0);\r\n\t\tme._valueRange = Math.max(ticks.length - (offset ? 0 : 1), 1);\r\n\t},\r\n\r\n\t// Used to get data value locations. Value can either be an index or a numerical value\r\n\tgetPixelForValue: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar valueCategory, labels, idx;\r\n\r\n\t\tif (!isNullOrUndef$1(index) && !isNullOrUndef$1(datasetIndex)) {\r\n\t\t\tvalue = me.chart.data.datasets[datasetIndex].data[index];\r\n\t\t}\r\n\r\n\t\t// If value is a data object, then index is the index in the data array,\r\n\t\t// not the index of the scale. We need to change that.\r\n\t\tif (!isNullOrUndef$1(value)) {\r\n\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\r\n\t\t}\r\n\t\tif (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\r\n\t\t\tlabels = me._getLabels();\r\n\t\t\tvalue = helpers$1.valueOrDefault(valueCategory, value);\r\n\t\t\tidx = labels.indexOf(value);\r\n\t\t\tindex = idx !== -1 ? idx : index;\r\n\t\t\tif (isNaN(index)) {\r\n\t\t\t\tindex = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn me.getPixelForDecimal((index - me._startValue) / me._valueRange);\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.ticks;\r\n\t\treturn index < 0 || index > ticks.length - 1\r\n\t\t\t? null\r\n\t\t\t: this.getPixelForValue(ticks[index], index + this.minIndex);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar value = Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\r\n\t\treturn Math.min(Math.max(value, 0), me.ticks.length - 1);\r\n\t},\r\n\r\n\tgetBasePixel: function() {\r\n\t\treturn this.bottom;\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults = defaultConfig;\nscale_category._defaults = _defaults;\n\nvar noop = helpers$1.noop;\r\nvar isNullOrUndef$2 = helpers$1.isNullOrUndef;\r\n\r\n/**\r\n * Generate a set of linear ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {number[]} array of tick values\r\n */\r\nfunction generateTicks(generationOptions, dataRange) {\r\n\tvar ticks = [];\r\n\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\r\n\t// \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\r\n\t// for details.\r\n\r\n\tvar MIN_SPACING = 1e-14;\r\n\tvar stepSize = generationOptions.stepSize;\r\n\tvar unit = stepSize || 1;\r\n\tvar maxNumSpaces = generationOptions.maxTicks - 1;\r\n\tvar min = generationOptions.min;\r\n\tvar max = generationOptions.max;\r\n\tvar precision = generationOptions.precision;\r\n\tvar rmin = dataRange.min;\r\n\tvar rmax = dataRange.max;\r\n\tvar spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\r\n\tvar factor, niceMin, niceMax, numSpaces;\r\n\r\n\t// Beyond MIN_SPACING floating point numbers being to lose precision\r\n\t// such that we can't do the math necessary to generate ticks\r\n\tif (spacing < MIN_SPACING && isNullOrUndef$2(min) && isNullOrUndef$2(max)) {\r\n\t\treturn [rmin, rmax];\r\n\t}\r\n\r\n\tnumSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\r\n\tif (numSpaces > maxNumSpaces) {\r\n\t\t// If the calculated num of spaces exceeds maxNumSpaces, recalculate it\r\n\t\tspacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\r\n\t}\r\n\r\n\tif (stepSize || isNullOrUndef$2(precision)) {\r\n\t\t// If a precision is not specified, calculate factor based on spacing\r\n\t\tfactor = Math.pow(10, helpers$1._decimalPlaces(spacing));\r\n\t} else {\r\n\t\t// If the user specified a precision, round to that number of decimal places\r\n\t\tfactor = Math.pow(10, precision);\r\n\t\tspacing = Math.ceil(spacing * factor) / factor;\r\n\t}\r\n\r\n\tniceMin = Math.floor(rmin / spacing) * spacing;\r\n\tniceMax = Math.ceil(rmax / spacing) * spacing;\r\n\r\n\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\r\n\tif (stepSize) {\r\n\t\t// If very close to our whole number, use it.\r\n\t\tif (!isNullOrUndef$2(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\r\n\t\t\tniceMin = min;\r\n\t\t}\r\n\t\tif (!isNullOrUndef$2(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\r\n\t\t\tniceMax = max;\r\n\t\t}\r\n\t}\r\n\r\n\tnumSpaces = (niceMax - niceMin) / spacing;\r\n\t// If very close to our rounded value, use it.\r\n\tif (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\r\n\t\tnumSpaces = Math.round(numSpaces);\r\n\t} else {\r\n\t\tnumSpaces = Math.ceil(numSpaces);\r\n\t}\r\n\r\n\tniceMin = Math.round(niceMin * factor) / factor;\r\n\tniceMax = Math.round(niceMax * factor) / factor;\r\n\tticks.push(isNullOrUndef$2(min) ? niceMin : min);\r\n\tfor (var j = 1; j < numSpaces; ++j) {\r\n\t\tticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\r\n\t}\r\n\tticks.push(isNullOrUndef$2(max) ? niceMax : max);\r\n\r\n\treturn ticks;\r\n}\r\n\r\nvar scale_linearbase = core_scale.extend({\r\n\tgetRightValue: function(value) {\r\n\t\tif (typeof value === 'string') {\r\n\t\t\treturn +value;\r\n\t\t}\r\n\t\treturn core_scale.prototype.getRightValue.call(this, value);\r\n\t},\r\n\r\n\thandleTickRangeOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\r\n\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\r\n\t\t// axis, they can manually override it\r\n\t\tif (tickOpts.beginAtZero) {\r\n\t\t\tvar minSign = helpers$1.sign(me.min);\r\n\t\t\tvar maxSign = helpers$1.sign(me.max);\r\n\r\n\t\t\tif (minSign < 0 && maxSign < 0) {\r\n\t\t\t\t// move the top up to 0\r\n\t\t\t\tme.max = 0;\r\n\t\t\t} else if (minSign > 0 && maxSign > 0) {\r\n\t\t\t\t// move the bottom down to 0\r\n\t\t\t\tme.min = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\r\n\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\r\n\r\n\t\tif (tickOpts.min !== undefined) {\r\n\t\t\tme.min = tickOpts.min;\r\n\t\t} else if (tickOpts.suggestedMin !== undefined) {\r\n\t\t\tif (me.min === null) {\r\n\t\t\t\tme.min = tickOpts.suggestedMin;\r\n\t\t\t} else {\r\n\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (tickOpts.max !== undefined) {\r\n\t\t\tme.max = tickOpts.max;\r\n\t\t} else if (tickOpts.suggestedMax !== undefined) {\r\n\t\t\tif (me.max === null) {\r\n\t\t\t\tme.max = tickOpts.suggestedMax;\r\n\t\t\t} else {\r\n\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (setMin !== setMax) {\r\n\t\t\t// We set the min or the max but not both.\r\n\t\t\t// So ensure that our range is good\r\n\t\t\t// Inverted or 0 length range can happen when\r\n\t\t\t// ticks.min is set, and no datasets are visible\r\n\t\t\tif (me.min >= me.max) {\r\n\t\t\t\tif (setMin) {\r\n\t\t\t\t\tme.max = me.min + 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tme.min = me.max - 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (me.min === me.max) {\r\n\t\t\tme.max++;\r\n\r\n\t\t\tif (!tickOpts.beginAtZero) {\r\n\t\t\t\tme.min--;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetTickLimit: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar stepSize = tickOpts.stepSize;\r\n\t\tvar maxTicksLimit = tickOpts.maxTicksLimit;\r\n\t\tvar maxTicks;\r\n\r\n\t\tif (stepSize) {\r\n\t\t\tmaxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\r\n\t\t} else {\r\n\t\t\tmaxTicks = me._computeTickLimit();\r\n\t\t\tmaxTicksLimit = maxTicksLimit || 11;\r\n\t\t}\r\n\r\n\t\tif (maxTicksLimit) {\r\n\t\t\tmaxTicks = Math.min(maxTicksLimit, maxTicks);\r\n\t\t}\r\n\r\n\t\treturn maxTicks;\r\n\t},\r\n\r\n\t_computeTickLimit: function() {\r\n\t\treturn Number.POSITIVE_INFINITY;\r\n\t},\r\n\r\n\thandleDirectionalChanges: noop,\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\t// Figure out what the max number of ticks we can support it is based on the size of\r\n\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 40\r\n\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\r\n\t\t// the graph. Make sure we always have at least 2 ticks\r\n\t\tvar maxTicks = me.getTickLimit();\r\n\t\tmaxTicks = Math.max(2, maxTicks);\r\n\r\n\t\tvar numericGeneratorOptions = {\r\n\t\t\tmaxTicks: maxTicks,\r\n\t\t\tmin: tickOpts.min,\r\n\t\t\tmax: tickOpts.max,\r\n\t\t\tprecision: tickOpts.precision,\r\n\t\t\tstepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\r\n\t\t};\r\n\t\tvar ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\r\n\r\n\t\tme.handleDirectionalChanges();\r\n\r\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\r\n\t\t// range of the scale\r\n\t\tme.max = helpers$1.max(ticks);\r\n\t\tme.min = helpers$1.min(ticks);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\tticks.reverse();\r\n\r\n\t\t\tme.start = me.max;\r\n\t\t\tme.end = me.min;\r\n\t\t} else {\r\n\t\t\tme.start = me.min;\r\n\t\t\tme.end = me.max;\r\n\t\t}\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\t\tme.ticksAsNumbers = me.ticks.slice();\r\n\t\tme.zeroLineIndex = me.ticks.indexOf(0);\r\n\r\n\t\tcore_scale.prototype.convertTicksToLabels.call(me);\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar ticks = me.getTicks();\r\n\t\tvar start = me.min;\r\n\t\tvar end = me.max;\r\n\t\tvar offset;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (me.options.offset && ticks.length) {\r\n\t\t\toffset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\r\n\t\t\tstart -= offset;\r\n\t\t\tend += offset;\r\n\t\t}\r\n\t\tme._startValue = start;\r\n\t\tme._endValue = end;\r\n\t\tme._valueRange = end - start;\r\n\t}\r\n});\n\nvar defaultConfig$1 = {\r\n\tposition: 'left',\r\n\tticks: {\r\n\t\tcallback: core_ticks.formatters.linear\r\n\t}\r\n};\r\n\r\nvar DEFAULT_MIN = 0;\r\nvar DEFAULT_MAX = 1;\r\n\r\nfunction getOrCreateStack(stacks, stacked, meta) {\r\n\tvar key = [\r\n\t\tmeta.type,\r\n\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\r\n\t\tstacked === undefined && meta.stack === undefined ? meta.index : '',\r\n\t\tmeta.stack\r\n\t].join('.');\r\n\r\n\tif (stacks[key] === undefined) {\r\n\t\tstacks[key] = {\r\n\t\t\tpos: [],\r\n\t\t\tneg: []\r\n\t\t};\r\n\t}\r\n\r\n\treturn stacks[key];\r\n}\r\n\r\nfunction stackData(scale, stacks, meta, data) {\r\n\tvar opts = scale.options;\r\n\tvar stacked = opts.stacked;\r\n\tvar stack = getOrCreateStack(stacks, stacked, meta);\r\n\tvar pos = stack.pos;\r\n\tvar neg = stack.neg;\r\n\tvar ilen = data.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = scale._parseValue(data[i]);\r\n\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tpos[i] = pos[i] || 0;\r\n\t\tneg[i] = neg[i] || 0;\r\n\r\n\t\tif (opts.relativePoints) {\r\n\t\t\tpos[i] = 100;\r\n\t\t} else if (value.min < 0 || value.max < 0) {\r\n\t\t\tneg[i] += value.min;\r\n\t\t} else {\r\n\t\t\tpos[i] += value.max;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction updateMinMax(scale, meta, data) {\r\n\tvar ilen = data.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = scale._parseValue(data[i]);\r\n\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tscale.min = Math.min(scale.min, value.min);\r\n\t\tscale.max = Math.max(scale.max, value.max);\r\n\t}\r\n}\r\n\r\nvar scale_linear = scale_linearbase.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = me._getMatchingVisibleMetas();\r\n\t\tvar hasStacks = opts.stacked;\r\n\t\tvar stacks = {};\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, meta, data, values;\r\n\r\n\t\tme.min = Number.POSITIVE_INFINITY;\r\n\t\tme.max = Number.NEGATIVE_INFINITY;\r\n\r\n\t\tif (hasStacks === undefined) {\r\n\t\t\tfor (i = 0; !hasStacks && i < ilen; ++i) {\r\n\t\t\t\tmeta = metasets[i];\r\n\t\t\t\thasStacks = meta.stack !== undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\tdata = datasets[meta.index].data;\r\n\t\t\tif (hasStacks) {\r\n\t\t\t\tstackData(me, stacks, meta, data);\r\n\t\t\t} else {\r\n\t\t\t\tupdateMinMax(me, meta, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.each(stacks, function(stackValues) {\r\n\t\t\tvalues = stackValues.pos.concat(stackValues.neg);\r\n\t\t\tme.min = Math.min(me.min, helpers$1.min(values));\r\n\t\t\tme.max = Math.max(me.max, helpers$1.max(values));\r\n\t\t});\r\n\r\n\t\tme.min = helpers$1.isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\r\n\t\tme.max = helpers$1.isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\r\n\t\tme.handleTickRangeOptions();\r\n\t},\r\n\r\n\t// Returns the maximum number of ticks based on the scale dimension\r\n\t_computeTickLimit: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickFont;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\treturn Math.ceil(me.width / 40);\r\n\t\t}\r\n\t\ttickFont = helpers$1.options._parseFont(me.options.ticks);\r\n\t\treturn Math.ceil(me.height / tickFont.lineHeight);\r\n\t},\r\n\r\n\t// Called after the ticks are built. We need\r\n\thandleDirectionalChanges: function() {\r\n\t\tif (!this.isHorizontal()) {\r\n\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\r\n\t\t\tthis.ticks.reverse();\r\n\t\t}\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\t// Utils\r\n\tgetPixelForValue: function(value) {\r\n\t\tvar me = this;\r\n\t\treturn me.getPixelForDecimal((+me.getRightValue(value) - me._startValue) / me._valueRange);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\treturn this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.ticksAsNumbers;\r\n\t\tif (index < 0 || index > ticks.length - 1) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.getPixelForValue(ticks[index]);\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$1 = defaultConfig$1;\nscale_linear._defaults = _defaults$1;\n\nvar valueOrDefault$b = helpers$1.valueOrDefault;\r\nvar log10 = helpers$1.math.log10;\r\n\r\n/**\r\n * Generate a set of logarithmic ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {number[]} array of tick values\r\n */\r\nfunction generateTicks$1(generationOptions, dataRange) {\r\n\tvar ticks = [];\r\n\r\n\tvar tickVal = valueOrDefault$b(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\r\n\r\n\tvar endExp = Math.floor(log10(dataRange.max));\r\n\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\r\n\tvar exp, significand;\r\n\r\n\tif (tickVal === 0) {\r\n\t\texp = Math.floor(log10(dataRange.minNotZero));\r\n\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\r\n\r\n\t\tticks.push(tickVal);\r\n\t\ttickVal = significand * Math.pow(10, exp);\r\n\t} else {\r\n\t\texp = Math.floor(log10(tickVal));\r\n\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\r\n\t}\r\n\tvar precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\r\n\r\n\tdo {\r\n\t\tticks.push(tickVal);\r\n\r\n\t\t++significand;\r\n\t\tif (significand === 10) {\r\n\t\t\tsignificand = 1;\r\n\t\t\t++exp;\r\n\t\t\tprecision = exp >= 0 ? 1 : precision;\r\n\t\t}\r\n\r\n\t\ttickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\r\n\t} while (exp < endExp || (exp === endExp && significand < endSignificand));\r\n\r\n\tvar lastTick = valueOrDefault$b(generationOptions.max, tickVal);\r\n\tticks.push(lastTick);\r\n\r\n\treturn ticks;\r\n}\r\n\r\nvar defaultConfig$2 = {\r\n\tposition: 'left',\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\tcallback: core_ticks.formatters.logarithmic\r\n\t}\r\n};\r\n\r\n// TODO(v3): change this to positiveOrDefault\r\nfunction nonNegativeOrDefault(value, defaultValue) {\r\n\treturn helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\r\n}\r\n\r\nvar scale_logarithmic = core_scale.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tfunction IDMatches(meta) {\r\n\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\r\n\t\t}\r\n\t\tvar datasetIndex, meta, value, data, i, ilen;\r\n\r\n\t\t// Calculate Range\r\n\t\tme.min = Number.POSITIVE_INFINITY;\r\n\t\tme.max = Number.NEGATIVE_INFINITY;\r\n\t\tme.minNotZero = Number.POSITIVE_INFINITY;\r\n\r\n\t\tvar hasStacks = opts.stacked;\r\n\t\tif (hasStacks === undefined) {\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\r\n\t\t\t\t\tmeta.stack !== undefined) {\r\n\t\t\t\t\thasStacks = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (opts.stacked || hasStacks) {\r\n\t\t\tvar valuesPerStack = {};\r\n\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tvar key = [\r\n\t\t\t\t\tmeta.type,\r\n\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\r\n\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\r\n\t\t\t\t\tmeta.stack\r\n\t\t\t\t].join('.');\r\n\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\r\n\t\t\t\t\tif (valuesPerStack[key] === undefined) {\r\n\t\t\t\t\t\tvaluesPerStack[key] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdata = datasets[datasetIndex].data;\r\n\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; i++) {\r\n\t\t\t\t\t\tvar values = valuesPerStack[key];\r\n\t\t\t\t\t\tvalue = me._parseValue(data[i]);\r\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\r\n\t\t\t\t\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvalues[i] = values[i] || 0;\r\n\t\t\t\t\t\tvalues[i] += value.max;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\thelpers$1.each(valuesPerStack, function(valuesForType) {\r\n\t\t\t\tif (valuesForType.length > 0) {\r\n\t\t\t\t\tvar minVal = helpers$1.min(valuesForType);\r\n\t\t\t\t\tvar maxVal = helpers$1.max(valuesForType);\r\n\t\t\t\t\tme.min = Math.min(me.min, minVal);\r\n\t\t\t\t\tme.max = Math.max(me.max, maxVal);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t} else {\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\r\n\t\t\t\t\tdata = datasets[datasetIndex].data;\r\n\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; i++) {\r\n\t\t\t\t\t\tvalue = me._parseValue(data[i]);\r\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\r\n\t\t\t\t\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tme.min = Math.min(value.min, me.min);\r\n\t\t\t\t\t\tme.max = Math.max(value.max, me.max);\r\n\r\n\t\t\t\t\t\tif (value.min !== 0) {\r\n\t\t\t\t\t\t\tme.minNotZero = Math.min(value.min, me.minNotZero);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.min = helpers$1.isFinite(me.min) ? me.min : null;\r\n\t\tme.max = helpers$1.isFinite(me.max) ? me.max : null;\r\n\t\tme.minNotZero = helpers$1.isFinite(me.minNotZero) ? me.minNotZero : null;\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max\r\n\t\tthis.handleTickRangeOptions();\r\n\t},\r\n\r\n\thandleTickRangeOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar DEFAULT_MIN = 1;\r\n\t\tvar DEFAULT_MAX = 10;\r\n\r\n\t\tme.min = nonNegativeOrDefault(tickOpts.min, me.min);\r\n\t\tme.max = nonNegativeOrDefault(tickOpts.max, me.max);\r\n\r\n\t\tif (me.min === me.max) {\r\n\t\t\tif (me.min !== 0 && me.min !== null) {\r\n\t\t\t\tme.min = Math.pow(10, Math.floor(log10(me.min)) - 1);\r\n\t\t\t\tme.max = Math.pow(10, Math.floor(log10(me.max)) + 1);\r\n\t\t\t} else {\r\n\t\t\t\tme.min = DEFAULT_MIN;\r\n\t\t\t\tme.max = DEFAULT_MAX;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (me.min === null) {\r\n\t\t\tme.min = Math.pow(10, Math.floor(log10(me.max)) - 1);\r\n\t\t}\r\n\t\tif (me.max === null) {\r\n\t\t\tme.max = me.min !== 0\r\n\t\t\t\t? Math.pow(10, Math.floor(log10(me.min)) + 1)\r\n\t\t\t\t: DEFAULT_MAX;\r\n\t\t}\r\n\t\tif (me.minNotZero === null) {\r\n\t\t\tif (me.min > 0) {\r\n\t\t\t\tme.minNotZero = me.min;\r\n\t\t\t} else if (me.max < 1) {\r\n\t\t\t\tme.minNotZero = Math.pow(10, Math.floor(log10(me.max)));\r\n\t\t\t} else {\r\n\t\t\t\tme.minNotZero = DEFAULT_MIN;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar reverse = !me.isHorizontal();\r\n\r\n\t\tvar generationOptions = {\r\n\t\t\tmin: nonNegativeOrDefault(tickOpts.min),\r\n\t\t\tmax: nonNegativeOrDefault(tickOpts.max)\r\n\t\t};\r\n\t\tvar ticks = me.ticks = generateTicks$1(generationOptions, me);\r\n\r\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\r\n\t\t// range of the scale\r\n\t\tme.max = helpers$1.max(ticks);\r\n\t\tme.min = helpers$1.min(ticks);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\treverse = !reverse;\r\n\t\t\tme.start = me.max;\r\n\t\t\tme.end = me.min;\r\n\t\t} else {\r\n\t\t\tme.start = me.min;\r\n\t\t\tme.end = me.max;\r\n\t\t}\r\n\t\tif (reverse) {\r\n\t\t\tticks.reverse();\r\n\t\t}\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tthis.tickValues = this.ticks.slice();\r\n\r\n\t\tcore_scale.prototype.convertTicksToLabels.call(this);\r\n\t},\r\n\r\n\t// Get the correct tooltip label\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.tickValues;\r\n\t\tif (index < 0 || index > ticks.length - 1) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.getPixelForValue(ticks[index]);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the value of the first tick.\r\n\t * @param {number} value - The minimum not zero value.\r\n\t * @return {number} The first tick value.\r\n\t * @private\r\n\t */\r\n\t_getFirstTickValue: function(value) {\r\n\t\tvar exp = Math.floor(log10(value));\r\n\t\tvar significand = Math.floor(value / Math.pow(10, exp));\r\n\r\n\t\treturn significand * Math.pow(10, exp);\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar start = me.min;\r\n\t\tvar offset = 0;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (start === 0) {\r\n\t\t\tstart = me._getFirstTickValue(me.minNotZero);\r\n\t\t\toffset = valueOrDefault$b(me.options.ticks.fontSize, core_defaults.global.defaultFontSize) / me._length;\r\n\t\t}\r\n\r\n\t\tme._startValue = log10(start);\r\n\t\tme._valueOffset = offset;\r\n\t\tme._valueRange = (log10(me.max) - log10(start)) / (1 - offset);\r\n\t},\r\n\r\n\tgetPixelForValue: function(value) {\r\n\t\tvar me = this;\r\n\t\tvar decimal = 0;\r\n\r\n\t\tvalue = +me.getRightValue(value);\r\n\r\n\t\tif (value > me.min && value > 0) {\r\n\t\t\tdecimal = (log10(value) - me._startValue) / me._valueRange + me._valueOffset;\r\n\t\t}\r\n\t\treturn me.getPixelForDecimal(decimal);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar decimal = me.getDecimalForPixel(pixel);\r\n\t\treturn decimal === 0 && me.min === 0\r\n\t\t\t? 0\r\n\t\t\t: Math.pow(10, me._startValue + (decimal - me._valueOffset) * me._valueRange);\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$2 = defaultConfig$2;\nscale_logarithmic._defaults = _defaults$2;\n\nvar valueOrDefault$c = helpers$1.valueOrDefault;\r\nvar valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\r\nvar resolve$4 = helpers$1.options.resolve;\r\n\r\nvar defaultConfig$3 = {\r\n\tdisplay: true,\r\n\r\n\t// Boolean - Whether to animate scaling the chart from the centre\r\n\tanimate: true,\r\n\tposition: 'chartArea',\r\n\r\n\tangleLines: {\r\n\t\tdisplay: true,\r\n\t\tcolor: 'rgba(0,0,0,0.1)',\r\n\t\tlineWidth: 1,\r\n\t\tborderDash: [],\r\n\t\tborderDashOffset: 0.0\r\n\t},\r\n\r\n\tgridLines: {\r\n\t\tcircular: false\r\n\t},\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\t// Boolean - Show a backdrop to the scale label\r\n\t\tshowLabelBackdrop: true,\r\n\r\n\t\t// String - The colour of the label backdrop\r\n\t\tbackdropColor: 'rgba(255,255,255,0.75)',\r\n\r\n\t\t// Number - The backdrop padding above & below the label in pixels\r\n\t\tbackdropPaddingY: 2,\r\n\r\n\t\t// Number - The backdrop padding to the side of the label in pixels\r\n\t\tbackdropPaddingX: 2,\r\n\r\n\t\tcallback: core_ticks.formatters.linear\r\n\t},\r\n\r\n\tpointLabels: {\r\n\t\t// Boolean - if true, show point labels\r\n\t\tdisplay: true,\r\n\r\n\t\t// Number - Point label font size in pixels\r\n\t\tfontSize: 10,\r\n\r\n\t\t// Function - Used to convert point labels\r\n\t\tcallback: function(label) {\r\n\t\t\treturn label;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nfunction getTickBackdropHeight(opts) {\r\n\tvar tickOpts = opts.ticks;\r\n\r\n\tif (tickOpts.display && opts.display) {\r\n\t\treturn valueOrDefault$c(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\r\n\t}\r\n\treturn 0;\r\n}\r\n\r\nfunction measureLabelSize(ctx, lineHeight, label) {\r\n\tif (helpers$1.isArray(label)) {\r\n\t\treturn {\r\n\t\t\tw: helpers$1.longestText(ctx, ctx.font, label),\r\n\t\t\th: label.length * lineHeight\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tw: ctx.measureText(label).width,\r\n\t\th: lineHeight\r\n\t};\r\n}\r\n\r\nfunction determineLimits(angle, pos, size, min, max) {\r\n\tif (angle === min || angle === max) {\r\n\t\treturn {\r\n\t\t\tstart: pos - (size / 2),\r\n\t\t\tend: pos + (size / 2)\r\n\t\t};\r\n\t} else if (angle < min || angle > max) {\r\n\t\treturn {\r\n\t\t\tstart: pos - size,\r\n\t\t\tend: pos\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart: pos,\r\n\t\tend: pos + size\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper function to fit a radial linear scale with point labels\r\n */\r\nfunction fitWithPointLabels(scale) {\r\n\r\n\t// Right, this is really confusing and there is a lot of maths going on here\r\n\t// The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\r\n\t//\r\n\t// Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\r\n\t//\r\n\t// Solution:\r\n\t//\r\n\t// We assume the radius of the polygon is half the size of the canvas at first\r\n\t// at each index we check if the text overlaps.\r\n\t//\r\n\t// Where it does, we store that angle and that index.\r\n\t//\r\n\t// After finding the largest index and angle we calculate how much we need to remove\r\n\t// from the shape radius to move the point inwards by that x.\r\n\t//\r\n\t// We average the left and right distances to get the maximum shape radius that can fit in the box\r\n\t// along with labels.\r\n\t//\r\n\t// Once we have that, we can find the centre point for the chart, by taking the x text protrusion\r\n\t// on each side, removing that from the size, halving it and adding the left x protrusion width.\r\n\t//\r\n\t// This will mean we have a shape fitted to the canvas, as large as it can be with the labels\r\n\t// and position it in the most space efficient manner\r\n\t//\r\n\t// https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\r\n\r\n\tvar plFont = helpers$1.options._parseFont(scale.options.pointLabels);\r\n\r\n\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\r\n\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\r\n\tvar furthestLimits = {\r\n\t\tl: 0,\r\n\t\tr: scale.width,\r\n\t\tt: 0,\r\n\t\tb: scale.height - scale.paddingTop\r\n\t};\r\n\tvar furthestAngles = {};\r\n\tvar i, textSize, pointPosition;\r\n\r\n\tscale.ctx.font = plFont.string;\r\n\tscale._pointLabelSizes = [];\r\n\r\n\tvar valueCount = scale.chart.data.labels.length;\r\n\tfor (i = 0; i < valueCount; i++) {\r\n\t\tpointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\r\n\t\ttextSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i]);\r\n\t\tscale._pointLabelSizes[i] = textSize;\r\n\r\n\t\t// Add quarter circle to make degree 0 mean top of circle\r\n\t\tvar angleRadians = scale.getIndexAngle(i);\r\n\t\tvar angle = helpers$1.toDegrees(angleRadians) % 360;\r\n\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\r\n\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\r\n\r\n\t\tif (hLimits.start < furthestLimits.l) {\r\n\t\t\tfurthestLimits.l = hLimits.start;\r\n\t\t\tfurthestAngles.l = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (hLimits.end > furthestLimits.r) {\r\n\t\t\tfurthestLimits.r = hLimits.end;\r\n\t\t\tfurthestAngles.r = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (vLimits.start < furthestLimits.t) {\r\n\t\t\tfurthestLimits.t = vLimits.start;\r\n\t\t\tfurthestAngles.t = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (vLimits.end > furthestLimits.b) {\r\n\t\t\tfurthestLimits.b = vLimits.end;\r\n\t\t\tfurthestAngles.b = angleRadians;\r\n\t\t}\r\n\t}\r\n\r\n\tscale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\r\n}\r\n\r\nfunction getTextAlignForAngle(angle) {\r\n\tif (angle === 0 || angle === 180) {\r\n\t\treturn 'center';\r\n\t} else if (angle < 180) {\r\n\t\treturn 'left';\r\n\t}\r\n\r\n\treturn 'right';\r\n}\r\n\r\nfunction fillText(ctx, text, position, lineHeight) {\r\n\tvar y = position.y + lineHeight / 2;\r\n\tvar i, ilen;\r\n\r\n\tif (helpers$1.isArray(text)) {\r\n\t\tfor (i = 0, ilen = text.length; i < ilen; ++i) {\r\n\t\t\tctx.fillText(text[i], position.x, y);\r\n\t\t\ty += lineHeight;\r\n\t\t}\r\n\t} else {\r\n\t\tctx.fillText(text, position.x, y);\r\n\t}\r\n}\r\n\r\nfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\r\n\tif (angle === 90 || angle === 270) {\r\n\t\tposition.y -= (textSize.h / 2);\r\n\t} else if (angle > 270 || angle < 90) {\r\n\t\tposition.y -= textSize.h;\r\n\t}\r\n}\r\n\r\nfunction drawPointLabels(scale) {\r\n\tvar ctx = scale.ctx;\r\n\tvar opts = scale.options;\r\n\tvar pointLabelOpts = opts.pointLabels;\r\n\tvar tickBackdropHeight = getTickBackdropHeight(opts);\r\n\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\r\n\tvar plFont = helpers$1.options._parseFont(pointLabelOpts);\r\n\r\n\tctx.save();\r\n\r\n\tctx.font = plFont.string;\r\n\tctx.textBaseline = 'middle';\r\n\r\n\tfor (var i = scale.chart.data.labels.length - 1; i >= 0; i--) {\r\n\t\t// Extra pixels out for some label spacing\r\n\t\tvar extra = (i === 0 ? tickBackdropHeight / 2 : 0);\r\n\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5);\r\n\r\n\t\t// Keep this in loop since we may support array properties here\r\n\t\tvar pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\r\n\t\tctx.fillStyle = pointLabelFontColor;\r\n\r\n\t\tvar angleRadians = scale.getIndexAngle(i);\r\n\t\tvar angle = helpers$1.toDegrees(angleRadians);\r\n\t\tctx.textAlign = getTextAlignForAngle(angle);\r\n\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\r\n\t\tfillText(ctx, scale.pointLabels[i], pointLabelPosition, plFont.lineHeight);\r\n\t}\r\n\tctx.restore();\r\n}\r\n\r\nfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\r\n\tvar ctx = scale.ctx;\r\n\tvar circular = gridLineOpts.circular;\r\n\tvar valueCount = scale.chart.data.labels.length;\r\n\tvar lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\r\n\tvar lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\r\n\tvar pointPosition;\r\n\r\n\tif ((!circular && !valueCount) || !lineColor || !lineWidth) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tctx.save();\r\n\tctx.strokeStyle = lineColor;\r\n\tctx.lineWidth = lineWidth;\r\n\tif (ctx.setLineDash) {\r\n\t\tctx.setLineDash(gridLineOpts.borderDash || []);\r\n\t\tctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tif (circular) {\r\n\t\t// Draw circular arcs between the points\r\n\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\r\n\t} else {\r\n\t\t// Draw straight lines connecting each index\r\n\t\tpointPosition = scale.getPointPosition(0, radius);\r\n\t\tctx.moveTo(pointPosition.x, pointPosition.y);\r\n\r\n\t\tfor (var i = 1; i < valueCount; i++) {\r\n\t\t\tpointPosition = scale.getPointPosition(i, radius);\r\n\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\r\n\t\t}\r\n\t}\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n\tctx.restore();\r\n}\r\n\r\nfunction numberOrZero(param) {\r\n\treturn helpers$1.isNumber(param) ? param : 0;\r\n}\r\n\r\nvar scale_radialLinear = scale_linearbase.extend({\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tme.width = me.maxWidth;\r\n\t\tme.height = me.maxHeight;\r\n\t\tme.paddingTop = getTickBackdropHeight(me.options) / 2;\r\n\t\tme.xCenter = Math.floor(me.width / 2);\r\n\t\tme.yCenter = Math.floor((me.height - me.paddingTop) / 2);\r\n\t\tme.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\r\n\t},\r\n\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar min = Number.POSITIVE_INFINITY;\r\n\t\tvar max = Number.NEGATIVE_INFINITY;\r\n\r\n\t\thelpers$1.each(chart.data.datasets, function(dataset, datasetIndex) {\r\n\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\r\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\r\n\r\n\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\r\n\t\t\t\t\tvar value = +me.getRightValue(rawValue);\r\n\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmin = Math.min(value, min);\r\n\t\t\t\t\tmax = Math.max(value, max);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tme.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\r\n\t\tme.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\r\n\t\tme.handleTickRangeOptions();\r\n\t},\r\n\r\n\t// Returns the maximum number of ticks based on the scale dimension\r\n\t_computeTickLimit: function() {\r\n\t\treturn Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tscale_linearbase.prototype.convertTicksToLabels.call(me);\r\n\r\n\t\t// Point labels\r\n\t\tme.pointLabels = me.chart.data.labels.map(function() {\r\n\t\t\tvar label = helpers$1.callback(me.options.pointLabels.callback, arguments, me);\r\n\t\t\treturn label || label === 0 ? label : '';\r\n\t\t});\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\r\n\t\tif (opts.display && opts.pointLabels.display) {\r\n\t\t\tfitWithPointLabels(me);\r\n\t\t} else {\r\n\t\t\tme.setCenterPoint(0, 0, 0, 0);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Set radius reductions and determine new radius and center point\r\n\t * @private\r\n\t */\r\n\tsetReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\r\n\t\tvar me = this;\r\n\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\r\n\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\r\n\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\r\n\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\r\n\r\n\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\r\n\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\r\n\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\r\n\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\r\n\r\n\t\tme.drawingArea = Math.min(\r\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\r\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\r\n\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\r\n\t},\r\n\r\n\tsetCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\r\n\t\tvar me = this;\r\n\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\r\n\t\tvar maxLeft = leftMovement + me.drawingArea;\r\n\t\tvar maxTop = topMovement + me.drawingArea;\r\n\t\tvar maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;\r\n\r\n\t\tme.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);\r\n\t\tme.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);\r\n\t},\r\n\r\n\tgetIndexAngle: function(index) {\r\n\t\tvar chart = this.chart;\r\n\t\tvar angleMultiplier = 360 / chart.data.labels.length;\r\n\t\tvar options = chart.options || {};\r\n\t\tvar startAngle = options.startAngle || 0;\r\n\r\n\t\t// Start from the top instead of right, so remove a quarter of the circle\r\n\t\tvar angle = (index * angleMultiplier + startAngle) % 360;\r\n\r\n\t\treturn (angle < 0 ? angle + 360 : angle) * Math.PI * 2 / 360;\r\n\t},\r\n\r\n\tgetDistanceFromCenterForValue: function(value) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (helpers$1.isNullOrUndef(value)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\t// Take into account half font size + the yPadding of the top value\r\n\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\r\n\t\tif (me.options.ticks.reverse) {\r\n\t\t\treturn (me.max - value) * scalingFactor;\r\n\t\t}\r\n\t\treturn (value - me.min) * scalingFactor;\r\n\t},\r\n\r\n\tgetPointPosition: function(index, distanceFromCenter) {\r\n\t\tvar me = this;\r\n\t\tvar thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\r\n\t\treturn {\r\n\t\t\tx: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\r\n\t\t\ty: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\r\n\t\t};\r\n\t},\r\n\r\n\tgetPointPositionForValue: function(index, value) {\r\n\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\r\n\t},\r\n\r\n\tgetBasePosition: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\r\n\t\treturn me.getPointPositionForValue(index || 0,\r\n\t\t\tme.beginAtZero ? 0 :\r\n\t\t\tmin < 0 && max < 0 ? max :\r\n\t\t\tmin > 0 && max > 0 ? min :\r\n\t\t\t0);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawGrid: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\t\tvar gridLineOpts = opts.gridLines;\r\n\t\tvar angleLineOpts = opts.angleLines;\r\n\t\tvar lineWidth = valueOrDefault$c(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\r\n\t\tvar lineColor = valueOrDefault$c(angleLineOpts.color, gridLineOpts.color);\r\n\t\tvar i, offset, position;\r\n\r\n\t\tif (opts.pointLabels.display) {\r\n\t\t\tdrawPointLabels(me);\r\n\t\t}\r\n\r\n\t\tif (gridLineOpts.display) {\r\n\t\t\thelpers$1.each(me.ticks, function(label, index) {\r\n\t\t\t\tif (index !== 0) {\r\n\t\t\t\t\toffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\r\n\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, offset, index);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (angleLineOpts.display && lineWidth && lineColor) {\r\n\t\t\tctx.save();\r\n\t\t\tctx.lineWidth = lineWidth;\r\n\t\t\tctx.strokeStyle = lineColor;\r\n\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\tctx.setLineDash(resolve$4([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\r\n\t\t\t\tctx.lineDashOffset = resolve$4([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\r\n\t\t\t}\r\n\r\n\t\t\tfor (i = me.chart.data.labels.length - 1; i >= 0; i--) {\r\n\t\t\t\toffset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\r\n\t\t\t\tposition = me.getPointPosition(i, offset);\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.moveTo(me.xCenter, me.yCenter);\r\n\t\t\t\tctx.lineTo(position.x, position.y);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\tif (!tickOpts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar startAngle = me.getIndexAngle(0);\r\n\t\tvar tickFont = helpers$1.options._parseFont(tickOpts);\r\n\t\tvar tickFontColor = valueOrDefault$c(tickOpts.fontColor, core_defaults.global.defaultFontColor);\r\n\t\tvar offset, width;\r\n\r\n\t\tctx.save();\r\n\t\tctx.font = tickFont.string;\r\n\t\tctx.translate(me.xCenter, me.yCenter);\r\n\t\tctx.rotate(startAngle);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\r\n\t\thelpers$1.each(me.ticks, function(label, index) {\r\n\t\t\tif (index === 0 && !tickOpts.reverse) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\toffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\r\n\r\n\t\t\tif (tickOpts.showLabelBackdrop) {\r\n\t\t\t\twidth = ctx.measureText(label).width;\r\n\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\r\n\r\n\t\t\t\tctx.fillRect(\r\n\t\t\t\t\t-width / 2 - tickOpts.backdropPaddingX,\r\n\t\t\t\t\t-offset - tickFont.size / 2 - tickOpts.backdropPaddingY,\r\n\t\t\t\t\twidth + tickOpts.backdropPaddingX * 2,\r\n\t\t\t\t\ttickFont.size + tickOpts.backdropPaddingY * 2\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tctx.fillStyle = tickFontColor;\r\n\t\t\tctx.fillText(label, 0, -offset);\r\n\t\t});\r\n\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawTitle: helpers$1.noop\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$3 = defaultConfig$3;\nscale_radialLinear._defaults = _defaults$3;\n\nvar deprecated$1 = helpers$1._deprecated;\r\nvar resolve$5 = helpers$1.options.resolve;\r\nvar valueOrDefault$d = helpers$1.valueOrDefault;\r\n\r\n// Integer constants are from the ES6 spec.\r\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\r\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\r\n\r\nvar INTERVALS = {\r\n\tmillisecond: {\r\n\t\tcommon: true,\r\n\t\tsize: 1,\r\n\t\tsteps: 1000\r\n\t},\r\n\tsecond: {\r\n\t\tcommon: true,\r\n\t\tsize: 1000,\r\n\t\tsteps: 60\r\n\t},\r\n\tminute: {\r\n\t\tcommon: true,\r\n\t\tsize: 60000,\r\n\t\tsteps: 60\r\n\t},\r\n\thour: {\r\n\t\tcommon: true,\r\n\t\tsize: 3600000,\r\n\t\tsteps: 24\r\n\t},\r\n\tday: {\r\n\t\tcommon: true,\r\n\t\tsize: 86400000,\r\n\t\tsteps: 30\r\n\t},\r\n\tweek: {\r\n\t\tcommon: false,\r\n\t\tsize: 604800000,\r\n\t\tsteps: 4\r\n\t},\r\n\tmonth: {\r\n\t\tcommon: true,\r\n\t\tsize: 2.628e9,\r\n\t\tsteps: 12\r\n\t},\r\n\tquarter: {\r\n\t\tcommon: false,\r\n\t\tsize: 7.884e9,\r\n\t\tsteps: 4\r\n\t},\r\n\tyear: {\r\n\t\tcommon: true,\r\n\t\tsize: 3.154e10\r\n\t}\r\n};\r\n\r\nvar UNITS = Object.keys(INTERVALS);\r\n\r\nfunction sorter(a, b) {\r\n\treturn a - b;\r\n}\r\n\r\nfunction arrayUnique(items) {\r\n\tvar hash = {};\r\n\tvar out = [];\r\n\tvar i, ilen, item;\r\n\r\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\titem = items[i];\r\n\t\tif (!hash[item]) {\r\n\t\t\thash[item] = true;\r\n\t\t\tout.push(item);\r\n\t\t}\r\n\t}\r\n\r\n\treturn out;\r\n}\r\n\r\nfunction getMin(options) {\r\n\treturn helpers$1.valueOrDefault(options.time.min, options.ticks.min);\r\n}\r\n\r\nfunction getMax(options) {\r\n\treturn helpers$1.valueOrDefault(options.time.max, options.ticks.max);\r\n}\r\n\r\n/**\r\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\r\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\r\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\r\n * extremity (left + width or top + height). Note that it would be more optimized to directly\r\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\r\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\r\n *\r\n * @param {number[]} timestamps - timestamps sorted from lowest to highest.\r\n * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min\r\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\r\n * If 'series', timestamps will be positioned at the same distance from each other. In this\r\n * case, only timestamps that break the time linearity are registered, meaning that in the\r\n * best case, all timestamps are linear, the table contains only min and max.\r\n */\r\nfunction buildLookupTable(timestamps, min, max, distribution) {\r\n\tif (distribution === 'linear' || !timestamps.length) {\r\n\t\treturn [\r\n\t\t\t{time: min, pos: 0},\r\n\t\t\t{time: max, pos: 1}\r\n\t\t];\r\n\t}\r\n\r\n\tvar table = [];\r\n\tvar items = [min];\r\n\tvar i, ilen, prev, curr, next;\r\n\r\n\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\r\n\t\tcurr = timestamps[i];\r\n\t\tif (curr > min && curr < max) {\r\n\t\t\titems.push(curr);\r\n\t\t}\r\n\t}\r\n\r\n\titems.push(max);\r\n\r\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\tnext = items[i + 1];\r\n\t\tprev = items[i - 1];\r\n\t\tcurr = items[i];\r\n\r\n\t\t// only add points that breaks the scale linearity\r\n\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\r\n\t\t\ttable.push({time: curr, pos: i / (ilen - 1)});\r\n\t\t}\r\n\t}\r\n\r\n\treturn table;\r\n}\r\n\r\n// @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\r\nfunction lookup(table, key, value) {\r\n\tvar lo = 0;\r\n\tvar hi = table.length - 1;\r\n\tvar mid, i0, i1;\r\n\r\n\twhile (lo >= 0 && lo <= hi) {\r\n\t\tmid = (lo + hi) >> 1;\r\n\t\ti0 = table[mid - 1] || null;\r\n\t\ti1 = table[mid];\r\n\r\n\t\tif (!i0) {\r\n\t\t\t// given value is outside table (before first item)\r\n\t\t\treturn {lo: null, hi: i1};\r\n\t\t} else if (i1[key] < value) {\r\n\t\t\tlo = mid + 1;\r\n\t\t} else if (i0[key] > value) {\r\n\t\t\thi = mid - 1;\r\n\t\t} else {\r\n\t\t\treturn {lo: i0, hi: i1};\r\n\t\t}\r\n\t}\r\n\r\n\t// given value is outside table (after last item)\r\n\treturn {lo: i1, hi: null};\r\n}\r\n\r\n/**\r\n * Linearly interpolates the given source `value` using the table items `skey` values and\r\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\r\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\r\n * index [0, 1] or [n - 1, n] are used for the interpolation.\r\n */\r\nfunction interpolate$1(table, skey, sval, tkey) {\r\n\tvar range = lookup(table, skey, sval);\r\n\r\n\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\r\n\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\r\n\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\r\n\r\n\tvar span = next[skey] - prev[skey];\r\n\tvar ratio = span ? (sval - prev[skey]) / span : 0;\r\n\tvar offset = (next[tkey] - prev[tkey]) * ratio;\r\n\r\n\treturn prev[tkey] + offset;\r\n}\r\n\r\nfunction toTimestamp(scale, input) {\r\n\tvar adapter = scale._adapter;\r\n\tvar options = scale.options.time;\r\n\tvar parser = options.parser;\r\n\tvar format = parser || options.format;\r\n\tvar value = input;\r\n\r\n\tif (typeof parser === 'function') {\r\n\t\tvalue = parser(value);\r\n\t}\r\n\r\n\t// Only parse if its not a timestamp already\r\n\tif (!helpers$1.isFinite(value)) {\r\n\t\tvalue = typeof format === 'string'\r\n\t\t\t? adapter.parse(value, format)\r\n\t\t\t: adapter.parse(value);\r\n\t}\r\n\r\n\tif (value !== null) {\r\n\t\treturn +value;\r\n\t}\r\n\r\n\t// Labels are in an incompatible format and no `parser` has been provided.\r\n\t// The user might still use the deprecated `format` option for parsing.\r\n\tif (!parser && typeof format === 'function') {\r\n\t\tvalue = format(input);\r\n\r\n\t\t// `format` could return something else than a timestamp, if so, parse it\r\n\t\tif (!helpers$1.isFinite(value)) {\r\n\t\t\tvalue = adapter.parse(value);\r\n\t\t}\r\n\t}\r\n\r\n\treturn value;\r\n}\r\n\r\nfunction parse(scale, input) {\r\n\tif (helpers$1.isNullOrUndef(input)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar options = scale.options.time;\r\n\tvar value = toTimestamp(scale, scale.getRightValue(input));\r\n\tif (value === null) {\r\n\t\treturn value;\r\n\t}\r\n\r\n\tif (options.round) {\r\n\t\tvalue = +scale._adapter.startOf(value, options.round);\r\n\t}\r\n\r\n\treturn value;\r\n}\r\n\r\n/**\r\n * Figures out what unit results in an appropriate number of auto-generated ticks\r\n */\r\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\r\n\tvar ilen = UNITS.length;\r\n\tvar i, interval, factor;\r\n\r\n\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\r\n\t\tinterval = INTERVALS[UNITS[i]];\r\n\t\tfactor = interval.steps ? interval.steps : MAX_INTEGER;\r\n\r\n\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\r\n\t\t\treturn UNITS[i];\r\n\t\t}\r\n\t}\r\n\r\n\treturn UNITS[ilen - 1];\r\n}\r\n\r\n/**\r\n * Figures out what unit to format a set of ticks with\r\n */\r\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\r\n\tvar i, unit;\r\n\r\n\tfor (i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\r\n\t\tunit = UNITS[i];\r\n\t\tif (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\r\n\t\t\treturn unit;\r\n\t\t}\r\n\t}\r\n\r\n\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\r\n}\r\n\r\nfunction determineMajorUnit(unit) {\r\n\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\r\n\t\tif (INTERVALS[UNITS[i]].common) {\r\n\t\t\treturn UNITS[i];\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\r\n * `minor` unit using the given scale time `options`.\r\n * Important: this method can return ticks outside the min and max range, it's the\r\n * responsibility of the calling code to clamp values if needed.\r\n */\r\nfunction generate(scale, min, max, capacity) {\r\n\tvar adapter = scale._adapter;\r\n\tvar options = scale.options;\r\n\tvar timeOpts = options.time;\r\n\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\r\n\tvar stepSize = resolve$5([timeOpts.stepSize, timeOpts.unitStepSize, 1]);\r\n\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\r\n\tvar first = min;\r\n\tvar ticks = [];\r\n\tvar time;\r\n\r\n\t// For 'week' unit, handle the first day of week option\r\n\tif (weekday) {\r\n\t\tfirst = +adapter.startOf(first, 'isoWeek', weekday);\r\n\t}\r\n\r\n\t// Align first ticks on unit\r\n\tfirst = +adapter.startOf(first, weekday ? 'day' : minor);\r\n\r\n\t// Prevent browser from freezing in case user options request millions of milliseconds\r\n\tif (adapter.diff(max, min, minor) > 100000 * stepSize) {\r\n\t\tthrow min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor;\r\n\t}\r\n\r\n\tfor (time = first; time < max; time = +adapter.add(time, stepSize, minor)) {\r\n\t\tticks.push(time);\r\n\t}\r\n\r\n\tif (time === max || options.bounds === 'ticks') {\r\n\t\tticks.push(time);\r\n\t}\r\n\r\n\treturn ticks;\r\n}\r\n\r\n/**\r\n * Returns the start and end offsets from edges in the form of {start, end}\r\n * where each value is a relative width to the scale and ranges between 0 and 1.\r\n * They add extra margins on the both sides by scaling down the original scale.\r\n * Offsets are added when the `offset` option is true.\r\n */\r\nfunction computeOffsets(table, ticks, min, max, options) {\r\n\tvar start = 0;\r\n\tvar end = 0;\r\n\tvar first, last;\r\n\r\n\tif (options.offset && ticks.length) {\r\n\t\tfirst = interpolate$1(table, 'time', ticks[0], 'pos');\r\n\t\tif (ticks.length === 1) {\r\n\t\t\tstart = 1 - first;\r\n\t\t} else {\r\n\t\t\tstart = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\r\n\t\t}\r\n\t\tlast = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\r\n\t\tif (ticks.length === 1) {\r\n\t\t\tend = last;\r\n\t\t} else {\r\n\t\t\tend = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\r\n\t\t}\r\n\t}\r\n\r\n\treturn {start: start, end: end, factor: 1 / (start + 1 + end)};\r\n}\r\n\r\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\r\n\tvar adapter = scale._adapter;\r\n\tvar first = +adapter.startOf(ticks[0].value, majorUnit);\r\n\tvar last = ticks[ticks.length - 1].value;\r\n\tvar major, index;\r\n\r\n\tfor (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\r\n\t\tindex = map[major];\r\n\t\tif (index >= 0) {\r\n\t\t\tticks[index].major = true;\r\n\t\t}\r\n\t}\r\n\treturn ticks;\r\n}\r\n\r\nfunction ticksFromTimestamps(scale, values, majorUnit) {\r\n\tvar ticks = [];\r\n\tvar map = {};\r\n\tvar ilen = values.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = values[i];\r\n\t\tmap[value] = i;\r\n\r\n\t\tticks.push({\r\n\t\t\tvalue: value,\r\n\t\t\tmajor: false\r\n\t\t});\r\n\t}\r\n\r\n\t// We set the major ticks separately from the above loop because calling startOf for every tick\r\n\t// is expensive when there is a large number of ticks\r\n\treturn (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\r\n}\r\n\r\nvar defaultConfig$4 = {\r\n\tposition: 'bottom',\r\n\r\n\t/**\r\n\t * Data distribution along the scale:\r\n\t * - 'linear': data are spread according to their time (distances can vary),\r\n\t * - 'series': data are spread at the same distance from each other.\r\n\t * @see https://github.com/chartjs/Chart.js/pull/4507\r\n\t * @since 2.7.0\r\n\t */\r\n\tdistribution: 'linear',\r\n\r\n\t/**\r\n\t * Scale boundary strategy (bypassed by min/max time options)\r\n\t * - `data`: make sure data are fully visible, ticks outside are removed\r\n\t * - `ticks`: make sure ticks are fully visible, data outside are truncated\r\n\t * @see https://github.com/chartjs/Chart.js/pull/4556\r\n\t * @since 2.7.0\r\n\t */\r\n\tbounds: 'data',\r\n\r\n\tadapters: {},\r\n\ttime: {\r\n\t\tparser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\r\n\t\tunit: false, // false == automatic or override with week, month, year, etc.\r\n\t\tround: false, // none, or override with week, month, year, etc.\r\n\t\tdisplayFormat: false, // DEPRECATED\r\n\t\tisoWeekday: false, // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\r\n\t\tminUnit: 'millisecond',\r\n\t\tdisplayFormats: {}\r\n\t},\r\n\tticks: {\r\n\t\tautoSkip: false,\r\n\r\n\t\t/**\r\n\t\t * Ticks generation input values:\r\n\t\t * - 'auto': generates \"optimal\" ticks based on scale size and time options.\r\n\t\t * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\r\n\t\t * - 'labels': generates ticks from user given `data.labels` values ONLY.\r\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\r\n\t\t * @since 2.7.0\r\n\t\t */\r\n\t\tsource: 'auto',\r\n\r\n\t\tmajor: {\r\n\t\t\tenabled: false\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar scale_time = core_scale.extend({\r\n\tinitialize: function() {\r\n\t\tthis.mergeTicksOptions();\r\n\t\tcore_scale.prototype.initialize.call(this);\r\n\t},\r\n\r\n\tupdate: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar time = options.time || (options.time = {});\r\n\t\tvar adapter = me._adapter = new core_adapters._date(options.adapters.date);\r\n\r\n\t\t// DEPRECATIONS: output a message only one time per update\r\n\t\tdeprecated$1('time scale', time.format, 'time.format', 'time.parser');\r\n\t\tdeprecated$1('time scale', time.min, 'time.min', 'ticks.min');\r\n\t\tdeprecated$1('time scale', time.max, 'time.max', 'ticks.max');\r\n\r\n\t\t// Backward compatibility: before introducing adapter, `displayFormats` was\r\n\t\t// supposed to contain *all* unit/string pairs but this can't be resolved\r\n\t\t// when loading the scale (adapters are loaded afterward), so let's populate\r\n\t\t// missing formats on update\r\n\t\thelpers$1.mergeIf(time.displayFormats, adapter.formats());\r\n\r\n\t\treturn core_scale.prototype.update.apply(me, arguments);\r\n\t},\r\n\r\n\t/**\r\n\t * Allows data to be referenced via 't' attribute\r\n\t */\r\n\tgetRightValue: function(rawValue) {\r\n\t\tif (rawValue && rawValue.t !== undefined) {\r\n\t\t\trawValue = rawValue.t;\r\n\t\t}\r\n\t\treturn core_scale.prototype.getRightValue.call(this, rawValue);\r\n\t},\r\n\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar options = me.options;\r\n\t\tvar unit = options.time.unit || 'day';\r\n\t\tvar min = MAX_INTEGER;\r\n\t\tvar max = MIN_INTEGER;\r\n\t\tvar timestamps = [];\r\n\t\tvar datasets = [];\r\n\t\tvar labels = [];\r\n\t\tvar i, j, ilen, jlen, data, timestamp, labelsAdded;\r\n\t\tvar dataLabels = me._getLabels();\r\n\r\n\t\tfor (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\r\n\t\t\tlabels.push(parse(me, dataLabels[i]));\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\tdata = chart.data.datasets[i].data;\r\n\r\n\t\t\t\t// Let's consider that all data have the same format.\r\n\t\t\t\tif (helpers$1.isObject(data[0])) {\r\n\t\t\t\t\tdatasets[i] = [];\r\n\r\n\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\r\n\t\t\t\t\t\ttimestamp = parse(me, data[j]);\r\n\t\t\t\t\t\ttimestamps.push(timestamp);\r\n\t\t\t\t\t\tdatasets[i][j] = timestamp;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatasets[i] = labels.slice(0);\r\n\t\t\t\t\tif (!labelsAdded) {\r\n\t\t\t\t\t\ttimestamps = timestamps.concat(labels);\r\n\t\t\t\t\t\tlabelsAdded = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdatasets[i] = [];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (labels.length) {\r\n\t\t\tmin = Math.min(min, labels[0]);\r\n\t\t\tmax = Math.max(max, labels[labels.length - 1]);\r\n\t\t}\r\n\r\n\t\tif (timestamps.length) {\r\n\t\t\ttimestamps = ilen > 1 ? arrayUnique(timestamps).sort(sorter) : timestamps.sort(sorter);\r\n\t\t\tmin = Math.min(min, timestamps[0]);\r\n\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\r\n\t\t}\r\n\r\n\t\tmin = parse(me, getMin(options)) || min;\r\n\t\tmax = parse(me, getMax(options)) || max;\r\n\r\n\t\t// In case there is no valid min/max, set limits based on unit time option\r\n\t\tmin = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\r\n\t\tmax = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max;\r\n\r\n\t\t// Make sure that max is strictly higher than min (required by the lookup table)\r\n\t\tme.min = Math.min(min, max);\r\n\t\tme.max = Math.max(min + 1, max);\r\n\r\n\t\t// PRIVATE\r\n\t\tme._table = [];\r\n\t\tme._timestamps = {\r\n\t\t\tdata: timestamps,\r\n\t\t\tdatasets: datasets,\r\n\t\t\tlabels: labels\r\n\t\t};\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\t\tvar options = me.options;\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar timeOpts = options.time;\r\n\t\tvar timestamps = me._timestamps;\r\n\t\tvar ticks = [];\r\n\t\tvar capacity = me.getLabelCapacity(min);\r\n\t\tvar source = tickOpts.source;\r\n\t\tvar distribution = options.distribution;\r\n\t\tvar i, ilen, timestamp;\r\n\r\n\t\tif (source === 'data' || (source === 'auto' && distribution === 'series')) {\r\n\t\t\ttimestamps = timestamps.data;\r\n\t\t} else if (source === 'labels') {\r\n\t\t\ttimestamps = timestamps.labels;\r\n\t\t} else {\r\n\t\t\ttimestamps = generate(me, min, max, capacity);\r\n\t\t}\r\n\r\n\t\tif (options.bounds === 'ticks' && timestamps.length) {\r\n\t\t\tmin = timestamps[0];\r\n\t\t\tmax = timestamps[timestamps.length - 1];\r\n\t\t}\r\n\r\n\t\t// Enforce limits with user min/max options\r\n\t\tmin = parse(me, getMin(options)) || min;\r\n\t\tmax = parse(me, getMax(options)) || max;\r\n\r\n\t\t// Remove ticks outside the min/max range\r\n\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\r\n\t\t\ttimestamp = timestamps[i];\r\n\t\t\tif (timestamp >= min && timestamp <= max) {\r\n\t\t\t\tticks.push(timestamp);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.min = min;\r\n\t\tme.max = max;\r\n\r\n\t\t// PRIVATE\r\n\t\t// determineUnitForFormatting relies on the number of ticks so we don't use it when\r\n\t\t// autoSkip is enabled because we don't yet know what the final number of ticks will be\r\n\t\tme._unit = timeOpts.unit || (tickOpts.autoSkip\r\n\t\t\t? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, capacity)\r\n\t\t\t: determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\r\n\t\tme._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined\r\n\t\t\t: determineMajorUnit(me._unit);\r\n\t\tme._table = buildLookupTable(me._timestamps.data, min, max, distribution);\r\n\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\tticks.reverse();\r\n\t\t}\r\n\r\n\t\treturn ticksFromTimestamps(me, ticks, me._majorUnit);\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar data = me.chart.data;\r\n\t\tvar timeOpts = me.options.time;\r\n\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\r\n\t\tvar value = data.datasets[datasetIndex].data[index];\r\n\r\n\t\tif (helpers$1.isObject(value)) {\r\n\t\t\tlabel = me.getRightValue(value);\r\n\t\t}\r\n\t\tif (timeOpts.tooltipFormat) {\r\n\t\t\treturn adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\r\n\t\t}\r\n\t\tif (typeof label === 'string') {\r\n\t\t\treturn label;\r\n\t\t}\r\n\t\treturn adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\r\n\t},\r\n\r\n\t/**\r\n\t * Function to format an individual tick mark\r\n\t * @private\r\n\t */\r\n\ttickFormatFunction: function(time, index, ticks, format) {\r\n\t\tvar me = this;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar options = me.options;\r\n\t\tvar formats = options.time.displayFormats;\r\n\t\tvar minorFormat = formats[me._unit];\r\n\t\tvar majorUnit = me._majorUnit;\r\n\t\tvar majorFormat = formats[majorUnit];\r\n\t\tvar tick = ticks[index];\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar major = majorUnit && majorFormat && tick && tick.major;\r\n\t\tvar label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\r\n\t\tvar nestedTickOpts = major ? tickOpts.major : tickOpts.minor;\r\n\t\tvar formatter = resolve$5([\r\n\t\t\tnestedTickOpts.callback,\r\n\t\t\tnestedTickOpts.userCallback,\r\n\t\t\ttickOpts.callback,\r\n\t\t\ttickOpts.userCallback\r\n\t\t]);\r\n\r\n\t\treturn formatter ? formatter(label, index, ticks) : label;\r\n\t},\r\n\r\n\tconvertTicksToLabels: function(ticks) {\r\n\t\tvar labels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\tlabels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\r\n\t\t}\r\n\r\n\t\treturn labels;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetPixelForOffset: function(time) {\r\n\t\tvar me = this;\r\n\t\tvar offsets = me._offsets;\r\n\t\tvar pos = interpolate$1(me._table, 'time', time, 'pos');\r\n\t\treturn me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\r\n\t},\r\n\r\n\tgetPixelForValue: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar time = null;\r\n\r\n\t\tif (index !== undefined && datasetIndex !== undefined) {\r\n\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\r\n\t\t}\r\n\r\n\t\tif (time === null) {\r\n\t\t\ttime = parse(me, value);\r\n\t\t}\r\n\r\n\t\tif (time !== null) {\r\n\t\t\treturn me.getPixelForOffset(time);\r\n\t\t}\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.getTicks();\r\n\t\treturn index >= 0 && index < ticks.length ?\r\n\t\t\tthis.getPixelForOffset(ticks[index].value) :\r\n\t\t\tnull;\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar offsets = me._offsets;\r\n\t\tvar pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\r\n\t\tvar time = interpolate$1(me._table, 'pos', pos, 'time');\r\n\r\n\t\t// DEPRECATION, we should return time directly\r\n\t\treturn me._adapter._create(time);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLabelSize: function(label) {\r\n\t\tvar me = this;\r\n\t\tvar ticksOpts = me.options.ticks;\r\n\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\r\n\t\tvar angle = helpers$1.toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\r\n\t\tvar cosRotation = Math.cos(angle);\r\n\t\tvar sinRotation = Math.sin(angle);\r\n\t\tvar tickFontSize = valueOrDefault$d(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\r\n\r\n\t\treturn {\r\n\t\t\tw: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\r\n\t\t\th: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Crude approximation of what the label width might be\r\n\t * @private\r\n\t */\r\n\tgetLabelWidth: function(label) {\r\n\t\treturn this._getLabelSize(label).w;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetLabelCapacity: function(exampleTime) {\r\n\t\tvar me = this;\r\n\t\tvar timeOpts = me.options.time;\r\n\t\tvar displayFormats = timeOpts.displayFormats;\r\n\r\n\t\t// pick the longest format (milliseconds) for guestimation\r\n\t\tvar format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\r\n\t\tvar exampleLabel = me.tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\r\n\t\tvar size = me._getLabelSize(exampleLabel);\r\n\t\tvar capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h);\r\n\r\n\t\tif (me.options.offset) {\r\n\t\t\tcapacity--;\r\n\t\t}\r\n\r\n\t\treturn capacity > 0 ? capacity : 1;\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$4 = defaultConfig$4;\nscale_time._defaults = _defaults$4;\n\nvar scales = {\r\n\tcategory: scale_category,\r\n\tlinear: scale_linear,\r\n\tlogarithmic: scale_logarithmic,\r\n\tradialLinear: scale_radialLinear,\r\n\ttime: scale_time\r\n};\n\nvar FORMATS = {\r\n\tdatetime: 'MMM D, YYYY, h:mm:ss a',\r\n\tmillisecond: 'h:mm:ss.SSS a',\r\n\tsecond: 'h:mm:ss a',\r\n\tminute: 'h:mm a',\r\n\thour: 'hA',\r\n\tday: 'MMM D',\r\n\tweek: 'll',\r\n\tmonth: 'MMM YYYY',\r\n\tquarter: '[Q]Q - YYYY',\r\n\tyear: 'YYYY'\r\n};\r\n\r\ncore_adapters._date.override(typeof moment === 'function' ? {\r\n\t_id: 'moment', // DEBUG ONLY\r\n\r\n\tformats: function() {\r\n\t\treturn FORMATS;\r\n\t},\r\n\r\n\tparse: function(value, format) {\r\n\t\tif (typeof value === 'string' && typeof format === 'string') {\r\n\t\t\tvalue = moment(value, format);\r\n\t\t} else if (!(value instanceof moment)) {\r\n\t\t\tvalue = moment(value);\r\n\t\t}\r\n\t\treturn value.isValid() ? value.valueOf() : null;\r\n\t},\r\n\r\n\tformat: function(time, format) {\r\n\t\treturn moment(time).format(format);\r\n\t},\r\n\r\n\tadd: function(time, amount, unit) {\r\n\t\treturn moment(time).add(amount, unit).valueOf();\r\n\t},\r\n\r\n\tdiff: function(max, min, unit) {\r\n\t\treturn moment(max).diff(moment(min), unit);\r\n\t},\r\n\r\n\tstartOf: function(time, unit, weekday) {\r\n\t\ttime = moment(time);\r\n\t\tif (unit === 'isoWeek') {\r\n\t\t\treturn time.isoWeekday(weekday).valueOf();\r\n\t\t}\r\n\t\treturn time.startOf(unit).valueOf();\r\n\t},\r\n\r\n\tendOf: function(time, unit) {\r\n\t\treturn moment(time).endOf(unit).valueOf();\r\n\t},\r\n\r\n\t// DEPRECATIONS\r\n\r\n\t/**\r\n\t * Provided for backward compatibility with scale.getValueForPixel().\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t * @private\r\n\t */\r\n\t_create: function(time) {\r\n\t\treturn moment(time);\r\n\t},\r\n} : {});\n\ncore_defaults._set('global', {\r\n\tplugins: {\r\n\t\tfiller: {\r\n\t\t\tpropagate: true\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar mappers = {\r\n\tdataset: function(source) {\r\n\t\tvar index = source.fill;\r\n\t\tvar chart = source.chart;\r\n\t\tvar meta = chart.getDatasetMeta(index);\r\n\t\tvar visible = meta && chart.isDatasetVisible(index);\r\n\t\tvar points = (visible && meta.dataset._children) || [];\r\n\t\tvar length = points.length || 0;\r\n\r\n\t\treturn !length ? null : function(point, i) {\r\n\t\t\treturn (i < length && points[i]._view) || null;\r\n\t\t};\r\n\t},\r\n\r\n\tboundary: function(source) {\r\n\t\tvar boundary = source.boundary;\r\n\t\tvar x = boundary ? boundary.x : null;\r\n\t\tvar y = boundary ? boundary.y : null;\r\n\r\n\t\tif (helpers$1.isArray(boundary)) {\r\n\t\t\treturn function(point, i) {\r\n\t\t\t\treturn boundary[i];\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn function(point) {\r\n\t\t\treturn {\r\n\t\t\t\tx: x === null ? point.x : x,\r\n\t\t\t\ty: y === null ? point.y : y,\r\n\t\t\t};\r\n\t\t};\r\n\t}\r\n};\r\n\r\n// @todo if (fill[0] === '#')\r\nfunction decodeFill(el, index, count) {\r\n\tvar model = el._model || {};\r\n\tvar fill = model.fill;\r\n\tvar target;\r\n\r\n\tif (fill === undefined) {\r\n\t\tfill = !!model.backgroundColor;\r\n\t}\r\n\r\n\tif (fill === false || fill === null) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (fill === true) {\r\n\t\treturn 'origin';\r\n\t}\r\n\r\n\ttarget = parseFloat(fill, 10);\r\n\tif (isFinite(target) && Math.floor(target) === target) {\r\n\t\tif (fill[0] === '-' || fill[0] === '+') {\r\n\t\t\ttarget = index + target;\r\n\t\t}\r\n\r\n\t\tif (target === index || target < 0 || target >= count) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t}\r\n\r\n\tswitch (fill) {\r\n\t// compatibility\r\n\tcase 'bottom':\r\n\t\treturn 'start';\r\n\tcase 'top':\r\n\t\treturn 'end';\r\n\tcase 'zero':\r\n\t\treturn 'origin';\r\n\t// supported boundaries\r\n\tcase 'origin':\r\n\tcase 'start':\r\n\tcase 'end':\r\n\t\treturn fill;\r\n\t// invalid fill values\r\n\tdefault:\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nfunction computeLinearBoundary(source) {\r\n\tvar model = source.el._model || {};\r\n\tvar scale = source.el._scale || {};\r\n\tvar fill = source.fill;\r\n\tvar target = null;\r\n\tvar horizontal;\r\n\r\n\tif (isFinite(fill)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// Backward compatibility: until v3, we still need to support boundary values set on\r\n\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\r\n\t// controllers might still use it (e.g. the Smith chart).\r\n\r\n\tif (fill === 'start') {\r\n\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\r\n\t} else if (fill === 'end') {\r\n\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\r\n\t} else if (model.scaleZero !== undefined) {\r\n\t\ttarget = model.scaleZero;\r\n\t} else if (scale.getBasePixel) {\r\n\t\ttarget = scale.getBasePixel();\r\n\t}\r\n\r\n\tif (target !== undefined && target !== null) {\r\n\t\tif (target.x !== undefined && target.y !== undefined) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\tif (helpers$1.isFinite(target)) {\r\n\t\t\thorizontal = scale.isHorizontal();\r\n\t\t\treturn {\r\n\t\t\t\tx: horizontal ? target : null,\r\n\t\t\t\ty: horizontal ? null : target\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nfunction computeCircularBoundary(source) {\r\n\tvar scale = source.el._scale;\r\n\tvar options = scale.options;\r\n\tvar length = scale.chart.data.labels.length;\r\n\tvar fill = source.fill;\r\n\tvar target = [];\r\n\tvar start, end, center, i, point;\r\n\r\n\tif (!length) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstart = options.ticks.reverse ? scale.max : scale.min;\r\n\tend = options.ticks.reverse ? scale.min : scale.max;\r\n\tcenter = scale.getPointPositionForValue(0, start);\r\n\tfor (i = 0; i < length; ++i) {\r\n\t\tpoint = fill === 'start' || fill === 'end'\r\n\t\t\t? scale.getPointPositionForValue(i, fill === 'start' ? start : end)\r\n\t\t\t: scale.getBasePosition(i);\r\n\t\tif (options.gridLines.circular) {\r\n\t\t\tpoint.cx = center.x;\r\n\t\t\tpoint.cy = center.y;\r\n\t\t\tpoint.angle = scale.getIndexAngle(i) - Math.PI / 2;\r\n\t\t}\r\n\t\ttarget.push(point);\r\n\t}\r\n\treturn target;\r\n}\r\n\r\nfunction computeBoundary(source) {\r\n\tvar scale = source.el._scale || {};\r\n\r\n\tif (scale.getPointPositionForValue) {\r\n\t\treturn computeCircularBoundary(source);\r\n\t}\r\n\treturn computeLinearBoundary(source);\r\n}\r\n\r\nfunction resolveTarget(sources, index, propagate) {\r\n\tvar source = sources[index];\r\n\tvar fill = source.fill;\r\n\tvar visited = [index];\r\n\tvar target;\r\n\r\n\tif (!propagate) {\r\n\t\treturn fill;\r\n\t}\r\n\r\n\twhile (fill !== false && visited.indexOf(fill) === -1) {\r\n\t\tif (!isFinite(fill)) {\r\n\t\t\treturn fill;\r\n\t\t}\r\n\r\n\t\ttarget = sources[fill];\r\n\t\tif (!target) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (target.visible) {\r\n\t\t\treturn fill;\r\n\t\t}\r\n\r\n\t\tvisited.push(fill);\r\n\t\tfill = target.fill;\r\n\t}\r\n\r\n\treturn false;\r\n}\r\n\r\nfunction createMapper(source) {\r\n\tvar fill = source.fill;\r\n\tvar type = 'dataset';\r\n\r\n\tif (fill === false) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (!isFinite(fill)) {\r\n\t\ttype = 'boundary';\r\n\t}\r\n\r\n\treturn mappers[type](source);\r\n}\r\n\r\nfunction isDrawable(point) {\r\n\treturn point && !point.skip;\r\n}\r\n\r\nfunction drawArea(ctx, curve0, curve1, len0, len1) {\r\n\tvar i, cx, cy, r;\r\n\r\n\tif (!len0 || !len1) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// building first area curve (normal)\r\n\tctx.moveTo(curve0[0].x, curve0[0].y);\r\n\tfor (i = 1; i < len0; ++i) {\r\n\t\thelpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\r\n\t}\r\n\r\n\tif (curve1[0].angle !== undefined) {\r\n\t\tcx = curve1[0].cx;\r\n\t\tcy = curve1[0].cy;\r\n\t\tr = Math.sqrt(Math.pow(curve1[0].x - cx, 2) + Math.pow(curve1[0].y - cy, 2));\r\n\t\tfor (i = len1 - 1; i > 0; --i) {\r\n\t\t\tctx.arc(cx, cy, r, curve1[i].angle, curve1[i - 1].angle, true);\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\t// joining the two area curves\r\n\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\r\n\r\n\t// building opposite area curve (reverse)\r\n\tfor (i = len1 - 1; i > 0; --i) {\r\n\t\thelpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\r\n\t}\r\n}\r\n\r\nfunction doFill(ctx, points, mapper, view, color, loop) {\r\n\tvar count = points.length;\r\n\tvar span = view.spanGaps;\r\n\tvar curve0 = [];\r\n\tvar curve1 = [];\r\n\tvar len0 = 0;\r\n\tvar len1 = 0;\r\n\tvar i, ilen, index, p0, p1, d0, d1, loopOffset;\r\n\r\n\tctx.beginPath();\r\n\r\n\tfor (i = 0, ilen = count; i < ilen; ++i) {\r\n\t\tindex = i % count;\r\n\t\tp0 = points[index]._view;\r\n\t\tp1 = mapper(p0, index, view);\r\n\t\td0 = isDrawable(p0);\r\n\t\td1 = isDrawable(p1);\r\n\r\n\t\tif (loop && loopOffset === undefined && d0) {\r\n\t\t\tloopOffset = i + 1;\r\n\t\t\tilen = count + loopOffset;\r\n\t\t}\r\n\r\n\t\tif (d0 && d1) {\r\n\t\t\tlen0 = curve0.push(p0);\r\n\t\t\tlen1 = curve1.push(p1);\r\n\t\t} else if (len0 && len1) {\r\n\t\t\tif (!span) {\r\n\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\r\n\t\t\t\tlen0 = len1 = 0;\r\n\t\t\t\tcurve0 = [];\r\n\t\t\t\tcurve1 = [];\r\n\t\t\t} else {\r\n\t\t\t\tif (d0) {\r\n\t\t\t\t\tcurve0.push(p0);\r\n\t\t\t\t}\r\n\t\t\t\tif (d1) {\r\n\t\t\t\t\tcurve1.push(p1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdrawArea(ctx, curve0, curve1, len0, len1);\r\n\r\n\tctx.closePath();\r\n\tctx.fillStyle = color;\r\n\tctx.fill();\r\n}\r\n\r\nvar plugin_filler = {\r\n\tid: 'filler',\r\n\r\n\tafterDatasetsUpdate: function(chart, options) {\r\n\t\tvar count = (chart.data.datasets || []).length;\r\n\t\tvar propagate = options.propagate;\r\n\t\tvar sources = [];\r\n\t\tvar meta, i, el, source;\r\n\r\n\t\tfor (i = 0; i < count; ++i) {\r\n\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\tel = meta.dataset;\r\n\t\t\tsource = null;\r\n\r\n\t\t\tif (el && el._model && el instanceof elements.Line) {\r\n\t\t\t\tsource = {\r\n\t\t\t\t\tvisible: chart.isDatasetVisible(i),\r\n\t\t\t\t\tfill: decodeFill(el, i, count),\r\n\t\t\t\t\tchart: chart,\r\n\t\t\t\t\tel: el\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tmeta.$filler = source;\r\n\t\t\tsources.push(source);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < count; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!source) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tsource.fill = resolveTarget(sources, i, propagate);\r\n\t\t\tsource.boundary = computeBoundary(source);\r\n\t\t\tsource.mapper = createMapper(source);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeDatasetsDraw: function(chart) {\r\n\t\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\t\tvar ctx = chart.ctx;\r\n\t\tvar meta, i, el, view, points, mapper, color;\r\n\r\n\t\tfor (i = metasets.length - 1; i >= 0; --i) {\r\n\t\t\tmeta = metasets[i].$filler;\r\n\r\n\t\t\tif (!meta || !meta.visible) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tel = meta.el;\r\n\t\t\tview = el._view;\r\n\t\t\tpoints = el._children || [];\r\n\t\t\tmapper = meta.mapper;\r\n\t\t\tcolor = view.backgroundColor || core_defaults.global.defaultColor;\r\n\r\n\t\t\tif (mapper && color && points.length) {\r\n\t\t\t\thelpers$1.canvas.clipArea(ctx, chart.chartArea);\r\n\t\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\r\n\t\t\t\thelpers$1.canvas.unclipArea(ctx);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar getRtlHelper$1 = helpers$1.rtl.getRtlAdapter;\r\nvar noop$1 = helpers$1.noop;\r\nvar valueOrDefault$e = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('global', {\r\n\tlegend: {\r\n\t\tdisplay: true,\r\n\t\tposition: 'top',\r\n\t\talign: 'center',\r\n\t\tfullWidth: true,\r\n\t\treverse: false,\r\n\t\tweight: 1000,\r\n\r\n\t\t// a callback that will handle\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.datasetIndex;\r\n\t\t\tvar ci = this.chart;\r\n\t\t\tvar meta = ci.getDatasetMeta(index);\r\n\r\n\t\t\t// See controller.isDatasetVisible comment\r\n\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\r\n\r\n\t\t\t// We hid a dataset ... rerender the chart\r\n\t\t\tci.update();\r\n\t\t},\r\n\r\n\t\tonHover: null,\r\n\t\tonLeave: null,\r\n\r\n\t\tlabels: {\r\n\t\t\tboxWidth: 40,\r\n\t\t\tpadding: 10,\r\n\t\t\t// Generates labels shown in the legend\r\n\t\t\t// Valid properties to return:\r\n\t\t\t// text : text to display\r\n\t\t\t// fillStyle : fill of coloured box\r\n\t\t\t// strokeStyle: stroke of coloured box\r\n\t\t\t// hidden : if this legend item refers to a hidden item\r\n\t\t\t// lineCap : cap style for line\r\n\t\t\t// lineDash\r\n\t\t\t// lineDashOffset :\r\n\t\t\t// lineJoin :\r\n\t\t\t// lineWidth :\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar datasets = chart.data.datasets;\r\n\t\t\t\tvar options = chart.options.legend || {};\r\n\t\t\t\tvar usePointStyle = options.labels && options.labels.usePointStyle;\r\n\r\n\t\t\t\treturn chart._getSortedDatasetMetas().map(function(meta) {\r\n\t\t\t\t\tvar style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\ttext: datasets[meta.index].label,\r\n\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(meta.index),\r\n\t\t\t\t\t\tlineCap: style.borderCapStyle,\r\n\t\t\t\t\t\tlineDash: style.borderDash,\r\n\t\t\t\t\t\tlineDashOffset: style.borderDashOffset,\r\n\t\t\t\t\t\tlineJoin: style.borderJoinStyle,\r\n\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\tpointStyle: style.pointStyle,\r\n\t\t\t\t\t\trotation: style.rotation,\r\n\r\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\r\n\t\t\t\t\t\tdatasetIndex: meta.index\r\n\t\t\t\t\t};\r\n\t\t\t\t}, this);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; i++) {\r\n\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\tlistItemSpan.style.backgroundColor = datasets[i].backgroundColor;\r\n\t\t\tif (datasets[i].label) {\r\n\t\t\t\tlistItem.appendChild(document.createTextNode(datasets[i].label));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t}\r\n});\r\n\r\n/**\r\n * Helper function to get the box width based on the usePointStyle option\r\n * @param {object} labelopts - the label options on the legend\r\n * @param {number} fontSize - the label font size\r\n * @return {number} width of the color box area\r\n */\r\nfunction getBoxWidth(labelOpts, fontSize) {\r\n\treturn labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ?\r\n\t\tfontSize :\r\n\t\tlabelOpts.boxWidth;\r\n}\r\n\r\n/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\r\nvar Legend = core_element.extend({\r\n\r\n\tinitialize: function(config) {\r\n\t\tvar me = this;\r\n\t\thelpers$1.extend(me, config);\r\n\r\n\t\t// Contains hit boxes for each dataset (in dataset order)\r\n\t\tme.legendHitBoxes = [];\r\n\r\n\t\t/**\r\n \t\t * @private\r\n \t\t */\r\n\t\tme._hoveredItem = null;\r\n\r\n\t\t// Are we in doughnut mode which has a different data type\r\n\t\tme.doughnutMode = false;\r\n\t},\r\n\r\n\t// These methods are ordered by lifecycle. Utilities then follow.\r\n\t// Any function defined here is inherited by all legend types.\r\n\t// Any function can be extended by the legend type\r\n\r\n\tbeforeUpdate: noop$1,\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = margins;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\t\t// Labels\r\n\t\tme.beforeBuildLabels();\r\n\t\tme.buildLabels();\r\n\t\tme.afterBuildLabels();\r\n\r\n\t\t// Fit\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\t\t//\r\n\t\tme.afterUpdate();\r\n\r\n\t\treturn me.minSize;\r\n\t},\r\n\tafterUpdate: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: noop$1,\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\r\n\t\t// Reset minSize\r\n\t\tme.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\t},\r\n\tafterSetDimensions: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeBuildLabels: noop$1,\r\n\tbuildLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar labelOpts = me.options.labels || {};\r\n\t\tvar legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\r\n\r\n\t\tif (labelOpts.filter) {\r\n\t\t\tlegendItems = legendItems.filter(function(item) {\r\n\t\t\t\treturn labelOpts.filter(item, me.chart.data);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (me.options.reverse) {\r\n\t\t\tlegendItems.reverse();\r\n\t\t}\r\n\r\n\t\tme.legendItems = legendItems;\r\n\t},\r\n\tafterBuildLabels: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeFit: noop$1,\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar labelOpts = opts.labels;\r\n\t\tvar display = opts.display;\r\n\r\n\t\tvar ctx = me.ctx;\r\n\r\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\r\n\t\tvar fontSize = labelFont.size;\r\n\r\n\t\t// Reset hit boxes\r\n\t\tvar hitboxes = me.legendHitBoxes = [];\r\n\r\n\t\tvar minSize = me.minSize;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tminSize.width = me.maxWidth; // fill all the width\r\n\t\t\tminSize.height = display ? 10 : 0;\r\n\t\t} else {\r\n\t\t\tminSize.width = display ? 10 : 0;\r\n\t\t\tminSize.height = me.maxHeight; // fill all the height\r\n\t\t}\r\n\r\n\t\t// Increase sizes here\r\n\t\tif (!display) {\r\n\t\t\tme.width = minSize.width = me.height = minSize.height = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tctx.font = labelFont.string;\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\t// Labels\r\n\r\n\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\r\n\t\t\tvar lineWidths = me.lineWidths = [0];\r\n\t\t\tvar totalHeight = 0;\r\n\r\n\t\t\tctx.textAlign = 'left';\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\r\n\r\n\t\t\t\tif (i === 0 || lineWidths[lineWidths.length - 1] + width + 2 * labelOpts.padding > minSize.width) {\r\n\t\t\t\t\ttotalHeight += fontSize + labelOpts.padding;\r\n\t\t\t\t\tlineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\r\n\t\t\t\thitboxes[i] = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: width,\r\n\t\t\t\t\theight: fontSize\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\r\n\t\t\t});\r\n\r\n\t\t\tminSize.height += totalHeight;\r\n\r\n\t\t} else {\r\n\t\t\tvar vPadding = labelOpts.padding;\r\n\t\t\tvar columnWidths = me.columnWidths = [];\r\n\t\t\tvar columnHeights = me.columnHeights = [];\r\n\t\t\tvar totalWidth = labelOpts.padding;\r\n\t\t\tvar currentColWidth = 0;\r\n\t\t\tvar currentColHeight = 0;\r\n\r\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\r\n\r\n\t\t\t\t// If too tall, go to new column\r\n\t\t\t\tif (i > 0 && currentColHeight + fontSize + 2 * vPadding > minSize.height) {\r\n\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\r\n\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\r\n\t\t\t\t\tcolumnHeights.push(currentColHeight);\r\n\t\t\t\t\tcurrentColWidth = 0;\r\n\t\t\t\t\tcurrentColHeight = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Get max width\r\n\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\r\n\t\t\t\tcurrentColHeight += fontSize + vPadding;\r\n\r\n\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\r\n\t\t\t\thitboxes[i] = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: itemWidth,\r\n\t\t\t\t\theight: fontSize\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\ttotalWidth += currentColWidth;\r\n\t\t\tcolumnWidths.push(currentColWidth);\r\n\t\t\tcolumnHeights.push(currentColHeight);\r\n\t\t\tminSize.width += totalWidth;\r\n\t\t}\r\n\r\n\t\tme.width = minSize.width;\r\n\t\tme.height = minSize.height;\r\n\t},\r\n\tafterFit: noop$1,\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\r\n\t},\r\n\r\n\t// Actually draw the legend on the canvas\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar labelOpts = opts.labels;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor;\r\n\t\tvar lineDefault = globalDefaults.elements.line;\r\n\t\tvar legendHeight = me.height;\r\n\t\tvar columnHeights = me.columnHeights;\r\n\t\tvar legendWidth = me.width;\r\n\t\tvar lineWidths = me.lineWidths;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar rtlHelper = getRtlHelper$1(opts.rtl, me.left, me.minSize.width);\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar fontColor = valueOrDefault$e(labelOpts.fontColor, globalDefaults.defaultFontColor);\r\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\r\n\t\tvar fontSize = labelFont.size;\r\n\t\tvar cursor;\r\n\r\n\t\t// Canvas setup\r\n\t\tctx.textAlign = rtlHelper.textAlign('left');\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.lineWidth = 0.5;\r\n\t\tctx.strokeStyle = fontColor; // for strikethrough effect\r\n\t\tctx.fillStyle = fontColor; // render in correct colour\r\n\t\tctx.font = labelFont.string;\r\n\r\n\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\tvar hitboxes = me.legendHitBoxes;\r\n\r\n\t\t// current position\r\n\t\tvar drawLegendBox = function(x, y, legendItem) {\r\n\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Set the ctx for the box\r\n\t\t\tctx.save();\r\n\r\n\t\t\tvar lineWidth = valueOrDefault$e(legendItem.lineWidth, lineDefault.borderWidth);\r\n\t\t\tctx.fillStyle = valueOrDefault$e(legendItem.fillStyle, defaultColor);\r\n\t\t\tctx.lineCap = valueOrDefault$e(legendItem.lineCap, lineDefault.borderCapStyle);\r\n\t\t\tctx.lineDashOffset = valueOrDefault$e(legendItem.lineDashOffset, lineDefault.borderDashOffset);\r\n\t\t\tctx.lineJoin = valueOrDefault$e(legendItem.lineJoin, lineDefault.borderJoinStyle);\r\n\t\t\tctx.lineWidth = lineWidth;\r\n\t\t\tctx.strokeStyle = valueOrDefault$e(legendItem.strokeStyle, defaultColor);\r\n\r\n\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\t// IE 9 and 10 do not support line dash\r\n\t\t\t\tctx.setLineDash(valueOrDefault$e(legendItem.lineDash, lineDefault.borderDash));\r\n\t\t\t}\r\n\r\n\t\t\tif (labelOpts && labelOpts.usePointStyle) {\r\n\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\r\n\t\t\t\t// x and y to be center of figure (instead of top left)\r\n\t\t\t\tvar radius = boxWidth * Math.SQRT2 / 2;\r\n\t\t\t\tvar centerX = rtlHelper.xPlus(x, boxWidth / 2);\r\n\t\t\t\tvar centerY = y + fontSize / 2;\r\n\r\n\t\t\t\t// Draw pointStyle as legend symbol\r\n\t\t\t\thelpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY, legendItem.rotation);\r\n\t\t\t} else {\r\n\t\t\t\t// Draw box as legend symbol\r\n\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\r\n\t\t\t\tif (lineWidth !== 0) {\r\n\t\t\t\t\tctx.strokeRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tctx.restore();\r\n\t\t};\r\n\r\n\t\tvar fillText = function(x, y, legendItem, textWidth) {\r\n\t\t\tvar halfFontSize = fontSize / 2;\r\n\t\t\tvar xLeft = rtlHelper.xPlus(x, boxWidth + halfFontSize);\r\n\t\t\tvar yMiddle = y + halfFontSize;\r\n\r\n\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\r\n\r\n\t\t\tif (legendItem.hidden) {\r\n\t\t\t\t// Strikethrough the text if hidden\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.lineWidth = 2;\r\n\t\t\t\tctx.moveTo(xLeft, yMiddle);\r\n\t\t\t\tctx.lineTo(rtlHelper.xPlus(xLeft, textWidth), yMiddle);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar alignmentOffset = function(dimension, blockSize) {\r\n\t\t\tswitch (opts.align) {\r\n\t\t\tcase 'start':\r\n\t\t\t\treturn labelOpts.padding;\r\n\t\t\tcase 'end':\r\n\t\t\t\treturn dimension - blockSize;\r\n\t\t\tdefault: // center\r\n\t\t\t\treturn (dimension - blockSize + labelOpts.padding) / 2;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Horizontal\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tif (isHorizontal) {\r\n\t\t\tcursor = {\r\n\t\t\t\tx: me.left + alignmentOffset(legendWidth, lineWidths[0]),\r\n\t\t\t\ty: me.top + labelOpts.padding,\r\n\t\t\t\tline: 0\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tcursor = {\r\n\t\t\t\tx: me.left + labelOpts.padding,\r\n\t\t\t\ty: me.top + alignmentOffset(legendHeight, columnHeights[0]),\r\n\t\t\t\tline: 0\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\thelpers$1.rtl.overrideTextDirection(me.ctx, opts.textDirection);\r\n\r\n\t\tvar itemHeight = fontSize + labelOpts.padding;\r\n\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\r\n\t\t\tvar width = boxWidth + (fontSize / 2) + textWidth;\r\n\t\t\tvar x = cursor.x;\r\n\t\t\tvar y = cursor.y;\r\n\r\n\t\t\trtlHelper.setWidth(me.minSize.width);\r\n\r\n\t\t\t// Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\r\n\t\t\t// instead of me.right and me.bottom because me.width and me.height\r\n\t\t\t// may have been changed since me.minSize was calculated\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tif (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\r\n\t\t\t\t\ty = cursor.y += itemHeight;\r\n\t\t\t\t\tcursor.line++;\r\n\t\t\t\t\tx = cursor.x = me.left + alignmentOffset(legendWidth, lineWidths[cursor.line]);\r\n\t\t\t\t}\r\n\t\t\t} else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\r\n\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\r\n\t\t\t\tcursor.line++;\r\n\t\t\t\ty = cursor.y = me.top + alignmentOffset(legendHeight, columnHeights[cursor.line]);\r\n\t\t\t}\r\n\r\n\t\t\tvar realX = rtlHelper.x(x);\r\n\r\n\t\t\tdrawLegendBox(realX, y, legendItem);\r\n\r\n\t\t\thitboxes[i].left = rtlHelper.leftForLtr(realX, hitboxes[i].width);\r\n\t\t\thitboxes[i].top = y;\r\n\r\n\t\t\t// Fill the actual label\r\n\t\t\tfillText(realX, y, legendItem, textWidth);\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tcursor.x += width + labelOpts.padding;\r\n\t\t\t} else {\r\n\t\t\t\tcursor.y += itemHeight;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.rtl.restoreTextDirection(me.ctx, opts.textDirection);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLegendItemAt: function(x, y) {\r\n\t\tvar me = this;\r\n\t\tvar i, hitBox, lh;\r\n\r\n\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\r\n\t\t\t// See if we are touching one of the dataset boxes\r\n\t\t\tlh = me.legendHitBoxes;\r\n\t\t\tfor (i = 0; i < lh.length; ++i) {\r\n\t\t\t\thitBox = lh[i];\r\n\r\n\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\r\n\t\t\t\t\t// Touching an element\r\n\t\t\t\t\treturn me.legendItems[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event - The event to handle\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\r\n\t\tvar hoveredItem;\r\n\r\n\t\tif (type === 'mousemove') {\r\n\t\t\tif (!opts.onHover && !opts.onLeave) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else if (type === 'click') {\r\n\t\t\tif (!opts.onClick) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Chart event already has relative position in it\r\n\t\thoveredItem = me._getLegendItemAt(e.x, e.y);\r\n\r\n\t\tif (type === 'click') {\r\n\t\t\tif (hoveredItem && opts.onClick) {\r\n\t\t\t\t// use e.native for backwards compatibility\r\n\t\t\t\topts.onClick.call(me, e.native, hoveredItem);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (opts.onLeave && hoveredItem !== me._hoveredItem) {\r\n\t\t\t\tif (me._hoveredItem) {\r\n\t\t\t\t\topts.onLeave.call(me, e.native, me._hoveredItem);\r\n\t\t\t\t}\r\n\t\t\t\tme._hoveredItem = hoveredItem;\r\n\t\t\t}\r\n\r\n\t\t\tif (opts.onHover && hoveredItem) {\r\n\t\t\t\t// use e.native for backwards compatibility\r\n\t\t\t\topts.onHover.call(me, e.native, hoveredItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction createNewLegendAndAttach(chart, legendOpts) {\r\n\tvar legend = new Legend({\r\n\t\tctx: chart.ctx,\r\n\t\toptions: legendOpts,\r\n\t\tchart: chart\r\n\t});\r\n\r\n\tcore_layouts.configure(chart, legend, legendOpts);\r\n\tcore_layouts.addBox(chart, legend);\r\n\tchart.legend = legend;\r\n}\r\n\r\nvar plugin_legend = {\r\n\tid: 'legend',\r\n\r\n\t/**\r\n\t * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\r\n\t * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\r\n\t * the plugin, which one will be re-exposed in the chart.js file.\r\n\t * https://github.com/chartjs/Chart.js/pull/2640\r\n\t * @private\r\n\t */\r\n\t_element: Legend,\r\n\r\n\tbeforeInit: function(chart) {\r\n\t\tvar legendOpts = chart.options.legend;\r\n\r\n\t\tif (legendOpts) {\r\n\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeUpdate: function(chart) {\r\n\t\tvar legendOpts = chart.options.legend;\r\n\t\tvar legend = chart.legend;\r\n\r\n\t\tif (legendOpts) {\r\n\t\t\thelpers$1.mergeIf(legendOpts, core_defaults.global.legend);\r\n\r\n\t\t\tif (legend) {\r\n\t\t\t\tcore_layouts.configure(chart, legend, legendOpts);\r\n\t\t\t\tlegend.options = legendOpts;\r\n\t\t\t} else {\r\n\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\r\n\t\t\t}\r\n\t\t} else if (legend) {\r\n\t\t\tcore_layouts.removeBox(chart, legend);\r\n\t\t\tdelete chart.legend;\r\n\t\t}\r\n\t},\r\n\r\n\tafterEvent: function(chart, e) {\r\n\t\tvar legend = chart.legend;\r\n\t\tif (legend) {\r\n\t\t\tlegend.handleEvent(e);\r\n\t\t}\r\n\t}\r\n};\n\nvar noop$2 = helpers$1.noop;\r\n\r\ncore_defaults._set('global', {\r\n\ttitle: {\r\n\t\tdisplay: false,\r\n\t\tfontStyle: 'bold',\r\n\t\tfullWidth: true,\r\n\t\tpadding: 10,\r\n\t\tposition: 'top',\r\n\t\ttext: '',\r\n\t\tweight: 2000 // by default greater than legend (1000) to be above\r\n\t}\r\n});\r\n\r\n/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\r\nvar Title = core_element.extend({\r\n\tinitialize: function(config) {\r\n\t\tvar me = this;\r\n\t\thelpers$1.extend(me, config);\r\n\r\n\t\t// Contains hit boxes for each dataset (in dataset order)\r\n\t\tme.legendHitBoxes = [];\r\n\t},\r\n\r\n\t// These methods are ordered by lifecycle. Utilities then follow.\r\n\r\n\tbeforeUpdate: noop$2,\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = margins;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\t\t// Labels\r\n\t\tme.beforeBuildLabels();\r\n\t\tme.buildLabels();\r\n\t\tme.afterBuildLabels();\r\n\r\n\t\t// Fit\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\t\t//\r\n\t\tme.afterUpdate();\r\n\r\n\t\treturn me.minSize;\r\n\r\n\t},\r\n\tafterUpdate: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: noop$2,\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\r\n\t\t// Reset minSize\r\n\t\tme.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\t},\r\n\tafterSetDimensions: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeBuildLabels: noop$2,\r\n\tbuildLabels: noop$2,\r\n\tafterBuildLabels: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeFit: noop$2,\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar minSize = me.minSize = {};\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar lineCount, textSize;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\tme.width = minSize.width = me.height = minSize.height = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\r\n\t\ttextSize = lineCount * helpers$1.options._parseFont(opts).lineHeight + opts.padding * 2;\r\n\r\n\t\tme.width = minSize.width = isHorizontal ? me.maxWidth : textSize;\r\n\t\tme.height = minSize.height = isHorizontal ? textSize : me.maxHeight;\r\n\t},\r\n\tafterFit: noop$2,\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\tvar pos = this.options.position;\r\n\t\treturn pos === 'top' || pos === 'bottom';\r\n\t},\r\n\r\n\t// Actually draw the title block on the canvas\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar fontOpts = helpers$1.options._parseFont(opts);\r\n\t\tvar lineHeight = fontOpts.lineHeight;\r\n\t\tvar offset = lineHeight / 2 + opts.padding;\r\n\t\tvar rotation = 0;\r\n\t\tvar top = me.top;\r\n\t\tvar left = me.left;\r\n\t\tvar bottom = me.bottom;\r\n\t\tvar right = me.right;\r\n\t\tvar maxWidth, titleX, titleY;\r\n\r\n\t\tctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\r\n\t\tctx.font = fontOpts.string;\r\n\r\n\t\t// Horizontal\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\r\n\t\t\ttitleY = top + offset;\r\n\t\t\tmaxWidth = right - left;\r\n\t\t} else {\r\n\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\r\n\t\t\ttitleY = top + ((bottom - top) / 2);\r\n\t\t\tmaxWidth = bottom - top;\r\n\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.translate(titleX, titleY);\r\n\t\tctx.rotate(rotation);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\r\n\t\tvar text = opts.text;\r\n\t\tif (helpers$1.isArray(text)) {\r\n\t\t\tvar y = 0;\r\n\t\t\tfor (var i = 0; i < text.length; ++i) {\r\n\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\r\n\t\t\t\ty += lineHeight;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tctx.fillText(text, 0, 0, maxWidth);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\r\n\r\nfunction createNewTitleBlockAndAttach(chart, titleOpts) {\r\n\tvar title = new Title({\r\n\t\tctx: chart.ctx,\r\n\t\toptions: titleOpts,\r\n\t\tchart: chart\r\n\t});\r\n\r\n\tcore_layouts.configure(chart, title, titleOpts);\r\n\tcore_layouts.addBox(chart, title);\r\n\tchart.titleBlock = title;\r\n}\r\n\r\nvar plugin_title = {\r\n\tid: 'title',\r\n\r\n\t/**\r\n\t * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\r\n\t * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\r\n\t * the plugin, which one will be re-exposed in the chart.js file.\r\n\t * https://github.com/chartjs/Chart.js/pull/2640\r\n\t * @private\r\n\t */\r\n\t_element: Title,\r\n\r\n\tbeforeInit: function(chart) {\r\n\t\tvar titleOpts = chart.options.title;\r\n\r\n\t\tif (titleOpts) {\r\n\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeUpdate: function(chart) {\r\n\t\tvar titleOpts = chart.options.title;\r\n\t\tvar titleBlock = chart.titleBlock;\r\n\r\n\t\tif (titleOpts) {\r\n\t\t\thelpers$1.mergeIf(titleOpts, core_defaults.global.title);\r\n\r\n\t\t\tif (titleBlock) {\r\n\t\t\t\tcore_layouts.configure(chart, titleBlock, titleOpts);\r\n\t\t\t\ttitleBlock.options = titleOpts;\r\n\t\t\t} else {\r\n\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\r\n\t\t\t}\r\n\t\t} else if (titleBlock) {\r\n\t\t\tcore_layouts.removeBox(chart, titleBlock);\r\n\t\t\tdelete chart.titleBlock;\r\n\t\t}\r\n\t}\r\n};\n\nvar plugins = {};\r\nvar filler = plugin_filler;\r\nvar legend = plugin_legend;\r\nvar title = plugin_title;\nplugins.filler = filler;\nplugins.legend = legend;\nplugins.title = title;\n\n/**\r\n * @namespace Chart\r\n */\r\n\r\n\r\ncore_controller.helpers = helpers$1;\r\n\r\n// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\r\ncore_helpers();\r\n\r\ncore_controller._adapters = core_adapters;\r\ncore_controller.Animation = core_animation;\r\ncore_controller.animationService = core_animations;\r\ncore_controller.controllers = controllers;\r\ncore_controller.DatasetController = core_datasetController;\r\ncore_controller.defaults = core_defaults;\r\ncore_controller.Element = core_element;\r\ncore_controller.elements = elements;\r\ncore_controller.Interaction = core_interaction;\r\ncore_controller.layouts = core_layouts;\r\ncore_controller.platform = platform;\r\ncore_controller.plugins = core_plugins;\r\ncore_controller.Scale = core_scale;\r\ncore_controller.scaleService = core_scaleService;\r\ncore_controller.Ticks = core_ticks;\r\ncore_controller.Tooltip = core_tooltip;\r\n\r\n// Register built-in scales\r\n\r\ncore_controller.helpers.each(scales, function(scale, type) {\r\n\tcore_controller.scaleService.registerScaleType(type, scale, scale._defaults);\r\n});\r\n\r\n// Load to register built-in adapters (as side effects)\r\n\r\n\r\n// Loading built-in plugins\r\n\r\nfor (var k in plugins) {\r\n\tif (plugins.hasOwnProperty(k)) {\r\n\t\tcore_controller.plugins.register(plugins[k]);\r\n\t}\r\n}\r\n\r\ncore_controller.platform.initialize();\r\n\r\nvar src = core_controller;\r\nif (typeof window !== 'undefined') {\r\n\twindow.Chart = core_controller;\r\n}\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Chart\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Chart = core_controller;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Legend\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Legend = plugins.legend._element;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Title\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Title = plugins.title._element;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.plugins instead\r\n * @namespace Chart.pluginService\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.pluginService = core_controller.plugins;\r\n\r\n/**\r\n * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\r\n * effect, instead simply create/register plugins via plain JavaScript objects.\r\n * @interface Chart.PluginBase\r\n * @deprecated since version 2.5.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.PluginBase = core_controller.Element.extend({});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\r\n * @namespace Chart.canvasHelpers\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.canvasHelpers = core_controller.helpers.canvas;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.layouts instead.\r\n * @namespace Chart.layoutService\r\n * @deprecated since version 2.7.3\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.layoutService = core_controller.layouts;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.LinearScaleBase\r\n * @deprecated since version 2.8\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.LinearScaleBase = scale_linearbase;\r\n\r\n/**\r\n * Provided for backward compatibility, instead we should create a new Chart\r\n * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n */\r\ncore_controller.helpers.each(\r\n\t[\r\n\t\t'Bar',\r\n\t\t'Bubble',\r\n\t\t'Doughnut',\r\n\t\t'Line',\r\n\t\t'PolarArea',\r\n\t\t'Radar',\r\n\t\t'Scatter'\r\n\t],\r\n\tfunction(klass) {\r\n\t\tcore_controller[klass] = function(ctx, cfg) {\r\n\t\t\treturn new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\r\n\t\t\t\ttype: klass.charAt(0).toLowerCase() + klass.slice(1)\r\n\t\t\t}));\r\n\t\t};\r\n\t}\r\n);\n\nreturn src;\n\n})));\n","/*!\n * chartjs-plugin-datalabels v1.0.0\n * https://chartjs-plugin-datalabels.netlify.app\n * (c) 2017-2021 chartjs-plugin-datalabels contributors\n * Released under the MIT license\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('chart.js')) :\ntypeof define === 'function' && define.amd ? define(['chart.js'], factory) :\n(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ChartDataLabels = factory(global.Chart));\n}(this, (function (Chart) { 'use strict';\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar Chart__default = /*#__PURE__*/_interopDefaultLegacy(Chart);\n\nvar helpers$4 = Chart__default['default'].helpers;\n\nvar devicePixelRatio = (function() {\n if (typeof window !== 'undefined') {\n if (window.devicePixelRatio) {\n return window.devicePixelRatio;\n }\n\n // devicePixelRatio is undefined on IE10\n // https://stackoverflow.com/a/20204180/8837887\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/85\n var screen = window.screen;\n if (screen) {\n return (screen.deviceXDPI || 1) / (screen.logicalXDPI || 1);\n }\n }\n\n return 1;\n}());\n\nvar utils = {\n // @todo move this in Chart.helpers.toTextLines\n toTextLines: function(inputs) {\n var lines = [];\n var input;\n\n inputs = [].concat(inputs);\n while (inputs.length) {\n input = inputs.pop();\n if (typeof input === 'string') {\n lines.unshift.apply(lines, input.split('\\n'));\n } else if (Array.isArray(input)) {\n inputs.push.apply(inputs, input);\n } else if (!helpers$4.isNullOrUndef(inputs)) {\n lines.unshift('' + input);\n }\n }\n\n return lines;\n },\n\n // @todo move this method in Chart.helpers.canvas.toFont (deprecates helpers.fontString)\n // @see https://developer.mozilla.org/en-US/docs/Web/CSS/font\n toFontString: function(font) {\n if (!font || helpers$4.isNullOrUndef(font.size) || helpers$4.isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n + (font.weight ? font.weight + ' ' : '')\n + font.size + 'px '\n + font.family;\n },\n\n // @todo move this in Chart.helpers.canvas.textSize\n // @todo cache calls of measureText if font doesn't change?!\n textSize: function(ctx, lines, font) {\n var items = [].concat(lines);\n var ilen = items.length;\n var prev = ctx.font;\n var width = 0;\n var i;\n\n ctx.font = font.string;\n\n for (i = 0; i < ilen; ++i) {\n width = Math.max(ctx.measureText(items[i]).width, width);\n }\n\n ctx.font = prev;\n\n return {\n height: ilen * font.lineHeight,\n width: width\n };\n },\n\n // @todo move this method in Chart.helpers.options.toFont\n parseFont: function(value) {\n var global = Chart__default['default'].defaults.global;\n var size = helpers$4.valueOrDefault(value.size, global.defaultFontSize);\n var font = {\n family: helpers$4.valueOrDefault(value.family, global.defaultFontFamily),\n lineHeight: helpers$4.options.toLineHeight(value.lineHeight, size),\n size: size,\n style: helpers$4.valueOrDefault(value.style, global.defaultFontStyle),\n weight: helpers$4.valueOrDefault(value.weight, null),\n string: ''\n };\n\n font.string = utils.toFontString(font);\n return font;\n },\n\n /**\n * Returns value bounded by min and max. This is equivalent to max(min, min(value, max)).\n * @todo move this method in Chart.helpers.bound\n * https://doc.qt.io/qt-5/qtglobal.html#qBound\n */\n bound: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Returns an array of pair [value, state] where state is:\n * * -1: value is only in a0 (removed)\n * * 1: value is only in a1 (added)\n */\n arrayDiff: function(a0, a1) {\n var prev = a0.slice();\n var updates = [];\n var i, j, ilen, v;\n\n for (i = 0, ilen = a1.length; i < ilen; ++i) {\n v = a1[i];\n j = prev.indexOf(v);\n\n if (j === -1) {\n updates.push([v, 1]);\n } else {\n prev.splice(j, 1);\n }\n }\n\n for (i = 0, ilen = prev.length; i < ilen; ++i) {\n updates.push([prev[i], -1]);\n }\n\n return updates;\n },\n\n /**\n * https://github.com/chartjs/chartjs-plugin-datalabels/issues/70\n */\n rasterize: function(v) {\n return Math.round(v * devicePixelRatio) / devicePixelRatio;\n }\n};\n\nfunction orient(point, origin) {\n var x0 = origin.x;\n var y0 = origin.y;\n\n if (x0 === null) {\n return {x: 0, y: -1};\n }\n if (y0 === null) {\n return {x: 1, y: 0};\n }\n\n var dx = point.x - x0;\n var dy = point.y - y0;\n var ln = Math.sqrt(dx * dx + dy * dy);\n\n return {\n x: ln ? dx / ln : 0,\n y: ln ? dy / ln : -1\n };\n}\n\nfunction aligned(x, y, vx, vy, align) {\n switch (align) {\n case 'center':\n vx = vy = 0;\n break;\n case 'bottom':\n vx = 0;\n vy = 1;\n break;\n case 'right':\n vx = 1;\n vy = 0;\n break;\n case 'left':\n vx = -1;\n vy = 0;\n break;\n case 'top':\n vx = 0;\n vy = -1;\n break;\n case 'start':\n vx = -vx;\n vy = -vy;\n break;\n case 'end':\n // keep natural orientation\n break;\n default:\n // clockwise rotation (in degree)\n align *= (Math.PI / 180);\n vx = Math.cos(align);\n vy = Math.sin(align);\n break;\n }\n\n return {\n x: x,\n y: y,\n vx: vx,\n vy: vy\n };\n}\n\n// Line clipping (Cohen–Sutherland algorithm)\n// https://en.wikipedia.org/wiki/Cohen–Sutherland_algorithm\n\nvar R_INSIDE = 0;\nvar R_LEFT = 1;\nvar R_RIGHT = 2;\nvar R_BOTTOM = 4;\nvar R_TOP = 8;\n\nfunction region(x, y, rect) {\n var res = R_INSIDE;\n\n if (x < rect.left) {\n res |= R_LEFT;\n } else if (x > rect.right) {\n res |= R_RIGHT;\n }\n if (y < rect.top) {\n res |= R_TOP;\n } else if (y > rect.bottom) {\n res |= R_BOTTOM;\n }\n\n return res;\n}\n\nfunction clipped(segment, area) {\n var x0 = segment.x0;\n var y0 = segment.y0;\n var x1 = segment.x1;\n var y1 = segment.y1;\n var r0 = region(x0, y0, area);\n var r1 = region(x1, y1, area);\n var r, x, y;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!(r0 | r1) || (r0 & r1)) {\n // both points inside or on the same side: no clipping\n break;\n }\n\n // at least one point is outside\n r = r0 || r1;\n\n if (r & R_TOP) {\n x = x0 + (x1 - x0) * (area.top - y0) / (y1 - y0);\n y = area.top;\n } else if (r & R_BOTTOM) {\n x = x0 + (x1 - x0) * (area.bottom - y0) / (y1 - y0);\n y = area.bottom;\n } else if (r & R_RIGHT) {\n y = y0 + (y1 - y0) * (area.right - x0) / (x1 - x0);\n x = area.right;\n } else if (r & R_LEFT) {\n y = y0 + (y1 - y0) * (area.left - x0) / (x1 - x0);\n x = area.left;\n }\n\n if (r === r0) {\n x0 = x;\n y0 = y;\n r0 = region(x0, y0, area);\n } else {\n x1 = x;\n y1 = y;\n r1 = region(x1, y1, area);\n }\n }\n\n return {\n x0: x0,\n x1: x1,\n y0: y0,\n y1: y1\n };\n}\n\nfunction compute$1(range, config) {\n var anchor = config.anchor;\n var segment = range;\n var x, y;\n\n if (config.clamp) {\n segment = clipped(segment, config.area);\n }\n\n if (anchor === 'start') {\n x = segment.x0;\n y = segment.y0;\n } else if (anchor === 'end') {\n x = segment.x1;\n y = segment.y1;\n } else {\n x = (segment.x0 + segment.x1) / 2;\n y = (segment.y0 + segment.y1) / 2;\n }\n\n return aligned(x, y, range.vx, range.vy, config.align);\n}\n\nvar positioners = {\n arc: function(vm, config) {\n var angle = (vm.startAngle + vm.endAngle) / 2;\n var vx = Math.cos(angle);\n var vy = Math.sin(angle);\n var r0 = vm.innerRadius;\n var r1 = vm.outerRadius;\n\n return compute$1({\n x0: vm.x + vx * r0,\n y0: vm.y + vy * r0,\n x1: vm.x + vx * r1,\n y1: vm.y + vy * r1,\n vx: vx,\n vy: vy\n }, config);\n },\n\n point: function(vm, config) {\n var v = orient(vm, config.origin);\n var rx = v.x * vm.radius;\n var ry = v.y * vm.radius;\n\n return compute$1({\n x0: vm.x - rx,\n y0: vm.y - ry,\n x1: vm.x + rx,\n y1: vm.y + ry,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n rect: function(vm, config) {\n var v = orient(vm, config.origin);\n var x = vm.x;\n var y = vm.y;\n var sx = 0;\n var sy = 0;\n\n if (vm.horizontal) {\n x = Math.min(vm.x, vm.base);\n sx = Math.abs(vm.base - vm.x);\n } else {\n y = Math.min(vm.y, vm.base);\n sy = Math.abs(vm.base - vm.y);\n }\n\n return compute$1({\n x0: x,\n y0: y + sy,\n x1: x + sx,\n y1: y,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n fallback: function(vm, config) {\n var v = orient(vm, config.origin);\n\n return compute$1({\n x0: vm.x,\n y0: vm.y,\n x1: vm.x,\n y1: vm.y,\n vx: v.x,\n vy: v.y\n }, config);\n }\n};\n\nvar helpers$3 = Chart__default['default'].helpers;\nvar rasterize = utils.rasterize;\n\nfunction boundingRects(model) {\n var borderWidth = model.borderWidth || 0;\n var padding = model.padding;\n var th = model.size.height;\n var tw = model.size.width;\n var tx = -tw / 2;\n var ty = -th / 2;\n\n return {\n frame: {\n x: tx - padding.left - borderWidth,\n y: ty - padding.top - borderWidth,\n w: tw + padding.width + borderWidth * 2,\n h: th + padding.height + borderWidth * 2\n },\n text: {\n x: tx,\n y: ty,\n w: tw,\n h: th\n }\n };\n}\n\nfunction getScaleOrigin(el) {\n var horizontal = el._model.horizontal;\n var scale = el._scale || (horizontal && el._xScale) || el._yScale;\n\n if (!scale) {\n return null;\n }\n\n if (scale.xCenter !== undefined && scale.yCenter !== undefined) {\n return {x: scale.xCenter, y: scale.yCenter};\n }\n\n var pixel = scale.getBasePixel();\n return horizontal ?\n {x: pixel, y: null} :\n {x: null, y: pixel};\n}\n\nfunction getPositioner(el) {\n if (el instanceof Chart__default['default'].elements.Arc) {\n return positioners.arc;\n }\n if (el instanceof Chart__default['default'].elements.Point) {\n return positioners.point;\n }\n if (el instanceof Chart__default['default'].elements.Rectangle) {\n return positioners.rect;\n }\n return positioners.fallback;\n}\n\nfunction drawFrame(ctx, rect, model) {\n var bgColor = model.backgroundColor;\n var borderColor = model.borderColor;\n var borderWidth = model.borderWidth;\n\n if (!bgColor && (!borderColor || !borderWidth)) {\n return;\n }\n\n ctx.beginPath();\n\n helpers$3.canvas.roundedRect(\n ctx,\n rasterize(rect.x) + borderWidth / 2,\n rasterize(rect.y) + borderWidth / 2,\n rasterize(rect.w) - borderWidth,\n rasterize(rect.h) - borderWidth,\n model.borderRadius);\n\n ctx.closePath();\n\n if (bgColor) {\n ctx.fillStyle = bgColor;\n ctx.fill();\n }\n\n if (borderColor && borderWidth) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = 'miter';\n ctx.stroke();\n }\n}\n\nfunction textGeometry(rect, align, font) {\n var h = font.lineHeight;\n var w = rect.w;\n var x = rect.x;\n var y = rect.y + h / 2;\n\n if (align === 'center') {\n x += w / 2;\n } else if (align === 'end' || align === 'right') {\n x += w;\n }\n\n return {\n h: h,\n w: w,\n x: x,\n y: y\n };\n}\n\nfunction drawTextLine(ctx, text, cfg) {\n var shadow = ctx.shadowBlur;\n var stroked = cfg.stroked;\n var x = rasterize(cfg.x);\n var y = rasterize(cfg.y);\n var w = rasterize(cfg.w);\n\n if (stroked) {\n ctx.strokeText(text, x, y, w);\n }\n\n if (cfg.filled) {\n if (shadow && stroked) {\n // Prevent drawing shadow on both the text stroke and fill, so\n // if the text is stroked, remove the shadow for the text fill.\n ctx.shadowBlur = 0;\n }\n\n ctx.fillText(text, x, y, w);\n\n if (shadow && stroked) {\n ctx.shadowBlur = shadow;\n }\n }\n}\n\nfunction drawText(ctx, lines, rect, model) {\n var align = model.textAlign;\n var color = model.color;\n var filled = !!color;\n var font = model.font;\n var ilen = lines.length;\n var strokeColor = model.textStrokeColor;\n var strokeWidth = model.textStrokeWidth;\n var stroked = strokeColor && strokeWidth;\n var i;\n\n if (!ilen || (!filled && !stroked)) {\n return;\n }\n\n // Adjust coordinates based on text alignment and line height\n rect = textGeometry(rect, align, font);\n\n ctx.font = font.string;\n ctx.textAlign = align;\n ctx.textBaseline = 'middle';\n ctx.shadowBlur = model.textShadowBlur;\n ctx.shadowColor = model.textShadowColor;\n\n if (filled) {\n ctx.fillStyle = color;\n }\n if (stroked) {\n ctx.lineJoin = 'round';\n ctx.lineWidth = strokeWidth;\n ctx.strokeStyle = strokeColor;\n }\n\n for (i = 0, ilen = lines.length; i < ilen; ++i) {\n drawTextLine(ctx, lines[i], {\n stroked: stroked,\n filled: filled,\n w: rect.w,\n x: rect.x,\n y: rect.y + rect.h * i\n });\n }\n}\n\nvar Label = function(config, ctx, el, index) {\n var me = this;\n\n me._config = config;\n me._index = index;\n me._model = null;\n me._rects = null;\n me._ctx = ctx;\n me._el = el;\n};\n\nhelpers$3.extend(Label.prototype, {\n /**\n * @private\n */\n _modelize: function(display, lines, config, context) {\n var me = this;\n var index = me._index;\n var resolve = helpers$3.options.resolve;\n var font = utils.parseFont(resolve([config.font, {}], context, index));\n var color = resolve([config.color, Chart__default['default'].defaults.global.defaultFontColor], context, index);\n\n return {\n align: resolve([config.align, 'center'], context, index),\n anchor: resolve([config.anchor, 'center'], context, index),\n area: context.chart.chartArea,\n backgroundColor: resolve([config.backgroundColor, null], context, index),\n borderColor: resolve([config.borderColor, null], context, index),\n borderRadius: resolve([config.borderRadius, 0], context, index),\n borderWidth: resolve([config.borderWidth, 0], context, index),\n clamp: resolve([config.clamp, false], context, index),\n clip: resolve([config.clip, false], context, index),\n color: color,\n display: display,\n font: font,\n lines: lines,\n offset: resolve([config.offset, 0], context, index),\n opacity: resolve([config.opacity, 1], context, index),\n origin: getScaleOrigin(me._el),\n padding: helpers$3.options.toPadding(resolve([config.padding, 0], context, index)),\n positioner: getPositioner(me._el),\n rotation: resolve([config.rotation, 0], context, index) * (Math.PI / 180),\n size: utils.textSize(me._ctx, lines, font),\n textAlign: resolve([config.textAlign, 'start'], context, index),\n textShadowBlur: resolve([config.textShadowBlur, 0], context, index),\n textShadowColor: resolve([config.textShadowColor, color], context, index),\n textStrokeColor: resolve([config.textStrokeColor, color], context, index),\n textStrokeWidth: resolve([config.textStrokeWidth, 0], context, index)\n };\n },\n\n update: function(context) {\n var me = this;\n var model = null;\n var rects = null;\n var index = me._index;\n var config = me._config;\n var value, label, lines;\n\n // We first resolve the display option (separately) to avoid computing\n // other options in case the label is hidden (i.e. display: false).\n var display = helpers$3.options.resolve([config.display, true], context, index);\n\n if (display) {\n value = context.dataset.data[index];\n label = helpers$3.valueOrDefault(helpers$3.callback(config.formatter, [value, context]), value);\n lines = helpers$3.isNullOrUndef(label) ? [] : utils.toTextLines(label);\n\n if (lines.length) {\n model = me._modelize(display, lines, config, context);\n rects = boundingRects(model);\n }\n }\n\n me._model = model;\n me._rects = rects;\n },\n\n geometry: function() {\n return this._rects ? this._rects.frame : {};\n },\n\n rotation: function() {\n return this._model ? this._model.rotation : 0;\n },\n\n visible: function() {\n return this._model && this._model.opacity;\n },\n\n model: function() {\n return this._model;\n },\n\n draw: function(chart, center) {\n var me = this;\n var ctx = chart.ctx;\n var model = me._model;\n var rects = me._rects;\n var area;\n\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n if (model.clip) {\n area = model.area;\n ctx.beginPath();\n ctx.rect(\n area.left,\n area.top,\n area.right - area.left,\n area.bottom - area.top);\n ctx.clip();\n }\n\n ctx.globalAlpha = utils.bound(0, model.opacity, 1);\n ctx.translate(rasterize(center.x), rasterize(center.y));\n ctx.rotate(model.rotation);\n\n drawFrame(ctx, rects.frame, model);\n drawText(ctx, model.lines, rects.text, model);\n\n ctx.restore();\n }\n});\n\nvar helpers$2 = Chart__default['default'].helpers;\n\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; // eslint-disable-line es/no-number-minsafeinteger\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; // eslint-disable-line es/no-number-maxsafeinteger\n\nfunction rotated(point, center, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var cx = center.x;\n var cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nfunction projected(points, axis) {\n var min = MAX_INTEGER;\n var max = MIN_INTEGER;\n var origin = axis.origin;\n var i, pt, vx, vy, dp;\n\n for (i = 0; i < points.length; ++i) {\n pt = points[i];\n vx = pt.x - origin.x;\n vy = pt.y - origin.y;\n dp = axis.vx * vx + axis.vy * vy;\n min = Math.min(min, dp);\n max = Math.max(max, dp);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nfunction toAxis(p0, p1) {\n var vx = p1.x - p0.x;\n var vy = p1.y - p0.y;\n var ln = Math.sqrt(vx * vx + vy * vy);\n\n return {\n vx: (p1.x - p0.x) / ln,\n vy: (p1.y - p0.y) / ln,\n origin: p0,\n ln: ln\n };\n}\n\nvar HitBox = function() {\n this._rotation = 0;\n this._rect = {\n x: 0,\n y: 0,\n w: 0,\n h: 0\n };\n};\n\nhelpers$2.extend(HitBox.prototype, {\n center: function() {\n var r = this._rect;\n return {\n x: r.x + r.w / 2,\n y: r.y + r.h / 2\n };\n },\n\n update: function(center, rect, rotation) {\n this._rotation = rotation;\n this._rect = {\n x: rect.x + center.x,\n y: rect.y + center.y,\n w: rect.w,\n h: rect.h\n };\n },\n\n contains: function(point) {\n var me = this;\n var margin = 1;\n var rect = me._rect;\n\n point = rotated(point, me.center(), -me._rotation);\n\n return !(point.x < rect.x - margin\n || point.y < rect.y - margin\n || point.x > rect.x + rect.w + margin * 2\n || point.y > rect.y + rect.h + margin * 2);\n },\n\n // Separating Axis Theorem\n // https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169\n intersects: function(other) {\n var r0 = this._points();\n var r1 = other._points();\n var axes = [\n toAxis(r0[0], r0[1]),\n toAxis(r0[0], r0[3])\n ];\n var i, pr0, pr1;\n\n if (this._rotation !== other._rotation) {\n // Only separate with r1 axis if the rotation is different,\n // else it's enough to separate r0 and r1 with r0 axis only!\n axes.push(\n toAxis(r1[0], r1[1]),\n toAxis(r1[0], r1[3])\n );\n }\n\n for (i = 0; i < axes.length; ++i) {\n pr0 = projected(r0, axes[i]);\n pr1 = projected(r1, axes[i]);\n\n if (pr0.max < pr1.min || pr1.max < pr0.min) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * @private\n */\n _points: function() {\n var me = this;\n var rect = me._rect;\n var angle = me._rotation;\n var center = me.center();\n\n return [\n rotated({x: rect.x, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y + rect.h}, center, angle),\n rotated({x: rect.x, y: rect.y + rect.h}, center, angle)\n ];\n }\n});\n\nfunction coordinates(view, model, geometry) {\n var point = model.positioner(view, model);\n var vx = point.vx;\n var vy = point.vy;\n\n if (!vx && !vy) {\n // if aligned center, we don't want to offset the center point\n return {x: point.x, y: point.y};\n }\n\n var w = geometry.w;\n var h = geometry.h;\n\n // take in account the label rotation\n var rotation = model.rotation;\n var dx = Math.abs(w / 2 * Math.cos(rotation)) + Math.abs(h / 2 * Math.sin(rotation));\n var dy = Math.abs(w / 2 * Math.sin(rotation)) + Math.abs(h / 2 * Math.cos(rotation));\n\n // scale the unit vector (vx, vy) to get at least dx or dy equal to\n // w or h respectively (else we would calculate the distance to the\n // ellipse inscribed in the bounding rect)\n var vs = 1 / Math.max(Math.abs(vx), Math.abs(vy));\n dx *= vx * vs;\n dy *= vy * vs;\n\n // finally, include the explicit offset\n dx += model.offset * vx;\n dy += model.offset * vy;\n\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n}\n\nfunction collide(labels, collider) {\n var i, j, s0, s1;\n\n // IMPORTANT Iterate in the reverse order since items at the end of the\n // list have an higher weight/priority and thus should be less impacted\n // by the overlapping strategy.\n\n for (i = labels.length - 1; i >= 0; --i) {\n s0 = labels[i].$layout;\n\n for (j = i - 1; j >= 0 && s0._visible; --j) {\n s1 = labels[j].$layout;\n\n if (s1._visible && s0._box.intersects(s1._box)) {\n collider(s0, s1);\n }\n }\n }\n\n return labels;\n}\n\nfunction compute(labels) {\n var i, ilen, label, state, geometry, center;\n\n // Initialize labels for overlap detection\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n geometry = label.geometry();\n center = coordinates(label._el._model, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n }\n }\n\n // Auto hide overlapping labels\n return collide(labels, function(s0, s1) {\n var h0 = s0._hidable;\n var h1 = s1._hidable;\n\n if ((h0 && h1) || h1) {\n s1._visible = false;\n } else if (h0) {\n s0._visible = false;\n }\n });\n}\n\nvar layout = {\n prepare: function(datasets) {\n var labels = [];\n var i, j, ilen, jlen, label;\n\n for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n for (j = 0, jlen = datasets[i].length; j < jlen; ++j) {\n label = datasets[i][j];\n labels.push(label);\n label.$layout = {\n _box: new HitBox(),\n _hidable: false,\n _visible: true,\n _set: i,\n _idx: j\n };\n }\n }\n\n // TODO New `z` option: labels with a higher z-index are drawn\n // of top of the ones with a lower index. Lowest z-index labels\n // are also discarded first when hiding overlapping labels.\n labels.sort(function(a, b) {\n var sa = a.$layout;\n var sb = b.$layout;\n\n return sa._idx === sb._idx\n ? sb._set - sa._set\n : sb._idx - sa._idx;\n });\n\n this.update(labels);\n\n return labels;\n },\n\n update: function(labels) {\n var dirty = false;\n var i, ilen, label, model, state;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n model = label.model();\n state = label.$layout;\n state._hidable = model && model.display === 'auto';\n state._visible = label.visible();\n dirty |= state._hidable;\n }\n\n if (dirty) {\n compute(labels);\n }\n },\n\n lookup: function(labels, point) {\n var i, state;\n\n // IMPORTANT Iterate in the reverse order since items at the end of\n // the list have an higher z-index, thus should be picked first.\n\n for (i = labels.length - 1; i >= 0; --i) {\n state = labels[i].$layout;\n\n if (state && state._visible && state._box.contains(point)) {\n return labels[i];\n }\n }\n\n return null;\n },\n\n draw: function(chart, labels) {\n var i, ilen, label, state, geometry, center;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n geometry = label.geometry();\n center = coordinates(label._el._view, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n label.draw(chart, center);\n }\n }\n }\n};\n\nvar helpers$1 = Chart__default['default'].helpers;\n\nvar formatter = function(value) {\n if (helpers$1.isNullOrUndef(value)) {\n return null;\n }\n\n var label = value;\n var keys, klen, k;\n if (helpers$1.isObject(value)) {\n if (!helpers$1.isNullOrUndef(value.label)) {\n label = value.label;\n } else if (!helpers$1.isNullOrUndef(value.r)) {\n label = value.r;\n } else {\n label = '';\n keys = Object.keys(value);\n for (k = 0, klen = keys.length; k < klen; ++k) {\n label += (k !== 0 ? ', ' : '') + keys[k] + ': ' + value[keys[k]];\n }\n }\n }\n\n return '' + label;\n};\n\n/**\n * IMPORTANT: make sure to also update tests and TypeScript definition\n * files (`/test/specs/defaults.spec.js` and `/types/options.d.ts`)\n */\n\nvar defaults = {\n align: 'center',\n anchor: 'center',\n backgroundColor: null,\n borderColor: null,\n borderRadius: 0,\n borderWidth: 0,\n clamp: false,\n clip: false,\n color: undefined,\n display: true,\n font: {\n family: undefined,\n lineHeight: 1.2,\n size: undefined,\n style: undefined,\n weight: null\n },\n formatter: formatter,\n labels: undefined,\n listeners: {},\n offset: 4,\n opacity: 1,\n padding: {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4\n },\n rotation: 0,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n textShadowBlur: 0,\n textShadowColor: undefined\n};\n\n/**\n * @see https://github.com/chartjs/Chart.js/issues/4176\n */\n\nvar helpers = Chart__default['default'].helpers;\nvar EXPANDO_KEY = '$datalabels';\nvar DEFAULT_KEY = '$default';\n\nfunction configure(dataset, options) {\n var override = dataset.datalabels;\n var listeners = {};\n var configs = [];\n var labels, keys;\n\n if (override === false) {\n return null;\n }\n if (override === true) {\n override = {};\n }\n\n options = helpers.merge({}, [options, override]);\n labels = options.labels || {};\n keys = Object.keys(labels);\n delete options.labels;\n\n if (keys.length) {\n keys.forEach(function(key) {\n if (labels[key]) {\n configs.push(helpers.merge({}, [\n options,\n labels[key],\n {_key: key}\n ]));\n }\n });\n } else {\n // Default label if no \"named\" label defined.\n configs.push(options);\n }\n\n // listeners: {<event-type>: {<label-key>: <fn>}}\n listeners = configs.reduce(function(target, config) {\n helpers.each(config.listeners || {}, function(fn, event) {\n target[event] = target[event] || {};\n target[event][config._key || DEFAULT_KEY] = fn;\n });\n\n delete config.listeners;\n return target;\n }, {});\n\n return {\n labels: configs,\n listeners: listeners\n };\n}\n\nfunction dispatchEvent(chart, listeners, label) {\n if (!listeners) {\n return;\n }\n\n var context = label.$context;\n var groups = label.$groups;\n var callback;\n\n if (!listeners[groups._set]) {\n return;\n }\n\n callback = listeners[groups._set][groups._key];\n if (!callback) {\n return;\n }\n\n if (helpers.callback(callback, [context]) === true) {\n // Users are allowed to tweak the given context by injecting values that can be\n // used in scriptable options to display labels differently based on the current\n // event (e.g. highlight an hovered label). That's why we update the label with\n // the output context and schedule a new chart render by setting it dirty.\n chart[EXPANDO_KEY]._dirty = true;\n label.update(context);\n }\n}\n\nfunction dispatchMoveEvents(chart, listeners, previous, label) {\n var enter, leave;\n\n if (!previous && !label) {\n return;\n }\n\n if (!previous) {\n enter = true;\n } else if (!label) {\n leave = true;\n } else if (previous !== label) {\n leave = enter = true;\n }\n\n if (leave) {\n dispatchEvent(chart, listeners.leave, previous);\n }\n if (enter) {\n dispatchEvent(chart, listeners.enter, label);\n }\n}\n\nfunction handleMoveEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var listeners = expando._listeners;\n var previous, label;\n\n if (!listeners.enter && !listeners.leave) {\n return;\n }\n\n if (event.type === 'mousemove') {\n label = layout.lookup(expando._labels, event);\n } else if (event.type !== 'mouseout') {\n return;\n }\n\n previous = expando._hovered;\n expando._hovered = label;\n dispatchMoveEvents(chart, listeners, previous, label);\n}\n\nfunction handleClickEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var handlers = expando._listeners.click;\n var label = handlers && layout.lookup(expando._labels, event);\n if (label) {\n dispatchEvent(chart, handlers, label);\n }\n}\n\n// https://github.com/chartjs/chartjs-plugin-datalabels/issues/108\nfunction invalidate(chart) {\n if (chart.animating) {\n return;\n }\n\n // `chart.animating` can be `false` even if there is animation in progress,\n // so let's iterate all animations to find if there is one for the `chart`.\n var animations = Chart__default['default'].animationService.animations;\n for (var i = 0, ilen = animations.length; i < ilen; ++i) {\n if (animations[i].chart === chart) {\n return;\n }\n }\n\n // No render scheduled: trigger a \"lazy\" render that can be canceled in case\n // of hover interactions. The 1ms duration is a workaround to make sure an\n // animation is created so the controller can stop it before any transition.\n chart.render({duration: 1, lazy: true});\n}\n\nChart__default['default'].defaults.global.plugins.datalabels = defaults;\n\nvar plugin = {\n id: 'datalabels',\n\n beforeInit: function(chart) {\n chart[EXPANDO_KEY] = {\n _actives: []\n };\n },\n\n beforeUpdate: function(chart) {\n var expando = chart[EXPANDO_KEY];\n expando._listened = false;\n expando._listeners = {}; // {<event-type>: {<dataset-index>: {<label-key>: <fn>}}}\n expando._datasets = []; // per dataset labels: [Label[]]\n expando._labels = []; // layouted labels: Label[]\n },\n\n afterDatasetUpdate: function(chart, args, options) {\n var datasetIndex = args.index;\n var expando = chart[EXPANDO_KEY];\n var labels = expando._datasets[datasetIndex] = [];\n var visible = chart.isDatasetVisible(datasetIndex);\n var dataset = chart.data.datasets[datasetIndex];\n var config = configure(dataset, options);\n var elements = args.meta.data || [];\n var ctx = chart.ctx;\n var i, j, ilen, jlen, cfg, key, el, label;\n\n ctx.save();\n\n for (i = 0, ilen = elements.length; i < ilen; ++i) {\n el = elements[i];\n el[EXPANDO_KEY] = [];\n\n if (visible && el && !el.hidden && !el._model.skip) {\n for (j = 0, jlen = config.labels.length; j < jlen; ++j) {\n cfg = config.labels[j];\n key = cfg._key;\n\n label = new Label(cfg, ctx, el, i);\n label.$groups = {\n _set: datasetIndex,\n _key: key || DEFAULT_KEY\n };\n label.$context = {\n active: false,\n chart: chart,\n dataIndex: i,\n dataset: dataset,\n datasetIndex: datasetIndex\n };\n\n label.update(label.$context);\n el[EXPANDO_KEY].push(label);\n labels.push(label);\n }\n }\n }\n\n ctx.restore();\n\n // Store listeners at the chart level and per event type to optimize\n // cases where no listeners are registered for a specific event.\n helpers.merge(expando._listeners, config.listeners, {\n merger: function(event, target, source) {\n target[event] = target[event] || {};\n target[event][args.index] = source[event];\n expando._listened = true;\n }\n });\n },\n\n afterUpdate: function(chart, options) {\n chart[EXPANDO_KEY]._labels = layout.prepare(\n chart[EXPANDO_KEY]._datasets,\n options);\n },\n\n // Draw labels on top of all dataset elements\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/29\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/32\n afterDatasetsDraw: function(chart) {\n layout.draw(chart, chart[EXPANDO_KEY]._labels);\n },\n\n beforeEvent: function(chart, event) {\n // If there is no listener registered for this chart, `listened` will be false,\n // meaning we can immediately ignore the incoming event and avoid useless extra\n // computation for users who don't implement label interactions.\n if (chart[EXPANDO_KEY]._listened) {\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n handleMoveEvents(chart, event);\n break;\n case 'click':\n handleClickEvents(chart, event);\n break;\n }\n }\n },\n\n afterEvent: function(chart) {\n var expando = chart[EXPANDO_KEY];\n var previous = expando._actives;\n var actives = expando._actives = chart.lastActive || []; // public API?!\n var updates = utils.arrayDiff(previous, actives);\n var i, ilen, j, jlen, update, label, labels;\n\n for (i = 0, ilen = updates.length; i < ilen; ++i) {\n update = updates[i];\n if (update[1]) {\n labels = update[0][EXPANDO_KEY] || [];\n for (j = 0, jlen = labels.length; j < jlen; ++j) {\n label = labels[j];\n label.$context.active = (update[1] === 1);\n label.update(label.$context);\n }\n }\n }\n\n if (expando._dirty || updates.length) {\n layout.update(expando._labels);\n invalidate(chart);\n }\n\n delete expando._dirty;\n }\n};\n\nreturn plugin;\n\n})));\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".half-circle-spinner,.half-circle-spinner *{box-sizing:border-box}.half-circle-spinner{border-radius:100%;height:60px;position:relative;width:60px}.half-circle-spinner .circle{border:6px solid transparent;border-radius:100%;content:\\\"\\\";height:100%;position:absolute;width:100%}.half-circle-spinner .circle.circle-1{animation:half-circle-spinner-animation 1s infinite;border-top-color:#ff1d5e}.half-circle-spinner .circle.circle-2{animation:half-circle-spinner-animation 1s infinite alternate;border-bottom-color:#ff1d5e}@keyframes half-circle-spinner-animation{0%{transform:rotate(0)}to{transform:rotate(1turn)}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/epic-spinners/dist/style/HalfCircleSpinner.css\"],\"names\":[],\"mappings\":\"AAAA,4CAA4C,qBAAqB,CAAC,qBAA4C,kBAAkB,CAA9B,WAAW,CAAoB,iBAAgB,CAA1D,UAA2D,CAAC,6BAAoG,4BAA2B,CAA9C,kBAAkB,CAAtE,UAAU,CAA8B,WAAW,CAAxC,iBAAiB,CAAC,UAAsE,CAAC,sCAA+D,mDAAkD,CAA3E,wBAA4E,CAAC,sCAAkE,6DAA4D,CAAxF,2BAAyF,CAAC,yCAAyC,GAAG,mBAAmB,CAAC,GAAG,uBAAwB,CAAC\",\"sourcesContent\":[\".half-circle-spinner,.half-circle-spinner *{box-sizing:border-box}.half-circle-spinner{width:60px;height:60px;border-radius:100%;position:relative}.half-circle-spinner .circle{content:\\\"\\\";position:absolute;width:100%;height:100%;border-radius:100%;border:6px solid transparent}.half-circle-spinner .circle.circle-1{border-top-color:#ff1d5e;animation:half-circle-spinner-animation 1s infinite}.half-circle-spinner .circle.circle-2{border-bottom-color:#ff1d5e;animation:half-circle-spinner-animation 1s infinite alternate}@keyframes half-circle-spinner-animation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"code[class*=language-],pre[class*=language-]{word-wrap:normal;background:none;color:#ccc;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;-webkit-hyphens:none;hyphens:none;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal}pre[class*=language-]{margin:.5em 0;overflow:auto;padding:1em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{border-radius:.3em;padding:.1em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/prismjs/themes/prism-tomorrow.css\"],\"names\":[],\"mappings\":\"AAMA,6CAUC,gBAAiB,CAPjB,eAAgB,CADhB,UAAW,CAEX,6DAAsE,CACtE,aAAc,CAYd,oBAAqB,CAGrB,YAAa,CATb,eAAgB,CAEhB,eAAgB,CAChB,aAAc,CACd,UAAW,CATX,eAAgB,CAChB,eAAgB,CAEhB,iBAAkB,CADlB,mBAcD,CAGA,sBAEC,aAAc,CACd,aAAc,CAFd,WAGD,CAEA,uDAEC,kBACD,CAGA,iCAEC,kBAAmB,CADnB,YAAa,CAEb,kBACD,CAEA,8EAKC,UACD,CAEA,mBACC,UACD,CAEA,4DAIC,aACD,CAEA,qBACC,aACD,CAEA,6CAGC,aACD,CAEA,gEAIC,aACD,CAEA,6EAKC,aACD,CAEA,yEAKC,aACD,CAEA,yCAGC,aACD,CAEA,6BAEC,eACD,CACA,cACC,iBACD,CAEA,cACC,WACD,CAEA,gBACC,WACD\",\"sourcesContent\":[\"/**\\n * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML\\n * Based on https://github.com/chriskempson/tomorrow-theme\\n * @author Rose Pritchard\\n */\\n\\ncode[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tcolor: #ccc;\\n\\tbackground: none;\\n\\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\\n\\tfont-size: 1em;\\n\\ttext-align: left;\\n\\twhite-space: pre;\\n\\tword-spacing: normal;\\n\\tword-break: normal;\\n\\tword-wrap: normal;\\n\\tline-height: 1.5;\\n\\n\\t-moz-tab-size: 4;\\n\\t-o-tab-size: 4;\\n\\ttab-size: 4;\\n\\n\\t-webkit-hyphens: none;\\n\\t-moz-hyphens: none;\\n\\t-ms-hyphens: none;\\n\\thyphens: none;\\n\\n}\\n\\n/* Code blocks */\\npre[class*=\\\"language-\\\"] {\\n\\tpadding: 1em;\\n\\tmargin: .5em 0;\\n\\toverflow: auto;\\n}\\n\\n:not(pre) > code[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tbackground: #2d2d2d;\\n}\\n\\n/* Inline code */\\n:not(pre) > code[class*=\\\"language-\\\"] {\\n\\tpadding: .1em;\\n\\tborder-radius: .3em;\\n\\twhite-space: normal;\\n}\\n\\n.token.comment,\\n.token.block-comment,\\n.token.prolog,\\n.token.doctype,\\n.token.cdata {\\n\\tcolor: #999;\\n}\\n\\n.token.punctuation {\\n\\tcolor: #ccc;\\n}\\n\\n.token.tag,\\n.token.attr-name,\\n.token.namespace,\\n.token.deleted {\\n\\tcolor: #e2777a;\\n}\\n\\n.token.function-name {\\n\\tcolor: #6196cc;\\n}\\n\\n.token.boolean,\\n.token.number,\\n.token.function {\\n\\tcolor: #f08d49;\\n}\\n\\n.token.property,\\n.token.class-name,\\n.token.constant,\\n.token.symbol {\\n\\tcolor: #f8c555;\\n}\\n\\n.token.selector,\\n.token.important,\\n.token.atrule,\\n.token.keyword,\\n.token.builtin {\\n\\tcolor: #cc99cd;\\n}\\n\\n.token.string,\\n.token.char,\\n.token.attr-value,\\n.token.regex,\\n.token.variable {\\n\\tcolor: #7ec699;\\n}\\n\\n.token.operator,\\n.token.entity,\\n.token.url {\\n\\tcolor: #67cdcc;\\n}\\n\\n.token.important,\\n.token.bold {\\n\\tfont-weight: bold;\\n}\\n.token.italic {\\n\\tfont-style: italic;\\n}\\n\\n.token.entity {\\n\\tcursor: help;\\n}\\n\\n.token.inserted {\\n\\tcolor: green;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root{--primary-color:#1c84c6;--btn-radius:3px}.vJifQfqAcWdomLO1n-KJoA\\\\=\\\\={--bs-modal-border-radius:0.25rem}.Hu27Gs3l-AY0B70GzltP2Q\\\\=\\\\={pointer-events:none}.URCr\\\\+yZxoV0EHqQdD\\\\+MvNg\\\\=\\\\= ._2XO1bVPhXWJN5yK3x1tfhw\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22zm0 100 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-size:.75rem 1rem;height:1rem;width:1.5rem}.URCr\\\\+yZxoV0EHqQdD\\\\+MvNg\\\\=\\\\= ._2XO1bVPhXWJN5yK3x1tfhw\\\\=\\\\=.ut8i7dWB5xb5I1MYB1oHOw\\\\=\\\\=.nqcwLASCWvkWJBBRXNizhw\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\")}.URCr\\\\+yZxoV0EHqQdD\\\\+MvNg\\\\=\\\\= ._2XO1bVPhXWJN5yK3x1tfhw\\\\=\\\\=.ut8i7dWB5xb5I1MYB1oHOw\\\\=\\\\=.X\\\\+wZxtICsNv3xVrEXFG0Yw\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\")}.XbmDVWCdZ5piYDrNji11cg\\\\=\\\\={background-color:#eff8ff!important}.kNs3Z33\\\\+lYsDGyoXjQ9HMw\\\\=\\\\=.wqxqBq7cIui\\\\+iOBMAtjbYA\\\\=\\\\={--bs-table-border-color:transparent}.ut8i7dWB5xb5I1MYB1oHOw\\\\=\\\\=._2XO1bVPhXWJN5yK3x1tfhw\\\\=\\\\=:before{content:none!important}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.p6-NmUaYVa0Ew-iuY3JIzQ\\\\=\\\\={background-color:#e6f2ff;border-color:#b8daff;color:#004085}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.p6-NmUaYVa0Ew-iuY3JIzQ\\\\=\\\\= ._2vi4rLpZvwh804hOB7LYvA\\\\=\\\\={background-color:#cce5ff;border-bottom-color:#b8daff;color:#004085}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.p6-NmUaYVa0Ew-iuY3JIzQ\\\\=\\\\=.CH\\\\+5V1ZT2wv-jrWa5Slz5w\\\\=\\\\={background-color:#e6f2ff}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.CbWhXjxjdN0jM6xjalDisg\\\\=\\\\={background-color:#eff0f1;border-color:#d6d8db;color:#383d41}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.CbWhXjxjdN0jM6xjalDisg\\\\=\\\\= ._2vi4rLpZvwh804hOB7LYvA\\\\=\\\\={background-color:#e2e3e5;border-bottom-color:#d6d8db;color:#383d41}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.CbWhXjxjdN0jM6xjalDisg\\\\=\\\\=.CH\\\\+5V1ZT2wv-jrWa5Slz5w\\\\=\\\\={background-color:#eff0f1}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=._3mo2I1b1C25w88rmtcZp4g\\\\=\\\\={background-color:#e6f5e9;border-color:#c3e6cb;color:#155724}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=._3mo2I1b1C25w88rmtcZp4g\\\\=\\\\= ._2vi4rLpZvwh804hOB7LYvA\\\\=\\\\={background-color:#d4edda;border-bottom-color:#c3e6cb;color:#155724}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=._3mo2I1b1C25w88rmtcZp4g\\\\=\\\\=.CH\\\\+5V1ZT2wv-jrWa5Slz5w\\\\=\\\\={background-color:#e6f5e9}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.tlwirFnvGJHJigx4yKraVA\\\\=\\\\={background-color:#e5f4f7;border-color:#bee5eb;color:#0c5460}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.tlwirFnvGJHJigx4yKraVA\\\\=\\\\= ._2vi4rLpZvwh804hOB7LYvA\\\\=\\\\={background-color:#d1ecf1;border-bottom-color:#bee5eb;color:#0c5460}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.tlwirFnvGJHJigx4yKraVA\\\\=\\\\=.CH\\\\+5V1ZT2wv-jrWa5Slz5w\\\\=\\\\={background-color:#e5f4f7}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.IggLMRizEOYLg9P1BaU-KA\\\\=\\\\={background-color:#fff9e7;border-color:#ffeeba;color:#856404}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.IggLMRizEOYLg9P1BaU-KA\\\\=\\\\= ._2vi4rLpZvwh804hOB7LYvA\\\\=\\\\={background-color:#fff3cd;border-bottom-color:#ffeeba;color:#856404}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=.IggLMRizEOYLg9P1BaU-KA\\\\=\\\\=.CH\\\\+5V1ZT2wv-jrWa5Slz5w\\\\=\\\\={background-color:#fff9e7}.jtrlFLbKCo\\\\+j47COoio9mw\\\\=\\\\=._3etCS5u0ADhoeReocPY0rQ\\\\=\\\\={background-color:#fcedee;border-color:#f5c6cb;color:#721c24}._3etCS5u0ADhoeReocPY0rQ\\\\=\\\\= ._2vi4rLpZvwh804hOB7LYvA\\\\=\\\\={background-color:#f8d7da;border-bottom-color:#f5c6cb;color:#721c24}._3etCS5u0ADhoeReocPY0rQ\\\\=\\\\=.CH\\\\+5V1ZT2wv-jrWa5Slz5w\\\\=\\\\={background-color:#fcedee}.k2nQjuajA8l9fjW3vNlsFQ\\\\=\\\\={margin-bottom:1rem}.ZLHYL77Uyd\\\\+wrXLMNUrcMw\\\\=\\\\={display:block;margin-top:.25rem}.LqTBJf9BnaAJqJ-b64gjwg\\\\=\\\\={margin-left:0!important;margin-right:0!important}.LqTBJf9BnaAJqJ-b64gjwg\\\\=\\\\=>.dux9-VrQSlKbyOibKAm8Aw\\\\=\\\\=,.LqTBJf9BnaAJqJ-b64gjwg\\\\=\\\\=>[class*=col-]{padding-left:5px;padding-right:5px}.dux9-VrQSlKbyOibKAm8Aw\\\\=\\\\=>div[role=group],._335RTh3MuQpoaVIHxNpzKQ\\\\=\\\\=[role=group],.LqTBJf9BnaAJqJ-b64gjwg\\\\=\\\\=[role=group],[class*=col-]>div[role=group],fieldset:has(legend.vRKAfCzAzDONfK-hO92Yzg\\\\=\\\\=),form div[role=group],form fieldset{margin-bottom:1rem}.dux9-VrQSlKbyOibKAm8Aw\\\\=\\\\=,.Cpp06hAtJnnXwZC7IAqxrw\\\\=\\\\=,._4-BfXeVMLAjRzqDlCtjWJQ\\\\=\\\\=,.sTTcI2JzWTlKtCBKTepH8w\\\\=\\\\=,.P7fRm7zEnzosUHehC-G\\\\+-w\\\\=\\\\=,.kXLwRQsfgVD52VUT6G2HFw\\\\=\\\\=,._3Kn-jS3rrWsYBFKox88yUQ\\\\=\\\\=,.Mlw4zF0jB1WeIJsjgAlF9Q\\\\=\\\\=,.hlDLUPCwVMdHYxgqPH3duw\\\\=\\\\=,.u\\\\+Dc2qEgwHP9p2lrbdB2Lw\\\\=\\\\=,.rOEUgcUvUzfh6t9pph4\\\\+IA\\\\=\\\\=,.It4St4IWgiAaNNgRaeKoww\\\\=\\\\=,.qo6PIUesFPXNMCgx06u-TA\\\\=\\\\=,.XD\\\\+LD2HEtqhJt8LGostcvw\\\\=\\\\=,.ifoX62PdUQMSfjY8WrmgXw\\\\=\\\\=,.m\\\\+O\\\\+qHUgPbPD00SWjem7qw\\\\=\\\\=,.PvisTZ3R8GdGISoNYGpefg\\\\=\\\\=,.Z4O-DtV8K7CPTjTMap-yTw\\\\=\\\\=,.wHu9To\\\\+xn3NDXxSXnjvKCQ\\\\=\\\\=,._3-CbqdQTLZq8gkMsTUsfvw\\\\=\\\\=,.vOn3tIA-hGXnn6QYHBJOHQ\\\\=\\\\=,._0GEpskJ4sSZQNX5jBRBXrw\\\\=\\\\=,._5M355gzbQl6PXH2VN-WdrA\\\\=\\\\=,.SnJ8KltXD6ybDvQlumF\\\\+Lg\\\\=\\\\=,.FIz\\\\+84sU2rVa4nOFt9k-iA\\\\=\\\\=,.nBVD8ihXsc5Ivd7EgVpICQ\\\\=\\\\=,.CdIx\\\\+xJCTUSjDXD54krr6w\\\\=\\\\=,.qSrVNaH39fUiSRQ8HnMFuA\\\\=\\\\=,.AfRcOEG4qEfc5u0Bjki67w\\\\=\\\\=,.Vxmq-lbz0HYCMQfX2SKS0Q\\\\=\\\\=,.-ok99Ih\\\\+GaSc4pZ9j9M4Xw\\\\=\\\\=,.y\\\\+gM5MWRACpPR7geafoy4Q\\\\=\\\\=,.z7EVu0TdTHd3fj4UXevHHQ\\\\=\\\\=,.RtfUl4msUBnVzx4PBuY5QA\\\\=\\\\=,._5v\\\\+PkQmZ2O7vqcISXmYhxA\\\\=\\\\=,.stQUxYePqlo4z9J7ryI4Rw\\\\=\\\\=,.Xy-PVKBeZpNgEm8\\\\+Es1muQ\\\\=\\\\=,.xjR45XuH5vf6aRs8aL3i8g\\\\=\\\\=,.DzCP0ogkqKHjgDTsoWBhNg\\\\=\\\\=,.Qx7D42jT3DPuWEBGk4LkZQ\\\\=\\\\=,.VxgIqla0TfRVD7LIPOTh\\\\+w\\\\=\\\\=,.bRg5ToLqb74l-wDFQe2KPw\\\\=\\\\=,.C8GIXWP1AYf85YxqpZ9G7A\\\\=\\\\=,.Ev4Mk6AcPhIAaHGElr8oOA\\\\=\\\\=,.fiFQhN0r13y-LUDJCmeyCw\\\\=\\\\=,.U3LTwhuPBal9zb7j35A3EA\\\\=\\\\=,.a730n5KHd\\\\+Ldw8OEAbgx-Q\\\\=\\\\=,._7Dm1DJ4DzrA-4H49Tnixpg\\\\=\\\\=,.MHSAwlDIFc98zGogOo4lHA\\\\=\\\\=,.fGpB7sQWY1Rn77kKLbdTRw\\\\=\\\\=,.T7hCtTU5lyIHTnazkVpR6A\\\\=\\\\=,._4SlJVIX2HMppzqYKs7YAsg\\\\=\\\\=,.vgZO-85ESZVO9lNOKUmxlA\\\\=\\\\=,.S4A4AGYl6ZdgemG0OwNonQ\\\\=\\\\=,.dkPfmtL44PyDD2QFPhZV-Q\\\\=\\\\=,.mmfYYtbHzdQi7E7X4bZehA\\\\=\\\\=,.Mac\\\\+Ca8FdtMRGFMV\\\\+lpIdQ\\\\=\\\\=,._96CQtftqCm0y8\\\\+rU5k4f9g\\\\=\\\\=,.ptP1g2nVLV6DlgA1FciMfQ\\\\=\\\\=,.Te8Tv\\\\+IHpkizy6cA1MkKSw\\\\=\\\\=,.aNntrWYZ40K0zmbbFvaJlw\\\\=\\\\=,.kDpHXpfwMJdM2gHHwLNGDw\\\\=\\\\=,.VbxvHdCCJ1yrMnDoJtzWOg\\\\=\\\\=,._12M1zRzZLcWeN2QjeQQC-w\\\\=\\\\=,.T4uc1swqKxFgycQJLPcVrg\\\\=\\\\=,.HilhihNCaoFLKEawJSdoSg\\\\=\\\\=,.E\\\\+tl-uSCEVTe\\\\+d1vKTRK-w\\\\=\\\\=,.pyD6pajuuHIt1SWy-UYgIA\\\\=\\\\=,.-GerxUa0NwBEnL0a\\\\+pZqug\\\\=\\\\=,.R6HiTPePPDshdD9-r9dnLw\\\\=\\\\={padding-left:15px;padding-right:15px}label{margin-bottom:.5rem}.\\\\-00CtUSJ\\\\+i\\\\+oUkaxQbNO1Q\\\\=\\\\={text-align:right}.qxyFivrv-q4TREFoVyVREA\\\\=\\\\={display:block;width:100%}@keyframes TaZNDvxXpqanBPZLI8P-5Q\\\\=\\\\={0%{opacity:0}to{opacity:1}}@keyframes idQ4NXyrXGYyqR9fr-6qFA\\\\=\\\\={0%{opacity:1}to{opacity:0}}.TaZNDvxXpqanBPZLI8P-5Q\\\\=\\\\={animation-fill-mode:both;animation-name:TaZNDvxXpqanBPZLI8P-5Q\\\\=\\\\=}.TaZNDvxXpqanBPZLI8P-5Q\\\\=\\\\=,.idQ4NXyrXGYyqR9fr-6qFA\\\\=\\\\={animation-duration:.25s}.idQ4NXyrXGYyqR9fr-6qFA\\\\=\\\\={animation-fill-mode:both;animation-name:idQ4NXyrXGYyqR9fr-6qFA\\\\=\\\\=}\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/sass/_variables.scss\",\"webpack://./resources/js/domains/employee/components/transitions/Fade/Fade.vue\",\"webpack://./resources/sass/_bootstrap.scss\"],\"names\":[],\"mappings\":\"AAqHA,MACI,uBAAA,CACA,gBCpHJ,CDyHA,4BAEI,gCCvHJ,CCYA,4BACI,mBDTJ,CCeA,2DACI,qPAAA,CAEA,2BAAA,CADA,2BAAA,CAGA,WAAA,CADA,YDRJ,CCWI,iHACI,sQDTR,CCYI,kHACI,sQDVR,CCcA,4BACI,kCDXJ,CCcA,yDACI,mCDXJ,CCeA,+DACI,sBDZJ,CCsBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,qFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,qFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,yDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,sFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,qFACI,wBDdJ,CCiBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,qFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,qFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,yDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,0DAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,yDACI,wBDdJ,CC4BA,4BACI,kBDpBJ,CCuBA,6BACI,aAAA,CACA,iBDpBJ,CCuBA,4BACI,uBAAA,CACA,wBDpBJ,CCsBI,kGAGI,gBAAA,CADA,iBDnBR,CCyBA,8OAOI,kBDtBJ,CCyBA,y8DACI,iBAAA,CACA,kBDtBJ,CCyBA,MACI,mBDtBJ,CC0BA,+BACI,gBDvBJ,CC0BA,4BACI,aAAA,CACA,UDvBJ,CA9LA,sCACI,GACI,SAiMN,CA9LE,GACI,SAgMN,CACF,CA7LA,sCACI,GACI,SA+LN,CA5LE,GACI,SA8LN,CACF,CA3LA,4BAGI,wBAAA,CAFA,yCA+LJ,CA1LA,wDAJI,uBAoMJ,CAhMA,4BAGI,wBAAA,CAFA,yCA+LJ\",\"sourcesContent\":[\"// Typography\\n$font-family-sans-serif: \\\"Ubuntu\\\", \\\"sans-serif\\\";\\n$font-size-base: 0.9rem;\\n$line-height-base: 1.6;\\n\\n// Colors\\n$blue: #1c84c6;\\n$indigo: #6574cd;\\n$purple: #9561e2;\\n$pink: #f66d9b;\\n$red: #e3342f;\\n$orange: #f7a54a;\\n$yellow: #ffed4a;\\n$green: #18a689;\\n$teal: #4dc0b5;\\n$cyan: #6cb2eb;\\n$white: #fff;\\n$danger: #f7a54a;\\n\\n$bGrey: #e7eaec;\\n\\n// New variables\\n$transition-duration: 250ms;\\n\\n$breakpoints: (\\n xs: 0,\\n sm: 544px,\\n md: 768px,\\n lg: 992px,\\n xl: 1200px,\\n xxl: 1440px,\\n xxxl: 1600px\\n) !default;\\n\\n$color-white: #fff;\\n$color-seashell: #f1f1f1;\\n$color-athens-gray: #e9ecef;\\n$color-porcelain: #e7eaec;\\n$color-geyser: #dee2e6;\\n$color-iron: #dadadb;\\n$color-iron-darker: #d6d8db;\\n$color-ghost: #ced4da;\\n$color-cadet-blue: #a7b1c2;\\n$color-pale-sky: #6c757d;\\n$color-nevada: #636b6f;\\n$color-shuttle-gray: #5a6268;\\n$color-abbey: #5a6268;\\n$color-trout: #495057;\\n$color-outer-space: #383d41;\\n$color-pickled-bluewood: #2f4050;\\n$color-pickled-bluewood-darker: #293846;\\n$color-shark: #212529;\\n$color-void: #030a24;\\n$color-black: #000;\\n\\n$color-alice-blue: #eff8ff;\\n$color-link-water: #d2e6f4;\\n$color-spindle: #bfddef;\\n$color-seagull: #76beec;\\n$color-curious-blue: #1c84c6;\\n$color-matisse: #176ea4;\\n$color-matisse-darker: #166699;\\n$color-chatams-blue: #0f4567;\\n\\n$color-half-spanish-white: #fdeddb;\\n$color-oasis: #fde6cc;\\n$color-casablanca: #f7a54a;\\n$color-sea-buckthorn: #f59325;\\n$color-carrot-orange: #f58d19;\\n$color-kumera: #805626;\\n\\n$color-scotch-mist: #fffbdb;\\n$color-lemon-chiffron: #fffacc;\\n$color-gorse: #ffed4a;\\n$color-broom: #ffe924;\\n$color-broom-darker: #ffe817;\\n$color-pacifica: #857b26;\\n\\n$color-swans-down: #d1ede7;\\n$color-jagged-ice: #bee6de;\\n$color-mountain-meadow: #18a689;\\n$color-genoa: #13856d;\\n$color-genoa-darker: #127964;\\n$color-eden: #0c5647;\\n\\n$color-french-licac: #dec1ec;\\n$color-medium-purple: #aa39e2;\\n\\n$color-lavender-blush: #fff2f4;\\n$color-pippin: #ffe4e4;\\n$color-pastel-pink: #ffd7e5;\\n$color-we-peep: #f8d8d8;\\n$color-carnation: #f15b6a;\\n$color-punch: #dc3545;\\n$color-cardinal: #c82333;\\n$color-cardinal-darker: #c82333;\\n\\n// shadows\\n$shadow-base: 0 4px 16px 0 rgb(0 0 0 / 0.1);\\n$shadow-base-2: 0 8px 32px rgba(0, 0, 0, 0.05), 0 4px 10px rgba(0, 0, 0, 0.025);\\n$shadow-light: 0 47px 115px rgba(0, 0, 0, 0.03), 0 14px 66px rgba(0, 0, 0, 0.02), 0 6px 28px rgba(0, 0, 0, 0.011), 0 2px 4px rgba(0, 0, 0, 0.005);\\n\\n$light-around-shadow: 0 1px 3px rgb(0 0 0 / 2%), 0 1px 2px rgb(0 0 0 / 12%);\\n$light-right-shadow: 3px 1px 1px rgba(0, 0, 0, 0.03), 4px 1px 1px rgba(0, 0, 0, 0.06);\\n$lighter-right-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\\n\\n// Overwrite Bootstrap variables\\n$primary: #1c84c6;\\n$body-bg: #fff;\\n$body-color: #495057;\\n//$grid-gutter-width: 10px;\\n$min-contrast-ratio: 3;\\n$link-decoration: none;\\n$spacer: 1.25rem;\\n\\n\\n// CSS Variable\\n:root {\\n --primary-color: #1c84c6;\\n --btn-radius: 3px;\\n}\\n\\n// Overwrite primary color\\n\\n.modal-content {\\n // Bootstrap variables\\n --bs-modal-border-radius: 0.25rem;\\n}\\n\",\"\\n@import '~adpi-styles/bootstrap';\\n\\n@keyframes fade-in {\\n from {\\n opacity: 0;\\n }\\n\\n to {\\n opacity: 1;\\n }\\n}\\n\\n@keyframes fade-out {\\n from {\\n opacity: 1;\\n }\\n\\n to {\\n opacity: 0;\\n }\\n}\\n\\n.fade-in {\\n animation-name: fade-in;\\n animation-duration: $transition-duration;\\n animation-fill-mode: both;\\n}\\n\\n.fade-out {\\n animation-name: fade-out;\\n animation-duration: $transition-duration;\\n animation-fill-mode: both;\\n}\\n\",\"@import 'variables';\\n@import 'functions/px';\\n\\n// Ovewrite some of the default bootstrap styles\\n// Overwrite Bootstrap variables\\n$body-bg: #fff;\\n$body-color: #495057;\\n//$grid-gutter-width: 10px;\\n$min-contrast-ratio: 3;\\n$primary: $color-curious-blue;\\n$link-decoration: none;\\n$spacer: 1.25rem;\\n$border-color: $color-iron;\\n$nav-tabs-link-active-bg: #f8fafc;\\n$table-cell-padding-x: 1rem;\\n$table-cell-padding-x-sm: 1rem;\\n\\n// v-b-tooltip doesn't have the non-interactive prop anymore\\n// So this is a workaround to make it non-interactive\\n.b-tooltip {\\n pointer-events: none;\\n}\\n\\n/*\\n* bootstrap-vue-next: 0.12.2. Currently doesn't have styling for sorted table headers\\n */\\n.b-table-sortable .b-table-sort-icon {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22zm0 100 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n background-size: 0.75rem 1rem;\\n background-repeat: no-repeat;\\n width: 1.5rem;\\n height: 1rem;\\n\\n &.sorted.sorted-desc {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n }\\n\\n &.sorted.sorted-asc {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n }\\n}\\n\\n.b-table-sticky-column {\\n background-color: $color-alice-blue !important;\\n}\\n\\n.table.table-striped{\\n --bs-table-border-color: transparent;\\n}\\n\\n// Remove default bootstrap-vue-next sort icon\\n.sorted.b-table-sort-icon:before {\\n content: none !important;\\n}\\n\\n\\n/*\\n* bootstrap-vue-next: 0.12.2. Currently the bootstrap-vue-next toast component doesn't have styling included\\n* So this is a workaround to make it look like the old toast component.\\n* This might change in the future.\\n */\\n\\n.toast.b-toast-primary {\\n background-color: rgba(230,242,255, 1);\\n border-color: rgba(184,218,255, 1);\\n color: #004085\\n}\\n\\n.toast.b-toast-primary .toast-header {\\n color: #004085;\\n background-color: rgba(204,229,255, 1);\\n border-bottom-color: rgba(184,218,255, 1)\\n}\\n\\n.toast.b-toast-primary.b-toast-solid {\\n background-color: #e6f2ff\\n}\\n\\n.toast.b-toast-secondary {\\n background-color: rgba(239,240,241, 1);\\n border-color: rgba(214,216,219, 1);\\n color: #383d41\\n}\\n\\n.toast.b-toast-secondary .toast-header {\\n color: #383d41;\\n background-color: rgba(226,227,229, 1);\\n border-bottom-color: rgba(214,216,219, 1)\\n}\\n\\n.toast.b-toast-secondary.b-toast-solid {\\n background-color: #eff0f1\\n}\\n\\n.toast.b-toast-success {\\n background-color: rgba(230,245,233, 1);\\n border-color: rgba(195,230,203, 1);\\n color: #155724\\n}\\n\\n.toast.b-toast-success .toast-header {\\n color: #155724;\\n background-color: rgba(212,237,218, 1);\\n border-bottom-color: rgba(195,230,203, 1)\\n}\\n\\n.toast.b-toast-success.b-toast-solid {\\n background-color: #e6f5e9\\n}\\n\\n.toast.b-toast-info {\\n background-color: rgba(229,244,247, 1);\\n border-color: rgba(190,229,235, 1);\\n color: #0c5460\\n}\\n\\n.toast.b-toast-info .toast-header {\\n color: #0c5460;\\n background-color: rgba(209,236,241, 1);\\n border-bottom-color: rgba(190,229,235, 1)\\n}\\n\\n.toast.b-toast-info.b-toast-solid {\\n background-color: #e5f4f7\\n}\\n\\n.toast.b-toast-warning {\\n background-color: rgba(255,249,231, 1);\\n border-color: rgba(255,238,186, 1);\\n color: #856404\\n}\\n\\n.toast.b-toast-warning .toast-header {\\n color: #856404;\\n background-color: rgba(255,243,205, 1);\\n border-bottom-color: rgba(255,238,186, 1)\\n}\\n\\n.toast.b-toast-warning.b-toast-solid {\\n background-color: #fff9e7\\n}\\n\\n.toast.b-toast-danger {\\n background-color: rgba(252,237,238, 1);\\n border-color: rgba(245,198,203, 1);\\n color: #721c24\\n}\\n\\n.b-toast-danger .toast-header {\\n color: #721c24;\\n background-color: rgba(248,215,218, 1);\\n border-bottom-color: rgba(245,198,203, 1)\\n}\\n\\n.b-toast-danger.b-toast-solid {\\n background-color: #fcedee\\n}\\n\\n/*\\n* bootstrap-vue-next uses bootstrap 5. And some of the bootstrap 5 classes has been deprecated.\\n* https://getbootstrap.com/docs/5.3/migration/#forms-1\\n* We need to add this to make the form look like the old form.\\n */\\n\\n// Form groups\\n//\\n// Designed to help with the organization and spacing of vertical forms. For\\n// horizontal forms, use the predefined grid classes.\\n\\n.form-group {\\n margin-bottom: 1rem;\\n}\\n\\n.form-text {\\n display: block;\\n margin-top: .25rem;\\n}\\n\\n.row {\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n\\n > .col,\\n > [class*=\\\"col-\\\"] {\\n padding-right: 5px;\\n padding-left: 5px;\\n }\\n}\\n\\n// Form group spacing\\n.row[role=\\\"group\\\"],\\nform div[role=\\\"group\\\"],\\n.input-group[role=\\\"group\\\"],\\n.col > div[role=\\\"group\\\"],\\n[class*=\\\"col-\\\"] > div[role=\\\"group\\\"],\\nfieldset:has(legend.form-label),\\nform fieldset {\\n margin-bottom: 1rem;\\n}\\n\\n.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-auto, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-auto, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-auto, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-auto {\\n padding-left: 15px;\\n padding-right: 15px;\\n}\\n\\nlabel {\\n margin-bottom: 0.5rem;\\n}\\n\\n// Missing bootstrap classes from bootstrap-vue-next\\n.text-right {\\n text-align: right;\\n}\\n\\n.btn-block {\\n display: block;\\n width: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"modal-content\": \"vJifQfqAcWdomLO1n-KJoA==\",\n\t\"b-tooltip\": \"Hu27Gs3l-AY0B70GzltP2Q==\",\n\t\"b-table-sortable\": \"URCr+yZxoV0EHqQdD+MvNg==\",\n\t\"b-table-sort-icon\": \"_2XO1bVPhXWJN5yK3x1tfhw==\",\n\t\"sorted\": \"ut8i7dWB5xb5I1MYB1oHOw==\",\n\t\"sorted-desc\": \"nqcwLASCWvkWJBBRXNizhw==\",\n\t\"sorted-asc\": \"X+wZxtICsNv3xVrEXFG0Yw==\",\n\t\"b-table-sticky-column\": \"XbmDVWCdZ5piYDrNji11cg==\",\n\t\"table\": \"kNs3Z33+lYsDGyoXjQ9HMw==\",\n\t\"table-striped\": \"wqxqBq7cIui+iOBMAtjbYA==\",\n\t\"toast\": \"jtrlFLbKCo+j47COoio9mw==\",\n\t\"b-toast-primary\": \"p6-NmUaYVa0Ew-iuY3JIzQ==\",\n\t\"toast-header\": \"_2vi4rLpZvwh804hOB7LYvA==\",\n\t\"b-toast-solid\": \"CH+5V1ZT2wv-jrWa5Slz5w==\",\n\t\"b-toast-secondary\": \"CbWhXjxjdN0jM6xjalDisg==\",\n\t\"b-toast-success\": \"_3mo2I1b1C25w88rmtcZp4g==\",\n\t\"b-toast-info\": \"tlwirFnvGJHJigx4yKraVA==\",\n\t\"b-toast-warning\": \"IggLMRizEOYLg9P1BaU-KA==\",\n\t\"b-toast-danger\": \"_3etCS5u0ADhoeReocPY0rQ==\",\n\t\"form-group\": \"k2nQjuajA8l9fjW3vNlsFQ==\",\n\t\"form-text\": \"ZLHYL77Uyd+wrXLMNUrcMw==\",\n\t\"row\": \"LqTBJf9BnaAJqJ-b64gjwg==\",\n\t\"col\": \"dux9-VrQSlKbyOibKAm8Aw==\",\n\t\"input-group\": \"_335RTh3MuQpoaVIHxNpzKQ==\",\n\t\"form-label\": \"vRKAfCzAzDONfK-hO92Yzg==\",\n\t\"col-1\": \"Cpp06hAtJnnXwZC7IAqxrw==\",\n\t\"col-10\": \"_4-BfXeVMLAjRzqDlCtjWJQ==\",\n\t\"col-11\": \"sTTcI2JzWTlKtCBKTepH8w==\",\n\t\"col-12\": \"P7fRm7zEnzosUHehC-G+-w==\",\n\t\"col-2\": \"kXLwRQsfgVD52VUT6G2HFw==\",\n\t\"col-3\": \"_3Kn-jS3rrWsYBFKox88yUQ==\",\n\t\"col-4\": \"Mlw4zF0jB1WeIJsjgAlF9Q==\",\n\t\"col-5\": \"hlDLUPCwVMdHYxgqPH3duw==\",\n\t\"col-6\": \"u+Dc2qEgwHP9p2lrbdB2Lw==\",\n\t\"col-7\": \"rOEUgcUvUzfh6t9pph4+IA==\",\n\t\"col-8\": \"It4St4IWgiAaNNgRaeKoww==\",\n\t\"col-9\": \"qo6PIUesFPXNMCgx06u-TA==\",\n\t\"col-auto\": \"XD+LD2HEtqhJt8LGostcvw==\",\n\t\"col-lg\": \"ifoX62PdUQMSfjY8WrmgXw==\",\n\t\"col-lg-1\": \"m+O+qHUgPbPD00SWjem7qw==\",\n\t\"col-lg-10\": \"PvisTZ3R8GdGISoNYGpefg==\",\n\t\"col-lg-11\": \"Z4O-DtV8K7CPTjTMap-yTw==\",\n\t\"col-lg-12\": \"wHu9To+xn3NDXxSXnjvKCQ==\",\n\t\"col-lg-2\": \"_3-CbqdQTLZq8gkMsTUsfvw==\",\n\t\"col-lg-3\": \"vOn3tIA-hGXnn6QYHBJOHQ==\",\n\t\"col-lg-4\": \"_0GEpskJ4sSZQNX5jBRBXrw==\",\n\t\"col-lg-5\": \"_5M355gzbQl6PXH2VN-WdrA==\",\n\t\"col-lg-6\": \"SnJ8KltXD6ybDvQlumF+Lg==\",\n\t\"col-lg-7\": \"FIz+84sU2rVa4nOFt9k-iA==\",\n\t\"col-lg-8\": \"nBVD8ihXsc5Ivd7EgVpICQ==\",\n\t\"col-lg-9\": \"CdIx+xJCTUSjDXD54krr6w==\",\n\t\"col-lg-auto\": \"qSrVNaH39fUiSRQ8HnMFuA==\",\n\t\"col-md\": \"AfRcOEG4qEfc5u0Bjki67w==\",\n\t\"col-md-1\": \"Vxmq-lbz0HYCMQfX2SKS0Q==\",\n\t\"col-md-10\": \"-ok99Ih+GaSc4pZ9j9M4Xw==\",\n\t\"col-md-11\": \"y+gM5MWRACpPR7geafoy4Q==\",\n\t\"col-md-12\": \"z7EVu0TdTHd3fj4UXevHHQ==\",\n\t\"col-md-2\": \"RtfUl4msUBnVzx4PBuY5QA==\",\n\t\"col-md-3\": \"_5v+PkQmZ2O7vqcISXmYhxA==\",\n\t\"col-md-4\": \"stQUxYePqlo4z9J7ryI4Rw==\",\n\t\"col-md-5\": \"Xy-PVKBeZpNgEm8+Es1muQ==\",\n\t\"col-md-6\": \"xjR45XuH5vf6aRs8aL3i8g==\",\n\t\"col-md-7\": \"DzCP0ogkqKHjgDTsoWBhNg==\",\n\t\"col-md-8\": \"Qx7D42jT3DPuWEBGk4LkZQ==\",\n\t\"col-md-9\": \"VxgIqla0TfRVD7LIPOTh+w==\",\n\t\"col-md-auto\": \"bRg5ToLqb74l-wDFQe2KPw==\",\n\t\"col-sm\": \"C8GIXWP1AYf85YxqpZ9G7A==\",\n\t\"col-sm-1\": \"Ev4Mk6AcPhIAaHGElr8oOA==\",\n\t\"col-sm-10\": \"fiFQhN0r13y-LUDJCmeyCw==\",\n\t\"col-sm-11\": \"U3LTwhuPBal9zb7j35A3EA==\",\n\t\"col-sm-12\": \"a730n5KHd+Ldw8OEAbgx-Q==\",\n\t\"col-sm-2\": \"_7Dm1DJ4DzrA-4H49Tnixpg==\",\n\t\"col-sm-3\": \"MHSAwlDIFc98zGogOo4lHA==\",\n\t\"col-sm-4\": \"fGpB7sQWY1Rn77kKLbdTRw==\",\n\t\"col-sm-5\": \"T7hCtTU5lyIHTnazkVpR6A==\",\n\t\"col-sm-6\": \"_4SlJVIX2HMppzqYKs7YAsg==\",\n\t\"col-sm-7\": \"vgZO-85ESZVO9lNOKUmxlA==\",\n\t\"col-sm-8\": \"S4A4AGYl6ZdgemG0OwNonQ==\",\n\t\"col-sm-9\": \"dkPfmtL44PyDD2QFPhZV-Q==\",\n\t\"col-sm-auto\": \"mmfYYtbHzdQi7E7X4bZehA==\",\n\t\"col-xl\": \"Mac+Ca8FdtMRGFMV+lpIdQ==\",\n\t\"col-xl-1\": \"_96CQtftqCm0y8+rU5k4f9g==\",\n\t\"col-xl-10\": \"ptP1g2nVLV6DlgA1FciMfQ==\",\n\t\"col-xl-11\": \"Te8Tv+IHpkizy6cA1MkKSw==\",\n\t\"col-xl-12\": \"aNntrWYZ40K0zmbbFvaJlw==\",\n\t\"col-xl-2\": \"kDpHXpfwMJdM2gHHwLNGDw==\",\n\t\"col-xl-3\": \"VbxvHdCCJ1yrMnDoJtzWOg==\",\n\t\"col-xl-4\": \"_12M1zRzZLcWeN2QjeQQC-w==\",\n\t\"col-xl-5\": \"T4uc1swqKxFgycQJLPcVrg==\",\n\t\"col-xl-6\": \"HilhihNCaoFLKEawJSdoSg==\",\n\t\"col-xl-7\": \"E+tl-uSCEVTe+d1vKTRK-w==\",\n\t\"col-xl-8\": \"pyD6pajuuHIt1SWy-UYgIA==\",\n\t\"col-xl-9\": \"-GerxUa0NwBEnL0a+pZqug==\",\n\t\"col-xl-auto\": \"R6HiTPePPDshdD9-r9dnLw==\",\n\t\"text-right\": \"-00CtUSJ+i+oUkaxQbNO1Q==\",\n\t\"btn-block\": \"qxyFivrv-q4TREFoVyVREA==\",\n\t\"fade-in\": \"TaZNDvxXpqanBPZLI8P-5Q==\",\n\t\"fade-out\": \"idQ4NXyrXGYyqR9fr-6qFA==\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root{--primary-color:#1c84c6;--btn-radius:3px}.ujddRF1O52ojfv081qzDbw\\\\=\\\\={--bs-modal-border-radius:0.25rem}.msb6XsqyzzPTfcrXxyRA6A\\\\=\\\\={pointer-events:none}.gv-rEInPos4BFnkNtslX5A\\\\=\\\\= .M13XCS9WIp6D\\\\+YKNLFmEqw\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22zm0 100 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-size:.75rem 1rem;height:1rem;width:1.5rem}.gv-rEInPos4BFnkNtslX5A\\\\=\\\\= .M13XCS9WIp6D\\\\+YKNLFmEqw\\\\=\\\\=._08X-oCIiXVQI1QFebmXyng\\\\=\\\\=._7\\\\+G2bUjKjKcKXwgVKC3eZQ\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\")}.gv-rEInPos4BFnkNtslX5A\\\\=\\\\= .M13XCS9WIp6D\\\\+YKNLFmEqw\\\\=\\\\=._08X-oCIiXVQI1QFebmXyng\\\\=\\\\=.p0YwALEQ6mXXLyrSPOQ7Pw\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\")}.tPpwwJwpVinZ98MpSPSmGA\\\\=\\\\={background-color:#eff8ff!important}.ry1fRBRTK3m38DXzcuCtsg\\\\=\\\\=._6EP2tT3qTlipGYHbArAeYA\\\\=\\\\={--bs-table-border-color:transparent}._08X-oCIiXVQI1QFebmXyng\\\\=\\\\=.M13XCS9WIp6D\\\\+YKNLFmEqw\\\\=\\\\=:before{content:none!important}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.bzkkQq-r6HNOvsmAPFsnUw\\\\=\\\\={background-color:#e6f2ff;border-color:#b8daff;color:#004085}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.bzkkQq-r6HNOvsmAPFsnUw\\\\=\\\\= .DWTXTx3Wx6OiocNXItSdZw\\\\=\\\\={background-color:#cce5ff;border-bottom-color:#b8daff;color:#004085}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.bzkkQq-r6HNOvsmAPFsnUw\\\\=\\\\=.GBc24LS-eUY8W3ez4eXnMA\\\\=\\\\={background-color:#e6f2ff}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.vNiAd9dwfpg5BlWk6CCxNw\\\\=\\\\={background-color:#eff0f1;border-color:#d6d8db;color:#383d41}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.vNiAd9dwfpg5BlWk6CCxNw\\\\=\\\\= .DWTXTx3Wx6OiocNXItSdZw\\\\=\\\\={background-color:#e2e3e5;border-bottom-color:#d6d8db;color:#383d41}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.vNiAd9dwfpg5BlWk6CCxNw\\\\=\\\\=.GBc24LS-eUY8W3ez4eXnMA\\\\=\\\\={background-color:#eff0f1}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.FKc0YXsYpWGwTODJlDgXqg\\\\=\\\\={background-color:#e6f5e9;border-color:#c3e6cb;color:#155724}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.FKc0YXsYpWGwTODJlDgXqg\\\\=\\\\= .DWTXTx3Wx6OiocNXItSdZw\\\\=\\\\={background-color:#d4edda;border-bottom-color:#c3e6cb;color:#155724}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.FKc0YXsYpWGwTODJlDgXqg\\\\=\\\\=.GBc24LS-eUY8W3ez4eXnMA\\\\=\\\\={background-color:#e6f5e9}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.fw6A80QjcFFi2G4fRmR4FQ\\\\=\\\\={background-color:#e5f4f7;border-color:#bee5eb;color:#0c5460}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.fw6A80QjcFFi2G4fRmR4FQ\\\\=\\\\= .DWTXTx3Wx6OiocNXItSdZw\\\\=\\\\={background-color:#d1ecf1;border-bottom-color:#bee5eb;color:#0c5460}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.fw6A80QjcFFi2G4fRmR4FQ\\\\=\\\\=.GBc24LS-eUY8W3ez4eXnMA\\\\=\\\\={background-color:#e5f4f7}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=._2CDR93cJkIHuIaQDCQv3Eg\\\\=\\\\={background-color:#fff9e7;border-color:#ffeeba;color:#856404}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=._2CDR93cJkIHuIaQDCQv3Eg\\\\=\\\\= .DWTXTx3Wx6OiocNXItSdZw\\\\=\\\\={background-color:#fff3cd;border-bottom-color:#ffeeba;color:#856404}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=._2CDR93cJkIHuIaQDCQv3Eg\\\\=\\\\=.GBc24LS-eUY8W3ez4eXnMA\\\\=\\\\={background-color:#fff9e7}.NgZQ0lfWO\\\\+z8\\\\+pcuDG2Ncg\\\\=\\\\=.PviwEij2J-Fd6TlfvSfAvA\\\\=\\\\={background-color:#fcedee;border-color:#f5c6cb;color:#721c24}.PviwEij2J-Fd6TlfvSfAvA\\\\=\\\\= .DWTXTx3Wx6OiocNXItSdZw\\\\=\\\\={background-color:#f8d7da;border-bottom-color:#f5c6cb;color:#721c24}.PviwEij2J-Fd6TlfvSfAvA\\\\=\\\\=.GBc24LS-eUY8W3ez4eXnMA\\\\=\\\\={background-color:#fcedee}.oyy7ZgRSKMxUb\\\\+tBZJ6RSw\\\\=\\\\={margin-bottom:1rem}.i0LxXylyZNe3XKfmEKNFbg\\\\=\\\\={display:block;margin-top:.25rem}.EScSGCgZCU6ijbF4BMB9OA\\\\=\\\\={margin-left:0!important;margin-right:0!important}.EScSGCgZCU6ijbF4BMB9OA\\\\=\\\\=>.N7XKHEjdq15qR3hVJ9EQFg\\\\=\\\\=,.EScSGCgZCU6ijbF4BMB9OA\\\\=\\\\=>[class*=col-]{padding-left:5px;padding-right:5px}.N7XKHEjdq15qR3hVJ9EQFg\\\\=\\\\=>div[role=group],.kidFYa7DKyhK\\\\+XK9SyORcw\\\\=\\\\=[role=group],.EScSGCgZCU6ijbF4BMB9OA\\\\=\\\\=[role=group],[class*=col-]>div[role=group],fieldset:has(legend.rX5g2hdmBulKt9RD9St8Qw\\\\=\\\\=),form div[role=group],form fieldset{margin-bottom:1rem}.N7XKHEjdq15qR3hVJ9EQFg\\\\=\\\\=,.H7OPYYzYELjJnkHRuw4ycg\\\\=\\\\=,.kU0NHQkqqOuBJ4THAUZu-A\\\\=\\\\=,.H02RKZCJVyFtCeBM0eZscQ\\\\=\\\\=,._2PCaE-PpLSEIrEHuWvM3Sw\\\\=\\\\=,.PmsluWZb2AoaHGBJ-D28-g\\\\=\\\\=,.XErX7ZfgsUpp5mpyiFu-EA\\\\=\\\\=,.ehaCL-ipx\\\\+5EyqtX3A-dsg\\\\=\\\\=,.lTu-uHbv6Ph\\\\+5L0UBbZtVA\\\\=\\\\=,.-ozV6iAxsSt8r2evipmuEw\\\\=\\\\=,.eCMo8LsL6\\\\+GTRgoF7YIuVQ\\\\=\\\\=,.sBRXrOObB94uLBexvVQiXg\\\\=\\\\=,.tOvGQyiGs4H4ElaFCxnE-w\\\\=\\\\=,.eD1j0STWMVlKpWnzeoFpKA\\\\=\\\\=,.NWjbSSx6EpOPeMVgiQ2wZw\\\\=\\\\=,.WY0vHoaGdastea1pXXqWGA\\\\=\\\\=,.nJbstVJ-q5eUhnISD7wxbQ\\\\=\\\\=,.QfuaqCbPhO6Biddr2ByD1A\\\\=\\\\=,.WL4kS7IEqEFBhM\\\\+mgBZhiQ\\\\=\\\\=,.u3AicxlW4EmJ4L4YcU5SkA\\\\=\\\\=,.lafCce2FcEdjIUp5Lwly-w\\\\=\\\\=,.-S-Z8AQg6P0CUlXcIJ4nDA\\\\=\\\\=,.J7OtSzV\\\\+oGr4a8eVaIhcmQ\\\\=\\\\=,.PcGZ-YB5MHaPxzkZz754sg\\\\=\\\\=,.uCeWgHSyROauUSimN0\\\\+jWg\\\\=\\\\=,.Ekv79owL23AarW8spmEVew\\\\=\\\\=,.cfNLRxUlArN3OYGy7jkPlQ\\\\=\\\\=,._6vCH6zBohzzdXGb3oVRjTg\\\\=\\\\=,.E5dgcxpkiuUysIY3cg1OOA\\\\=\\\\=,.kbBH\\\\+hSScHRBV5OqoGs\\\\+yQ\\\\=\\\\=,.SsUV2TUdCXcpMnW6NIC0uQ\\\\=\\\\=,.xmxB\\\\+Q-6MquVe-f\\\\+\\\\+WhBqA\\\\=\\\\=,._1Y22i7WmuTycQtqkhgiYuQ\\\\=\\\\=,.atA7ySzBPvkfhiWwaSaNUA\\\\=\\\\=,._6qJej8CIzuWxKiYbMF3Xnw\\\\=\\\\=,._884mmlcAbxcO9-9GjkIaBw\\\\=\\\\=,.ko19ALqiBx2IQnC1KMs-NQ\\\\=\\\\=,.lDYg5YcmdBEe-evgobXukg\\\\=\\\\=,.-iOM7lwfddAyJPBdKAIX0g\\\\=\\\\=,.vjZw6-ePnYqsdOQlGcH89w\\\\=\\\\=,.cwHFyly6LQ0Z13J8N1qe8A\\\\=\\\\=,.nlgZSvCOqFyrAbhGhSrUQQ\\\\=\\\\=,.jVM6Rq070o89PhHagSk3Kg\\\\=\\\\=,.YLm2HSk6OF8-3q7nctlcXw\\\\=\\\\=,.zRG2GtODxHuK6K71DK5bVw\\\\=\\\\=,._3tZ3tkupoCvstWaEcMmiZg\\\\=\\\\=,._5RGe7\\\\+E85aPBVGQQblpcLQ\\\\=\\\\=,.bxd8IjgCYEp8wAbj5gkRwQ\\\\=\\\\=,.K\\\\+12mGmveG2vgE-c2p4Xjw\\\\=\\\\=,.a6LP2rL4\\\\+WJ1KQAJcSdSYg\\\\=\\\\=,._7PYuAUMyIQY-P1MPL66OkA\\\\=\\\\=,.T2qrUzV8ABVZqx3Hdp9sEg\\\\=\\\\=,.NTWb7psw4CNdmGTSmiNILA\\\\=\\\\=,.cr3AJ7HdrKIGDL5aKvdYMg\\\\=\\\\=,.XvuvBSRToEwm\\\\+TDMfQJBLQ\\\\=\\\\=,.iwJwzBZF9MDvNOpGiYc0YQ\\\\=\\\\=,.LieP2lo1uuwfErfpEUaqZg\\\\=\\\\=,.g5pdrKLV58xt5-v5UaEwGQ\\\\=\\\\=,._6Ws\\\\+PhAMC-bswM70\\\\+g9dJA\\\\=\\\\=,.ElhMQEkNb02MyXO1ze0w6Q\\\\=\\\\=,.fr9w1YV\\\\+FgHGDRez9aHAkQ\\\\=\\\\=,.TZxDgfsGvoMrqH0mhf3kYA\\\\=\\\\=,.ywTiqnYeer4Pyizyq\\\\+gJXg\\\\=\\\\=,.czqf5c-edoT06gpwfMLY5A\\\\=\\\\=,.J087BgwLLziIBgFTACpCQg\\\\=\\\\=,.DZD9qNo87AJ8nwodEi-yiw\\\\=\\\\=,._26odENcQw2OG4urfgxYsbw\\\\=\\\\=,.LBu1IlyJVDDy2Lc9p5V5og\\\\=\\\\=,.YN46Qg1y0S8pO60Zp9Ov-g\\\\=\\\\=,.e3RTvbq6z-LNOhPix2ZEQg\\\\=\\\\={padding-left:15px;padding-right:15px}label{margin-bottom:.5rem}._4XKto1a0eC\\\\+-wUvsmBhY0w\\\\=\\\\={text-align:right}.Ey6QBJGqUbP35MvLEToDfQ\\\\=\\\\={display:block;width:100%}.MzUfoB6HGaeC3XWpBir5kA\\\\=\\\\={width:100%}.MzUfoB6HGaeC3XWpBir5kA\\\\=\\\\=,.jP1sD1ooDPgdGcDlo3LwgA\\\\=\\\\={background-color:#e7eaec;display:flex;-o-object-fit:cover;object-fit:cover}.jP1sD1ooDPgdGcDlo3LwgA\\\\=\\\\={width:50%}\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/sass/_variables.scss\",\"webpack://./resources/js/domains/employee/pages/ShowLiveSettingsForProject/components/LiveView/LiveViewClient.vue\",\"webpack://./resources/sass/_bootstrap.scss\"],\"names\":[],\"mappings\":\"AAqHA,MACI,uBAAA,CACA,gBCpHJ,CDyHA,4BAEI,gCCvHJ,CCYA,4BACI,mBDTJ,CCeA,yDACI,qPAAA,CAEA,2BAAA,CADA,2BAAA,CAGA,WAAA,CADA,YDRJ,CCWI,kHACI,sQDTR,CCYI,gHACI,sQDVR,CCcA,4BACI,kCDXJ,CCcA,wDACI,mCDXJ,CCeA,gEACI,sBDZJ,CCsBA,yDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,qFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,yDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,qFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,yDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,qFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,yDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,qFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,0DACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,sFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,qFACI,wBDdJ,CCiBA,yDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,wDAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,uDACI,wBDdJ,CC4BA,6BACI,kBDpBJ,CCuBA,4BACI,aAAA,CACA,iBDpBJ,CCuBA,4BACI,uBAAA,CACA,wBDpBJ,CCsBI,kGAGI,gBAAA,CADA,iBDnBR,CCyBA,8OAOI,kBDtBJ,CCyBA,q8DACI,iBAAA,CACA,kBDtBJ,CCyBA,MACI,mBDtBJ,CC0BA,8BACI,gBDvBJ,CC0BA,4BACI,aAAA,CACA,UDvBJ,CA9LA,4BAEI,UAmMJ,CA9LA,wDAHI,wBD8Bc,CCjCd,YAAA,CAEA,mBAAA,CAAA,gBAyMJ,CArMA,4BAEI,SAmMJ\",\"sourcesContent\":[\"// Typography\\n$font-family-sans-serif: \\\"Ubuntu\\\", \\\"sans-serif\\\";\\n$font-size-base: 0.9rem;\\n$line-height-base: 1.6;\\n\\n// Colors\\n$blue: #1c84c6;\\n$indigo: #6574cd;\\n$purple: #9561e2;\\n$pink: #f66d9b;\\n$red: #e3342f;\\n$orange: #f7a54a;\\n$yellow: #ffed4a;\\n$green: #18a689;\\n$teal: #4dc0b5;\\n$cyan: #6cb2eb;\\n$white: #fff;\\n$danger: #f7a54a;\\n\\n$bGrey: #e7eaec;\\n\\n// New variables\\n$transition-duration: 250ms;\\n\\n$breakpoints: (\\n xs: 0,\\n sm: 544px,\\n md: 768px,\\n lg: 992px,\\n xl: 1200px,\\n xxl: 1440px,\\n xxxl: 1600px\\n) !default;\\n\\n$color-white: #fff;\\n$color-seashell: #f1f1f1;\\n$color-athens-gray: #e9ecef;\\n$color-porcelain: #e7eaec;\\n$color-geyser: #dee2e6;\\n$color-iron: #dadadb;\\n$color-iron-darker: #d6d8db;\\n$color-ghost: #ced4da;\\n$color-cadet-blue: #a7b1c2;\\n$color-pale-sky: #6c757d;\\n$color-nevada: #636b6f;\\n$color-shuttle-gray: #5a6268;\\n$color-abbey: #5a6268;\\n$color-trout: #495057;\\n$color-outer-space: #383d41;\\n$color-pickled-bluewood: #2f4050;\\n$color-pickled-bluewood-darker: #293846;\\n$color-shark: #212529;\\n$color-void: #030a24;\\n$color-black: #000;\\n\\n$color-alice-blue: #eff8ff;\\n$color-link-water: #d2e6f4;\\n$color-spindle: #bfddef;\\n$color-seagull: #76beec;\\n$color-curious-blue: #1c84c6;\\n$color-matisse: #176ea4;\\n$color-matisse-darker: #166699;\\n$color-chatams-blue: #0f4567;\\n\\n$color-half-spanish-white: #fdeddb;\\n$color-oasis: #fde6cc;\\n$color-casablanca: #f7a54a;\\n$color-sea-buckthorn: #f59325;\\n$color-carrot-orange: #f58d19;\\n$color-kumera: #805626;\\n\\n$color-scotch-mist: #fffbdb;\\n$color-lemon-chiffron: #fffacc;\\n$color-gorse: #ffed4a;\\n$color-broom: #ffe924;\\n$color-broom-darker: #ffe817;\\n$color-pacifica: #857b26;\\n\\n$color-swans-down: #d1ede7;\\n$color-jagged-ice: #bee6de;\\n$color-mountain-meadow: #18a689;\\n$color-genoa: #13856d;\\n$color-genoa-darker: #127964;\\n$color-eden: #0c5647;\\n\\n$color-french-licac: #dec1ec;\\n$color-medium-purple: #aa39e2;\\n\\n$color-lavender-blush: #fff2f4;\\n$color-pippin: #ffe4e4;\\n$color-pastel-pink: #ffd7e5;\\n$color-we-peep: #f8d8d8;\\n$color-carnation: #f15b6a;\\n$color-punch: #dc3545;\\n$color-cardinal: #c82333;\\n$color-cardinal-darker: #c82333;\\n\\n// shadows\\n$shadow-base: 0 4px 16px 0 rgb(0 0 0 / 0.1);\\n$shadow-base-2: 0 8px 32px rgba(0, 0, 0, 0.05), 0 4px 10px rgba(0, 0, 0, 0.025);\\n$shadow-light: 0 47px 115px rgba(0, 0, 0, 0.03), 0 14px 66px rgba(0, 0, 0, 0.02), 0 6px 28px rgba(0, 0, 0, 0.011), 0 2px 4px rgba(0, 0, 0, 0.005);\\n\\n$light-around-shadow: 0 1px 3px rgb(0 0 0 / 2%), 0 1px 2px rgb(0 0 0 / 12%);\\n$light-right-shadow: 3px 1px 1px rgba(0, 0, 0, 0.03), 4px 1px 1px rgba(0, 0, 0, 0.06);\\n$lighter-right-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\\n\\n// Overwrite Bootstrap variables\\n$primary: #1c84c6;\\n$body-bg: #fff;\\n$body-color: #495057;\\n//$grid-gutter-width: 10px;\\n$min-contrast-ratio: 3;\\n$link-decoration: none;\\n$spacer: 1.25rem;\\n\\n\\n// CSS Variable\\n:root {\\n --primary-color: #1c84c6;\\n --btn-radius: 3px;\\n}\\n\\n// Overwrite primary color\\n\\n.modal-content {\\n // Bootstrap variables\\n --bs-modal-border-radius: 0.25rem;\\n}\\n\",\"\\n@import '~adpi-styles/bootstrap';\\n\\n.live-view-client {\\n display: flex;\\n width: 100%;\\n object-fit: cover;\\n background-color: $color-porcelain;\\n}\\n\\n.live-view-two-client {\\n display: flex;\\n width: 50%;\\n object-fit: cover;\\n background-color: $color-porcelain;\\n}\\n\",\"@import 'variables';\\n@import 'functions/px';\\n\\n// Ovewrite some of the default bootstrap styles\\n// Overwrite Bootstrap variables\\n$body-bg: #fff;\\n$body-color: #495057;\\n//$grid-gutter-width: 10px;\\n$min-contrast-ratio: 3;\\n$primary: $color-curious-blue;\\n$link-decoration: none;\\n$spacer: 1.25rem;\\n$border-color: $color-iron;\\n$nav-tabs-link-active-bg: #f8fafc;\\n$table-cell-padding-x: 1rem;\\n$table-cell-padding-x-sm: 1rem;\\n\\n// v-b-tooltip doesn't have the non-interactive prop anymore\\n// So this is a workaround to make it non-interactive\\n.b-tooltip {\\n pointer-events: none;\\n}\\n\\n/*\\n* bootstrap-vue-next: 0.12.2. Currently doesn't have styling for sorted table headers\\n */\\n.b-table-sortable .b-table-sort-icon {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22zm0 100 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n background-size: 0.75rem 1rem;\\n background-repeat: no-repeat;\\n width: 1.5rem;\\n height: 1rem;\\n\\n &.sorted.sorted-desc {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n }\\n\\n &.sorted.sorted-asc {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n }\\n}\\n\\n.b-table-sticky-column {\\n background-color: $color-alice-blue !important;\\n}\\n\\n.table.table-striped{\\n --bs-table-border-color: transparent;\\n}\\n\\n// Remove default bootstrap-vue-next sort icon\\n.sorted.b-table-sort-icon:before {\\n content: none !important;\\n}\\n\\n\\n/*\\n* bootstrap-vue-next: 0.12.2. Currently the bootstrap-vue-next toast component doesn't have styling included\\n* So this is a workaround to make it look like the old toast component.\\n* This might change in the future.\\n */\\n\\n.toast.b-toast-primary {\\n background-color: rgba(230,242,255, 1);\\n border-color: rgba(184,218,255, 1);\\n color: #004085\\n}\\n\\n.toast.b-toast-primary .toast-header {\\n color: #004085;\\n background-color: rgba(204,229,255, 1);\\n border-bottom-color: rgba(184,218,255, 1)\\n}\\n\\n.toast.b-toast-primary.b-toast-solid {\\n background-color: #e6f2ff\\n}\\n\\n.toast.b-toast-secondary {\\n background-color: rgba(239,240,241, 1);\\n border-color: rgba(214,216,219, 1);\\n color: #383d41\\n}\\n\\n.toast.b-toast-secondary .toast-header {\\n color: #383d41;\\n background-color: rgba(226,227,229, 1);\\n border-bottom-color: rgba(214,216,219, 1)\\n}\\n\\n.toast.b-toast-secondary.b-toast-solid {\\n background-color: #eff0f1\\n}\\n\\n.toast.b-toast-success {\\n background-color: rgba(230,245,233, 1);\\n border-color: rgba(195,230,203, 1);\\n color: #155724\\n}\\n\\n.toast.b-toast-success .toast-header {\\n color: #155724;\\n background-color: rgba(212,237,218, 1);\\n border-bottom-color: rgba(195,230,203, 1)\\n}\\n\\n.toast.b-toast-success.b-toast-solid {\\n background-color: #e6f5e9\\n}\\n\\n.toast.b-toast-info {\\n background-color: rgba(229,244,247, 1);\\n border-color: rgba(190,229,235, 1);\\n color: #0c5460\\n}\\n\\n.toast.b-toast-info .toast-header {\\n color: #0c5460;\\n background-color: rgba(209,236,241, 1);\\n border-bottom-color: rgba(190,229,235, 1)\\n}\\n\\n.toast.b-toast-info.b-toast-solid {\\n background-color: #e5f4f7\\n}\\n\\n.toast.b-toast-warning {\\n background-color: rgba(255,249,231, 1);\\n border-color: rgba(255,238,186, 1);\\n color: #856404\\n}\\n\\n.toast.b-toast-warning .toast-header {\\n color: #856404;\\n background-color: rgba(255,243,205, 1);\\n border-bottom-color: rgba(255,238,186, 1)\\n}\\n\\n.toast.b-toast-warning.b-toast-solid {\\n background-color: #fff9e7\\n}\\n\\n.toast.b-toast-danger {\\n background-color: rgba(252,237,238, 1);\\n border-color: rgba(245,198,203, 1);\\n color: #721c24\\n}\\n\\n.b-toast-danger .toast-header {\\n color: #721c24;\\n background-color: rgba(248,215,218, 1);\\n border-bottom-color: rgba(245,198,203, 1)\\n}\\n\\n.b-toast-danger.b-toast-solid {\\n background-color: #fcedee\\n}\\n\\n/*\\n* bootstrap-vue-next uses bootstrap 5. And some of the bootstrap 5 classes has been deprecated.\\n* https://getbootstrap.com/docs/5.3/migration/#forms-1\\n* We need to add this to make the form look like the old form.\\n */\\n\\n// Form groups\\n//\\n// Designed to help with the organization and spacing of vertical forms. For\\n// horizontal forms, use the predefined grid classes.\\n\\n.form-group {\\n margin-bottom: 1rem;\\n}\\n\\n.form-text {\\n display: block;\\n margin-top: .25rem;\\n}\\n\\n.row {\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n\\n > .col,\\n > [class*=\\\"col-\\\"] {\\n padding-right: 5px;\\n padding-left: 5px;\\n }\\n}\\n\\n// Form group spacing\\n.row[role=\\\"group\\\"],\\nform div[role=\\\"group\\\"],\\n.input-group[role=\\\"group\\\"],\\n.col > div[role=\\\"group\\\"],\\n[class*=\\\"col-\\\"] > div[role=\\\"group\\\"],\\nfieldset:has(legend.form-label),\\nform fieldset {\\n margin-bottom: 1rem;\\n}\\n\\n.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-auto, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-auto, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-auto, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-auto {\\n padding-left: 15px;\\n padding-right: 15px;\\n}\\n\\nlabel {\\n margin-bottom: 0.5rem;\\n}\\n\\n// Missing bootstrap classes from bootstrap-vue-next\\n.text-right {\\n text-align: right;\\n}\\n\\n.btn-block {\\n display: block;\\n width: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"modal-content\": \"ujddRF1O52ojfv081qzDbw==\",\n\t\"b-tooltip\": \"msb6XsqyzzPTfcrXxyRA6A==\",\n\t\"b-table-sortable\": \"gv-rEInPos4BFnkNtslX5A==\",\n\t\"b-table-sort-icon\": \"M13XCS9WIp6D+YKNLFmEqw==\",\n\t\"sorted\": \"_08X-oCIiXVQI1QFebmXyng==\",\n\t\"sorted-desc\": \"_7+G2bUjKjKcKXwgVKC3eZQ==\",\n\t\"sorted-asc\": \"p0YwALEQ6mXXLyrSPOQ7Pw==\",\n\t\"b-table-sticky-column\": \"tPpwwJwpVinZ98MpSPSmGA==\",\n\t\"table\": \"ry1fRBRTK3m38DXzcuCtsg==\",\n\t\"table-striped\": \"_6EP2tT3qTlipGYHbArAeYA==\",\n\t\"toast\": \"NgZQ0lfWO+z8+pcuDG2Ncg==\",\n\t\"b-toast-primary\": \"bzkkQq-r6HNOvsmAPFsnUw==\",\n\t\"toast-header\": \"DWTXTx3Wx6OiocNXItSdZw==\",\n\t\"b-toast-solid\": \"GBc24LS-eUY8W3ez4eXnMA==\",\n\t\"b-toast-secondary\": \"vNiAd9dwfpg5BlWk6CCxNw==\",\n\t\"b-toast-success\": \"FKc0YXsYpWGwTODJlDgXqg==\",\n\t\"b-toast-info\": \"fw6A80QjcFFi2G4fRmR4FQ==\",\n\t\"b-toast-warning\": \"_2CDR93cJkIHuIaQDCQv3Eg==\",\n\t\"b-toast-danger\": \"PviwEij2J-Fd6TlfvSfAvA==\",\n\t\"form-group\": \"oyy7ZgRSKMxUb+tBZJ6RSw==\",\n\t\"form-text\": \"i0LxXylyZNe3XKfmEKNFbg==\",\n\t\"row\": \"EScSGCgZCU6ijbF4BMB9OA==\",\n\t\"col\": \"N7XKHEjdq15qR3hVJ9EQFg==\",\n\t\"input-group\": \"kidFYa7DKyhK+XK9SyORcw==\",\n\t\"form-label\": \"rX5g2hdmBulKt9RD9St8Qw==\",\n\t\"col-1\": \"H7OPYYzYELjJnkHRuw4ycg==\",\n\t\"col-10\": \"kU0NHQkqqOuBJ4THAUZu-A==\",\n\t\"col-11\": \"H02RKZCJVyFtCeBM0eZscQ==\",\n\t\"col-12\": \"_2PCaE-PpLSEIrEHuWvM3Sw==\",\n\t\"col-2\": \"PmsluWZb2AoaHGBJ-D28-g==\",\n\t\"col-3\": \"XErX7ZfgsUpp5mpyiFu-EA==\",\n\t\"col-4\": \"ehaCL-ipx+5EyqtX3A-dsg==\",\n\t\"col-5\": \"lTu-uHbv6Ph+5L0UBbZtVA==\",\n\t\"col-6\": \"-ozV6iAxsSt8r2evipmuEw==\",\n\t\"col-7\": \"eCMo8LsL6+GTRgoF7YIuVQ==\",\n\t\"col-8\": \"sBRXrOObB94uLBexvVQiXg==\",\n\t\"col-9\": \"tOvGQyiGs4H4ElaFCxnE-w==\",\n\t\"col-auto\": \"eD1j0STWMVlKpWnzeoFpKA==\",\n\t\"col-lg\": \"NWjbSSx6EpOPeMVgiQ2wZw==\",\n\t\"col-lg-1\": \"WY0vHoaGdastea1pXXqWGA==\",\n\t\"col-lg-10\": \"nJbstVJ-q5eUhnISD7wxbQ==\",\n\t\"col-lg-11\": \"QfuaqCbPhO6Biddr2ByD1A==\",\n\t\"col-lg-12\": \"WL4kS7IEqEFBhM+mgBZhiQ==\",\n\t\"col-lg-2\": \"u3AicxlW4EmJ4L4YcU5SkA==\",\n\t\"col-lg-3\": \"lafCce2FcEdjIUp5Lwly-w==\",\n\t\"col-lg-4\": \"-S-Z8AQg6P0CUlXcIJ4nDA==\",\n\t\"col-lg-5\": \"J7OtSzV+oGr4a8eVaIhcmQ==\",\n\t\"col-lg-6\": \"PcGZ-YB5MHaPxzkZz754sg==\",\n\t\"col-lg-7\": \"uCeWgHSyROauUSimN0+jWg==\",\n\t\"col-lg-8\": \"Ekv79owL23AarW8spmEVew==\",\n\t\"col-lg-9\": \"cfNLRxUlArN3OYGy7jkPlQ==\",\n\t\"col-lg-auto\": \"_6vCH6zBohzzdXGb3oVRjTg==\",\n\t\"col-md\": \"E5dgcxpkiuUysIY3cg1OOA==\",\n\t\"col-md-1\": \"kbBH+hSScHRBV5OqoGs+yQ==\",\n\t\"col-md-10\": \"SsUV2TUdCXcpMnW6NIC0uQ==\",\n\t\"col-md-11\": \"xmxB+Q-6MquVe-f++WhBqA==\",\n\t\"col-md-12\": \"_1Y22i7WmuTycQtqkhgiYuQ==\",\n\t\"col-md-2\": \"atA7ySzBPvkfhiWwaSaNUA==\",\n\t\"col-md-3\": \"_6qJej8CIzuWxKiYbMF3Xnw==\",\n\t\"col-md-4\": \"_884mmlcAbxcO9-9GjkIaBw==\",\n\t\"col-md-5\": \"ko19ALqiBx2IQnC1KMs-NQ==\",\n\t\"col-md-6\": \"lDYg5YcmdBEe-evgobXukg==\",\n\t\"col-md-7\": \"-iOM7lwfddAyJPBdKAIX0g==\",\n\t\"col-md-8\": \"vjZw6-ePnYqsdOQlGcH89w==\",\n\t\"col-md-9\": \"cwHFyly6LQ0Z13J8N1qe8A==\",\n\t\"col-md-auto\": \"nlgZSvCOqFyrAbhGhSrUQQ==\",\n\t\"col-sm\": \"jVM6Rq070o89PhHagSk3Kg==\",\n\t\"col-sm-1\": \"YLm2HSk6OF8-3q7nctlcXw==\",\n\t\"col-sm-10\": \"zRG2GtODxHuK6K71DK5bVw==\",\n\t\"col-sm-11\": \"_3tZ3tkupoCvstWaEcMmiZg==\",\n\t\"col-sm-12\": \"_5RGe7+E85aPBVGQQblpcLQ==\",\n\t\"col-sm-2\": \"bxd8IjgCYEp8wAbj5gkRwQ==\",\n\t\"col-sm-3\": \"K+12mGmveG2vgE-c2p4Xjw==\",\n\t\"col-sm-4\": \"a6LP2rL4+WJ1KQAJcSdSYg==\",\n\t\"col-sm-5\": \"_7PYuAUMyIQY-P1MPL66OkA==\",\n\t\"col-sm-6\": \"T2qrUzV8ABVZqx3Hdp9sEg==\",\n\t\"col-sm-7\": \"NTWb7psw4CNdmGTSmiNILA==\",\n\t\"col-sm-8\": \"cr3AJ7HdrKIGDL5aKvdYMg==\",\n\t\"col-sm-9\": \"XvuvBSRToEwm+TDMfQJBLQ==\",\n\t\"col-sm-auto\": \"iwJwzBZF9MDvNOpGiYc0YQ==\",\n\t\"col-xl\": \"LieP2lo1uuwfErfpEUaqZg==\",\n\t\"col-xl-1\": \"g5pdrKLV58xt5-v5UaEwGQ==\",\n\t\"col-xl-10\": \"_6Ws+PhAMC-bswM70+g9dJA==\",\n\t\"col-xl-11\": \"ElhMQEkNb02MyXO1ze0w6Q==\",\n\t\"col-xl-12\": \"fr9w1YV+FgHGDRez9aHAkQ==\",\n\t\"col-xl-2\": \"TZxDgfsGvoMrqH0mhf3kYA==\",\n\t\"col-xl-3\": \"ywTiqnYeer4Pyizyq+gJXg==\",\n\t\"col-xl-4\": \"czqf5c-edoT06gpwfMLY5A==\",\n\t\"col-xl-5\": \"J087BgwLLziIBgFTACpCQg==\",\n\t\"col-xl-6\": \"DZD9qNo87AJ8nwodEi-yiw==\",\n\t\"col-xl-7\": \"_26odENcQw2OG4urfgxYsbw==\",\n\t\"col-xl-8\": \"LBu1IlyJVDDy2Lc9p5V5og==\",\n\t\"col-xl-9\": \"YN46Qg1y0S8pO60Zp9Ov-g==\",\n\t\"col-xl-auto\": \"e3RTvbq6z-LNOhPix2ZEQg==\",\n\t\"text-right\": \"_4XKto1a0eC+-wUvsmBhY0w==\",\n\t\"btn-block\": \"Ey6QBJGqUbP35MvLEToDfQ==\",\n\t\"live-view-client\": \"MzUfoB6HGaeC3XWpBir5kA==\",\n\t\"live-view-two-client\": \"jP1sD1ooDPgdGcDlo3LwgA==\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root{--primary-color:#1c84c6;--btn-radius:3px}._24lL9Zz2gSUw87ZpJQuyhw\\\\=\\\\={--bs-modal-border-radius:0.25rem}.myhQ8BVNLScMPRjChAJZ7A\\\\=\\\\={pointer-events:none}.u0YS6v3AWr-nihCswGWgsQ\\\\=\\\\= .Wproc3iqnZ6M0xgGagq-SQ\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22zm0 100 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-size:.75rem 1rem;height:1rem;width:1.5rem}.u0YS6v3AWr-nihCswGWgsQ\\\\=\\\\= .Wproc3iqnZ6M0xgGagq-SQ\\\\=\\\\=.lp6EhFVeoaYMH-K8xUg2\\\\+A\\\\=\\\\=.wqJmd0v5p6hk\\\\+WxAibWsBw\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\")}.u0YS6v3AWr-nihCswGWgsQ\\\\=\\\\= .Wproc3iqnZ6M0xgGagq-SQ\\\\=\\\\=.lp6EhFVeoaYMH-K8xUg2\\\\+A\\\\=\\\\=.dmtcE7KxqXDR0E0pwjgp-g\\\\=\\\\={background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\")}.Rz9SHqHBiRWEzZfC4gdrrg\\\\=\\\\={background-color:#eff8ff!important}._4mZK1Pda2Yhv-P274pptpQ\\\\=\\\\=.q9mOnR5SSM3CotCKD23v\\\\+A\\\\=\\\\={--bs-table-border-color:transparent}.lp6EhFVeoaYMH-K8xUg2\\\\+A\\\\=\\\\=.Wproc3iqnZ6M0xgGagq-SQ\\\\=\\\\=:before{content:none!important}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4wwR7ZDJSUpPxG7VXr6iWw\\\\=\\\\={background-color:#e6f2ff;border-color:#b8daff;color:#004085}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4wwR7ZDJSUpPxG7VXr6iWw\\\\=\\\\= ._1XYAlgnBO5-hLn5R\\\\+FOaUA\\\\=\\\\={background-color:#cce5ff;border-bottom-color:#b8daff;color:#004085}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4wwR7ZDJSUpPxG7VXr6iWw\\\\=\\\\=._9d88zfrJxHAQm0U24OuqYQ\\\\=\\\\={background-color:#e6f2ff}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._3K7srHVOOwq8zlMxIDR5-g\\\\=\\\\={background-color:#eff0f1;border-color:#d6d8db;color:#383d41}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._3K7srHVOOwq8zlMxIDR5-g\\\\=\\\\= ._1XYAlgnBO5-hLn5R\\\\+FOaUA\\\\=\\\\={background-color:#e2e3e5;border-bottom-color:#d6d8db;color:#383d41}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._3K7srHVOOwq8zlMxIDR5-g\\\\=\\\\=._9d88zfrJxHAQm0U24OuqYQ\\\\=\\\\={background-color:#eff0f1}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._93hZhLjzbU1W5GacOiIUjw\\\\=\\\\={background-color:#e6f5e9;border-color:#c3e6cb;color:#155724}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._93hZhLjzbU1W5GacOiIUjw\\\\=\\\\= ._1XYAlgnBO5-hLn5R\\\\+FOaUA\\\\=\\\\={background-color:#d4edda;border-bottom-color:#c3e6cb;color:#155724}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._93hZhLjzbU1W5GacOiIUjw\\\\=\\\\=._9d88zfrJxHAQm0U24OuqYQ\\\\=\\\\={background-color:#e6f5e9}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4piZWrcIQQBf7sCsXA7KDw\\\\=\\\\={background-color:#e5f4f7;border-color:#bee5eb;color:#0c5460}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4piZWrcIQQBf7sCsXA7KDw\\\\=\\\\= ._1XYAlgnBO5-hLn5R\\\\+FOaUA\\\\=\\\\={background-color:#d1ecf1;border-bottom-color:#bee5eb;color:#0c5460}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4piZWrcIQQBf7sCsXA7KDw\\\\=\\\\=._9d88zfrJxHAQm0U24OuqYQ\\\\=\\\\={background-color:#e5f4f7}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4TSpvj-o8KQpwjf4keliHw\\\\=\\\\={background-color:#fff9e7;border-color:#ffeeba;color:#856404}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4TSpvj-o8KQpwjf4keliHw\\\\=\\\\= ._1XYAlgnBO5-hLn5R\\\\+FOaUA\\\\=\\\\={background-color:#fff3cd;border-bottom-color:#ffeeba;color:#856404}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._4TSpvj-o8KQpwjf4keliHw\\\\=\\\\=._9d88zfrJxHAQm0U24OuqYQ\\\\=\\\\={background-color:#fff9e7}.e7oMCg2WS4T4OCPpCMbZsA\\\\=\\\\=._1rFwGgTnwpfMa7I0w87WLw\\\\=\\\\={background-color:#fcedee;border-color:#f5c6cb;color:#721c24}._1rFwGgTnwpfMa7I0w87WLw\\\\=\\\\= ._1XYAlgnBO5-hLn5R\\\\+FOaUA\\\\=\\\\={background-color:#f8d7da;border-bottom-color:#f5c6cb;color:#721c24}._1rFwGgTnwpfMa7I0w87WLw\\\\=\\\\=._9d88zfrJxHAQm0U24OuqYQ\\\\=\\\\={background-color:#fcedee}.LlKiqxIuiBxrBoQftg80Wg\\\\=\\\\={margin-bottom:1rem}.zEAOQxzkN6xqGp0ITuqITA\\\\=\\\\={display:block;margin-top:.25rem}.b3Ac2BkeP\\\\+LBhSmYlz3oSA\\\\=\\\\={margin-left:0!important;margin-right:0!important}.b3Ac2BkeP\\\\+LBhSmYlz3oSA\\\\=\\\\=>.P4BdApyC71OY4c\\\\+uiUdVrw\\\\=\\\\=,.b3Ac2BkeP\\\\+LBhSmYlz3oSA\\\\=\\\\=>[class*=col-]{padding-left:5px;padding-right:5px}.P4BdApyC71OY4c\\\\+uiUdVrw\\\\=\\\\=>div[role=group],.beOSunKeHg7qxMaCapvwKw\\\\=\\\\=[role=group],.b3Ac2BkeP\\\\+LBhSmYlz3oSA\\\\=\\\\=[role=group],[class*=col-]>div[role=group],fieldset:has(legend._4UnQ\\\\+oOdksah4FelP4Hj3g\\\\=\\\\=),form div[role=group],form fieldset{margin-bottom:1rem}.P4BdApyC71OY4c\\\\+uiUdVrw\\\\=\\\\=,.Lr94GS--\\\\+nIxB3C6uBurYg\\\\=\\\\=,.BrL81g716RqqHdriygzpvg\\\\=\\\\=,.S5S06qU8N-0Ftzsz1rTKYA\\\\=\\\\=,.UzlqT4LvGKNunRCbJFJ4ZQ\\\\=\\\\=,._1U7NNO0Px8aWzUN-HqcXAw\\\\=\\\\=,.Dw2wQhKRscbLqYPG9hcPTg\\\\=\\\\=,.Q4x1EkUreejDjcsb3KYChg\\\\=\\\\=,.pW5ga09A0\\\\+RtaAFY9c40XQ\\\\=\\\\=,._3H0KU8UH7yp54iOEe89enQ\\\\=\\\\=,.exW9\\\\+BOspKyzFds871I0zg\\\\=\\\\=,._6qVBVeoFS-8un1Rj538xSg\\\\=\\\\=,.aeEiHH4iMciZZoQWhrR0wQ\\\\=\\\\=,.HKMZSHJ27kX6U6ztToL1yA\\\\=\\\\=,.uA18aSOUJWrgvVP01jchmQ\\\\=\\\\=,.hjIkeX7YcSJm5Xsp5ZaPwQ\\\\=\\\\=,.HkzLYzvT6jDswW9r2cGwSg\\\\=\\\\=,.c51tNYWiKfjYqnF9FMk7Vw\\\\=\\\\=,.m8o6\\\\+mWxmaTKGndIptvTRA\\\\=\\\\=,.-p9ZgCVJxhyqaQPjhM5\\\\+sg\\\\=\\\\=,._7CdJcwb2oIKggsS\\\\+Qq01Tg\\\\=\\\\=,.F3JkAK-xLK\\\\+eXsYLEmnCWw\\\\=\\\\=,.DGWt8V9NLWq36FMADbvrtw\\\\=\\\\=,.qd2P4bfu1JjFt-VXZlJnOw\\\\=\\\\=,._7eZf0\\\\+tdsrk-2\\\\+siclI80w\\\\=\\\\=,._9gm7fSyX3uciORHiB3rpaw\\\\=\\\\=,.i8vAuoYa-OSpV6u3-b0t2g\\\\=\\\\=,.Apuwepm7bUAgp6uqgYIOJA\\\\=\\\\=,.-MFXtq9kZwgvGUK7mu0R4g\\\\=\\\\=,.lvbHxvhP1R4Dghn4tI2QVg\\\\=\\\\=,.ssPT3QCBusbwuDXYnYHQTA\\\\=\\\\=,._7Uh4Ggj5cr0ZlwX8\\\\+SQd3A\\\\=\\\\=,.ZlpVM2SfjSANo9jNlEb4fw\\\\=\\\\=,.MsqpOwok4R3p\\\\+Az6OQBt5Q\\\\=\\\\=,.szjqP5U8gQI7o2OmhPQMJg\\\\=\\\\=,.Ryk\\\\+JcSFDTztL6aRE8rtWQ\\\\=\\\\=,.lvxYml0TdCqNAFSUv0vuCQ\\\\=\\\\=,.TkHD5aSPtusAPbT5Jup36w\\\\=\\\\=,.siI-ZUHW2V3baXutNjZjVQ\\\\=\\\\=,.RWjN65WrUrK4P52T4EF5UQ\\\\=\\\\=,._6bI63e-iDw2gpycCR28ycg\\\\=\\\\=,.r8ZPYzxI3RbGMSI4r-sxVA\\\\=\\\\=,._8dj9Rb-b6DcyAL6lx1YKzg\\\\=\\\\=,.i4dvHGwewbVD5qSA-KeE\\\\+g\\\\=\\\\=,._8fZfKVdGOzlV0jvWjgLnBQ\\\\=\\\\=,._2Q6R099OdOF5A9pEuu21CQ\\\\=\\\\=,.njsJIj4o8vcbg9enVm7DVQ\\\\=\\\\=,.nj9eR7DldFfX\\\\+fo4UgQdXw\\\\=\\\\=,.rdvrp7ngEkJNMY3V\\\\+1m3Zw\\\\=\\\\=,.o6KmegDxCfBCX4L2UEs2gA\\\\=\\\\=,.Too4mGK4q8JJNNZN7mr6bg\\\\=\\\\=,.uliLNzx5iIQvWuq628\\\\+TKw\\\\=\\\\=,.z5M8OghDTAgWwiTkybtkvA\\\\=\\\\=,.rlqkecSOYUtdYHWKlTDOmQ\\\\=\\\\=,.Y7uL8qRnoWxIUbqoxw8mmQ\\\\=\\\\=,.LiQX-DBGJU\\\\+BIp57yfGeYA\\\\=\\\\=,.hqoa8p8QqzMuyQ0zE7UEeg\\\\=\\\\=,.SuSfY2W5SBnqxVwmPTyw6Q\\\\=\\\\=,.I2PnRJmu6rymSB4qkW3RmQ\\\\=\\\\=,.H-Z7j-uObHcmdq6RKLILlQ\\\\=\\\\=,._8DGZkkxNvWQhRoXD7qv4uQ\\\\=\\\\=,.SYne8WiJ11xxhV1gto\\\\+Wpg\\\\=\\\\=,.Ytcud8bDq70a26EkGIf1pw\\\\=\\\\=,.LllcK9eDwkPUlif\\\\+af8-EA\\\\=\\\\=,.YKgxVBSi\\\\+wY\\\\+qLb0b9jjrg\\\\=\\\\=,.aKm4IERQh6rjW8cN3OQc7Q\\\\=\\\\=,.jZQXiZfKjHSXhv7pqR7WuA\\\\=\\\\=,.ZGOKLratzKjA8zId5qku7g\\\\=\\\\=,.-Y3p6ptP0pLoh3zo1VPyoQ\\\\=\\\\=,._3U4m-IDyUi1Zjlz1GbUhIg\\\\=\\\\={padding-left:15px;padding-right:15px}label{margin-bottom:.5rem}.Q8nDbB8vhxZUx-BuY4qy-w\\\\=\\\\={text-align:right}.lCXGcAjNBGS2xrZzMWxTwg\\\\=\\\\={display:block;width:100%}.K1wJOYace6OdhVI\\\\+yQvsjw\\\\=\\\\={background-color:#fff;border:1px solid #176ea4;border-radius:.25rem;display:flex;flex-direction:column;gap:1rem;padding:1rem;position:fixed;right:0;top:0}.kmr8dQ5q\\\\+U39iqJiMGTElg\\\\=\\\\={font-size:1rem;padding:.625rem}.rlcryOZFJeDuq7gGWEU5WA\\\\=\\\\={margin-top:.5rem}\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/sass/_variables.scss\",\"webpack://./resources/js/domains/employee/store/modules/liveConnection/components/EmployeeLiveOverlay.vue\",\"webpack://./resources/sass/_bootstrap.scss\"],\"names\":[],\"mappings\":\"AAqHA,MACI,uBAAA,CACA,gBCpHJ,CDyHA,6BAEI,gCCvHJ,CCYA,4BACI,mBDTJ,CCeA,wDACI,qPAAA,CAEA,2BAAA,CADA,2BAAA,CAGA,WAAA,CADA,YDRJ,CCWI,gHACI,sQDTR,CCYI,+GACI,sQDVR,CCcA,4BACI,kCDXJ,CCcA,yDACI,mCDXJ,CCeA,+DACI,sBDZJ,CCsBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,sFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,sFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,sFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,sFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,sFAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,oFACI,wBDdJ,CCiBA,wDACI,wBAAA,CACA,oBAAA,CACA,aDdJ,CCiBA,2DAEI,wBAAA,CACA,2BAAA,CAFA,aDZJ,CCiBA,yDACI,wBDdJ,CC4BA,4BACI,kBDpBJ,CCuBA,4BACI,aAAA,CACA,iBDpBJ,CCuBA,6BACI,uBAAA,CACA,wBDpBJ,CCsBI,qGAGI,gBAAA,CADA,iBDnBR,CCyBA,iPAOI,kBDtBJ,CCyBA,28DACI,iBAAA,CACA,kBDtBJ,CCyBA,MACI,mBDtBJ,CC0BA,4BACI,gBDvBJ,CC0BA,4BACI,aAAA,CACA,UDvBJ,CA9LA,6BAQI,qBDuBU,CCtBV,wBAAA,CACA,oBAAA,CANA,YAAA,CACA,qBAAA,CACA,QAAA,CACA,YAAA,CANA,cAAA,CAEA,OAAA,CADA,KAyMJ,CA9LA,6BAEI,cAAA,CADA,eAkMJ,CA9LA,4BACI,gBAiMJ\",\"sourcesContent\":[\"// Typography\\n$font-family-sans-serif: \\\"Ubuntu\\\", \\\"sans-serif\\\";\\n$font-size-base: 0.9rem;\\n$line-height-base: 1.6;\\n\\n// Colors\\n$blue: #1c84c6;\\n$indigo: #6574cd;\\n$purple: #9561e2;\\n$pink: #f66d9b;\\n$red: #e3342f;\\n$orange: #f7a54a;\\n$yellow: #ffed4a;\\n$green: #18a689;\\n$teal: #4dc0b5;\\n$cyan: #6cb2eb;\\n$white: #fff;\\n$danger: #f7a54a;\\n\\n$bGrey: #e7eaec;\\n\\n// New variables\\n$transition-duration: 250ms;\\n\\n$breakpoints: (\\n xs: 0,\\n sm: 544px,\\n md: 768px,\\n lg: 992px,\\n xl: 1200px,\\n xxl: 1440px,\\n xxxl: 1600px\\n) !default;\\n\\n$color-white: #fff;\\n$color-seashell: #f1f1f1;\\n$color-athens-gray: #e9ecef;\\n$color-porcelain: #e7eaec;\\n$color-geyser: #dee2e6;\\n$color-iron: #dadadb;\\n$color-iron-darker: #d6d8db;\\n$color-ghost: #ced4da;\\n$color-cadet-blue: #a7b1c2;\\n$color-pale-sky: #6c757d;\\n$color-nevada: #636b6f;\\n$color-shuttle-gray: #5a6268;\\n$color-abbey: #5a6268;\\n$color-trout: #495057;\\n$color-outer-space: #383d41;\\n$color-pickled-bluewood: #2f4050;\\n$color-pickled-bluewood-darker: #293846;\\n$color-shark: #212529;\\n$color-void: #030a24;\\n$color-black: #000;\\n\\n$color-alice-blue: #eff8ff;\\n$color-link-water: #d2e6f4;\\n$color-spindle: #bfddef;\\n$color-seagull: #76beec;\\n$color-curious-blue: #1c84c6;\\n$color-matisse: #176ea4;\\n$color-matisse-darker: #166699;\\n$color-chatams-blue: #0f4567;\\n\\n$color-half-spanish-white: #fdeddb;\\n$color-oasis: #fde6cc;\\n$color-casablanca: #f7a54a;\\n$color-sea-buckthorn: #f59325;\\n$color-carrot-orange: #f58d19;\\n$color-kumera: #805626;\\n\\n$color-scotch-mist: #fffbdb;\\n$color-lemon-chiffron: #fffacc;\\n$color-gorse: #ffed4a;\\n$color-broom: #ffe924;\\n$color-broom-darker: #ffe817;\\n$color-pacifica: #857b26;\\n\\n$color-swans-down: #d1ede7;\\n$color-jagged-ice: #bee6de;\\n$color-mountain-meadow: #18a689;\\n$color-genoa: #13856d;\\n$color-genoa-darker: #127964;\\n$color-eden: #0c5647;\\n\\n$color-french-licac: #dec1ec;\\n$color-medium-purple: #aa39e2;\\n\\n$color-lavender-blush: #fff2f4;\\n$color-pippin: #ffe4e4;\\n$color-pastel-pink: #ffd7e5;\\n$color-we-peep: #f8d8d8;\\n$color-carnation: #f15b6a;\\n$color-punch: #dc3545;\\n$color-cardinal: #c82333;\\n$color-cardinal-darker: #c82333;\\n\\n// shadows\\n$shadow-base: 0 4px 16px 0 rgb(0 0 0 / 0.1);\\n$shadow-base-2: 0 8px 32px rgba(0, 0, 0, 0.05), 0 4px 10px rgba(0, 0, 0, 0.025);\\n$shadow-light: 0 47px 115px rgba(0, 0, 0, 0.03), 0 14px 66px rgba(0, 0, 0, 0.02), 0 6px 28px rgba(0, 0, 0, 0.011), 0 2px 4px rgba(0, 0, 0, 0.005);\\n\\n$light-around-shadow: 0 1px 3px rgb(0 0 0 / 2%), 0 1px 2px rgb(0 0 0 / 12%);\\n$light-right-shadow: 3px 1px 1px rgba(0, 0, 0, 0.03), 4px 1px 1px rgba(0, 0, 0, 0.06);\\n$lighter-right-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\\n\\n// Overwrite Bootstrap variables\\n$primary: #1c84c6;\\n$body-bg: #fff;\\n$body-color: #495057;\\n//$grid-gutter-width: 10px;\\n$min-contrast-ratio: 3;\\n$link-decoration: none;\\n$spacer: 1.25rem;\\n\\n\\n// CSS Variable\\n:root {\\n --primary-color: #1c84c6;\\n --btn-radius: 3px;\\n}\\n\\n// Overwrite primary color\\n\\n.modal-content {\\n // Bootstrap variables\\n --bs-modal-border-radius: 0.25rem;\\n}\\n\",\"\\n@import '~adpi-styles/bootstrap';\\n\\n.employee-live-overlay {\\n position: fixed;\\n top: 0;\\n right: 0;\\n display: flex;\\n flex-direction: column;\\n gap: px(16);\\n padding: px(16);\\n background-color: $color-white;\\n border: 1px solid $color-matisse;\\n border-radius: px(4);\\n}\\n\\n.action-button {\\n padding: px(10);\\n font-size: px(16);\\n}\\n\\n.second-video-player {\\n margin-top: 0.5rem;\\n}\\n\",\"@import 'variables';\\n@import 'functions/px';\\n\\n// Ovewrite some of the default bootstrap styles\\n// Overwrite Bootstrap variables\\n$body-bg: #fff;\\n$body-color: #495057;\\n//$grid-gutter-width: 10px;\\n$min-contrast-ratio: 3;\\n$primary: $color-curious-blue;\\n$link-decoration: none;\\n$spacer: 1.25rem;\\n$border-color: $color-iron;\\n$nav-tabs-link-active-bg: #f8fafc;\\n$table-cell-padding-x: 1rem;\\n$table-cell-padding-x-sm: 1rem;\\n\\n// v-b-tooltip doesn't have the non-interactive prop anymore\\n// So this is a workaround to make it non-interactive\\n.b-tooltip {\\n pointer-events: none;\\n}\\n\\n/*\\n* bootstrap-vue-next: 0.12.2. Currently doesn't have styling for sorted table headers\\n */\\n.b-table-sortable .b-table-sort-icon {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22zm0 100 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n background-size: 0.75rem 1rem;\\n background-repeat: no-repeat;\\n width: 1.5rem;\\n height: 1rem;\\n\\n &.sorted.sorted-desc {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n }\\n\\n &.sorted.sorted-asc {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n }\\n}\\n\\n.b-table-sticky-column {\\n background-color: $color-alice-blue !important;\\n}\\n\\n.table.table-striped{\\n --bs-table-border-color: transparent;\\n}\\n\\n// Remove default bootstrap-vue-next sort icon\\n.sorted.b-table-sort-icon:before {\\n content: none !important;\\n}\\n\\n\\n/*\\n* bootstrap-vue-next: 0.12.2. Currently the bootstrap-vue-next toast component doesn't have styling included\\n* So this is a workaround to make it look like the old toast component.\\n* This might change in the future.\\n */\\n\\n.toast.b-toast-primary {\\n background-color: rgba(230,242,255, 1);\\n border-color: rgba(184,218,255, 1);\\n color: #004085\\n}\\n\\n.toast.b-toast-primary .toast-header {\\n color: #004085;\\n background-color: rgba(204,229,255, 1);\\n border-bottom-color: rgba(184,218,255, 1)\\n}\\n\\n.toast.b-toast-primary.b-toast-solid {\\n background-color: #e6f2ff\\n}\\n\\n.toast.b-toast-secondary {\\n background-color: rgba(239,240,241, 1);\\n border-color: rgba(214,216,219, 1);\\n color: #383d41\\n}\\n\\n.toast.b-toast-secondary .toast-header {\\n color: #383d41;\\n background-color: rgba(226,227,229, 1);\\n border-bottom-color: rgba(214,216,219, 1)\\n}\\n\\n.toast.b-toast-secondary.b-toast-solid {\\n background-color: #eff0f1\\n}\\n\\n.toast.b-toast-success {\\n background-color: rgba(230,245,233, 1);\\n border-color: rgba(195,230,203, 1);\\n color: #155724\\n}\\n\\n.toast.b-toast-success .toast-header {\\n color: #155724;\\n background-color: rgba(212,237,218, 1);\\n border-bottom-color: rgba(195,230,203, 1)\\n}\\n\\n.toast.b-toast-success.b-toast-solid {\\n background-color: #e6f5e9\\n}\\n\\n.toast.b-toast-info {\\n background-color: rgba(229,244,247, 1);\\n border-color: rgba(190,229,235, 1);\\n color: #0c5460\\n}\\n\\n.toast.b-toast-info .toast-header {\\n color: #0c5460;\\n background-color: rgba(209,236,241, 1);\\n border-bottom-color: rgba(190,229,235, 1)\\n}\\n\\n.toast.b-toast-info.b-toast-solid {\\n background-color: #e5f4f7\\n}\\n\\n.toast.b-toast-warning {\\n background-color: rgba(255,249,231, 1);\\n border-color: rgba(255,238,186, 1);\\n color: #856404\\n}\\n\\n.toast.b-toast-warning .toast-header {\\n color: #856404;\\n background-color: rgba(255,243,205, 1);\\n border-bottom-color: rgba(255,238,186, 1)\\n}\\n\\n.toast.b-toast-warning.b-toast-solid {\\n background-color: #fff9e7\\n}\\n\\n.toast.b-toast-danger {\\n background-color: rgba(252,237,238, 1);\\n border-color: rgba(245,198,203, 1);\\n color: #721c24\\n}\\n\\n.b-toast-danger .toast-header {\\n color: #721c24;\\n background-color: rgba(248,215,218, 1);\\n border-bottom-color: rgba(245,198,203, 1)\\n}\\n\\n.b-toast-danger.b-toast-solid {\\n background-color: #fcedee\\n}\\n\\n/*\\n* bootstrap-vue-next uses bootstrap 5. And some of the bootstrap 5 classes has been deprecated.\\n* https://getbootstrap.com/docs/5.3/migration/#forms-1\\n* We need to add this to make the form look like the old form.\\n */\\n\\n// Form groups\\n//\\n// Designed to help with the organization and spacing of vertical forms. For\\n// horizontal forms, use the predefined grid classes.\\n\\n.form-group {\\n margin-bottom: 1rem;\\n}\\n\\n.form-text {\\n display: block;\\n margin-top: .25rem;\\n}\\n\\n.row {\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n\\n > .col,\\n > [class*=\\\"col-\\\"] {\\n padding-right: 5px;\\n padding-left: 5px;\\n }\\n}\\n\\n// Form group spacing\\n.row[role=\\\"group\\\"],\\nform div[role=\\\"group\\\"],\\n.input-group[role=\\\"group\\\"],\\n.col > div[role=\\\"group\\\"],\\n[class*=\\\"col-\\\"] > div[role=\\\"group\\\"],\\nfieldset:has(legend.form-label),\\nform fieldset {\\n margin-bottom: 1rem;\\n}\\n\\n.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-auto, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-auto, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-auto, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-auto {\\n padding-left: 15px;\\n padding-right: 15px;\\n}\\n\\nlabel {\\n margin-bottom: 0.5rem;\\n}\\n\\n// Missing bootstrap classes from bootstrap-vue-next\\n.text-right {\\n text-align: right;\\n}\\n\\n.btn-block {\\n display: block;\\n width: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"modal-content\": \"_24lL9Zz2gSUw87ZpJQuyhw==\",\n\t\"b-tooltip\": \"myhQ8BVNLScMPRjChAJZ7A==\",\n\t\"b-table-sortable\": \"u0YS6v3AWr-nihCswGWgsQ==\",\n\t\"b-table-sort-icon\": \"Wproc3iqnZ6M0xgGagq-SQ==\",\n\t\"sorted\": \"lp6EhFVeoaYMH-K8xUg2+A==\",\n\t\"sorted-desc\": \"wqJmd0v5p6hk+WxAibWsBw==\",\n\t\"sorted-asc\": \"dmtcE7KxqXDR0E0pwjgp-g==\",\n\t\"b-table-sticky-column\": \"Rz9SHqHBiRWEzZfC4gdrrg==\",\n\t\"table\": \"_4mZK1Pda2Yhv-P274pptpQ==\",\n\t\"table-striped\": \"q9mOnR5SSM3CotCKD23v+A==\",\n\t\"toast\": \"e7oMCg2WS4T4OCPpCMbZsA==\",\n\t\"b-toast-primary\": \"_4wwR7ZDJSUpPxG7VXr6iWw==\",\n\t\"toast-header\": \"_1XYAlgnBO5-hLn5R+FOaUA==\",\n\t\"b-toast-solid\": \"_9d88zfrJxHAQm0U24OuqYQ==\",\n\t\"b-toast-secondary\": \"_3K7srHVOOwq8zlMxIDR5-g==\",\n\t\"b-toast-success\": \"_93hZhLjzbU1W5GacOiIUjw==\",\n\t\"b-toast-info\": \"_4piZWrcIQQBf7sCsXA7KDw==\",\n\t\"b-toast-warning\": \"_4TSpvj-o8KQpwjf4keliHw==\",\n\t\"b-toast-danger\": \"_1rFwGgTnwpfMa7I0w87WLw==\",\n\t\"form-group\": \"LlKiqxIuiBxrBoQftg80Wg==\",\n\t\"form-text\": \"zEAOQxzkN6xqGp0ITuqITA==\",\n\t\"row\": \"b3Ac2BkeP+LBhSmYlz3oSA==\",\n\t\"col\": \"P4BdApyC71OY4c+uiUdVrw==\",\n\t\"input-group\": \"beOSunKeHg7qxMaCapvwKw==\",\n\t\"form-label\": \"_4UnQ+oOdksah4FelP4Hj3g==\",\n\t\"col-1\": \"Lr94GS--+nIxB3C6uBurYg==\",\n\t\"col-10\": \"BrL81g716RqqHdriygzpvg==\",\n\t\"col-11\": \"S5S06qU8N-0Ftzsz1rTKYA==\",\n\t\"col-12\": \"UzlqT4LvGKNunRCbJFJ4ZQ==\",\n\t\"col-2\": \"_1U7NNO0Px8aWzUN-HqcXAw==\",\n\t\"col-3\": \"Dw2wQhKRscbLqYPG9hcPTg==\",\n\t\"col-4\": \"Q4x1EkUreejDjcsb3KYChg==\",\n\t\"col-5\": \"pW5ga09A0+RtaAFY9c40XQ==\",\n\t\"col-6\": \"_3H0KU8UH7yp54iOEe89enQ==\",\n\t\"col-7\": \"exW9+BOspKyzFds871I0zg==\",\n\t\"col-8\": \"_6qVBVeoFS-8un1Rj538xSg==\",\n\t\"col-9\": \"aeEiHH4iMciZZoQWhrR0wQ==\",\n\t\"col-auto\": \"HKMZSHJ27kX6U6ztToL1yA==\",\n\t\"col-lg\": \"uA18aSOUJWrgvVP01jchmQ==\",\n\t\"col-lg-1\": \"hjIkeX7YcSJm5Xsp5ZaPwQ==\",\n\t\"col-lg-10\": \"HkzLYzvT6jDswW9r2cGwSg==\",\n\t\"col-lg-11\": \"c51tNYWiKfjYqnF9FMk7Vw==\",\n\t\"col-lg-12\": \"m8o6+mWxmaTKGndIptvTRA==\",\n\t\"col-lg-2\": \"-p9ZgCVJxhyqaQPjhM5+sg==\",\n\t\"col-lg-3\": \"_7CdJcwb2oIKggsS+Qq01Tg==\",\n\t\"col-lg-4\": \"F3JkAK-xLK+eXsYLEmnCWw==\",\n\t\"col-lg-5\": \"DGWt8V9NLWq36FMADbvrtw==\",\n\t\"col-lg-6\": \"qd2P4bfu1JjFt-VXZlJnOw==\",\n\t\"col-lg-7\": \"_7eZf0+tdsrk-2+siclI80w==\",\n\t\"col-lg-8\": \"_9gm7fSyX3uciORHiB3rpaw==\",\n\t\"col-lg-9\": \"i8vAuoYa-OSpV6u3-b0t2g==\",\n\t\"col-lg-auto\": \"Apuwepm7bUAgp6uqgYIOJA==\",\n\t\"col-md\": \"-MFXtq9kZwgvGUK7mu0R4g==\",\n\t\"col-md-1\": \"lvbHxvhP1R4Dghn4tI2QVg==\",\n\t\"col-md-10\": \"ssPT3QCBusbwuDXYnYHQTA==\",\n\t\"col-md-11\": \"_7Uh4Ggj5cr0ZlwX8+SQd3A==\",\n\t\"col-md-12\": \"ZlpVM2SfjSANo9jNlEb4fw==\",\n\t\"col-md-2\": \"MsqpOwok4R3p+Az6OQBt5Q==\",\n\t\"col-md-3\": \"szjqP5U8gQI7o2OmhPQMJg==\",\n\t\"col-md-4\": \"Ryk+JcSFDTztL6aRE8rtWQ==\",\n\t\"col-md-5\": \"lvxYml0TdCqNAFSUv0vuCQ==\",\n\t\"col-md-6\": \"TkHD5aSPtusAPbT5Jup36w==\",\n\t\"col-md-7\": \"siI-ZUHW2V3baXutNjZjVQ==\",\n\t\"col-md-8\": \"RWjN65WrUrK4P52T4EF5UQ==\",\n\t\"col-md-9\": \"_6bI63e-iDw2gpycCR28ycg==\",\n\t\"col-md-auto\": \"r8ZPYzxI3RbGMSI4r-sxVA==\",\n\t\"col-sm\": \"_8dj9Rb-b6DcyAL6lx1YKzg==\",\n\t\"col-sm-1\": \"i4dvHGwewbVD5qSA-KeE+g==\",\n\t\"col-sm-10\": \"_8fZfKVdGOzlV0jvWjgLnBQ==\",\n\t\"col-sm-11\": \"_2Q6R099OdOF5A9pEuu21CQ==\",\n\t\"col-sm-12\": \"njsJIj4o8vcbg9enVm7DVQ==\",\n\t\"col-sm-2\": \"nj9eR7DldFfX+fo4UgQdXw==\",\n\t\"col-sm-3\": \"rdvrp7ngEkJNMY3V+1m3Zw==\",\n\t\"col-sm-4\": \"o6KmegDxCfBCX4L2UEs2gA==\",\n\t\"col-sm-5\": \"Too4mGK4q8JJNNZN7mr6bg==\",\n\t\"col-sm-6\": \"uliLNzx5iIQvWuq628+TKw==\",\n\t\"col-sm-7\": \"z5M8OghDTAgWwiTkybtkvA==\",\n\t\"col-sm-8\": \"rlqkecSOYUtdYHWKlTDOmQ==\",\n\t\"col-sm-9\": \"Y7uL8qRnoWxIUbqoxw8mmQ==\",\n\t\"col-sm-auto\": \"LiQX-DBGJU+BIp57yfGeYA==\",\n\t\"col-xl\": \"hqoa8p8QqzMuyQ0zE7UEeg==\",\n\t\"col-xl-1\": \"SuSfY2W5SBnqxVwmPTyw6Q==\",\n\t\"col-xl-10\": \"I2PnRJmu6rymSB4qkW3RmQ==\",\n\t\"col-xl-11\": \"H-Z7j-uObHcmdq6RKLILlQ==\",\n\t\"col-xl-12\": \"_8DGZkkxNvWQhRoXD7qv4uQ==\",\n\t\"col-xl-2\": \"SYne8WiJ11xxhV1gto+Wpg==\",\n\t\"col-xl-3\": \"Ytcud8bDq70a26EkGIf1pw==\",\n\t\"col-xl-4\": \"LllcK9eDwkPUlif+af8-EA==\",\n\t\"col-xl-5\": \"YKgxVBSi+wY+qLb0b9jjrg==\",\n\t\"col-xl-6\": \"aKm4IERQh6rjW8cN3OQc7Q==\",\n\t\"col-xl-7\": \"jZQXiZfKjHSXhv7pqR7WuA==\",\n\t\"col-xl-8\": \"ZGOKLratzKjA8zId5qku7g==\",\n\t\"col-xl-9\": \"-Y3p6ptP0pLoh3zo1VPyoQ==\",\n\t\"col-xl-auto\": \"_3U4m-IDyUi1Zjlz1GbUhIg==\",\n\t\"text-right\": \"Q8nDbB8vhxZUx-BuY4qy-w==\",\n\t\"btn-block\": \"lCXGcAjNBGS2xrZzMWxTwg==\",\n\t\"employee-live-overlay\": \"K1wJOYace6OdhVI+yQvsjw==\",\n\t\"action-button\": \"kmr8dQ5q+U39iqJiMGTElg==\",\n\t\"second-video-player\": \"rlcryOZFJeDuq7gGWEU5WA==\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"[data-v-126053e2]:root{--primary-color:#1c84c6;--btn-radius:3px}.modal-content[data-v-126053e2]{--bs-modal-border-radius:0.25rem}.b-tooltip[data-v-126053e2]{pointer-events:none}.b-table-sortable .b-table-sort-icon[data-v-126053e2]{background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22zm0 100 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-size:.75rem 1rem;height:1rem;width:1.5rem}.b-table-sortable .b-table-sort-icon.sorted.sorted-desc[data-v-126053e2]{background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\")}.b-table-sortable .b-table-sort-icon.sorted.sorted-asc[data-v-126053e2]{background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\")}.b-table-sticky-column[data-v-126053e2]{background-color:#eff8ff!important}.table.table-striped[data-v-126053e2]{--bs-table-border-color:transparent}.sorted.b-table-sort-icon[data-v-126053e2]:before{content:none!important}.toast.b-toast-primary[data-v-126053e2]{background-color:#e6f2ff;border-color:#b8daff;color:#004085}.toast.b-toast-primary .toast-header[data-v-126053e2]{background-color:#cce5ff;border-bottom-color:#b8daff;color:#004085}.toast.b-toast-primary.b-toast-solid[data-v-126053e2]{background-color:#e6f2ff}.toast.b-toast-secondary[data-v-126053e2]{background-color:#eff0f1;border-color:#d6d8db;color:#383d41}.toast.b-toast-secondary .toast-header[data-v-126053e2]{background-color:#e2e3e5;border-bottom-color:#d6d8db;color:#383d41}.toast.b-toast-secondary.b-toast-solid[data-v-126053e2]{background-color:#eff0f1}.toast.b-toast-success[data-v-126053e2]{background-color:#e6f5e9;border-color:#c3e6cb;color:#155724}.toast.b-toast-success .toast-header[data-v-126053e2]{background-color:#d4edda;border-bottom-color:#c3e6cb;color:#155724}.toast.b-toast-success.b-toast-solid[data-v-126053e2]{background-color:#e6f5e9}.toast.b-toast-info[data-v-126053e2]{background-color:#e5f4f7;border-color:#bee5eb;color:#0c5460}.toast.b-toast-info .toast-header[data-v-126053e2]{background-color:#d1ecf1;border-bottom-color:#bee5eb;color:#0c5460}.toast.b-toast-info.b-toast-solid[data-v-126053e2]{background-color:#e5f4f7}.toast.b-toast-warning[data-v-126053e2]{background-color:#fff9e7;border-color:#ffeeba;color:#856404}.toast.b-toast-warning .toast-header[data-v-126053e2]{background-color:#fff3cd;border-bottom-color:#ffeeba;color:#856404}.toast.b-toast-warning.b-toast-solid[data-v-126053e2]{background-color:#fff9e7}.toast.b-toast-danger[data-v-126053e2]{background-color:#fcedee;border-color:#f5c6cb;color:#721c24}.b-toast-danger .toast-header[data-v-126053e2]{background-color:#f8d7da;border-bottom-color:#f5c6cb;color:#721c24}.b-toast-danger.b-toast-solid[data-v-126053e2]{background-color:#fcedee}.form-group[data-v-126053e2]{margin-bottom:1rem}.form-text[data-v-126053e2]{display:block;margin-top:.25rem}.row[data-v-126053e2]{margin-left:0!important;margin-right:0!important}.row>.col[data-v-126053e2],.row>[class*=col-][data-v-126053e2]{padding-left:5px;padding-right:5px}.col>div[role=group][data-v-126053e2],.input-group[role=group][data-v-126053e2],.row[role=group][data-v-126053e2],[class*=col-]>div[role=group][data-v-126053e2],fieldset[data-v-126053e2]:has(legend.form-label),form div[role=group][data-v-126053e2],form fieldset[data-v-126053e2]{margin-bottom:1rem}.col[data-v-126053e2],.col-1[data-v-126053e2],.col-10[data-v-126053e2],.col-11[data-v-126053e2],.col-12[data-v-126053e2],.col-2[data-v-126053e2],.col-3[data-v-126053e2],.col-4[data-v-126053e2],.col-5[data-v-126053e2],.col-6[data-v-126053e2],.col-7[data-v-126053e2],.col-8[data-v-126053e2],.col-9[data-v-126053e2],.col-auto[data-v-126053e2],.col-lg[data-v-126053e2],.col-lg-1[data-v-126053e2],.col-lg-10[data-v-126053e2],.col-lg-11[data-v-126053e2],.col-lg-12[data-v-126053e2],.col-lg-2[data-v-126053e2],.col-lg-3[data-v-126053e2],.col-lg-4[data-v-126053e2],.col-lg-5[data-v-126053e2],.col-lg-6[data-v-126053e2],.col-lg-7[data-v-126053e2],.col-lg-8[data-v-126053e2],.col-lg-9[data-v-126053e2],.col-lg-auto[data-v-126053e2],.col-md[data-v-126053e2],.col-md-1[data-v-126053e2],.col-md-10[data-v-126053e2],.col-md-11[data-v-126053e2],.col-md-12[data-v-126053e2],.col-md-2[data-v-126053e2],.col-md-3[data-v-126053e2],.col-md-4[data-v-126053e2],.col-md-5[data-v-126053e2],.col-md-6[data-v-126053e2],.col-md-7[data-v-126053e2],.col-md-8[data-v-126053e2],.col-md-9[data-v-126053e2],.col-md-auto[data-v-126053e2],.col-sm[data-v-126053e2],.col-sm-1[data-v-126053e2],.col-sm-10[data-v-126053e2],.col-sm-11[data-v-126053e2],.col-sm-12[data-v-126053e2],.col-sm-2[data-v-126053e2],.col-sm-3[data-v-126053e2],.col-sm-4[data-v-126053e2],.col-sm-5[data-v-126053e2],.col-sm-6[data-v-126053e2],.col-sm-7[data-v-126053e2],.col-sm-8[data-v-126053e2],.col-sm-9[data-v-126053e2],.col-sm-auto[data-v-126053e2],.col-xl[data-v-126053e2],.col-xl-1[data-v-126053e2],.col-xl-10[data-v-126053e2],.col-xl-11[data-v-126053e2],.col-xl-12[data-v-126053e2],.col-xl-2[data-v-126053e2],.col-xl-3[data-v-126053e2],.col-xl-4[data-v-126053e2],.col-xl-5[data-v-126053e2],.col-xl-6[data-v-126053e2],.col-xl-7[data-v-126053e2],.col-xl-8[data-v-126053e2],.col-xl-9[data-v-126053e2],.col-xl-auto[data-v-126053e2]{padding-left:15px;padding-right:15px}label[data-v-126053e2]{margin-bottom:.5rem}.text-right[data-v-126053e2]{text-align:right}.btn-block[data-v-126053e2]{display:block;width:100%}.button[data-v-126053e2]{align-items:center;background-color:transparent;border:1px solid transparent;border-radius:.25rem;color:#212529;display:inline-flex;font-size:.875rem;font-weight:400;gap:.75rem;justify-content:center;line-height:1.6;opacity:1;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .25s ease-in-out,background-color .25s ease-in-out,border-color .25s ease-in-out,opacity .25s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.button[data-v-126053e2]:focus{outline:none}.button[data-v-126053e2]:disabled{opacity:.65}.button[data-v-126053e2]:hover{color:initial;text-decoration:none}.button[data-v-126053e2]:hover:disabled{cursor:not-allowed}.is-small[data-v-126053e2]{border-radius:.1875rem;font-size:.75rem;padding:.25rem .5rem}.as-input-addon[data-v-126053e2]{border-bottom-left-radius:0;border-top-left-radius:0;display:inline-flex}.is-primary[data-v-126053e2]{background-color:var(--primary-color);border-color:var(--primary-color);color:#fff}.is-primary[data-v-126053e2]:hover{color:#fff;cursor:pointer}.is-primary[data-v-126053e2]:hover:not(:disabled){background-color:#176ea4;border-color:#166699;color:#fff}.is-primary.is-outlined[data-v-126053e2]{background-color:#fff;border-color:var(--primary-color)}.is-primary.is-outlined[data-v-126053e2],.is-primary.is-outlined[data-v-126053e2]:hover{color:var(--primary-color)}.is-primary.is-outlined[data-v-126053e2]:hover:not(:disabled){background-color:var(--primary-color);border-color:var(--primary-color);color:#fff}.is-secondary[data-v-126053e2]{background-color:#6c757d;border-color:#6c757d;color:#fff}.is-secondary[data-v-126053e2]:hover{color:#fff;cursor:pointer}.is-secondary[data-v-126053e2]:hover:not(:disabled){background-color:#5a6268;border-color:#5a6268;color:#fff}.is-secondary.is-outlined[data-v-126053e2]{background-color:#fff;border-color:#6c757d;color:#6c757d}.is-secondary.is-outlined[data-v-126053e2]:hover{color:#6c757d}.is-secondary.is-outlined[data-v-126053e2]:hover:not(:disabled){background-color:#6c757d;border-color:#6c757d;color:#fff}.is-success[data-v-126053e2]{background-color:#18a689;border-color:#18a689;color:#fff}.is-success[data-v-126053e2]:hover{color:#fff}.is-success[data-v-126053e2]:hover:not(:disabled){background-color:#13856d;border-color:#127964;color:#fff}.is-success.is-outlined[data-v-126053e2]{background-color:#fff;border-color:#18a689;color:#18a689}.is-success.is-outlined[data-v-126053e2]:hover{color:#18a689}.is-success.is-outlined[data-v-126053e2]:hover:not(:disabled){background-color:#18a689;border-color:#18a689;color:#fff}.is-warning[data-v-126053e2]{background-color:#f7a54a;border-color:#f7a54a;color:#fff}.is-warning[data-v-126053e2]:hover{color:#fff}.is-warning[data-v-126053e2]:hover:not(:disabled){background-color:#f59325;border-color:#f58d19;color:#fff}.is-warning.is-outlined[data-v-126053e2]{background-color:#fff;border-color:#f7a54a;color:#f7a54a}.is-warning.is-outlined[data-v-126053e2]:hover{color:#f7a54a}.is-warning.is-outlined[data-v-126053e2]:hover:not(:disabled){background-color:#f7a54a;border-color:#f7a54a;color:#fff}.is-danger[data-v-126053e2]{background-color:#dc3545;border-color:#dc3545;color:#fff}.is-danger[data-v-126053e2]:hover{color:#fff}.is-danger[data-v-126053e2]:hover:not(:disabled){background-color:#c82333;border-color:#c82333;color:#fff}.is-danger.is-outlined[data-v-126053e2]{background-color:#fff;border-color:#dc3545;color:#dc3545}.is-danger.is-outlined[data-v-126053e2]:hover{color:#dc3545}.is-danger.is-outlined[data-v-126053e2]:hover:not(:disabled){background-color:#dc3545;border-color:#dc3545;color:#fff}\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/sass/_variables.scss\",\"webpack://./resources/js/domains/employee/components/atoms/Button/Button.vue\",\"webpack://./resources/sass/_bootstrap.scss\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"// Typography\\n$font-family-sans-serif: \\\"Ubuntu\\\", \\\"sans-serif\\\";\\n$font-size-base: 0.9rem;\\n$line-height-base: 1.6;\\n\\n// Colors\\n$blue: #1c84c6;\\n$indigo: #6574cd;\\n$purple: #9561e2;\\n$pink: #f66d9b;\\n$red: #e3342f;\\n$orange: #f7a54a;\\n$yellow: #ffed4a;\\n$green: #18a689;\\n$teal: #4dc0b5;\\n$cyan: #6cb2eb;\\n$white: #fff;\\n$danger: #f7a54a;\\n\\n$bGrey: #e7eaec;\\n\\n// New variables\\n$transition-duration: 250ms;\\n\\n$breakpoints: (\\n xs: 0,\\n sm: 544px,\\n md: 768px,\\n lg: 992px,\\n xl: 1200px,\\n xxl: 1440px,\\n xxxl: 1600px\\n) !default;\\n\\n$color-white: #fff;\\n$color-seashell: #f1f1f1;\\n$color-athens-gray: #e9ecef;\\n$color-porcelain: #e7eaec;\\n$color-geyser: #dee2e6;\\n$color-iron: #dadadb;\\n$color-iron-darker: #d6d8db;\\n$color-ghost: #ced4da;\\n$color-cadet-blue: #a7b1c2;\\n$color-pale-sky: #6c757d;\\n$color-nevada: #636b6f;\\n$color-shuttle-gray: #5a6268;\\n$color-abbey: #5a6268;\\n$color-trout: #495057;\\n$color-outer-space: #383d41;\\n$color-pickled-bluewood: #2f4050;\\n$color-pickled-bluewood-darker: #293846;\\n$color-shark: #212529;\\n$color-void: #030a24;\\n$color-black: #000;\\n\\n$color-alice-blue: #eff8ff;\\n$color-link-water: #d2e6f4;\\n$color-spindle: #bfddef;\\n$color-seagull: #76beec;\\n$color-curious-blue: #1c84c6;\\n$color-matisse: #176ea4;\\n$color-matisse-darker: #166699;\\n$color-chatams-blue: #0f4567;\\n\\n$color-half-spanish-white: #fdeddb;\\n$color-oasis: #fde6cc;\\n$color-casablanca: #f7a54a;\\n$color-sea-buckthorn: #f59325;\\n$color-carrot-orange: #f58d19;\\n$color-kumera: #805626;\\n\\n$color-scotch-mist: #fffbdb;\\n$color-lemon-chiffron: #fffacc;\\n$color-gorse: #ffed4a;\\n$color-broom: #ffe924;\\n$color-broom-darker: #ffe817;\\n$color-pacifica: #857b26;\\n\\n$color-swans-down: #d1ede7;\\n$color-jagged-ice: #bee6de;\\n$color-mountain-meadow: #18a689;\\n$color-genoa: #13856d;\\n$color-genoa-darker: #127964;\\n$color-eden: #0c5647;\\n\\n$color-french-licac: #dec1ec;\\n$color-medium-purple: #aa39e2;\\n\\n$color-lavender-blush: #fff2f4;\\n$color-pippin: #ffe4e4;\\n$color-pastel-pink: #ffd7e5;\\n$color-we-peep: #f8d8d8;\\n$color-carnation: #f15b6a;\\n$color-punch: #dc3545;\\n$color-cardinal: #c82333;\\n$color-cardinal-darker: #c82333;\\n\\n// shadows\\n$shadow-base: 0 4px 16px 0 rgb(0 0 0 / 0.1);\\n$shadow-base-2: 0 8px 32px rgba(0, 0, 0, 0.05), 0 4px 10px rgba(0, 0, 0, 0.025);\\n$shadow-light: 0 47px 115px rgba(0, 0, 0, 0.03), 0 14px 66px rgba(0, 0, 0, 0.02), 0 6px 28px rgba(0, 0, 0, 0.011), 0 2px 4px rgba(0, 0, 0, 0.005);\\n\\n$light-around-shadow: 0 1px 3px rgb(0 0 0 / 2%), 0 1px 2px rgb(0 0 0 / 12%);\\n$light-right-shadow: 3px 1px 1px rgba(0, 0, 0, 0.03), 4px 1px 1px rgba(0, 0, 0, 0.06);\\n$lighter-right-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\\n\\n// Overwrite Bootstrap variables\\n$primary: #1c84c6;\\n$body-bg: #fff;\\n$body-color: #495057;\\n//$grid-gutter-width: 10px;\\n$min-contrast-ratio: 3;\\n$link-decoration: none;\\n$spacer: 1.25rem;\\n\\n\\n// CSS Variable\\n:root {\\n --primary-color: #1c84c6;\\n --btn-radius: 3px;\\n}\\n\\n// Overwrite primary color\\n\\n.modal-content {\\n // Bootstrap variables\\n --bs-modal-border-radius: 0.25rem;\\n}\\n\",\"\\n@import \\\"~adpi-styles/bootstrap\\\";\\n\\n.button {\\n display: inline-flex;\\n gap: px(12);\\n align-items: center;\\n justify-content: center;\\n padding: px(6) px(12);\\n color: $color-shark;\\n font-weight: 400;\\n font-size: px(14);\\n line-height: 1.6;\\n white-space: nowrap;\\n text-align: center;\\n text-decoration: none;\\n vertical-align: middle;\\n background-color: transparent;\\n border: 1px solid transparent;\\n border-radius: px(4);\\n opacity: 1;\\n transition: color $transition-duration ease-in-out,\\n background-color $transition-duration ease-in-out,\\n border-color $transition-duration ease-in-out,\\n opacity $transition-duration ease-in-out;\\n user-select: none;\\n\\n &:focus {\\n outline: none;\\n }\\n\\n &:disabled {\\n opacity: 0.65;\\n }\\n\\n &:hover {\\n color: initial;\\n text-decoration: none;\\n }\\n\\n &:hover:disabled {\\n cursor: not-allowed;\\n }\\n}\\n\\n.is-small {\\n padding: px(4) px(8);\\n font-size: px(12);\\n border-radius: px(3);\\n}\\n\\n.as-input-addon {\\n display: inline-flex;\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n}\\n\\n.is-primary {\\n color: $color-white;\\n background-color: var(--primary-color);\\n border-color: var(--primary-color);\\n\\n &:hover {\\n color: $color-white;\\n cursor: pointer;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-matisse;\\n border-color: $color-matisse-darker;\\n }\\n\\n &.is-outlined {\\n color: var(--primary-color);\\n background-color: $color-white;\\n border-color: var(--primary-color);\\n\\n &:hover {\\n color: var(--primary-color);\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: var(--primary-color);\\n border-color: var(--primary-color);\\n }\\n }\\n}\\n\\n.is-secondary {\\n color: $color-white;\\n background-color: $color-pale-sky;\\n border-color: $color-pale-sky;\\n\\n &:hover {\\n color: $color-white;\\n cursor: pointer;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-shuttle-gray;\\n border-color: $color-abbey;\\n }\\n\\n &.is-outlined {\\n color: $color-pale-sky;\\n background-color: $color-white;\\n border-color: $color-pale-sky;\\n\\n &:hover {\\n color: $color-pale-sky;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-pale-sky;\\n border-color: $color-pale-sky;\\n }\\n }\\n}\\n\\n.is-success {\\n color: $color-white;\\n background-color: $color-mountain-meadow;\\n border-color: $color-mountain-meadow;\\n\\n &:hover {\\n color: $color-white;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-genoa;\\n border-color: $color-genoa-darker;\\n }\\n\\n &.is-outlined {\\n color: $color-mountain-meadow;\\n background-color: $color-white;\\n border-color: $color-mountain-meadow;\\n\\n &:hover {\\n color: $color-mountain-meadow;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-mountain-meadow;\\n border-color: $color-mountain-meadow;\\n }\\n }\\n}\\n\\n.is-warning {\\n color: $color-white;\\n background-color: $color-casablanca;\\n border-color: $color-casablanca;\\n\\n &:hover {\\n color: $color-white;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-sea-buckthorn;\\n border-color: $color-carrot-orange;\\n }\\n\\n &.is-outlined {\\n color: $color-casablanca;\\n background-color: $color-white;\\n border-color: $color-casablanca;\\n\\n &:hover {\\n color: $color-casablanca;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-casablanca;\\n border-color: $color-casablanca;\\n }\\n }\\n}\\n\\n.is-danger {\\n color: $color-white;\\n background-color: $color-punch;\\n border-color: $color-punch;\\n\\n &:hover {\\n color: $color-white;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-cardinal;\\n border-color: $color-cardinal-darker;\\n }\\n\\n &.is-outlined {\\n color: $color-punch;\\n background-color: $color-white;\\n border-color: $color-punch;\\n\\n &:hover {\\n color: $color-punch;\\n }\\n\\n &:hover:not(:disabled) {\\n color: $color-white;\\n background-color: $color-punch;\\n border-color: $color-punch;\\n }\\n }\\n}\\n\",\"@import 'variables';\\n@import 'functions/px';\\n\\n// Ovewrite some of the default bootstrap styles\\n// Overwrite Bootstrap variables\\n$body-bg: #fff;\\n$body-color: #495057;\\n//$grid-gutter-width: 10px;\\n$min-contrast-ratio: 3;\\n$primary: $color-curious-blue;\\n$link-decoration: none;\\n$spacer: 1.25rem;\\n$border-color: $color-iron;\\n$nav-tabs-link-active-bg: #f8fafc;\\n$table-cell-padding-x: 1rem;\\n$table-cell-padding-x-sm: 1rem;\\n\\n// v-b-tooltip doesn't have the non-interactive prop anymore\\n// So this is a workaround to make it non-interactive\\n.b-tooltip {\\n pointer-events: none;\\n}\\n\\n/*\\n* bootstrap-vue-next: 0.12.2. Currently doesn't have styling for sorted table headers\\n */\\n.b-table-sortable .b-table-sort-icon {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22zm0 100 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n background-size: 0.75rem 1rem;\\n background-repeat: no-repeat;\\n width: 1.5rem;\\n height: 1rem;\\n\\n &.sorted.sorted-desc {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n }\\n\\n &.sorted.sorted-asc {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='m51 1 25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='m51 101 25-23 24-22H1l25 22z'/%3E%3C/svg%3E\\\");\\n }\\n}\\n\\n.b-table-sticky-column {\\n background-color: $color-alice-blue !important;\\n}\\n\\n.table.table-striped{\\n --bs-table-border-color: transparent;\\n}\\n\\n// Remove default bootstrap-vue-next sort icon\\n.sorted.b-table-sort-icon:before {\\n content: none !important;\\n}\\n\\n\\n/*\\n* bootstrap-vue-next: 0.12.2. Currently the bootstrap-vue-next toast component doesn't have styling included\\n* So this is a workaround to make it look like the old toast component.\\n* This might change in the future.\\n */\\n\\n.toast.b-toast-primary {\\n background-color: rgba(230,242,255, 1);\\n border-color: rgba(184,218,255, 1);\\n color: #004085\\n}\\n\\n.toast.b-toast-primary .toast-header {\\n color: #004085;\\n background-color: rgba(204,229,255, 1);\\n border-bottom-color: rgba(184,218,255, 1)\\n}\\n\\n.toast.b-toast-primary.b-toast-solid {\\n background-color: #e6f2ff\\n}\\n\\n.toast.b-toast-secondary {\\n background-color: rgba(239,240,241, 1);\\n border-color: rgba(214,216,219, 1);\\n color: #383d41\\n}\\n\\n.toast.b-toast-secondary .toast-header {\\n color: #383d41;\\n background-color: rgba(226,227,229, 1);\\n border-bottom-color: rgba(214,216,219, 1)\\n}\\n\\n.toast.b-toast-secondary.b-toast-solid {\\n background-color: #eff0f1\\n}\\n\\n.toast.b-toast-success {\\n background-color: rgba(230,245,233, 1);\\n border-color: rgba(195,230,203, 1);\\n color: #155724\\n}\\n\\n.toast.b-toast-success .toast-header {\\n color: #155724;\\n background-color: rgba(212,237,218, 1);\\n border-bottom-color: rgba(195,230,203, 1)\\n}\\n\\n.toast.b-toast-success.b-toast-solid {\\n background-color: #e6f5e9\\n}\\n\\n.toast.b-toast-info {\\n background-color: rgba(229,244,247, 1);\\n border-color: rgba(190,229,235, 1);\\n color: #0c5460\\n}\\n\\n.toast.b-toast-info .toast-header {\\n color: #0c5460;\\n background-color: rgba(209,236,241, 1);\\n border-bottom-color: rgba(190,229,235, 1)\\n}\\n\\n.toast.b-toast-info.b-toast-solid {\\n background-color: #e5f4f7\\n}\\n\\n.toast.b-toast-warning {\\n background-color: rgba(255,249,231, 1);\\n border-color: rgba(255,238,186, 1);\\n color: #856404\\n}\\n\\n.toast.b-toast-warning .toast-header {\\n color: #856404;\\n background-color: rgba(255,243,205, 1);\\n border-bottom-color: rgba(255,238,186, 1)\\n}\\n\\n.toast.b-toast-warning.b-toast-solid {\\n background-color: #fff9e7\\n}\\n\\n.toast.b-toast-danger {\\n background-color: rgba(252,237,238, 1);\\n border-color: rgba(245,198,203, 1);\\n color: #721c24\\n}\\n\\n.b-toast-danger .toast-header {\\n color: #721c24;\\n background-color: rgba(248,215,218, 1);\\n border-bottom-color: rgba(245,198,203, 1)\\n}\\n\\n.b-toast-danger.b-toast-solid {\\n background-color: #fcedee\\n}\\n\\n/*\\n* bootstrap-vue-next uses bootstrap 5. And some of the bootstrap 5 classes has been deprecated.\\n* https://getbootstrap.com/docs/5.3/migration/#forms-1\\n* We need to add this to make the form look like the old form.\\n */\\n\\n// Form groups\\n//\\n// Designed to help with the organization and spacing of vertical forms. For\\n// horizontal forms, use the predefined grid classes.\\n\\n.form-group {\\n margin-bottom: 1rem;\\n}\\n\\n.form-text {\\n display: block;\\n margin-top: .25rem;\\n}\\n\\n.row {\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n\\n > .col,\\n > [class*=\\\"col-\\\"] {\\n padding-right: 5px;\\n padding-left: 5px;\\n }\\n}\\n\\n// Form group spacing\\n.row[role=\\\"group\\\"],\\nform div[role=\\\"group\\\"],\\n.input-group[role=\\\"group\\\"],\\n.col > div[role=\\\"group\\\"],\\n[class*=\\\"col-\\\"] > div[role=\\\"group\\\"],\\nfieldset:has(legend.form-label),\\nform fieldset {\\n margin-bottom: 1rem;\\n}\\n\\n.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-auto, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-auto, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-auto, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-auto {\\n padding-left: 15px;\\n padding-right: 15px;\\n}\\n\\nlabel {\\n margin-bottom: 0.5rem;\\n}\\n\\n// Missing bootstrap classes from bootstrap-vue-next\\n.text-right {\\n text-align: right;\\n}\\n\\n.btn-block {\\n display: block;\\n width: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","'use strict';\n\n/**\n * @typedef {{ [key: string]: any }} Extensions\n * @typedef {Error} Err\n * @property {string} message\n */\n\n/**\n *\n * @param {Error} obj\n * @param {Extensions} props\n * @returns {Error & Extensions}\n */\nfunction assign(obj, props) {\n for (const key in props) {\n Object.defineProperty(obj, key, {\n value: props[key],\n enumerable: true,\n configurable: true,\n });\n }\n\n return obj;\n}\n\n/**\n *\n * @param {any} err - An Error\n * @param {string|Extensions} code - A string code or props to set on the error\n * @param {Extensions} [props] - Props to set on the error\n * @returns {Error & Extensions}\n */\nfunction createError(err, code, props) {\n if (!err || typeof err === 'string') {\n throw new TypeError('Please pass an Error to err-code');\n }\n\n if (!props) {\n props = {};\n }\n\n if (typeof code === 'object') {\n props = code;\n code = '';\n }\n\n if (code) {\n props.code = code;\n }\n\n try {\n return assign(err, props);\n } catch (_) {\n props.message = err.message;\n props.stack = err.stack;\n\n const ErrClass = function () {};\n\n ErrClass.prototype = Object.create(Object.getPrototypeOf(err));\n\n // @ts-ignore\n const output = assign(new ErrClass(), props);\n\n return output;\n }\n}\n\nmodule.exports = createError;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","// originally pulled out of simple-peer\n\nmodule.exports = function getBrowserRTC () {\n if (typeof globalThis === 'undefined') return null\n var wrtc = {\n RTCPeerConnection: globalThis.RTCPeerConnection || globalThis.mozRTCPeerConnection ||\n globalThis.webkitRTCPeerConnection,\n RTCSessionDescription: globalThis.RTCSessionDescription ||\n globalThis.mozRTCSessionDescription || globalThis.webkitRTCSessionDescription,\n RTCIceCandidate: globalThis.RTCIceCandidate || globalThis.mozRTCIceCandidate ||\n globalThis.webkitRTCIceCandidate\n }\n if (!wrtc.RTCPeerConnection) return null\n return wrtc\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.<number>} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.<number>} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.<number>} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.<number>} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.<number>} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.<number>} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","var map = {\n\t\"./af\": 25177,\n\t\"./af.js\": 25177,\n\t\"./ar\": 61509,\n\t\"./ar-dz\": 41488,\n\t\"./ar-dz.js\": 41488,\n\t\"./ar-kw\": 58676,\n\t\"./ar-kw.js\": 58676,\n\t\"./ar-ly\": 42353,\n\t\"./ar-ly.js\": 42353,\n\t\"./ar-ma\": 24496,\n\t\"./ar-ma.js\": 24496,\n\t\"./ar-sa\": 82682,\n\t\"./ar-sa.js\": 82682,\n\t\"./ar-tn\": 89756,\n\t\"./ar-tn.js\": 89756,\n\t\"./ar.js\": 61509,\n\t\"./az\": 95533,\n\t\"./az.js\": 95533,\n\t\"./be\": 28959,\n\t\"./be.js\": 28959,\n\t\"./bg\": 47777,\n\t\"./bg.js\": 47777,\n\t\"./bm\": 54903,\n\t\"./bm.js\": 54903,\n\t\"./bn\": 61290,\n\t\"./bn-bd\": 17357,\n\t\"./bn-bd.js\": 17357,\n\t\"./bn.js\": 61290,\n\t\"./bo\": 31545,\n\t\"./bo.js\": 31545,\n\t\"./br\": 11470,\n\t\"./br.js\": 11470,\n\t\"./bs\": 44429,\n\t\"./bs.js\": 44429,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 56464,\n\t\"./cs.js\": 56464,\n\t\"./cv\": 73635,\n\t\"./cv.js\": 73635,\n\t\"./cy\": 64226,\n\t\"./cy.js\": 64226,\n\t\"./da\": 93601,\n\t\"./da.js\": 93601,\n\t\"./de\": 77853,\n\t\"./de-at\": 26111,\n\t\"./de-at.js\": 26111,\n\t\"./de-ch\": 54697,\n\t\"./de-ch.js\": 54697,\n\t\"./de.js\": 77853,\n\t\"./dv\": 60708,\n\t\"./dv.js\": 60708,\n\t\"./el\": 54691,\n\t\"./el.js\": 54691,\n\t\"./en-au\": 53872,\n\t\"./en-au.js\": 53872,\n\t\"./en-ca\": 28298,\n\t\"./en-ca.js\": 28298,\n\t\"./en-gb\": 56195,\n\t\"./en-gb.js\": 56195,\n\t\"./en-ie\": 66584,\n\t\"./en-ie.js\": 66584,\n\t\"./en-il\": 65543,\n\t\"./en-il.js\": 65543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 79402,\n\t\"./en-nz.js\": 79402,\n\t\"./en-sg\": 43004,\n\t\"./en-sg.js\": 43004,\n\t\"./eo\": 32934,\n\t\"./eo.js\": 32934,\n\t\"./es\": 97650,\n\t\"./es-do\": 20838,\n\t\"./es-do.js\": 20838,\n\t\"./es-mx\": 17730,\n\t\"./es-mx.js\": 17730,\n\t\"./es-us\": 56575,\n\t\"./es-us.js\": 56575,\n\t\"./es.js\": 97650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 90527,\n\t\"./fi.js\": 90527,\n\t\"./fil\": 95995,\n\t\"./fil.js\": 95995,\n\t\"./fo\": 52477,\n\t\"./fo.js\": 52477,\n\t\"./fr\": 85498,\n\t\"./fr-ca\": 26435,\n\t\"./fr-ca.js\": 26435,\n\t\"./fr-ch\": 37892,\n\t\"./fr-ch.js\": 37892,\n\t\"./fr.js\": 85498,\n\t\"./fy\": 37071,\n\t\"./fy.js\": 37071,\n\t\"./ga\": 41734,\n\t\"./ga.js\": 41734,\n\t\"./gd\": 70217,\n\t\"./gd.js\": 70217,\n\t\"./gl\": 77329,\n\t\"./gl.js\": 77329,\n\t\"./gom-deva\": 32124,\n\t\"./gom-deva.js\": 32124,\n\t\"./gom-latn\": 93383,\n\t\"./gom-latn.js\": 93383,\n\t\"./gu\": 95050,\n\t\"./gu.js\": 95050,\n\t\"./he\": 11713,\n\t\"./he.js\": 11713,\n\t\"./hi\": 43861,\n\t\"./hi.js\": 43861,\n\t\"./hr\": 26308,\n\t\"./hr.js\": 26308,\n\t\"./hu\": 90609,\n\t\"./hu.js\": 90609,\n\t\"./hy-am\": 17160,\n\t\"./hy-am.js\": 17160,\n\t\"./id\": 74063,\n\t\"./id.js\": 74063,\n\t\"./is\": 89374,\n\t\"./is.js\": 89374,\n\t\"./it\": 88383,\n\t\"./it-ch\": 21827,\n\t\"./it-ch.js\": 21827,\n\t\"./it.js\": 88383,\n\t\"./ja\": 23827,\n\t\"./ja.js\": 23827,\n\t\"./jv\": 89722,\n\t\"./jv.js\": 89722,\n\t\"./ka\": 41794,\n\t\"./ka.js\": 41794,\n\t\"./kk\": 27088,\n\t\"./kk.js\": 27088,\n\t\"./km\": 96870,\n\t\"./km.js\": 96870,\n\t\"./kn\": 84451,\n\t\"./kn.js\": 84451,\n\t\"./ko\": 63164,\n\t\"./ko.js\": 63164,\n\t\"./ku\": 98174,\n\t\"./ku.js\": 98174,\n\t\"./ky\": 78474,\n\t\"./ky.js\": 78474,\n\t\"./lb\": 79680,\n\t\"./lb.js\": 79680,\n\t\"./lo\": 15867,\n\t\"./lo.js\": 15867,\n\t\"./lt\": 45766,\n\t\"./lt.js\": 45766,\n\t\"./lv\": 69532,\n\t\"./lv.js\": 69532,\n\t\"./me\": 58076,\n\t\"./me.js\": 58076,\n\t\"./mi\": 41848,\n\t\"./mi.js\": 41848,\n\t\"./mk\": 30306,\n\t\"./mk.js\": 30306,\n\t\"./ml\": 73739,\n\t\"./ml.js\": 73739,\n\t\"./mn\": 99053,\n\t\"./mn.js\": 99053,\n\t\"./mr\": 86169,\n\t\"./mr.js\": 86169,\n\t\"./ms\": 73386,\n\t\"./ms-my\": 92297,\n\t\"./ms-my.js\": 92297,\n\t\"./ms.js\": 73386,\n\t\"./mt\": 77075,\n\t\"./mt.js\": 77075,\n\t\"./my\": 72264,\n\t\"./my.js\": 72264,\n\t\"./nb\": 22274,\n\t\"./nb.js\": 22274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 92572,\n\t\"./nl-be\": 43784,\n\t\"./nl-be.js\": 43784,\n\t\"./nl.js\": 92572,\n\t\"./nn\": 54566,\n\t\"./nn.js\": 54566,\n\t\"./oc-lnc\": 69330,\n\t\"./oc-lnc.js\": 69330,\n\t\"./pa-in\": 29849,\n\t\"./pa-in.js\": 29849,\n\t\"./pl\": 94418,\n\t\"./pl.js\": 94418,\n\t\"./pt\": 79834,\n\t\"./pt-br\": 48303,\n\t\"./pt-br.js\": 48303,\n\t\"./pt.js\": 79834,\n\t\"./ro\": 24457,\n\t\"./ro.js\": 24457,\n\t\"./ru\": 82271,\n\t\"./ru.js\": 82271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 33478,\n\t\"./se.js\": 33478,\n\t\"./si\": 17538,\n\t\"./si.js\": 17538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 46637,\n\t\"./sl.js\": 46637,\n\t\"./sq\": 86794,\n\t\"./sq.js\": 86794,\n\t\"./sr\": 45719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 45719,\n\t\"./ss\": 56000,\n\t\"./ss.js\": 56000,\n\t\"./sv\": 41011,\n\t\"./sv.js\": 41011,\n\t\"./sw\": 40748,\n\t\"./sw.js\": 40748,\n\t\"./ta\": 11025,\n\t\"./ta.js\": 11025,\n\t\"./te\": 11885,\n\t\"./te.js\": 11885,\n\t\"./tet\": 28861,\n\t\"./tet.js\": 28861,\n\t\"./tg\": 86571,\n\t\"./tg.js\": 86571,\n\t\"./th\": 55802,\n\t\"./th.js\": 55802,\n\t\"./tk\": 59527,\n\t\"./tk.js\": 59527,\n\t\"./tl-ph\": 29231,\n\t\"./tl-ph.js\": 29231,\n\t\"./tlh\": 31052,\n\t\"./tlh.js\": 31052,\n\t\"./tr\": 85096,\n\t\"./tr.js\": 85096,\n\t\"./tzl\": 79846,\n\t\"./tzl.js\": 79846,\n\t\"./tzm\": 81765,\n\t\"./tzm-latn\": 97711,\n\t\"./tzm-latn.js\": 97711,\n\t\"./tzm.js\": 81765,\n\t\"./ug-cn\": 48414,\n\t\"./ug-cn.js\": 48414,\n\t\"./uk\": 16618,\n\t\"./uk.js\": 16618,\n\t\"./ur\": 57777,\n\t\"./ur.js\": 57777,\n\t\"./uz\": 57609,\n\t\"./uz-latn\": 72475,\n\t\"./uz-latn.js\": 72475,\n\t\"./uz.js\": 57609,\n\t\"./vi\": 21135,\n\t\"./vi.js\": 21135,\n\t\"./x-pseudo\": 64051,\n\t\"./x-pseudo.js\": 64051,\n\t\"./yo\": 82218,\n\t\"./yo.js\": 82218,\n\t\"./zh-cn\": 52648,\n\t\"./zh-cn.js\": 52648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 31541,\n\t\"./zh-mo.js\": 31541,\n\t\"./zh-tw\": 50304,\n\t\"./zh-tw.js\": 50304\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 35358;","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null) === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123) === 'Number'\n\t\t\t * type('foo') === 'String'\n\t\t\t * type(true) === 'Boolean'\n\t\t\t * type([1, 2]) === 'Array'\n\t\t\t * type({}) === 'Object'\n\t\t\t * type(String) === 'Function'\n\t\t\t * type(/abc+/) === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif ('currentScript' in document && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t// at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t * // at its original position\n\t\t\t * 'comment': { ... },\n\t\t\t * // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t * 'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t * // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t * 'style': {\n\t\t\t * // token\n\t\t\t * }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t * 'comment': Prism.languages.markup.comment,\n\t\t\t * // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t * if (token instanceof Prism.Token && token.type === 'number') {\n\t\t * console.log(`Found numeric literal: ${token.content}`);\n\t\t * }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t// @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t * The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by François Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n","// A port of an algorithm by Johannes Baagøe <baagoe@baagoe.com>, 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baagøe <baagoe@baagoe.org>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = String(data);\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n","// A Javascript implementaion of the \"xorshift7\" algorithm by\n// François Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n","// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n} else {\n // When included as a plain script, set up Math.seedrandom global.\n math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n // global: `self` in browsers (including strict mode and web workers),\n // otherwise `this` in Node and other environments\n (typeof self !== 'undefined') ? self : this,\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n",";/*! showdown v 1.9.1 - 02-11-2019 */\r\n(function(){\r\n/**\n * Created by Tivie on 13-07-2015.\n */\n\nfunction getDefaultOpts (simple) {\n 'use strict';\n\n var defaultOptions = {\n omitExtraWLInCodeBlocks: {\n defaultValue: false,\n describe: 'Omit the default extra whiteline added to code blocks',\n type: 'boolean'\n },\n noHeaderId: {\n defaultValue: false,\n describe: 'Turn on/off generated header id',\n type: 'boolean'\n },\n prefixHeaderId: {\n defaultValue: false,\n describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \\'section-\\' prefix',\n type: 'string'\n },\n rawPrefixHeaderId: {\n defaultValue: false,\n describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the \" char is used in the prefix)',\n type: 'boolean'\n },\n ghCompatibleHeaderId: {\n defaultValue: false,\n describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',\n type: 'boolean'\n },\n rawHeaderId: {\n defaultValue: false,\n describe: 'Remove only spaces, \\' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',\n type: 'boolean'\n },\n headerLevelStart: {\n defaultValue: false,\n describe: 'The header blocks level start',\n type: 'integer'\n },\n parseImgDimensions: {\n defaultValue: false,\n describe: 'Turn on/off image dimension parsing',\n type: 'boolean'\n },\n simplifiedAutoLink: {\n defaultValue: false,\n describe: 'Turn on/off GFM autolink style',\n type: 'boolean'\n },\n excludeTrailingPunctuationFromURLs: {\n defaultValue: false,\n describe: 'Excludes trailing punctuation from links generated with autoLinking',\n type: 'boolean'\n },\n literalMidWordUnderscores: {\n defaultValue: false,\n describe: 'Parse midword underscores as literal underscores',\n type: 'boolean'\n },\n literalMidWordAsterisks: {\n defaultValue: false,\n describe: 'Parse midword asterisks as literal asterisks',\n type: 'boolean'\n },\n strikethrough: {\n defaultValue: false,\n describe: 'Turn on/off strikethrough support',\n type: 'boolean'\n },\n tables: {\n defaultValue: false,\n describe: 'Turn on/off tables support',\n type: 'boolean'\n },\n tablesHeaderId: {\n defaultValue: false,\n describe: 'Add an id to table headers',\n type: 'boolean'\n },\n ghCodeBlocks: {\n defaultValue: true,\n describe: 'Turn on/off GFM fenced code blocks support',\n type: 'boolean'\n },\n tasklists: {\n defaultValue: false,\n describe: 'Turn on/off GFM tasklist support',\n type: 'boolean'\n },\n smoothLivePreview: {\n defaultValue: false,\n describe: 'Prevents weird effects in live previews due to incomplete input',\n type: 'boolean'\n },\n smartIndentationFix: {\n defaultValue: false,\n description: 'Tries to smartly fix indentation in es6 strings',\n type: 'boolean'\n },\n disableForced4SpacesIndentedSublists: {\n defaultValue: false,\n description: 'Disables the requirement of indenting nested sublists by 4 spaces',\n type: 'boolean'\n },\n simpleLineBreaks: {\n defaultValue: false,\n description: 'Parses simple line breaks as <br> (GFM Style)',\n type: 'boolean'\n },\n requireSpaceBeforeHeadingText: {\n defaultValue: false,\n description: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',\n type: 'boolean'\n },\n ghMentions: {\n defaultValue: false,\n description: 'Enables github @mentions',\n type: 'boolean'\n },\n ghMentionsLink: {\n defaultValue: 'https://github.com/{u}',\n description: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',\n type: 'string'\n },\n encodeEmails: {\n defaultValue: true,\n description: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',\n type: 'boolean'\n },\n openLinksInNewWindow: {\n defaultValue: false,\n description: 'Open all links in new windows',\n type: 'boolean'\n },\n backslashEscapesHTMLTags: {\n defaultValue: false,\n description: 'Support for HTML Tag escaping. ex: \\<div>foo\\</div>',\n type: 'boolean'\n },\n emoji: {\n defaultValue: false,\n description: 'Enable emoji support. Ex: `this is a :smile: emoji`',\n type: 'boolean'\n },\n underline: {\n defaultValue: false,\n description: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`',\n type: 'boolean'\n },\n completeHTMLDocument: {\n defaultValue: false,\n description: 'Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags',\n type: 'boolean'\n },\n metadata: {\n defaultValue: false,\n description: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).',\n type: 'boolean'\n },\n splitAdjacentBlockquotes: {\n defaultValue: false,\n description: 'Split adjacent blockquote blocks',\n type: 'boolean'\n }\n };\n if (simple === false) {\n return JSON.parse(JSON.stringify(defaultOptions));\n }\n var ret = {};\n for (var opt in defaultOptions) {\n if (defaultOptions.hasOwnProperty(opt)) {\n ret[opt] = defaultOptions[opt].defaultValue;\n }\n }\n return ret;\n}\n\nfunction allOptionsOn () {\n 'use strict';\n var options = getDefaultOpts(true),\n ret = {};\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n ret[opt] = true;\n }\n }\n return ret;\n}\n\r\n/**\n * Created by Tivie on 06-01-2015.\n */\n\n// Private properties\nvar showdown = {},\n parsers = {},\n extensions = {},\n globalOptions = getDefaultOpts(true),\n setFlavor = 'vanilla',\n flavor = {\n github: {\n omitExtraWLInCodeBlocks: true,\n simplifiedAutoLink: true,\n excludeTrailingPunctuationFromURLs: true,\n literalMidWordUnderscores: true,\n strikethrough: true,\n tables: true,\n tablesHeaderId: true,\n ghCodeBlocks: true,\n tasklists: true,\n disableForced4SpacesIndentedSublists: true,\n simpleLineBreaks: true,\n requireSpaceBeforeHeadingText: true,\n ghCompatibleHeaderId: true,\n ghMentions: true,\n backslashEscapesHTMLTags: true,\n emoji: true,\n splitAdjacentBlockquotes: true\n },\n original: {\n noHeaderId: true,\n ghCodeBlocks: false\n },\n ghost: {\n omitExtraWLInCodeBlocks: true,\n parseImgDimensions: true,\n simplifiedAutoLink: true,\n excludeTrailingPunctuationFromURLs: true,\n literalMidWordUnderscores: true,\n strikethrough: true,\n tables: true,\n tablesHeaderId: true,\n ghCodeBlocks: true,\n tasklists: true,\n smoothLivePreview: true,\n simpleLineBreaks: true,\n requireSpaceBeforeHeadingText: true,\n ghMentions: false,\n encodeEmails: true\n },\n vanilla: getDefaultOpts(true),\n allOn: allOptionsOn()\n };\n\n/**\n * helper namespace\n * @type {{}}\n */\nshowdown.helper = {};\n\n/**\n * TODO LEGACY SUPPORT CODE\n * @type {{}}\n */\nshowdown.extensions = {};\n\n/**\n * Set a global option\n * @static\n * @param {string} key\n * @param {*} value\n * @returns {showdown}\n */\nshowdown.setOption = function (key, value) {\n 'use strict';\n globalOptions[key] = value;\n return this;\n};\n\n/**\n * Get a global option\n * @static\n * @param {string} key\n * @returns {*}\n */\nshowdown.getOption = function (key) {\n 'use strict';\n return globalOptions[key];\n};\n\n/**\n * Get the global options\n * @static\n * @returns {{}}\n */\nshowdown.getOptions = function () {\n 'use strict';\n return globalOptions;\n};\n\n/**\n * Reset global options to the default values\n * @static\n */\nshowdown.resetOptions = function () {\n 'use strict';\n globalOptions = getDefaultOpts(true);\n};\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function (name) {\n 'use strict';\n if (!flavor.hasOwnProperty(name)) {\n throw Error(name + ' flavor was not found');\n }\n showdown.resetOptions();\n var preset = flavor[name];\n setFlavor = name;\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n globalOptions[option] = preset[option];\n }\n }\n};\n\n/**\n * Get the currently set flavor\n * @returns {string}\n */\nshowdown.getFlavor = function () {\n 'use strict';\n return setFlavor;\n};\n\n/**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\nshowdown.getFlavorOptions = function (name) {\n 'use strict';\n if (flavor.hasOwnProperty(name)) {\n return flavor[name];\n }\n};\n\n/**\n * Get the default options\n * @static\n * @param {boolean} [simple=true]\n * @returns {{}}\n */\nshowdown.getDefaultOptions = function (simple) {\n 'use strict';\n return getDefaultOpts(simple);\n};\n\n/**\n * Get or set a subParser\n *\n * subParser(name) - Get a registered subParser\n * subParser(name, func) - Register a subParser\n * @static\n * @param {string} name\n * @param {function} [func]\n * @returns {*}\n */\nshowdown.subParser = function (name, func) {\n 'use strict';\n if (showdown.helper.isString(name)) {\n if (typeof func !== 'undefined') {\n parsers[name] = func;\n } else {\n if (parsers.hasOwnProperty(name)) {\n return parsers[name];\n } else {\n throw Error('SubParser named ' + name + ' not registered!');\n }\n }\n }\n};\n\n/**\n * Gets or registers an extension\n * @static\n * @param {string} name\n * @param {object|function=} ext\n * @returns {*}\n */\nshowdown.extension = function (name, ext) {\n 'use strict';\n\n if (!showdown.helper.isString(name)) {\n throw Error('Extension \\'name\\' must be a string');\n }\n\n name = showdown.helper.stdExtName(name);\n\n // Getter\n if (showdown.helper.isUndefined(ext)) {\n if (!extensions.hasOwnProperty(name)) {\n throw Error('Extension named ' + name + ' is not registered!');\n }\n return extensions[name];\n\n // Setter\n } else {\n // Expand extension if it's wrapped in a function\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n // Ensure extension is an array\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var validExtension = validate(ext, name);\n\n if (validExtension.valid) {\n extensions[name] = ext;\n } else {\n throw Error(validExtension.error);\n }\n }\n};\n\n/**\n * Gets all extensions registered\n * @returns {{}}\n */\nshowdown.getAllExtensions = function () {\n 'use strict';\n return extensions;\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function (name) {\n 'use strict';\n delete extensions[name];\n};\n\n/**\n * Removes all extensions\n */\nshowdown.resetExtensions = function () {\n 'use strict';\n extensions = {};\n};\n\n/**\n * Validate extension\n * @param {array} extension\n * @param {string} name\n * @returns {{valid: boolean, error: string}}\n */\nfunction validate (extension, name) {\n 'use strict';\n\n var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',\n ret = {\n valid: true,\n error: ''\n };\n\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n\n for (var i = 0; i < extension.length; ++i) {\n var baseMsg = errMsg + ' sub-extension ' + i + ': ',\n ext = extension[i];\n if (typeof ext !== 'object') {\n ret.valid = false;\n ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';\n return ret;\n }\n\n if (!showdown.helper.isString(ext.type)) {\n ret.valid = false;\n ret.error = baseMsg + 'property \"type\" must be a string, but ' + typeof ext.type + ' given';\n return ret;\n }\n\n var type = ext.type = ext.type.toLowerCase();\n\n // normalize extension type\n if (type === 'language') {\n type = ext.type = 'lang';\n }\n\n if (type === 'html') {\n type = ext.type = 'output';\n }\n\n if (type !== 'lang' && type !== 'output' && type !== 'listener') {\n ret.valid = false;\n ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: \"lang/language\", \"output/html\" or \"listener\"';\n return ret;\n }\n\n if (type === 'listener') {\n if (showdown.helper.isUndefined(ext.listeners)) {\n ret.valid = false;\n ret.error = baseMsg + '. Extensions of type \"listener\" must have a property called \"listeners\"';\n return ret;\n }\n } else {\n if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {\n ret.valid = false;\n ret.error = baseMsg + type + ' extensions must define either a \"regex\" property or a \"filter\" method';\n return ret;\n }\n }\n\n if (ext.listeners) {\n if (typeof ext.listeners !== 'object') {\n ret.valid = false;\n ret.error = baseMsg + '\"listeners\" property must be an object but ' + typeof ext.listeners + ' given';\n return ret;\n }\n for (var ln in ext.listeners) {\n if (ext.listeners.hasOwnProperty(ln)) {\n if (typeof ext.listeners[ln] !== 'function') {\n ret.valid = false;\n ret.error = baseMsg + '\"listeners\" property must be an hash of [event name]: [callback]. listeners.' + ln +\n ' must be a function but ' + typeof ext.listeners[ln] + ' given';\n return ret;\n }\n }\n }\n }\n\n if (ext.filter) {\n if (typeof ext.filter !== 'function') {\n ret.valid = false;\n ret.error = baseMsg + '\"filter\" must be a function, but ' + typeof ext.filter + ' given';\n return ret;\n }\n } else if (ext.regex) {\n if (showdown.helper.isString(ext.regex)) {\n ext.regex = new RegExp(ext.regex, 'g');\n }\n if (!(ext.regex instanceof RegExp)) {\n ret.valid = false;\n ret.error = baseMsg + '\"regex\" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';\n return ret;\n }\n if (showdown.helper.isUndefined(ext.replace)) {\n ret.valid = false;\n ret.error = baseMsg + '\"regex\" extensions must implement a replace string or function';\n return ret;\n }\n }\n }\n return ret;\n}\n\n/**\n * Validate extension\n * @param {object} ext\n * @returns {boolean}\n */\nshowdown.validateExtension = function (ext) {\n 'use strict';\n\n var validateExtension = validate(ext, null);\n if (!validateExtension.valid) {\n console.warn(validateExtension.error);\n return false;\n }\n return true;\n};\n\r\n/**\n * showdownjs helper functions\n */\n\nif (!showdown.hasOwnProperty('helper')) {\n showdown.helper = {};\n}\n\n/**\n * Check if var is string\n * @static\n * @param {string} a\n * @returns {boolean}\n */\nshowdown.helper.isString = function (a) {\n 'use strict';\n return (typeof a === 'string' || a instanceof String);\n};\n\n/**\n * Check if var is a function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isFunction = function (a) {\n 'use strict';\n var getType = {};\n return a && getType.toString.call(a) === '[object Function]';\n};\n\n/**\n * isArray helper function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isArray = function (a) {\n 'use strict';\n return Array.isArray(a);\n};\n\n/**\n * Check if value is undefined\n * @static\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n */\nshowdown.helper.isUndefined = function (value) {\n 'use strict';\n return typeof value === 'undefined';\n};\n\n/**\n * ForEach helper function\n * Iterates over Arrays and Objects (own properties only)\n * @static\n * @param {*} obj\n * @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object\n */\nshowdown.helper.forEach = function (obj, callback) {\n 'use strict';\n // check if obj is defined\n if (showdown.helper.isUndefined(obj)) {\n throw new Error('obj param is required');\n }\n\n if (showdown.helper.isUndefined(callback)) {\n throw new Error('callback param is required');\n }\n\n if (!showdown.helper.isFunction(callback)) {\n throw new Error('callback param must be a function/closure');\n }\n\n if (typeof obj.forEach === 'function') {\n obj.forEach(callback);\n } else if (showdown.helper.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n callback(obj[i], i, obj);\n }\n } else if (typeof (obj) === 'object') {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n callback(obj[prop], prop, obj);\n }\n }\n } else {\n throw new Error('obj does not seem to be an array or an iterable object');\n }\n};\n\n/**\n * Standardidize extension name\n * @static\n * @param {string} s extension name\n * @returns {string}\n */\nshowdown.helper.stdExtName = function (s) {\n 'use strict';\n return s.replace(/[_?*+\\/\\\\.^-]/g, '').replace(/\\s/g, '').toLowerCase();\n};\n\nfunction escapeCharactersCallback (wholeMatch, m1) {\n 'use strict';\n var charCodeToEscape = m1.charCodeAt(0);\n return '¨E' + charCodeToEscape + 'E';\n}\n\n/**\n * Callback used to escape characters when passing through String.replace\n * @static\n * @param {string} wholeMatch\n * @param {string} m1\n * @returns {string}\n */\nshowdown.helper.escapeCharactersCallback = escapeCharactersCallback;\n\n/**\n * Escape characters in a string\n * @static\n * @param {string} text\n * @param {string} charsToEscape\n * @param {boolean} afterBackslash\n * @returns {XML|string|void|*}\n */\nshowdown.helper.escapeCharacters = function (text, charsToEscape, afterBackslash) {\n 'use strict';\n // First we have to escape the escape characters so that\n // we can build a character class out of them\n var regexString = '([' + charsToEscape.replace(/([\\[\\]\\\\])/g, '\\\\$1') + '])';\n\n if (afterBackslash) {\n regexString = '\\\\\\\\' + regexString;\n }\n\n var regex = new RegExp(regexString, 'g');\n text = text.replace(regex, escapeCharactersCallback);\n\n return text;\n};\n\n/**\n * Unescape HTML entities\n * @param txt\n * @returns {string}\n */\nshowdown.helper.unescapeHTMLEntities = function (txt) {\n 'use strict';\n\n return txt\n .replace(/"/g, '\"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n};\n\nvar rgxFindMatchPos = function (str, left, right, flags) {\n 'use strict';\n var f = flags || '',\n g = f.indexOf('g') > -1,\n x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')),\n l = new RegExp(left, f.replace(/g/g, '')),\n pos = [],\n t, s, m, start, end;\n\n do {\n t = 0;\n while ((m = x.exec(str))) {\n if (l.test(m[0])) {\n if (!(t++)) {\n s = x.lastIndex;\n start = s - m[0].length;\n }\n } else if (t) {\n if (!--t) {\n end = m.index + m[0].length;\n var obj = {\n left: {start: start, end: s},\n match: {start: s, end: m.index},\n right: {start: m.index, end: end},\n wholeMatch: {start: start, end: end}\n };\n pos.push(obj);\n if (!g) {\n return pos;\n }\n }\n }\n }\n } while (t && (x.lastIndex = s));\n\n return pos;\n};\n\n/**\n * matchRecursiveRegExp\n *\n * (c) 2007 Steven Levithan <stevenlevithan.com>\n * MIT License\n *\n * Accepts a string to search, a left and right format delimiter\n * as regex patterns, and optional regex flags. Returns an array\n * of matches, allowing nested instances of left/right delimiters.\n * Use the \"g\" flag to return all matches, otherwise only the\n * first is returned. Be careful to ensure that the left and\n * right format delimiters produce mutually exclusive matches.\n * Backreferences are not supported within the right delimiter\n * due to how it is internally combined with the left delimiter.\n * When matching strings whose format delimiters are unbalanced\n * to the left or right, the output is intentionally as a\n * conventional regex library with recursion support would\n * produce, e.g. \"<<x>\" and \"<x>>\" both produce [\"x\"] when using\n * \"<\" and \">\" as the delimiters (both strings contain a single,\n * balanced instance of \"<x>\").\n *\n * examples:\n * matchRecursiveRegExp(\"test\", \"\\\\(\", \"\\\\)\")\n * returns: []\n * matchRecursiveRegExp(\"<t<<e>><s>>t<>\", \"<\", \">\", \"g\")\n * returns: [\"t<<e>><s>\", \"\"]\n * matchRecursiveRegExp(\"<div id=\\\"x\\\">test</div>\", \"<div\\\\b[^>]*>\", \"</div>\", \"gi\")\n * returns: [\"test\"]\n */\nshowdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {\n 'use strict';\n\n var matchPos = rgxFindMatchPos (str, left, right, flags),\n results = [];\n\n for (var i = 0; i < matchPos.length; ++i) {\n results.push([\n str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n str.slice(matchPos[i].match.start, matchPos[i].match.end),\n str.slice(matchPos[i].left.start, matchPos[i].left.end),\n str.slice(matchPos[i].right.start, matchPos[i].right.end)\n ]);\n }\n return results;\n};\n\n/**\n *\n * @param {string} str\n * @param {string|function} replacement\n * @param {string} left\n * @param {string} right\n * @param {string} flags\n * @returns {string}\n */\nshowdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) {\n 'use strict';\n\n if (!showdown.helper.isFunction(replacement)) {\n var repStr = replacement;\n replacement = function () {\n return repStr;\n };\n }\n\n var matchPos = rgxFindMatchPos(str, left, right, flags),\n finalStr = str,\n lng = matchPos.length;\n\n if (lng > 0) {\n var bits = [];\n if (matchPos[0].wholeMatch.start !== 0) {\n bits.push(str.slice(0, matchPos[0].wholeMatch.start));\n }\n for (var i = 0; i < lng; ++i) {\n bits.push(\n replacement(\n str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n str.slice(matchPos[i].match.start, matchPos[i].match.end),\n str.slice(matchPos[i].left.start, matchPos[i].left.end),\n str.slice(matchPos[i].right.start, matchPos[i].right.end)\n )\n );\n if (i < lng - 1) {\n bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start));\n }\n }\n if (matchPos[lng - 1].wholeMatch.end < str.length) {\n bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));\n }\n finalStr = bits.join('');\n }\n return finalStr;\n};\n\n/**\n * Returns the index within the passed String object of the first occurrence of the specified regex,\n * starting the search at fromIndex. Returns -1 if the value is not found.\n *\n * @param {string} str string to search\n * @param {RegExp} regex Regular expression to search\n * @param {int} [fromIndex = 0] Index to start the search\n * @returns {Number}\n * @throws InvalidArgumentError\n */\nshowdown.helper.regexIndexOf = function (str, regex, fromIndex) {\n 'use strict';\n if (!showdown.helper.isString(str)) {\n throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n }\n if (regex instanceof RegExp === false) {\n throw 'InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp';\n }\n var indexOf = str.substring(fromIndex || 0).search(regex);\n return (indexOf >= 0) ? (indexOf + (fromIndex || 0)) : indexOf;\n};\n\n/**\n * Splits the passed string object at the defined index, and returns an array composed of the two substrings\n * @param {string} str string to split\n * @param {int} index index to split string at\n * @returns {[string,string]}\n * @throws InvalidArgumentError\n */\nshowdown.helper.splitAtIndex = function (str, index) {\n 'use strict';\n if (!showdown.helper.isString(str)) {\n throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n }\n return [str.substring(0, index), str.substring(index)];\n};\n\n/**\n * Obfuscate an e-mail address through the use of Character Entities,\n * transforming ASCII characters into their equivalent decimal or hex entities.\n *\n * Since it has a random component, subsequent calls to this function produce different results\n *\n * @param {string} mail\n * @returns {string}\n */\nshowdown.helper.encodeEmailAddress = function (mail) {\n 'use strict';\n var encode = [\n function (ch) {\n return '&#' + ch.charCodeAt(0) + ';';\n },\n function (ch) {\n return '&#x' + ch.charCodeAt(0).toString(16) + ';';\n },\n function (ch) {\n return ch;\n }\n ];\n\n mail = mail.replace(/./g, function (ch) {\n if (ch === '@') {\n // this *must* be encoded. I insist.\n ch = encode[Math.floor(Math.random() * 2)](ch);\n } else {\n var r = Math.random();\n // roughly 10% raw, 45% hex, 45% dec\n ch = (\n r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch)\n );\n }\n return ch;\n });\n\n return mail;\n};\n\n/**\n *\n * @param str\n * @param targetLength\n * @param padString\n * @returns {string}\n */\nshowdown.helper.padEnd = function padEnd (str, targetLength, padString) {\n 'use strict';\n /*jshint bitwise: false*/\n // eslint-disable-next-line space-infix-ops\n targetLength = targetLength>>0; //floor if number or convert non-number to 0;\n /*jshint bitwise: true*/\n padString = String(padString || ' ');\n if (str.length > targetLength) {\n return String(str);\n } else {\n targetLength = targetLength - str.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed\n }\n return String(str) + padString.slice(0,targetLength);\n }\n};\n\n/**\n * POLYFILLS\n */\n// use this instead of builtin is undefined for IE8 compatibility\nif (typeof console === 'undefined') {\n console = {\n warn: function (msg) {\n 'use strict';\n alert(msg);\n },\n log: function (msg) {\n 'use strict';\n alert(msg);\n },\n error: function (msg) {\n 'use strict';\n throw msg;\n }\n };\n}\n\n/**\n * Common regexes.\n * We declare some common regexes to improve performance\n */\nshowdown.helper.regexes = {\n asteriskDashAndColon: /([*_:~])/g\n};\n\n/**\n * EMOJIS LIST\n */\nshowdown.helper.emojis = {\n '+1':'\\ud83d\\udc4d',\n '-1':'\\ud83d\\udc4e',\n '100':'\\ud83d\\udcaf',\n '1234':'\\ud83d\\udd22',\n '1st_place_medal':'\\ud83e\\udd47',\n '2nd_place_medal':'\\ud83e\\udd48',\n '3rd_place_medal':'\\ud83e\\udd49',\n '8ball':'\\ud83c\\udfb1',\n 'a':'\\ud83c\\udd70\\ufe0f',\n 'ab':'\\ud83c\\udd8e',\n 'abc':'\\ud83d\\udd24',\n 'abcd':'\\ud83d\\udd21',\n 'accept':'\\ud83c\\ude51',\n 'aerial_tramway':'\\ud83d\\udea1',\n 'airplane':'\\u2708\\ufe0f',\n 'alarm_clock':'\\u23f0',\n 'alembic':'\\u2697\\ufe0f',\n 'alien':'\\ud83d\\udc7d',\n 'ambulance':'\\ud83d\\ude91',\n 'amphora':'\\ud83c\\udffa',\n 'anchor':'\\u2693\\ufe0f',\n 'angel':'\\ud83d\\udc7c',\n 'anger':'\\ud83d\\udca2',\n 'angry':'\\ud83d\\ude20',\n 'anguished':'\\ud83d\\ude27',\n 'ant':'\\ud83d\\udc1c',\n 'apple':'\\ud83c\\udf4e',\n 'aquarius':'\\u2652\\ufe0f',\n 'aries':'\\u2648\\ufe0f',\n 'arrow_backward':'\\u25c0\\ufe0f',\n 'arrow_double_down':'\\u23ec',\n 'arrow_double_up':'\\u23eb',\n 'arrow_down':'\\u2b07\\ufe0f',\n 'arrow_down_small':'\\ud83d\\udd3d',\n 'arrow_forward':'\\u25b6\\ufe0f',\n 'arrow_heading_down':'\\u2935\\ufe0f',\n 'arrow_heading_up':'\\u2934\\ufe0f',\n 'arrow_left':'\\u2b05\\ufe0f',\n 'arrow_lower_left':'\\u2199\\ufe0f',\n 'arrow_lower_right':'\\u2198\\ufe0f',\n 'arrow_right':'\\u27a1\\ufe0f',\n 'arrow_right_hook':'\\u21aa\\ufe0f',\n 'arrow_up':'\\u2b06\\ufe0f',\n 'arrow_up_down':'\\u2195\\ufe0f',\n 'arrow_up_small':'\\ud83d\\udd3c',\n 'arrow_upper_left':'\\u2196\\ufe0f',\n 'arrow_upper_right':'\\u2197\\ufe0f',\n 'arrows_clockwise':'\\ud83d\\udd03',\n 'arrows_counterclockwise':'\\ud83d\\udd04',\n 'art':'\\ud83c\\udfa8',\n 'articulated_lorry':'\\ud83d\\ude9b',\n 'artificial_satellite':'\\ud83d\\udef0',\n 'astonished':'\\ud83d\\ude32',\n 'athletic_shoe':'\\ud83d\\udc5f',\n 'atm':'\\ud83c\\udfe7',\n 'atom_symbol':'\\u269b\\ufe0f',\n 'avocado':'\\ud83e\\udd51',\n 'b':'\\ud83c\\udd71\\ufe0f',\n 'baby':'\\ud83d\\udc76',\n 'baby_bottle':'\\ud83c\\udf7c',\n 'baby_chick':'\\ud83d\\udc24',\n 'baby_symbol':'\\ud83d\\udebc',\n 'back':'\\ud83d\\udd19',\n 'bacon':'\\ud83e\\udd53',\n 'badminton':'\\ud83c\\udff8',\n 'baggage_claim':'\\ud83d\\udec4',\n 'baguette_bread':'\\ud83e\\udd56',\n 'balance_scale':'\\u2696\\ufe0f',\n 'balloon':'\\ud83c\\udf88',\n 'ballot_box':'\\ud83d\\uddf3',\n 'ballot_box_with_check':'\\u2611\\ufe0f',\n 'bamboo':'\\ud83c\\udf8d',\n 'banana':'\\ud83c\\udf4c',\n 'bangbang':'\\u203c\\ufe0f',\n 'bank':'\\ud83c\\udfe6',\n 'bar_chart':'\\ud83d\\udcca',\n 'barber':'\\ud83d\\udc88',\n 'baseball':'\\u26be\\ufe0f',\n 'basketball':'\\ud83c\\udfc0',\n 'basketball_man':'\\u26f9\\ufe0f',\n 'basketball_woman':'\\u26f9\\ufe0f‍\\u2640\\ufe0f',\n 'bat':'\\ud83e\\udd87',\n 'bath':'\\ud83d\\udec0',\n 'bathtub':'\\ud83d\\udec1',\n 'battery':'\\ud83d\\udd0b',\n 'beach_umbrella':'\\ud83c\\udfd6',\n 'bear':'\\ud83d\\udc3b',\n 'bed':'\\ud83d\\udecf',\n 'bee':'\\ud83d\\udc1d',\n 'beer':'\\ud83c\\udf7a',\n 'beers':'\\ud83c\\udf7b',\n 'beetle':'\\ud83d\\udc1e',\n 'beginner':'\\ud83d\\udd30',\n 'bell':'\\ud83d\\udd14',\n 'bellhop_bell':'\\ud83d\\udece',\n 'bento':'\\ud83c\\udf71',\n 'biking_man':'\\ud83d\\udeb4',\n 'bike':'\\ud83d\\udeb2',\n 'biking_woman':'\\ud83d\\udeb4‍\\u2640\\ufe0f',\n 'bikini':'\\ud83d\\udc59',\n 'biohazard':'\\u2623\\ufe0f',\n 'bird':'\\ud83d\\udc26',\n 'birthday':'\\ud83c\\udf82',\n 'black_circle':'\\u26ab\\ufe0f',\n 'black_flag':'\\ud83c\\udff4',\n 'black_heart':'\\ud83d\\udda4',\n 'black_joker':'\\ud83c\\udccf',\n 'black_large_square':'\\u2b1b\\ufe0f',\n 'black_medium_small_square':'\\u25fe\\ufe0f',\n 'black_medium_square':'\\u25fc\\ufe0f',\n 'black_nib':'\\u2712\\ufe0f',\n 'black_small_square':'\\u25aa\\ufe0f',\n 'black_square_button':'\\ud83d\\udd32',\n 'blonde_man':'\\ud83d\\udc71',\n 'blonde_woman':'\\ud83d\\udc71‍\\u2640\\ufe0f',\n 'blossom':'\\ud83c\\udf3c',\n 'blowfish':'\\ud83d\\udc21',\n 'blue_book':'\\ud83d\\udcd8',\n 'blue_car':'\\ud83d\\ude99',\n 'blue_heart':'\\ud83d\\udc99',\n 'blush':'\\ud83d\\ude0a',\n 'boar':'\\ud83d\\udc17',\n 'boat':'\\u26f5\\ufe0f',\n 'bomb':'\\ud83d\\udca3',\n 'book':'\\ud83d\\udcd6',\n 'bookmark':'\\ud83d\\udd16',\n 'bookmark_tabs':'\\ud83d\\udcd1',\n 'books':'\\ud83d\\udcda',\n 'boom':'\\ud83d\\udca5',\n 'boot':'\\ud83d\\udc62',\n 'bouquet':'\\ud83d\\udc90',\n 'bowing_man':'\\ud83d\\ude47',\n 'bow_and_arrow':'\\ud83c\\udff9',\n 'bowing_woman':'\\ud83d\\ude47‍\\u2640\\ufe0f',\n 'bowling':'\\ud83c\\udfb3',\n 'boxing_glove':'\\ud83e\\udd4a',\n 'boy':'\\ud83d\\udc66',\n 'bread':'\\ud83c\\udf5e',\n 'bride_with_veil':'\\ud83d\\udc70',\n 'bridge_at_night':'\\ud83c\\udf09',\n 'briefcase':'\\ud83d\\udcbc',\n 'broken_heart':'\\ud83d\\udc94',\n 'bug':'\\ud83d\\udc1b',\n 'building_construction':'\\ud83c\\udfd7',\n 'bulb':'\\ud83d\\udca1',\n 'bullettrain_front':'\\ud83d\\ude85',\n 'bullettrain_side':'\\ud83d\\ude84',\n 'burrito':'\\ud83c\\udf2f',\n 'bus':'\\ud83d\\ude8c',\n 'business_suit_levitating':'\\ud83d\\udd74',\n 'busstop':'\\ud83d\\ude8f',\n 'bust_in_silhouette':'\\ud83d\\udc64',\n 'busts_in_silhouette':'\\ud83d\\udc65',\n 'butterfly':'\\ud83e\\udd8b',\n 'cactus':'\\ud83c\\udf35',\n 'cake':'\\ud83c\\udf70',\n 'calendar':'\\ud83d\\udcc6',\n 'call_me_hand':'\\ud83e\\udd19',\n 'calling':'\\ud83d\\udcf2',\n 'camel':'\\ud83d\\udc2b',\n 'camera':'\\ud83d\\udcf7',\n 'camera_flash':'\\ud83d\\udcf8',\n 'camping':'\\ud83c\\udfd5',\n 'cancer':'\\u264b\\ufe0f',\n 'candle':'\\ud83d\\udd6f',\n 'candy':'\\ud83c\\udf6c',\n 'canoe':'\\ud83d\\udef6',\n 'capital_abcd':'\\ud83d\\udd20',\n 'capricorn':'\\u2651\\ufe0f',\n 'car':'\\ud83d\\ude97',\n 'card_file_box':'\\ud83d\\uddc3',\n 'card_index':'\\ud83d\\udcc7',\n 'card_index_dividers':'\\ud83d\\uddc2',\n 'carousel_horse':'\\ud83c\\udfa0',\n 'carrot':'\\ud83e\\udd55',\n 'cat':'\\ud83d\\udc31',\n 'cat2':'\\ud83d\\udc08',\n 'cd':'\\ud83d\\udcbf',\n 'chains':'\\u26d3',\n 'champagne':'\\ud83c\\udf7e',\n 'chart':'\\ud83d\\udcb9',\n 'chart_with_downwards_trend':'\\ud83d\\udcc9',\n 'chart_with_upwards_trend':'\\ud83d\\udcc8',\n 'checkered_flag':'\\ud83c\\udfc1',\n 'cheese':'\\ud83e\\uddc0',\n 'cherries':'\\ud83c\\udf52',\n 'cherry_blossom':'\\ud83c\\udf38',\n 'chestnut':'\\ud83c\\udf30',\n 'chicken':'\\ud83d\\udc14',\n 'children_crossing':'\\ud83d\\udeb8',\n 'chipmunk':'\\ud83d\\udc3f',\n 'chocolate_bar':'\\ud83c\\udf6b',\n 'christmas_tree':'\\ud83c\\udf84',\n 'church':'\\u26ea\\ufe0f',\n 'cinema':'\\ud83c\\udfa6',\n 'circus_tent':'\\ud83c\\udfaa',\n 'city_sunrise':'\\ud83c\\udf07',\n 'city_sunset':'\\ud83c\\udf06',\n 'cityscape':'\\ud83c\\udfd9',\n 'cl':'\\ud83c\\udd91',\n 'clamp':'\\ud83d\\udddc',\n 'clap':'\\ud83d\\udc4f',\n 'clapper':'\\ud83c\\udfac',\n 'classical_building':'\\ud83c\\udfdb',\n 'clinking_glasses':'\\ud83e\\udd42',\n 'clipboard':'\\ud83d\\udccb',\n 'clock1':'\\ud83d\\udd50',\n 'clock10':'\\ud83d\\udd59',\n 'clock1030':'\\ud83d\\udd65',\n 'clock11':'\\ud83d\\udd5a',\n 'clock1130':'\\ud83d\\udd66',\n 'clock12':'\\ud83d\\udd5b',\n 'clock1230':'\\ud83d\\udd67',\n 'clock130':'\\ud83d\\udd5c',\n 'clock2':'\\ud83d\\udd51',\n 'clock230':'\\ud83d\\udd5d',\n 'clock3':'\\ud83d\\udd52',\n 'clock330':'\\ud83d\\udd5e',\n 'clock4':'\\ud83d\\udd53',\n 'clock430':'\\ud83d\\udd5f',\n 'clock5':'\\ud83d\\udd54',\n 'clock530':'\\ud83d\\udd60',\n 'clock6':'\\ud83d\\udd55',\n 'clock630':'\\ud83d\\udd61',\n 'clock7':'\\ud83d\\udd56',\n 'clock730':'\\ud83d\\udd62',\n 'clock8':'\\ud83d\\udd57',\n 'clock830':'\\ud83d\\udd63',\n 'clock9':'\\ud83d\\udd58',\n 'clock930':'\\ud83d\\udd64',\n 'closed_book':'\\ud83d\\udcd5',\n 'closed_lock_with_key':'\\ud83d\\udd10',\n 'closed_umbrella':'\\ud83c\\udf02',\n 'cloud':'\\u2601\\ufe0f',\n 'cloud_with_lightning':'\\ud83c\\udf29',\n 'cloud_with_lightning_and_rain':'\\u26c8',\n 'cloud_with_rain':'\\ud83c\\udf27',\n 'cloud_with_snow':'\\ud83c\\udf28',\n 'clown_face':'\\ud83e\\udd21',\n 'clubs':'\\u2663\\ufe0f',\n 'cocktail':'\\ud83c\\udf78',\n 'coffee':'\\u2615\\ufe0f',\n 'coffin':'\\u26b0\\ufe0f',\n 'cold_sweat':'\\ud83d\\ude30',\n 'comet':'\\u2604\\ufe0f',\n 'computer':'\\ud83d\\udcbb',\n 'computer_mouse':'\\ud83d\\uddb1',\n 'confetti_ball':'\\ud83c\\udf8a',\n 'confounded':'\\ud83d\\ude16',\n 'confused':'\\ud83d\\ude15',\n 'congratulations':'\\u3297\\ufe0f',\n 'construction':'\\ud83d\\udea7',\n 'construction_worker_man':'\\ud83d\\udc77',\n 'construction_worker_woman':'\\ud83d\\udc77‍\\u2640\\ufe0f',\n 'control_knobs':'\\ud83c\\udf9b',\n 'convenience_store':'\\ud83c\\udfea',\n 'cookie':'\\ud83c\\udf6a',\n 'cool':'\\ud83c\\udd92',\n 'policeman':'\\ud83d\\udc6e',\n 'copyright':'\\u00a9\\ufe0f',\n 'corn':'\\ud83c\\udf3d',\n 'couch_and_lamp':'\\ud83d\\udecb',\n 'couple':'\\ud83d\\udc6b',\n 'couple_with_heart_woman_man':'\\ud83d\\udc91',\n 'couple_with_heart_man_man':'\\ud83d\\udc68‍\\u2764\\ufe0f‍\\ud83d\\udc68',\n 'couple_with_heart_woman_woman':'\\ud83d\\udc69‍\\u2764\\ufe0f‍\\ud83d\\udc69',\n 'couplekiss_man_man':'\\ud83d\\udc68‍\\u2764\\ufe0f‍\\ud83d\\udc8b‍\\ud83d\\udc68',\n 'couplekiss_man_woman':'\\ud83d\\udc8f',\n 'couplekiss_woman_woman':'\\ud83d\\udc69‍\\u2764\\ufe0f‍\\ud83d\\udc8b‍\\ud83d\\udc69',\n 'cow':'\\ud83d\\udc2e',\n 'cow2':'\\ud83d\\udc04',\n 'cowboy_hat_face':'\\ud83e\\udd20',\n 'crab':'\\ud83e\\udd80',\n 'crayon':'\\ud83d\\udd8d',\n 'credit_card':'\\ud83d\\udcb3',\n 'crescent_moon':'\\ud83c\\udf19',\n 'cricket':'\\ud83c\\udfcf',\n 'crocodile':'\\ud83d\\udc0a',\n 'croissant':'\\ud83e\\udd50',\n 'crossed_fingers':'\\ud83e\\udd1e',\n 'crossed_flags':'\\ud83c\\udf8c',\n 'crossed_swords':'\\u2694\\ufe0f',\n 'crown':'\\ud83d\\udc51',\n 'cry':'\\ud83d\\ude22',\n 'crying_cat_face':'\\ud83d\\ude3f',\n 'crystal_ball':'\\ud83d\\udd2e',\n 'cucumber':'\\ud83e\\udd52',\n 'cupid':'\\ud83d\\udc98',\n 'curly_loop':'\\u27b0',\n 'currency_exchange':'\\ud83d\\udcb1',\n 'curry':'\\ud83c\\udf5b',\n 'custard':'\\ud83c\\udf6e',\n 'customs':'\\ud83d\\udec3',\n 'cyclone':'\\ud83c\\udf00',\n 'dagger':'\\ud83d\\udde1',\n 'dancer':'\\ud83d\\udc83',\n 'dancing_women':'\\ud83d\\udc6f',\n 'dancing_men':'\\ud83d\\udc6f‍\\u2642\\ufe0f',\n 'dango':'\\ud83c\\udf61',\n 'dark_sunglasses':'\\ud83d\\udd76',\n 'dart':'\\ud83c\\udfaf',\n 'dash':'\\ud83d\\udca8',\n 'date':'\\ud83d\\udcc5',\n 'deciduous_tree':'\\ud83c\\udf33',\n 'deer':'\\ud83e\\udd8c',\n 'department_store':'\\ud83c\\udfec',\n 'derelict_house':'\\ud83c\\udfda',\n 'desert':'\\ud83c\\udfdc',\n 'desert_island':'\\ud83c\\udfdd',\n 'desktop_computer':'\\ud83d\\udda5',\n 'male_detective':'\\ud83d\\udd75\\ufe0f',\n 'diamond_shape_with_a_dot_inside':'\\ud83d\\udca0',\n 'diamonds':'\\u2666\\ufe0f',\n 'disappointed':'\\ud83d\\ude1e',\n 'disappointed_relieved':'\\ud83d\\ude25',\n 'dizzy':'\\ud83d\\udcab',\n 'dizzy_face':'\\ud83d\\ude35',\n 'do_not_litter':'\\ud83d\\udeaf',\n 'dog':'\\ud83d\\udc36',\n 'dog2':'\\ud83d\\udc15',\n 'dollar':'\\ud83d\\udcb5',\n 'dolls':'\\ud83c\\udf8e',\n 'dolphin':'\\ud83d\\udc2c',\n 'door':'\\ud83d\\udeaa',\n 'doughnut':'\\ud83c\\udf69',\n 'dove':'\\ud83d\\udd4a',\n 'dragon':'\\ud83d\\udc09',\n 'dragon_face':'\\ud83d\\udc32',\n 'dress':'\\ud83d\\udc57',\n 'dromedary_camel':'\\ud83d\\udc2a',\n 'drooling_face':'\\ud83e\\udd24',\n 'droplet':'\\ud83d\\udca7',\n 'drum':'\\ud83e\\udd41',\n 'duck':'\\ud83e\\udd86',\n 'dvd':'\\ud83d\\udcc0',\n 'e-mail':'\\ud83d\\udce7',\n 'eagle':'\\ud83e\\udd85',\n 'ear':'\\ud83d\\udc42',\n 'ear_of_rice':'\\ud83c\\udf3e',\n 'earth_africa':'\\ud83c\\udf0d',\n 'earth_americas':'\\ud83c\\udf0e',\n 'earth_asia':'\\ud83c\\udf0f',\n 'egg':'\\ud83e\\udd5a',\n 'eggplant':'\\ud83c\\udf46',\n 'eight_pointed_black_star':'\\u2734\\ufe0f',\n 'eight_spoked_asterisk':'\\u2733\\ufe0f',\n 'electric_plug':'\\ud83d\\udd0c',\n 'elephant':'\\ud83d\\udc18',\n 'email':'\\u2709\\ufe0f',\n 'end':'\\ud83d\\udd1a',\n 'envelope_with_arrow':'\\ud83d\\udce9',\n 'euro':'\\ud83d\\udcb6',\n 'european_castle':'\\ud83c\\udff0',\n 'european_post_office':'\\ud83c\\udfe4',\n 'evergreen_tree':'\\ud83c\\udf32',\n 'exclamation':'\\u2757\\ufe0f',\n 'expressionless':'\\ud83d\\ude11',\n 'eye':'\\ud83d\\udc41',\n 'eye_speech_bubble':'\\ud83d\\udc41‍\\ud83d\\udde8',\n 'eyeglasses':'\\ud83d\\udc53',\n 'eyes':'\\ud83d\\udc40',\n 'face_with_head_bandage':'\\ud83e\\udd15',\n 'face_with_thermometer':'\\ud83e\\udd12',\n 'fist_oncoming':'\\ud83d\\udc4a',\n 'factory':'\\ud83c\\udfed',\n 'fallen_leaf':'\\ud83c\\udf42',\n 'family_man_woman_boy':'\\ud83d\\udc6a',\n 'family_man_boy':'\\ud83d\\udc68‍\\ud83d\\udc66',\n 'family_man_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_girl':'\\ud83d\\udc68‍\\ud83d\\udc67',\n 'family_man_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_man_man_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc66',\n 'family_man_man_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_man_girl':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67',\n 'family_man_man_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_man_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_man_woman_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_woman_girl':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_man_woman_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_woman_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_woman_boy':'\\ud83d\\udc69‍\\ud83d\\udc66',\n 'family_woman_boy_boy':'\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_woman_girl':'\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_woman_girl_boy':'\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_woman_girl_girl':'\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_woman_woman_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc66',\n 'family_woman_woman_boy_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_woman_woman_girl':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_woman_woman_girl_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_woman_woman_girl_girl':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'fast_forward':'\\u23e9',\n 'fax':'\\ud83d\\udce0',\n 'fearful':'\\ud83d\\ude28',\n 'feet':'\\ud83d\\udc3e',\n 'female_detective':'\\ud83d\\udd75\\ufe0f‍\\u2640\\ufe0f',\n 'ferris_wheel':'\\ud83c\\udfa1',\n 'ferry':'\\u26f4',\n 'field_hockey':'\\ud83c\\udfd1',\n 'file_cabinet':'\\ud83d\\uddc4',\n 'file_folder':'\\ud83d\\udcc1',\n 'film_projector':'\\ud83d\\udcfd',\n 'film_strip':'\\ud83c\\udf9e',\n 'fire':'\\ud83d\\udd25',\n 'fire_engine':'\\ud83d\\ude92',\n 'fireworks':'\\ud83c\\udf86',\n 'first_quarter_moon':'\\ud83c\\udf13',\n 'first_quarter_moon_with_face':'\\ud83c\\udf1b',\n 'fish':'\\ud83d\\udc1f',\n 'fish_cake':'\\ud83c\\udf65',\n 'fishing_pole_and_fish':'\\ud83c\\udfa3',\n 'fist_raised':'\\u270a',\n 'fist_left':'\\ud83e\\udd1b',\n 'fist_right':'\\ud83e\\udd1c',\n 'flags':'\\ud83c\\udf8f',\n 'flashlight':'\\ud83d\\udd26',\n 'fleur_de_lis':'\\u269c\\ufe0f',\n 'flight_arrival':'\\ud83d\\udeec',\n 'flight_departure':'\\ud83d\\udeeb',\n 'floppy_disk':'\\ud83d\\udcbe',\n 'flower_playing_cards':'\\ud83c\\udfb4',\n 'flushed':'\\ud83d\\ude33',\n 'fog':'\\ud83c\\udf2b',\n 'foggy':'\\ud83c\\udf01',\n 'football':'\\ud83c\\udfc8',\n 'footprints':'\\ud83d\\udc63',\n 'fork_and_knife':'\\ud83c\\udf74',\n 'fountain':'\\u26f2\\ufe0f',\n 'fountain_pen':'\\ud83d\\udd8b',\n 'four_leaf_clover':'\\ud83c\\udf40',\n 'fox_face':'\\ud83e\\udd8a',\n 'framed_picture':'\\ud83d\\uddbc',\n 'free':'\\ud83c\\udd93',\n 'fried_egg':'\\ud83c\\udf73',\n 'fried_shrimp':'\\ud83c\\udf64',\n 'fries':'\\ud83c\\udf5f',\n 'frog':'\\ud83d\\udc38',\n 'frowning':'\\ud83d\\ude26',\n 'frowning_face':'\\u2639\\ufe0f',\n 'frowning_man':'\\ud83d\\ude4d‍\\u2642\\ufe0f',\n 'frowning_woman':'\\ud83d\\ude4d',\n 'middle_finger':'\\ud83d\\udd95',\n 'fuelpump':'\\u26fd\\ufe0f',\n 'full_moon':'\\ud83c\\udf15',\n 'full_moon_with_face':'\\ud83c\\udf1d',\n 'funeral_urn':'\\u26b1\\ufe0f',\n 'game_die':'\\ud83c\\udfb2',\n 'gear':'\\u2699\\ufe0f',\n 'gem':'\\ud83d\\udc8e',\n 'gemini':'\\u264a\\ufe0f',\n 'ghost':'\\ud83d\\udc7b',\n 'gift':'\\ud83c\\udf81',\n 'gift_heart':'\\ud83d\\udc9d',\n 'girl':'\\ud83d\\udc67',\n 'globe_with_meridians':'\\ud83c\\udf10',\n 'goal_net':'\\ud83e\\udd45',\n 'goat':'\\ud83d\\udc10',\n 'golf':'\\u26f3\\ufe0f',\n 'golfing_man':'\\ud83c\\udfcc\\ufe0f',\n 'golfing_woman':'\\ud83c\\udfcc\\ufe0f‍\\u2640\\ufe0f',\n 'gorilla':'\\ud83e\\udd8d',\n 'grapes':'\\ud83c\\udf47',\n 'green_apple':'\\ud83c\\udf4f',\n 'green_book':'\\ud83d\\udcd7',\n 'green_heart':'\\ud83d\\udc9a',\n 'green_salad':'\\ud83e\\udd57',\n 'grey_exclamation':'\\u2755',\n 'grey_question':'\\u2754',\n 'grimacing':'\\ud83d\\ude2c',\n 'grin':'\\ud83d\\ude01',\n 'grinning':'\\ud83d\\ude00',\n 'guardsman':'\\ud83d\\udc82',\n 'guardswoman':'\\ud83d\\udc82‍\\u2640\\ufe0f',\n 'guitar':'\\ud83c\\udfb8',\n 'gun':'\\ud83d\\udd2b',\n 'haircut_woman':'\\ud83d\\udc87',\n 'haircut_man':'\\ud83d\\udc87‍\\u2642\\ufe0f',\n 'hamburger':'\\ud83c\\udf54',\n 'hammer':'\\ud83d\\udd28',\n 'hammer_and_pick':'\\u2692',\n 'hammer_and_wrench':'\\ud83d\\udee0',\n 'hamster':'\\ud83d\\udc39',\n 'hand':'\\u270b',\n 'handbag':'\\ud83d\\udc5c',\n 'handshake':'\\ud83e\\udd1d',\n 'hankey':'\\ud83d\\udca9',\n 'hatched_chick':'\\ud83d\\udc25',\n 'hatching_chick':'\\ud83d\\udc23',\n 'headphones':'\\ud83c\\udfa7',\n 'hear_no_evil':'\\ud83d\\ude49',\n 'heart':'\\u2764\\ufe0f',\n 'heart_decoration':'\\ud83d\\udc9f',\n 'heart_eyes':'\\ud83d\\ude0d',\n 'heart_eyes_cat':'\\ud83d\\ude3b',\n 'heartbeat':'\\ud83d\\udc93',\n 'heartpulse':'\\ud83d\\udc97',\n 'hearts':'\\u2665\\ufe0f',\n 'heavy_check_mark':'\\u2714\\ufe0f',\n 'heavy_division_sign':'\\u2797',\n 'heavy_dollar_sign':'\\ud83d\\udcb2',\n 'heavy_heart_exclamation':'\\u2763\\ufe0f',\n 'heavy_minus_sign':'\\u2796',\n 'heavy_multiplication_x':'\\u2716\\ufe0f',\n 'heavy_plus_sign':'\\u2795',\n 'helicopter':'\\ud83d\\ude81',\n 'herb':'\\ud83c\\udf3f',\n 'hibiscus':'\\ud83c\\udf3a',\n 'high_brightness':'\\ud83d\\udd06',\n 'high_heel':'\\ud83d\\udc60',\n 'hocho':'\\ud83d\\udd2a',\n 'hole':'\\ud83d\\udd73',\n 'honey_pot':'\\ud83c\\udf6f',\n 'horse':'\\ud83d\\udc34',\n 'horse_racing':'\\ud83c\\udfc7',\n 'hospital':'\\ud83c\\udfe5',\n 'hot_pepper':'\\ud83c\\udf36',\n 'hotdog':'\\ud83c\\udf2d',\n 'hotel':'\\ud83c\\udfe8',\n 'hotsprings':'\\u2668\\ufe0f',\n 'hourglass':'\\u231b\\ufe0f',\n 'hourglass_flowing_sand':'\\u23f3',\n 'house':'\\ud83c\\udfe0',\n 'house_with_garden':'\\ud83c\\udfe1',\n 'houses':'\\ud83c\\udfd8',\n 'hugs':'\\ud83e\\udd17',\n 'hushed':'\\ud83d\\ude2f',\n 'ice_cream':'\\ud83c\\udf68',\n 'ice_hockey':'\\ud83c\\udfd2',\n 'ice_skate':'\\u26f8',\n 'icecream':'\\ud83c\\udf66',\n 'id':'\\ud83c\\udd94',\n 'ideograph_advantage':'\\ud83c\\ude50',\n 'imp':'\\ud83d\\udc7f',\n 'inbox_tray':'\\ud83d\\udce5',\n 'incoming_envelope':'\\ud83d\\udce8',\n 'tipping_hand_woman':'\\ud83d\\udc81',\n 'information_source':'\\u2139\\ufe0f',\n 'innocent':'\\ud83d\\ude07',\n 'interrobang':'\\u2049\\ufe0f',\n 'iphone':'\\ud83d\\udcf1',\n 'izakaya_lantern':'\\ud83c\\udfee',\n 'jack_o_lantern':'\\ud83c\\udf83',\n 'japan':'\\ud83d\\uddfe',\n 'japanese_castle':'\\ud83c\\udfef',\n 'japanese_goblin':'\\ud83d\\udc7a',\n 'japanese_ogre':'\\ud83d\\udc79',\n 'jeans':'\\ud83d\\udc56',\n 'joy':'\\ud83d\\ude02',\n 'joy_cat':'\\ud83d\\ude39',\n 'joystick':'\\ud83d\\udd79',\n 'kaaba':'\\ud83d\\udd4b',\n 'key':'\\ud83d\\udd11',\n 'keyboard':'\\u2328\\ufe0f',\n 'keycap_ten':'\\ud83d\\udd1f',\n 'kick_scooter':'\\ud83d\\udef4',\n 'kimono':'\\ud83d\\udc58',\n 'kiss':'\\ud83d\\udc8b',\n 'kissing':'\\ud83d\\ude17',\n 'kissing_cat':'\\ud83d\\ude3d',\n 'kissing_closed_eyes':'\\ud83d\\ude1a',\n 'kissing_heart':'\\ud83d\\ude18',\n 'kissing_smiling_eyes':'\\ud83d\\ude19',\n 'kiwi_fruit':'\\ud83e\\udd5d',\n 'koala':'\\ud83d\\udc28',\n 'koko':'\\ud83c\\ude01',\n 'label':'\\ud83c\\udff7',\n 'large_blue_circle':'\\ud83d\\udd35',\n 'large_blue_diamond':'\\ud83d\\udd37',\n 'large_orange_diamond':'\\ud83d\\udd36',\n 'last_quarter_moon':'\\ud83c\\udf17',\n 'last_quarter_moon_with_face':'\\ud83c\\udf1c',\n 'latin_cross':'\\u271d\\ufe0f',\n 'laughing':'\\ud83d\\ude06',\n 'leaves':'\\ud83c\\udf43',\n 'ledger':'\\ud83d\\udcd2',\n 'left_luggage':'\\ud83d\\udec5',\n 'left_right_arrow':'\\u2194\\ufe0f',\n 'leftwards_arrow_with_hook':'\\u21a9\\ufe0f',\n 'lemon':'\\ud83c\\udf4b',\n 'leo':'\\u264c\\ufe0f',\n 'leopard':'\\ud83d\\udc06',\n 'level_slider':'\\ud83c\\udf9a',\n 'libra':'\\u264e\\ufe0f',\n 'light_rail':'\\ud83d\\ude88',\n 'link':'\\ud83d\\udd17',\n 'lion':'\\ud83e\\udd81',\n 'lips':'\\ud83d\\udc44',\n 'lipstick':'\\ud83d\\udc84',\n 'lizard':'\\ud83e\\udd8e',\n 'lock':'\\ud83d\\udd12',\n 'lock_with_ink_pen':'\\ud83d\\udd0f',\n 'lollipop':'\\ud83c\\udf6d',\n 'loop':'\\u27bf',\n 'loud_sound':'\\ud83d\\udd0a',\n 'loudspeaker':'\\ud83d\\udce2',\n 'love_hotel':'\\ud83c\\udfe9',\n 'love_letter':'\\ud83d\\udc8c',\n 'low_brightness':'\\ud83d\\udd05',\n 'lying_face':'\\ud83e\\udd25',\n 'm':'\\u24c2\\ufe0f',\n 'mag':'\\ud83d\\udd0d',\n 'mag_right':'\\ud83d\\udd0e',\n 'mahjong':'\\ud83c\\udc04\\ufe0f',\n 'mailbox':'\\ud83d\\udceb',\n 'mailbox_closed':'\\ud83d\\udcea',\n 'mailbox_with_mail':'\\ud83d\\udcec',\n 'mailbox_with_no_mail':'\\ud83d\\udced',\n 'man':'\\ud83d\\udc68',\n 'man_artist':'\\ud83d\\udc68‍\\ud83c\\udfa8',\n 'man_astronaut':'\\ud83d\\udc68‍\\ud83d\\ude80',\n 'man_cartwheeling':'\\ud83e\\udd38‍\\u2642\\ufe0f',\n 'man_cook':'\\ud83d\\udc68‍\\ud83c\\udf73',\n 'man_dancing':'\\ud83d\\udd7a',\n 'man_facepalming':'\\ud83e\\udd26‍\\u2642\\ufe0f',\n 'man_factory_worker':'\\ud83d\\udc68‍\\ud83c\\udfed',\n 'man_farmer':'\\ud83d\\udc68‍\\ud83c\\udf3e',\n 'man_firefighter':'\\ud83d\\udc68‍\\ud83d\\ude92',\n 'man_health_worker':'\\ud83d\\udc68‍\\u2695\\ufe0f',\n 'man_in_tuxedo':'\\ud83e\\udd35',\n 'man_judge':'\\ud83d\\udc68‍\\u2696\\ufe0f',\n 'man_juggling':'\\ud83e\\udd39‍\\u2642\\ufe0f',\n 'man_mechanic':'\\ud83d\\udc68‍\\ud83d\\udd27',\n 'man_office_worker':'\\ud83d\\udc68‍\\ud83d\\udcbc',\n 'man_pilot':'\\ud83d\\udc68‍\\u2708\\ufe0f',\n 'man_playing_handball':'\\ud83e\\udd3e‍\\u2642\\ufe0f',\n 'man_playing_water_polo':'\\ud83e\\udd3d‍\\u2642\\ufe0f',\n 'man_scientist':'\\ud83d\\udc68‍\\ud83d\\udd2c',\n 'man_shrugging':'\\ud83e\\udd37‍\\u2642\\ufe0f',\n 'man_singer':'\\ud83d\\udc68‍\\ud83c\\udfa4',\n 'man_student':'\\ud83d\\udc68‍\\ud83c\\udf93',\n 'man_teacher':'\\ud83d\\udc68‍\\ud83c\\udfeb',\n 'man_technologist':'\\ud83d\\udc68‍\\ud83d\\udcbb',\n 'man_with_gua_pi_mao':'\\ud83d\\udc72',\n 'man_with_turban':'\\ud83d\\udc73',\n 'tangerine':'\\ud83c\\udf4a',\n 'mans_shoe':'\\ud83d\\udc5e',\n 'mantelpiece_clock':'\\ud83d\\udd70',\n 'maple_leaf':'\\ud83c\\udf41',\n 'martial_arts_uniform':'\\ud83e\\udd4b',\n 'mask':'\\ud83d\\ude37',\n 'massage_woman':'\\ud83d\\udc86',\n 'massage_man':'\\ud83d\\udc86‍\\u2642\\ufe0f',\n 'meat_on_bone':'\\ud83c\\udf56',\n 'medal_military':'\\ud83c\\udf96',\n 'medal_sports':'\\ud83c\\udfc5',\n 'mega':'\\ud83d\\udce3',\n 'melon':'\\ud83c\\udf48',\n 'memo':'\\ud83d\\udcdd',\n 'men_wrestling':'\\ud83e\\udd3c‍\\u2642\\ufe0f',\n 'menorah':'\\ud83d\\udd4e',\n 'mens':'\\ud83d\\udeb9',\n 'metal':'\\ud83e\\udd18',\n 'metro':'\\ud83d\\ude87',\n 'microphone':'\\ud83c\\udfa4',\n 'microscope':'\\ud83d\\udd2c',\n 'milk_glass':'\\ud83e\\udd5b',\n 'milky_way':'\\ud83c\\udf0c',\n 'minibus':'\\ud83d\\ude90',\n 'minidisc':'\\ud83d\\udcbd',\n 'mobile_phone_off':'\\ud83d\\udcf4',\n 'money_mouth_face':'\\ud83e\\udd11',\n 'money_with_wings':'\\ud83d\\udcb8',\n 'moneybag':'\\ud83d\\udcb0',\n 'monkey':'\\ud83d\\udc12',\n 'monkey_face':'\\ud83d\\udc35',\n 'monorail':'\\ud83d\\ude9d',\n 'moon':'\\ud83c\\udf14',\n 'mortar_board':'\\ud83c\\udf93',\n 'mosque':'\\ud83d\\udd4c',\n 'motor_boat':'\\ud83d\\udee5',\n 'motor_scooter':'\\ud83d\\udef5',\n 'motorcycle':'\\ud83c\\udfcd',\n 'motorway':'\\ud83d\\udee3',\n 'mount_fuji':'\\ud83d\\uddfb',\n 'mountain':'\\u26f0',\n 'mountain_biking_man':'\\ud83d\\udeb5',\n 'mountain_biking_woman':'\\ud83d\\udeb5‍\\u2640\\ufe0f',\n 'mountain_cableway':'\\ud83d\\udea0',\n 'mountain_railway':'\\ud83d\\ude9e',\n 'mountain_snow':'\\ud83c\\udfd4',\n 'mouse':'\\ud83d\\udc2d',\n 'mouse2':'\\ud83d\\udc01',\n 'movie_camera':'\\ud83c\\udfa5',\n 'moyai':'\\ud83d\\uddff',\n 'mrs_claus':'\\ud83e\\udd36',\n 'muscle':'\\ud83d\\udcaa',\n 'mushroom':'\\ud83c\\udf44',\n 'musical_keyboard':'\\ud83c\\udfb9',\n 'musical_note':'\\ud83c\\udfb5',\n 'musical_score':'\\ud83c\\udfbc',\n 'mute':'\\ud83d\\udd07',\n 'nail_care':'\\ud83d\\udc85',\n 'name_badge':'\\ud83d\\udcdb',\n 'national_park':'\\ud83c\\udfde',\n 'nauseated_face':'\\ud83e\\udd22',\n 'necktie':'\\ud83d\\udc54',\n 'negative_squared_cross_mark':'\\u274e',\n 'nerd_face':'\\ud83e\\udd13',\n 'neutral_face':'\\ud83d\\ude10',\n 'new':'\\ud83c\\udd95',\n 'new_moon':'\\ud83c\\udf11',\n 'new_moon_with_face':'\\ud83c\\udf1a',\n 'newspaper':'\\ud83d\\udcf0',\n 'newspaper_roll':'\\ud83d\\uddde',\n 'next_track_button':'\\u23ed',\n 'ng':'\\ud83c\\udd96',\n 'no_good_man':'\\ud83d\\ude45‍\\u2642\\ufe0f',\n 'no_good_woman':'\\ud83d\\ude45',\n 'night_with_stars':'\\ud83c\\udf03',\n 'no_bell':'\\ud83d\\udd15',\n 'no_bicycles':'\\ud83d\\udeb3',\n 'no_entry':'\\u26d4\\ufe0f',\n 'no_entry_sign':'\\ud83d\\udeab',\n 'no_mobile_phones':'\\ud83d\\udcf5',\n 'no_mouth':'\\ud83d\\ude36',\n 'no_pedestrians':'\\ud83d\\udeb7',\n 'no_smoking':'\\ud83d\\udead',\n 'non-potable_water':'\\ud83d\\udeb1',\n 'nose':'\\ud83d\\udc43',\n 'notebook':'\\ud83d\\udcd3',\n 'notebook_with_decorative_cover':'\\ud83d\\udcd4',\n 'notes':'\\ud83c\\udfb6',\n 'nut_and_bolt':'\\ud83d\\udd29',\n 'o':'\\u2b55\\ufe0f',\n 'o2':'\\ud83c\\udd7e\\ufe0f',\n 'ocean':'\\ud83c\\udf0a',\n 'octopus':'\\ud83d\\udc19',\n 'oden':'\\ud83c\\udf62',\n 'office':'\\ud83c\\udfe2',\n 'oil_drum':'\\ud83d\\udee2',\n 'ok':'\\ud83c\\udd97',\n 'ok_hand':'\\ud83d\\udc4c',\n 'ok_man':'\\ud83d\\ude46‍\\u2642\\ufe0f',\n 'ok_woman':'\\ud83d\\ude46',\n 'old_key':'\\ud83d\\udddd',\n 'older_man':'\\ud83d\\udc74',\n 'older_woman':'\\ud83d\\udc75',\n 'om':'\\ud83d\\udd49',\n 'on':'\\ud83d\\udd1b',\n 'oncoming_automobile':'\\ud83d\\ude98',\n 'oncoming_bus':'\\ud83d\\ude8d',\n 'oncoming_police_car':'\\ud83d\\ude94',\n 'oncoming_taxi':'\\ud83d\\ude96',\n 'open_file_folder':'\\ud83d\\udcc2',\n 'open_hands':'\\ud83d\\udc50',\n 'open_mouth':'\\ud83d\\ude2e',\n 'open_umbrella':'\\u2602\\ufe0f',\n 'ophiuchus':'\\u26ce',\n 'orange_book':'\\ud83d\\udcd9',\n 'orthodox_cross':'\\u2626\\ufe0f',\n 'outbox_tray':'\\ud83d\\udce4',\n 'owl':'\\ud83e\\udd89',\n 'ox':'\\ud83d\\udc02',\n 'package':'\\ud83d\\udce6',\n 'page_facing_up':'\\ud83d\\udcc4',\n 'page_with_curl':'\\ud83d\\udcc3',\n 'pager':'\\ud83d\\udcdf',\n 'paintbrush':'\\ud83d\\udd8c',\n 'palm_tree':'\\ud83c\\udf34',\n 'pancakes':'\\ud83e\\udd5e',\n 'panda_face':'\\ud83d\\udc3c',\n 'paperclip':'\\ud83d\\udcce',\n 'paperclips':'\\ud83d\\udd87',\n 'parasol_on_ground':'\\u26f1',\n 'parking':'\\ud83c\\udd7f\\ufe0f',\n 'part_alternation_mark':'\\u303d\\ufe0f',\n 'partly_sunny':'\\u26c5\\ufe0f',\n 'passenger_ship':'\\ud83d\\udef3',\n 'passport_control':'\\ud83d\\udec2',\n 'pause_button':'\\u23f8',\n 'peace_symbol':'\\u262e\\ufe0f',\n 'peach':'\\ud83c\\udf51',\n 'peanuts':'\\ud83e\\udd5c',\n 'pear':'\\ud83c\\udf50',\n 'pen':'\\ud83d\\udd8a',\n 'pencil2':'\\u270f\\ufe0f',\n 'penguin':'\\ud83d\\udc27',\n 'pensive':'\\ud83d\\ude14',\n 'performing_arts':'\\ud83c\\udfad',\n 'persevere':'\\ud83d\\ude23',\n 'person_fencing':'\\ud83e\\udd3a',\n 'pouting_woman':'\\ud83d\\ude4e',\n 'phone':'\\u260e\\ufe0f',\n 'pick':'\\u26cf',\n 'pig':'\\ud83d\\udc37',\n 'pig2':'\\ud83d\\udc16',\n 'pig_nose':'\\ud83d\\udc3d',\n 'pill':'\\ud83d\\udc8a',\n 'pineapple':'\\ud83c\\udf4d',\n 'ping_pong':'\\ud83c\\udfd3',\n 'pisces':'\\u2653\\ufe0f',\n 'pizza':'\\ud83c\\udf55',\n 'place_of_worship':'\\ud83d\\uded0',\n 'plate_with_cutlery':'\\ud83c\\udf7d',\n 'play_or_pause_button':'\\u23ef',\n 'point_down':'\\ud83d\\udc47',\n 'point_left':'\\ud83d\\udc48',\n 'point_right':'\\ud83d\\udc49',\n 'point_up':'\\u261d\\ufe0f',\n 'point_up_2':'\\ud83d\\udc46',\n 'police_car':'\\ud83d\\ude93',\n 'policewoman':'\\ud83d\\udc6e‍\\u2640\\ufe0f',\n 'poodle':'\\ud83d\\udc29',\n 'popcorn':'\\ud83c\\udf7f',\n 'post_office':'\\ud83c\\udfe3',\n 'postal_horn':'\\ud83d\\udcef',\n 'postbox':'\\ud83d\\udcee',\n 'potable_water':'\\ud83d\\udeb0',\n 'potato':'\\ud83e\\udd54',\n 'pouch':'\\ud83d\\udc5d',\n 'poultry_leg':'\\ud83c\\udf57',\n 'pound':'\\ud83d\\udcb7',\n 'rage':'\\ud83d\\ude21',\n 'pouting_cat':'\\ud83d\\ude3e',\n 'pouting_man':'\\ud83d\\ude4e‍\\u2642\\ufe0f',\n 'pray':'\\ud83d\\ude4f',\n 'prayer_beads':'\\ud83d\\udcff',\n 'pregnant_woman':'\\ud83e\\udd30',\n 'previous_track_button':'\\u23ee',\n 'prince':'\\ud83e\\udd34',\n 'princess':'\\ud83d\\udc78',\n 'printer':'\\ud83d\\udda8',\n 'purple_heart':'\\ud83d\\udc9c',\n 'purse':'\\ud83d\\udc5b',\n 'pushpin':'\\ud83d\\udccc',\n 'put_litter_in_its_place':'\\ud83d\\udeae',\n 'question':'\\u2753',\n 'rabbit':'\\ud83d\\udc30',\n 'rabbit2':'\\ud83d\\udc07',\n 'racehorse':'\\ud83d\\udc0e',\n 'racing_car':'\\ud83c\\udfce',\n 'radio':'\\ud83d\\udcfb',\n 'radio_button':'\\ud83d\\udd18',\n 'radioactive':'\\u2622\\ufe0f',\n 'railway_car':'\\ud83d\\ude83',\n 'railway_track':'\\ud83d\\udee4',\n 'rainbow':'\\ud83c\\udf08',\n 'rainbow_flag':'\\ud83c\\udff3\\ufe0f‍\\ud83c\\udf08',\n 'raised_back_of_hand':'\\ud83e\\udd1a',\n 'raised_hand_with_fingers_splayed':'\\ud83d\\udd90',\n 'raised_hands':'\\ud83d\\ude4c',\n 'raising_hand_woman':'\\ud83d\\ude4b',\n 'raising_hand_man':'\\ud83d\\ude4b‍\\u2642\\ufe0f',\n 'ram':'\\ud83d\\udc0f',\n 'ramen':'\\ud83c\\udf5c',\n 'rat':'\\ud83d\\udc00',\n 'record_button':'\\u23fa',\n 'recycle':'\\u267b\\ufe0f',\n 'red_circle':'\\ud83d\\udd34',\n 'registered':'\\u00ae\\ufe0f',\n 'relaxed':'\\u263a\\ufe0f',\n 'relieved':'\\ud83d\\ude0c',\n 'reminder_ribbon':'\\ud83c\\udf97',\n 'repeat':'\\ud83d\\udd01',\n 'repeat_one':'\\ud83d\\udd02',\n 'rescue_worker_helmet':'\\u26d1',\n 'restroom':'\\ud83d\\udebb',\n 'revolving_hearts':'\\ud83d\\udc9e',\n 'rewind':'\\u23ea',\n 'rhinoceros':'\\ud83e\\udd8f',\n 'ribbon':'\\ud83c\\udf80',\n 'rice':'\\ud83c\\udf5a',\n 'rice_ball':'\\ud83c\\udf59',\n 'rice_cracker':'\\ud83c\\udf58',\n 'rice_scene':'\\ud83c\\udf91',\n 'right_anger_bubble':'\\ud83d\\uddef',\n 'ring':'\\ud83d\\udc8d',\n 'robot':'\\ud83e\\udd16',\n 'rocket':'\\ud83d\\ude80',\n 'rofl':'\\ud83e\\udd23',\n 'roll_eyes':'\\ud83d\\ude44',\n 'roller_coaster':'\\ud83c\\udfa2',\n 'rooster':'\\ud83d\\udc13',\n 'rose':'\\ud83c\\udf39',\n 'rosette':'\\ud83c\\udff5',\n 'rotating_light':'\\ud83d\\udea8',\n 'round_pushpin':'\\ud83d\\udccd',\n 'rowing_man':'\\ud83d\\udea3',\n 'rowing_woman':'\\ud83d\\udea3‍\\u2640\\ufe0f',\n 'rugby_football':'\\ud83c\\udfc9',\n 'running_man':'\\ud83c\\udfc3',\n 'running_shirt_with_sash':'\\ud83c\\udfbd',\n 'running_woman':'\\ud83c\\udfc3‍\\u2640\\ufe0f',\n 'sa':'\\ud83c\\ude02\\ufe0f',\n 'sagittarius':'\\u2650\\ufe0f',\n 'sake':'\\ud83c\\udf76',\n 'sandal':'\\ud83d\\udc61',\n 'santa':'\\ud83c\\udf85',\n 'satellite':'\\ud83d\\udce1',\n 'saxophone':'\\ud83c\\udfb7',\n 'school':'\\ud83c\\udfeb',\n 'school_satchel':'\\ud83c\\udf92',\n 'scissors':'\\u2702\\ufe0f',\n 'scorpion':'\\ud83e\\udd82',\n 'scorpius':'\\u264f\\ufe0f',\n 'scream':'\\ud83d\\ude31',\n 'scream_cat':'\\ud83d\\ude40',\n 'scroll':'\\ud83d\\udcdc',\n 'seat':'\\ud83d\\udcba',\n 'secret':'\\u3299\\ufe0f',\n 'see_no_evil':'\\ud83d\\ude48',\n 'seedling':'\\ud83c\\udf31',\n 'selfie':'\\ud83e\\udd33',\n 'shallow_pan_of_food':'\\ud83e\\udd58',\n 'shamrock':'\\u2618\\ufe0f',\n 'shark':'\\ud83e\\udd88',\n 'shaved_ice':'\\ud83c\\udf67',\n 'sheep':'\\ud83d\\udc11',\n 'shell':'\\ud83d\\udc1a',\n 'shield':'\\ud83d\\udee1',\n 'shinto_shrine':'\\u26e9',\n 'ship':'\\ud83d\\udea2',\n 'shirt':'\\ud83d\\udc55',\n 'shopping':'\\ud83d\\udecd',\n 'shopping_cart':'\\ud83d\\uded2',\n 'shower':'\\ud83d\\udebf',\n 'shrimp':'\\ud83e\\udd90',\n 'signal_strength':'\\ud83d\\udcf6',\n 'six_pointed_star':'\\ud83d\\udd2f',\n 'ski':'\\ud83c\\udfbf',\n 'skier':'\\u26f7',\n 'skull':'\\ud83d\\udc80',\n 'skull_and_crossbones':'\\u2620\\ufe0f',\n 'sleeping':'\\ud83d\\ude34',\n 'sleeping_bed':'\\ud83d\\udecc',\n 'sleepy':'\\ud83d\\ude2a',\n 'slightly_frowning_face':'\\ud83d\\ude41',\n 'slightly_smiling_face':'\\ud83d\\ude42',\n 'slot_machine':'\\ud83c\\udfb0',\n 'small_airplane':'\\ud83d\\udee9',\n 'small_blue_diamond':'\\ud83d\\udd39',\n 'small_orange_diamond':'\\ud83d\\udd38',\n 'small_red_triangle':'\\ud83d\\udd3a',\n 'small_red_triangle_down':'\\ud83d\\udd3b',\n 'smile':'\\ud83d\\ude04',\n 'smile_cat':'\\ud83d\\ude38',\n 'smiley':'\\ud83d\\ude03',\n 'smiley_cat':'\\ud83d\\ude3a',\n 'smiling_imp':'\\ud83d\\ude08',\n 'smirk':'\\ud83d\\ude0f',\n 'smirk_cat':'\\ud83d\\ude3c',\n 'smoking':'\\ud83d\\udeac',\n 'snail':'\\ud83d\\udc0c',\n 'snake':'\\ud83d\\udc0d',\n 'sneezing_face':'\\ud83e\\udd27',\n 'snowboarder':'\\ud83c\\udfc2',\n 'snowflake':'\\u2744\\ufe0f',\n 'snowman':'\\u26c4\\ufe0f',\n 'snowman_with_snow':'\\u2603\\ufe0f',\n 'sob':'\\ud83d\\ude2d',\n 'soccer':'\\u26bd\\ufe0f',\n 'soon':'\\ud83d\\udd1c',\n 'sos':'\\ud83c\\udd98',\n 'sound':'\\ud83d\\udd09',\n 'space_invader':'\\ud83d\\udc7e',\n 'spades':'\\u2660\\ufe0f',\n 'spaghetti':'\\ud83c\\udf5d',\n 'sparkle':'\\u2747\\ufe0f',\n 'sparkler':'\\ud83c\\udf87',\n 'sparkles':'\\u2728',\n 'sparkling_heart':'\\ud83d\\udc96',\n 'speak_no_evil':'\\ud83d\\ude4a',\n 'speaker':'\\ud83d\\udd08',\n 'speaking_head':'\\ud83d\\udde3',\n 'speech_balloon':'\\ud83d\\udcac',\n 'speedboat':'\\ud83d\\udea4',\n 'spider':'\\ud83d\\udd77',\n 'spider_web':'\\ud83d\\udd78',\n 'spiral_calendar':'\\ud83d\\uddd3',\n 'spiral_notepad':'\\ud83d\\uddd2',\n 'spoon':'\\ud83e\\udd44',\n 'squid':'\\ud83e\\udd91',\n 'stadium':'\\ud83c\\udfdf',\n 'star':'\\u2b50\\ufe0f',\n 'star2':'\\ud83c\\udf1f',\n 'star_and_crescent':'\\u262a\\ufe0f',\n 'star_of_david':'\\u2721\\ufe0f',\n 'stars':'\\ud83c\\udf20',\n 'station':'\\ud83d\\ude89',\n 'statue_of_liberty':'\\ud83d\\uddfd',\n 'steam_locomotive':'\\ud83d\\ude82',\n 'stew':'\\ud83c\\udf72',\n 'stop_button':'\\u23f9',\n 'stop_sign':'\\ud83d\\uded1',\n 'stopwatch':'\\u23f1',\n 'straight_ruler':'\\ud83d\\udccf',\n 'strawberry':'\\ud83c\\udf53',\n 'stuck_out_tongue':'\\ud83d\\ude1b',\n 'stuck_out_tongue_closed_eyes':'\\ud83d\\ude1d',\n 'stuck_out_tongue_winking_eye':'\\ud83d\\ude1c',\n 'studio_microphone':'\\ud83c\\udf99',\n 'stuffed_flatbread':'\\ud83e\\udd59',\n 'sun_behind_large_cloud':'\\ud83c\\udf25',\n 'sun_behind_rain_cloud':'\\ud83c\\udf26',\n 'sun_behind_small_cloud':'\\ud83c\\udf24',\n 'sun_with_face':'\\ud83c\\udf1e',\n 'sunflower':'\\ud83c\\udf3b',\n 'sunglasses':'\\ud83d\\ude0e',\n 'sunny':'\\u2600\\ufe0f',\n 'sunrise':'\\ud83c\\udf05',\n 'sunrise_over_mountains':'\\ud83c\\udf04',\n 'surfing_man':'\\ud83c\\udfc4',\n 'surfing_woman':'\\ud83c\\udfc4‍\\u2640\\ufe0f',\n 'sushi':'\\ud83c\\udf63',\n 'suspension_railway':'\\ud83d\\ude9f',\n 'sweat':'\\ud83d\\ude13',\n 'sweat_drops':'\\ud83d\\udca6',\n 'sweat_smile':'\\ud83d\\ude05',\n 'sweet_potato':'\\ud83c\\udf60',\n 'swimming_man':'\\ud83c\\udfca',\n 'swimming_woman':'\\ud83c\\udfca‍\\u2640\\ufe0f',\n 'symbols':'\\ud83d\\udd23',\n 'synagogue':'\\ud83d\\udd4d',\n 'syringe':'\\ud83d\\udc89',\n 'taco':'\\ud83c\\udf2e',\n 'tada':'\\ud83c\\udf89',\n 'tanabata_tree':'\\ud83c\\udf8b',\n 'taurus':'\\u2649\\ufe0f',\n 'taxi':'\\ud83d\\ude95',\n 'tea':'\\ud83c\\udf75',\n 'telephone_receiver':'\\ud83d\\udcde',\n 'telescope':'\\ud83d\\udd2d',\n 'tennis':'\\ud83c\\udfbe',\n 'tent':'\\u26fa\\ufe0f',\n 'thermometer':'\\ud83c\\udf21',\n 'thinking':'\\ud83e\\udd14',\n 'thought_balloon':'\\ud83d\\udcad',\n 'ticket':'\\ud83c\\udfab',\n 'tickets':'\\ud83c\\udf9f',\n 'tiger':'\\ud83d\\udc2f',\n 'tiger2':'\\ud83d\\udc05',\n 'timer_clock':'\\u23f2',\n 'tipping_hand_man':'\\ud83d\\udc81‍\\u2642\\ufe0f',\n 'tired_face':'\\ud83d\\ude2b',\n 'tm':'\\u2122\\ufe0f',\n 'toilet':'\\ud83d\\udebd',\n 'tokyo_tower':'\\ud83d\\uddfc',\n 'tomato':'\\ud83c\\udf45',\n 'tongue':'\\ud83d\\udc45',\n 'top':'\\ud83d\\udd1d',\n 'tophat':'\\ud83c\\udfa9',\n 'tornado':'\\ud83c\\udf2a',\n 'trackball':'\\ud83d\\uddb2',\n 'tractor':'\\ud83d\\ude9c',\n 'traffic_light':'\\ud83d\\udea5',\n 'train':'\\ud83d\\ude8b',\n 'train2':'\\ud83d\\ude86',\n 'tram':'\\ud83d\\ude8a',\n 'triangular_flag_on_post':'\\ud83d\\udea9',\n 'triangular_ruler':'\\ud83d\\udcd0',\n 'trident':'\\ud83d\\udd31',\n 'triumph':'\\ud83d\\ude24',\n 'trolleybus':'\\ud83d\\ude8e',\n 'trophy':'\\ud83c\\udfc6',\n 'tropical_drink':'\\ud83c\\udf79',\n 'tropical_fish':'\\ud83d\\udc20',\n 'truck':'\\ud83d\\ude9a',\n 'trumpet':'\\ud83c\\udfba',\n 'tulip':'\\ud83c\\udf37',\n 'tumbler_glass':'\\ud83e\\udd43',\n 'turkey':'\\ud83e\\udd83',\n 'turtle':'\\ud83d\\udc22',\n 'tv':'\\ud83d\\udcfa',\n 'twisted_rightwards_arrows':'\\ud83d\\udd00',\n 'two_hearts':'\\ud83d\\udc95',\n 'two_men_holding_hands':'\\ud83d\\udc6c',\n 'two_women_holding_hands':'\\ud83d\\udc6d',\n 'u5272':'\\ud83c\\ude39',\n 'u5408':'\\ud83c\\ude34',\n 'u55b6':'\\ud83c\\ude3a',\n 'u6307':'\\ud83c\\ude2f\\ufe0f',\n 'u6708':'\\ud83c\\ude37\\ufe0f',\n 'u6709':'\\ud83c\\ude36',\n 'u6e80':'\\ud83c\\ude35',\n 'u7121':'\\ud83c\\ude1a\\ufe0f',\n 'u7533':'\\ud83c\\ude38',\n 'u7981':'\\ud83c\\ude32',\n 'u7a7a':'\\ud83c\\ude33',\n 'umbrella':'\\u2614\\ufe0f',\n 'unamused':'\\ud83d\\ude12',\n 'underage':'\\ud83d\\udd1e',\n 'unicorn':'\\ud83e\\udd84',\n 'unlock':'\\ud83d\\udd13',\n 'up':'\\ud83c\\udd99',\n 'upside_down_face':'\\ud83d\\ude43',\n 'v':'\\u270c\\ufe0f',\n 'vertical_traffic_light':'\\ud83d\\udea6',\n 'vhs':'\\ud83d\\udcfc',\n 'vibration_mode':'\\ud83d\\udcf3',\n 'video_camera':'\\ud83d\\udcf9',\n 'video_game':'\\ud83c\\udfae',\n 'violin':'\\ud83c\\udfbb',\n 'virgo':'\\u264d\\ufe0f',\n 'volcano':'\\ud83c\\udf0b',\n 'volleyball':'\\ud83c\\udfd0',\n 'vs':'\\ud83c\\udd9a',\n 'vulcan_salute':'\\ud83d\\udd96',\n 'walking_man':'\\ud83d\\udeb6',\n 'walking_woman':'\\ud83d\\udeb6‍\\u2640\\ufe0f',\n 'waning_crescent_moon':'\\ud83c\\udf18',\n 'waning_gibbous_moon':'\\ud83c\\udf16',\n 'warning':'\\u26a0\\ufe0f',\n 'wastebasket':'\\ud83d\\uddd1',\n 'watch':'\\u231a\\ufe0f',\n 'water_buffalo':'\\ud83d\\udc03',\n 'watermelon':'\\ud83c\\udf49',\n 'wave':'\\ud83d\\udc4b',\n 'wavy_dash':'\\u3030\\ufe0f',\n 'waxing_crescent_moon':'\\ud83c\\udf12',\n 'wc':'\\ud83d\\udebe',\n 'weary':'\\ud83d\\ude29',\n 'wedding':'\\ud83d\\udc92',\n 'weight_lifting_man':'\\ud83c\\udfcb\\ufe0f',\n 'weight_lifting_woman':'\\ud83c\\udfcb\\ufe0f‍\\u2640\\ufe0f',\n 'whale':'\\ud83d\\udc33',\n 'whale2':'\\ud83d\\udc0b',\n 'wheel_of_dharma':'\\u2638\\ufe0f',\n 'wheelchair':'\\u267f\\ufe0f',\n 'white_check_mark':'\\u2705',\n 'white_circle':'\\u26aa\\ufe0f',\n 'white_flag':'\\ud83c\\udff3\\ufe0f',\n 'white_flower':'\\ud83d\\udcae',\n 'white_large_square':'\\u2b1c\\ufe0f',\n 'white_medium_small_square':'\\u25fd\\ufe0f',\n 'white_medium_square':'\\u25fb\\ufe0f',\n 'white_small_square':'\\u25ab\\ufe0f',\n 'white_square_button':'\\ud83d\\udd33',\n 'wilted_flower':'\\ud83e\\udd40',\n 'wind_chime':'\\ud83c\\udf90',\n 'wind_face':'\\ud83c\\udf2c',\n 'wine_glass':'\\ud83c\\udf77',\n 'wink':'\\ud83d\\ude09',\n 'wolf':'\\ud83d\\udc3a',\n 'woman':'\\ud83d\\udc69',\n 'woman_artist':'\\ud83d\\udc69‍\\ud83c\\udfa8',\n 'woman_astronaut':'\\ud83d\\udc69‍\\ud83d\\ude80',\n 'woman_cartwheeling':'\\ud83e\\udd38‍\\u2640\\ufe0f',\n 'woman_cook':'\\ud83d\\udc69‍\\ud83c\\udf73',\n 'woman_facepalming':'\\ud83e\\udd26‍\\u2640\\ufe0f',\n 'woman_factory_worker':'\\ud83d\\udc69‍\\ud83c\\udfed',\n 'woman_farmer':'\\ud83d\\udc69‍\\ud83c\\udf3e',\n 'woman_firefighter':'\\ud83d\\udc69‍\\ud83d\\ude92',\n 'woman_health_worker':'\\ud83d\\udc69‍\\u2695\\ufe0f',\n 'woman_judge':'\\ud83d\\udc69‍\\u2696\\ufe0f',\n 'woman_juggling':'\\ud83e\\udd39‍\\u2640\\ufe0f',\n 'woman_mechanic':'\\ud83d\\udc69‍\\ud83d\\udd27',\n 'woman_office_worker':'\\ud83d\\udc69‍\\ud83d\\udcbc',\n 'woman_pilot':'\\ud83d\\udc69‍\\u2708\\ufe0f',\n 'woman_playing_handball':'\\ud83e\\udd3e‍\\u2640\\ufe0f',\n 'woman_playing_water_polo':'\\ud83e\\udd3d‍\\u2640\\ufe0f',\n 'woman_scientist':'\\ud83d\\udc69‍\\ud83d\\udd2c',\n 'woman_shrugging':'\\ud83e\\udd37‍\\u2640\\ufe0f',\n 'woman_singer':'\\ud83d\\udc69‍\\ud83c\\udfa4',\n 'woman_student':'\\ud83d\\udc69‍\\ud83c\\udf93',\n 'woman_teacher':'\\ud83d\\udc69‍\\ud83c\\udfeb',\n 'woman_technologist':'\\ud83d\\udc69‍\\ud83d\\udcbb',\n 'woman_with_turban':'\\ud83d\\udc73‍\\u2640\\ufe0f',\n 'womans_clothes':'\\ud83d\\udc5a',\n 'womans_hat':'\\ud83d\\udc52',\n 'women_wrestling':'\\ud83e\\udd3c‍\\u2640\\ufe0f',\n 'womens':'\\ud83d\\udeba',\n 'world_map':'\\ud83d\\uddfa',\n 'worried':'\\ud83d\\ude1f',\n 'wrench':'\\ud83d\\udd27',\n 'writing_hand':'\\u270d\\ufe0f',\n 'x':'\\u274c',\n 'yellow_heart':'\\ud83d\\udc9b',\n 'yen':'\\ud83d\\udcb4',\n 'yin_yang':'\\u262f\\ufe0f',\n 'yum':'\\ud83d\\ude0b',\n 'zap':'\\u26a1\\ufe0f',\n 'zipper_mouth_face':'\\ud83e\\udd10',\n 'zzz':'\\ud83d\\udca4',\n\n /* special emojis :P */\n 'octocat': '<img alt=\":octocat:\" height=\"20\" width=\"20\" align=\"absmiddle\" src=\"https://assets-cdn.github.com/images/icons/emoji/octocat.png\">',\n 'showdown': '<span style=\"font-family: \\'Anonymous Pro\\', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>'\n};\n\r\n/**\n * Created by Estevao on 31-05-2015.\n */\n\n/**\n * Showdown Converter class\n * @class\n * @param {object} [converterOptions]\n * @returns {Converter}\n */\nshowdown.Converter = function (converterOptions) {\n 'use strict';\n\n var\n /**\n * Options used by this converter\n * @private\n * @type {{}}\n */\n options = {},\n\n /**\n * Language extensions used by this converter\n * @private\n * @type {Array}\n */\n langExtensions = [],\n\n /**\n * Output modifiers extensions used by this converter\n * @private\n * @type {Array}\n */\n outputModifiers = [],\n\n /**\n * Event listeners\n * @private\n * @type {{}}\n */\n listeners = {},\n\n /**\n * The flavor set in this converter\n */\n setConvFlavor = setFlavor,\n\n /**\n * Metadata of the document\n * @type {{parsed: {}, raw: string, format: string}}\n */\n metadata = {\n parsed: {},\n raw: '',\n format: ''\n };\n\n _constructor();\n\n /**\n * Converter constructor\n * @private\n */\n function _constructor () {\n converterOptions = converterOptions || {};\n\n for (var gOpt in globalOptions) {\n if (globalOptions.hasOwnProperty(gOpt)) {\n options[gOpt] = globalOptions[gOpt];\n }\n }\n\n // Merge options\n if (typeof converterOptions === 'object') {\n for (var opt in converterOptions) {\n if (converterOptions.hasOwnProperty(opt)) {\n options[opt] = converterOptions[opt];\n }\n }\n } else {\n throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions +\n ' was passed instead.');\n }\n\n if (options.extensions) {\n showdown.helper.forEach(options.extensions, _parseExtension);\n }\n }\n\n /**\n * Parse extension\n * @param {*} ext\n * @param {string} [name='']\n * @private\n */\n function _parseExtension (ext, name) {\n\n name = name || null;\n // If it's a string, the extension was previously loaded\n if (showdown.helper.isString(ext)) {\n ext = showdown.helper.stdExtName(ext);\n name = ext;\n\n // LEGACY_SUPPORT CODE\n if (showdown.extensions[ext]) {\n console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' +\n 'Please inform the developer that the extension should be updated!');\n legacyExtensionLoading(showdown.extensions[ext], ext);\n return;\n // END LEGACY SUPPORT CODE\n\n } else if (!showdown.helper.isUndefined(extensions[ext])) {\n ext = extensions[ext];\n\n } else {\n throw Error('Extension \"' + ext + '\" could not be loaded. It was either not found or is not a valid extension.');\n }\n }\n\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var validExt = validate(ext, name);\n if (!validExt.valid) {\n throw Error(validExt.error);\n }\n\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n\n case 'lang':\n langExtensions.push(ext[i]);\n break;\n\n case 'output':\n outputModifiers.push(ext[i]);\n break;\n }\n if (ext[i].hasOwnProperty('listeners')) {\n for (var ln in ext[i].listeners) {\n if (ext[i].listeners.hasOwnProperty(ln)) {\n listen(ln, ext[i].listeners[ln]);\n }\n }\n }\n }\n\n }\n\n /**\n * LEGACY_SUPPORT\n * @param {*} ext\n * @param {string} name\n */\n function legacyExtensionLoading (ext, name) {\n if (typeof ext === 'function') {\n ext = ext(new showdown.Converter());\n }\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n var valid = validate(ext, name);\n\n if (!valid.valid) {\n throw Error(valid.error);\n }\n\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'lang':\n langExtensions.push(ext[i]);\n break;\n case 'output':\n outputModifiers.push(ext[i]);\n break;\n default:// should never reach here\n throw Error('Extension loader error: Type unrecognized!!!');\n }\n }\n }\n\n /**\n * Listen to an event\n * @param {string} name\n * @param {function} callback\n */\n function listen (name, callback) {\n if (!showdown.helper.isString(name)) {\n throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given');\n }\n\n if (typeof callback !== 'function') {\n throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given');\n }\n\n if (!listeners.hasOwnProperty(name)) {\n listeners[name] = [];\n }\n listeners[name].push(callback);\n }\n\n function rTrimInputText (text) {\n var rsp = text.match(/^\\s*/)[0].length,\n rgx = new RegExp('^\\\\s{0,' + rsp + '}', 'gm');\n return text.replace(rgx, '');\n }\n\n /**\n * Dispatch an event\n * @private\n * @param {string} evtName Event name\n * @param {string} text Text\n * @param {{}} options Converter Options\n * @param {{}} globals\n * @returns {string}\n */\n this._dispatch = function dispatch (evtName, text, options, globals) {\n if (listeners.hasOwnProperty(evtName)) {\n for (var ei = 0; ei < listeners[evtName].length; ++ei) {\n var nText = listeners[evtName][ei](evtName, text, this, options, globals);\n if (nText && typeof nText !== 'undefined') {\n text = nText;\n }\n }\n }\n return text;\n };\n\n /**\n * Listen to an event\n * @param {string} name\n * @param {function} callback\n * @returns {showdown.Converter}\n */\n this.listen = function (name, callback) {\n listen(name, callback);\n return this;\n };\n\n /**\n * Converts a markdown string into HTML\n * @param {string} text\n * @returns {*}\n */\n this.makeHtml = function (text) {\n //check if text is not falsy\n if (!text) {\n return text;\n }\n\n var globals = {\n gHtmlBlocks: [],\n gHtmlMdBlocks: [],\n gHtmlSpans: [],\n gUrls: {},\n gTitles: {},\n gDimensions: {},\n gListLevel: 0,\n hashLinkCounts: {},\n langExtensions: langExtensions,\n outputModifiers: outputModifiers,\n converter: this,\n ghCodeBlocks: [],\n metadata: {\n parsed: {},\n raw: '',\n format: ''\n }\n };\n\n // This lets us use ¨ trema as an escape char to avoid md5 hashes\n // The choice of character is arbitrary; anything that isn't\n // magic in Markdown will work.\n text = text.replace(/¨/g, '¨T');\n\n // Replace $ with ¨D\n // RegExp interprets $ as a special character\n // when it's in a replacement string\n text = text.replace(/\\$/g, '¨D');\n\n // Standardize line endings\n text = text.replace(/\\r\\n/g, '\\n'); // DOS to Unix\n text = text.replace(/\\r/g, '\\n'); // Mac to Unix\n\n // Stardardize line spaces\n text = text.replace(/\\u00A0/g, ' ');\n\n if (options.smartIndentationFix) {\n text = rTrimInputText(text);\n }\n\n // Make sure text begins and ends with a couple of newlines:\n text = '\\n\\n' + text + '\\n\\n';\n\n // detab\n text = showdown.subParser('detab')(text, options, globals);\n\n /**\n * Strip any lines consisting only of spaces and tabs.\n * This makes subsequent regexs easier to write, because we can\n * match consecutive blank lines with /\\n+/ instead of something\n * contorted like /[ \\t]*\\n+/\n */\n text = text.replace(/^[ \\t]+$/mg, '');\n\n //run languageExtensions\n showdown.helper.forEach(langExtensions, function (ext) {\n text = showdown.subParser('runExtension')(ext, text, options, globals);\n });\n\n // run the sub parsers\n text = showdown.subParser('metadata')(text, options, globals);\n text = showdown.subParser('hashPreCodeTags')(text, options, globals);\n text = showdown.subParser('githubCodeBlocks')(text, options, globals);\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('hashCodeTags')(text, options, globals);\n text = showdown.subParser('stripLinkDefinitions')(text, options, globals);\n text = showdown.subParser('blockGamut')(text, options, globals);\n text = showdown.subParser('unhashHTMLSpans')(text, options, globals);\n text = showdown.subParser('unescapeSpecialChars')(text, options, globals);\n\n // attacklab: Restore dollar signs\n text = text.replace(/¨D/g, '$$');\n\n // attacklab: Restore tremas\n text = text.replace(/¨T/g, '¨');\n\n // render a complete html document instead of a partial if the option is enabled\n text = showdown.subParser('completeHTMLDocument')(text, options, globals);\n\n // Run output modifiers\n showdown.helper.forEach(outputModifiers, function (ext) {\n text = showdown.subParser('runExtension')(ext, text, options, globals);\n });\n\n // update metadata\n metadata = globals.metadata;\n return text;\n };\n\n /**\n * Converts an HTML string into a markdown string\n * @param src\n * @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used.\n * @returns {string}\n */\n this.makeMarkdown = this.makeMd = function (src, HTMLParser) {\n\n // replace \\r\\n with \\n\n src = src.replace(/\\r\\n/g, '\\n');\n src = src.replace(/\\r/g, '\\n'); // old macs\n\n // due to an edge case, we need to find this: > <\n // to prevent removing of non silent white spaces\n // ex: <em>this is</em> <strong>sparta</strong>\n src = src.replace(/>[ \\t]+</, '>¨NBSP;<');\n\n if (!HTMLParser) {\n if (window && window.document) {\n HTMLParser = window.document;\n } else {\n throw new Error('HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM');\n }\n }\n\n var doc = HTMLParser.createElement('div');\n doc.innerHTML = src;\n\n var globals = {\n preList: substitutePreCodeTags(doc)\n };\n\n // remove all newlines and collapse spaces\n clean(doc);\n\n // some stuff, like accidental reference links must now be escaped\n // TODO\n // doc.innerHTML = doc.innerHTML.replace(/\\[[\\S\\t ]]/);\n\n var nodes = doc.childNodes,\n mdDoc = '';\n\n for (var i = 0; i < nodes.length; i++) {\n mdDoc += showdown.subParser('makeMarkdown.node')(nodes[i], globals);\n }\n\n function clean (node) {\n for (var n = 0; n < node.childNodes.length; ++n) {\n var child = node.childNodes[n];\n if (child.nodeType === 3) {\n if (!/\\S/.test(child.nodeValue)) {\n node.removeChild(child);\n --n;\n } else {\n child.nodeValue = child.nodeValue.split('\\n').join(' ');\n child.nodeValue = child.nodeValue.replace(/(\\s)+/g, '$1');\n }\n } else if (child.nodeType === 1) {\n clean(child);\n }\n }\n }\n\n // find all pre tags and replace contents with placeholder\n // we need this so that we can remove all indentation from html\n // to ease up parsing\n function substitutePreCodeTags (doc) {\n\n var pres = doc.querySelectorAll('pre'),\n presPH = [];\n\n for (var i = 0; i < pres.length; ++i) {\n\n if (pres[i].childElementCount === 1 && pres[i].firstChild.tagName.toLowerCase() === 'code') {\n var content = pres[i].firstChild.innerHTML.trim(),\n language = pres[i].firstChild.getAttribute('data-language') || '';\n\n // if data-language attribute is not defined, then we look for class language-*\n if (language === '') {\n var classes = pres[i].firstChild.className.split(' ');\n for (var c = 0; c < classes.length; ++c) {\n var matches = classes[c].match(/^language-(.+)$/);\n if (matches !== null) {\n language = matches[1];\n break;\n }\n }\n }\n\n // unescape html entities in content\n content = showdown.helper.unescapeHTMLEntities(content);\n\n presPH.push(content);\n pres[i].outerHTML = '<precode language=\"' + language + '\" precodenum=\"' + i.toString() + '\"></precode>';\n } else {\n presPH.push(pres[i].innerHTML);\n pres[i].innerHTML = '';\n pres[i].setAttribute('prenum', i.toString());\n }\n }\n return presPH;\n }\n\n return mdDoc;\n };\n\n /**\n * Set an option of this Converter instance\n * @param {string} key\n * @param {*} value\n */\n this.setOption = function (key, value) {\n options[key] = value;\n };\n\n /**\n * Get the option of this Converter instance\n * @param {string} key\n * @returns {*}\n */\n this.getOption = function (key) {\n return options[key];\n };\n\n /**\n * Get the options of this Converter instance\n * @returns {{}}\n */\n this.getOptions = function () {\n return options;\n };\n\n /**\n * Add extension to THIS converter\n * @param {{}} extension\n * @param {string} [name=null]\n */\n this.addExtension = function (extension, name) {\n name = name || null;\n _parseExtension(extension, name);\n };\n\n /**\n * Use a global registered extension with THIS converter\n * @param {string} extensionName Name of the previously registered extension\n */\n this.useExtension = function (extensionName) {\n _parseExtension(extensionName);\n };\n\n /**\n * Set the flavor THIS converter should use\n * @param {string} name\n */\n this.setFlavor = function (name) {\n if (!flavor.hasOwnProperty(name)) {\n throw Error(name + ' flavor was not found');\n }\n var preset = flavor[name];\n setConvFlavor = name;\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n options[option] = preset[option];\n }\n }\n };\n\n /**\n * Get the currently set flavor of this converter\n * @returns {string}\n */\n this.getFlavor = function () {\n return setConvFlavor;\n };\n\n /**\n * Remove an extension from THIS converter.\n * Note: This is a costly operation. It's better to initialize a new converter\n * and specify the extensions you wish to use\n * @param {Array} extension\n */\n this.removeExtension = function (extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n for (var a = 0; a < extension.length; ++a) {\n var ext = extension[a];\n for (var i = 0; i < langExtensions.length; ++i) {\n if (langExtensions[i] === ext) {\n langExtensions[i].splice(i, 1);\n }\n }\n for (var ii = 0; ii < outputModifiers.length; ++i) {\n if (outputModifiers[ii] === ext) {\n outputModifiers[ii].splice(i, 1);\n }\n }\n }\n };\n\n /**\n * Get all extension of THIS converter\n * @returns {{language: Array, output: Array}}\n */\n this.getAllExtensions = function () {\n return {\n language: langExtensions,\n output: outputModifiers\n };\n };\n\n /**\n * Get the metadata of the previously parsed document\n * @param raw\n * @returns {string|{}}\n */\n this.getMetadata = function (raw) {\n if (raw) {\n return metadata.raw;\n } else {\n return metadata.parsed;\n }\n };\n\n /**\n * Get the metadata format of the previously parsed document\n * @returns {string}\n */\n this.getMetadataFormat = function () {\n return metadata.format;\n };\n\n /**\n * Private: set a single key, value metadata pair\n * @param {string} key\n * @param {string} value\n */\n this._setMetadataPair = function (key, value) {\n metadata.parsed[key] = value;\n };\n\n /**\n * Private: set metadata format\n * @param {string} format\n */\n this._setMetadataFormat = function (format) {\n metadata.format = format;\n };\n\n /**\n * Private: set metadata raw text\n * @param {string} raw\n */\n this._setMetadataRaw = function (raw) {\n metadata.raw = raw;\n };\n};\n\r\n/**\n * Turn Markdown link shortcuts into XHTML <a> tags.\n */\nshowdown.subParser('anchors', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('anchors.before', text, options, globals);\n\n var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) {\n if (showdown.helper.isUndefined(title)) {\n title = '';\n }\n linkId = linkId.toLowerCase();\n\n // Special case for explicit empty url\n if (wholeMatch.search(/\\(<?\\s*>? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n } else if (!url) {\n if (!linkId) {\n // lower-case and turn embedded newlines into spaces\n linkId = linkText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {\n url = globals.gUrls[linkId];\n if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {\n title = globals.gTitles[linkId];\n }\n } else {\n return wholeMatch;\n }\n }\n\n //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n\n var result = '<a href=\"' + url + '\"';\n\n if (title !== '' && title !== null) {\n title = title.replace(/\"/g, '"');\n //title = showdown.helper.escapeCharacters(title, '*_', false); // replaced line to improve performance\n title = title.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n result += ' title=\"' + title + '\"';\n }\n\n // optionLinksInNewWindow only applies\n // to external links. Hash links (#) open in same page\n if (options.openLinksInNewWindow && !/^#/.test(url)) {\n // escaped _\n result += ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n\n result += '>' + linkText + '</a>';\n\n return result;\n };\n\n // First, handle reference-style links: [link text] [id]\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)] ?(?:\\n *)?\\[(.*?)]()()()()/g, writeAnchorTag);\n\n // Next, inline-style links: [link text](url \"optional title\")\n // cases with crazy urls like ./image/cat1).png\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<([^>]*)>(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n writeAnchorTag);\n\n // normal cases\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<?([\\S]+?(?:\\([\\S]*?\\)[\\S]*?)?)>?(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n writeAnchorTag);\n\n // handle reference-style shortcuts: [link text]\n // These must come last in case you've also got [link test][1]\n // or [link test](/foo)\n text = text.replace(/\\[([^\\[\\]]+)]()()()()()/g, writeAnchorTag);\n\n // Lastly handle GithubMentions if option is enabled\n if (options.ghMentions) {\n text = text.replace(/(^|\\s)(\\\\)?(@([a-z\\d]+(?:[a-z\\d.-]+?[a-z\\d]+)*))/gmi, function (wm, st, escape, mentions, username) {\n if (escape === '\\\\') {\n return st + mentions;\n }\n\n //check if options.ghMentionsLink is a string\n if (!showdown.helper.isString(options.ghMentionsLink)) {\n throw new Error('ghMentionsLink option must be a string');\n }\n var lnk = options.ghMentionsLink.replace(/\\{u}/g, username),\n target = '';\n if (options.openLinksInNewWindow) {\n target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n return st + '<a href=\"' + lnk + '\"' + target + '>' + mentions + '</a>';\n });\n }\n\n text = globals.converter._dispatch('anchors.after', text, options, globals);\n return text;\n});\n\r\n// url allowed chars [a-z\\d_.~:/?#[]@!$&'()*+,;=-]\n\nvar simpleURLRegex = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+?\\.[^'\">\\s]+?)()(\\1)?(?=\\s|$)(?![\"<>])/gi,\n simpleURLRegex2 = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+\\.[^'\">\\s]+?)([.!?,()\\[\\]])?(\\1)?(?=\\s|$)(?![\"<>])/gi,\n delimUrlRegex = /()<(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+)()>()/gi,\n simpleMailRegex = /(^|\\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(?=$|\\s)/gmi,\n delimMailRegex = /<()(?:mailto:)?([-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi,\n\n replaceLink = function (options) {\n 'use strict';\n return function (wm, leadingMagicChars, link, m2, m3, trailingPunctuation, trailingMagicChars) {\n link = link.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var lnkTxt = link,\n append = '',\n target = '',\n lmc = leadingMagicChars || '',\n tmc = trailingMagicChars || '';\n if (/^www\\./i.test(link)) {\n link = link.replace(/^www\\./i, 'http://www.');\n }\n if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) {\n append = trailingPunctuation;\n }\n if (options.openLinksInNewWindow) {\n target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n return lmc + '<a href=\"' + link + '\"' + target + '>' + lnkTxt + '</a>' + append + tmc;\n };\n },\n\n replaceMail = function (options, globals) {\n 'use strict';\n return function (wholeMatch, b, mail) {\n var href = 'mailto:';\n b = b || '';\n mail = showdown.subParser('unescapeSpecialChars')(mail, options, globals);\n if (options.encodeEmails) {\n href = showdown.helper.encodeEmailAddress(href + mail);\n mail = showdown.helper.encodeEmailAddress(mail);\n } else {\n href = href + mail;\n }\n return b + '<a href=\"' + href + '\">' + mail + '</a>';\n };\n };\n\nshowdown.subParser('autoLinks', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('autoLinks.before', text, options, globals);\n\n text = text.replace(delimUrlRegex, replaceLink(options));\n text = text.replace(delimMailRegex, replaceMail(options, globals));\n\n text = globals.converter._dispatch('autoLinks.after', text, options, globals);\n\n return text;\n});\n\nshowdown.subParser('simplifiedAutoLinks', function (text, options, globals) {\n 'use strict';\n\n if (!options.simplifiedAutoLink) {\n return text;\n }\n\n text = globals.converter._dispatch('simplifiedAutoLinks.before', text, options, globals);\n\n if (options.excludeTrailingPunctuationFromURLs) {\n text = text.replace(simpleURLRegex2, replaceLink(options));\n } else {\n text = text.replace(simpleURLRegex, replaceLink(options));\n }\n text = text.replace(simpleMailRegex, replaceMail(options, globals));\n\n text = globals.converter._dispatch('simplifiedAutoLinks.after', text, options, globals);\n\n return text;\n});\n\r\n/**\n * These are all the transformations that form block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('blockGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockGamut.before', text, options, globals);\n\n // we parse blockquotes first so that we can have headings and hrs\n // inside blockquotes\n text = showdown.subParser('blockQuotes')(text, options, globals);\n text = showdown.subParser('headers')(text, options, globals);\n\n // Do Horizontal Rules:\n text = showdown.subParser('horizontalRule')(text, options, globals);\n\n text = showdown.subParser('lists')(text, options, globals);\n text = showdown.subParser('codeBlocks')(text, options, globals);\n text = showdown.subParser('tables')(text, options, globals);\n\n // We already ran _HashHTMLBlocks() before, in Markdown(), but that\n // was to escape raw HTML in the original Markdown source. This time,\n // we're escaping the markup we've just created, so that we don't wrap\n // <p> tags around block-level tags.\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('paragraphs')(text, options, globals);\n\n text = globals.converter._dispatch('blockGamut.after', text, options, globals);\n\n return text;\n});\n\r\nshowdown.subParser('blockQuotes', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockQuotes.before', text, options, globals);\n\n // add a couple extra lines after the text and endtext mark\n text = text + '\\n\\n';\n\n var rgx = /(^ {0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+/gm;\n\n if (options.splitAdjacentBlockquotes) {\n rgx = /^ {0,3}>[\\s\\S]*?(?:\\n\\n)/gm;\n }\n\n text = text.replace(rgx, function (bq) {\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, ''); // trim one level of quoting\n\n // attacklab: clean up hack\n bq = bq.replace(/¨0/g, '');\n\n bq = bq.replace(/^[ \\t]+$/gm, ''); // trim whitespace-only lines\n bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);\n bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse\n\n bq = bq.replace(/(^|\\n)/g, '$1 ');\n // These leading spaces screw with <pre> content, so we need to fix that:\n bq = bq.replace(/(\\s*<pre>[^\\r]+?<\\/pre>)/gm, function (wholeMatch, m1) {\n var pre = m1;\n // attacklab: hack around Konqueror 3.5.4 bug:\n pre = pre.replace(/^ /mg, '¨0');\n pre = pre.replace(/¨0/g, '');\n return pre;\n });\n\n return showdown.subParser('hashBlock')('<blockquote>\\n' + bq + '\\n</blockquote>', options, globals);\n });\n\n text = globals.converter._dispatch('blockQuotes.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Process Markdown `<pre><code>` blocks.\n */\nshowdown.subParser('codeBlocks', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('codeBlocks.before', text, options, globals);\n\n // sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n text += '¨0';\n\n var pattern = /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=¨0))/g;\n text = text.replace(pattern, function (wholeMatch, m1, m2) {\n var codeblock = m1,\n nextChar = m2,\n end = '\\n';\n\n codeblock = showdown.subParser('outdent')(codeblock, options, globals);\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing newlines\n\n if (options.omitExtraWLInCodeBlocks) {\n end = '';\n }\n\n codeblock = '<pre><code>' + codeblock + end + '</code></pre>';\n\n return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;\n });\n\n // strip sentinel\n text = text.replace(/¨0/, '');\n\n text = globals.converter._dispatch('codeBlocks.after', text, options, globals);\n return text;\n});\n\r\n/**\n *\n * * Backtick quotes are used for <code></code> spans.\n *\n * * You can use multiple backticks as the delimiters if you want to\n * include literal backticks in the code span. So, this input:\n *\n * Just type ``foo `bar` baz`` at the prompt.\n *\n * Will translate to:\n *\n * <p>Just type <code>foo `bar` baz</code> at the prompt.</p>\n *\n * There's no arbitrary limit to the number of backticks you\n * can use as delimters. If you need three consecutive backticks\n * in your code, use four for delimiters, etc.\n *\n * * You can use spaces to get literal backticks at the edges:\n *\n * ... type `` `bar` `` ...\n *\n * Turns to:\n *\n * ... type <code>`bar`</code> ...\n */\nshowdown.subParser('codeSpans', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('codeSpans.before', text, options, globals);\n\n if (typeof text === 'undefined') {\n text = '';\n }\n text = text.replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,\n function (wholeMatch, m1, m2, m3) {\n var c = m3;\n c = c.replace(/^([ \\t]*)/g, '');\t// leading whitespace\n c = c.replace(/[ \\t]*$/g, '');\t// trailing whitespace\n c = showdown.subParser('encodeCode')(c, options, globals);\n c = m1 + '<code>' + c + '</code>';\n c = showdown.subParser('hashHTMLSpans')(c, options, globals);\n return c;\n }\n );\n\n text = globals.converter._dispatch('codeSpans.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Create a full HTML document from the processed markdown\n */\nshowdown.subParser('completeHTMLDocument', function (text, options, globals) {\n 'use strict';\n\n if (!options.completeHTMLDocument) {\n return text;\n }\n\n text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);\n\n var doctype = 'html',\n doctypeParsed = '<!DOCTYPE HTML>\\n',\n title = '',\n charset = '<meta charset=\"utf-8\">\\n',\n lang = '',\n metadata = '';\n\n if (typeof globals.metadata.parsed.doctype !== 'undefined') {\n doctypeParsed = '<!DOCTYPE ' + globals.metadata.parsed.doctype + '>\\n';\n doctype = globals.metadata.parsed.doctype.toString().toLowerCase();\n if (doctype === 'html' || doctype === 'html5') {\n charset = '<meta charset=\"utf-8\">';\n }\n }\n\n for (var meta in globals.metadata.parsed) {\n if (globals.metadata.parsed.hasOwnProperty(meta)) {\n switch (meta.toLowerCase()) {\n case 'doctype':\n break;\n\n case 'title':\n title = '<title>' + globals.metadata.parsed.title + '\\n';\n break;\n\n case 'charset':\n if (doctype === 'html' || doctype === 'html5') {\n charset = '\\n';\n } else {\n charset = '\\n';\n }\n break;\n\n case 'language':\n case 'lang':\n lang = ' lang=\"' + globals.metadata.parsed[meta] + '\"';\n metadata += '\\n';\n break;\n\n default:\n metadata += '\\n';\n }\n }\n }\n\n text = doctypeParsed + '\\n\\n' + title + charset + metadata + '\\n\\n' + text.trim() + '\\n\\n';\n\n text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Convert all tabs to spaces\n */\nshowdown.subParser('detab', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('detab.before', text, options, globals);\n\n // expand first n-1 tabs\n text = text.replace(/\\t(?=\\t)/g, ' '); // g_tab_width\n\n // replace the nth with two sentinels\n text = text.replace(/\\t/g, '¨A¨B');\n\n // use the sentinel to anchor our regex so it doesn't explode\n text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {\n var leadingText = m1,\n numSpaces = 4 - leadingText.length % 4; // g_tab_width\n\n // there *must* be a better way to do this:\n for (var i = 0; i < numSpaces; i++) {\n leadingText += ' ';\n }\n\n return leadingText;\n });\n\n // clean up sentinels\n text = text.replace(/¨A/g, ' '); // g_tab_width\n text = text.replace(/¨B/g, '');\n\n text = globals.converter._dispatch('detab.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('ellipsis', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('ellipsis.before', text, options, globals);\n\n text = text.replace(/\\.\\.\\./g, '…');\n\n text = globals.converter._dispatch('ellipsis.after', text, options, globals);\n\n return text;\n});\n\r\n/**\n * Turn emoji codes into emojis\n *\n * List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis\n */\nshowdown.subParser('emoji', function (text, options, globals) {\n 'use strict';\n\n if (!options.emoji) {\n return text;\n }\n\n text = globals.converter._dispatch('emoji.before', text, options, globals);\n\n var emojiRgx = /:([\\S]+?):/g;\n\n text = text.replace(emojiRgx, function (wm, emojiCode) {\n if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {\n return showdown.helper.emojis[emojiCode];\n }\n return wm;\n });\n\n text = globals.converter._dispatch('emoji.after', text, options, globals);\n\n return text;\n});\n\r\n/**\n * Smart processing for ampersands and angle brackets that need to be encoded.\n */\nshowdown.subParser('encodeAmpsAndAngles', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals);\n\n // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:\n // http://bumppo.net/projects/amputator/\n text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g, '&');\n\n // Encode naked <'s\n text = text.replace(/<(?![a-z\\/?$!])/gi, '<');\n\n // Encode <\n text = text.replace(/\n text = text.replace(/>/g, '>');\n\n text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Returns the string, with after processing the following backslash escape sequences.\n *\n * attacklab: The polite way to do this is with the new escapeCharacters() function:\n *\n * text = escapeCharacters(text,\"\\\\\",true);\n * text = escapeCharacters(text,\"`*_{}[]()>#+-.!\",true);\n *\n * ...but we're sidestepping its use of the (slow) RegExp constructor\n * as an optimization for Firefox. This function gets called a LOT.\n */\nshowdown.subParser('encodeBackslashEscapes', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals);\n\n text = text.replace(/\\\\(\\\\)/g, showdown.helper.escapeCharactersCallback);\n text = text.replace(/\\\\([`*_{}\\[\\]()>#+.!~=|-])/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Encode/escape certain characters inside Markdown code runs.\n * The point is that in code, these characters are literals,\n * and lose their special Markdown meanings.\n */\nshowdown.subParser('encodeCode', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('encodeCode.before', text, options, globals);\n\n // Encode all ampersands; HTML entities are not\n // entities within a Markdown code span.\n text = text\n .replace(/&/g, '&')\n // Do the angle bracket song and dance:\n .replace(//g, '>')\n // Now, escape characters that are magic in Markdown:\n .replace(/([*_{}\\[\\]\\\\=~-])/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('encodeCode.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Within tags -- meaning between < and > -- encode [\\ ` * _ ~ =] so they\n * don't conflict with their use in Markdown for code, italics and strong.\n */\nshowdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals);\n\n // Build a regex to find HTML tags.\n var tags = /<\\/?[a-z\\d_:-]+(?:[\\s]+[\\s\\S]+?)?>/gi,\n comments = /-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;\n\n text = text.replace(tags, function (wholeMatch) {\n return wholeMatch\n .replace(/(.)<\\/?code>(?=.)/g, '$1`')\n .replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n });\n\n text = text.replace(comments, function (wholeMatch) {\n return wholeMatch\n .replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n });\n\n text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Handle github codeblocks prior to running HashHTML so that\n * HTML contained within the codeblock gets escaped properly\n * Example:\n * ```ruby\n * def hello_world(x)\n * puts \"Hello, #{x}\"\n * end\n * ```\n */\nshowdown.subParser('githubCodeBlocks', function (text, options, globals) {\n 'use strict';\n\n // early exit if option is not enabled\n if (!options.ghCodeBlocks) {\n return text;\n }\n\n text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n text += '¨0';\n\n text = text.replace(/(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g, function (wholeMatch, delim, language, codeblock) {\n var end = (options.omitExtraWLInCodeBlocks) ? '' : '\\n';\n\n // First parse the github code block\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n codeblock = '
' + codeblock + end + '
';\n\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n });\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n\r\nshowdown.subParser('hashBlock', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashBlock.before', text, options, globals);\n text = text.replace(/(^\\n+|\\n+$)/g, '');\n text = '\\n\\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\\n\\n';\n text = globals.converter._dispatch('hashBlock.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Hash and escape elements that should not be parsed as markdown\n */\nshowdown.subParser('hashCodeTags', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);\n\n var repFunc = function (wholeMatch, match, left, right) {\n var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';\n };\n\n // Hash naked \n text = showdown.helper.replaceRecursiveRegExp(text, repFunc, ']*>', '', 'gim');\n\n text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('hashElement', function (text, options, globals) {\n 'use strict';\n\n return function (wholeMatch, m1) {\n var blockText = m1;\n\n // Undo double lines\n blockText = blockText.replace(/\\n\\n/g, '\\n');\n blockText = blockText.replace(/^\\n/, '');\n\n // strip trailing blank lines\n blockText = blockText.replace(/\\n+$/g, '');\n\n // Replace the element text with a marker (\"¨KxK\" where x is its key)\n blockText = '\\n\\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\\n\\n';\n\n return blockText;\n };\n});\n\r\nshowdown.subParser('hashHTMLBlocks', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);\n\n var blockTags = [\n 'pre',\n 'div',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'table',\n 'dl',\n 'ol',\n 'ul',\n 'script',\n 'noscript',\n 'form',\n 'fieldset',\n 'iframe',\n 'math',\n 'style',\n 'section',\n 'header',\n 'footer',\n 'nav',\n 'article',\n 'aside',\n 'address',\n 'audio',\n 'canvas',\n 'figure',\n 'hgroup',\n 'output',\n 'video',\n 'p'\n ],\n repFunc = function (wholeMatch, match, left, right) {\n var txt = wholeMatch;\n // check if this html element is marked as markdown\n // if so, it's contents should be parsed as markdown\n if (left.search(/\\bmarkdown\\b/) !== -1) {\n txt = left + globals.converter.makeHtml(match) + right;\n }\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n };\n\n if (options.backslashEscapesHTMLTags) {\n // encode backslash escaped HTML tags\n text = text.replace(/\\\\<(\\/?[^>]+?)>/g, function (wm, inside) {\n return '<' + inside + '>';\n });\n }\n\n // hash HTML Blocks\n for (var i = 0; i < blockTags.length; ++i) {\n\n var opTagPos,\n rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\\\b[^>]*>)', 'im'),\n patLeft = '<' + blockTags[i] + '\\\\b[^>]*>',\n patRight = '';\n // 1. Look for the first position of the first opening HTML tag in the text\n while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {\n\n // if the HTML tag is \\ escaped, we need to escape it and break\n\n\n //2. Split the text in that position\n var subTexts = showdown.helper.splitAtIndex(text, opTagPos),\n //3. Match recursively\n newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');\n\n // prevent an infinite loop\n if (newSubText1 === subTexts[1]) {\n break;\n }\n text = subTexts[0].concat(newSubText1);\n }\n }\n // HR SPECIAL CASE\n text = text.replace(/(\\n {0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,\n showdown.subParser('hashElement')(text, options, globals));\n\n // Special case for standalone HTML comments\n text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n }, '^ {0,3}', 'gm');\n\n // PHP and ASP-style processor instructions ( and <%...%>)\n text = text.replace(/(?:\\n\\n)( {0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,\n showdown.subParser('hashElement')(text, options, globals));\n\n text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Hash span elements that should not be parsed as markdown\n */\nshowdown.subParser('hashHTMLSpans', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);\n\n function hashHTMLSpan (html) {\n return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';\n }\n\n // Hash Self Closing tags\n text = text.replace(/<[^>]+?\\/>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash tags without properties\n text = text.replace(/<([^>]+?)>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash tags with properties\n text = text.replace(/<([^>]+?)\\s[^>]+?>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash self closing tags without />\n text = text.replace(/<[^>]+?>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n /*showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi');*/\n\n text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);\n return text;\n});\n\n/**\n * Unhash HTML spans\n */\nshowdown.subParser('unhashHTMLSpans', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);\n\n for (var i = 0; i < globals.gHtmlSpans.length; ++i) {\n var repText = globals.gHtmlSpans[i],\n // limiter to prevent infinite loop (assume 10 as limit for recurse)\n limit = 0;\n\n while (/¨C(\\d+)C/.test(repText)) {\n var num = RegExp.$1;\n repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);\n if (limit === 10) {\n console.error('maximum nesting of 10 spans reached!!!');\n break;\n }\n ++limit;\n }\n text = text.replace('¨C' + i + 'C', repText);\n }\n\n text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Hash and escape
 elements that should not be parsed as markdown\n */\nshowdown.subParser('hashPreCodeTags', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);\n\n  var repFunc = function (wholeMatch, match, left, right) {\n    // encode html entities\n    var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n    return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n  };\n\n  // Hash 
\n  text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}]*>\\\\s*]*>', '^ {0,3}\\\\s*
', 'gim');\n\n text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('headers', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('headers.before', text, options, globals);\n\n var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),\n\n // Set text-style headers:\n //\tHeader 1\n //\t========\n //\n //\tHeader 2\n //\t--------\n //\n setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,\n setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm;\n\n text = text.replace(setextRegexH1, function (wholeMatch, m1) {\n\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart,\n hashBlock = '' + spanGamut + '';\n return showdown.subParser('hashBlock')(hashBlock, options, globals);\n });\n\n text = text.replace(setextRegexH2, function (matchFound, m1) {\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart + 1,\n hashBlock = '' + spanGamut + '';\n return showdown.subParser('hashBlock')(hashBlock, options, globals);\n });\n\n // atx-style headers:\n // # Header 1\n // ## Header 2\n // ## Header 2 with closing hashes ##\n // ...\n // ###### Header 6\n //\n var atxStyle = (options.requireSpaceBeforeHeadingText) ? /^(#{1,6})[ \\t]+(.+?)[ \\t]*#*\\n+/gm : /^(#{1,6})[ \\t]*(.+?)[ \\t]*#*\\n+/gm;\n\n text = text.replace(atxStyle, function (wholeMatch, m1, m2) {\n var hText = m2;\n if (options.customizedHeaderId) {\n hText = m2.replace(/\\s?\\{([^{]+?)}\\s*$/, '');\n }\n\n var span = showdown.subParser('spanGamut')(hText, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m2) + '\"',\n hLevel = headerLevelStart - 1 + m1.length,\n header = '' + span + '';\n\n return showdown.subParser('hashBlock')(header, options, globals);\n });\n\n function headerId (m) {\n var title,\n prefix;\n\n // It is separate from other options to allow combining prefix and customized\n if (options.customizedHeaderId) {\n var match = m.match(/\\{([^{]+?)}\\s*$/);\n if (match && match[1]) {\n m = match[1];\n }\n }\n\n title = m;\n\n // Prefix id to prevent causing inadvertent pre-existing style matches.\n if (showdown.helper.isString(options.prefixHeaderId)) {\n prefix = options.prefixHeaderId;\n } else if (options.prefixHeaderId === true) {\n prefix = 'section-';\n } else {\n prefix = '';\n }\n\n if (!options.rawPrefixHeaderId) {\n title = prefix + title;\n }\n\n if (options.ghCompatibleHeaderId) {\n title = title\n .replace(/ /g, '-')\n // replace previously escaped chars (&, ¨ and $)\n .replace(/&/g, '')\n .replace(/¨T/g, '')\n .replace(/¨D/g, '')\n // replace rest of the chars (&~$ are repeated as they might have been escaped)\n // borrowed from github's redcarpet (some they should produce similar results)\n .replace(/[&+$,\\/:;=?@\"#{}|^¨~\\[\\]`\\\\*)(%.!'<>]/g, '')\n .toLowerCase();\n } else if (options.rawHeaderId) {\n title = title\n .replace(/ /g, '-')\n // replace previously escaped chars (&, ¨ and $)\n .replace(/&/g, '&')\n .replace(/¨T/g, '¨')\n .replace(/¨D/g, '$')\n // replace \" and '\n .replace(/[\"']/g, '-')\n .toLowerCase();\n } else {\n title = title\n .replace(/[^\\w]/g, '')\n .toLowerCase();\n }\n\n if (options.rawPrefixHeaderId) {\n title = prefix + title;\n }\n\n if (globals.hashLinkCounts[title]) {\n title = title + '-' + (globals.hashLinkCounts[title]++);\n } else {\n globals.hashLinkCounts[title] = 1;\n }\n return title;\n }\n\n text = globals.converter._dispatch('headers.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Turn Markdown link shortcuts into XHTML
tags.\n */\nshowdown.subParser('horizontalRule', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('horizontalRule.before', text, options, globals);\n\n var key = showdown.subParser('hashBlock')('
', options, globals);\n text = text.replace(/^ {0,2}( ?-){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?\\*){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?_){3,}[ \\t]*$/gm, key);\n\n text = globals.converter._dispatch('horizontalRule.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Turn Markdown image shortcuts into tags.\n */\nshowdown.subParser('images', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('images.before', text, options, globals);\n\n var inlineRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]??(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n crazyRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<([^>]*)>(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(?:([\"'])([^\"]*?)\\6))?[ \\t]?\\)/g,\n base64RegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]??(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n referenceRegExp = /!\\[([^\\]]*?)] ?(?:\\n *)?\\[([\\s\\S]*?)]()()()()()/g,\n refShortcutRegExp = /!\\[([^\\[\\]]+)]()()()()()/g;\n\n function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {\n url = url.replace(/\\s/g, '');\n return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);\n }\n\n function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {\n\n var gUrls = globals.gUrls,\n gTitles = globals.gTitles,\n gDims = globals.gDimensions;\n\n linkId = linkId.toLowerCase();\n\n if (!title) {\n title = '';\n }\n // Special case for explicit empty url\n if (wholeMatch.search(/\\(? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n\n } else if (url === '' || url === null) {\n if (linkId === '' || linkId === null) {\n // lower-case and turn embedded newlines into spaces\n linkId = altText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(gUrls[linkId])) {\n url = gUrls[linkId];\n if (!showdown.helper.isUndefined(gTitles[linkId])) {\n title = gTitles[linkId];\n }\n if (!showdown.helper.isUndefined(gDims[linkId])) {\n width = gDims[linkId].width;\n height = gDims[linkId].height;\n }\n } else {\n return wholeMatch;\n }\n }\n\n altText = altText\n .replace(/\"/g, '"')\n //altText = showdown.helper.escapeCharacters(altText, '*_', false);\n .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n //url = showdown.helper.escapeCharacters(url, '*_', false);\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var result = '\"'x \"optional title\")\n\n // base64 encoded images\n text = text.replace(base64RegExp, writeImageTagBase64);\n\n // cases with crazy urls like ./image/cat1).png\n text = text.replace(crazyRegExp, writeImageTag);\n\n // normal cases\n text = text.replace(inlineRegExp, writeImageTag);\n\n // handle reference-style shortcuts: ![img text]\n text = text.replace(refShortcutRegExp, writeImageTag);\n\n text = globals.converter._dispatch('images.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('italicsAndBold', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);\n\n // it's faster to have 3 separate regexes for each case than have just one\n // because of backtracing, in some cases, it could lead to an exponential effect\n // called \"catastrophic backtrace\". Ominous!\n\n function parseInside (txt, left, right) {\n /*\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n */\n return left + txt + right;\n }\n\n // Parse underscores\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n text = text.replace(/\\b_(\\S[\\s\\S]*?)_\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/_([^\\s_][\\s\\S]*?)_/g, function (wm, m) {\n // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n }\n\n // Now parse asterisks\n if (options.literalMidWordAsterisks) {\n text = text.replace(/([^*]|^)\\B\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n text = text.replace(/([^*]|^)\\B\\*\\*(\\S[\\s\\S]*?)\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n text = text.replace(/([^*]|^)\\B\\*(\\S[\\s\\S]*?)\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n } else {\n text = text.replace(/\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/\\*\\*(\\S[\\s\\S]*?)\\*\\*/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/\\*([^\\s*][\\s\\S]*?)\\*/g, function (wm, m) {\n // !/^\\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n }\n\n\n text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Form HTML ordered (numbered) and unordered (bulleted) lists.\n */\nshowdown.subParser('lists', function (text, options, globals) {\n 'use strict';\n\n /**\n * Process the contents of a single ordered or unordered list, splitting it\n * into individual list items.\n * @param {string} listStr\n * @param {boolean} trimTrailing\n * @returns {string}\n */\n function processListItems (listStr, trimTrailing) {\n // The $g_list_level global keeps track of when we're inside a list.\n // Each time we enter a list, we increment it; when we leave a list,\n // we decrement. If it's zero, we're not in a list anymore.\n //\n // We do this because when we're not inside a list, we want to treat\n // something like this:\n //\n // I recommend upgrading to version\n // 8. Oops, now this line is treated\n // as a sub-list.\n //\n // As a single paragraph, despite the fact that the second line starts\n // with a digit-period-space sequence.\n //\n // Whereas when we're inside a list (or sub-list), that line will be\n // treated as the start of a sub-list. What a kludge, huh? This is\n // an aspect of Markdown's syntax that's hard to parse perfectly\n // without resorting to mind-reading. Perhaps the solution is to\n // change the syntax rules such that sub-lists must start with a\n // starting cardinal number; e.g. \"1.\" or \"a.\".\n globals.gListLevel++;\n\n // trim trailing blank lines:\n listStr = listStr.replace(/\\n{2,}$/, '\\n');\n\n // attacklab: add sentinel to emulate \\z\n listStr += '¨0';\n\n var rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0| {0,3}([*+-]|\\d+[.])[ \\t]+))/gm,\n isParagraphed = (/\\n[ \\t]*\\n(?!¨0)/.test(listStr));\n\n // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,\n // which is a syntax breaking change\n // activating this option reverts to old behavior\n if (options.disableForced4SpacesIndentedSublists) {\n rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0|\\2([*+-]|\\d+[.])[ \\t]+))/gm;\n }\n\n listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {\n checked = (checked && checked.trim() !== '');\n\n var item = showdown.subParser('outdent')(m4, options, globals),\n bulletStyle = '';\n\n // Support for github tasklists\n if (taskbtn && options.tasklists) {\n bulletStyle = ' class=\"task-list-item\" style=\"list-style-type: none;\"';\n item = item.replace(/^[ \\t]*\\[(x|X| )?]/m, function () {\n var otp = '
  • a
  • \n // instead of:\n //
    • - - a
    \n // So, to prevent it, we will put a marker (¨A)in the beginning of the line\n // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser\n item = item.replace(/^([-*+]|\\d\\.)[ \\t]+[\\S\\n ]*/g, function (wm2) {\n return '¨A' + wm2;\n });\n\n // m1 - Leading line or\n // Has a double return (multi paragraph) or\n // Has sublist\n if (m1 || (item.search(/\\n{2,}/) > -1)) {\n item = showdown.subParser('githubCodeBlocks')(item, options, globals);\n item = showdown.subParser('blockGamut')(item, options, globals);\n } else {\n // Recursion for sub-lists:\n item = showdown.subParser('lists')(item, options, globals);\n item = item.replace(/\\n$/, ''); // chomp(item)\n item = showdown.subParser('hashHTMLBlocks')(item, options, globals);\n\n // Colapse double linebreaks\n item = item.replace(/\\n\\n+/g, '\\n\\n');\n if (isParagraphed) {\n item = showdown.subParser('paragraphs')(item, options, globals);\n } else {\n item = showdown.subParser('spanGamut')(item, options, globals);\n }\n }\n\n // now we need to remove the marker (¨A)\n item = item.replace('¨A', '');\n // we can finally wrap the line in list item tags\n item = '' + item + '\\n';\n\n return item;\n });\n\n // attacklab: strip sentinel\n listStr = listStr.replace(/¨0/g, '');\n\n globals.gListLevel--;\n\n if (trimTrailing) {\n listStr = listStr.replace(/\\s+$/, '');\n }\n\n return listStr;\n }\n\n function styleStartNumber (list, listType) {\n // check if ol and starts by a number different than 1\n if (listType === 'ol') {\n var res = list.match(/^ *(\\d+)\\./);\n if (res && res[1] !== '1') {\n return ' start=\"' + res[1] + '\"';\n }\n }\n return '';\n }\n\n /**\n * Check and parse consecutive lists (better fix for issue #142)\n * @param {string} list\n * @param {string} listType\n * @param {boolean} trimTrailing\n * @returns {string}\n */\n function parseConsecutiveLists (list, listType, trimTrailing) {\n // check if we caught 2 or more consecutive lists by mistake\n // we use the counterRgx, meaning if listType is UL we look for OL and vice versa\n var olRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?\\d+\\.[ \\t]/gm : /^ {0,3}\\d+\\.[ \\t]/gm,\n ulRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?[*+-][ \\t]/gm : /^ {0,3}[*+-][ \\t]/gm,\n counterRxg = (listType === 'ul') ? olRgx : ulRgx,\n result = '';\n\n if (list.search(counterRxg) !== -1) {\n (function parseCL (txt) {\n var pos = txt.search(counterRxg),\n style = styleStartNumber(list, listType);\n if (pos !== -1) {\n // slice\n result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '\\n';\n\n // invert counterType and listType\n listType = (listType === 'ul') ? 'ol' : 'ul';\n counterRxg = (listType === 'ul') ? olRgx : ulRgx;\n\n //recurse\n parseCL(txt.slice(pos));\n } else {\n result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt, !!trimTrailing) + '\\n';\n }\n })(list);\n } else {\n var style = styleStartNumber(list, listType);\n result = '\\n\\n<' + listType + style + '>\\n' + processListItems(list, !!trimTrailing) + '\\n';\n }\n\n return result;\n }\n\n /** Start of list parsing **/\n text = globals.converter._dispatch('lists.before', text, options, globals);\n // add sentinel to hack around khtml/safari bug:\n // http://bugs.webkit.org/show_bug.cgi?id=11231\n text += '¨0';\n\n if (globals.gListLevel) {\n text = text.replace(/^(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n function (wholeMatch, list, m2) {\n var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n return parseConsecutiveLists(list, listType, true);\n }\n );\n } else {\n text = text.replace(/(\\n\\n|^\\n?)(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n function (wholeMatch, m1, list, m3) {\n var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n return parseConsecutiveLists(list, listType, false);\n }\n );\n }\n\n // strip sentinel\n text = text.replace(/¨0/, '');\n text = globals.converter._dispatch('lists.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Parse metadata at the top of the document\n */\nshowdown.subParser('metadata', function (text, options, globals) {\n 'use strict';\n\n if (!options.metadata) {\n return text;\n }\n\n text = globals.converter._dispatch('metadata.before', text, options, globals);\n\n function parseMetadataContents (content) {\n // raw is raw so it's not changed in any way\n globals.metadata.raw = content;\n\n // escape chars forbidden in html attributes\n // double quotes\n content = content\n // ampersand first\n .replace(/&/g, '&')\n // double quotes\n .replace(/\"/g, '"');\n\n content = content.replace(/\\n {4}/g, ' ');\n content.replace(/^([\\S ]+): +([\\s\\S]+?)$/gm, function (wm, key, value) {\n globals.metadata.parsed[key] = value;\n return '';\n });\n }\n\n text = text.replace(/^\\s*«««+(\\S*?)\\n([\\s\\S]+?)\\n»»»+\\n/, function (wholematch, format, content) {\n parseMetadataContents(content);\n return '¨M';\n });\n\n text = text.replace(/^\\s*---+(\\S*?)\\n([\\s\\S]+?)\\n---+\\n/, function (wholematch, format, content) {\n if (format) {\n globals.metadata.format = format;\n }\n parseMetadataContents(content);\n return '¨M';\n });\n\n text = text.replace(/¨M/g, '');\n\n text = globals.converter._dispatch('metadata.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Remove one level of line-leading tabs or spaces\n */\nshowdown.subParser('outdent', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('outdent.before', text, options, globals);\n\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n text = text.replace(/^(\\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width\n\n // attacklab: clean up hack\n text = text.replace(/¨0/g, '');\n\n text = globals.converter._dispatch('outdent.after', text, options, globals);\n return text;\n});\n\r\n/**\n *\n */\nshowdown.subParser('paragraphs', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('paragraphs.before', text, options, globals);\n // Strip leading and trailing lines:\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n\n var grafs = text.split(/\\n{2,}/g),\n grafsOut = [],\n end = grafs.length; // Wrap

    tags\n\n for (var i = 0; i < end; i++) {\n var str = grafs[i];\n // if this is an HTML marker, copy it\n if (str.search(/¨(K|G)(\\d+)\\1/g) >= 0) {\n grafsOut.push(str);\n\n // test for presence of characters to prevent empty lines being parsed\n // as paragraphs (resulting in undesired extra empty paragraphs)\n } else if (str.search(/\\S/) >= 0) {\n str = showdown.subParser('spanGamut')(str, options, globals);\n str = str.replace(/^([ \\t]*)/g, '

    ');\n str += '

    ';\n grafsOut.push(str);\n }\n }\n\n /** Unhashify HTML blocks */\n end = grafsOut.length;\n for (i = 0; i < end; i++) {\n var blockText = '',\n grafsOutIt = grafsOut[i],\n codeFlag = false;\n // if this is a marker for an html block...\n // use RegExp.test instead of string.search because of QML bug\n while (/¨(K|G)(\\d+)\\1/.test(grafsOutIt)) {\n var delim = RegExp.$1,\n num = RegExp.$2;\n\n if (delim === 'K') {\n blockText = globals.gHtmlBlocks[num];\n } else {\n // we need to check if ghBlock is a false positive\n if (codeFlag) {\n // use encoded version of all text\n blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals);\n } else {\n blockText = globals.ghCodeBlocks[num].codeblock;\n }\n }\n blockText = blockText.replace(/\\$/g, '$$$$'); // Escape any dollar signs\n\n grafsOutIt = grafsOutIt.replace(/(\\n\\n)?¨(K|G)\\d+\\2(\\n\\n)?/, blockText);\n // Check if grafsOutIt is a pre->code\n if (/^]*>\\s*]*>/.test(grafsOutIt)) {\n codeFlag = true;\n }\n }\n grafsOut[i] = grafsOutIt;\n }\n text = grafsOut.join('\\n');\n // Strip leading and trailing lines:\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n return globals.converter._dispatch('paragraphs.after', text, options, globals);\n});\n\r\n/**\n * Run extension\n */\nshowdown.subParser('runExtension', function (ext, text, options, globals) {\n 'use strict';\n\n if (ext.filter) {\n text = ext.filter(text, globals.converter, options);\n\n } else if (ext.regex) {\n // TODO remove this when old extension loading mechanism is deprecated\n var re = ext.regex;\n if (!(re instanceof RegExp)) {\n re = new RegExp(re, 'g');\n }\n text = text.replace(re, ext.replace);\n }\n\n return text;\n});\n\r\n/**\n * These are all the transformations that occur *within* block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('spanGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('spanGamut.before', text, options, globals);\n text = showdown.subParser('codeSpans')(text, options, globals);\n text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);\n text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);\n\n // Process anchor and image tags. Images must come first,\n // because ![foo][f] looks like an anchor.\n text = showdown.subParser('images')(text, options, globals);\n text = showdown.subParser('anchors')(text, options, globals);\n\n // Make links out of things like ``\n // Must come after anchors, because you can use < and >\n // delimiters in inline links like [this]().\n text = showdown.subParser('autoLinks')(text, options, globals);\n text = showdown.subParser('simplifiedAutoLinks')(text, options, globals);\n text = showdown.subParser('emoji')(text, options, globals);\n text = showdown.subParser('underline')(text, options, globals);\n text = showdown.subParser('italicsAndBold')(text, options, globals);\n text = showdown.subParser('strikethrough')(text, options, globals);\n text = showdown.subParser('ellipsis')(text, options, globals);\n\n // we need to hash HTML tags inside spans\n text = showdown.subParser('hashHTMLSpans')(text, options, globals);\n\n // now we encode amps and angles\n text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);\n\n // Do hard breaks\n if (options.simpleLineBreaks) {\n // GFM style hard breaks\n // only add line breaks if the text does not contain a block (special case for lists)\n if (!/\\n\\n¨K/.test(text)) {\n text = text.replace(/\\n+/g, '
    \\n');\n }\n } else {\n // Vanilla hard breaks\n text = text.replace(/ +\\n/g, '
    \\n');\n }\n\n text = globals.converter._dispatch('spanGamut.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('strikethrough', function (text, options, globals) {\n 'use strict';\n\n function parseInside (txt) {\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n return '' + txt + '';\n }\n\n if (options.strikethrough) {\n text = globals.converter._dispatch('strikethrough.before', text, options, globals);\n text = text.replace(/(?:~){2}([\\s\\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });\n text = globals.converter._dispatch('strikethrough.after', text, options, globals);\n }\n\n return text;\n});\n\r\n/**\n * Strips link definitions from text, stores the URLs and titles in\n * hash references.\n * Link defs are in the form: ^[id]: url \"optional title\"\n */\nshowdown.subParser('stripLinkDefinitions', function (text, options, globals) {\n 'use strict';\n\n var regex = /^ {0,3}\\[(.+)]:[ \\t]*\\n?[ \\t]*\\s]+)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=¨0))/gm,\n base64Regex = /^ {0,3}\\[(.+)]:[ \\t]*\\n?[ \\t]*?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n\\n|(?=¨0)|(?=\\n\\[))/gm;\n\n // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n text += '¨0';\n\n var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {\n linkId = linkId.toLowerCase();\n if (url.match(/^data:.+?\\/.+?;base64,/)) {\n // remove newlines\n globals.gUrls[linkId] = url.replace(/\\s/g, '');\n } else {\n globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive\n }\n\n if (blankLines) {\n // Oops, found blank lines, so it's not a title.\n // Put back the parenthetical statement we stole.\n return blankLines + title;\n\n } else {\n if (title) {\n globals.gTitles[linkId] = title.replace(/\"|'/g, '"');\n }\n if (options.parseImgDimensions && width && height) {\n globals.gDimensions[linkId] = {\n width: width,\n height: height\n };\n }\n }\n // Completely remove the definition from the text\n return '';\n };\n\n // first we try to find base64 link references\n text = text.replace(base64Regex, replaceFunc);\n\n text = text.replace(regex, replaceFunc);\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return text;\n});\n\r\nshowdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n //singeColTblRgx = /^ {0,3}\\|.+\\|\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n(?: {0,3}\\|.+\\|\\n)+(?:\\n\\n|¨0)/gm;\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles (sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders (header, style) {\n var id = '';\n header = header.trim();\n // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n header = showdown.subParser('spanGamut')(header, options, globals);\n\n return '' + header + '\\n';\n }\n\n function parseCells (cell, style) {\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '' + subText + '\\n';\n }\n\n function buildTable (headers, cells) {\n var tb = '\\n\\n\\n',\n tblLgn = headers.length;\n\n for (var i = 0; i < tblLgn; ++i) {\n tb += headers[i];\n }\n tb += '\\n\\n\\n';\n\n for (i = 0; i < cells.length; ++i) {\n tb += '\\n';\n for (var ii = 0; ii < tblLgn; ++ii) {\n tb += cells[i][ii];\n }\n tb += '\\n';\n }\n tb += '\\n
    \\n';\n return tb;\n }\n\n function parseTable (rawTable) {\n var i, tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n }\n // parse code spans first, but we only support one line code spans\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),\n rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n\n tableLines.shift();\n tableLines.shift();\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n rawCells.push(\n tableLines[i]\n .split('|')\n .map(function (s) {\n return s.trim();\n })\n );\n }\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n for (var ii = 0; ii < headers.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {\n\n }\n row.push(parseCells(rawCells[i][ii], styles[ii]));\n }\n cells.push(row);\n }\n\n return buildTable(headers, cells);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals);\n\n // find escaped pipe characters\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n // parse multi column tables\n text = text.replace(tableRgx, parseTable);\n\n // parse one column tables\n text = text.replace(singeColTblRgx, parseTable);\n\n text = globals.converter._dispatch('tables.after', text, options, globals);\n\n return text;\n});\n\r\nshowdown.subParser('underline', function (text, options, globals) {\n 'use strict';\n\n if (!options.underline) {\n return text;\n }\n\n text = globals.converter._dispatch('underline.before', text, options, globals);\n\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return (/\\S$/.test(m)) ? '' + m + '' : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return (/\\S$/.test(m)) ? '' + m + '' : wm;\n });\n }\n\n // escape remaining underscores to prevent them being parsed by italic and bold\n text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('underline.after', text, options, globals);\n\n return text;\n});\n\r\n/**\n * Swap back in all the special characters we've hidden.\n */\nshowdown.subParser('unescapeSpecialChars', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);\n\n text = text.replace(/¨E(\\d+)E/g, function (wholeMatch, m1) {\n var charCodeToReplace = parseInt(m1);\n return String.fromCharCode(charCodeToReplace);\n });\n\n text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('makeMarkdown.blockquote', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);\n\n if (innerTxt === '') {\n continue;\n }\n txt += innerTxt;\n }\n }\n // cleanup\n txt = txt.trim();\n txt = '> ' + txt.split('\\n').join('\\n> ');\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.codeBlock', function (node, globals) {\n 'use strict';\n\n var lang = node.getAttribute('language'),\n num = node.getAttribute('precodenum');\n return '```' + lang + '\\n' + globals.preList[num] + '\\n```';\n});\n\r\nshowdown.subParser('makeMarkdown.codeSpan', function (node) {\n 'use strict';\n\n return '`' + node.innerHTML + '`';\n});\n\r\nshowdown.subParser('makeMarkdown.emphasis', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '*';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '*';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {\n 'use strict';\n\n var headerMark = new Array(headerLevel + 1).join('#'),\n txt = '';\n\n if (node.hasChildNodes()) {\n txt = headerMark + ' ';\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.hr', function () {\n 'use strict';\n\n return '---';\n});\n\r\nshowdown.subParser('makeMarkdown.image', function (node) {\n 'use strict';\n\n var txt = '';\n if (node.hasAttribute('src')) {\n txt += '![' + node.getAttribute('alt') + '](';\n txt += '<' + node.getAttribute('src') + '>';\n if (node.hasAttribute('width') && node.hasAttribute('height')) {\n txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');\n }\n\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n txt += ')';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.links', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes() && node.hasAttribute('href')) {\n var children = node.childNodes,\n childrenLength = children.length;\n txt = '[';\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '](';\n txt += '<' + node.getAttribute('href') + '>';\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n txt += ')';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.list', function (node, globals, type) {\n 'use strict';\n\n var txt = '';\n if (!node.hasChildNodes()) {\n return '';\n }\n var listItems = node.childNodes,\n listItemsLenght = listItems.length,\n listNum = node.getAttribute('start') || 1;\n\n for (var i = 0; i < listItemsLenght; ++i) {\n if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {\n continue;\n }\n\n // define the bullet to use in list\n var bullet = '';\n if (type === 'ol') {\n bullet = listNum.toString() + '. ';\n } else {\n bullet = '- ';\n }\n\n // parse list item\n txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);\n ++listNum;\n }\n\n // add comment at the end to prevent consecutive lists to be parsed as one\n txt += '\\n\\n';\n return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.listItem', function (node, globals) {\n 'use strict';\n\n var listItemTxt = '';\n\n var children = node.childNodes,\n childrenLenght = children.length;\n\n for (var i = 0; i < childrenLenght; ++i) {\n listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n // if it's only one liner, we need to add a newline at the end\n if (!/\\n$/.test(listItemTxt)) {\n listItemTxt += '\\n';\n } else {\n // it's multiparagraph, so we need to indent\n listItemTxt = listItemTxt\n .split('\\n')\n .join('\\n ')\n .replace(/^ {4}$/gm, '')\n .replace(/\\n\\n+/g, '\\n\\n');\n }\n\n return listItemTxt;\n});\n\r\n\n\nshowdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {\n 'use strict';\n\n spansOnly = spansOnly || false;\n\n var txt = '';\n\n // edge case of text without wrapper paragraph\n if (node.nodeType === 3) {\n return showdown.subParser('makeMarkdown.txt')(node, globals);\n }\n\n // HTML comment\n if (node.nodeType === 8) {\n return '\\n\\n';\n }\n\n // process only node elements\n if (node.nodeType !== 1) {\n return '';\n }\n\n var tagName = node.tagName.toLowerCase();\n\n switch (tagName) {\n\n //\n // BLOCKS\n //\n case 'h1':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\\n\\n'; }\n break;\n case 'h2':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\\n\\n'; }\n break;\n case 'h3':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\\n\\n'; }\n break;\n case 'h4':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\\n\\n'; }\n break;\n case 'h5':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\\n\\n'; }\n break;\n case 'h6':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\\n\\n'; }\n break;\n\n case 'p':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\\n\\n'; }\n break;\n\n case 'blockquote':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\\n\\n'; }\n break;\n\n case 'hr':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\\n\\n'; }\n break;\n\n case 'ol':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\\n\\n'; }\n break;\n\n case 'ul':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\\n\\n'; }\n break;\n\n case 'precode':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\\n\\n'; }\n break;\n\n case 'pre':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\\n\\n'; }\n break;\n\n case 'table':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\\n\\n'; }\n break;\n\n //\n // SPANS\n //\n case 'code':\n txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);\n break;\n\n case 'em':\n case 'i':\n txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);\n break;\n\n case 'strong':\n case 'b':\n txt = showdown.subParser('makeMarkdown.strong')(node, globals);\n break;\n\n case 'del':\n txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);\n break;\n\n case 'a':\n txt = showdown.subParser('makeMarkdown.links')(node, globals);\n break;\n\n case 'img':\n txt = showdown.subParser('makeMarkdown.image')(node, globals);\n break;\n\n default:\n txt = node.outerHTML + '\\n\\n';\n }\n\n // common normalization\n // TODO eventually\n\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.paragraph', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n\n // some text normalization\n txt = txt.trim();\n\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.pre', function (node, globals) {\n 'use strict';\n\n var num = node.getAttribute('prenum');\n return '
    ' + globals.preList[num] + '
    ';\n});\n\r\nshowdown.subParser('makeMarkdown.strikethrough', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '~~';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '~~';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.strong', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '**';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '**';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.table', function (node, globals) {\n 'use strict';\n\n var txt = '',\n tableArray = [[], []],\n headings = node.querySelectorAll('thead>tr>th'),\n rows = node.querySelectorAll('tbody>tr'),\n i, ii;\n for (i = 0; i < headings.length; ++i) {\n var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),\n allign = '---';\n\n if (headings[i].hasAttribute('style')) {\n var style = headings[i].getAttribute('style').toLowerCase().replace(/\\s/g, '');\n switch (style) {\n case 'text-align:left;':\n allign = ':---';\n break;\n case 'text-align:right;':\n allign = '---:';\n break;\n case 'text-align:center;':\n allign = ':---:';\n break;\n }\n }\n tableArray[0][i] = headContent.trim();\n tableArray[1][i] = allign;\n }\n\n for (i = 0; i < rows.length; ++i) {\n var r = tableArray.push([]) - 1,\n cols = rows[i].getElementsByTagName('td');\n\n for (ii = 0; ii < headings.length; ++ii) {\n var cellContent = ' ';\n if (typeof cols[ii] !== 'undefined') {\n cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);\n }\n tableArray[r].push(cellContent);\n }\n }\n\n var cellSpacesCount = 3;\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n var strLen = tableArray[i][ii].length;\n if (strLen > cellSpacesCount) {\n cellSpacesCount = strLen;\n }\n }\n }\n\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n if (i === 1) {\n if (tableArray[i][ii].slice(-1) === ':') {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');\n }\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);\n }\n }\n txt += '| ' + tableArray[i].join(' | ') + ' |\\n';\n }\n\n return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.tableCell', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (!node.hasChildNodes()) {\n return '';\n }\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);\n }\n return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.txt', function (node) {\n 'use strict';\n\n var txt = node.nodeValue;\n\n // multiple spaces are collapsed\n txt = txt.replace(/ +/g, ' ');\n\n // replace the custom ¨NBSP; with a space\n txt = txt.replace(/¨NBSP;/g, ' ');\n\n // \", <, > and & should replace escaped html entities\n txt = showdown.helper.unescapeHTMLEntities(txt);\n\n // escape markdown magic characters\n // emphasis, strong and strikethrough - can appear everywhere\n // we also escape pipe (|) because of tables\n // and escape ` because of code blocks and spans\n txt = txt.replace(/([*_~|`])/g, '\\\\$1');\n\n // escape > because of blockquotes\n txt = txt.replace(/^(\\s*)>/g, '\\\\$1>');\n\n // hash character, only troublesome at the beginning of a line because of headers\n txt = txt.replace(/^#/gm, '\\\\#');\n\n // horizontal rules\n txt = txt.replace(/^(\\s*)([-=]{3,})(\\s*)$/, '$1\\\\$2$3');\n\n // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer\n txt = txt.replace(/^( {0,3}\\d+)\\./gm, '$1\\\\.');\n\n // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)\n txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\\\$2');\n\n // images and links, ] followed by ( is problematic, so we escape it\n txt = txt.replace(/]([\\s]*)\\(/g, '\\\\]$1\\\\(');\n\n // reference URIs must also be escaped\n txt = txt.replace(/^ {0,3}\\[([\\S \\t]*?)]:/gm, '\\\\[$1]:');\n\n return txt;\n});\n\r\nvar root = this;\n\n// AMD Loader\nif (typeof define === 'function' && define.amd) {\n define(function () {\n 'use strict';\n return showdown;\n });\n\n// CommonJS/nodeJS Loader\n} else if (typeof module !== 'undefined' && module.exports) {\n module.exports = showdown;\n\n// Regular Browser loader\n} else {\n root.showdown = showdown;\n}\n}).call(this);\r\n\n//# sourceMappingURL=showdown.js.map\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of \n","export const ACTIVATE_EMPLOYEE_WEBCAM = 'live-connection::activate-employee-webcam';\nexport const DEACTIVATE_EMPLOYEE_WEBCAM = 'live-connection::deactivate-employee-webcam';\nexport const BROADCAST_DATA = 'live-connection::broadcast-data';\nexport const BROADCAST_ACTION = 'live-connection::broadcast-action';\nexport const CONNECT = 'live-connection::connect';\nexport const DISCONNECT = 'live-connection::disconnect';\nexport const SWITCH_TO_REMOTE = 'live-connection::switch-to-remote';\nexport const SWITCH_TO_OFFICE = 'live-connection::switch-to-office';\n","import api from \"!../../../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../../../../../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../../../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../../../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!../../../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./EmployeeLiveOverlay.vue?vue&type=style&index=0&id=8c9f93d2&lang=scss&module=true\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render } from \"./EmployeeLiveOverlay.vue?vue&type=template&id=8c9f93d2\"\nimport script from \"./EmployeeLiveOverlay.vue?vue&type=script&lang=js\"\nexport * from \"./EmployeeLiveOverlay.vue?vue&type=script&lang=js\"\n\nconst cssModules = {}\nimport style0 from \"./EmployeeLiveOverlay.vue?vue&type=style&index=0&id=8c9f93d2&lang=scss&module=true\"\ncssModules[\"$style\"] = style0\n\nimport exportComponent from \"/home/runner/work/adpi-app/adpi-app/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__cssModules',cssModules]])\n\nexport default __exports__","import * as mutations from './mutations';\nimport { state } from './state';\n\nexport * from './hooks';\nexport * from './components';\nexport * as events from './events';\n\nexport const liveConnection = {\n namespaced: true,\n mutations,\n state,\n};\n\nexport default liveConnection;\n","import { axios } from '@/plugins/axios';\n\nexport const getIceServers = async () => {\n const { data } = await axios.get('/getntstoken');\n\n return data.ice_servers;\n};\n\nexport default getIceServers;\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const EPSILON_FLOAT32 = 1e-7;\nexport const EPSILON_FLOAT16 = 1e-4;\n/** Convenient class for storing tensor-related data. */\nexport class DataStorage {\n constructor(backend, dataMover) {\n this.backend = backend;\n this.dataMover = dataMover;\n this.data = new WeakMap();\n this.dataIdsCount = 0;\n }\n get(dataId) {\n if (!this.data.has(dataId)) {\n this.dataMover.moveData(this.backend, dataId);\n }\n return this.data.get(dataId);\n }\n set(dataId, value) {\n this.dataIdsCount++;\n this.data.set(dataId, value);\n }\n has(dataId) {\n return this.data.has(dataId);\n }\n delete(dataId) {\n this.dataIdsCount--;\n return this.data.delete(dataId);\n }\n numDataIds() {\n return this.dataIdsCount;\n }\n}\n/**\n * The interface that defines the kernels that should be implemented when\n * adding a new backend. New backends don't need to implement every one of the\n * methods, this can be done gradually (throw an error for unimplemented\n * methods).\n */\nexport class KernelBackend {\n refCount(dataId) {\n return notYetImplemented('refCount');\n }\n incRef(dataId) {\n return notYetImplemented('incRef');\n }\n timerAvailable() {\n return true;\n }\n time(f) {\n return notYetImplemented('time');\n }\n read(dataId) {\n return notYetImplemented('read');\n }\n readSync(dataId) {\n return notYetImplemented('readSync');\n }\n readToGPU(dataId, options) {\n return notYetImplemented('readToGPU');\n }\n numDataIds() {\n return notYetImplemented('numDataIds');\n }\n disposeData(dataId, force) {\n return notYetImplemented('disposeData');\n }\n write(values, shape, dtype) {\n return notYetImplemented('write');\n }\n move(dataId, values, shape, dtype, refCount) {\n return notYetImplemented('move');\n }\n createTensorFromGPUData(values, shape, dtype) {\n return notYetImplemented('createTensorFromGPUData');\n }\n memory() {\n return notYetImplemented('memory');\n }\n /** Returns the highest precision for floats in bits (e.g. 16 or 32) */\n floatPrecision() {\n return notYetImplemented('floatPrecision');\n }\n /** Returns the smallest representable number. */\n epsilon() {\n return this.floatPrecision() === 32 ? EPSILON_FLOAT32 : EPSILON_FLOAT16;\n }\n dispose() {\n return notYetImplemented('dispose');\n }\n}\nfunction notYetImplemented(kernelName) {\n throw new Error(`'${kernelName}' not yet implemented or not found in the registry. ` +\n `This kernel may not be supported by the tfjs backend you have chosen`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvYmFja2VuZHMvYmFja2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFNSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUF1QnBDLHdEQUF3RDtBQUN4RCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUFvQixPQUFzQixFQUFVLFNBQW9CO1FBQXBELFlBQU8sR0FBUCxPQUFPLENBQWU7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBSGhFLFNBQUksR0FBRyxJQUFJLE9BQU8sRUFBYSxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRWtELENBQUM7SUFFNUUsR0FBRyxDQUFDLE1BQWM7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0M7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLEtBQVE7UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBaUJEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEIsUUFBUSxDQUFDLE1BQWM7UUFDckIsT0FBTyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQWM7UUFDbkIsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFhO1FBQ2hCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFjO1FBQ2pCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELFFBQVEsQ0FBQyxNQUFjO1FBQ3JCLE9BQU8saUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELFNBQVMsQ0FBQyxNQUFjLEVBQUUsT0FBMEI7UUFDbEQsT0FBTyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsVUFBVTtRQUNSLE9BQU8saUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELFdBQVcsQ0FBQyxNQUFjLEVBQUUsS0FBZTtRQUN6QyxPQUFPLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxLQUFLLENBQUMsTUFBcUIsRUFBRSxLQUFlLEVBQUUsS0FBZTtRQUMzRCxPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxJQUFJLENBQ0EsTUFBYyxFQUFFLE1BQXFCLEVBQUUsS0FBZSxFQUFFLEtBQWUsRUFDdkUsUUFBZ0I7UUFDbEIsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsdUJBQXVCLENBQ25CLE1BQTRCLEVBQUUsS0FBZSxFQUFFLEtBQWU7UUFDaEUsT0FBTyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsdUVBQXVFO0lBQ3ZFLGNBQWM7UUFDWixPQUFPLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELGtEQUFrRDtJQUNsRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTztRQUNMLE9BQU8saUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxVQUFrQjtJQUMzQyxNQUFNLElBQUksS0FBSyxDQUNYLElBQUksVUFBVSxzREFBc0Q7UUFDcEUsc0VBQXNFLENBQUMsQ0FBQztBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0JhY2tlbmQsIERhdGFUb0dQVU9wdGlvbnMsIEdQVURhdGEsIFRlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YUlkfSBmcm9tICcuLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge0JhY2tlbmRWYWx1ZXMsIERhdGFUeXBlLCBXZWJHTERhdGEsIFdlYkdQVURhdGF9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IEVQU0lMT05fRkxPQVQzMiA9IDFlLTc7XG5leHBvcnQgY29uc3QgRVBTSUxPTl9GTE9BVDE2ID0gMWUtNDtcblxuLy8gUmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIGFsbCBiYWNrZW5kcy5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2VuZFRpbWluZ0luZm8ge1xuICBrZXJuZWxNczogbnVtYmVyfHtlcnJvcjogc3RyaW5nfTtcbiAgZ2V0RXh0cmFQcm9maWxlSW5mbz8oKTogc3RyaW5nOyAgLy8gYSBmaWVsZCBmb3IgYWRkaXRpb25hbCB0aW1pbmcgaW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiBwYWNraW5nIC8gdW5wYWNraW5nIGZvciBXZWJHTCBiYWNrZW5kXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yU3RvcmFnZSB7XG4gIHJlYWQoZGF0YUlkOiBEYXRhSWQpOiBQcm9taXNlPEJhY2tlbmRWYWx1ZXM+O1xuICByZWFkU3luYyhkYXRhSWQ6IERhdGFJZCk6IEJhY2tlbmRWYWx1ZXM7XG4gIGRpc3Bvc2VEYXRhKGRhdGFJZDogRGF0YUlkLCBmb3JjZT86IGJvb2xlYW4pOiBib29sZWFuO1xuICB3cml0ZSh2YWx1ZXM6IEJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlKTogRGF0YUlkO1xuICBtb3ZlKFxuICAgICAgZGF0YUlkOiBEYXRhSWQsIHZhbHVlczogQmFja2VuZFZhbHVlcywgc2hhcGU6IG51bWJlcltdLCBkdHlwZTogRGF0YVR5cGUsXG4gICAgICByZWZDb3VudDogbnVtYmVyKTogdm9pZDtcbiAgbWVtb3J5KCk6IHt1bnJlbGlhYmxlOiBib29sZWFuO307ICAvLyBCYWNrZW5kLXNwZWNpZmljIGluZm9ybWF0aW9uLlxuICAvKiogUmV0dXJucyBudW1iZXIgb2YgZGF0YSBpZHMgY3VycmVudGx5IGluIHRoZSBzdG9yYWdlLiAqL1xuICBudW1EYXRhSWRzKCk6IG51bWJlcjtcbiAgcmVmQ291bnQoZGF0YUlkOiBEYXRhSWQpOiBudW1iZXI7XG59XG5cbi8qKiBDb252ZW5pZW50IGNsYXNzIGZvciBzdG9yaW5nIHRlbnNvci1yZWxhdGVkIGRhdGEuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JhZ2U8VD4ge1xuICBwcml2YXRlIGRhdGEgPSBuZXcgV2Vha01hcDxEYXRhSWQsIFQ+KCk7XG4gIHByaXZhdGUgZGF0YUlkc0NvdW50ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhY2tlbmQ6IEtlcm5lbEJhY2tlbmQsIHByaXZhdGUgZGF0YU1vdmVyOiBEYXRhTW92ZXIpIHt9XG5cbiAgZ2V0KGRhdGFJZDogRGF0YUlkKSB7XG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzKGRhdGFJZCkpIHtcbiAgICAgIHRoaXMuZGF0YU1vdmVyLm1vdmVEYXRhKHRoaXMuYmFja2VuZCwgZGF0YUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXQoZGF0YUlkKTtcbiAgfVxuXG4gIHNldChkYXRhSWQ6IERhdGFJZCwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFJZHNDb3VudCsrO1xuICAgIHRoaXMuZGF0YS5zZXQoZGF0YUlkLCB2YWx1ZSk7XG4gIH1cblxuICBoYXMoZGF0YUlkOiBEYXRhSWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmhhcyhkYXRhSWQpO1xuICB9XG5cbiAgZGVsZXRlKGRhdGFJZDogRGF0YUlkKTogYm9vbGVhbiB7XG4gICAgdGhpcy5kYXRhSWRzQ291bnQtLTtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmRlbGV0ZShkYXRhSWQpO1xuICB9XG5cbiAgbnVtRGF0YUlkcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFJZHNDb3VudDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFNb3ZlciB7XG4gIC8qKlxuICAgKiBUbyBiZSBjYWxsZWQgYnkgYmFja2VuZHMgd2hlbmV2ZXIgdGhleSBzZWUgYSBkYXRhSWQgdGhhdCB0aGV5IGRvbid0IG93bi5cbiAgICogVXBvbiBjYWxsaW5nIHRoaXMgbWV0aG9kLCB0aGUgbW92ZXIgd2lsbCBmZXRjaCB0aGUgdGVuc29yIGZyb20gYW5vdGhlclxuICAgKiBiYWNrZW5kIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBjdXJyZW50IGFjdGl2ZSBiYWNrZW5kLlxuICAgKi9cbiAgbW92ZURhdGEoYmFja2VuZDogS2VybmVsQmFja2VuZCwgZGF0YUlkOiBEYXRhSWQpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tlbmRUaW1lciB7XG4gIC8vIGNoZWNrIGlmIGJhY2tlbmQgdGltZXIgaXMgYXZhaWxhYmxlXG4gIHRpbWVyQXZhaWxhYmxlKCk6IGJvb2xlYW47XG4gIHRpbWUoZjogKCkgPT4gdm9pZCk6IFByb21pc2U8QmFja2VuZFRpbWluZ0luZm8+O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdGhhdCBkZWZpbmVzIHRoZSBrZXJuZWxzIHRoYXQgc2hvdWxkIGJlIGltcGxlbWVudGVkIHdoZW5cbiAqIGFkZGluZyBhIG5ldyBiYWNrZW5kLiBOZXcgYmFja2VuZHMgZG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQgZXZlcnkgb25lIG9mIHRoZVxuICogbWV0aG9kcywgdGhpcyBjYW4gYmUgZG9uZSBncmFkdWFsbHkgKHRocm93IGFuIGVycm9yIGZvciB1bmltcGxlbWVudGVkXG4gKiBtZXRob2RzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEtlcm5lbEJhY2tlbmQgaW1wbGVtZW50cyBUZW5zb3JTdG9yYWdlLCBCYWNrZW5kLCBCYWNrZW5kVGltZXIge1xuICByZWZDb3VudChkYXRhSWQ6IERhdGFJZCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdyZWZDb3VudCcpO1xuICB9XG4gIGluY1JlZihkYXRhSWQ6IERhdGFJZCk6IHZvaWQge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgnaW5jUmVmJyk7XG4gIH1cbiAgdGltZXJBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdGltZShmOiAoKSA9PiB2b2lkKTogUHJvbWlzZTxCYWNrZW5kVGltaW5nSW5mbz4ge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgndGltZScpO1xuICB9XG4gIHJlYWQoZGF0YUlkOiBvYmplY3QpOiBQcm9taXNlPEJhY2tlbmRWYWx1ZXM+IHtcbiAgICByZXR1cm4gbm90WWV0SW1wbGVtZW50ZWQoJ3JlYWQnKTtcbiAgfVxuICByZWFkU3luYyhkYXRhSWQ6IG9iamVjdCk6IEJhY2tlbmRWYWx1ZXMge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgncmVhZFN5bmMnKTtcbiAgfVxuICByZWFkVG9HUFUoZGF0YUlkOiBvYmplY3QsIG9wdGlvbnM/OiBEYXRhVG9HUFVPcHRpb25zKTogR1BVRGF0YSB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdyZWFkVG9HUFUnKTtcbiAgfVxuICBudW1EYXRhSWRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdudW1EYXRhSWRzJyk7XG4gIH1cbiAgZGlzcG9zZURhdGEoZGF0YUlkOiBvYmplY3QsIGZvcmNlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgnZGlzcG9zZURhdGEnKTtcbiAgfVxuICB3cml0ZSh2YWx1ZXM6IEJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlKTogRGF0YUlkIHtcbiAgICByZXR1cm4gbm90WWV0SW1wbGVtZW50ZWQoJ3dyaXRlJyk7XG4gIH1cbiAgbW92ZShcbiAgICAgIGRhdGFJZDogRGF0YUlkLCB2YWx1ZXM6IEJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLFxuICAgICAgcmVmQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgnbW92ZScpO1xuICB9XG5cbiAgY3JlYXRlVGVuc29yRnJvbUdQVURhdGEoXG4gICAgICB2YWx1ZXM6IFdlYkdMRGF0YXxXZWJHUFVEYXRhLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSk6IFRlbnNvciB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdjcmVhdGVUZW5zb3JGcm9tR1BVRGF0YScpO1xuICB9XG5cbiAgbWVtb3J5KCk6IHt1bnJlbGlhYmxlOiBib29sZWFuOyByZWFzb25zPzogc3RyaW5nW119IHtcbiAgICByZXR1cm4gbm90WWV0SW1wbGVtZW50ZWQoJ21lbW9yeScpO1xuICB9XG4gIC8qKiBSZXR1cm5zIHRoZSBoaWdoZXN0IHByZWNpc2lvbiBmb3IgZmxvYXRzIGluIGJpdHMgKGUuZy4gMTYgb3IgMzIpICovXG4gIGZsb2F0UHJlY2lzaW9uKCk6IDE2fDMyIHtcbiAgICByZXR1cm4gbm90WWV0SW1wbGVtZW50ZWQoJ2Zsb2F0UHJlY2lzaW9uJyk7XG4gIH1cbiAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyLiAgKi9cbiAgZXBzaWxvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZsb2F0UHJlY2lzaW9uKCkgPT09IDMyID8gRVBTSUxPTl9GTE9BVDMyIDogRVBTSUxPTl9GTE9BVDE2O1xuICB9XG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdkaXNwb3NlJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm90WWV0SW1wbGVtZW50ZWQoa2VybmVsTmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJyR7a2VybmVsTmFtZX0nIG5vdCB5ZXQgaW1wbGVtZW50ZWQgb3Igbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeS4gYCArXG4gICAgICBgVGhpcyBrZXJuZWwgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIHRmanMgYmFja2VuZCB5b3UgaGF2ZSBjaG9zZW5gKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Shuffles the array in-place using Fisher-Yates algorithm.\n *\n * ```js\n * const a = [1, 2, 3, 4, 5];\n * tf.util.shuffle(a);\n * console.log(a);\n * ```\n *\n * @param array The array to shuffle in-place.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\n// tslint:disable-next-line:no-any\nexport function shuffle(array) {\n let counter = array.length;\n let index = 0;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n index = (Math.random() * counter) | 0;\n // Decrease counter by 1\n counter--;\n // And swap the last element with it\n swap(array, counter, index);\n }\n}\n/**\n * Shuffles two arrays in-place the same way using Fisher-Yates algorithm.\n *\n * ```js\n * const a = [1,2,3,4,5];\n * const b = [11,22,33,44,55];\n * tf.util.shuffleCombo(a, b);\n * console.log(a, b);\n * ```\n *\n * @param array The first array to shuffle in-place.\n * @param array2 The second array to shuffle in-place with the same permutation\n * as the first array.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function shuffleCombo(\n// tslint:disable-next-line:no-any\narray, \n// tslint:disable-next-line:no-any\narray2) {\n if (array.length !== array2.length) {\n throw new Error(`Array sizes must match to be shuffled together ` +\n `First array length was ${array.length}` +\n `Second array length was ${array2.length}`);\n }\n let counter = array.length;\n let index = 0;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n index = (Math.random() * counter) | 0;\n // Decrease counter by 1\n counter--;\n // And swap the last element of each array with it\n swap(array, counter, index);\n swap(array2, counter, index);\n }\n}\n/** Clamps a value to a specified range. */\nexport function clamp(min, x, max) {\n return Math.max(min, Math.min(x, max));\n}\nexport function nearestLargerEven(val) {\n return val % 2 === 0 ? val : val + 1;\n}\nexport function swap(object, left, right) {\n const temp = object[left];\n object[left] = object[right];\n object[right] = temp;\n}\nexport function sum(arr) {\n let sum = 0;\n for (let i = 0; i < arr.length; i++) {\n sum += arr[i];\n }\n return sum;\n}\n/**\n * Returns a sample from a uniform [a, b) distribution.\n *\n * @param a The minimum support (inclusive).\n * @param b The maximum support (exclusive).\n * @return A pseudorandom number on the half-open interval [a,b).\n */\nexport function randUniform(a, b) {\n const r = Math.random();\n return (b * r) + (1 - r) * a;\n}\n/** Returns the squared Euclidean distance between two vectors. */\nexport function distSquared(a, b) {\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n const diff = Number(a[i]) - Number(b[i]);\n result += diff * diff;\n }\n return result;\n}\n/**\n * Asserts that the expression is true. Otherwise throws an error with the\n * provided message.\n *\n * ```js\n * const x = 2;\n * tf.util.assert(x === 2, 'x is not 2');\n * ```\n *\n * @param expr The expression to assert (as a boolean).\n * @param msg A function that returns the message to report when throwing an\n * error. We use a function for performance reasons.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function assert(expr, msg) {\n if (!expr) {\n throw new Error(typeof msg === 'string' ? msg : msg());\n }\n}\nexport function assertShapesMatch(shapeA, shapeB, errorMessagePrefix = '') {\n assert(arraysEqual(shapeA, shapeB), () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n}\nexport function assertNonNull(a) {\n assert(a != null, () => `The input to the tensor constructor must be a non-null value.`);\n}\n/**\n * Returns the size (number of elements) of the tensor given its shape.\n *\n * ```js\n * const shape = [3, 4, 2];\n * const size = tf.util.sizeFromShape(shape);\n * console.log(size);\n * ```\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function sizeFromShape(shape) {\n if (shape.length === 0) {\n // Scalar.\n return 1;\n }\n let size = shape[0];\n for (let i = 1; i < shape.length; i++) {\n size *= shape[i];\n }\n return size;\n}\nexport function isScalarShape(shape) {\n return shape.length === 0;\n}\nexport function arraysEqualWithNull(n1, n2) {\n if (n1 === n2) {\n return true;\n }\n if (n1 == null || n2 == null) {\n return false;\n }\n if (n1.length !== n2.length) {\n return false;\n }\n for (let i = 0; i < n1.length; i++) {\n if (n1[i] !== null && n2[i] !== null && n1[i] !== n2[i]) {\n return false;\n }\n }\n return true;\n}\nexport function arraysEqual(n1, n2) {\n if (n1 === n2) {\n return true;\n }\n if (n1 == null || n2 == null) {\n return false;\n }\n if (n1.length !== n2.length) {\n return false;\n }\n for (let i = 0; i < n1.length; i++) {\n if (n1[i] !== n2[i]) {\n return false;\n }\n }\n return true;\n}\nexport function isInt(a) {\n return a % 1 === 0;\n}\nexport function tanh(x) {\n // tslint:disable-next-line:no-any\n if (Math.tanh != null) {\n // tslint:disable-next-line:no-any\n return Math.tanh(x);\n }\n if (x === Infinity) {\n return 1;\n }\n else if (x === -Infinity) {\n return -1;\n }\n else {\n const e2x = Math.exp(2 * x);\n return (e2x - 1) / (e2x + 1);\n }\n}\nexport function sizeToSquarishShape(size) {\n const width = Math.ceil(Math.sqrt(size));\n return [width, Math.ceil(size / width)];\n}\n/**\n * Creates a new array with randomized indices to a given quantity.\n *\n * ```js\n * const randomTen = tf.util.createShuffledIndices(10);\n * console.log(randomTen);\n * ```\n *\n * @param number Quantity of how many shuffled indices to create.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function createShuffledIndices(n) {\n const shuffledIndices = new Uint32Array(n);\n for (let i = 0; i < n; ++i) {\n shuffledIndices[i] = i;\n }\n shuffle(shuffledIndices);\n return shuffledIndices;\n}\nexport function rightPad(a, size) {\n if (size <= a.length) {\n return a;\n }\n return a + ' '.repeat(size - a.length);\n}\nexport function repeatedTry(checkFn, delayFn = (counter) => 0, maxCounter, scheduleFn) {\n return new Promise((resolve, reject) => {\n let tryCount = 0;\n const tryFn = () => {\n if (checkFn()) {\n resolve();\n return;\n }\n tryCount++;\n const nextBackoff = delayFn(tryCount);\n if (maxCounter != null && tryCount >= maxCounter) {\n reject();\n return;\n }\n if (scheduleFn != null) {\n scheduleFn(tryFn, nextBackoff);\n }\n else {\n // google3 does not allow assigning another variable to setTimeout.\n // Don't refactor this so scheduleFn has a default value of setTimeout.\n setTimeout(tryFn, nextBackoff);\n }\n };\n tryFn();\n });\n}\n/**\n * Given the full size of the array and a shape that may contain -1 as the\n * implicit dimension, returns the inferred shape where -1 is replaced.\n * E.g. For shape=[2, -1, 3] and size=24, it will return [2, 4, 3].\n *\n * @param shape The shape, which may contain -1 in some dimension.\n * @param size The full size (number of elements) of the array.\n * @return The inferred shape where -1 is replaced with the inferred size.\n */\nexport function inferFromImplicitShape(shape, size) {\n let shapeProd = 1;\n let implicitIdx = -1;\n for (let i = 0; i < shape.length; ++i) {\n if (shape[i] >= 0) {\n shapeProd *= shape[i];\n }\n else if (shape[i] === -1) {\n if (implicitIdx !== -1) {\n throw Error(`Shapes can only have 1 implicit size. ` +\n `Found -1 at dim ${implicitIdx} and dim ${i}`);\n }\n implicitIdx = i;\n }\n else if (shape[i] < 0) {\n throw Error(`Shapes can not be < 0. Found ${shape[i]} at dim ${i}`);\n }\n }\n if (implicitIdx === -1) {\n if (size > 0 && size !== shapeProd) {\n throw Error(`Size(${size}) must match the product of shape ${shape}`);\n }\n return shape;\n }\n if (shapeProd === 0) {\n throw Error(`Cannot infer the missing size in [${shape}] when ` +\n `there are 0 elements`);\n }\n if (size % shapeProd !== 0) {\n throw Error(`The implicit shape can't be a fractional number. ` +\n `Got ${size} / ${shapeProd}`);\n }\n const newShape = shape.slice();\n newShape[implicitIdx] = size / shapeProd;\n return newShape;\n}\nexport function parseAxisParam(axis, shape) {\n const rank = shape.length;\n // Normalize input\n axis = axis == null ? shape.map((s, i) => i) : [].concat(axis);\n // Check for valid range\n assert(axis.every(ax => ax >= -rank && ax < rank), () => `All values in axis param must be in range [-${rank}, ${rank}) but ` +\n `got axis ${axis}`);\n // Check for only integers\n assert(axis.every(ax => isInt(ax)), () => `All values in axis param must be integers but ` +\n `got axis ${axis}`);\n // Handle negative axis.\n return axis.map(a => a < 0 ? rank + a : a);\n}\n/** Reduces the shape by removing all dimensions of shape 1. */\nexport function squeezeShape(shape, axis) {\n const newShape = [];\n const keptDims = [];\n const isEmptyArray = axis != null && Array.isArray(axis) && axis.length === 0;\n const axes = (axis == null || isEmptyArray) ?\n null :\n parseAxisParam(axis, shape).sort();\n let j = 0;\n for (let i = 0; i < shape.length; ++i) {\n if (axes != null) {\n if (axes[j] === i && shape[i] !== 1) {\n throw new Error(`Can't squeeze axis ${i} since its dim '${shape[i]}' is not 1`);\n }\n if ((axes[j] == null || axes[j] > i) && shape[i] === 1) {\n newShape.push(shape[i]);\n keptDims.push(i);\n }\n if (axes[j] <= i) {\n j++;\n }\n }\n if (shape[i] !== 1) {\n newShape.push(shape[i]);\n keptDims.push(i);\n }\n }\n return { newShape, keptDims };\n}\nexport function getTypedArrayFromDType(dtype, size) {\n return getArrayFromDType(dtype, size);\n}\nexport function getArrayFromDType(dtype, size) {\n let values = null;\n if (dtype == null || dtype === 'float32') {\n values = new Float32Array(size);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(size);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(size);\n }\n else if (dtype === 'string') {\n values = new Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n return values;\n}\nexport function checkConversionForErrors(vals, dtype) {\n for (let i = 0; i < vals.length; i++) {\n const num = vals[i];\n if (isNaN(num) || !isFinite(num)) {\n throw Error(`A tensor of type ${dtype} being uploaded contains ${num}.`);\n }\n }\n}\n/** Returns true if the dtype is valid. */\nexport function isValidDtype(dtype) {\n return dtype === 'bool' || dtype === 'complex64' || dtype === 'float32' ||\n dtype === 'int32' || dtype === 'string';\n}\n/**\n * Returns true if the new type can't encode the old type without loss of\n * precision.\n */\nexport function hasEncodingLoss(oldType, newType) {\n if (newType === 'complex64') {\n return false;\n }\n if (newType === 'float32' && oldType !== 'complex64') {\n return false;\n }\n if (newType === 'int32' && oldType !== 'float32' && oldType !== 'complex64') {\n return false;\n }\n if (newType === 'bool' && oldType === 'bool') {\n return false;\n }\n return true;\n}\nexport function bytesPerElement(dtype) {\n if (dtype === 'float32' || dtype === 'int32') {\n return 4;\n }\n else if (dtype === 'complex64') {\n return 8;\n }\n else if (dtype === 'bool') {\n return 1;\n }\n else {\n throw new Error(`Unknown dtype ${dtype}`);\n }\n}\n/**\n * Returns the approximate number of bytes allocated in the string array - 2\n * bytes per character. Computing the exact bytes for a native string in JS\n * is not possible since it depends on the encoding of the html page that\n * serves the website.\n */\nexport function bytesFromStringArray(arr) {\n if (arr == null) {\n return 0;\n }\n let bytes = 0;\n arr.forEach(x => bytes += x.length);\n return bytes;\n}\n/** Returns true if the value is a string. */\nexport function isString(value) {\n return typeof value === 'string' || value instanceof String;\n}\nexport function isBoolean(value) {\n return typeof value === 'boolean';\n}\nexport function isNumber(value) {\n return typeof value === 'number';\n}\nexport function inferDtype(values) {\n if (Array.isArray(values)) {\n return inferDtype(values[0]);\n }\n if (values instanceof Float32Array) {\n return 'float32';\n }\n else if (values instanceof Int32Array || values instanceof Uint8Array ||\n values instanceof Uint8ClampedArray) {\n return 'int32';\n }\n else if (isNumber(values)) {\n return 'float32';\n }\n else if (isString(values)) {\n return 'string';\n }\n else if (isBoolean(values)) {\n return 'bool';\n }\n return 'float32';\n}\nexport function isFunction(f) {\n return !!(f && f.constructor && f.call && f.apply);\n}\nexport function nearestDivisor(size, start) {\n for (let i = start; i < size; ++i) {\n if (size % i === 0) {\n return i;\n }\n }\n return size;\n}\nexport function computeStrides(shape) {\n const rank = shape.length;\n if (rank < 2) {\n return [];\n }\n // Last dimension has implicit stride of 1, thus having D-1 (instead of D)\n // strides.\n const strides = new Array(rank - 1);\n strides[rank - 2] = shape[rank - 1];\n for (let i = rank - 3; i >= 0; --i) {\n strides[i] = strides[i + 1] * shape[i + 1];\n }\n return strides;\n}\nfunction createNestedArray(offset, shape, a, isComplex = false) {\n const ret = new Array();\n if (shape.length === 1) {\n const d = shape[0] * (isComplex ? 2 : 1);\n for (let i = 0; i < d; i++) {\n ret[i] = a[offset + i];\n }\n }\n else {\n const d = shape[0];\n const rest = shape.slice(1);\n const len = rest.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1);\n for (let i = 0; i < d; i++) {\n ret[i] = createNestedArray(offset + i * len, rest, a, isComplex);\n }\n }\n return ret;\n}\n// Provide a nested array of TypedArray in given shape.\nexport function toNestedArray(shape, a, isComplex = false) {\n if (shape.length === 0) {\n // Scalar type should return a single number.\n return a[0];\n }\n const size = shape.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1);\n if (size === 0) {\n // A tensor with shape zero should be turned into empty list.\n return [];\n }\n if (size !== a.length) {\n throw new Error(`[${shape}] does not match the input size ${a.length}${isComplex ? ' for a complex tensor' : ''}.`);\n }\n return createNestedArray(0, shape, a, isComplex);\n}\nexport function convertBackendValuesAndArrayBuffer(data, dtype) {\n // If is type Uint8Array[], return it directly.\n if (Array.isArray(data)) {\n return data;\n }\n if (dtype === 'float32') {\n return data instanceof Float32Array ? data : new Float32Array(data);\n }\n else if (dtype === 'int32') {\n return data instanceof Int32Array ? data : new Int32Array(data);\n }\n else if (dtype === 'bool' || dtype === 'string') {\n return Uint8Array.from(new Int32Array(data));\n }\n else {\n throw new Error(`Unknown dtype ${dtype}`);\n }\n}\nexport function makeOnesTypedArray(size, dtype) {\n const array = makeZerosTypedArray(size, dtype);\n for (let i = 0; i < array.length; i++) {\n array[i] = 1;\n }\n return array;\n}\nexport function makeZerosTypedArray(size, dtype) {\n if (dtype == null || dtype === 'float32' || dtype === 'complex64') {\n return new Float32Array(size);\n }\n else if (dtype === 'int32') {\n return new Int32Array(size);\n }\n else if (dtype === 'bool') {\n return new Uint8Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\n/**\n * Make nested `TypedArray` filled with zeros.\n * @param shape The shape information for the nested array.\n * @param dtype dtype of the array element.\n */\nexport function makeZerosNestedTypedArray(shape, dtype) {\n const size = shape.reduce((prev, curr) => prev * curr, 1);\n if (dtype == null || dtype === 'float32') {\n return toNestedArray(shape, new Float32Array(size));\n }\n else if (dtype === 'int32') {\n return toNestedArray(shape, new Int32Array(size));\n }\n else if (dtype === 'bool') {\n return toNestedArray(shape, new Uint8Array(size));\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\nexport function assertNonNegativeIntegerDimensions(shape) {\n shape.forEach(dimSize => {\n assert(Number.isInteger(dimSize) && dimSize >= 0, () => `Tensor must have a shape comprised of positive integers but got ` +\n `shape [${shape}].`);\n });\n}\n/**\n * Computes flat index for a given location (multidimentionsal index) in a\n * Tensor/multidimensional array.\n *\n * @param locs Location in the tensor.\n * @param rank Rank of the tensor.\n * @param strides Tensor strides.\n */\nexport function locToIndex(locs, rank, strides) {\n if (rank === 0) {\n return 0;\n }\n else if (rank === 1) {\n return locs[0];\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += strides[i] * locs[i];\n }\n return index;\n}\n/**\n * Computes the location (multidimensional index) in a\n * tensor/multidimentional array for a given flat index.\n *\n * @param index Index in flat array.\n * @param rank Rank of tensor.\n * @param strides Strides of tensor.\n */\nexport function indexToLoc(index, rank, strides) {\n if (rank === 0) {\n return [];\n }\n else if (rank === 1) {\n return [index];\n }\n const locs = new Array(rank);\n for (let i = 0; i < locs.length - 1; ++i) {\n locs[i] = Math.floor(index / strides[i]);\n index -= locs[i] * strides[i];\n }\n locs[locs.length - 1] = index;\n return locs;\n}\n/**\n * This method asserts whether an object is a Promise instance.\n * @param object\n */\n// tslint:disable-next-line: no-any\nexport function isPromise(object) {\n // We chose to not use 'obj instanceOf Promise' for two reasons:\n // 1. It only reliably works for es6 Promise, not other Promise\n // implementations.\n // 2. It doesn't work with framework that uses zone.js. zone.js monkey\n // patch the async calls, so it is possible the obj (patched) is\n // comparing to a pre-patched Promise.\n return object && object.then && typeof object.then === 'function';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbF9iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy91dGlsX2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUg7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxPQUFPLENBQUMsS0FDWTtJQUNsQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLHdDQUF3QztJQUN4QyxPQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDbEIsc0JBQXNCO1FBQ3RCLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsd0JBQXdCO1FBQ3hCLE9BQU8sRUFBRSxDQUFDO1FBQ1Ysb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdCO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxZQUFZO0FBQ3hCLGtDQUFrQztBQUNsQyxLQUFnRDtBQUNoRCxrQ0FBa0M7QUFDbEMsTUFBaUQ7SUFDbkQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FDWCxpREFBaUQ7WUFDakQsMEJBQTBCLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDeEMsMkJBQTJCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCx3Q0FBd0M7SUFDeEMsT0FBTyxPQUFPLEdBQUcsQ0FBQyxF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QUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDeEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzlCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7R0FHRztBQUNILG1DQUFtQztBQUNuQyxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQVc7SUFDbkMsaUVBQWlFO0lBQ2pFLGdFQUFnRTtJQUNoRSxvQkFBb0I7SUFDcEIsdUVBQXVFO0lBQ3ZFLGlFQUFpRTtJQUNqRSx1Q0FBdUM7SUFDdkMsT0FBTyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QmFja2VuZFZhbHVlcywgRGF0YVR5cGUsIERhdGFUeXBlTWFwLCBGbGF0VmVjdG9yLCBOdW1lcmljRGF0YVR5cGUsIFRlbnNvckxpa2UsIFR5cGVkQXJyYXksIFdlYkdMRGF0YSwgV2ViR1BVRGF0YX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2h1ZmZsZXMgdGhlIGFycmF5IGluLXBsYWNlIHVzaW5nIEZpc2hlci1ZYXRlcyBhbGdvcml0aG0uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSBbMSwgMiwgMywgNCwgNV07XG4gKiB0Zi51dGlsLnNodWZmbGUoYSk7XG4gKiBjb25zb2xlLmxvZyhhKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZSBpbi1wbGFjZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVXRpbCcsIG5hbWVzcGFjZTogJ3V0aWwnfVxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZShhcnJheTogYW55W118VWludDMyQXJyYXl8SW50MzJBcnJheXxcbiAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSk6IHZvaWQge1xuICBsZXQgY291bnRlciA9IGFycmF5Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgLy8gV2hpbGUgdGhlcmUgYXJlIGVsZW1lbnRzIGluIHRoZSBhcnJheVxuICB3aGlsZSAoY291bnRlciA+IDApIHtcbiAgICAvLyBQaWNrIGEgcmFuZG9tIGluZGV4XG4gICAgaW5kZXggPSAoTWF0aC5yYW5kb20oKSAqIGNvdW50ZXIpIHwgMDtcbiAgICAvLyBEZWNyZWFzZSBjb3VudGVyIGJ5IDFcbiAgICBjb3VudGVyLS07XG4gICAgLy8gQW5kIHN3YXAgdGhlIGxhc3QgZWxlbWVudCB3aXRoIGl0XG4gICAgc3dhcChhcnJheSwgY291bnRlciwgaW5kZXgpO1xuICB9XG59XG5cbi8qKlxuICogU2h1ZmZsZXMgdHdvIGFycmF5cyBpbi1wbGFjZSB0aGUgc2FtZSB3YXkgdXNpbmcgRmlzaGVyLVlhdGVzIGFsZ29yaXRobS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IFsxLDIsMyw0LDVdO1xuICogY29uc3QgYiA9IFsxMSwyMiwzMyw0NCw1NV07XG4gKiB0Zi51dGlsLnNodWZmbGVDb21ibyhhLCBiKTtcbiAqIGNvbnNvbGUubG9nKGEsIGIpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGFycmF5IFRoZSBmaXJzdCBhcnJheSB0byBzaHVmZmxlIGluLXBsYWNlLlxuICogQHBhcmFtIGFycmF5MiBUaGUgc2Vjb25kIGFycmF5IHRvIHNodWZmbGUgaW4tcGxhY2Ugd2l0aCB0aGUgc2FtZSBwZXJtdXRhdGlvblxuICogICAgIGFzIHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVXRpbCcsIG5hbWVzcGFjZTogJ3V0aWwnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZUNvbWJvKFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICBhcnJheTogYW55W118VWludDMyQXJyYXl8SW50MzJBcnJheXxGbG9hdDMyQXJyYXksXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIGFycmF5MjogYW55W118VWludDMyQXJyYXl8SW50MzJBcnJheXxGbG9hdDMyQXJyYXkpOiB2b2lkIHtcbiAgaWYgKGFycmF5Lmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFycmF5IHNpemVzIG11c3QgbWF0Y2ggdG8gYmUgc2h1ZmZsZWQgdG9nZXRoZXIgYCArXG4gICAgICAgIGBGaXJzdCBhcnJheSBsZW5ndGggd2FzICR7YXJyYXkubGVuZ3RofWAgK1xuICAgICAgICBgU2Vjb25kIGFycmF5IGxlbmd0aCB3YXMgJHthcnJheTIubGVuZ3RofWApO1xuICB9XG4gIGxldCBjb3VudGVyID0gYXJyYXkubGVuZ3RoO1xuICBsZXQgaW5kZXggPSAwO1xuICAvLyBXaGlsZSB0aGVyZSBhcmUgZWxlbWVudHMgaW4gdGhlIGFycmF5XG4gIHdoaWxlIChjb3VudGVyID4gMCkge1xuICAgIC8vIFBpY2sgYSByYW5kb20gaW5kZXhcbiAgICBpbmRleCA9IChNYXRoLnJhbmRvbSgpICogY291bnRlcikgfCAwO1xuICAgIC8vIERlY3JlYXNlIGNvdW50ZXIgYnkgMVxuICAgIGNvdW50ZXItLTtcbiAgICAvLyBBbmQgc3dhcCB0aGUgbGFzdCBlbGVtZW50IG9mIGVhY2ggYXJyYXkgd2l0aCBpdFxuICAgIHN3YXAoYXJyYXksIGNvdW50ZXIsIGluZGV4KTtcbiAgICBzd2FwKGFycmF5MiwgY291bnRlciwgaW5kZXgpO1xuICB9XG59XG5cbi8qKiBDbGFtcHMgYSB2YWx1ZSB0byBhIHNwZWNpZmllZCByYW5nZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChtaW46IG51bWJlciwgeDogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKHgsIG1heCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVhcmVzdExhcmdlckV2ZW4odmFsOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdmFsICUgMiA9PT0gMCA/IHZhbCA6IHZhbCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzd2FwPFQ+KFxuICAgIG9iamVjdDoge1tpbmRleDogbnVtYmVyXTogVH0sIGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlcikge1xuICBjb25zdCB0ZW1wID0gb2JqZWN0W2xlZnRdO1xuICBvYmplY3RbbGVmdF0gPSBvYmplY3RbcmlnaHRdO1xuICBvYmplY3RbcmlnaHRdID0gdGVtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bShhcnI6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgbGV0IHN1bSA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgc3VtICs9IGFycltpXTtcbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzYW1wbGUgZnJvbSBhIHVuaWZvcm0gW2EsIGIpIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBAcGFyYW0gYSBUaGUgbWluaW11bSBzdXBwb3J0IChpbmNsdXNpdmUpLlxuICogQHBhcmFtIGIgVGhlIG1heGltdW0gc3VwcG9ydCAoZXhjbHVzaXZlKS5cbiAqIEByZXR1cm4gQSBwc2V1ZG9yYW5kb20gbnVtYmVyIG9uIHRoZSBoYWxmLW9wZW4gaW50ZXJ2YWwgW2EsYikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kVW5pZm9ybShhOiBudW1iZXIsIGI6IG51bWJlcikge1xuICBjb25zdCByID0gTWF0aC5yYW5kb20oKTtcbiAgcmV0dXJuIChiICogcikgKyAoMSAtIHIpICogYTtcbn1cblxuLyoqIFJldHVybnMgdGhlIHNxdWFyZWQgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzdFNxdWFyZWQoYTogRmxhdFZlY3RvciwgYjogRmxhdFZlY3Rvcik6IG51bWJlciB7XG4gIGxldCByZXN1bHQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkaWZmID0gTnVtYmVyKGFbaV0pIC0gTnVtYmVyKGJbaV0pO1xuICAgIHJlc3VsdCArPSBkaWZmICogZGlmZjtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyB0cnVlLiBPdGhlcndpc2UgdGhyb3dzIGFuIGVycm9yIHdpdGggdGhlXG4gKiBwcm92aWRlZCBtZXNzYWdlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gMjtcbiAqIHRmLnV0aWwuYXNzZXJ0KHggPT09IDIsICd4IGlzIG5vdCAyJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZXhwciBUaGUgZXhwcmVzc2lvbiB0byBhc3NlcnQgKGFzIGEgYm9vbGVhbikuXG4gKiBAcGFyYW0gbXNnIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIHJlcG9ydCB3aGVuIHRocm93aW5nIGFuXG4gKiAgICAgZXJyb3IuIFdlIHVzZSBhIGZ1bmN0aW9uIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdVdGlsJywgbmFtZXNwYWNlOiAndXRpbCd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoZXhwcjogYm9vbGVhbiwgbXNnOiAoKSA9PiBzdHJpbmcpIHtcbiAgaWYgKCFleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnID8gbXNnIDogbXNnKCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRTaGFwZXNNYXRjaChcbiAgICBzaGFwZUE6IG51bWJlcltdLCBzaGFwZUI6IG51bWJlcltdLCBlcnJvck1lc3NhZ2VQcmVmaXggPSAnJyk6IHZvaWQge1xuICBhc3NlcnQoXG4gICAgICBhcnJheXNFcXVhbChzaGFwZUEsIHNoYXBlQiksXG4gICAgICAoKSA9PiBlcnJvck1lc3NhZ2VQcmVmaXggKyBgIFNoYXBlcyAke3NoYXBlQX0gYW5kICR7c2hhcGVCfSBtdXN0IG1hdGNoYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb25OdWxsKGE6IFRlbnNvckxpa2UpOiB2b2lkIHtcbiAgYXNzZXJ0KFxuICAgICAgYSAhPSBudWxsLFxuICAgICAgKCkgPT4gYFRoZSBpbnB1dCB0byB0aGUgdGVuc29yIGNvbnN0cnVjdG9yIG11c3QgYmUgYSBub24tbnVsbCB2YWx1ZS5gKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaXplIChudW1iZXIgb2YgZWxlbWVudHMpIG9mIHRoZSB0ZW5zb3IgZ2l2ZW4gaXRzIHNoYXBlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBzaGFwZSA9IFszLCA0LCAyXTtcbiAqIGNvbnN0IHNpemUgPSB0Zi51dGlsLnNpemVGcm9tU2hhcGUoc2hhcGUpO1xuICogY29uc29sZS5sb2coc2l6ZSk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVXRpbCcsIG5hbWVzcGFjZTogJ3V0aWwnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUZyb21TaGFwZShzaGFwZTogbnVtYmVyW10pOiBudW1iZXIge1xuICBpZiAoc2hhcGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gU2NhbGFyLlxuICAgIHJldHVybiAxO1xuICB9XG4gIGxldCBzaXplID0gc2hhcGVbMF07XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgc2hhcGUubGVuZ3RoOyBpKyspIHtcbiAgICBzaXplICo9IHNoYXBlW2ldO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2FsYXJTaGFwZShzaGFwZTogbnVtYmVyW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIHNoYXBlLmxlbmd0aCA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5c0VxdWFsV2l0aE51bGwobjE6IG51bWJlcltdLCBuMjogbnVtYmVyW10pIHtcbiAgaWYgKG4xID09PSBuMikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKG4xID09IG51bGwgfHwgbjIgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuMS5sZW5ndGggIT09IG4yLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobjFbaV0gIT09IG51bGwgJiYgbjJbaV0gIT09IG51bGwgJiYgbjFbaV0gIT09IG4yW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlzRXF1YWwobjE6IEZsYXRWZWN0b3IsIG4yOiBGbGF0VmVjdG9yKSB7XG4gIGlmIChuMSA9PT0gbjIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAobjEgPT0gbnVsbCB8fCBuMiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG4xLmxlbmd0aCAhPT0gbjIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobjFbaV0gIT09IG4yW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnQoYTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBhICUgMSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhbmgoeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBpZiAoKE1hdGggYXMgYW55KS50YW5oICE9IG51bGwpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgcmV0dXJuIChNYXRoIGFzIGFueSkudGFuaCh4KTtcbiAgfVxuICBpZiAoeCA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmICh4ID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZTJ4ID0gTWF0aC5leHAoMiAqIHgpO1xuICAgIHJldHVybiAoZTJ4IC0gMSkgLyAoZTJ4ICsgMSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVUb1NxdWFyaXNoU2hhcGUoc2l6ZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IHdpZHRoID0gTWF0aC5jZWlsKE1hdGguc3FydChzaXplKSk7XG4gIHJldHVybiBbd2lkdGgsIE1hdGguY2VpbChzaXplIC8gd2lkdGgpXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IHdpdGggcmFuZG9taXplZCBpbmRpY2VzIHRvIGEgZ2l2ZW4gcXVhbnRpdHkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJhbmRvbVRlbiA9IHRmLnV0aWwuY3JlYXRlU2h1ZmZsZWRJbmRpY2VzKDEwKTtcbiAqIGNvbnNvbGUubG9nKHJhbmRvbVRlbik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbnVtYmVyIFF1YW50aXR5IG9mIGhvdyBtYW55IHNodWZmbGVkIGluZGljZXMgdG8gY3JlYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdVdGlsJywgbmFtZXNwYWNlOiAndXRpbCd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaHVmZmxlZEluZGljZXMobjogbnVtYmVyKTogVWludDMyQXJyYXkge1xuICBjb25zdCBzaHVmZmxlZEluZGljZXMgPSBuZXcgVWludDMyQXJyYXkobik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgc2h1ZmZsZWRJbmRpY2VzW2ldID0gaTtcbiAgfVxuICBzaHVmZmxlKHNodWZmbGVkSW5kaWNlcyk7XG4gIHJldHVybiBzaHVmZmxlZEluZGljZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFBhZChhOiBzdHJpbmcsIHNpemU6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChzaXplIDw9IGEubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cbiAgcmV0dXJuIGEgKyAnICcucmVwZWF0KHNpemUgLSBhLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZFRyeShcbiAgICBjaGVja0ZuOiAoKSA9PiBib29sZWFuLCBkZWxheUZuID0gKGNvdW50ZXI6IG51bWJlcikgPT4gMCxcbiAgICBtYXhDb3VudGVyPzogbnVtYmVyLFxuICAgIHNjaGVkdWxlRm4/OiAoZnVuY3Rpb25SZWY6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKSA9PlxuICAgICAgICB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHRyeUNvdW50ID0gMDtcblxuICAgIGNvbnN0IHRyeUZuID0gKCkgPT4ge1xuICAgICAgaWYgKGNoZWNrRm4oKSkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5Q291bnQrKztcblxuICAgICAgY29uc3QgbmV4dEJhY2tvZmYgPSBkZWxheUZuKHRyeUNvdW50KTtcblxuICAgICAgaWYgKG1heENvdW50ZXIgIT0gbnVsbCAmJiB0cnlDb3VudCA+PSBtYXhDb3VudGVyKSB7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2hlZHVsZUZuICE9IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVGbih0cnlGbiwgbmV4dEJhY2tvZmYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ29vZ2xlMyBkb2VzIG5vdCBhbGxvdyBhc3NpZ25pbmcgYW5vdGhlciB2YXJpYWJsZSB0byBzZXRUaW1lb3V0LlxuICAgICAgICAvLyBEb24ndCByZWZhY3RvciB0aGlzIHNvIHNjaGVkdWxlRm4gaGFzIGEgZGVmYXVsdCB2YWx1ZSBvZiBzZXRUaW1lb3V0LlxuICAgICAgICBzZXRUaW1lb3V0KHRyeUZuLCBuZXh0QmFja29mZik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeUZuKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdpdmVuIHRoZSBmdWxsIHNpemUgb2YgdGhlIGFycmF5IGFuZCBhIHNoYXBlIHRoYXQgbWF5IGNvbnRhaW4gLTEgYXMgdGhlXG4gKiBpbXBsaWNpdCBkaW1lbnNpb24sIHJldHVybnMgdGhlIGluZmVycmVkIHNoYXBlIHdoZXJlIC0xIGlzIHJlcGxhY2VkLlxuICogRS5nLiBGb3Igc2hhcGU9WzIsIC0xLCAzXSBhbmQgc2l6ZT0yNCwgaXQgd2lsbCByZXR1cm4gWzIsIDQsIDNdLlxuICpcbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUsIHdoaWNoIG1heSBjb250YWluIC0xIGluIHNvbWUgZGltZW5zaW9uLlxuICogQHBhcmFtIHNpemUgVGhlIGZ1bGwgc2l6ZSAobnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUgYXJyYXkuXG4gKiBAcmV0dXJuIFRoZSBpbmZlcnJlZCBzaGFwZSB3aGVyZSAtMSBpcyByZXBsYWNlZCB3aXRoIHRoZSBpbmZlcnJlZCBzaXplLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJGcm9tSW1wbGljaXRTaGFwZShcbiAgICBzaGFwZTogbnVtYmVyW10sIHNpemU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgbGV0IHNoYXBlUHJvZCA9IDE7XG4gIGxldCBpbXBsaWNpdElkeCA9IC0xO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoc2hhcGVbaV0gPj0gMCkge1xuICAgICAgc2hhcGVQcm9kICo9IHNoYXBlW2ldO1xuICAgIH0gZWxzZSBpZiAoc2hhcGVbaV0gPT09IC0xKSB7XG4gICAgICBpZiAoaW1wbGljaXRJZHggIT09IC0xKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgYFNoYXBlcyBjYW4gb25seSBoYXZlIDEgaW1wbGljaXQgc2l6ZS4gYCArXG4gICAgICAgICAgICBgRm91bmQgLTEgYXQgZGltICR7aW1wbGljaXRJZHh9IGFuZCBkaW0gJHtpfWApO1xuICAgICAgfVxuICAgICAgaW1wbGljaXRJZHggPSBpO1xuICAgIH0gZWxzZSBpZiAoc2hhcGVbaV0gPCAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgU2hhcGVzIGNhbiBub3QgYmUgPCAwLiBGb3VuZCAke3NoYXBlW2ldfSBhdCBkaW0gJHtpfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbXBsaWNpdElkeCA9PT0gLTEpIHtcbiAgICBpZiAoc2l6ZSA+IDAgJiYgc2l6ZSAhPT0gc2hhcGVQcm9kKSB7XG4gICAgICB0aHJvdyBFcnJvcihgU2l6ZSgke3NpemV9KSBtdXN0IG1hdGNoIHRoZSBwcm9kdWN0IG9mIHNoYXBlICR7c2hhcGV9YCk7XG4gICAgfVxuICAgIHJldHVybiBzaGFwZTtcbiAgfVxuXG4gIGlmIChzaGFwZVByb2QgPT09IDApIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBpbmZlciB0aGUgbWlzc2luZyBzaXplIGluIFske3NoYXBlfV0gd2hlbiBgICtcbiAgICAgICAgYHRoZXJlIGFyZSAwIGVsZW1lbnRzYCk7XG4gIH1cbiAgaWYgKHNpemUgJSBzaGFwZVByb2QgIT09IDApIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYFRoZSBpbXBsaWNpdCBzaGFwZSBjYW4ndCBiZSBhIGZyYWN0aW9uYWwgbnVtYmVyLiBgICtcbiAgICAgICAgYEdvdCAke3NpemV9IC8gJHtzaGFwZVByb2R9YCk7XG4gIH1cblxuICBjb25zdCBuZXdTaGFwZSA9IHNoYXBlLnNsaWNlKCk7XG4gIG5ld1NoYXBlW2ltcGxpY2l0SWR4XSA9IHNpemUgLyBzaGFwZVByb2Q7XG4gIHJldHVybiBuZXdTaGFwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXhpc1BhcmFtKFxuICAgIGF4aXM6IG51bWJlcnxudW1iZXJbXSwgc2hhcGU6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCByYW5rID0gc2hhcGUubGVuZ3RoO1xuXG4gIC8vIE5vcm1hbGl6ZSBpbnB1dFxuICBheGlzID0gYXhpcyA9PSBudWxsID8gc2hhcGUubWFwKChzLCBpKSA9PiBpKSA6IFtdLmNvbmNhdChheGlzKTtcblxuICAvLyBDaGVjayBmb3IgdmFsaWQgcmFuZ2VcbiAgYXNzZXJ0KFxuICAgICAgYXhpcy5ldmVyeShheCA9PiBheCA+PSAtcmFuayAmJiBheCA8IHJhbmspLFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgQWxsIHZhbHVlcyBpbiBheGlzIHBhcmFtIG11c3QgYmUgaW4gcmFuZ2UgWy0ke3Jhbmt9LCAke3Jhbmt9KSBidXQgYCArXG4gICAgICAgICAgYGdvdCBheGlzICR7YXhpc31gKTtcblxuICAvLyBDaGVjayBmb3Igb25seSBpbnRlZ2Vyc1xuICBhc3NlcnQoXG4gICAgICBheGlzLmV2ZXJ5KGF4ID0+IGlzSW50KGF4KSksXG4gICAgICAoKSA9PiBgQWxsIHZhbHVlcyBpbiBheGlzIHBhcmFtIG11c3QgYmUgaW50ZWdlcnMgYnV0IGAgK1xuICAgICAgICAgIGBnb3QgYXhpcyAke2F4aXN9YCk7XG5cbiAgLy8gSGFuZGxlIG5lZ2F0aXZlIGF4aXMuXG4gIHJldHVybiBheGlzLm1hcChhID0+IGEgPCAwID8gcmFuayArIGEgOiBhKTtcbn1cblxuLyoqIFJlZHVjZXMgdGhlIHNoYXBlIGJ5IHJlbW92aW5nIGFsbCBkaW1lbnNpb25zIG9mIHNoYXBlIDEuICovXG5leHBvcnQgZnVuY3Rpb24gc3F1ZWV6ZVNoYXBlKHNoYXBlOiBudW1iZXJbXSwgYXhpcz86IG51bWJlcltdKTpcbiAgICB7bmV3U2hhcGU6IG51bWJlcltdLCBrZXB0RGltczogbnVtYmVyW119IHtcbiAgY29uc3QgbmV3U2hhcGU6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGtlcHREaW1zOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBpc0VtcHR5QXJyYXkgPSBheGlzICE9IG51bGwgJiYgQXJyYXkuaXNBcnJheShheGlzKSAmJiBheGlzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgYXhlcyA9IChheGlzID09IG51bGwgfHwgaXNFbXB0eUFycmF5KSA/XG4gICAgICBudWxsIDpcbiAgICAgIHBhcnNlQXhpc1BhcmFtKGF4aXMsIHNoYXBlKS5zb3J0KCk7XG4gIGxldCBqID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChheGVzICE9IG51bGwpIHtcbiAgICAgIGlmIChheGVzW2pdID09PSBpICYmIHNoYXBlW2ldICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW4ndCBzcXVlZXplIGF4aXMgJHtpfSBzaW5jZSBpdHMgZGltICcke3NoYXBlW2ldfScgaXMgbm90IDFgKTtcbiAgICAgIH1cbiAgICAgIGlmICgoYXhlc1tqXSA9PSBudWxsIHx8IGF4ZXNbal0gPiBpKSAmJiBzaGFwZVtpXSA9PT0gMSkge1xuICAgICAgICBuZXdTaGFwZS5wdXNoKHNoYXBlW2ldKTtcbiAgICAgICAga2VwdERpbXMucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIGlmIChheGVzW2pdIDw9IGkpIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hhcGVbaV0gIT09IDEpIHtcbiAgICAgIG5ld1NoYXBlLnB1c2goc2hhcGVbaV0pO1xuICAgICAga2VwdERpbXMucHVzaChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtuZXdTaGFwZSwga2VwdERpbXN9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZWRBcnJheUZyb21EVHlwZTxEIGV4dGVuZHMgTnVtZXJpY0RhdGFUeXBlPihcbiAgICBkdHlwZTogRCwgc2l6ZTogbnVtYmVyKTogRGF0YVR5cGVNYXBbRF0ge1xuICByZXR1cm4gZ2V0QXJyYXlGcm9tRFR5cGU8RD4oZHR5cGUsIHNpemUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJyYXlGcm9tRFR5cGU8RCBleHRlbmRzIERhdGFUeXBlPihcbiAgICBkdHlwZTogRCwgc2l6ZTogbnVtYmVyKTogRGF0YVR5cGVNYXBbRF0ge1xuICBsZXQgdmFsdWVzID0gbnVsbDtcbiAgaWYgKGR0eXBlID09IG51bGwgfHwgZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgIHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICB2YWx1ZXMgPSBuZXcgSW50MzJBcnJheShzaXplKTtcbiAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgdmFsdWVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWVzID0gbmV3IEFycmF5PHN0cmluZz4oc2l6ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRhdGEgdHlwZSAke2R0eXBlfWApO1xuICB9XG4gIHJldHVybiB2YWx1ZXMgYXMgRGF0YVR5cGVNYXBbRF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbnZlcnNpb25Gb3JFcnJvcnM8RCBleHRlbmRzIERhdGFUeXBlPihcbiAgICB2YWxzOiBEYXRhVHlwZU1hcFtEXXxudW1iZXJbXSwgZHR5cGU6IEQpOiB2b2lkIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbnVtID0gdmFsc1tpXSBhcyBudW1iZXI7XG4gICAgaWYgKGlzTmFOKG51bSkgfHwgIWlzRmluaXRlKG51bSkpIHtcbiAgICAgIHRocm93IEVycm9yKGBBIHRlbnNvciBvZiB0eXBlICR7ZHR5cGV9IGJlaW5nIHVwbG9hZGVkIGNvbnRhaW5zICR7bnVtfS5gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZHR5cGUgaXMgdmFsaWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZER0eXBlKGR0eXBlOiBEYXRhVHlwZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZHR5cGUgPT09ICdib29sJyB8fCBkdHlwZSA9PT0gJ2NvbXBsZXg2NCcgfHwgZHR5cGUgPT09ICdmbG9hdDMyJyB8fFxuICAgICAgZHR5cGUgPT09ICdpbnQzMicgfHwgZHR5cGUgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmV3IHR5cGUgY2FuJ3QgZW5jb2RlIHRoZSBvbGQgdHlwZSB3aXRob3V0IGxvc3Mgb2ZcbiAqIHByZWNpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0VuY29kaW5nTG9zcyhvbGRUeXBlOiBEYXRhVHlwZSwgbmV3VHlwZTogRGF0YVR5cGUpOiBib29sZWFuIHtcbiAgaWYgKG5ld1R5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChuZXdUeXBlID09PSAnZmxvYXQzMicgJiYgb2xkVHlwZSAhPT0gJ2NvbXBsZXg2NCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG5ld1R5cGUgPT09ICdpbnQzMicgJiYgb2xkVHlwZSAhPT0gJ2Zsb2F0MzInICYmIG9sZFR5cGUgIT09ICdjb21wbGV4NjQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChuZXdUeXBlID09PSAnYm9vbCcgJiYgb2xkVHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnl0ZXNQZXJFbGVtZW50KGR0eXBlOiBEYXRhVHlwZSk6IG51bWJlciB7XG4gIGlmIChkdHlwZSA9PT0gJ2Zsb2F0MzInIHx8IGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgcmV0dXJuIDQ7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgcmV0dXJuIDg7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdib29sJykge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkdHlwZSAke2R0eXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBpbiB0aGUgc3RyaW5nIGFycmF5IC0gMlxuICogYnl0ZXMgcGVyIGNoYXJhY3Rlci4gQ29tcHV0aW5nIHRoZSBleGFjdCBieXRlcyBmb3IgYSBuYXRpdmUgc3RyaW5nIGluIEpTXG4gKiBpcyBub3QgcG9zc2libGUgc2luY2UgaXQgZGVwZW5kcyBvbiB0aGUgZW5jb2Rpbmcgb2YgdGhlIGh0bWwgcGFnZSB0aGF0XG4gKiBzZXJ2ZXMgdGhlIHdlYnNpdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlc0Zyb21TdHJpbmdBcnJheShhcnI6IFVpbnQ4QXJyYXlbXSk6IG51bWJlciB7XG4gIGlmIChhcnIgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGxldCBieXRlcyA9IDA7XG4gIGFyci5mb3JFYWNoKHggPT4gYnl0ZXMgKz0geC5sZW5ndGgpO1xuICByZXR1cm4gYnl0ZXM7XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiB7fSk6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiB7fSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWx1ZToge30pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlckR0eXBlKHZhbHVlczogVGVuc29yTGlrZXxXZWJHTERhdGF8V2ViR1BVRGF0YSk6IERhdGFUeXBlIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgIHJldHVybiBpbmZlckR0eXBlKHZhbHVlc1swXSk7XG4gIH1cbiAgaWYgKHZhbHVlcyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkge1xuICAgIHJldHVybiAnZmxvYXQzMic7XG4gIH0gZWxzZSBpZiAoXG4gICAgICB2YWx1ZXMgaW5zdGFuY2VvZiBJbnQzMkFycmF5IHx8IHZhbHVlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHxcbiAgICAgIHZhbHVlcyBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgcmV0dXJuICdpbnQzMic7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXIodmFsdWVzKSkge1xuICAgIHJldHVybiAnZmxvYXQzMic7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsdWVzKSkge1xuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW4odmFsdWVzKSkge1xuICAgIHJldHVybiAnYm9vbCc7XG4gIH1cbiAgcmV0dXJuICdmbG9hdDMyJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24oZjogRnVuY3Rpb24pIHtcbiAgcmV0dXJuICEhKGYgJiYgZi5jb25zdHJ1Y3RvciAmJiBmLmNhbGwgJiYgZi5hcHBseSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWFyZXN0RGl2aXNvcihzaXplOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzaXplOyArK2kpIHtcbiAgICBpZiAoc2l6ZSAlIGkgPT09IDApIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdHJpZGVzKHNoYXBlOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgcmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgaWYgKHJhbmsgPCAyKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gTGFzdCBkaW1lbnNpb24gaGFzIGltcGxpY2l0IHN0cmlkZSBvZiAxLCB0aHVzIGhhdmluZyBELTEgKGluc3RlYWQgb2YgRClcbiAgLy8gc3RyaWRlcy5cbiAgY29uc3Qgc3RyaWRlcyA9IG5ldyBBcnJheShyYW5rIC0gMSk7XG4gIHN0cmlkZXNbcmFuayAtIDJdID0gc2hhcGVbcmFuayAtIDFdO1xuICBmb3IgKGxldCBpID0gcmFuayAtIDM7IGkgPj0gMDsgLS1pKSB7XG4gICAgc3RyaWRlc1tpXSA9IHN0cmlkZXNbaSArIDFdICogc2hhcGVbaSArIDFdO1xuICB9XG4gIHJldHVybiBzdHJpZGVzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXN0ZWRBcnJheShcbiAgICBvZmZzZXQ6IG51bWJlciwgc2hhcGU6IG51bWJlcltdLCBhOiBUeXBlZEFycmF5LCBpc0NvbXBsZXggPSBmYWxzZSkge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXkoKTtcbiAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGQgPSBzaGFwZVswXSAqIChpc0NvbXBsZXggPyAyIDogMSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IGFbb2Zmc2V0ICsgaV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGQgPSBzaGFwZVswXTtcbiAgICBjb25zdCByZXN0ID0gc2hhcGUuc2xpY2UoMSk7XG4gICAgY29uc3QgbGVuID0gcmVzdC5yZWR1Y2UoKGFjYywgYykgPT4gYWNjICogYykgKiAoaXNDb21wbGV4ID8gMiA6IDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSBjcmVhdGVOZXN0ZWRBcnJheShvZmZzZXQgKyBpICogbGVuLCByZXN0LCBhLCBpc0NvbXBsZXgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBQcm92aWRlIGEgbmVzdGVkIGFycmF5IG9mIFR5cGVkQXJyYXkgaW4gZ2l2ZW4gc2hhcGUuXG5leHBvcnQgZnVuY3Rpb24gdG9OZXN0ZWRBcnJheShcbiAgICBzaGFwZTogbnVtYmVyW10sIGE6IFR5cGVkQXJyYXksIGlzQ29tcGxleCA9IGZhbHNlKSB7XG4gIGlmIChzaGFwZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBTY2FsYXIgdHlwZSBzaG91bGQgcmV0dXJuIGEgc2luZ2xlIG51bWJlci5cbiAgICByZXR1cm4gYVswXTtcbiAgfVxuICBjb25zdCBzaXplID0gc2hhcGUucmVkdWNlKChhY2MsIGMpID0+IGFjYyAqIGMpICogKGlzQ29tcGxleCA/IDIgOiAxKTtcbiAgaWYgKHNpemUgPT09IDApIHtcbiAgICAvLyBBIHRlbnNvciB3aXRoIHNoYXBlIHplcm8gc2hvdWxkIGJlIHR1cm5lZCBpbnRvIGVtcHR5IGxpc3QuXG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChzaXplICE9PSBhLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7c2hhcGV9XSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5wdXQgc2l6ZSAke2EubGVuZ3RofSR7XG4gICAgICAgIGlzQ29tcGxleCA/ICcgZm9yIGEgY29tcGxleCB0ZW5zb3InIDogJyd9LmApO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZU5lc3RlZEFycmF5KDAsIHNoYXBlLCBhLCBpc0NvbXBsZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEJhY2tlbmRWYWx1ZXNBbmRBcnJheUJ1ZmZlcihcbiAgICBkYXRhOiBCYWNrZW5kVmFsdWVzfEFycmF5QnVmZmVyLCBkdHlwZTogRGF0YVR5cGUpIHtcbiAgLy8gSWYgaXMgdHlwZSBVaW50OEFycmF5W10sIHJldHVybiBpdCBkaXJlY3RseS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICBpZiAoZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgIHJldHVybiBkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5ID8gZGF0YSA6IG5ldyBGbG9hdDMyQXJyYXkoZGF0YSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICByZXR1cm4gZGF0YSBpbnN0YW5jZW9mIEludDMyQXJyYXkgPyBkYXRhIDogbmV3IEludDMyQXJyYXkoZGF0YSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdib29sJyB8fCBkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKG5ldyBJbnQzMkFycmF5KGRhdGEpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZU9uZXNUeXBlZEFycmF5PEQgZXh0ZW5kcyBEYXRhVHlwZT4oXG4gICAgc2l6ZTogbnVtYmVyLCBkdHlwZTogRCk6IERhdGFUeXBlTWFwW0RdIHtcbiAgY29uc3QgYXJyYXkgPSBtYWtlWmVyb3NUeXBlZEFycmF5KHNpemUsIGR0eXBlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGFycmF5W2ldID0gMTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlWmVyb3NUeXBlZEFycmF5PEQgZXh0ZW5kcyBEYXRhVHlwZT4oXG4gICAgc2l6ZTogbnVtYmVyLCBkdHlwZTogRCk6IERhdGFUeXBlTWFwW0RdIHtcbiAgaWYgKGR0eXBlID09IG51bGwgfHwgZHR5cGUgPT09ICdmbG9hdDMyJyB8fCBkdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShzaXplKSBhcyBEYXRhVHlwZU1hcFtEXTtcbiAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ2ludDMyJykge1xuICAgIHJldHVybiBuZXcgSW50MzJBcnJheShzaXplKSBhcyBEYXRhVHlwZU1hcFtEXTtcbiAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNpemUpIGFzIERhdGFUeXBlTWFwW0RdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgbmVzdGVkIGBUeXBlZEFycmF5YCBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgaW5mb3JtYXRpb24gZm9yIHRoZSBuZXN0ZWQgYXJyYXkuXG4gKiBAcGFyYW0gZHR5cGUgZHR5cGUgb2YgdGhlIGFycmF5IGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlWmVyb3NOZXN0ZWRUeXBlZEFycmF5PEQgZXh0ZW5kcyBEYXRhVHlwZT4oXG4gICAgc2hhcGU6IG51bWJlcltdLCBkdHlwZTogRCkge1xuICBjb25zdCBzaXplID0gc2hhcGUucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICogY3VyciwgMSk7XG4gIGlmIChkdHlwZSA9PSBudWxsIHx8IGR0eXBlID09PSAnZmxvYXQzMicpIHtcbiAgICByZXR1cm4gdG9OZXN0ZWRBcnJheShzaGFwZSwgbmV3IEZsb2F0MzJBcnJheShzaXplKSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICByZXR1cm4gdG9OZXN0ZWRBcnJheShzaGFwZSwgbmV3IEludDMyQXJyYXkoc2l6ZSkpO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICByZXR1cm4gdG9OZXN0ZWRBcnJheShzaGFwZSwgbmV3IFVpbnQ4QXJyYXkoc2l6ZSkpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZTogbnVtYmVyW10pIHtcbiAgc2hhcGUuZm9yRWFjaChkaW1TaXplID0+IHtcbiAgICBhc3NlcnQoXG4gICAgICAgIE51bWJlci5pc0ludGVnZXIoZGltU2l6ZSkgJiYgZGltU2l6ZSA+PSAwLFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgYFRlbnNvciBtdXN0IGhhdmUgYSBzaGFwZSBjb21wcmlzZWQgb2YgcG9zaXRpdmUgaW50ZWdlcnMgYnV0IGdvdCBgICtcbiAgICAgICAgICAgIGBzaGFwZSBbJHtzaGFwZX1dLmApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBmbGF0IGluZGV4IGZvciBhIGdpdmVuIGxvY2F0aW9uIChtdWx0aWRpbWVudGlvbnNhbCBpbmRleCkgaW4gYVxuICogVGVuc29yL211bHRpZGltZW5zaW9uYWwgYXJyYXkuXG4gKlxuICogQHBhcmFtIGxvY3MgTG9jYXRpb24gaW4gdGhlIHRlbnNvci5cbiAqIEBwYXJhbSByYW5rIFJhbmsgb2YgdGhlIHRlbnNvci5cbiAqIEBwYXJhbSBzdHJpZGVzIFRlbnNvciBzdHJpZGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9jVG9JbmRleChcbiAgICBsb2NzOiBudW1iZXJbXSwgcmFuazogbnVtYmVyLCBzdHJpZGVzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gIGlmIChyYW5rID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAocmFuayA9PT0gMSkge1xuICAgIHJldHVybiBsb2NzWzBdO1xuICB9XG4gIGxldCBpbmRleCA9IGxvY3NbbG9jcy5sZW5ndGggLSAxXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgIGluZGV4ICs9IHN0cmlkZXNbaV0gKiBsb2NzW2ldO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbG9jYXRpb24gKG11bHRpZGltZW5zaW9uYWwgaW5kZXgpIGluIGFcbiAqIHRlbnNvci9tdWx0aWRpbWVudGlvbmFsIGFycmF5IGZvciBhIGdpdmVuIGZsYXQgaW5kZXguXG4gKlxuICogQHBhcmFtIGluZGV4IEluZGV4IGluIGZsYXQgYXJyYXkuXG4gKiBAcGFyYW0gcmFuayBSYW5rIG9mIHRlbnNvci5cbiAqIEBwYXJhbSBzdHJpZGVzIFN0cmlkZXMgb2YgdGVuc29yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhUb0xvYyhcbiAgICBpbmRleDogbnVtYmVyLCByYW5rOiBudW1iZXIsIHN0cmlkZXM6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBpZiAocmFuayA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfSBlbHNlIGlmIChyYW5rID09PSAxKSB7XG4gICAgcmV0dXJuIFtpbmRleF07XG4gIH1cbiAgY29uc3QgbG9jczogbnVtYmVyW10gPSBuZXcgQXJyYXkocmFuayk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jcy5sZW5ndGggLSAxOyArK2kpIHtcbiAgICBsb2NzW2ldID0gTWF0aC5mbG9vcihpbmRleCAvIHN0cmlkZXNbaV0pO1xuICAgIGluZGV4IC09IGxvY3NbaV0gKiBzdHJpZGVzW2ldO1xuICB9XG4gIGxvY3NbbG9jcy5sZW5ndGggLSAxXSA9IGluZGV4O1xuICByZXR1cm4gbG9jcztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBhc3NlcnRzIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGEgUHJvbWlzZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSBvYmplY3RcbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1hbnlcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2Uob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgUHJvbWlzZTx1bmtub3duPiB7XG4gIC8vICBXZSBjaG9zZSB0byBub3QgdXNlICdvYmogaW5zdGFuY2VPZiBQcm9taXNlJyBmb3IgdHdvIHJlYXNvbnM6XG4gIC8vICAxLiBJdCBvbmx5IHJlbGlhYmx5IHdvcmtzIGZvciBlczYgUHJvbWlzZSwgbm90IG90aGVyIFByb21pc2VcbiAgLy8gIGltcGxlbWVudGF0aW9ucy5cbiAgLy8gIDIuIEl0IGRvZXNuJ3Qgd29yayB3aXRoIGZyYW1ld29yayB0aGF0IHVzZXMgem9uZS5qcy4gem9uZS5qcyBtb25rZXlcbiAgLy8gIHBhdGNoIHRoZSBhc3luYyBjYWxscywgc28gaXQgaXMgcG9zc2libGUgdGhlIG9iaiAocGF0Y2hlZCkgaXNcbiAgLy8gIGNvbXBhcmluZyB0byBhIHByZS1wYXRjaGVkIFByb21pc2UuXG4gIHJldHVybiBvYmplY3QgJiYgb2JqZWN0LnRoZW4gJiYgdHlwZW9mIG9iamVjdC50aGVuID09PSAnZnVuY3Rpb24nO1xufVxuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { isPromise } from './util_base';\n// Expects flags from URL in the format ?tfjsflags=FLAG1:1,FLAG2:true.\nconst TENSORFLOWJS_FLAGS_PREFIX = 'tfjsflags';\n/**\n * The environment contains evaluated flags as well as the registered platform.\n * This is always used as a global singleton and can be retrieved with\n * `tf.env()`.\n *\n * @doc {heading: 'Environment'}\n */\nexport class Environment {\n // tslint:disable-next-line: no-any\n constructor(global) {\n this.global = global;\n this.flags = {};\n this.flagRegistry = {};\n this.urlFlags = {};\n // Jasmine spies on this in 'environment_test.ts'\n this.getQueryParams = getQueryParams;\n this.populateURLFlags();\n }\n setPlatform(platformName, platform) {\n if (this.platform != null) {\n if (!(env().getBool('IS_TEST') || env().getBool('PROD'))) {\n console.warn(`Platform ${this.platformName} has already been set. ` +\n `Overwriting the platform with ${platformName}.`);\n }\n }\n this.platformName = platformName;\n this.platform = platform;\n }\n registerFlag(flagName, evaluationFn, setHook) {\n this.flagRegistry[flagName] = { evaluationFn, setHook };\n // Override the flag value from the URL. This has to happen here because\n // the environment is initialized before flags get registered.\n if (this.urlFlags[flagName] != null) {\n const flagValue = this.urlFlags[flagName];\n if (!(env().getBool('IS_TEST') || env().getBool('PROD'))) {\n console.warn(`Setting feature override from URL ${flagName}: ${flagValue}.`);\n }\n this.set(flagName, flagValue);\n }\n }\n async getAsync(flagName) {\n if (flagName in this.flags) {\n return this.flags[flagName];\n }\n this.flags[flagName] = await this.evaluateFlag(flagName);\n return this.flags[flagName];\n }\n get(flagName) {\n if (flagName in this.flags) {\n return this.flags[flagName];\n }\n const flagValue = this.evaluateFlag(flagName);\n if (isPromise(flagValue)) {\n throw new Error(`Flag ${flagName} cannot be synchronously evaluated. ` +\n `Please use getAsync() instead.`);\n }\n this.flags[flagName] = flagValue;\n return this.flags[flagName];\n }\n getNumber(flagName) {\n return this.get(flagName);\n }\n getBool(flagName) {\n return this.get(flagName);\n }\n getString(flagName) {\n return this.get(flagName);\n }\n getFlags() {\n return this.flags;\n }\n // For backwards compatibility.\n get features() {\n return this.flags;\n }\n set(flagName, value) {\n if (this.flagRegistry[flagName] == null) {\n throw new Error(`Cannot set flag ${flagName} as it has not been registered.`);\n }\n this.flags[flagName] = value;\n if (this.flagRegistry[flagName].setHook != null) {\n this.flagRegistry[flagName].setHook(value);\n }\n }\n evaluateFlag(flagName) {\n if (this.flagRegistry[flagName] == null) {\n throw new Error(`Cannot evaluate flag '${flagName}': no evaluation function found.`);\n }\n return this.flagRegistry[flagName].evaluationFn();\n }\n setFlags(flags) {\n this.flags = Object.assign({}, flags);\n }\n reset() {\n this.flags = {};\n this.urlFlags = {};\n this.populateURLFlags();\n }\n populateURLFlags() {\n if (typeof this.global === 'undefined' ||\n typeof this.global.location === 'undefined' ||\n typeof this.global.location.search === 'undefined') {\n return;\n }\n const urlParams = this.getQueryParams(this.global.location.search);\n if (TENSORFLOWJS_FLAGS_PREFIX in urlParams) {\n const keyValues = urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(',');\n keyValues.forEach(keyValue => {\n const [key, value] = keyValue.split(':');\n this.urlFlags[key] = parseValue(key, value);\n });\n }\n }\n}\nexport function getQueryParams(queryString) {\n const params = {};\n queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (s, ...t) => {\n decodeParam(params, t[0], t[1]);\n return t.join('=');\n });\n return params;\n}\nfunction decodeParam(params, name, value) {\n params[decodeURIComponent(name)] = decodeURIComponent(value || '');\n}\nfunction parseValue(flagName, value) {\n const lowerCaseValue = value.toLowerCase();\n if (lowerCaseValue === 'true' || lowerCaseValue === 'false') {\n return lowerCaseValue === 'true';\n }\n else if (`${+lowerCaseValue}` === lowerCaseValue) {\n return +lowerCaseValue;\n }\n else {\n return value;\n }\n}\n/**\n * Returns the current environment (a global singleton).\n *\n * The environment object contains the evaluated feature values as well as the\n * active platform.\n *\n * @doc {heading: 'Environment'}\n */\nexport function env() {\n return ENV;\n}\nexport let ENV = null;\nexport function setEnvironmentGlobal(environment) {\n ENV = environment;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsc0VBQXNFO0FBQ3RFLE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDO0FBWTlDOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBWXRCLG1DQUFtQztJQUNuQyxZQUFtQixNQUFXO1FBQVgsV0FBTSxHQUFOLE1BQU0sQ0FBSztRQVp0QixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBQ2xCLGlCQUFZLEdBQTRDLEVBQUUsQ0FBQztRQUUzRCxhQUFRLEdBQVUsRUFBRSxDQUFDO1FBSzdCLGlEQUFpRDtRQUNqRCxtQkFBYyxHQUFHLGNBQWMsQ0FBQztRQUk5QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLFlBQW9CLEVBQUUsUUFBa0I7UUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQ1IsWUFBWSxJQUFJLENBQUMsWUFBWSx5QkFBeUI7b0JBQ3RELGlDQUFpQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0Y7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxDQUNSLFFBQWdCLEVBQUUsWUFBOEIsRUFDaEQsT0FB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O0FBQ0gsTUFBTSxVQUFVLEdBQUc7SUFDakIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFnQixJQUFJLENBQUM7QUFDbkMsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFdBQXdCO0lBQzNELEdBQUcsR0FBRyxXQUFXLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnLi9wbGF0Zm9ybXMvcGxhdGZvcm0nO1xuaW1wb3J0IHtpc1Byb21pc2V9IGZyb20gJy4vdXRpbF9iYXNlJztcblxuLy8gRXhwZWN0cyBmbGFncyBmcm9tIFVSTCBpbiB0aGUgZm9ybWF0ID90ZmpzZmxhZ3M9RkxBRzE6MSxGTEFHMjp0cnVlLlxuY29uc3QgVEVOU09SRkxPV0pTX0ZMQUdTX1BSRUZJWCA9ICd0ZmpzZmxhZ3MnO1xuXG50eXBlIEZsYWdWYWx1ZSA9IG51bWJlcnxib29sZWFufHN0cmluZztcbnR5cGUgRmxhZ0V2YWx1YXRpb25GbiA9ICgoKSA9PiBGbGFnVmFsdWUpfCgoKSA9PiBQcm9taXNlPEZsYWdWYWx1ZT4pO1xuZXhwb3J0IHR5cGUgRmxhZ3MgPSB7XG4gIFtmZWF0dXJlTmFtZTogc3RyaW5nXTogRmxhZ1ZhbHVlXG59O1xuZXhwb3J0IHR5cGUgRmxhZ1JlZ2lzdHJ5RW50cnkgPSB7XG4gIGV2YWx1YXRpb25GbjogRmxhZ0V2YWx1YXRpb25GbjtcbiAgc2V0SG9vaz86ICh2YWx1ZTogRmxhZ1ZhbHVlKSA9PiB2b2lkO1xufTtcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgY29udGFpbnMgZXZhbHVhdGVkIGZsYWdzIGFzIHdlbGwgYXMgdGhlIHJlZ2lzdGVyZWQgcGxhdGZvcm0uXG4gKiBUaGlzIGlzIGFsd2F5cyB1c2VkIGFzIGEgZ2xvYmFsIHNpbmdsZXRvbiBhbmQgY2FuIGJlIHJldHJpZXZlZCB3aXRoXG4gKiBgdGYuZW52KClgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdFbnZpcm9ubWVudCd9XG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHByaXZhdGUgZmxhZ3M6IEZsYWdzID0ge307XG4gIHByaXZhdGUgZmxhZ1JlZ2lzdHJ5OiB7W2ZsYWdOYW1lOiBzdHJpbmddOiBGbGFnUmVnaXN0cnlFbnRyeX0gPSB7fTtcblxuICBwcml2YXRlIHVybEZsYWdzOiBGbGFncyA9IHt9O1xuXG4gIHBsYXRmb3JtTmFtZTogc3RyaW5nO1xuICBwbGF0Zm9ybTogUGxhdGZvcm07XG5cbiAgLy8gSmFzbWluZSBzcGllcyBvbiB0aGlzIGluICdlbnZpcm9ubWVudF90ZXN0LnRzJ1xuICBnZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBnbG9iYWw6IGFueSkge1xuICAgIHRoaXMucG9wdWxhdGVVUkxGbGFncygpO1xuICB9XG5cbiAgc2V0UGxhdGZvcm0ocGxhdGZvcm1OYW1lOiBzdHJpbmcsIHBsYXRmb3JtOiBQbGF0Zm9ybSkge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtICE9IG51bGwpIHtcbiAgICAgIGlmICghKGVudigpLmdldEJvb2woJ0lTX1RFU1QnKSB8fCBlbnYoKS5nZXRCb29sKCdQUk9EJykpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBQbGF0Zm9ybSAke3RoaXMucGxhdGZvcm1OYW1lfSBoYXMgYWxyZWFkeSBiZWVuIHNldC4gYCArXG4gICAgICAgICAgICBgT3ZlcndyaXRpbmcgdGhlIHBsYXRmb3JtIHdpdGggJHtwbGF0Zm9ybU5hbWV9LmApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IHBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gIH1cblxuICByZWdpc3RlckZsYWcoXG4gICAgICBmbGFnTmFtZTogc3RyaW5nLCBldmFsdWF0aW9uRm46IEZsYWdFdmFsdWF0aW9uRm4sXG4gICAgICBzZXRIb29rPzogKHZhbHVlOiBGbGFnVmFsdWUpID0+IHZvaWQpIHtcbiAgICB0aGlzLmZsYWdSZWdpc3RyeVtmbGFnTmFtZV0gPSB7ZXZhbHVhdGlvbkZuLCBzZXRIb29rfTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBmbGFnIHZhbHVlIGZyb20gdGhlIFVSTC4gVGhpcyBoYXMgdG8gaGFwcGVuIGhlcmUgYmVjYXVzZVxuICAgIC8vIHRoZSBlbnZpcm9ubWVudCBpcyBpbml0aWFsaXplZCBiZWZvcmUgZmxhZ3MgZ2V0IHJlZ2lzdGVyZWQuXG4gICAgaWYgKHRoaXMudXJsRmxhZ3NbZmxhZ05hbWVdICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGZsYWdWYWx1ZSA9IHRoaXMudXJsRmxhZ3NbZmxhZ05hbWVdO1xuICAgICAgaWYgKCEoZW52KCkuZ2V0Qm9vbCgnSVNfVEVTVCcpIHx8IGVudigpLmdldEJvb2woJ1BST0QnKSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFNldHRpbmcgZmVhdHVyZSBvdmVycmlkZSBmcm9tIFVSTCAke2ZsYWdOYW1lfTogJHtmbGFnVmFsdWV9LmApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXQoZmxhZ05hbWUsIGZsYWdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXN5bmMoZmxhZ05hbWU6IHN0cmluZyk6IFByb21pc2U8RmxhZ1ZhbHVlPiB7XG4gICAgaWYgKGZsYWdOYW1lIGluIHRoaXMuZmxhZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLmZsYWdzW2ZsYWdOYW1lXTtcbiAgICB9XG5cbiAgICB0aGlzLmZsYWdzW2ZsYWdOYW1lXSA9IGF3YWl0IHRoaXMuZXZhbHVhdGVGbGFnKGZsYWdOYW1lKTtcbiAgICByZXR1cm4gdGhpcy5mbGFnc1tmbGFnTmFtZV07XG4gIH1cblxuICBnZXQoZmxhZ05hbWU6IHN0cmluZyk6IEZsYWdWYWx1ZSB7XG4gICAgaWYgKGZsYWdOYW1lIGluIHRoaXMuZmxhZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLmZsYWdzW2ZsYWdOYW1lXTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGFnVmFsdWUgPSB0aGlzLmV2YWx1YXRlRmxhZyhmbGFnTmFtZSk7XG4gICAgaWYgKGlzUHJvbWlzZShmbGFnVmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZsYWcgJHtmbGFnTmFtZX0gY2Fubm90IGJlIHN5bmNocm9ub3VzbHkgZXZhbHVhdGVkLiBgICtcbiAgICAgICAgICBgUGxlYXNlIHVzZSBnZXRBc3luYygpIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgdGhpcy5mbGFnc1tmbGFnTmFtZV0gPSBmbGFnVmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuZmxhZ3NbZmxhZ05hbWVdO1xuICB9XG5cbiAgZ2V0TnVtYmVyKGZsYWdOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldChmbGFnTmFtZSkgYXMgbnVtYmVyO1xuICB9XG5cbiAgZ2V0Qm9vbChmbGFnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KGZsYWdOYW1lKSBhcyBib29sZWFuO1xuICB9XG5cbiAgZ2V0U3RyaW5nKGZsYWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldChmbGFnTmFtZSkgYXMgc3RyaW5nO1xuICB9XG5cbiAgZ2V0RmxhZ3MoKTogRmxhZ3Mge1xuICAgIHJldHVybiB0aGlzLmZsYWdzO1xuICB9XG4gIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgZ2V0IGZlYXR1cmVzKCk6IEZsYWdzIHtcbiAgICByZXR1cm4gdGhpcy5mbGFncztcbiAgfVxuXG4gIHNldChmbGFnTmFtZTogc3RyaW5nLCB2YWx1ZTogRmxhZ1ZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmxhZ1JlZ2lzdHJ5W2ZsYWdOYW1lXSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBzZXQgZmxhZyAke2ZsYWdOYW1lfSBhcyBpdCBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZC5gKTtcbiAgICB9XG4gICAgdGhpcy5mbGFnc1tmbGFnTmFtZV0gPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5mbGFnUmVnaXN0cnlbZmxhZ05hbWVdLnNldEhvb2sgIT0gbnVsbCkge1xuICAgICAgdGhpcy5mbGFnUmVnaXN0cnlbZmxhZ05hbWVdLnNldEhvb2sodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVGbGFnKGZsYWdOYW1lOiBzdHJpbmcpOiBGbGFnVmFsdWV8UHJvbWlzZTxGbGFnVmFsdWU+IHtcbiAgICBpZiAodGhpcy5mbGFnUmVnaXN0cnlbZmxhZ05hbWVdID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGV2YWx1YXRlIGZsYWcgJyR7ZmxhZ05hbWV9Jzogbm8gZXZhbHVhdGlvbiBmdW5jdGlvbiBmb3VuZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmxhZ1JlZ2lzdHJ5W2ZsYWdOYW1lXS5ldmFsdWF0aW9uRm4oKTtcbiAgfVxuXG4gIHNldEZsYWdzKGZsYWdzOiBGbGFncykge1xuICAgIHRoaXMuZmxhZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBmbGFncyk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmZsYWdzID0ge307XG4gICAgdGhpcy51cmxGbGFncyA9IHt9O1xuICAgIHRoaXMucG9wdWxhdGVVUkxGbGFncygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZVVSTEZsYWdzKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5nbG9iYWwgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgIHR5cGVvZiB0aGlzLmdsb2JhbC5sb2NhdGlvbiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgdHlwZW9mIHRoaXMuZ2xvYmFsLmxvY2F0aW9uLnNlYXJjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxQYXJhbXMgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHRoaXMuZ2xvYmFsLmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKFRFTlNPUkZMT1dKU19GTEFHU19QUkVGSVggaW4gdXJsUGFyYW1zKSB7XG4gICAgICBjb25zdCBrZXlWYWx1ZXMgPSB1cmxQYXJhbXNbVEVOU09SRkxPV0pTX0ZMQUdTX1BSRUZJWF0uc3BsaXQoJywnKTtcbiAgICAgIGtleVZhbHVlcy5mb3JFYWNoKGtleVZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0ga2V5VmFsdWUuc3BsaXQoJzonKSBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgICAgICB0aGlzLnVybEZsYWdzW2tleV0gPSBwYXJzZVZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhxdWVyeVN0cmluZzogc3RyaW5nKToge1trZXk6IHN0cmluZ106IHN0cmluZ30ge1xuICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgcXVlcnlTdHJpbmcucmVwbGFjZSgvWz8mXShbXj0/Jl0rKSg/Oj0oW14mXSopKT8vZywgKHMsIC4uLnQpID0+IHtcbiAgICBkZWNvZGVQYXJhbShwYXJhbXMsIHRbMF0sIHRbMV0pO1xuICAgIHJldHVybiB0LmpvaW4oJz0nKTtcbiAgfSk7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVBhcmFtKFxuICAgIHBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIG5hbWU6IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpIHtcbiAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChuYW1lKV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUgfHwgJycpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKGZsYWdOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBGbGFnVmFsdWUge1xuICBjb25zdCBsb3dlckNhc2VWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChsb3dlckNhc2VWYWx1ZSA9PT0gJ3RydWUnIHx8IGxvd2VyQ2FzZVZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZVZhbHVlID09PSAndHJ1ZSc7XG4gIH0gZWxzZSBpZiAoYCR7KyBsb3dlckNhc2VWYWx1ZX1gID09PSBsb3dlckNhc2VWYWx1ZSkge1xuICAgIHJldHVybiArbG93ZXJDYXNlVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCAoYSBnbG9iYWwgc2luZ2xldG9uKS5cbiAqXG4gKiBUaGUgZW52aXJvbm1lbnQgb2JqZWN0IGNvbnRhaW5zIHRoZSBldmFsdWF0ZWQgZmVhdHVyZSB2YWx1ZXMgYXMgd2VsbCBhcyB0aGVcbiAqIGFjdGl2ZSBwbGF0Zm9ybS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnRW52aXJvbm1lbnQnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52KCkge1xuICByZXR1cm4gRU5WO1xufVxuXG5leHBvcnQgbGV0IEVOVjogRW52aXJvbm1lbnQgPSBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVudmlyb25tZW50R2xvYmFsKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCkge1xuICBFTlYgPSBlbnZpcm9ubWVudDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Note that the identifier globalNameSpace is scoped to this module, but will\n// always resolve to the same global object regardless of how the module is\n// resolved.\n// tslint:disable-next-line:no-any\nlet globalNameSpace;\n// tslint:disable-next-line:no-any\nexport function getGlobalNamespace() {\n if (globalNameSpace == null) {\n // tslint:disable-next-line:no-any\n let ns;\n if (typeof (window) !== 'undefined') {\n ns = window;\n }\n else if (typeof (global) !== 'undefined') {\n ns = global;\n }\n else if (typeof (process) !== 'undefined') {\n ns = process;\n }\n else if (typeof (self) !== 'undefined') {\n ns = self;\n }\n else {\n throw new Error('Could not find a global object');\n }\n globalNameSpace = ns;\n }\n return globalNameSpace;\n}\n// tslint:disable-next-line:no-any\nfunction getGlobalMap() {\n const ns = getGlobalNamespace();\n if (ns._tfGlobals == null) {\n ns._tfGlobals = new Map();\n }\n return ns._tfGlobals;\n}\n/**\n * Returns a globally accessible 'singleton' object.\n *\n * @param key the name of the object\n * @param init a function to initialize to initialize this object\n * the first time it is fetched.\n */\nexport function getGlobal(key, init) {\n const globalMap = getGlobalMap();\n if (globalMap.has(key)) {\n return globalMap.get(key);\n }\n else {\n const singleton = init();\n globalMap.set(key, singleton);\n return globalMap.get(key);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2dsb2JhbF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILDhFQUE4RTtBQUM5RSwyRUFBMkU7QUFDM0UsWUFBWTtBQUNaLGtDQUFrQztBQUNsQyxJQUFJLGVBQStDLENBQUM7QUFDcEQsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO1FBQzNCLGtDQUFrQztRQUNsQyxJQUFJLEVBQU8sQ0FBQztRQUNaLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUNuQyxFQUFFLEdBQUcsTUFBTSxDQUFDO1NBQ2I7YUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLEVBQUU7WUFDMUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztTQUNiO2FBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO1lBQzNDLEVBQUUsR0FBRyxPQUFPLENBQUM7U0FDZDthQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUN4QyxFQUFFLEdBQUcsSUFBSSxDQUFDO1NBQ1g7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRDtRQUNELGVBQWUsR0FBRyxFQUFFLENBQUM7S0FDdEI7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsa0NBQWtDO0FBQ2xDLFNBQVMsWUFBWTtJQUNuQixNQUFNLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2hDLElBQUksRUFBRSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDekIsRUFBRSxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBQzNCO0lBQ0QsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFJLEdBQVcsRUFBRSxJQUFhO0lBQ3JELE1BQU0sU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDO0lBQ2pDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDM0I7U0FBTTtRQUNMLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMzQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIE5vdGUgdGhhdCB0aGUgaWRlbnRpZmllciBnbG9iYWxOYW1lU3BhY2UgaXMgc2NvcGVkIHRvIHRoaXMgbW9kdWxlLCBidXQgd2lsbFxuLy8gYWx3YXlzIHJlc29sdmUgdG8gdGhlIHNhbWUgZ2xvYmFsIG9iamVjdCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgbW9kdWxlIGlzXG4vLyByZXNvbHZlZC5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmxldCBnbG9iYWxOYW1lU3BhY2U6IHtfdGZHbG9iYWxzOiBNYXA8c3RyaW5nLCBhbnk+fTtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxOYW1lc3BhY2UoKToge190Zkdsb2JhbHM6IE1hcDxzdHJpbmcsIGFueT59IHtcbiAgaWYgKGdsb2JhbE5hbWVTcGFjZSA9PSBudWxsKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIGxldCBuczogYW55O1xuICAgIGlmICh0eXBlb2YgKHdpbmRvdykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBucyA9IHdpbmRvdztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiAoZ2xvYmFsKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5zID0gZ2xvYmFsO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIChwcm9jZXNzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5zID0gcHJvY2VzcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiAoc2VsZikgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBucyA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYSBnbG9iYWwgb2JqZWN0Jyk7XG4gICAgfVxuICAgIGdsb2JhbE5hbWVTcGFjZSA9IG5zO1xuICB9XG4gIHJldHVybiBnbG9iYWxOYW1lU3BhY2U7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmZ1bmN0aW9uIGdldEdsb2JhbE1hcCgpOiBNYXA8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgbnMgPSBnZXRHbG9iYWxOYW1lc3BhY2UoKTtcbiAgaWYgKG5zLl90Zkdsb2JhbHMgPT0gbnVsbCkge1xuICAgIG5zLl90Zkdsb2JhbHMgPSBuZXcgTWFwKCk7XG4gIH1cbiAgcmV0dXJuIG5zLl90Zkdsb2JhbHM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGdsb2JhbGx5IGFjY2Vzc2libGUgJ3NpbmdsZXRvbicgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBrZXkgdGhlIG5hbWUgb2YgdGhlIG9iamVjdFxuICogQHBhcmFtIGluaXQgYSBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRvIGluaXRpYWxpemUgdGhpcyBvYmplY3RcbiAqICAgICAgICAgICAgIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGZldGNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWw8VD4oa2V5OiBzdHJpbmcsIGluaXQ6ICgpID0+IFQpOiBUIHtcbiAgY29uc3QgZ2xvYmFsTWFwID0gZ2V0R2xvYmFsTWFwKCk7XG4gIGlmIChnbG9iYWxNYXAuaGFzKGtleSkpIHtcbiAgICByZXR1cm4gZ2xvYmFsTWFwLmdldChrZXkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNpbmdsZXRvbiA9IGluaXQoKTtcbiAgICBnbG9iYWxNYXAuc2V0KGtleSwgc2luZ2xldG9uKTtcbiAgICByZXR1cm4gZ2xvYmFsTWFwLmdldChrZXkpO1xuICB9XG59XG4iXX0=","export const Abs = 'Abs';\nexport const Acos = 'Acos';\nexport const Acosh = 'Acosh';\nexport const Add = 'Add';\nexport const AddN = 'AddN';\nexport const All = 'All';\nexport const Any = 'Any';\nexport const ArgMax = 'ArgMax';\nexport const ArgMin = 'ArgMin';\nexport const Asin = 'Asin';\nexport const Asinh = 'Asinh';\nexport const Atan = 'Atan';\nexport const Atanh = 'Atanh';\nexport const Atan2 = 'Atan2';\nexport const AvgPool = 'AvgPool';\nexport const AvgPoolGrad = 'AvgPoolGrad';\nexport const AvgPool3D = 'AvgPool3D';\nexport const AvgPool3DGrad = 'AvgPool3DGrad';\nexport const BatchMatMul = 'BatchMatMul';\nexport const BatchToSpaceND = 'BatchToSpaceND';\nexport const Bincount = 'Bincount';\nexport const BitwiseAnd = 'BitwiseAnd';\nexport const BroadcastTo = 'BroadcastTo';\nexport const BroadcastArgs = 'BroadcastArgs';\nexport const Cast = 'Cast';\nexport const Ceil = 'Ceil';\nexport const ClipByValue = 'ClipByValue';\nexport const Complex = 'Complex';\nexport const ComplexAbs = 'ComplexAbs';\nexport const Concat = 'Concat';\nexport const Conv2D = 'Conv2D';\nexport const Conv2DBackpropFilter = 'Conv2DBackpropFilter';\nexport const Conv2DBackpropInput = 'Conv2DBackpropInput';\nexport const Conv3D = 'Conv3D';\nexport const Conv3DBackpropFilterV2 = 'Conv3DBackpropFilterV2';\nexport const Conv3DBackpropInputV2 = 'Conv3DBackpropInputV2';\nexport const Cos = 'Cos';\nexport const Cosh = 'Cosh';\nexport const Cumprod = 'Cumprod';\nexport const Cumsum = 'Cumsum';\nexport const CropAndResize = 'CropAndResize';\nexport const DenseBincount = 'DenseBincount';\nexport const DepthToSpace = 'DepthToSpace';\nexport const DepthwiseConv2dNative = 'DepthwiseConv2dNative';\nexport const DepthwiseConv2dNativeBackpropFilter = 'DepthwiseConv2dNativeBackpropFilter';\nexport const DepthwiseConv2dNativeBackpropInput = 'DepthwiseConv2dNativeBackpropInput';\nexport const Diag = 'Diag';\nexport const Dilation2D = 'Dilation2D';\nexport const Dilation2DBackpropInput = 'Dilation2DBackpropInput';\nexport const Dilation2DBackpropFilter = 'Dilation2DBackpropFilter';\nexport const Draw = 'Draw';\nexport const RealDiv = 'RealDiv';\nexport const Einsum = 'Einsum';\nexport const Elu = 'Elu';\nexport const EluGrad = 'EluGrad';\nexport const Erf = 'Erf';\nexport const Equal = 'Equal';\nexport const Exp = 'Exp';\nexport const ExpandDims = 'ExpandDims';\nexport const Expm1 = 'Expm1';\nexport const FFT = 'FFT';\nexport const Fill = 'Fill';\nexport const FlipLeftRight = 'FlipLeftRight';\nexport const Floor = 'Floor';\nexport const FloorDiv = 'FloorDiv';\nexport const FusedBatchNorm = 'FusedBatchNorm';\nexport const GatherV2 = 'GatherV2';\nexport const GatherNd = 'GatherNd';\nexport const Greater = 'Greater';\nexport const GreaterEqual = 'GreaterEqual';\nexport const Identity = 'Identity';\nexport const IFFT = 'IFFT';\nexport const Imag = 'Imag';\nexport const IsFinite = 'IsFinite';\nexport const IsInf = 'IsInf';\nexport const IsNan = 'IsNan';\nexport const LeakyRelu = 'LeakyRelu';\nexport const Less = 'Less';\nexport const LessEqual = 'LessEqual';\nexport const LinSpace = 'LinSpace';\nexport const Log = 'Log';\nexport const Log1p = 'Log1p';\nexport const LogicalAnd = 'LogicalAnd';\nexport const LogicalNot = 'LogicalNot';\nexport const LogicalOr = 'LogicalOr';\nexport const LogicalXor = 'LogicalXor';\nexport const LogSoftmax = 'LogSoftmax';\nexport const LowerBound = 'LowerBound';\nexport const LRN = 'LRN';\nexport const LRNGrad = 'LRNGrad';\nexport const MatrixBandPart = 'MatrixBandPart';\nexport const Max = 'Max';\nexport const Maximum = 'Maximum';\nexport const MaxPool = 'MaxPool';\nexport const MaxPoolGrad = 'MaxPoolGrad';\nexport const MaxPool3D = 'MaxPool3D';\nexport const MaxPool3DGrad = 'MaxPool3DGrad';\nexport const MaxPoolWithArgmax = 'MaxPoolWithArgmax';\nexport const Mean = 'Mean';\nexport const Min = 'Min';\nexport const Minimum = 'Minimum';\nexport const MirrorPad = 'MirrorPad';\nexport const Mod = 'Mod';\nexport const Multinomial = 'Multinomial';\nexport const Multiply = 'Multiply';\nexport const Neg = 'Neg';\nexport const NotEqual = 'NotEqual';\nexport const NonMaxSuppressionV3 = 'NonMaxSuppressionV3';\nexport const NonMaxSuppressionV4 = 'NonMaxSuppressionV4';\nexport const NonMaxSuppressionV5 = 'NonMaxSuppressionV5';\nexport const OnesLike = 'OnesLike';\nexport const OneHot = 'OneHot';\nexport const Pack = 'Pack';\nexport const PadV2 = 'PadV2';\nexport const Pool = 'Pool';\nexport const Pow = 'Pow';\nexport const Prelu = 'Prelu';\nexport const Prod = 'Prod';\nexport const RaggedGather = 'RaggedGather';\nexport const RaggedRange = 'RaggedRange';\nexport const RaggedTensorToTensor = 'RaggedTensorToTensor';\nexport const Range = 'Range';\nexport const Real = 'Real';\nexport const Reciprocal = 'Reciprocal';\nexport const Relu = 'Relu';\nexport const Reshape = 'Reshape';\nexport const ResizeNearestNeighbor = 'ResizeNearestNeighbor';\nexport const ResizeNearestNeighborGrad = 'ResizeNearestNeighborGrad';\nexport const ResizeBilinear = 'ResizeBilinear';\nexport const ResizeBilinearGrad = 'ResizeBilinearGrad';\nexport const Relu6 = 'Relu6';\nexport const Reverse = 'Reverse';\nexport const Round = 'Round';\nexport const Rsqrt = 'Rsqrt';\nexport const ScatterNd = 'ScatterNd';\nexport const TensorScatterUpdate = 'TensorScatterUpdate';\nexport const SearchSorted = 'SearchSorted';\nexport const Select = 'Select';\nexport const Selu = 'Selu';\nexport const Slice = 'Slice';\nexport const Sin = 'Sin';\nexport const Sinh = 'Sinh';\nexport const Sign = 'Sign';\nexport const Sigmoid = 'Sigmoid';\nexport const Softplus = 'Softplus';\nexport const Sqrt = 'Sqrt';\nexport const Sum = 'Sum';\nexport const SpaceToBatchND = 'SpaceToBatchND';\nexport const SplitV = 'SplitV';\nexport const Softmax = 'Softmax';\nexport const SparseFillEmptyRows = 'SparseFillEmptyRows';\nexport const SparseReshape = 'SparseReshape';\nexport const SparseSegmentMean = 'SparseSegmentMean';\nexport const SparseSegmentSum = 'SparseSegmentSum';\nexport const SparseToDense = 'SparseToDense';\nexport const SquaredDifference = 'SquaredDifference';\nexport const Square = 'Square';\nexport const StaticRegexReplace = 'StaticRegexReplace';\nexport const StridedSlice = 'StridedSlice';\nexport const StringNGrams = 'StringNGrams';\nexport const StringSplit = 'StringSplit';\nexport const StringToHashBucketFast = 'StringToHashBucketFast';\nexport const Sub = 'Sub';\nexport const Tan = 'Tan';\nexport const Tanh = 'Tanh';\nexport const Tile = 'Tile';\nexport const TopK = 'TopK';\nexport const Transform = 'Transform';\nexport const Transpose = 'Transpose';\nexport const Unique = 'Unique';\nexport const Unpack = 'Unpack';\nexport const UnsortedSegmentSum = 'UnsortedSegmentSum';\nexport const UpperBound = 'UpperBound';\nexport const ZerosLike = 'ZerosLike';\n/**\n * TensorFlow.js-only kernels\n */\nexport const Step = 'Step';\nexport const FromPixels = 'FromPixels';\nexport const RotateWithOffset = 'RotateWithOffset';\nexport const _FusedMatMul = '_FusedMatMul';\nexport const FusedConv2D = 'FusedConv2D';\nexport const FusedDepthwiseConv2D = 'FusedDepthwiseConv2D';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsX25hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9rZXJuZWxfbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFHekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUczQixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBRzdCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFHekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUczQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBT3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFPekIsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQU0vQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBTS9CLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFHM0IsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUc3QixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBRzNCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFHN0IsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUc3QixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBU2pDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUM7QUFRekMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQVVyQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBUzdDLE1BQU0sQ0FBQyxNQUFNLFdBQVcs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QUFHLFFBQVEsQ0FBQztBQVEvQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBTS9CLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDO0FBT3ZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFJdkMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUdyQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFNM0IsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQVN2QyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQVFuRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBZ0IzQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBaUJ6QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbi8vIEFsbG93IFVwcGVyQ2FtZWxDYXNlIHZhcmlhYmxlIG5hbWVzXG4vLyB0c2xpbnQ6ZGlzYWJsZTogdmFyaWFibGUtbmFtZVxuLy8gVW5mb3J0dW5hdGVseSBqdXN0IGVuYWJsaW5nIFBhc2NhbENhc2UgcGVyIGZpbGUgKHRzbGludDplbmFibGU6XG4vLyBhbGxvdy1wYXNjYWwtY2FzZSkgZG9lc24ndCB3b3JrLlxuaW1wb3J0IHtOYW1lZFRlbnNvckluZm9NYXB9IGZyb20gJy4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7RXhwbGljaXRQYWRkaW5nfSBmcm9tICcuL29wcy9jb252X3V0aWwnO1xuaW1wb3J0IHtBY3RpdmF0aW9ufSBmcm9tICcuL29wcy9mdXNlZF90eXBlcyc7XG5pbXBvcnQge1RlbnNvckluZm99IGZyb20gJy4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtEYXRhVHlwZSwgRHJhd09wdGlvbnMsIFBpeGVsRGF0YX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBBYnMgPSAnQWJzJztcbmV4cG9ydCB0eXBlIEFic0lucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQWNvcyA9ICdBY29zJztcbmV4cG9ydCB0eXBlIEFjb3NJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEFjb3NoID0gJ0Fjb3NoJztcbmV4cG9ydCB0eXBlIEFjb3NoSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBBZGQgPSAnQWRkJztcbmV4cG9ydCB0eXBlIEFkZElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEFkZE4gPSAnQWRkTic7XG5leHBvcnQgdHlwZSBBZGROSW5wdXRzID0gVGVuc29ySW5mb1tdO1xuXG5leHBvcnQgY29uc3QgQWxsID0gJ0FsbCc7XG5leHBvcnQgdHlwZSBBbGxJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQWxsQXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQW55ID0gJ0FueSc7XG5leHBvcnQgdHlwZSBBbnlJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQW55QXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQXJnTWF4ID0gJ0FyZ01heCc7XG5leHBvcnQgdHlwZSBBcmdNYXhJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXJnTWF4QXR0cnMge1xuICBheGlzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBBcmdNaW4gPSAnQXJnTWluJztcbmV4cG9ydCB0eXBlIEFyZ01pbklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBBcmdNaW5BdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IEFzaW4gPSAnQXNpbic7XG5leHBvcnQgdHlwZSBBc2luSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBBc2luaCA9ICdBc2luaCc7XG5leHBvcnQgdHlwZSBBc2luaElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQXRhbiA9ICdBdGFuJztcbmV4cG9ydCB0eXBlIEF0YW5JbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEF0YW5oID0gJ0F0YW5oJztcbmV4cG9ydCB0eXBlIEF0YW5oSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBBdGFuMiA9ICdBdGFuMic7XG5leHBvcnQgdHlwZSBBdGFuMklucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEF2Z1Bvb2wgPSAnQXZnUG9vbCc7XG5leHBvcnQgdHlwZSBBdmdQb29sSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIEF2Z1Bvb2xBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nO1xuICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xufVxuXG5leHBvcnQgY29uc3QgQXZnUG9vbEdyYWQgPSAnQXZnUG9vbEdyYWQnO1xuZXhwb3J0IHR5cGUgQXZnUG9vbEdyYWRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2R5J3wnaW5wdXQnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXZnUG9vbEdyYWRBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQXZnUG9vbDNEID0gJ0F2Z1Bvb2wzRCc7XG5leHBvcnQgdHlwZSBBdmdQb29sM0RJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXZnUG9vbDNEQXR0cnMge1xuICBmaWx0ZXJTaXplOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcjtcbiAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJztcbiAgZGF0YUZvcm1hdDogJ05ESFdDJ3wnTkNESFcnO1xufVxuXG5leHBvcnQgY29uc3QgQXZnUG9vbDNER3JhZCA9ICdBdmdQb29sM0RHcmFkJztcbmV4cG9ydCB0eXBlIEF2Z1Bvb2wzREdyYWRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2R5J3wnaW5wdXQnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXZnUG9vbDNER3JhZEF0dHJzIHtcbiAgZmlsdGVyU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXI7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG59XG5cbmV4cG9ydCBjb25zdCBCYXRjaE1hdE11bCA9ICdCYXRjaE1hdE11bCc7XG5leHBvcnQgdHlwZSBCYXRjaE1hdE11bElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnYSd8J2InPjtcbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hNYXRNdWxBdHRycyB7XG4gIHRyYW5zcG9zZUE6IGJvb2xlYW47XG4gIHRyYW5zcG9zZUI6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBCYXRjaFRvU3BhY2VORCA9ICdCYXRjaFRvU3BhY2VORCc7XG5leHBvcnQgdHlwZSBCYXRjaFRvU3BhY2VORElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBCYXRjaFRvU3BhY2VOREF0dHJzIHtcbiAgYmxvY2tTaGFwZTogbnVtYmVyW107XG4gIGNyb3BzOiBudW1iZXJbXVtdO1xufVxuXG5leHBvcnQgdHlwZSBCaW5hcnlJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2EnfCdiJz47XG5cbmV4cG9ydCBjb25zdCBCaW5jb3VudCA9ICdCaW5jb3VudCc7XG5leHBvcnQgdHlwZSBCaW5jb3VudElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J3dlaWdodHMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQmluY291bnRBdHRycyB7XG4gIHNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IEJpdHdpc2VBbmQgPSAnQml0d2lzZUFuZCc7XG5leHBvcnQgdHlwZSBCaXR3aXNlQW5kSW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQnJvYWRjYXN0VG8gPSAnQnJvYWRjYXN0VG8nO1xuZXhwb3J0IHR5cGUgQnJvYWRjYXN0VG9JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQnJvYWRDYXN0VG9BdHRycyB7XG4gIHNoYXBlOiBudW1iZXJbXTtcbiAgaW5wdXRTaGFwZTogbnVtYmVyW107ICAvLyBmb3IgZ3JhZGllbnRcbn1cblxuZXhwb3J0IGNvbnN0IEJyb2FkY2FzdEFyZ3MgPSAnQnJvYWRjYXN0QXJncyc7XG5leHBvcnQgdHlwZSBCcm9hZGNhc3RBcmdzSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdzMCd8J3MxJz47XG5cbmV4cG9ydCBjb25zdCBDYXN0ID0gJ0Nhc3QnO1xuZXhwb3J0IHR5cGUgQ2FzdElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuZXhwb3J0IGludGVyZmFjZSBDYXN0QXR0cnMge1xuICBkdHlwZTogRGF0YVR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBDZWlsID0gJ0NlaWwnO1xuZXhwb3J0IHR5cGUgQ2VpbElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQ2xpcEJ5VmFsdWUgPSAnQ2xpcEJ5VmFsdWUnO1xuZXhwb3J0IHR5cGUgQ2xpcEJ5VmFsdWVJbnB1dHMgPSBVbmFyeUlucHV0cztcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcEJ5VmFsdWVBdHRycyB7XG4gIGNsaXBWYWx1ZU1pbjogbnVtYmVyO1xuICBjbGlwVmFsdWVNYXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IENvbXBsZXggPSAnQ29tcGxleCc7XG5leHBvcnQgdHlwZSBDb21wbGV4SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdyZWFsJ3wnaW1hZyc+O1xuXG5leHBvcnQgY29uc3QgQ29tcGxleEFicyA9ICdDb21wbGV4QWJzJztcbmV4cG9ydCB0eXBlIENvbXBsZXhBYnNJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IENvbmNhdCA9ICdDb25jYXQnO1xuZXhwb3J0IHR5cGUgQ29uY2F0SW5wdXRzID0gVGVuc29ySW5mb1tdO1xuZXhwb3J0IGludGVyZmFjZSBDb25jYXRBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IENvbnYyRCA9ICdDb252MkQnO1xuZXhwb3J0IHR5cGUgQ29udjJESW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIENvbnYyREF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfEV4cGxpY2l0UGFkZGluZztcbiAgZGF0YUZvcm1hdDogJ05IV0MnfCdOQ0hXJztcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJztcbn1cblxuZXhwb3J0IGNvbnN0IENvbnYyREJhY2twcm9wRmlsdGVyID0gJ0NvbnYyREJhY2twcm9wRmlsdGVyJztcbmV4cG9ydCB0eXBlIENvbnYyREJhY2twcm9wRmlsdGVySW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZHknPjtcbmV4cG9ydCBpbnRlcmZhY2UgQ29udjJEQmFja3Byb3BGaWx0ZXJBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG4gIGZpbHRlclNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbnYyREJhY2twcm9wSW5wdXQgPSAnQ29udjJEQmFja3Byb3BJbnB1dCc7XG5leHBvcnQgdHlwZSBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkeSd8J2ZpbHRlcic+O1xuZXhwb3J0IGludGVyZmFjZSBDb252MkRCYWNrcHJvcElucHV0QXR0cnMge1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nO1xuICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnO1xuICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xuICBpbnB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbnYzRCA9ICdDb252M0QnO1xuZXhwb3J0IHR5cGUgQ29udjNESW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIENvbnYzREF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJztcbiAgZGF0YUZvcm1hdDogJ05ESFdDJ3wnTkNESFcnO1xuICBkaWxhdGlvbnM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBDb252M0RCYWNrcHJvcEZpbHRlclYyID0gJ0NvbnYzREJhY2twcm9wRmlsdGVyVjInO1xuZXhwb3J0IHR5cGUgQ29udjNEQmFja3Byb3BGaWx0ZXJWMklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J2R5Jz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udjNEQmFja3Byb3BGaWx0ZXJWMkF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJztcbiAgZmlsdGVyU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBDb252M0RCYWNrcHJvcElucHV0VjIgPSAnQ29udjNEQmFja3Byb3BJbnB1dFYyJztcbmV4cG9ydCB0eXBlIENvbnYzREJhY2twcm9wSW5wdXRWMklucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkeSd8J2ZpbHRlcic+O1xuZXhwb3J0IGludGVyZmFjZSBDb252M0RCYWNrcHJvcElucHV0VjJBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSc7XG4gIGlucHV0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBDb3MgPSAnQ29zJztcbmV4cG9ydCB0eXBlIENvc0lucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQ29zaCA9ICdDb3NoJztcbmV4cG9ydCB0eXBlIENvc2hJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEN1bXByb2QgPSAnQ3VtcHJvZCc7XG5leHBvcnQgdHlwZSBDdW1wcm9kSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIEN1bXByb2RBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbiAgZXhjbHVzaXZlOiBib29sZWFuO1xuICByZXZlcnNlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ3Vtc3VtID0gJ0N1bXN1bSc7XG5leHBvcnQgdHlwZSBDdW1zdW1JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQ3Vtc3VtQXR0cnMge1xuICBheGlzOiBudW1iZXI7XG4gIGV4Y2x1c2l2ZTogYm9vbGVhbjtcbiAgcmV2ZXJzZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IENyb3BBbmRSZXNpemUgPSAnQ3JvcEFuZFJlc2l6ZSc7XG5leHBvcnQgdHlwZSBDcm9wQW5kUmVzaXplSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2ltYWdlJ3wnYm94ZXMnfCdib3hJbmQnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQ3JvcEFuZFJlc2l6ZUF0dHJzIHtcbiAgY3JvcFNpemU6IFtudW1iZXIsIG51bWJlcl07XG4gIG1ldGhvZDogJ2JpbGluZWFyJ3wnbmVhcmVzdCc7XG4gIGV4dHJhcG9sYXRpb25WYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgRGVuc2VCaW5jb3VudCA9ICdEZW5zZUJpbmNvdW50JztcbmV4cG9ydCB0eXBlIERlbnNlQmluY291bnRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnfCd3ZWlnaHRzJz47XG5leHBvcnQgaW50ZXJmYWNlIERlbnNlQmluY291bnRBdHRycyB7XG4gIHNpemU6IG51bWJlcjtcbiAgYmluYXJ5T3V0cHV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERlcHRoVG9TcGFjZSA9ICdEZXB0aFRvU3BhY2UnO1xuZXhwb3J0IHR5cGUgRGVwdGhUb1NwYWNlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIERlcHRoVG9TcGFjZUF0dHJzIHtcbiAgYmxvY2tTaXplOiBudW1iZXI7XG4gIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG59XG5cbmV4cG9ydCBjb25zdCBEZXB0aHdpc2VDb252MmROYXRpdmUgPSAnRGVwdGh3aXNlQ29udjJkTmF0aXZlJztcbmV4cG9ydCB0eXBlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUlucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfEV4cGxpY2l0UGFkZGluZztcbiAgZGF0YUZvcm1hdDogJ05IV0MnfCdOQ0hXJztcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJztcbn1cblxuZXhwb3J0IGNvbnN0IERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyID1cbiAgICAnRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXInO1xuZXhwb3J0IHR5cGUgRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J2R5Jz47XG5leHBvcnQgaW50ZXJmYWNlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQXR0cnMge1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nO1xuICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xuICBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0ID1cbiAgICAnRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dCc7XG5leHBvcnQgdHlwZSBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0SW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2R5J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXRBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBkaWxhdGlvbnM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG4gIGlucHV0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufVxuXG5leHBvcnQgY29uc3QgRGlhZyA9ICdEaWFnJztcbmV4cG9ydCB0eXBlIERpYWdJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IERpbGF0aW9uMkQgPSAnRGlsYXRpb24yRCc7XG5leHBvcnQgdHlwZSBEaWxhdGlvbjJESW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIERpbGF0aW9uMkRBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcjtcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IERpbGF0aW9uMkRCYWNrcHJvcElucHV0ID0gJ0RpbGF0aW9uMkRCYWNrcHJvcElucHV0JztcbmV4cG9ydCB0eXBlIERpbGF0aW9uMkRCYWNrcHJvcElucHV0SW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnfCdmaWx0ZXInfCdkeSc+O1xuXG5leHBvcnQgY29uc3QgRGlsYXRpb24yREJhY2twcm9wRmlsdGVyID0gJ0RpbGF0aW9uMkRCYWNrcHJvcEZpbHRlcic7XG5leHBvcnQgdHlwZSBEaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXJJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J2ZpbHRlcid8J2R5Jz47XG5cbmV4cG9ydCBjb25zdCBEcmF3ID0gJ0RyYXcnO1xuZXhwb3J0IHR5cGUgRHJhd0lucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW1hZ2UnPjtcbmV4cG9ydCBpbnRlcmZhY2UgRHJhd0F0dHJzIHtcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgb3B0aW9ucz86IERyYXdPcHRpb25zO1xufVxuXG5leHBvcnQgY29uc3QgUmVhbERpdiA9ICdSZWFsRGl2JztcbmV4cG9ydCB0eXBlIFJlYWxEaXZJbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBFaW5zdW0gPSAnRWluc3VtJztcbmV4cG9ydCB0eXBlIEVpbnN1bUlucHV0cyA9IFRlbnNvckluZm9bXTtcbmV4cG9ydCBpbnRlcmZhY2UgRWluc3VtQXR0cnMge1xuICBlcXVhdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgRWx1ID0gJ0VsdSc7XG5leHBvcnQgdHlwZSBFbHVJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IEVsdUdyYWQgPSAnRWx1R3JhZCc7XG5leHBvcnQgdHlwZSBFbHVHcmFkSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkeSd8J3knPjtcblxuZXhwb3J0IGNvbnN0IEVyZiA9ICdFcmYnO1xuZXhwb3J0IHR5cGUgRXJmSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBFcXVhbCA9ICdFcXVhbCc7XG5leHBvcnQgdHlwZSBFcXVhbElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEV4cCA9ICdFeHAnO1xuZXhwb3J0IHR5cGUgRXhwSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBFeHBhbmREaW1zID0gJ0V4cGFuZERpbXMnO1xuZXhwb3J0IHR5cGUgRXhwYW5kRGltc0lucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW5wdXQnPjtcbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kRGltc0F0dHJzIHtcbiAgZGltOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBFeHBtMSA9ICdFeHBtMSc7XG5leHBvcnQgdHlwZSBFeHBtMUlucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgRkZUID0gJ0ZGVCc7XG5leHBvcnQgdHlwZSBGRlRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2lucHV0Jz47XG5cbmV4cG9ydCBjb25zdCBGaWxsID0gJ0ZpbGwnO1xuZXhwb3J0IGludGVyZmFjZSBGaWxsQXR0cnMge1xuICBzaGFwZTogbnVtYmVyW107XG4gIHZhbHVlOiBudW1iZXJ8c3RyaW5nO1xuICBkdHlwZTogRGF0YVR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBGbGlwTGVmdFJpZ2h0ID0gJ0ZsaXBMZWZ0UmlnaHQnO1xuZXhwb3J0IHR5cGUgRmxpcExlZnRSaWdodElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW1hZ2UnPjtcblxuZXhwb3J0IGNvbnN0IEZsb29yID0gJ0Zsb29yJztcbmV4cG9ydCB0eXBlIEZsb29ySW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBGbG9vckRpdiA9ICdGbG9vckRpdic7XG5leHBvcnQgdHlwZSBGbG9vckRpdklucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEZ1c2VkQmF0Y2hOb3JtID0gJ0Z1c2VkQmF0Y2hOb3JtJztcbmV4cG9ydCB0eXBlIEZ1c2VkQmF0Y2hOb3JtSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnfCdzY2FsZSd8J29mZnNldCd8J21lYW4nfCd2YXJpYW5jZSc+O1xuZXhwb3J0IGludGVyZmFjZSBGdXNlZEJhdGNoTm9ybUF0dHJzIHtcbiAgdmFyaWFuY2VFcHNpbG9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBHYXRoZXJWMiA9ICdHYXRoZXJWMic7XG5leHBvcnQgdHlwZSBHYXRoZXJWMklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J2luZGljZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgR2F0aGVyVjJBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbiAgYmF0Y2hEaW1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBHYXRoZXJOZCA9ICdHYXRoZXJOZCc7XG5leHBvcnQgdHlwZSBHYXRoZXJOZElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAncGFyYW1zJ3wnaW5kaWNlcyc+O1xuXG5leHBvcnQgY29uc3QgR3JlYXRlciA9ICdHcmVhdGVyJztcbmV4cG9ydCB0eXBlIEdyZWF0ZXJJbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBHcmVhdGVyRXF1YWwgPSAnR3JlYXRlckVxdWFsJztcbmV4cG9ydCB0eXBlIEdyZWF0ZXJFcXVhbElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IElkZW50aXR5ID0gJ0lkZW50aXR5JztcbmV4cG9ydCB0eXBlIElkZW50aXR5SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5cbmV4cG9ydCBjb25zdCBJRkZUID0gJ0lGRlQnO1xuZXhwb3J0IHR5cGUgSUZGVElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW5wdXQnPjtcblxuZXhwb3J0IGNvbnN0IEltYWcgPSAnSW1hZyc7XG5leHBvcnQgdHlwZSBJbWFnSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbnB1dCc+O1xuXG5leHBvcnQgY29uc3QgSXNGaW5pdGUgPSAnSXNGaW5pdGUnO1xuZXhwb3J0IHR5cGUgSXNGaW5pdGVJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IElzSW5mID0gJ0lzSW5mJztcbmV4cG9ydCB0eXBlIElzSW5mSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBJc05hbiA9ICdJc05hbic7XG5leHBvcnQgdHlwZSBJc05hbklucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTGVha3lSZWx1ID0gJ0xlYWt5UmVsdSc7XG5leHBvcnQgdHlwZSBMZWFreVJlbHVJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTGVha3lSZWx1QXR0cnMge1xuICBhbHBoYTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgTGVzcyA9ICdMZXNzJztcbmV4cG9ydCB0eXBlIExlc3NJbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBMZXNzRXF1YWwgPSAnTGVzc0VxdWFsJztcbmV4cG9ydCB0eXBlIExlc3NFcXVhbElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IExpblNwYWNlID0gJ0xpblNwYWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgTGluU3BhY2VBdHRycyB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIHN0b3A6IG51bWJlcjtcbiAgbnVtOiBudW1iZXI7XG59XG5leHBvcnQgY29uc3QgTG9nID0gJ0xvZyc7XG5leHBvcnQgdHlwZSBMb2dJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IExvZzFwID0gJ0xvZzFwJztcbmV4cG9ydCB0eXBlIExvZzFwSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBMb2dpY2FsQW5kID0gJ0xvZ2ljYWxBbmQnO1xuZXhwb3J0IHR5cGUgTG9naWNhbEFuZElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IExvZ2ljYWxOb3QgPSAnTG9naWNhbE5vdCc7XG5leHBvcnQgdHlwZSBMb2dpY2FsTm90SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5cbmV4cG9ydCBjb25zdCBMb2dpY2FsT3IgPSAnTG9naWNhbE9yJztcbmV4cG9ydCB0eXBlIExvZ2ljYWxPcklucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IExvZ2ljYWxYb3IgPSAnTG9naWNhbFhvcic7XG5leHBvcnQgdHlwZSBMb2dpY2FsWG9ySW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTG9nU29mdG1heCA9ICdMb2dTb2Z0bWF4JztcbmV4cG9ydCB0eXBlIExvZ1NvZnRtYXhJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2xvZ2l0cyc+O1xuZXhwb3J0IGludGVyZmFjZSBMb2dTb2Z0bWF4QXR0cnMge1xuICBheGlzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBMb3dlckJvdW5kID0gJ0xvd2VyQm91bmQnO1xuZXhwb3J0IHR5cGUgTG93ZXJCb3VuZElucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdzb3J0ZWRTZXF1ZW5jZSd8J3ZhbHVlcyc+O1xuXG5leHBvcnQgY29uc3QgTFJOID0gJ0xSTic7XG5leHBvcnQgdHlwZSBMUk5JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTFJOQXR0cnMge1xuICBkZXB0aFJhZGl1czogbnVtYmVyO1xuICBiaWFzOiBudW1iZXI7XG4gIGFscGhhOiBudW1iZXI7XG4gIGJldGE6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IExSTkdyYWQgPSAnTFJOR3JhZCc7XG5leHBvcnQgdHlwZSBMUk5HcmFkSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wneSd8J2R5Jz47XG5leHBvcnQgaW50ZXJmYWNlIExSTkdyYWRBdHRycyB7XG4gIGRlcHRoUmFkaXVzOiBudW1iZXI7XG4gIGJpYXM6IG51bWJlcjtcbiAgYWxwaGE6IG51bWJlcjtcbiAgYmV0YTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgTWF0cml4QmFuZFBhcnQgPSAnTWF0cml4QmFuZFBhcnQnO1xuZXhwb3J0IHR5cGUgTWF0cml4QmFuZFBhcnRJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW5wdXQnfCdudW1Mb3dlcid8J251bVVwcGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIE1hdHJpeEJhbmRQYXJ0QXR0cnMge31cblxuZXhwb3J0IGNvbnN0IE1heCA9ICdNYXgnO1xuZXhwb3J0IHR5cGUgTWF4SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIE1heEF0dHJzIHtcbiAgcmVkdWN0aW9uSW5kaWNlczogbnVtYmVyfG51bWJlcltdO1xuICBrZWVwRGltczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1heGltdW0gPSAnTWF4aW11bSc7XG5leHBvcnQgdHlwZSBNYXhpbXVtSW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTWF4UG9vbCA9ICdNYXhQb29sJztcbmV4cG9ydCB0eXBlIE1heFBvb2xJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTWF4UG9vbEF0dHJzIHtcbiAgZmlsdGVyU2l6ZTogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG59XG5cbmV4cG9ydCBjb25zdCBNYXhQb29sR3JhZCA9ICdNYXhQb29sR3JhZCc7XG5leHBvcnQgdHlwZSBNYXhQb29sR3JhZElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnZHknfCdpbnB1dCd8J291dHB1dCc+O1xuZXhwb3J0IGludGVyZmFjZSBNYXhQb29sR3JhZEF0dHJzIHtcbiAgZmlsdGVyU2l6ZTogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG59XG5cbmV4cG9ydCBjb25zdCBNYXhQb29sM0QgPSAnTWF4UG9vbDNEJztcbmV4cG9ydCB0eXBlIE1heFBvb2wzRElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBNYXhQb29sM0RBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyO1xuICBkYXRhRm9ybWF0OiAnTkRIV0MnfCdOQ0RIVyc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG59XG5cbmV4cG9ydCBjb25zdCBNYXhQb29sM0RHcmFkID0gJ01heFBvb2wzREdyYWQnO1xuZXhwb3J0IHR5cGUgTWF4UG9vbDNER3JhZElucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkeSd8J2lucHV0J3wnb3V0cHV0Jz47XG5leHBvcnQgaW50ZXJmYWNlIE1heFBvb2wzREdyYWRBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyO1xuICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xufVxuXG5leHBvcnQgY29uc3QgTWF4UG9vbFdpdGhBcmdtYXggPSAnTWF4UG9vbFdpdGhBcmdtYXgnO1xuZXhwb3J0IHR5cGUgTWF4UG9vbFdpdGhBcmdtYXhJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTWF4UG9vbFdpdGhBcmdtYXhBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXI7XG4gIGluY2x1ZGVCYXRjaEluSW5kZXg6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBNZWFuID0gJ01lYW4nO1xuZXhwb3J0IHR5cGUgTWVhbklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBNZWFuQXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgTWluID0gJ01pbic7XG5leHBvcnQgdHlwZSBNaW5JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTWluQXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgTWluaW11bSA9ICdNaW5pbXVtJztcbmV4cG9ydCB0eXBlIE1pbmltdW1JbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBNaXJyb3JQYWQgPSAnTWlycm9yUGFkJztcbmV4cG9ydCB0eXBlIE1pcnJvclBhZElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBNaXJyb3JQYWRBdHRycyB7XG4gIHBhZGRpbmdzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPjtcbiAgbW9kZTogJ3JlZmxlY3QnfCdzeW1tZXRyaWMnO1xufVxuXG5leHBvcnQgY29uc3QgTW9kID0gJ01vZCc7XG5leHBvcnQgdHlwZSBNb2RJbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBNdWx0aW5vbWlhbCA9ICdNdWx0aW5vbWlhbCc7XG5leHBvcnQgdHlwZSBNdWx0aW5vbWlhbElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnbG9naXRzJz47XG5leHBvcnQgaW50ZXJmYWNlIE11bHRpbm9taWFsQXR0cnMge1xuICBudW1TYW1wbGVzOiBudW1iZXI7XG4gIHNlZWQ6IG51bWJlcjtcbiAgbm9ybWFsaXplZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE11bHRpcGx5ID0gJ011bHRpcGx5JztcbmV4cG9ydCB0eXBlIE11bHRpcGx5SW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTmVnID0gJ05lZyc7XG5leHBvcnQgdHlwZSBOZWdJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IE5vdEVxdWFsID0gJ05vdEVxdWFsJztcbmV4cG9ydCB0eXBlIE5vdEVxdWFsSW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTm9uTWF4U3VwcHJlc3Npb25WMyA9ICdOb25NYXhTdXBwcmVzc2lvblYzJztcbmV4cG9ydCB0eXBlIE5vbk1heFN1cHByZXNzaW9uVjNJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnYm94ZXMnfCdzY29yZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTm9uTWF4U3VwcHJlc3Npb25WM0F0dHJzIHtcbiAgbWF4T3V0cHV0U2l6ZTogbnVtYmVyO1xuICBpb3VUaHJlc2hvbGQ6IG51bWJlcjtcbiAgc2NvcmVUaHJlc2hvbGQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IE5vbk1heFN1cHByZXNzaW9uVjQgPSAnTm9uTWF4U3VwcHJlc3Npb25WNCc7XG5leHBvcnQgdHlwZSBOb25NYXhTdXBwcmVzc2lvblY0SW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2JveGVzJ3wnc2NvcmVzJz47XG5leHBvcnQgaW50ZXJmYWNlIE5vbk1heFN1cHByZXNzaW9uVjRBdHRycyB7XG4gIG1heE91dHB1dFNpemU6IG51bWJlcjtcbiAgaW91VGhyZXNob2xkOiBudW1iZXI7XG4gIHNjb3JlVGhyZXNob2xkOiBudW1iZXI7XG4gIHBhZFRvTWF4T3V0cHV0U2l6ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE5vbk1heFN1cHByZXNzaW9uVjUgPSAnTm9uTWF4U3VwcHJlc3Npb25WNSc7XG5leHBvcnQgdHlwZSBOb25NYXhTdXBwcmVzc2lvblY1SW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2JveGVzJ3wnc2NvcmVzJz47XG5leHBvcnQgaW50ZXJmYWNlIE5vbk1heFN1cHByZXNzaW9uVjVBdHRycyB7XG4gIG1heE91dHB1dFNpemU6IG51bWJlcjtcbiAgaW91VGhyZXNob2xkOiBudW1iZXI7XG4gIHNjb3JlVGhyZXNob2xkOiBudW1iZXI7XG4gIHNvZnRObXNTaWdtYTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgT25lc0xpa2UgPSAnT25lc0xpa2UnO1xuZXhwb3J0IHR5cGUgT25lc0xpa2VJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IE9uZUhvdCA9ICdPbmVIb3QnO1xuZXhwb3J0IHR5cGUgT25lSG90SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbmRpY2VzJz47XG5leHBvcnQgaW50ZXJmYWNlIE9uZUhvdEF0dHJzIHtcbiAgZGVwdGg6IG51bWJlcjtcbiAgb25WYWx1ZTogbnVtYmVyO1xuICBvZmZWYWx1ZTogbnVtYmVyO1xuICBkdHlwZTogRGF0YVR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBQYWNrID0gJ1BhY2snO1xuZXhwb3J0IHR5cGUgUGFja0lucHV0cyA9IFRlbnNvckluZm9bXTtcbmV4cG9ydCBpbnRlcmZhY2UgUGFja0F0dHJzIHtcbiAgYXhpczogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgUGFkVjIgPSAnUGFkVjInO1xuZXhwb3J0IHR5cGUgUGFkVjJJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgUGFkVjJBdHRycyB7XG4gIHBhZGRpbmdzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPjtcbiAgY29uc3RhbnRWYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgUG9vbCA9ICdQb29sJztcbmV4cG9ydCB0eXBlIFBvb2xJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2lucHV0Jz47XG5cbmV4cG9ydCBjb25zdCBQb3cgPSAnUG93JztcbmV4cG9ydCB0eXBlIFBvd0lucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFByZWx1ID0gJ1ByZWx1JztcbmV4cG9ydCB0eXBlIFByZWx1SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnYWxwaGEnPjtcblxuZXhwb3J0IGNvbnN0IFByb2QgPSAnUHJvZCc7XG5leHBvcnQgdHlwZSBQcm9kSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFByb2RBdHRycyB7XG4gIGF4aXM6IG51bWJlcnxudW1iZXJbXTtcbiAga2VlcERpbXM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBSYWdnZWRHYXRoZXIgPSAnUmFnZ2VkR2F0aGVyJztcbmV4cG9ydCB0eXBlIFJhZ2dlZEdhdGhlcklucHV0cyA9IHtcbiAgcGFyYW1zTmVzdGVkU3BsaXRzOiBUZW5zb3JJbmZvW11cbn0mUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdwYXJhbXNEZW5zZVZhbHVlcyd8J2luZGljZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgUmFnZ2VkR2F0aGVyQXR0cnMge1xuICBvdXRwdXRSYWdnZWRSYW5rOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBSYWdnZWRSYW5nZSA9ICdSYWdnZWRSYW5nZSc7XG5leHBvcnQgdHlwZSBSYWdnZWRSYW5nZUlucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdzdGFydHMnfCdsaW1pdHMnfCdkZWx0YXMnPjtcblxuZXhwb3J0IGNvbnN0IFJhZ2dlZFRlbnNvclRvVGVuc29yID0gJ1JhZ2dlZFRlbnNvclRvVGVuc29yJztcbmV4cG9ydCB0eXBlIFJhZ2dlZFRlbnNvclRvVGVuc29ySW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3NoYXBlJ3wndmFsdWVzJ3wnZGVmYXVsdFZhbHVlJz4mXG4gICAge3Jvd1BhcnRpdGlvblRlbnNvcnM6IFRlbnNvckluZm9bXX07XG5leHBvcnQgaW50ZXJmYWNlIFJhZ2dlZFRlbnNvclRvVGVuc29yQXR0cnMge1xuICByb3dQYXJ0aXRpb25UeXBlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBSYW5nZSA9ICdSYW5nZSc7XG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlQXR0cnMge1xuICBzdGFydDogbnVtYmVyO1xuICBzdG9wOiBudW1iZXI7XG4gIHN0ZXA6IG51bWJlcjtcbiAgZHR5cGU6ICdmbG9hdDMyJ3wnaW50MzInO1xufVxuXG5leHBvcnQgY29uc3QgUmVhbCA9ICdSZWFsJztcbmV4cG9ydCB0eXBlIFJlYWxJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2lucHV0Jz47XG5cbmV4cG9ydCBjb25zdCBSZWNpcHJvY2FsID0gJ1JlY2lwcm9jYWwnO1xuZXhwb3J0IHR5cGUgUmVjaXByb2NhbElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgUmVsdSA9ICdSZWx1JztcbmV4cG9ydCB0eXBlIFJlbHVJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IFJlc2hhcGUgPSAnUmVzaGFwZSc7XG5leHBvcnQgdHlwZSBSZXNoYXBlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFJlc2hhcGVBdHRycyB7XG4gIHNoYXBlOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlc2l6ZU5lYXJlc3ROZWlnaGJvciA9ICdSZXNpemVOZWFyZXN0TmVpZ2hib3InO1xuZXhwb3J0IHR5cGUgUmVzaXplTmVhcmVzdE5laWdoYm9ySW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbWFnZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplTmVhcmVzdE5laWdoYm9yQXR0cnMge1xuICBhbGlnbkNvcm5lcnM6IGJvb2xlYW47XG4gIGhhbGZQaXhlbENlbnRlcnM6IGJvb2xlYW47XG4gIHNpemU6IFtudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkID0gJ1Jlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQnO1xuZXhwb3J0IHR5cGUgUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZElucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbWFnZXMnfCdkeSc+O1xuZXhwb3J0IHR5cGUgUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZEF0dHJzID0gUmVzaXplTmVhcmVzdE5laWdoYm9yQXR0cnM7XG5cbmV4cG9ydCBjb25zdCBSZXNpemVCaWxpbmVhciA9ICdSZXNpemVCaWxpbmVhcic7XG5leHBvcnQgdHlwZSBSZXNpemVCaWxpbmVhcklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW1hZ2VzJz47XG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6ZUJpbGluZWFyQXR0cnMge1xuICBhbGlnbkNvcm5lcnM6IGJvb2xlYW47XG4gIGhhbGZQaXhlbENlbnRlcnM6IGJvb2xlYW47XG4gIHNpemU6IFtudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBSZXNpemVCaWxpbmVhckdyYWQgPSAnUmVzaXplQmlsaW5lYXJHcmFkJztcbmV4cG9ydCB0eXBlIFJlc2l6ZUJpbGluZWFyR3JhZElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW1hZ2VzJ3wnZHknPjtcbmV4cG9ydCB0eXBlIFJlc2l6ZUJpbGluZWFyR3JhZEF0dHJzID0gUmVzaXplQmlsaW5lYXJBdHRycztcblxuZXhwb3J0IGNvbnN0IFJlbHU2ID0gJ1JlbHU2JztcbmV4cG9ydCB0eXBlIFJlbHU2SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5cbmV4cG9ydCBjb25zdCBSZXZlcnNlID0gJ1JldmVyc2UnO1xuZXhwb3J0IHR5cGUgUmV2ZXJzZUlucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBSZXZlcnNlQXR0cnMge1xuICBkaW1zOiBudW1iZXJ8bnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBSb3VuZCA9ICdSb3VuZCc7XG5leHBvcnQgdHlwZSBSb3VuZElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgUnNxcnQgPSAnUnNxcnQnO1xuZXhwb3J0IHR5cGUgUnNxcnRJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFNjYXR0ZXJOZCA9ICdTY2F0dGVyTmQnO1xuZXhwb3J0IHR5cGUgU2NhdHRlck5kSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbmRpY2VzJ3wndXBkYXRlcyc+O1xuZXhwb3J0IGludGVyZmFjZSBTY2F0dGVyTmRBdHRycyB7XG4gIHNoYXBlOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFRlbnNvclNjYXR0ZXJVcGRhdGUgPSAnVGVuc29yU2NhdHRlclVwZGF0ZSc7XG5leHBvcnQgdHlwZSBUZW5zb3JTY2F0dGVyVXBkYXRlSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3RlbnNvcid8J2luZGljZXMnfCd1cGRhdGVzJz47XG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvclNjYXR0ZXJVcGRhdGVBdHRycyB7fVxuXG5leHBvcnQgY29uc3QgU2VhcmNoU29ydGVkID0gJ1NlYXJjaFNvcnRlZCc7XG5leHBvcnQgdHlwZSBTZWFyY2hTb3J0ZWRJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnc29ydGVkU2VxdWVuY2UnfCd2YWx1ZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoU29ydGVkQXR0cnMge1xuICBzaWRlOiAnbGVmdCd8J3JpZ2h0Jztcbn1cblxuZXhwb3J0IGNvbnN0IFNlbGVjdCA9ICdTZWxlY3QnO1xuZXhwb3J0IHR5cGUgU2VsZWN0SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdjb25kaXRpb24nfCd0J3wnZSc+O1xuXG5leHBvcnQgY29uc3QgU2VsdSA9ICdTZWx1JztcbmV4cG9ydCB0eXBlIFNlbHVJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IFNsaWNlID0gJ1NsaWNlJztcbmV4cG9ydCB0eXBlIFNsaWNlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQXR0cnMge1xuICBiZWdpbjogbnVtYmVyfG51bWJlcltdO1xuICBzaXplOiBudW1iZXJ8bnVtYmVyW107XG59XG5leHBvcnQgY29uc3QgU2luID0gJ1Npbic7XG5leHBvcnQgdHlwZSBTaW5JbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFNpbmggPSAnU2luaCc7XG5leHBvcnQgdHlwZSBTaW5oSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBTaWduID0gJ1NpZ24nO1xuZXhwb3J0IHR5cGUgU2lnbklucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgU2lnbW9pZCA9ICdTaWdtb2lkJztcbmV4cG9ydCB0eXBlIFNpZ21vaWRJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFNvZnRwbHVzID0gJ1NvZnRwbHVzJztcbmV4cG9ydCB0eXBlIFNvZnRwbHVzSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBTcXJ0ID0gJ1NxcnQnO1xuZXhwb3J0IHR5cGUgU3FydElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgU3VtID0gJ1N1bSc7XG5leHBvcnQgdHlwZSBTdW1JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU3VtQXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgU3BhY2VUb0JhdGNoTkQgPSAnU3BhY2VUb0JhdGNoTkQnO1xuZXhwb3J0IHR5cGUgU3BhY2VUb0JhdGNoTkRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU3BhY2VUb0JhdGNoTkRBdHRycyB7XG4gIGJsb2NrU2hhcGU6IG51bWJlcltdO1xuICBwYWRkaW5nczogbnVtYmVyW11bXTtcbn1cblxuZXhwb3J0IGNvbnN0IFNwbGl0ViA9ICdTcGxpdFYnO1xuZXhwb3J0IHR5cGUgU3BsaXRWSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFNwbGl0VkF0dHJzIHtcbiAgbnVtT3JTaXplU3BsaXRzOiBudW1iZXJbXXxudW1iZXI7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFNvZnRtYXggPSAnU29mdG1heCc7XG5leHBvcnQgdHlwZSBTb2Z0bWF4SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdsb2dpdHMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU29mdG1heEF0dHJzIHtcbiAgZGltOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBTcGFyc2VGaWxsRW1wdHlSb3dzID0gJ1NwYXJzZUZpbGxFbXB0eVJvd3MnO1xuZXhwb3J0IHR5cGUgU3BhcnNlRmlsbEVtcHR5Um93c0lucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbmRpY2VzJ3wndmFsdWVzJ3wnZGVuc2VTaGFwZSd8J2RlZmF1bHRWYWx1ZSc+O1xuXG5leHBvcnQgY29uc3QgU3BhcnNlUmVzaGFwZSA9ICdTcGFyc2VSZXNoYXBlJztcbmV4cG9ydCB0eXBlIFNwYXJzZVJlc2hhcGVJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW5wdXRJbmRpY2VzJ3wnaW5wdXRTaGFwZSd8J25ld1NoYXBlJz47XG5cbmV4cG9ydCBjb25zdCBTcGFyc2VTZWdtZW50TWVhbiA9ICdTcGFyc2VTZWdtZW50TWVhbic7XG5leHBvcnQgdHlwZSBTcGFyc2VTZWdtZW50TWVhbklucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkYXRhJ3wnaW5kaWNlcyd8J3NlZ21lbnRJZHMnPjtcblxuZXhwb3J0IGNvbnN0IFNwYXJzZVNlZ21lbnRTdW0gPSAnU3BhcnNlU2VnbWVudFN1bSc7XG5leHBvcnQgdHlwZSBTcGFyc2VTZWdtZW50U3VtSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2RhdGEnfCdpbmRpY2VzJ3wnc2VnbWVudElkcyc+O1xuXG5leHBvcnQgY29uc3QgU3BhcnNlVG9EZW5zZSA9ICdTcGFyc2VUb0RlbnNlJztcbmV4cG9ydCB0eXBlIFNwYXJzZVRvRGVuc2VJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnc3BhcnNlSW5kaWNlcyd8J3NwYXJzZVZhbHVlcyd8J2RlZmF1bHRWYWx1ZSc+O1xuZXhwb3J0IGludGVyZmFjZSBTcGFyc2VUb0RlbnNlQXR0cnMge1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBTcXVhcmVkRGlmZmVyZW5jZSA9ICdTcXVhcmVkRGlmZmVyZW5jZSc7XG5leHBvcnQgdHlwZSBTcXVhcmVkRGlmZmVyZW5jZUlucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFNxdWFyZSA9ICdTcXVhcmUnO1xuZXhwb3J0IHR5cGUgU3F1YXJlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5cbmV4cG9ydCBjb25zdCBTdGF0aWNSZWdleFJlcGxhY2UgPSAnU3RhdGljUmVnZXhSZXBsYWNlJztcbmV4cG9ydCB0eXBlIFN0YXRpY1JlZ2V4UmVwbGFjZUlucHV0cyA9IFVuYXJ5SW5wdXRzO1xuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNSZWdleFJlcGxhY2VBdHRycyB7XG4gIHBhdHRlcm46IHN0cmluZztcbiAgcmV3cml0ZTogc3RyaW5nO1xuICByZXBsYWNlR2xvYmFsOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgU3RyaWRlZFNsaWNlID0gJ1N0cmlkZWRTbGljZSc7XG5leHBvcnQgdHlwZSBTdHJpZGVkU2xpY2VJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU3RyaWRlZFNsaWNlQXR0cnMge1xuICBiZWdpbjogbnVtYmVyW107XG4gIGVuZDogbnVtYmVyW107XG4gIHN0cmlkZXM6IG51bWJlcltdO1xuICBiZWdpbk1hc2s6IG51bWJlcjtcbiAgZW5kTWFzazogbnVtYmVyO1xuICBlbGxpcHNpc01hc2s6IG51bWJlcjtcbiAgbmV3QXhpc01hc2s6IG51bWJlcjtcbiAgc2hyaW5rQXhpc01hc2s6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFN0cmluZ05HcmFtcyA9ICdTdHJpbmdOR3JhbXMnO1xuZXhwb3J0IHR5cGUgU3RyaW5nTkdyYW1zSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkYXRhJ3wnZGF0YVNwbGl0cyc+O1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdOR3JhbXNBdHRycyB7XG4gIHNlcGFyYXRvcjogc3RyaW5nO1xuICBuR3JhbVdpZHRoczogbnVtYmVyW107XG4gIGxlZnRQYWQ6IHN0cmluZztcbiAgcmlnaHRQYWQ6IHN0cmluZztcbiAgcGFkV2lkdGg6IG51bWJlcjtcbiAgcHJlc2VydmVTaG9ydFNlcXVlbmNlczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFN0cmluZ1NwbGl0ID0gJ1N0cmluZ1NwbGl0JztcbmV4cG9ydCB0eXBlIFN0cmluZ1NwbGl0SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbnB1dCd8J2RlbGltaXRlcic+O1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdTcGxpdEF0dHJzIHtcbiAgc2tpcEVtcHR5OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgU3RyaW5nVG9IYXNoQnVja2V0RmFzdCA9ICdTdHJpbmdUb0hhc2hCdWNrZXRGYXN0JztcbmV4cG9ydCB0eXBlIFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2lucHV0Jz47XG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RBdHRycyB7XG4gIG51bUJ1Y2tldHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFN1YiA9ICdTdWInO1xuZXhwb3J0IHR5cGUgU3ViSW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgVGFuID0gJ1Rhbic7XG5leHBvcnQgdHlwZSBUYW5JbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFRhbmggPSAnVGFuaCc7XG5leHBvcnQgdHlwZSBUYW5oSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBUaWxlID0gJ1RpbGUnO1xuZXhwb3J0IHR5cGUgVGlsZUlucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBUaWxlQXR0cnMge1xuICByZXBzOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFRvcEsgPSAnVG9wSyc7XG5leHBvcnQgdHlwZSBUb3BLSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFRvcEtBdHRycyB7XG4gIGs6IG51bWJlcjtcbiAgc29ydGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgVHJhbnNmb3JtID0gJ1RyYW5zZm9ybSc7XG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2ltYWdlJ3wndHJhbnNmb3Jtcyc+O1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1BdHRycyB7XG4gIGludGVycG9sYXRpb246ICduZWFyZXN0J3wnYmlsaW5lYXInO1xuICBmaWxsTW9kZTogJ2NvbnN0YW50J3wncmVmbGVjdCd8J3dyYXAnfCduZWFyZXN0JztcbiAgZmlsbFZhbHVlOiBudW1iZXI7XG4gIG91dHB1dFNoYXBlPzogW251bWJlciwgbnVtYmVyXTtcbn1cblxuZXhwb3J0IGNvbnN0IFRyYW5zcG9zZSA9ICdUcmFuc3Bvc2UnO1xuZXhwb3J0IHR5cGUgVHJhbnNwb3NlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zcG9zZUF0dHJzIHtcbiAgcGVybTogbnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBVbmlxdWUgPSAnVW5pcXVlJztcbmV4cG9ydCB0eXBlIFVuaXF1ZUlucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBVbmlxdWVBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgVW5hcnlJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IFVucGFjayA9ICdVbnBhY2snO1xuZXhwb3J0IHR5cGUgVW5wYWNrSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd2YWx1ZSc+O1xuZXhwb3J0IGludGVyZmFjZSBVbnBhY2tBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFVuc29ydGVkU2VnbWVudFN1bSA9ICdVbnNvcnRlZFNlZ21lbnRTdW0nO1xuZXhwb3J0IHR5cGUgVW5zb3J0ZWRTZWdtZW50U3VtSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnfCdzZWdtZW50SWRzJz47XG5leHBvcnQgaW50ZXJmYWNlIFVuc29ydGVkU2VnbWVudFN1bUF0dHJzIHtcbiAgbnVtU2VnbWVudHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFVwcGVyQm91bmQgPSAnVXBwZXJCb3VuZCc7XG5leHBvcnQgdHlwZSBVcHBlckJvdW5kSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3NvcnRlZFNlcXVlbmNlJ3wndmFsdWVzJz47XG5cbmV4cG9ydCBjb25zdCBaZXJvc0xpa2UgPSAnWmVyb3NMaWtlJztcbmV4cG9ydCB0eXBlIFplcm9zTGlrZUlucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG4vKipcbiAqIFRlbnNvckZsb3cuanMtb25seSBrZXJuZWxzXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwID0gJ1N0ZXAnO1xuZXhwb3J0IHR5cGUgU3RlcElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuZXhwb3J0IGludGVyZmFjZSBTdGVwQXR0cnMge1xuICBhbHBoYTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgRnJvbVBpeGVscyA9ICdGcm9tUGl4ZWxzJztcbmV4cG9ydCBpbnRlcmZhY2UgRnJvbVBpeGVsc0lucHV0cyB7XG4gIHBpeGVsczogUGl4ZWxEYXRhfEltYWdlRGF0YXxIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fFxuICAgICAgSFRNTFZpZGVvRWxlbWVudHxJbWFnZUJpdG1hcDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbVBpeGVsc0F0dHJzIHtcbiAgbnVtQ2hhbm5lbHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFJvdGF0ZVdpdGhPZmZzZXQgPSAnUm90YXRlV2l0aE9mZnNldCc7XG5leHBvcnQgdHlwZSBSb3RhdGVXaXRoT2Zmc2V0SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbWFnZSc+O1xuZXhwb3J0IGludGVyZmFjZSBSb3RhdGVXaXRoT2Zmc2V0QXR0cnMge1xuICByYWRpYW5zOiBudW1iZXI7XG4gIGZpbGxWYWx1ZTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgY2VudGVyOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXTtcbn1cblxuZXhwb3J0IGNvbnN0IF9GdXNlZE1hdE11bCA9ICdfRnVzZWRNYXRNdWwnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjbGFzcy1uYW1lXG5leHBvcnQgaW50ZXJmYWNlIF9GdXNlZE1hdE11bElucHV0cyBleHRlbmRzIE5hbWVkVGVuc29ySW5mb01hcCB7XG4gIGE6IFRlbnNvckluZm87XG4gIGI6IFRlbnNvckluZm87XG4gIGJpYXM/OiBUZW5zb3JJbmZvO1xuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzPzogVGVuc29ySW5mbztcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY2xhc3MtbmFtZVxuZXhwb3J0IGludGVyZmFjZSBfRnVzZWRNYXRNdWxBdHRycyB7XG4gIHRyYW5zcG9zZUE6IGJvb2xlYW47XG4gIHRyYW5zcG9zZUI6IGJvb2xlYW47XG4gIGFjdGl2YXRpb246IEFjdGl2YXRpb247XG4gIGxlYWt5cmVsdUFscGhhPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgRnVzZWRDb252MkQgPSAnRnVzZWRDb252MkQnO1xuZXhwb3J0IGludGVyZmFjZSBGdXNlZENvbnYyRElucHV0cyBleHRlbmRzIE5hbWVkVGVuc29ySW5mb01hcCB7XG4gIHg6IFRlbnNvckluZm87XG4gIGZpbHRlcjogVGVuc29ySW5mbztcbiAgYmlhcz86IFRlbnNvckluZm87XG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHM/OiBUZW5zb3JJbmZvO1xufVxuZXhwb3J0IGludGVyZmFjZSBGdXNlZENvbnYyREF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfEV4cGxpY2l0UGFkZGluZztcbiAgZGF0YUZvcm1hdDogJ05IV0MnfCdOQ0hXJztcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgZGltUm91bmRpbmdNb2RlOiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xuICBhY3RpdmF0aW9uOiBBY3RpdmF0aW9uO1xuICBsZWFreXJlbHVBbHBoYT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IEZ1c2VkRGVwdGh3aXNlQ29udjJEID0gJ0Z1c2VkRGVwdGh3aXNlQ29udjJEJztcbmV4cG9ydCBpbnRlcmZhY2UgRnVzZWREZXB0aHdpc2VDb252MkRJbnB1dHMgZXh0ZW5kcyBOYW1lZFRlbnNvckluZm9NYXAge1xuICB4OiBUZW5zb3JJbmZvO1xuICBmaWx0ZXI6IFRlbnNvckluZm87XG4gIGJpYXM/OiBUZW5zb3JJbmZvO1xuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzPzogVGVuc29ySW5mbztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRnVzZWREZXB0aHdpc2VDb252MkRBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG4gIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIGRpbVJvdW5kaW5nTW9kZTogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJztcbiAgYWN0aXZhdGlvbjogQWN0aXZhdGlvbjtcbiAgbGVha3lyZWx1QWxwaGE/OiBudW1iZXI7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nexport function warn(...msg) {\n if (!(env().getBool('IS_TEST') || env().getBool('PROD'))) {\n console.warn(...msg);\n }\n}\nexport function log(...msg) {\n if (!(env().getBool('IS_TEST') || env().getBool('PROD'))) {\n console.log(...msg);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9sb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVsQyxNQUFNLFVBQVUsSUFBSSxDQUFDLEdBQUcsR0FBYztJQUNwQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7UUFDeEQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFjO0lBQ25DLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtRQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDckI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXJuKC4uLm1zZzogQXJyYXk8e30+KTogdm9pZCB7XG4gIGlmICghKGVudigpLmdldEJvb2woJ0lTX1RFU1QnKSB8fCBlbnYoKS5nZXRCb29sKCdQUk9EJykpKSB7XG4gICAgY29uc29sZS53YXJuKC4uLm1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZyguLi5tc2c6IEFycmF5PHt9Pik6IHZvaWQge1xuICBpZiAoIShlbnYoKS5nZXRCb29sKCdJU19URVNUJykgfHwgZW52KCkuZ2V0Qm9vbCgnUFJPRCcpKSkge1xuICAgIGNvbnNvbGUubG9nKC4uLm1zZyk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport { getGlobal } from './global_util';\nimport * as log from './log';\nconst kernelRegistry = getGlobal('kernelRegistry', () => new Map());\nconst gradRegistry = getGlobal('gradRegistry', () => new Map());\n/**\n * Returns the kernel function (code) associated with the provided names.\n *\n * @param kernelName The official name of the kernel.\n * @param backendName The official name of the backend.\n */\nexport function getKernel(kernelName, backendName) {\n const key = makeKey(kernelName, backendName);\n return kernelRegistry.get(key);\n}\n/**\n * Returns the registered gradient info associated with the provided kernel.\n * @param kernelName The official TF kernel name.\n */\nexport function getGradient(kernelName) {\n return gradRegistry.get(kernelName);\n}\nexport function getKernelsForBackend(backendName) {\n const it = kernelRegistry.entries();\n const result = [];\n while (true) {\n const { done, value } = it.next();\n if (done) {\n break;\n }\n const [key, config] = value;\n const [backend,] = key.split('_');\n if (backend === backendName) {\n result.push(config);\n }\n }\n return result;\n}\n/**\n * Registers the function (forward pass) for the kernel in a global registry.\n *\n * @param config A config object with the following properties:\n * - `kernelName` The official name of the kernel.\n * - `backendName` The official name of the backend.\n * - `kernelFunc` The function to run during the forward pass of the kernel.\n * - `setupFunc` Optional. Gets called once, after the backend initializes.\n * - `disposeFunc` Optional. Gets called once, right before the backend is\n * disposed.\n */\nexport function registerKernel(config) {\n const { kernelName, backendName } = config;\n const key = makeKey(kernelName, backendName);\n if (kernelRegistry.has(key)) {\n log.warn(`The kernel '${kernelName}' for backend ` +\n `'${backendName}' is already registered`);\n }\n kernelRegistry.set(key, config);\n}\n/**\n * Registers a gradient function for a given kernel in the global registry,\n * to be used during the back-propagation of that kernel.\n *\n * @param config An object with the following properties:\n * - `kernelName` The name of the kernel that the gradient function is for.\n * - `gradFunc` The function to run during back-propagation.\n */\nexport function registerGradient(config) {\n const { kernelName } = config;\n if (gradRegistry.has(kernelName)) {\n // TODO (yassogba) after 3.0 assess whether we need to keep this gated\n // to debug mode.\n if (env().getBool('DEBUG')) {\n log.warn(`Overriding the gradient for '${kernelName}'`);\n }\n }\n gradRegistry.set(kernelName, config);\n}\n/**\n * Removes the kernel function from the registry.\n *\n * @param kernelName The official name of the kernel.\n * @param backendName The official name of the backend.\n *\n */\nexport function unregisterKernel(kernelName, backendName) {\n const key = makeKey(kernelName, backendName);\n if (!kernelRegistry.has(key)) {\n throw new Error(`The kernel '${kernelName}' for backend ` +\n `'${backendName}' is not registered`);\n }\n kernelRegistry.delete(key);\n}\n/** Removes the registered gradient from the global registry. */\nexport function unregisterGradient(kernelName) {\n if (!gradRegistry.has(kernelName)) {\n throw new Error(`The gradient '${kernelName}' for backend is not registered`);\n }\n gradRegistry.delete(kernelName);\n}\n/**\n * Finds kernels that have already been registered to a backend and re-registers\n * them for a new backend. Useful for registering custom backends.\n * @param registeredBackendName Already registered backend.\n * @param newBackendName New backend.\n */\nexport function copyRegisteredKernels(registeredBackendName, newBackendName) {\n const kernels = getKernelsForBackend(registeredBackendName);\n kernels.forEach(kernelConfig => {\n const newKernelConfig = Object.assign({}, kernelConfig, { backendName: newBackendName });\n registerKernel(newKernelConfig);\n });\n}\nfunction makeKey(kernelName, backendName) {\n return `${backendName}_${kernelName}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsX3JlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9rZXJuZWxfcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDO0FBTTdCLE1BQU0sY0FBYyxHQUNsQixTQUFTLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQ3hCLENBQUMsQ0FBQztBQUNyQixNQUFNLFlBQVksR0FDaEIsU0FBUyxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBc0IsQ0FBQyxDQUFDO0FBcURqRTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3JCLFVBQWtCLEVBQUUsV0FBbUI7SUFDekMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsVUFBa0I7SUFDNUMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsV0FBbUI7SUFDdEQsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFFbEMsT0FBTyxJQUFJLEVBQUU7UUFDWCxNQUFNLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBQyxHQUFHLEVBQUUs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QUFPLENBQUMsVUFBa0IsRUFDbEIsV0FBbUI7SUFDbEMsT0FBTyxHQUFHLFdBQVcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gJy4vZ2xvYmFsX3V0aWwnO1xuaW1wb3J0ICogYXMgbG9nIGZyb20gJy4vbG9nJztcbmltcG9ydCB7TmFtZWRHcmFkaWVudE1hcH0gZnJvbSAnLi90YXBlJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckluZm99IGZyb20gJy4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtSZWN1cnNpdmVBcnJheX0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGtlcm5lbFJlZ2lzdHJ5ID1cbiAgZ2V0R2xvYmFsKCdrZXJuZWxSZWdpc3RyeScsICgpID0+IG5ldyBNYXA8YCR7c3RyaW5nfV8ke3N0cmluZ31gLFxuICAgIEtlcm5lbENvbmZpZz4oKSk7XG5jb25zdCBncmFkUmVnaXN0cnkgPVxuICBnZXRHbG9iYWwoJ2dyYWRSZWdpc3RyeScsICgpID0+IG5ldyBNYXA8c3RyaW5nLCBHcmFkQ29uZmlnPigpKTtcblxudHlwZSBBdHRyaWJ1dGVWYWx1ZSA9XG4gIG51bWJlciB8IG51bWJlcltdIHwgYm9vbGVhbiB8IGJvb2xlYW5bXSB8IHN0cmluZyB8IHN0cmluZ1tdIHwgTmFtZWRBdHRyTWFwO1xuXG4vKiogVGhlc2UgYXJlIGV4dHJhIG5vbi10ZW5zb3IvcHJpbWl0aXZlIHBhcmFtcyBwYXNzZWQgdG8ga2VybmVsIGZ1bmN0aW9ucy4gKi9cbmV4cG9ydCB0eXBlIEF0dHJpYnV0ZSA9IEF0dHJpYnV0ZVZhbHVlIHwgUmVjdXJzaXZlQXJyYXk8QXR0cmlidXRlVmFsdWU+O1xuXG4vKiogU3BlY2lmaWVzIHRoZSBjb2RlIHRvIHJ1biB3aGVuIGV4ZWN1dGluZyBhIGtlcm5lbC4gKi9cbmV4cG9ydCB0eXBlIEtlcm5lbEZ1bmMgPSAocGFyYW1zOiB7XG4gIGlucHV0czogTmFtZWRUZW5zb3JJbmZvTWFwLFxuICBiYWNrZW5kOiB7fSxcbiAgYXR0cnM/OiBOYW1lZEF0dHJNYXAsXG59KSA9PiBUZW5zb3JJbmZvIHwgVGVuc29ySW5mb1tdO1xuXG4vKiogVGhlIGZ1bmN0aW9uIHRvIHJ1biB3aGVuIGNvbXB1dGluZyBhIGdyYWRpZW50IGR1cmluZyBiYWNrcHJvcC4gKi9cbmV4cG9ydCB0eXBlIEdyYWRGdW5jID1cbiAgKGR5OiBUZW5zb3IgfCBUZW5zb3JbXSwgc2F2ZWQ6IFRlbnNvcltdLCBhdHRyczogTmFtZWRBdHRyTWFwKSA9PlxuICAgIE5hbWVkR3JhZGllbnRNYXA7XG5cbi8qKiBGdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGFmdGVyIHRoZSBiYWNrZW5kIGluaXRpYWxpemVzLiAqL1xuZXhwb3J0IHR5cGUgS2VybmVsU2V0dXBGdW5jID0gKGJhY2tlbmQ6IHt9KSA9PiB2b2lkO1xuLyoqIEZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBiYWNrZW5kIGlzIGRpc3Bvc2VkLiAqL1xuZXhwb3J0IHR5cGUgS2VybmVsRGlzcG9zZUZ1bmMgPSBLZXJuZWxTZXR1cEZ1bmM7XG5cbi8qKiBDb25maWcgb2JqZWN0IGZvciByZWdpc3RlcmluZyBhIGtlcm5lbCBpbiB0aGUgZ2xvYmFsIHJlZ2lzdHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXJuZWxDb25maWcge1xuICBrZXJuZWxOYW1lOiBzdHJpbmc7XG4gIGJhY2tlbmROYW1lOiBzdHJpbmc7XG4gIGtlcm5lbEZ1bmM6IEtlcm5lbEZ1bmM7XG4gIHNldHVwRnVuYz86IEtlcm5lbFNldHVwRnVuYztcbiAgZGlzcG9zZUZ1bmM/OiBLZXJuZWxEaXNwb3NlRnVuYztcbn1cblxuLyoqIENvbmZpZyBvYmplY3QgZm9yIHJlZ2lzdGVyaW5nIGEgZ3JhZGllbnQgaW4gdGhlIGdsb2JhbCByZWdpc3RyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhZENvbmZpZyB7XG4gIGtlcm5lbE5hbWU6IHN0cmluZztcbiAgaW5wdXRzVG9TYXZlPzogc3RyaW5nW107XG4gIC8vIFdoZW4gc2F2ZUFsbElucHV0cyBpcyB0cnVlLCBhbGwgaW5wdXRzIHdpbGwgYmUgc2F2ZWQuIE9ubHkgdXNlIHRoaXMgZmxhZ1xuICAvLyBpZiBpbnB1dHMgaXMgYW4gYXJyYXkgb2YgVGVuc29ycy5cbiAgc2F2ZUFsbElucHV0cz86IGJvb2xlYW47XG4gIG91dHB1dHNUb1NhdmU/OiBib29sZWFuW107XG4gIGdyYWRGdW5jOiBHcmFkRnVuYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYW1lZFRlbnNvckluZm9NYXAge1xuICBbbmFtZTogc3RyaW5nXTogVGVuc29ySW5mb3x1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFtZWRBdHRyTWFwIHtcbiAgW25hbWU6IHN0cmluZ106IEF0dHJpYnV0ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBrZXJuZWwgZnVuY3Rpb24gKGNvZGUpIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZXMuXG4gKlxuICogQHBhcmFtIGtlcm5lbE5hbWUgVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhlIGtlcm5lbC5cbiAqIEBwYXJhbSBiYWNrZW5kTmFtZSBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGUgYmFja2VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEtlcm5lbChcbiAgICBrZXJuZWxOYW1lOiBzdHJpbmcsIGJhY2tlbmROYW1lOiBzdHJpbmcpOiBLZXJuZWxDb25maWcge1xuICBjb25zdCBrZXkgPSBtYWtlS2V5KGtlcm5lbE5hbWUsIGJhY2tlbmROYW1lKTtcbiAgcmV0dXJuIGtlcm5lbFJlZ2lzdHJ5LmdldChrZXkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlZ2lzdGVyZWQgZ3JhZGllbnQgaW5mbyBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVkIGtlcm5lbC5cbiAqIEBwYXJhbSBrZXJuZWxOYW1lIFRoZSBvZmZpY2lhbCBURiBrZXJuZWwgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyYWRpZW50KGtlcm5lbE5hbWU6IHN0cmluZyk6IEdyYWRDb25maWcge1xuICByZXR1cm4gZ3JhZFJlZ2lzdHJ5LmdldChrZXJuZWxOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtlcm5lbHNGb3JCYWNrZW5kKGJhY2tlbmROYW1lOiBzdHJpbmcpOiBLZXJuZWxDb25maWdbXSB7XG4gIGNvbnN0IGl0ID0ga2VybmVsUmVnaXN0cnkuZW50cmllcygpO1xuICBjb25zdCByZXN1bHQ6IEtlcm5lbENvbmZpZ1tdID0gW107XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gaXQubmV4dCgpO1xuICAgIGlmIChkb25lKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgW2tleSwgY29uZmlnXSA9IHZhbHVlO1xuICAgIGNvbnN0IFtiYWNrZW5kLCBdID0ga2V5LnNwbGl0KCdfJyk7XG4gICAgaWYgKGJhY2tlbmQgPT09IGJhY2tlbmROYW1lKSB7XG4gICAgICByZXN1bHQucHVzaChjb25maWcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgZnVuY3Rpb24gKGZvcndhcmQgcGFzcykgZm9yIHRoZSBrZXJuZWwgaW4gYSBnbG9iYWwgcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBBIGNvbmZpZyBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAtIGBrZXJuZWxOYW1lYCBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGUga2VybmVsLlxuICogLSBgYmFja2VuZE5hbWVgIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBiYWNrZW5kLlxuICogLSBga2VybmVsRnVuY2AgVGhlIGZ1bmN0aW9uIHRvIHJ1biBkdXJpbmcgdGhlIGZvcndhcmQgcGFzcyBvZiB0aGUga2VybmVsLlxuICogLSBgc2V0dXBGdW5jYCBPcHRpb25hbC4gR2V0cyBjYWxsZWQgb25jZSwgYWZ0ZXIgdGhlIGJhY2tlbmQgaW5pdGlhbGl6ZXMuXG4gKiAtIGBkaXNwb3NlRnVuY2AgT3B0aW9uYWwuIEdldHMgY2FsbGVkIG9uY2UsIHJpZ2h0IGJlZm9yZSB0aGUgYmFja2VuZCBpc1xuICogZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcktlcm5lbChjb25maWc6IEtlcm5lbENvbmZpZykge1xuICBjb25zdCB7a2VybmVsTmFtZSwgYmFja2VuZE5hbWV9ID0gY29uZmlnO1xuICBjb25zdCBrZXkgPSBtYWtlS2V5KGtlcm5lbE5hbWUsIGJhY2tlbmROYW1lKTtcbiAgaWYgKGtlcm5lbFJlZ2lzdHJ5LmhhcyhrZXkpKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICAgIGBUaGUga2VybmVsICcke2tlcm5lbE5hbWV9JyBmb3IgYmFja2VuZCBgICtcbiAgICAgICAgYCcke2JhY2tlbmROYW1lfScgaXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7XG4gIH1cbiAga2VybmVsUmVnaXN0cnkuc2V0KGtleSwgY29uZmlnKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBncmFkaWVudCBmdW5jdGlvbiBmb3IgYSBnaXZlbiBrZXJuZWwgaW4gdGhlIGdsb2JhbCByZWdpc3RyeSxcbiAqIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBiYWNrLXByb3BhZ2F0aW9uIG9mIHRoYXQga2VybmVsLlxuICpcbiAqIEBwYXJhbSBjb25maWcgQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBga2VybmVsTmFtZWAgVGhlIG5hbWUgb2YgdGhlIGtlcm5lbCB0aGF0IHRoZSBncmFkaWVudCBmdW5jdGlvbiBpcyBmb3IuXG4gKiAtIGBncmFkRnVuY2AgVGhlIGZ1bmN0aW9uIHRvIHJ1biBkdXJpbmcgYmFjay1wcm9wYWdhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyR3JhZGllbnQoY29uZmlnOiBHcmFkQ29uZmlnKSB7XG4gIGNvbnN0IHtrZXJuZWxOYW1lfSA9IGNvbmZpZztcblxuICBpZiAoZ3JhZFJlZ2lzdHJ5LmhhcyhrZXJuZWxOYW1lKSkge1xuICAgIC8vIFRPRE8gKHlhc3NvZ2JhKSBhZnRlciAzLjAgYXNzZXNzIHdoZXRoZXIgd2UgbmVlZCB0byBrZWVwIHRoaXMgZ2F0ZWRcbiAgICAvLyB0byBkZWJ1ZyBtb2RlLlxuICAgIGlmIChlbnYoKS5nZXRCb29sKCdERUJVRycpKSB7XG4gICAgICBsb2cud2FybihgT3ZlcnJpZGluZyB0aGUgZ3JhZGllbnQgZm9yICcke2tlcm5lbE5hbWV9J2ApO1xuICAgIH1cbiAgfVxuICBncmFkUmVnaXN0cnkuc2V0KGtlcm5lbE5hbWUsIGNvbmZpZyk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUga2VybmVsIGZ1bmN0aW9uIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBrZXJuZWxOYW1lIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBrZXJuZWwuXG4gKiBAcGFyYW0gYmFja2VuZE5hbWUgVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhlIGJhY2tlbmQuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3Rlcktlcm5lbChcbiAgICBrZXJuZWxOYW1lOiBzdHJpbmcsIGJhY2tlbmROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qga2V5ID0gbWFrZUtleShrZXJuZWxOYW1lLCBiYWNrZW5kTmFtZSk7XG4gIGlmICgha2VybmVsUmVnaXN0cnkuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUga2VybmVsICcke2tlcm5lbE5hbWV9JyBmb3IgYmFja2VuZCBgICtcbiAgICAgICAgYCcke2JhY2tlbmROYW1lfScgaXMgbm90IHJlZ2lzdGVyZWRgKTtcbiAgfVxuICBrZXJuZWxSZWdpc3RyeS5kZWxldGUoa2V5KTtcbn1cblxuLyoqIFJlbW92ZXMgdGhlIHJlZ2lzdGVyZWQgZ3JhZGllbnQgZnJvbSB0aGUgZ2xvYmFsIHJlZ2lzdHJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJHcmFkaWVudChrZXJuZWxOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFncmFkUmVnaXN0cnkuaGFzKGtlcm5lbE5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGdyYWRpZW50ICcke2tlcm5lbE5hbWV9JyBmb3IgYmFja2VuZCBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICB9XG4gIGdyYWRSZWdpc3RyeS5kZWxldGUoa2VybmVsTmFtZSk7XG59XG5cbi8qKlxuICogRmluZHMga2VybmVscyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgdG8gYSBiYWNrZW5kIGFuZCByZS1yZWdpc3RlcnNcbiAqIHRoZW0gZm9yIGEgbmV3IGJhY2tlbmQuIFVzZWZ1bCBmb3IgcmVnaXN0ZXJpbmcgY3VzdG9tIGJhY2tlbmRzLlxuICogQHBhcmFtIHJlZ2lzdGVyZWRCYWNrZW5kTmFtZSBBbHJlYWR5IHJlZ2lzdGVyZWQgYmFja2VuZC5cbiAqIEBwYXJhbSBuZXdCYWNrZW5kTmFtZSBOZXcgYmFja2VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlSZWdpc3RlcmVkS2VybmVscyhcbiAgICByZWdpc3RlcmVkQmFja2VuZE5hbWU6IHN0cmluZywgbmV3QmFja2VuZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBrZXJuZWxzID0gZ2V0S2VybmVsc0ZvckJhY2tlbmQocmVnaXN0ZXJlZEJhY2tlbmROYW1lKTtcbiAga2VybmVscy5mb3JFYWNoKGtlcm5lbENvbmZpZyA9PiB7XG4gICAgY29uc3QgbmV3S2VybmVsQ29uZmlnID1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwga2VybmVsQ29uZmlnLCB7YmFja2VuZE5hbWU6IG5ld0JhY2tlbmROYW1lfSk7XG4gICAgcmVnaXN0ZXJLZXJuZWwobmV3S2VybmVsQ29uZmlnKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VLZXkoa2VybmVsTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICBiYWNrZW5kTmFtZTogc3RyaW5nKTogYCR7c3RyaW5nfV8ke3N0cmluZ31gIHtcbiAgcmV0dXJuIGAke2JhY2tlbmROYW1lfV8ke2tlcm5lbE5hbWV9YDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport function isTypedArrayBrowser(a) {\n return a instanceof Float32Array || a instanceof Int32Array ||\n a instanceof Uint8Array || a instanceof Uint8ClampedArray;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNfdHlwZWRfYXJyYXlfYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvcGxhdGZvcm1zL2lzX3R5cGVkX2FycmF5X2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsTUFBTSxVQUFVLG1CQUFtQixDQUFDLENBQVU7SUFFNUMsT0FBTyxDQUFDLFlBQVksWUFBWSxJQUFJLENBQUMsWUFBWSxVQUFVO1FBQ3pELENBQUMsWUFBWSxVQUFVLElBQUksQ0FBQyxZQUFZLGlCQUFpQixDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVkQXJyYXlCcm93c2VyKGE6IHVua25vd24pOiBhIGlzIFVpbnQ4QXJyYXlcbiAgfCBGbG9hdDMyQXJyYXkgfCBJbnQzMkFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkge1xuICByZXR1cm4gYSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fCBhIGluc3RhbmNlb2YgSW50MzJBcnJheSB8fFxuICAgIGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Workaround for allowing cjs module to be included in bundle created by\n// rollup.\nimport * as LongExports from 'long';\n// tslint:disable-next-line\nconst Long = \n// tslint:disable-next-line\nLongExports.default || LongExports;\nexport function hexToLong(hex) {\n return Long.fromString(hex, true, 16);\n}\n// Some primes between 2^63 and 2^64 for various uses.\n// Hex 0xc3a5c85c97cb3127\nconst k0 = hexToLong('c3a5c85c97cb3127');\n// Hex 0xb492b66fbe98f273\nconst k1 = hexToLong('b492b66fbe98f273');\n// Hex 0x9ae16a3b2f90404f\nconst k2 = hexToLong('9ae16a3b2f90404f');\nfunction shiftMix(val) {\n return val.xor(val.shru(47));\n}\nfunction fetch(s, offset, numBytes) {\n const bytes = s.slice(offset, offset + numBytes);\n return Long.fromBytes(Array.from(bytes), true, true);\n}\nfunction fetch64(s, offset) {\n return fetch(s, offset, 8);\n}\nfunction fetch32(s, offset) {\n return fetch(s, offset, 4);\n}\nfunction rotate64(val, shift) {\n // Avoid shifting by 64: doing so yields an undefined result.\n return shift === 0 ? val : val.shru(shift).or(val.shl(64 - shift));\n}\nfunction hashLen16(u, v, mul = hexToLong('9ddfea08eb382d69')) {\n // Murmur-inspired hashing.\n let a = u.xor(v).mul(mul);\n a = a.xor(a.shru(47));\n let b = v.xor(a).mul(mul);\n b = b.xor(b.shru(47));\n b = b.mul(mul);\n return b;\n}\n// Return a 16-byte hash for 48 bytes. Quick and dirty.\n// Callers do best to use \"random-looking\" values for a and b.\nfunction weakHashLen32WithSeeds(w, x, y, z, a, b) {\n a = a.add(w);\n b = rotate64(b.add(a).add(z), 21);\n const c = a;\n a = a.add(x);\n a = a.add(y);\n b = b.add(rotate64(a, 44));\n return [a.add(z), b.add(c)];\n}\nfunction weakHashLen32WithSeedsStr(s, offset, a, b) {\n return weakHashLen32WithSeeds(fetch64(s, offset), fetch64(s, offset + 8), fetch64(s, offset + 16), fetch64(s, offset + 24), a, b);\n}\nfunction hashLen0to16(s, len = s.length) {\n if (len >= 8) {\n const mul = k2.add(len * 2);\n const a = fetch64(s, 0).add(k2);\n const b = fetch64(s, len - 8);\n const c = rotate64(b, 37).mul(mul).add(a);\n const d = rotate64(a, 25).add(b).mul(mul);\n return hashLen16(c, d, mul);\n }\n if (len >= 4) {\n const mul = k2.add(len * 2);\n const a = fetch32(s, 0);\n return hashLen16(a.shl(3).add(len), fetch32(s, len - 4), mul);\n }\n if (len > 0) {\n const a = s[0];\n const b = s[len >> 1];\n const c = s[len - 1];\n const y = a + (b << 8);\n const z = len + (c << 2);\n return shiftMix(k2.mul(y).xor(k0.mul(z))).mul(k2);\n }\n return k2;\n}\nfunction hashLen17to32(s, len = s.length) {\n const mul = k2.add(len * 2);\n const a = fetch64(s, 0).mul(k1);\n const b = fetch64(s, 8);\n const c = fetch64(s, len - 8).mul(mul);\n const d = fetch64(s, len - 16).mul(k2);\n return hashLen16(rotate64(a.add(b), 43).add(rotate64(c, 30)).add(d), a.add(rotate64(b.add(k2), 18)).add(c), mul);\n}\nfunction hashLen33to64(s, len = s.length) {\n const mul = k2.add(len * 2);\n const a = fetch64(s, 0).mul(k2);\n const b = fetch64(s, 8);\n const c = fetch64(s, len - 8).mul(mul);\n const d = fetch64(s, len - 16).mul(k2);\n const y = rotate64(a.add(b), 43).add(rotate64(c, 30)).add(d);\n const z = hashLen16(y, a.add(rotate64(b.add(k2), 18)).add(c), mul);\n const e = fetch64(s, 16).mul(mul);\n const f = fetch64(s, 24);\n const g = y.add(fetch64(s, len - 32)).mul(mul);\n const h = z.add(fetch64(s, len - 24)).mul(mul);\n return hashLen16(rotate64(e.add(f), 43).add(rotate64(g, 30)).add(h), e.add(rotate64(f.add(a), 18)).add(g), mul);\n}\nexport function fingerPrint64(s, len = s.length) {\n const seed = Long.fromNumber(81, true);\n if (len <= 32) {\n if (len <= 16) {\n return hashLen0to16(s, len);\n }\n else {\n return hashLen17to32(s, len);\n }\n }\n else if (len <= 64) {\n return hashLen33to64(s, len);\n }\n // For strings over 64 bytes we loop. Internal state consists of\n // 56 bytes: v, w, x, y, and z.\n let x = seed;\n let y = seed.mul(k1).add(113);\n let z = shiftMix(y.mul(k2).add(113)).mul(k2);\n let v = [Long.UZERO, Long.UZERO];\n let w = [Long.UZERO, Long.UZERO];\n x = x.mul(k2).add(fetch64(s, 0));\n let offset = 0;\n // Set end so that after the loop we have 1 to 64 bytes left to process.\n const end = ((len - 1) >> 6) * 64;\n const last64 = end + ((len - 1) & 63) - 63;\n do {\n x = rotate64(x.add(y).add(v[0]).add(fetch64(s, offset + 8)), 37).mul(k1);\n y = rotate64(y.add(v[1]).add(fetch64(s, offset + 48)), 42).mul(k1);\n x = x.xor(w[1]);\n y = y.add(v[0]).add(fetch64(s, offset + 40));\n z = rotate64(z.add(w[0]), 33).mul(k1);\n v = weakHashLen32WithSeedsStr(s, offset, v[1].mul(k1), x.add(w[0]));\n w = weakHashLen32WithSeedsStr(s, offset + 32, z.add(w[1]), y.add(fetch64(s, offset + 16)));\n [z, x] = [x, z];\n offset += 64;\n } while (offset !== end);\n const mul = k1.add(z.and(0xff).shl(1));\n // Point to the last 64 bytes of input.\n offset = last64;\n w[0] = w[0].add((len - 1) & 63);\n v[0] = v[0].add(w[0]);\n w[0] = w[0].add(v[0]);\n x = rotate64(x.add(y).add(v[0]).add(fetch64(s, offset + 8)), 37).mul(mul);\n y = rotate64(y.add(v[1]).add(fetch64(s, offset + 48)), 42).mul(mul);\n x = x.xor(w[1].mul(9));\n y = y.add(v[0].mul(9).add(fetch64(s, offset + 40)));\n z = rotate64(z.add(w[0]), 33).mul(mul);\n v = weakHashLen32WithSeedsStr(s, offset, v[1].mul(mul), x.add(w[0]));\n w = weakHashLen32WithSeedsStr(s, offset + 32, z.add(w[1]), y.add(fetch64(s, offset + 16)));\n [z, x] = [x, z];\n return hashLen16(hashLen16(v[0], w[0], mul).add(shiftMix(y).mul(k0)).add(z), hashLen16(v[1], w[1], mul).add(x), mul);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9oYXNoX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gseUVBQXlFO0FBQ3pFLFVBQVU7QUFDVixPQUFPLEtBQUssV0FBVyxNQUFNLE1BQU0sQ0FBQztBQUNwQywyQkFBMkI7QUFDM0IsTUFBTSxJQUFJO0FBQ04sMkJBQTJCO0FBQzFCLFdBQW1CLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQztBQUVoRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVc7SUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELHNEQUFzRDtBQUN0RCx5QkFBeUI7QUFDekIsTUFBTSxFQUFFLEdBQVMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDL0MseUJBQXlCO0FBQ3pCLE1BQU0sRUFBRSxHQUFTLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQy9DLHlCQUF5QjtBQUN6QixNQUFNLEVBQUUsR0FBUyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUUvQyxTQUFTLFFBQVEsQ0FBQyxHQUFTO0lBQ3pCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLENBQWEsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7SUFDNUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJ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QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDbEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsQ0FBYSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTTtJQUNsRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFD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QUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRTNDLEdBQUc7UUFDRCxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxHQUFHLHlCQUF5QixDQUN6QixDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDZCxRQUFRLE1BQU0sS0FBSyxHQUFHLEVBQUU7SUFDekIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLHVDQUF1QztJQUN2QyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBRWhCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsR0FBRyx5QkFBeUIsQ0FDekIsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVoQixPQUFPLFNBQVMsQ0FDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDMUQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG4vLyBXb3JrYXJvdW5kIGZvciBhbGxvd2luZyBjanMgbW9kdWxlIHRvIGJlIGluY2x1ZGVkIGluIGJ1bmRsZSBjcmVhdGVkIGJ5XG4vLyByb2xsdXAuXG5pbXBvcnQgKiBhcyBMb25nRXhwb3J0cyBmcm9tICdsb25nJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuY29uc3QgTG9uZzogTG9uZ0V4cG9ydHMuTG9uZ0NvbnN0cnVjdG9yID1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAoTG9uZ0V4cG9ydHMgYXMgYW55KS5kZWZhdWx0IHx8IExvbmdFeHBvcnRzO1xuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9Mb25nKGhleDogc3RyaW5nKTogTG9uZyB7XG4gIHJldHVybiBMb25nLmZyb21TdHJpbmcoaGV4LCB0cnVlLCAxNik7XG59XG5cbi8vIFNvbWUgcHJpbWVzIGJldHdlZW4gMl42MyBhbmQgMl42NCBmb3IgdmFyaW91cyB1c2VzLlxuLy8gSGV4IDB4YzNhNWM4NWM5N2NiMzEyN1xuY29uc3QgazA6IExvbmcgPSBoZXhUb0xvbmcoJ2MzYTVjODVjOTdjYjMxMjcnKTtcbi8vIEhleCAweGI0OTJiNjZmYmU5OGYyNzNcbmNvbnN0IGsxOiBMb25nID0gaGV4VG9Mb25nKCdiNDkyYjY2ZmJlOThmMjczJyk7XG4vLyBIZXggMHg5YWUxNmEzYjJmOTA0MDRmXG5jb25zdCBrMjogTG9uZyA9IGhleFRvTG9uZygnOWFlMTZhM2IyZjkwNDA0ZicpO1xuXG5mdW5jdGlvbiBzaGlmdE1peCh2YWw6IExvbmcpOiBMb25nIHtcbiAgcmV0dXJuIHZhbC54b3IodmFsLnNocnUoNDcpKTtcbn1cblxuZnVuY3Rpb24gZmV0Y2goczogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIG51bUJ5dGVzOiBudW1iZXIpOiBMb25nIHtcbiAgY29uc3QgYnl0ZXMgPSBzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbnVtQnl0ZXMpO1xuICByZXR1cm4gTG9uZy5mcm9tQnl0ZXMoQXJyYXkuZnJvbShieXRlcyksIHRydWUsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBmZXRjaDY0KHM6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogTG9uZyB7XG4gIHJldHVybiBmZXRjaChzLCBvZmZzZXQsIDgpO1xufVxuXG5mdW5jdGlvbiBmZXRjaDMyKHM6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogTG9uZyB7XG4gIHJldHVybiBmZXRjaChzLCBvZmZzZXQsIDQpO1xufVxuXG5mdW5jdGlvbiByb3RhdGU2NCh2YWw6IExvbmcsIHNoaWZ0OiBudW1iZXIpOiBMb25nIHtcbiAgLy8gQXZvaWQgc2hpZnRpbmcgYnkgNjQ6IGRvaW5nIHNvIHlpZWxkcyBhbiB1bmRlZmluZWQgcmVzdWx0LlxuICByZXR1cm4gc2hpZnQgPT09IDAgPyB2YWwgOiB2YWwuc2hydShzaGlmdCkub3IodmFsLnNobCg2NCAtIHNoaWZ0KSk7XG59XG5cbmZ1bmN0aW9uIGhhc2hMZW4xNih1OiBMb25nLCB2OiBMb25nLCBtdWwgPSBoZXhUb0xvbmcoJzlkZGZlYTA4ZWIzODJkNjknKSkge1xuICAvLyBNdXJtdXItaW5zcGlyZWQgaGFzaGluZy5cbiAgbGV0IGEgPSB1Lnhvcih2KS5tdWwobXVsKTtcbiAgYSA9IGEueG9yKGEuc2hydSg0NykpO1xuICBsZXQgYiA9IHYueG9yKGEpLm11bChtdWwpO1xuICBiID0gYi54b3IoYi5zaHJ1KDQ3KSk7XG4gIGIgPSBiLm11bChtdWwpO1xuICByZXR1cm4gYjtcbn1cblxuLy8gUmV0dXJuIGEgMTYtYnl0ZSBoYXNoIGZvciA0OCBieXRlcy4gIFF1aWNrIGFuZCBkaXJ0eS5cbi8vIENhbGxlcnMgZG8gYmVzdCB0byB1c2UgXCJyYW5kb20tbG9va2luZ1wiIHZhbHVlcyBmb3IgYSBhbmQgYi5cbmZ1bmN0aW9uIHdlYWtIYXNoTGVuMzJXaXRoU2VlZHMoXG4gICAgdzogTG9uZywgeDogTG9uZywgeTogTG9uZywgejogTG9uZywgYTogTG9uZywgYjogTG9uZykge1xuICBhID0gYS5hZGQodyk7XG4gIGIgPSByb3RhdGU2NChiLmFkZChhKS5hZGQoeiksIDIxKTtcbiAgY29uc3QgYyA9IGE7XG4gIGEgPSBhLmFkZCh4KTtcbiAgYSA9IGEuYWRkKHkpO1xuICBiID0gYi5hZGQocm90YXRlNjQoYSwgNDQpKTtcbiAgcmV0dXJuIFthLmFkZCh6KSwgYi5hZGQoYyldO1xufVxuXG5mdW5jdGlvbiB3ZWFrSGFzaExlbjMyV2l0aFNlZWRzU3RyKFxuICAgIHM6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCBhOiBMb25nLCBiOiBMb25nKSB7XG4gIHJldHVybiB3ZWFrSGFzaExlbjMyV2l0aFNlZWRzKFxuICAgICAgZmV0Y2g2NChzLCBvZmZzZXQpLCBmZXRjaDY0KHMsIG9mZnNldCArIDgpLCBmZXRjaDY0KHMsIG9mZnNldCArIDE2KSxcbiAgICAgIGZldGNoNjQocywgb2Zmc2V0ICsgMjQpLCBhLCBiKTtcbn1cblxuZnVuY3Rpb24gaGFzaExlbjB0bzE2KHM6IFVpbnQ4QXJyYXksIGxlbiA9IHMubGVuZ3RoKTogTG9uZyB7XG4gIGlmIChsZW4gPj0gOCkge1xuICAgIGNvbnN0IG11bCA9IGsyLmFkZChsZW4gKiAyKTtcbiAgICBjb25zdCBhID0gZmV0Y2g2NChzLCAwKS5hZGQoazIpO1xuICAgIGNvbnN0IGIgPSBmZXRjaDY0KHMsIGxlbiAtIDgpO1xuICAgIGNvbnN0IGMgPSByb3RhdGU2NChiLCAzNykubXVsKG11bCkuYWRkKGEpO1xuICAgIGNvbnN0IGQgPSByb3RhdGU2NChhLCAyNSkuYWRkKGIpLm11bChtdWwpO1xuICAgIHJldHVybiBoYXNoTGVuMTYoYywgZCwgbXVsKTtcbiAgfVxuICBpZiAobGVuID49IDQpIHtcbiAgICBjb25zdCBtdWwgPSBrMi5hZGQobGVuICogMik7XG4gICAgY29uc3QgYSA9IGZldGNoMzIocywgMCk7XG4gICAgcmV0dXJuIGhhc2hMZW4xNihhLnNobCgzKS5hZGQobGVuKSwgZmV0Y2gzMihzLCBsZW4gLSA0KSwgbXVsKTtcbiAgfVxuICBpZiAobGVuID4gMCkge1xuICAgIGNvbnN0IGEgPSBzWzBdO1xuICAgIGNvbnN0IGIgPSBzW2xlbiA+PiAxXTtcbiAgICBjb25zdCBjID0gc1tsZW4gLSAxXTtcbiAgICBjb25zdCB5ID0gYSArIChiIDw8IDgpO1xuICAgIGNvbnN0IHogPSBsZW4gKyAoYyA8PCAyKTtcbiAgICByZXR1cm4gc2hpZnRNaXgoazIubXVsKHkpLnhvcihrMC5tdWwoeikpKS5tdWwoazIpO1xuICB9XG4gIHJldHVybiBrMjtcbn1cblxuZnVuY3Rpb24gaGFzaExlbjE3dG8zMihzOiBVaW50OEFycmF5LCBsZW4gPSBzLmxlbmd0aCk6IExvbmcge1xuICBjb25zdCBtdWwgPSBrMi5hZGQobGVuICogMik7XG4gIGNvbnN0IGEgPSBmZXRjaDY0KHMsIDApLm11bChrMSk7XG4gIGNvbnN0IGIgPSBmZXRjaDY0KHMsIDgpO1xuICBjb25zdCBjID0gZmV0Y2g2NChzLCBsZW4gLSA4KS5tdWwobXVsKTtcbiAgY29uc3QgZCA9IGZldGNoNjQocywgbGVuIC0gMTYpLm11bChrMik7XG4gIHJldHVybiBoYXNoTGVuMTYoXG4gICAgICByb3RhdGU2NChhLmFkZChiKSwgNDMpLmFkZChyb3RhdGU2NChjLCAzMCkpLmFkZChkKSxcbiAgICAgIGEuYWRkKHJvdGF0ZTY0KGIuYWRkKGsyKSwgMTgpKS5hZGQoYyksIG11bCk7XG59XG5cbmZ1bmN0aW9uIGhhc2hMZW4zM3RvNjQoczogVWludDhBcnJheSwgbGVuID0gcy5sZW5ndGgpOiBMb25nIHtcbiAgY29uc3QgbXVsID0gazIuYWRkKGxlbiAqIDIpO1xuICBjb25zdCBhID0gZmV0Y2g2NChzLCAwKS5tdWwoazIpO1xuICBjb25zdCBiID0gZmV0Y2g2NChzLCA4KTtcbiAgY29uc3QgYyA9IGZldGNoNjQocywgbGVuIC0gOCkubXVsKG11bCk7XG4gIGNvbnN0IGQgPSBmZXRjaDY0KHMsIGxlbiAtIDE2KS5tdWwoazIpO1xuICBjb25zdCB5ID0gcm90YXRlNjQoYS5hZGQoYiksIDQzKS5hZGQocm90YXRlNjQoYywgMzApKS5hZGQoZCk7XG4gIGNvbnN0IHogPSBoYXNoTGVuMTYoeSwgYS5hZGQocm90YXRlNjQoYi5hZGQoazIpLCAxOCkpLmFkZChjKSwgbXVsKTtcbiAgY29uc3QgZSA9IGZldGNoNjQocywgMTYpLm11bChtdWwpO1xuICBjb25zdCBmID0gZmV0Y2g2NChzLCAyNCk7XG4gIGNvbnN0IGcgPSB5LmFkZChmZXRjaDY0KHMsIGxlbiAtIDMyKSkubXVsKG11bCk7XG4gIGNvbnN0IGggPSB6LmFkZChmZXRjaDY0KHMsIGxlbiAtIDI0KSkubXVsKG11bCk7XG4gIHJldHVybiBoYXNoTGVuMTYoXG4gICAgICByb3RhdGU2NChlLmFkZChmKSwgNDMpLmFkZChyb3RhdGU2NChnLCAzMCkpLmFkZChoKSxcbiAgICAgIGUuYWRkKHJvdGF0ZTY0KGYuYWRkKGEpLCAxOCkpLmFkZChnKSwgbXVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmdlclByaW50NjQoczogVWludDhBcnJheSwgbGVuID0gcy5sZW5ndGgpOiBMb25nIHtcbiAgY29uc3Qgc2VlZDogTG9uZyA9IExvbmcuZnJvbU51bWJlcig4MSwgdHJ1ZSk7XG4gIGlmIChsZW4gPD0gMzIpIHtcbiAgICBpZiAobGVuIDw9IDE2KSB7XG4gICAgICByZXR1cm4gaGFzaExlbjB0bzE2KHMsIGxlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBoYXNoTGVuMTd0bzMyKHMsIGxlbik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8PSA2NCkge1xuICAgIHJldHVybiBoYXNoTGVuMzN0bzY0KHMsIGxlbik7XG4gIH1cblxuICAvLyBGb3Igc3RyaW5ncyBvdmVyIDY0IGJ5dGVzIHdlIGxvb3AuICBJbnRlcm5hbCBzdGF0ZSBjb25zaXN0cyBvZlxuICAvLyA1NiBieXRlczogdiwgdywgeCwgeSwgYW5kIHouXG4gIGxldCB4ID0gc2VlZDtcbiAgbGV0IHkgPSBzZWVkLm11bChrMSkuYWRkKDExMyk7XG5cbiAgbGV0IHogPSBzaGlmdE1peCh5Lm11bChrMikuYWRkKDExMykpLm11bChrMik7XG4gIGxldCB2ID0gW0xvbmcuVVpFUk8sIExvbmcuVVpFUk9dO1xuICBsZXQgdyA9IFtMb25nLlVaRVJPLCBMb25nLlVaRVJPXTtcbiAgeCA9IHgubXVsKGsyKS5hZGQoZmV0Y2g2NChzLCAwKSk7XG5cbiAgbGV0IG9mZnNldCA9IDA7XG4gIC8vIFNldCBlbmQgc28gdGhhdCBhZnRlciB0aGUgbG9vcCB3ZSBoYXZlIDEgdG8gNjQgYnl0ZXMgbGVmdCB0byBwcm9jZXNzLlxuICBjb25zdCBlbmQgPSAoKGxlbiAtIDEpID4+IDYpICogNjQ7XG4gIGNvbnN0IGxhc3Q2NCA9IGVuZCArICgobGVuIC0gMSkgJiA2MykgLSA2MztcblxuICBkbyB7XG4gICAgeCA9IHJvdGF0ZTY0KHguYWRkKHkpLmFkZCh2WzBdKS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyA4KSksIDM3KS5tdWwoazEpO1xuICAgIHkgPSByb3RhdGU2NCh5LmFkZCh2WzFdKS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyA0OCkpLCA0MikubXVsKGsxKTtcbiAgICB4ID0geC54b3Iod1sxXSk7XG4gICAgeSA9IHkuYWRkKHZbMF0pLmFkZChmZXRjaDY0KHMsIG9mZnNldCArIDQwKSk7XG4gICAgeiA9IHJvdGF0ZTY0KHouYWRkKHdbMF0pLCAzMykubXVsKGsxKTtcbiAgICB2ID0gd2Vha0hhc2hMZW4zMldpdGhTZWVkc1N0cihzLCBvZmZzZXQsIHZbMV0ubXVsKGsxKSwgeC5hZGQod1swXSkpO1xuICAgIHcgPSB3ZWFrSGFzaExlbjMyV2l0aFNlZWRzU3RyKFxuICAgICAgICBzLCBvZmZzZXQgKyAzMiwgei5hZGQod1sxXSksIHkuYWRkKGZldGNoNjQocywgb2Zmc2V0ICsgMTYpKSk7XG5cbiAgICBbeiwgeF0gPSBbeCwgel07XG4gICAgb2Zmc2V0ICs9IDY0O1xuICB9IHdoaWxlIChvZmZzZXQgIT09IGVuZCk7XG4gIGNvbnN0IG11bCA9IGsxLmFkZCh6LmFuZCgweGZmKS5zaGwoMSkpO1xuICAvLyBQb2ludCB0byB0aGUgbGFzdCA2NCBieXRlcyBvZiBpbnB1dC5cbiAgb2Zmc2V0ID0gbGFzdDY0O1xuXG4gIHdbMF0gPSB3WzBdLmFkZCgobGVuIC0gMSkgJiA2Myk7XG4gIHZbMF0gPSB2WzBdLmFkZCh3WzBdKTtcbiAgd1swXSA9IHdbMF0uYWRkKHZbMF0pO1xuXG4gIHggPSByb3RhdGU2NCh4LmFkZCh5KS5hZGQodlswXSkuYWRkKGZldGNoNjQocywgb2Zmc2V0ICsgOCkpLCAzNykubXVsKG11bCk7XG4gIHkgPSByb3RhdGU2NCh5LmFkZCh2WzFdKS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyA0OCkpLCA0MikubXVsKG11bCk7XG4gIHggPSB4Lnhvcih3WzFdLm11bCg5KSk7XG4gIHkgPSB5LmFkZCh2WzBdLm11bCg5KS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyA0MCkpKTtcbiAgeiA9IHJvdGF0ZTY0KHouYWRkKHdbMF0pLCAzMykubXVsKG11bCk7XG4gIHYgPSB3ZWFrSGFzaExlbjMyV2l0aFNlZWRzU3RyKHMsIG9mZnNldCwgdlsxXS5tdWwobXVsKSwgeC5hZGQod1swXSkpO1xuICB3ID0gd2Vha0hhc2hMZW4zMldpdGhTZWVkc1N0cihcbiAgICAgIHMsIG9mZnNldCArIDMyLCB6LmFkZCh3WzFdKSwgeS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyAxNikpKTtcblxuICBbeiwgeF0gPSBbeCwgel07XG5cbiAgcmV0dXJuIGhhc2hMZW4xNihcbiAgICAgIGhhc2hMZW4xNih2WzBdLCB3WzBdLCBtdWwpLmFkZChzaGlmdE1peCh5KS5tdWwoazApKS5hZGQoeiksXG4gICAgICBoYXNoTGVuMTYodlsxXSwgd1sxXSwgbXVsKS5hZGQoeCksIG11bCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport { isTypedArrayBrowser } from './platforms/is_typed_array_browser';\nimport * as base from './util_base';\nexport * from './util_base';\nexport * from './hash_util';\n/**\n * Create typed array for scalar value. Used for storing in `DataStorage`.\n */\nexport function createScalarValue(value, dtype) {\n if (dtype === 'string') {\n return encodeString(value);\n }\n return toTypedArray([value], dtype);\n}\nfunction noConversionNeeded(a, dtype) {\n return (a instanceof Float32Array && dtype === 'float32') ||\n (a instanceof Int32Array && dtype === 'int32') ||\n (a instanceof Uint8Array && dtype === 'bool');\n}\nexport function toTypedArray(a, dtype) {\n if (dtype === 'string') {\n throw new Error('Cannot convert a string[] to a TypedArray');\n }\n if (Array.isArray(a)) {\n a = flatten(a);\n }\n if (env().getBool('DEBUG')) {\n base.checkConversionForErrors(a, dtype);\n }\n if (noConversionNeeded(a, dtype)) {\n return a;\n }\n if (dtype == null || dtype === 'float32' || dtype === 'complex64') {\n return new Float32Array(a);\n }\n else if (dtype === 'int32') {\n return new Int32Array(a);\n }\n else if (dtype === 'bool') {\n const bool = new Uint8Array(a.length);\n for (let i = 0; i < bool.length; ++i) {\n if (Math.round(a[i]) !== 0) {\n bool[i] = 1;\n }\n }\n return bool;\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\n/**\n * Returns the current high-resolution time in milliseconds relative to an\n * arbitrary time in the past. It works across different platforms (node.js,\n * browsers).\n *\n * ```js\n * console.log(tf.util.now());\n * ```\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function now() {\n return env().platform.now();\n}\n/**\n * Returns a platform-specific implementation of\n * [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n *\n * If `fetch` is defined on the global object (`window`, `process`, etc.),\n * `tf.util.fetch` returns that function.\n *\n * If not, `tf.util.fetch` returns a platform-specific solution.\n *\n * ```js\n * const resource = await tf.util.fetch('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs');\n * // handle response\n * ```\n *\n * @doc {heading: 'Util'}\n */\nexport function fetch(path, requestInits) {\n return env().platform.fetch(path, requestInits);\n}\n/**\n * Encodes the provided string into bytes using the provided encoding scheme.\n *\n * @param s The string to encode.\n * @param encoding The encoding scheme. Defaults to utf-8.\n *\n * @doc {heading: 'Util'}\n */\nexport function encodeString(s, encoding = 'utf-8') {\n encoding = encoding || 'utf-8';\n return env().platform.encode(s, encoding);\n}\n/**\n * Decodes the provided bytes into a string using the provided encoding scheme.\n * @param bytes The bytes to decode.\n *\n * @param encoding The encoding scheme. Defaults to utf-8.\n *\n * @doc {heading: 'Util'}\n */\nexport function decodeString(bytes, encoding = 'utf-8') {\n encoding = encoding || 'utf-8';\n return env().platform.decode(bytes, encoding);\n}\nexport function isTypedArray(a) {\n // TODO(mattsoulanille): Remove this fallback in 5.0.0\n if (env().platform.isTypedArray != null) {\n return env().platform.isTypedArray(a);\n }\n else {\n return isTypedArrayBrowser(a);\n }\n}\n// NOTE: We explicitly type out what T extends instead of any so that\n// util.flatten on a nested array of number doesn't try to infer T as a\n// number[][], causing us to explicitly type util.flatten().\n/**\n * Flattens an arbitrarily nested array.\n *\n * ```js\n * const a = [[1, 2], [3, 4], [5, [6, [7]]]];\n * const flat = tf.util.flatten(a);\n * console.log(flat);\n * ```\n *\n * @param arr The nested array to flatten.\n * @param result The destination array which holds the elements.\n * @param skipTypedArray If true, avoids flattening the typed arrays. Defaults\n * to false.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function flatten(arr, result = [], skipTypedArray = false) {\n if (result == null) {\n result = [];\n }\n if (typeof arr === 'boolean' || typeof arr === 'number' ||\n typeof arr === 'string' || base.isPromise(arr) || arr == null ||\n isTypedArray(arr) && skipTypedArray) {\n result.push(arr);\n }\n else if (Array.isArray(arr) || isTypedArray(arr)) {\n for (let i = 0; i < arr.length; ++i) {\n flatten(arr[i], result, skipTypedArray);\n }\n }\n else {\n let maxIndex = -1;\n for (const key of Object.keys(arr)) {\n // 0 or positive integer.\n if (/^([1-9]+[0-9]*|0)$/.test(key)) {\n maxIndex = Math.max(maxIndex, Number(key));\n }\n }\n for (let i = 0; i <= maxIndex; i++) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n flatten(arr[i], result, skipTypedArray);\n }\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sS0FBSyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUM3QixLQUFlLEVBQUUsS0FBZTtJQUNsQyxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEIsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUI7SUFFRCxPQUFPLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQWEsRUFBRSxLQUFlO0lBQ3hELE9BQU8sQ0FBQyxDQUFDLFlBQVksWUFBWSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7UUFDckQsQ0FBQyxDQUFDLFlBQVksVUFBVSxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUM7UUFDOUMsQ0FBQyxDQUFDLFlBQVksVUFBVSxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFhLEVBQUUsS0FBZTtJQUN6RCxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3BCLENBQUMsR0FBRyxPQUFPLENB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TUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52fSBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCB7aXNUeXBlZEFycmF5QnJvd3Nlcn0gZnJvbSAnLi9wbGF0Zm9ybXMvaXNfdHlwZWRfYXJyYXlfYnJvd3Nlcic7XG5pbXBvcnQge0JhY2tlbmRWYWx1ZXMsIERhdGFUeXBlLCBSZWN1cnNpdmVBcnJheSwgVGVuc29yTGlrZSwgVHlwZWRBcnJheX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vdXRpbF9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbF9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vaGFzaF91dGlsJztcblxuLyoqXG4gKiBDcmVhdGUgdHlwZWQgYXJyYXkgZm9yIHNjYWxhciB2YWx1ZS4gVXNlZCBmb3Igc3RvcmluZyBpbiBgRGF0YVN0b3JhZ2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2NhbGFyVmFsdWUoXG4gICAgdmFsdWU6IERhdGFUeXBlLCBkdHlwZTogRGF0YVR5cGUpOiBCYWNrZW5kVmFsdWVzIHtcbiAgaWYgKGR0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlbmNvZGVTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHRvVHlwZWRBcnJheShbdmFsdWVdLCBkdHlwZSk7XG59XG5cbmZ1bmN0aW9uIG5vQ29udmVyc2lvbk5lZWRlZChhOiBUZW5zb3JMaWtlLCBkdHlwZTogRGF0YVR5cGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIChhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5ICYmIGR0eXBlID09PSAnZmxvYXQzMicpIHx8XG4gICAgICAoYSBpbnN0YW5jZW9mIEludDMyQXJyYXkgJiYgZHR5cGUgPT09ICdpbnQzMicpIHx8XG4gICAgICAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgZHR5cGUgPT09ICdib29sJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVkQXJyYXkoYTogVGVuc29yTGlrZSwgZHR5cGU6IERhdGFUeXBlKTogVHlwZWRBcnJheSB7XG4gIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgc3RyaW5nW10gdG8gYSBUeXBlZEFycmF5Jyk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICBhID0gZmxhdHRlbihhKTtcbiAgfVxuXG4gIGlmIChlbnYoKS5nZXRCb29sKCdERUJVRycpKSB7XG4gICAgYmFzZS5jaGVja0NvbnZlcnNpb25Gb3JFcnJvcnMoYSBhcyBudW1iZXJbXSwgZHR5cGUpO1xuICB9XG4gIGlmIChub0NvbnZlcnNpb25OZWVkZWQoYSwgZHR5cGUpKSB7XG4gICAgcmV0dXJuIGEgYXMgVHlwZWRBcnJheTtcbiAgfVxuICBpZiAoZHR5cGUgPT0gbnVsbCB8fCBkdHlwZSA9PT0gJ2Zsb2F0MzInIHx8IGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGEgYXMgbnVtYmVyW10pO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KGEgYXMgbnVtYmVyW10pO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICBjb25zdCBib29sID0gbmV3IFVpbnQ4QXJyYXkoKGEgYXMgbnVtYmVyW10pLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib29sLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoTWF0aC5yb3VuZCgoYSBhcyBudW1iZXJbXSlbaV0pICE9PSAwKSB7XG4gICAgICAgIGJvb2xbaV0gPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYm9vbDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YSB0eXBlICR7ZHR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGhpZ2gtcmVzb2x1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyByZWxhdGl2ZSB0byBhblxuICogYXJiaXRyYXJ5IHRpbWUgaW4gdGhlIHBhc3QuIEl0IHdvcmtzIGFjcm9zcyBkaWZmZXJlbnQgcGxhdGZvcm1zIChub2RlLmpzLFxuICogYnJvd3NlcnMpLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zb2xlLmxvZyh0Zi51dGlsLm5vdygpKTtcbiAqIGBgYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdVdGlsJywgbmFtZXNwYWNlOiAndXRpbCd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3coKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudigpLnBsYXRmb3JtLm5vdygpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZlxuICogW2BmZXRjaGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkpLlxuICpcbiAqIElmIGBmZXRjaGAgaXMgZGVmaW5lZCBvbiB0aGUgZ2xvYmFsIG9iamVjdCAoYHdpbmRvd2AsIGBwcm9jZXNzYCwgZXRjLiksXG4gKiBgdGYudXRpbC5mZXRjaGAgcmV0dXJucyB0aGF0IGZ1bmN0aW9uLlxuICpcbiAqIElmIG5vdCwgYHRmLnV0aWwuZmV0Y2hgIHJldHVybnMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBzb2x1dGlvbi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzb3VyY2UgPSBhd2FpdCB0Zi51dGlsLmZldGNoKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0B0ZW5zb3JmbG93L3RmanMnKTtcbiAqIC8vIGhhbmRsZSByZXNwb25zZVxuICogYGBgXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1V0aWwnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goXG4gICAgcGF0aDogc3RyaW5nLCByZXF1ZXN0SW5pdHM/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgcmV0dXJuIGVudigpLnBsYXRmb3JtLmZldGNoKHBhdGgsIHJlcXVlc3RJbml0cyk7XG59XG5cbi8qKlxuICogRW5jb2RlcyB0aGUgcHJvdmlkZWQgc3RyaW5nIGludG8gYnl0ZXMgdXNpbmcgdGhlIHByb3ZpZGVkIGVuY29kaW5nIHNjaGVtZS5cbiAqXG4gKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqIEBwYXJhbSBlbmNvZGluZyBUaGUgZW5jb2Rpbmcgc2NoZW1lLiBEZWZhdWx0cyB0byB1dGYtOC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVXRpbCd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVTdHJpbmcoczogc3RyaW5nLCBlbmNvZGluZyA9ICd1dGYtOCcpOiBVaW50OEFycmF5IHtcbiAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAndXRmLTgnO1xuICByZXR1cm4gZW52KCkucGxhdGZvcm0uZW5jb2RlKHMsIGVuY29kaW5nKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBwcm92aWRlZCBieXRlcyBpbnRvIGEgc3RyaW5nIHVzaW5nIHRoZSBwcm92aWRlZCBlbmNvZGluZyBzY2hlbWUuXG4gKiBAcGFyYW0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlY29kZS5cbiAqXG4gKiBAcGFyYW0gZW5jb2RpbmcgVGhlIGVuY29kaW5nIHNjaGVtZS4gRGVmYXVsdHMgdG8gdXRmLTguXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1V0aWwnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RyaW5nKGJ5dGVzOiBVaW50OEFycmF5LCBlbmNvZGluZyA9ICd1dGYtOCcpOiBzdHJpbmcge1xuICBlbmNvZGluZyA9IGVuY29kaW5nIHx8ICd1dGYtOCc7XG4gIHJldHVybiBlbnYoKS5wbGF0Zm9ybS5kZWNvZGUoYnl0ZXMsIGVuY29kaW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZWRBcnJheShhOiB7fSk6IGEgaXMgRmxvYXQzMkFycmF5fEludDMyQXJyYXl8VWludDhBcnJheXxcbiAgICBVaW50OENsYW1wZWRBcnJheSB7XG4gIC8vIFRPRE8obWF0dHNvdWxhbmlsbGUpOiBSZW1vdmUgdGhpcyBmYWxsYmFjayBpbiA1LjAuMFxuICBpZiAoZW52KCkucGxhdGZvcm0uaXNUeXBlZEFycmF5ICE9IG51bGwpIHtcbiAgICByZXR1cm4gZW52KCkucGxhdGZvcm0uaXNUeXBlZEFycmF5KGEpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpc1R5cGVkQXJyYXlCcm93c2VyKGEpO1xuICB9XG59XG5cbi8vIE5PVEU6IFdlIGV4cGxpY2l0bHkgdHlwZSBvdXQgd2hhdCBUIGV4dGVuZHMgaW5zdGVhZCBvZiBhbnkgc28gdGhhdFxuLy8gdXRpbC5mbGF0dGVuIG9uIGEgbmVzdGVkIGFycmF5IG9mIG51bWJlciBkb2Vzbid0IHRyeSB0byBpbmZlciBUIGFzIGFcbi8vIG51bWJlcltdW10sIGNhdXNpbmcgdXMgdG8gZXhwbGljaXRseSB0eXBlIHV0aWwuZmxhdHRlbjxudW1iZXI+KCkuXG4vKipcbiAqICBGbGF0dGVucyBhbiBhcmJpdHJhcmlseSBuZXN0ZWQgYXJyYXkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSBbWzEsIDJdLCBbMywgNF0sIFs1LCBbNiwgWzddXV1dO1xuICogY29uc3QgZmxhdCA9IHRmLnV0aWwuZmxhdHRlbihhKTtcbiAqIGNvbnNvbGUubG9nKGZsYXQpO1xuICogYGBgXG4gKlxuICogIEBwYXJhbSBhcnIgVGhlIG5lc3RlZCBhcnJheSB0byBmbGF0dGVuLlxuICogIEBwYXJhbSByZXN1bHQgVGhlIGRlc3RpbmF0aW9uIGFycmF5IHdoaWNoIGhvbGRzIHRoZSBlbGVtZW50cy5cbiAqICBAcGFyYW0gc2tpcFR5cGVkQXJyYXkgSWYgdHJ1ZSwgYXZvaWRzIGZsYXR0ZW5pbmcgdGhlIHR5cGVkIGFycmF5cy4gRGVmYXVsdHNcbiAqICAgICAgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1V0aWwnLCBuYW1lc3BhY2U6ICd1dGlsJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uXG5mbGF0dGVuPFQgZXh0ZW5kcyBudW1iZXJ8Ym9vbGVhbnxzdHJpbmd8UHJvbWlzZTxudW1iZXI+fFR5cGVkQXJyYXk+KFxuICAgIGFycjogVHxSZWN1cnNpdmVBcnJheTxUPiwgcmVzdWx0OiBUW10gPSBbXSwgc2tpcFR5cGVkQXJyYXkgPSBmYWxzZSk6IFRbXSB7XG4gIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgIHJlc3VsdCA9IFtdO1xuICB9XG4gIGlmICh0eXBlb2YgYXJyID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGFyciA9PT0gJ251bWJlcicgfHxcbiAgICB0eXBlb2YgYXJyID09PSAnc3RyaW5nJyB8fCBiYXNlLmlzUHJvbWlzZShhcnIpIHx8IGFyciA9PSBudWxsIHx8XG4gICAgICBpc1R5cGVkQXJyYXkoYXJyKSAmJiBza2lwVHlwZWRBcnJheSkge1xuICAgIHJlc3VsdC5wdXNoKGFyciBhcyBUKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFycikgfHwgaXNUeXBlZEFycmF5KGFycikpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgZmxhdHRlbihhcnJbaV0sIHJlc3VsdCwgc2tpcFR5cGVkQXJyYXkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgbWF4SW5kZXggPSAtMTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhcnIpKSB7XG4gICAgICAvLyAwIG9yIHBvc2l0aXZlIGludGVnZXIuXG4gICAgICBpZiAoL14oWzEtOV0rWzAtOV0qfDApJC8udGVzdChrZXkpKSB7XG4gICAgICAgIG1heEluZGV4ID0gTWF0aC5tYXgobWF4SW5kZXgsIE51bWJlcihrZXkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbWF4SW5kZXg7IGkrKykge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgZmxhdHRlbigoYXJyIGFzIFJlY3Vyc2l2ZUFycmF5PFQ+KVtpXSwgcmVzdWx0LCBza2lwVHlwZWRBcnJheSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport * as util from './util';\nexport class Profiler {\n constructor(backendTimer, logger) {\n this.backendTimer = backendTimer;\n this.logger = logger;\n if (logger == null) {\n this.logger = new Logger();\n }\n }\n profileKernel(kernelName, inputs, f) {\n let outputs;\n const holdResultWrapperFn = () => {\n outputs = f();\n };\n let timer;\n const start = util.now();\n if (this.backendTimer.timerAvailable()) {\n timer = this.backendTimer.time(holdResultWrapperFn);\n }\n else {\n holdResultWrapperFn();\n for (const output of outputs) {\n output.dataSync();\n }\n timer = Promise.resolve({ kernelMs: util.now() - start });\n }\n if (env().getBool('CHECK_COMPUTATION_FOR_ERRORS')) {\n for (let i = 0; i < outputs.length; i++) {\n const output = outputs[i];\n // Dangling promise here because we don't want to propagate up\n // asynchronicity.\n output.data().then(tensorVals => {\n checkComputationForErrors(tensorVals, output.dtype, kernelName);\n });\n }\n }\n const kernelProfile = {\n kernelName,\n outputs,\n inputs,\n timeMs: timer.then(timing => timing.kernelMs),\n extraInfo: timer.then(timing => timing.getExtraProfileInfo != null ?\n timing.getExtraProfileInfo() :\n '')\n };\n return kernelProfile;\n }\n logKernelProfile(kernelProfile) {\n const { kernelName, outputs, timeMs, inputs, extraInfo } = kernelProfile;\n outputs.forEach(result => {\n Promise.all([result.data(), timeMs, extraInfo]).then(valueContainer => {\n this.logger.logKernelProfile(kernelName, result, valueContainer[0], valueContainer[1], inputs, valueContainer[2]);\n });\n });\n }\n}\nexport function checkComputationForErrors(vals, dtype, kernelName) {\n if (dtype !== 'float32') {\n // Only floating point computations will generate NaN values\n return false;\n }\n for (let i = 0; i < vals.length; i++) {\n const num = vals[i];\n if (isNaN(num) || !isFinite(num)) {\n // Throwing custom exception so behavior is testable.\n console.warn(`Found ${num} in the result of '${kernelName}'`);\n return true;\n }\n }\n return false;\n}\nexport class Logger {\n logKernelProfile(name, result, vals, timeMs, inputs, extraInfo) {\n const time = typeof timeMs === 'number' ? util.rightPad(`${timeMs}ms`, 9) :\n timeMs['error'];\n const paddedName = util.rightPad(name, 25);\n const rank = result.rank;\n const size = result.size;\n const shape = util.rightPad(result.shape.toString(), 14);\n let inputShapesDescription = '';\n for (const name in inputs) {\n const input = inputs[name];\n if (input != null) {\n // The input might be a non-tensor (e.g HTMLImageElement), in which case\n // we claim the output shape as input shape.\n const inputShape = input.shape || result.shape;\n const inputRank = inputShape.length;\n inputShapesDescription +=\n `${name}: ${inputRank}D ${inputRank > 0 ? inputShape : ''} `;\n }\n }\n 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');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL3Byb2ZpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJbEMsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUM7QUFVL0IsTUFBTSxPQUFPLFFBQVE7SUFDbkIsWUFBb0IsWUFBMEIsRUFBVSxNQUFlO1FBQW5ELGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUNyRSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFrQixFQUFFLE1BQXNCLEVBQUUsQ0FBaUI7UUFFekUsSUFBSSxPQUFpQixDQUFDO1FBQ3RCLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFO1lBQy9CLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFDRixJQUFJLEtBQWlDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUN0QyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDNUIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ25CO1lBQ0QsS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO1lBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLDhEQUE4RDtnQkFDOUQsa0JBQWtCO2dCQUNsQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUM5Qix5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsTUFBTSxhQUFhLEdBQUc7WUFDcEIsVUFBVTtZQUNWLE9BQU87WUFDUCxNQUFNO1lBQ04sTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzdDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDOUIsRUFBRSxDQUFDO1NBQ1osQ0FBQztRQUNGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxhQUE0QjtRQUMzQyxNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxHQUFHLGFBQWEsQ0FBQztRQUV2RSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUN4QixVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUNoRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUNyQyxJQUFvQixFQUFFLEtBQVEsRUFBRSxVQUFrQjtJQUNwRCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDdkIsNERBQTREO1FBQzVELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFXLENBQUM7UUFDOUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDaEMscURBQXFEO1lBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLHNCQUFzQixVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQzlELE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sT0FBTyxNQUFNO0lBQ2pCLGdCQUFnQixDQUNaLElBQVksRUFBRSxNQUFjLEVBQUUsSUFBZ0IsRUFDOUMsTUFBOEIsRUFBRSxNQUFzQixFQUN0RCxTQUFrQjtRQUNwQixNQUFNLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1FBRWhDLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ2pCLHdFQUF3RTtnQkFDeEUsNENBQTRDO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQy9DLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3BDLHNCQUFzQjtvQkFDbEIsR0FBRyxJQUFJLEtBQUssU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7YUFDbEU7U0FDRjtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQ1AsS0FBSyxVQUFVLE9BQU8sSUFBSSxPQUFPLElBQUksS0FBSyxLQUFLLE9BQU8sSUFBSSxPQUN0RCxzQkFBc0IsT0FBTyxTQUFTLEVBQUUsRUFDNUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQzlELGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtCYWNrZW5kVGltZXIsIEJhY2tlbmRUaW1pbmdJbmZvfSBmcm9tICcuL2JhY2tlbmRzL2JhY2tlbmQnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7RGF0YVR5cGUsIERhdGFUeXBlTWFwLCBUeXBlZEFycmF5fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IHR5cGUgS2VybmVsUHJvZmlsZSA9IHtcbiAga2VybmVsTmFtZTogc3RyaW5nLFxuICBvdXRwdXRzOiBUZW5zb3JbXSxcbiAgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCxcbiAgdGltZU1zOiBQcm9taXNlPG51bWJlcnx7ZXJyb3I6IHN0cmluZ30+LFxuICBleHRyYUluZm86IFByb21pc2U8c3RyaW5nPlxufTtcblxuZXhwb3J0IGNsYXNzIFByb2ZpbGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBiYWNrZW5kVGltZXI6IEJhY2tlbmRUaW1lciwgcHJpdmF0ZSBsb2dnZXI/OiBMb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyID09IG51bGwpIHtcbiAgICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByb2ZpbGVLZXJuZWwoa2VybmVsTmFtZTogc3RyaW5nLCBpbnB1dHM6IE5hbWVkVGVuc29yTWFwLCBmOiAoKSA9PiBUZW5zb3JbXSk6XG4gICAgICBLZXJuZWxQcm9maWxlIHtcbiAgICBsZXQgb3V0cHV0czogVGVuc29yW107XG4gICAgY29uc3QgaG9sZFJlc3VsdFdyYXBwZXJGbiA9ICgpID0+IHtcbiAgICAgIG91dHB1dHMgPSBmKCk7XG4gICAgfTtcbiAgICBsZXQgdGltZXI6IFByb21pc2U8QmFja2VuZFRpbWluZ0luZm8+O1xuICAgIGNvbnN0IHN0YXJ0ID0gdXRpbC5ub3coKTtcbiAgICBpZiAodGhpcy5iYWNrZW5kVGltZXIudGltZXJBdmFpbGFibGUoKSkge1xuICAgICAgdGltZXIgPSB0aGlzLmJhY2tlbmRUaW1lci50aW1lKGhvbGRSZXN1bHRXcmFwcGVyRm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBob2xkUmVzdWx0V3JhcHBlckZuKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBvdXRwdXRzKSB7XG4gICAgICAgIG91dHB1dC5kYXRhU3luYygpO1xuICAgICAgfVxuICAgICAgdGltZXIgPSBQcm9taXNlLnJlc29sdmUoe2tlcm5lbE1zOiB1dGlsLm5vdygpIC0gc3RhcnR9KTtcbiAgICB9XG4gICAgaWYgKGVudigpLmdldEJvb2woJ0NIRUNLX0NPTVBVVEFUSU9OX0ZPUl9FUlJPUlMnKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIC8vIERhbmdsaW5nIHByb21pc2UgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcHJvcGFnYXRlIHVwXG4gICAgICAgIC8vIGFzeW5jaHJvbmljaXR5LlxuICAgICAgICBvdXRwdXQuZGF0YSgpLnRoZW4odGVuc29yVmFscyA9PiB7XG4gICAgICAgICAgY2hlY2tDb21wdXRhdGlvbkZvckVycm9ycyh0ZW5zb3JWYWxzLCBvdXRwdXQuZHR5cGUsIGtlcm5lbE5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrZXJuZWxQcm9maWxlID0ge1xuICAgICAga2VybmVsTmFtZSxcbiAgICAgIG91dHB1dHMsXG4gICAgICBpbnB1dHMsXG4gICAgICB0aW1lTXM6IHRpbWVyLnRoZW4odGltaW5nID0+IHRpbWluZy5rZXJuZWxNcyksXG4gICAgICBleHRyYUluZm86IHRpbWVyLnRoZW4oXG4gICAgICAgICAgdGltaW5nID0+IHRpbWluZy5nZXRFeHRyYVByb2ZpbGVJbmZvICE9IG51bGwgP1xuICAgICAgICAgICAgICB0aW1pbmcuZ2V0RXh0cmFQcm9maWxlSW5mbygpIDpcbiAgICAgICAgICAgICAgJycpXG4gICAgfTtcbiAgICByZXR1cm4ga2VybmVsUHJvZmlsZTtcbiAgfVxuXG4gIGxvZ0tlcm5lbFByb2ZpbGUoa2VybmVsUHJvZmlsZTogS2VybmVsUHJvZmlsZSk6IHZvaWQge1xuICAgIGNvbnN0IHtrZXJuZWxOYW1lLCBvdXRwdXRzLCB0aW1lTXMsIGlucHV0cywgZXh0cmFJbmZvfSA9IGtlcm5lbFByb2ZpbGU7XG5cbiAgICBvdXRwdXRzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIFByb21pc2UuYWxsKFtyZXN1bHQuZGF0YSgpLCB0aW1lTXMsIGV4dHJhSW5mb10pLnRoZW4odmFsdWVDb250YWluZXIgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5sb2dLZXJuZWxQcm9maWxlKFxuICAgICAgICAgICAga2VybmVsTmFtZSwgcmVzdWx0LCB2YWx1ZUNvbnRhaW5lclswXSwgdmFsdWVDb250YWluZXJbMV0sIGlucHV0cyxcbiAgICAgICAgICAgIHZhbHVlQ29udGFpbmVyWzJdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbXB1dGF0aW9uRm9yRXJyb3JzPEQgZXh0ZW5kcyBEYXRhVHlwZT4oXG4gICAgdmFsczogRGF0YVR5cGVNYXBbRF0sIGR0eXBlOiBELCBrZXJuZWxOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGR0eXBlICE9PSAnZmxvYXQzMicpIHtcbiAgICAvLyBPbmx5IGZsb2F0aW5nIHBvaW50IGNvbXB1dGF0aW9ucyB3aWxsIGdlbmVyYXRlIE5hTiB2YWx1ZXNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbnVtID0gdmFsc1tpXSBhcyBudW1iZXI7XG4gICAgaWYgKGlzTmFOKG51bSkgfHwgIWlzRmluaXRlKG51bSkpIHtcbiAgICAgIC8vIFRocm93aW5nIGN1c3RvbSBleGNlcHRpb24gc28gYmVoYXZpb3IgaXMgdGVzdGFibGUuXG4gICAgICBjb25zb2xlLndhcm4oYEZvdW5kICR7bnVtfSBpbiB0aGUgcmVzdWx0IG9mICcke2tlcm5lbE5hbWV9J2ApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciB7XG4gIGxvZ0tlcm5lbFByb2ZpbGUoXG4gICAgICBuYW1lOiBzdHJpbmcsIHJlc3VsdDogVGVuc29yLCB2YWxzOiBUeXBlZEFycmF5LFxuICAgICAgdGltZU1zOiBudW1iZXJ8e2Vycm9yOiBzdHJpbmd9LCBpbnB1dHM6IE5hbWVkVGVuc29yTWFwLFxuICAgICAgZXh0cmFJbmZvPzogc3RyaW5nKSB7XG4gICAgY29uc3QgdGltZSA9IHR5cGVvZiB0aW1lTXMgPT09ICdudW1iZXInID8gdXRpbC5yaWdodFBhZChgJHt0aW1lTXN9bXNgLCA5KSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZU1zWydlcnJvciddO1xuICAgIGNvbnN0IHBhZGRlZE5hbWUgPSB1dGlsLnJpZ2h0UGFkKG5hbWUsIDI1KTtcbiAgICBjb25zdCByYW5rID0gcmVzdWx0LnJhbms7XG4gICAgY29uc3Qgc2l6ZSA9IHJlc3VsdC5zaXplO1xuICAgIGNvbnN0IHNoYXBlID0gdXRpbC5yaWdodFBhZChyZXN1bHQuc2hhcGUudG9TdHJpbmcoKSwgMTQpO1xuICAgIGxldCBpbnB1dFNoYXBlc0Rlc2NyaXB0aW9uID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gaW5wdXRzKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0c1tuYW1lXTtcbiAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRoZSBpbnB1dCBtaWdodCBiZSBhIG5vbi10ZW5zb3IgKGUuZyBIVE1MSW1hZ2VFbGVtZW50KSwgaW4gd2hpY2ggY2FzZVxuICAgICAgICAvLyB3ZSBjbGFpbSB0aGUgb3V0cHV0IHNoYXBlIGFzIGlucHV0IHNoYXBlLlxuICAgICAgICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXQuc2hhcGUgfHwgcmVzdWx0LnNoYXBlO1xuICAgICAgICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aDtcbiAgICAgICAgaW5wdXRTaGFwZXNEZXNjcmlwdGlvbiArPVxuICAgICAgICAgICAgYCR7bmFtZX06ICR7aW5wdXRSYW5rfUQgJHtpbnB1dFJhbmsgPiAwID8gaW5wdXRTaGFwZSA6ICcnfSBgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgJWMke3BhZGRlZE5hbWV9XFx0JWMke3RpbWV9XFx0JWMke3Jhbmt9RCAke3NoYXBlfVxcdCVjJHtzaXplfVxcdCVjJHtcbiAgICAgICAgICAgIGlucHV0U2hhcGVzRGVzY3JpcHRpb259XFx0JWMke2V4dHJhSW5mb31gLFxuICAgICAgICAnZm9udC13ZWlnaHQ6Ym9sZCcsICdjb2xvcjpyZWQnLCAnY29sb3I6Ymx1ZScsICdjb2xvcjogb3JhbmdlJyxcbiAgICAgICAgJ2NvbG9yOiBncmVlbicsICdjb2xvcjogc3RlZWxibHVlJyk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { computeStrides, isString, rightPad, sizeFromShape } from './util';\n// Maximum number of values before we decide to show ellipsis.\nconst FORMAT_LIMIT_NUM_VALS = 20;\n// Number of first and last values to show when displaying a, b,...,y, z.\nconst FORMAT_NUM_FIRST_LAST_VALS = 3;\n// Number of significant digits to show.\nconst FORMAT_NUM_SIG_DIGITS = 7;\nexport function tensorToString(vals, shape, dtype, verbose) {\n const strides = computeStrides(shape);\n const padPerCol = computeMaxSizePerColumn(vals, shape, dtype, strides);\n const rank = shape.length;\n const valsLines = subTensorToString(vals, shape, dtype, strides, padPerCol);\n const lines = ['Tensor'];\n if (verbose) {\n lines.push(` dtype: ${dtype}`);\n lines.push(` rank: ${rank}`);\n lines.push(` shape: [${shape}]`);\n lines.push(` values:`);\n }\n lines.push(valsLines.map(l => ' ' + l).join('\\n'));\n return lines.join('\\n');\n}\nfunction computeMaxSizePerColumn(vals, shape, dtype, strides) {\n const n = sizeFromShape(shape);\n const numCols = strides[strides.length - 1];\n const padPerCol = new Array(numCols).fill(0);\n const rank = shape.length;\n const valuesOrTuples = dtype === 'complex64' ? createComplexTuples(vals) : vals;\n if (rank > 1) {\n for (let row = 0; row < n / numCols; row++) {\n const offset = row * numCols;\n for (let j = 0; j < numCols; j++) {\n padPerCol[j] = Math.max(padPerCol[j], valToString(valuesOrTuples[offset + j], 0, dtype).length);\n }\n }\n }\n return padPerCol;\n}\nfunction valToString(val, pad, dtype) {\n let valStr;\n if (Array.isArray(val)) {\n valStr = `${parseFloat(val[0].toFixed(FORMAT_NUM_SIG_DIGITS))} + ` +\n `${parseFloat(val[1].toFixed(FORMAT_NUM_SIG_DIGITS))}j`;\n }\n else if (isString(val)) {\n valStr = `'${val}'`;\n }\n else if (dtype === 'bool') {\n valStr = boolNumToString(val);\n }\n else {\n valStr = parseFloat(val.toFixed(FORMAT_NUM_SIG_DIGITS)).toString();\n }\n return rightPad(valStr, pad);\n}\nfunction boolNumToString(v) {\n return v === 0 ? 'false' : 'true';\n}\nfunction subTensorToString(vals, shape, dtype, strides, padPerCol, isLast = true) {\n const storagePerElement = dtype === 'complex64' ? 2 : 1;\n const size = shape[0];\n const rank = shape.length;\n if (rank === 0) {\n if (dtype === 'complex64') {\n const complexTuple = createComplexTuples(vals);\n return [valToString(complexTuple[0], 0, dtype)];\n }\n if (dtype === 'bool') {\n return [boolNumToString(vals[0])];\n }\n return [vals[0].toString()];\n }\n if (rank === 1) {\n if (size > FORMAT_LIMIT_NUM_VALS) {\n const firstValsSize = FORMAT_NUM_FIRST_LAST_VALS * storagePerElement;\n let firstVals = Array.from(vals.slice(0, firstValsSize));\n let lastVals = Array.from(vals.slice((size - FORMAT_NUM_FIRST_LAST_VALS) * storagePerElement, size * storagePerElement));\n if (dtype === 'complex64') {\n firstVals = createComplexTuples(firstVals);\n lastVals = createComplexTuples(lastVals);\n }\n return [\n '[' +\n firstVals.map((x, i) => valToString(x, padPerCol[i], dtype))\n .join(', ') +\n ', ..., ' +\n lastVals\n .map((x, i) => valToString(x, padPerCol[size - FORMAT_NUM_FIRST_LAST_VALS + i], dtype))\n .join(', ') +\n ']'\n ];\n }\n const displayVals = dtype === 'complex64' ? createComplexTuples(vals) :\n Array.from(vals);\n return [\n '[' +\n displayVals.map((x, i) => valToString(x, padPerCol[i], dtype))\n .join(', ') +\n ']'\n ];\n }\n // The array is rank 2 or more.\n const subshape = shape.slice(1);\n const substrides = strides.slice(1);\n const stride = strides[0] * storagePerElement;\n const lines = [];\n if (size > FORMAT_LIMIT_NUM_VALS) {\n for (let i = 0; i < FORMAT_NUM_FIRST_LAST_VALS; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, false /* isLast */));\n }\n lines.push('...');\n for (let i = size - FORMAT_NUM_FIRST_LAST_VALS; i < size; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1 /* isLast */));\n }\n }\n else {\n for (let i = 0; i < size; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1 /* isLast */));\n }\n }\n const sep = rank === 2 ? ',' : '';\n lines[0] = '[' + (size > 0 ? lines[0] + sep : '');\n for (let i = 1; i < lines.length - 1; i++) {\n lines[i] = ' ' + lines[i] + sep;\n }\n let newLineSep = ',\\n';\n for (let i = 2; i < rank; i++) {\n newLineSep += '\\n';\n }\n lines[lines.length - 1] =\n ' ' + lines[lines.length - 1] + ']' + (isLast ? '' : newLineSep);\n return lines;\n}\nfunction createComplexTuples(vals) {\n const complexTuples = [];\n for (let i = 0; i < vals.length; i += 2) {\n complexTuples.push([vals[i], vals[i + 1]]);\n }\n return complexTuples;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX2Zvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvdGVuc29yX2Zvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXpFLDhEQUE4RDtBQUM5RCxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUNqQyx5RUFBeUU7QUFDekUsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFDckMsd0NBQXdDO0FBQ3hDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBRWhDLE1BQU0sVUFBVSxjQUFjLENBQzFCLElBQXlCLEVBQUUsS0FBZSxFQUFFLEtBQWUsRUFDM0QsT0FBZ0I7SUFDbEIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekIsSUFBSSxPQUFPLEVBQUU7UUFDWCxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxHQUFHLENBQUMsQ0FB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QUFDLENBQUM7UUFDbkIsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLElBQ1U7SUFDckMsTUFBTSxhQUFhLEdBQTRCLEVBQUUsQ0FBQztJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBcUIsQ0FBQyxDQUFDO0tBQ2hFO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgVHlwZWRBcnJheX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2NvbXB1dGVTdHJpZGVzLCBpc1N0cmluZywgcmlnaHRQYWQsIHNpemVGcm9tU2hhcGV9IGZyb20gJy4vdXRpbCc7XG5cbi8vIE1heGltdW0gbnVtYmVyIG9mIHZhbHVlcyBiZWZvcmUgd2UgZGVjaWRlIHRvIHNob3cgZWxsaXBzaXMuXG5jb25zdCBGT1JNQVRfTElNSVRfTlVNX1ZBTFMgPSAyMDtcbi8vIE51bWJlciBvZiBmaXJzdCBhbmQgbGFzdCB2YWx1ZXMgdG8gc2hvdyB3aGVuIGRpc3BsYXlpbmcgYSwgYiwuLi4seSwgei5cbmNvbnN0IEZPUk1BVF9OVU1fRklSU1RfTEFTVF9WQUxTID0gMztcbi8vIE51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgdG8gc2hvdy5cbmNvbnN0IEZPUk1BVF9OVU1fU0lHX0RJR0lUUyA9IDc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3JUb1N0cmluZyhcbiAgICB2YWxzOiBUeXBlZEFycmF5fHN0cmluZ1tdLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICB2ZXJib3NlOiBib29sZWFuKSB7XG4gIGNvbnN0IHN0cmlkZXMgPSBjb21wdXRlU3RyaWRlcyhzaGFwZSk7XG4gIGNvbnN0IHBhZFBlckNvbCA9IGNvbXB1dGVNYXhTaXplUGVyQ29sdW1uKHZhbHMsIHNoYXBlLCBkdHlwZSwgc3RyaWRlcyk7XG4gIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGg7XG4gIGNvbnN0IHZhbHNMaW5lcyA9IHN1YlRlbnNvclRvU3RyaW5nKHZhbHMsIHNoYXBlLCBkdHlwZSwgc3RyaWRlcywgcGFkUGVyQ29sKTtcbiAgY29uc3QgbGluZXMgPSBbJ1RlbnNvciddO1xuICBpZiAodmVyYm9zZSkge1xuICAgIGxpbmVzLnB1c2goYCAgZHR5cGU6ICR7ZHR5cGV9YCk7XG4gICAgbGluZXMucHVzaChgICByYW5rOiAke3Jhbmt9YCk7XG4gICAgbGluZXMucHVzaChgICBzaGFwZTogWyR7c2hhcGV9XWApO1xuICAgIGxpbmVzLnB1c2goYCAgdmFsdWVzOmApO1xuICB9XG4gIGxpbmVzLnB1c2godmFsc0xpbmVzLm1hcChsID0+ICcgICAgJyArIGwpLmpvaW4oJ1xcbicpKTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlTWF4U2l6ZVBlckNvbHVtbihcbiAgICB2YWxzOiBUeXBlZEFycmF5fHN0cmluZ1tdLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICBzdHJpZGVzOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbiA9IHNpemVGcm9tU2hhcGUoc2hhcGUpO1xuICBjb25zdCBudW1Db2xzID0gc3RyaWRlc1tzdHJpZGVzLmxlbmd0aCAtIDFdO1xuICBjb25zdCBwYWRQZXJDb2wgPSBuZXcgQXJyYXkobnVtQ29scykuZmlsbCgwKTtcbiAgY29uc3QgcmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgY29uc3QgdmFsdWVzT3JUdXBsZXMgPVxuICAgICAgZHR5cGUgPT09ICdjb21wbGV4NjQnID8gY3JlYXRlQ29tcGxleFR1cGxlcyh2YWxzKSA6IHZhbHM7XG5cbiAgaWYgKHJhbmsgPiAxKSB7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgbiAvIG51bUNvbHM7IHJvdysrKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSByb3cgKiBudW1Db2xzO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2xzOyBqKyspIHtcbiAgICAgICAgcGFkUGVyQ29sW2pdID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBwYWRQZXJDb2xbal0sXG4gICAgICAgICAgICB2YWxUb1N0cmluZyh2YWx1ZXNPclR1cGxlc1tvZmZzZXQgKyBqXSwgMCwgZHR5cGUpLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYWRQZXJDb2w7XG59XG5cbmZ1bmN0aW9uIHZhbFRvU3RyaW5nKFxuICAgIHZhbDogbnVtYmVyfHN0cmluZ3xbbnVtYmVyLCBudW1iZXJdLCBwYWQ6IG51bWJlciwgZHR5cGU6IERhdGFUeXBlKSB7XG4gIGxldCB2YWxTdHI6IHN0cmluZztcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHZhbFN0ciA9IGAke3BhcnNlRmxvYXQodmFsWzBdLnRvRml4ZWQoRk9STUFUX05VTV9TSUdfRElHSVRTKSl9ICsgYCArXG4gICAgICAgIGAke3BhcnNlRmxvYXQodmFsWzFdLnRvRml4ZWQoRk9STUFUX05VTV9TSUdfRElHSVRTKSl9amA7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsKSkge1xuICAgIHZhbFN0ciA9IGAnJHt2YWx9J2A7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdib29sJykge1xuICAgIHZhbFN0ciA9IGJvb2xOdW1Ub1N0cmluZyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHZhbFN0ciA9IHBhcnNlRmxvYXQodmFsLnRvRml4ZWQoRk9STUFUX05VTV9TSUdfRElHSVRTKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiByaWdodFBhZCh2YWxTdHIsIHBhZCk7XG59XG5cbmZ1bmN0aW9uIGJvb2xOdW1Ub1N0cmluZyh2OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdiA9PT0gMCA/ICdmYWxzZScgOiAndHJ1ZSc7XG59XG5cbmZ1bmN0aW9uIHN1YlRlbnNvclRvU3RyaW5nKFxuICAgIHZhbHM6IFR5cGVkQXJyYXl8c3RyaW5nW10sIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLFxuICAgIHN0cmlkZXM6IG51bWJlcltdLCBwYWRQZXJDb2w6IG51bWJlcltdLCBpc0xhc3QgPSB0cnVlKTogc3RyaW5nW10ge1xuICBjb25zdCBzdG9yYWdlUGVyRWxlbWVudCA9IGR0eXBlID09PSAnY29tcGxleDY0JyA/IDIgOiAxO1xuXG4gIGNvbnN0IHNpemUgPSBzaGFwZVswXTtcbiAgY29uc3QgcmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgaWYgKHJhbmsgPT09IDApIHtcbiAgICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICBjb25zdCBjb21wbGV4VHVwbGUgPSBjcmVhdGVDb21wbGV4VHVwbGVzKHZhbHMpO1xuICAgICAgcmV0dXJuIFt2YWxUb1N0cmluZyhjb21wbGV4VHVwbGVbMF0sIDAsIGR0eXBlKV07XG4gICAgfVxuICAgIGlmIChkdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgICByZXR1cm4gW2Jvb2xOdW1Ub1N0cmluZyh2YWxzWzBdIGFzIG51bWJlcildO1xuICAgIH1cbiAgICByZXR1cm4gW3ZhbHNbMF0udG9TdHJpbmcoKV07XG4gIH1cblxuICBpZiAocmFuayA9PT0gMSkge1xuICAgIGlmIChzaXplID4gRk9STUFUX0xJTUlUX05VTV9WQUxTKSB7XG4gICAgICBjb25zdCBmaXJzdFZhbHNTaXplID0gRk9STUFUX05VTV9GSVJTVF9MQVNUX1ZBTFMgKiBzdG9yYWdlUGVyRWxlbWVudDtcblxuICAgICAgbGV0IGZpcnN0VmFscyA9IEFycmF5LmZyb208bnVtYmVyfHN0cmluZ3xbbnVtYmVyLCBudW1iZXJdPihcbiAgICAgICAgICB2YWxzLnNsaWNlKDAsIGZpcnN0VmFsc1NpemUpKTtcbiAgICAgIGxldCBsYXN0VmFscyA9IEFycmF5LmZyb208bnVtYmVyfHN0cmluZ3xbbnVtYmVyLCBudW1iZXJdPih2YWxzLnNsaWNlKFxuICAgICAgICAgIChzaXplIC0gRk9STUFUX05VTV9GSVJTVF9MQVNUX1ZBTFMpICogc3RvcmFnZVBlckVsZW1lbnQsXG4gICAgICAgICAgc2l6ZSAqIHN0b3JhZ2VQZXJFbGVtZW50KSk7XG4gICAgICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICAgIGZpcnN0VmFscyA9IGNyZWF0ZUNvbXBsZXhUdXBsZXMoZmlyc3RWYWxzKTtcbiAgICAgICAgbGFzdFZhbHMgPSBjcmVhdGVDb21wbGV4VHVwbGVzKGxhc3RWYWxzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXG4gICAgICAgICdbJyArXG4gICAgICAgIGZpcnN0VmFscy5tYXAoKHgsIGkpID0+IHZhbFRvU3RyaW5nKHgsIHBhZFBlckNvbFtpXSwgZHR5cGUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJykgK1xuICAgICAgICAnLCAuLi4sICcgK1xuICAgICAgICBsYXN0VmFsc1xuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAoeCwgaSkgPT4gdmFsVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHgsIHBhZFBlckNvbFtzaXplIC0gRk9STUFUX05VTV9GSVJTVF9MQVNUX1ZBTFMgKyBpXSwgZHR5cGUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJykgK1xuICAgICAgICAnXSdcbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IGRpc3BsYXlWYWxzOiBBcnJheTxudW1iZXJ8c3RyaW5nfFtudW1iZXIsIG51bWJlcl0+ID1cbiAgICAgICAgZHR5cGUgPT09ICdjb21wbGV4NjQnID8gY3JlYXRlQ29tcGxleFR1cGxlcyh2YWxzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb208bnVtYmVyfHN0cmluZz4odmFscyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgJ1snICtcbiAgICAgIGRpc3BsYXlWYWxzLm1hcCgoeCwgaSkgPT4gdmFsVG9TdHJpbmcoeCwgcGFkUGVyQ29sW2ldLCBkdHlwZSkpXG4gICAgICAgICAgLmpvaW4oJywgJykgK1xuICAgICAgJ10nXG4gICAgXTtcbiAgfVxuXG4gIC8vIFRoZSBhcnJheSBpcyByYW5rIDIgb3IgbW9yZS5cbiAgY29uc3Qgc3Vic2hhcGUgPSBzaGFwZS5zbGljZSgxKTtcbiAgY29uc3Qgc3Vic3RyaWRlcyA9IHN0cmlkZXMuc2xpY2UoMSk7XG4gIGNvbnN0IHN0cmlkZSA9IHN0cmlkZXNbMF0gKiBzdG9yYWdlUGVyRWxlbWVudDtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGlmIChzaXplID4gRk9STUFUX0xJTUlUX05VTV9WQUxTKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBGT1JNQVRfTlVNX0ZJUlNUX0xBU1RfVkFMUzsgaSsrKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGkgKiBzdHJpZGU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHN0cmlkZTtcbiAgICAgIGxpbmVzLnB1c2goLi4uc3ViVGVuc29yVG9TdHJpbmcoXG4gICAgICAgICAgdmFscy5zbGljZShzdGFydCwgZW5kKSwgc3Vic2hhcGUsIGR0eXBlLCBzdWJzdHJpZGVzLCBwYWRQZXJDb2wsXG4gICAgICAgICAgZmFsc2UgLyogaXNMYXN0ICovKSk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJy4uLicpO1xuICAgIGZvciAobGV0IGkgPSBzaXplIC0gRk9STUFUX05VTV9GSVJTVF9MQVNUX1ZBTFM7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaSAqIHN0cmlkZTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc3RyaWRlO1xuICAgICAgbGluZXMucHVzaCguLi5zdWJUZW5zb3JUb1N0cmluZyhcbiAgICAgICAgICB2YWxzLnNsaWNlKHN0YXJ0LCBlbmQpLCBzdWJzaGFwZSwgZHR5cGUsIHN1YnN0cmlkZXMsIHBhZFBlckNvbCxcbiAgICAgICAgICBpID09PSBzaXplIC0gMSAvKiBpc0xhc3QgKi8pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaSAqIHN0cmlkZTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc3RyaWRlO1xuICAgICAgbGluZXMucHVzaCguLi5zdWJUZW5zb3JUb1N0cmluZyhcbiAgICAgICAgICB2YWxzLnNsaWNlKHN0YXJ0LCBlbmQpLCBzdWJzaGFwZSwgZHR5cGUsIHN1YnN0cmlkZXMsIHBhZFBlckNvbCxcbiAgICAgICAgICBpID09PSBzaXplIC0gMSAvKiBpc0xhc3QgKi8pKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2VwID0gcmFuayA9PT0gMiA/ICcsJyA6ICcnO1xuICBsaW5lc1swXSA9ICdbJyArIChzaXplID4gMCA/IGxpbmVzWzBdICsgc2VwIDogJycpO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGxpbmVzW2ldID0gJyAnICsgbGluZXNbaV0gKyBzZXA7XG4gIH1cbiAgbGV0IG5ld0xpbmVTZXAgPSAnLFxcbic7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgcmFuazsgaSsrKSB7XG4gICAgbmV3TGluZVNlcCArPSAnXFxuJztcbiAgfVxuICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9XG4gICAgICAnICcgKyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSArICddJyArIChpc0xhc3QgPyAnJyA6IG5ld0xpbmVTZXApO1xuICByZXR1cm4gbGluZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBsZXhUdXBsZXModmFsczogQXJyYXk8e30+fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlZEFycmF5KTogQXJyYXk8W251bWJlciwgbnVtYmVyXT4ge1xuICBjb25zdCBjb21wbGV4VHVwbGVzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb21wbGV4VHVwbGVzLnB1c2goW3ZhbHNbaV0sIHZhbHNbaSArIDFdXSBhcyBbbnVtYmVyLCBudW1iZXJdKTtcbiAgfVxuICByZXR1cm4gY29tcGxleFR1cGxlcztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// \nimport { getGlobal } from './global_util';\nimport { tensorToString } from './tensor_format';\nimport * as util from './util';\nimport { computeStrides, toNestedArray } from './util';\n/**\n * A mutable object, similar to `tf.Tensor`, that allows users to set values\n * at locations before converting to an immutable `tf.Tensor`.\n *\n * See `tf.buffer` for creating a tensor buffer.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class TensorBuffer {\n constructor(shape, dtype, values) {\n this.dtype = dtype;\n this.shape = shape.slice();\n this.size = util.sizeFromShape(shape);\n if (values != null) {\n const n = values.length;\n util.assert(n === this.size, () => `Length of values '${n}' does not match the size ` +\n `inferred by the shape '${this.size}'.`);\n }\n if (dtype === 'complex64') {\n throw new Error(`complex64 dtype TensorBuffers are not supported. Please create ` +\n `a TensorBuffer for the real and imaginary parts separately and ` +\n `call tf.complex(real, imag).`);\n }\n this.values = values || util.getArrayFromDType(dtype, this.size);\n this.strides = computeStrides(shape);\n }\n /**\n * Sets a value in the buffer at a given location.\n *\n * @param value The value to set.\n * @param locs The location indices.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n set(value, ...locs) {\n if (locs.length === 0) {\n locs = [0];\n }\n util.assert(locs.length === this.rank, () => `The number of provided coordinates (${locs.length}) must ` +\n `match the rank (${this.rank})`);\n const index = this.locToIndex(locs);\n this.values[index] = value;\n }\n /**\n * Returns the value in the buffer at the provided location.\n *\n * @param locs The location indices.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n get(...locs) {\n if (locs.length === 0) {\n locs = [0];\n }\n let i = 0;\n for (const loc of locs) {\n if (loc < 0 || loc >= this.shape[i]) {\n const msg = `Requested out of range element at ${locs}. ` +\n ` Buffer shape=${this.shape}`;\n throw new Error(msg);\n }\n i++;\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += this.strides[i] * locs[i];\n }\n return this.values[index];\n }\n locToIndex(locs) {\n if (this.rank === 0) {\n return 0;\n }\n else if (this.rank === 1) {\n return locs[0];\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += this.strides[i] * locs[i];\n }\n return index;\n }\n indexToLoc(index) {\n if (this.rank === 0) {\n return [];\n }\n else if (this.rank === 1) {\n return [index];\n }\n const locs = new Array(this.shape.length);\n for (let i = 0; i < locs.length - 1; ++i) {\n locs[i] = Math.floor(index / this.strides[i]);\n index -= locs[i] * this.strides[i];\n }\n locs[locs.length - 1] = index;\n return locs;\n }\n get rank() {\n return this.shape.length;\n }\n /**\n * Creates an immutable `tf.Tensor` object from the buffer.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n toTensor() {\n return trackerFn().makeTensor(this.values, this.shape, this.dtype);\n }\n}\n// For tracking tensor creation and disposal.\nlet trackerFn = null;\n// Used by chaining methods to call into ops.\nlet opHandler = null;\n// Used to warn about deprecated methods.\nlet deprecationWarningFn = null;\n// This here so that we can use this method on dev branches and keep the\n// functionality at master.\n// tslint:disable-next-line:no-unused-expression\n[deprecationWarningFn];\n/**\n * An external consumer can register itself as the tensor tracker. This way\n * the Tensor class can notify the tracker for every tensor created and\n * disposed.\n */\nexport function setTensorTracker(fn) {\n trackerFn = fn;\n}\n/**\n * An external consumer can register itself as the op handler. This way the\n * Tensor class can have chaining methods that call into ops via the op\n * handler.\n */\nexport function setOpHandler(handler) {\n opHandler = handler;\n}\n/**\n * Sets the deprecation warning function to be used by this file. This way the\n * Tensor class can be a leaf but still use the environment.\n */\nexport function setDeprecationWarningFn(fn) {\n deprecationWarningFn = fn;\n}\n/**\n * A `tf.Tensor` object represents an immutable, multidimensional array of\n * numbers that has a shape and a data type.\n *\n * For performance reasons, functions that create tensors do not necessarily\n * perform a copy of the data passed to them (e.g. if the data is passed as a\n * `Float32Array`), and changes to the data will change the tensor. This is not\n * a feature and is not supported. To avoid this behavior, use the tensor before\n * changing the input data or create a copy with `copy = tf.add(yourTensor, 0)`.\n *\n * See `tf.tensor` for details on how to create a `tf.Tensor`.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class Tensor {\n constructor(shape, dtype, dataId, id) {\n /** Whether this tensor has been globally kept. */\n this.kept = false;\n this.isDisposedInternal = false;\n this.shape = shape.slice();\n this.dtype = dtype || 'float32';\n this.size = util.sizeFromShape(shape);\n this.strides = computeStrides(shape);\n this.dataId = dataId;\n this.id = id;\n this.rankType = (this.rank < 5 ? this.rank.toString() : 'higher');\n }\n get rank() {\n return this.shape.length;\n }\n /**\n * Returns a promise of `tf.TensorBuffer` that holds the underlying data.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async buffer() {\n const vals = await this.data();\n return opHandler.buffer(this.shape, this.dtype, vals);\n }\n /**\n * Returns a `tf.TensorBuffer` that holds the underlying data.\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n bufferSync() {\n return opHandler.buffer(this.shape, this.dtype, this.dataSync());\n }\n /**\n * Returns the tensor data as a nested array. The transfer of data is done\n * asynchronously.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async array() {\n const vals = await this.data();\n return toNestedArray(this.shape, vals, this.dtype === 'complex64');\n }\n /**\n * Returns the tensor data as a nested array. The transfer of data is done\n * synchronously.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n arraySync() {\n return toNestedArray(this.shape, this.dataSync(), this.dtype === 'complex64');\n }\n /**\n * Asynchronously downloads the values from the `tf.Tensor`. Returns a\n * promise of `TypedArray` that resolves when the computation has finished.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async data() {\n this.throwIfDisposed();\n const data = trackerFn().read(this.dataId);\n if (this.dtype === 'string') {\n const bytes = await data;\n try {\n return bytes.map(b => util.decodeString(b));\n }\n catch (_a) {\n throw new Error('Failed to decode the string bytes into utf-8. ' +\n 'To get the original bytes, call tensor.bytes().');\n }\n }\n return data;\n }\n /**\n * Copy the tensor's data to a new GPU resource. Comparing to the `dataSync()`\n * and `data()`, this method prevents data from being downloaded to CPU.\n *\n * For WebGL backend, the data will be stored on a densely packed texture.\n * This means that the texture will use the RGBA channels to store value.\n *\n * For WebGPU backend, the data will be stored on a buffer. There is no\n * parameter, so can not use a user-defined size to create the buffer.\n *\n * @param options:\n * For WebGL,\n * - customTexShape: Optional. If set, will use the user defined\n * texture shape to create the texture.\n *\n * @returns For WebGL backend, a GPUData contains the new texture and\n * its information.\n * {\n * tensorRef: The tensor that is associated with this texture,\n * texture: WebGLTexture,\n * texShape: [number, number] // [height, width]\n * }\n *\n * For WebGPU backend, a GPUData contains the new buffer.\n * {\n * tensorRef: The tensor that is associated with this buffer,\n * buffer: GPUBuffer,\n * }\n *\n * Remember to dispose the GPUData after it is used by\n * `res.tensorRef.dispose()`.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n dataToGPU(options) {\n this.throwIfDisposed();\n return trackerFn().readToGPU(this.dataId, options);\n }\n /**\n * Synchronously downloads the values from the `tf.Tensor`. This blocks the\n * UI thread until the values are ready, which can cause performance issues.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n dataSync() {\n this.throwIfDisposed();\n const data = trackerFn().readSync(this.dataId);\n if (this.dtype === 'string') {\n try {\n return data.map(b => util.decodeString(b));\n }\n catch (_a) {\n throw new Error('Failed to decode the string bytes into utf-8. ' +\n 'To get the original bytes, call tensor.bytes().');\n }\n }\n return data;\n }\n /** Returns the underlying bytes of the tensor's data. */\n async bytes() {\n this.throwIfDisposed();\n const data = await trackerFn().read(this.dataId);\n if (this.dtype === 'string') {\n return data;\n }\n else {\n return new Uint8Array(data.buffer);\n }\n }\n /**\n * Disposes `tf.Tensor` from memory.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n if (this.kerasMask) {\n this.kerasMask.dispose();\n }\n trackerFn().disposeTensor(this);\n this.isDisposedInternal = true;\n }\n get isDisposed() {\n return this.isDisposedInternal;\n }\n throwIfDisposed() {\n if (this.isDisposed) {\n throw new Error(`Tensor is disposed.`);\n }\n }\n /**\n * Prints the `tf.Tensor`. See `tf.print` for details.\n *\n * @param verbose Whether to print verbose information about the tensor,\n * including dtype and size.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n print(verbose = false) {\n return opHandler.print(this, verbose);\n }\n /**\n * Returns a copy of the tensor. See `tf.clone` for details.\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n clone() {\n this.throwIfDisposed();\n return opHandler.clone(this);\n }\n /**\n * Returns a human-readable description of the tensor. Useful for logging.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n toString(verbose = false) {\n const vals = this.dataSync();\n return tensorToString(vals, this.shape, this.dtype, verbose);\n }\n cast(dtype) {\n this.throwIfDisposed();\n return opHandler.cast(this, dtype);\n }\n variable(trainable = true, name, dtype) {\n this.throwIfDisposed();\n return trackerFn().makeVariable(this, trainable, name, dtype);\n }\n}\nObject.defineProperty(Tensor, Symbol.hasInstance, {\n value: (instance) => {\n // Implementation note: we should use properties of the object that will be\n // defined before the constructor body has finished executing (methods).\n // This is because when this code is transpiled by babel, babel will call\n // classCallCheck before the constructor body is run.\n // See https://github.com/tensorflow/tfjs/issues/3384 for backstory.\n return !!instance && instance.data != null && instance.dataSync != null &&\n instance.throwIfDisposed != null;\n }\n});\nexport function getGlobalTensorClass() {\n // Use getGlobal so that we can augment the Tensor class across package\n // boundaries becase the node resolution alg may result in different modules\n // being returned for this file depending on the path they are loaded from.\n return getGlobal('Tensor', () => {\n return Tensor;\n });\n}\n// Global side effect. Cache global reference to Tensor class\ngetGlobalTensorClass();\n/**\n * A mutable `tf.Tensor`, useful for persisting state, e.g. for training.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class Variable extends Tensor {\n constructor(initialValue, trainable, name, tensorId) {\n super(initialValue.shape, initialValue.dtype, initialValue.dataId, tensorId);\n this.trainable = trainable;\n this.name = name;\n }\n /**\n * Assign a new `tf.Tensor` to this variable. The new `tf.Tensor` must have\n * the same shape and dtype as the old `tf.Tensor`.\n *\n * @param newValue New tensor to be assigned to this variable.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n assign(newValue) {\n if (newValue.dtype !== this.dtype) {\n throw new Error(`dtype of the new value (${newValue.dtype}) and ` +\n `previous value (${this.dtype}) must match`);\n }\n if (!util.arraysEqual(newValue.shape, this.shape)) {\n throw new Error(`shape of the new value (${newValue.shape}) and ` +\n `previous value (${this.shape}) must match`);\n }\n trackerFn().disposeTensor(this);\n this.dataId = newValue.dataId;\n trackerFn().incRef(this, null /* backend */);\n }\n dispose() {\n trackerFn().disposeVariable(this);\n this.isDisposedInternal = true;\n }\n}\nObject.defineProperty(Variable, Symbol.hasInstance, {\n value: (instance) => {\n return instance instanceof Tensor && instance.assign != null &&\n instance.assign instanceof Function;\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy90ZW5zb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgseUVBQXlFO0FBQ3pFLDRDQUE0QztBQUU1QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQVdyRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFNdkIsWUFBWSxLQUFrQixFQUFTLEtBQVEsRUFBRSxNQUF1QjtRQUFqQyxVQUFLLEdBQUwsS0FBSyxDQUFHO1FBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBaUIsQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksRUFDZixHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyw0QkFBNEI7Z0JBQ3BELDBCQUEwQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLGlFQUFpRTtnQkFDakUsaUVBQWlFO2dCQUNqRSw4QkFBOEIsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FB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TyxRQUFRLFlBQVksTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSTtZQUN4RCxRQUFRLENBQUMsTUFBTSxZQUFZLFFBQVEsQ0FBQztJQUMxQyxDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkB3ZWJncHUvdHlwZXMvZGlzdFwiIC8+XG5cbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tICcuL2dsb2JhbF91dGlsJztcbmltcG9ydCB7dGVuc29yVG9TdHJpbmd9IGZyb20gJy4vdGVuc29yX2Zvcm1hdCc7XG5pbXBvcnQge0RhdGFJZCwgVGVuc29ySW5mb30gZnJvbSAnLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge0FycmF5TWFwLCBCYWNrZW5kVmFsdWVzLCBEYXRhVHlwZSwgRGF0YVR5cGVNYXAsIERhdGFWYWx1ZXMsIE51bWVyaWNEYXRhVHlwZSwgUmFuaywgU2hhcGVNYXAsIFNpbmdsZVZhbHVlTWFwLCBUeXBlZEFycmF5fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJztcbmltcG9ydCB7Y29tcHV0ZVN0cmlkZXMsIHRvTmVzdGVkQXJyYXl9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRGF0YTxEIGV4dGVuZHMgRGF0YVR5cGU+IHtcbiAgZGF0YUlkPzogRGF0YUlkO1xuICB2YWx1ZXM/OiBEYXRhVHlwZU1hcFtEXTtcbn1cblxuLy8gVGhpcyBpbnRlcmZhY2UgbWltaWNzIEtlcm5lbEJhY2tlbmQgKGluIGJhY2tlbmQudHMpLCB3aGljaCB3b3VsZCBjcmVhdGUgYVxuLy8gY2lyY3VsYXIgZGVwZW5kZW5jeSBpZiBpbXBvcnRlZC5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2VuZCB7fVxuXG4vKipcbiAqIEEgbXV0YWJsZSBvYmplY3QsIHNpbWlsYXIgdG8gYHRmLlRlbnNvcmAsIHRoYXQgYWxsb3dzIHVzZXJzIHRvIHNldCB2YWx1ZXNcbiAqIGF0IGxvY2F0aW9ucyBiZWZvcmUgY29udmVydGluZyB0byBhbiBpbW11dGFibGUgYHRmLlRlbnNvcmAuXG4gKlxuICogU2VlIGB0Zi5idWZmZXJgIGZvciBjcmVhdGluZyBhIHRlbnNvciBidWZmZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gKi9cbmV4cG9ydCBjbGFzcyBUZW5zb3JCdWZmZXI8UiBleHRlbmRzIFJhbmssIEQgZXh0ZW5kcyBEYXRhVHlwZSA9ICdmbG9hdDMyJz4ge1xuICBzaXplOiBudW1iZXI7XG4gIHNoYXBlOiBTaGFwZU1hcFtSXTtcbiAgc3RyaWRlczogbnVtYmVyW107XG4gIHZhbHVlczogRGF0YVR5cGVNYXBbRF07XG5cbiAgY29uc3RydWN0b3Ioc2hhcGU6IFNoYXBlTWFwW1JdLCBwdWJsaWMgZHR5cGU6IEQsIHZhbHVlcz86IERhdGFUeXBlTWFwW0RdKSB7XG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlLnNsaWNlKCkgYXMgU2hhcGVNYXBbUl07XG4gICAgdGhpcy5zaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHNoYXBlKTtcblxuICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICBuID09PSB0aGlzLnNpemUsXG4gICAgICAgICAgKCkgPT4gYExlbmd0aCBvZiB2YWx1ZXMgJyR7bn0nIGRvZXMgbm90IG1hdGNoIHRoZSBzaXplIGAgK1xuICAgICAgICAgICAgICBgaW5mZXJyZWQgYnkgdGhlIHNoYXBlICcke3RoaXMuc2l6ZX0nLmApO1xuICAgIH1cbiAgICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbXBsZXg2NCBkdHlwZSBUZW5zb3JCdWZmZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgY3JlYXRlIGAgK1xuICAgICAgICAgIGBhIFRlbnNvckJ1ZmZlciBmb3IgdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBzZXBhcmF0ZWx5IGFuZCBgICtcbiAgICAgICAgICBgY2FsbCB0Zi5jb21wbGV4KHJlYWwsIGltYWcpLmApO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcyB8fCB1dGlsLmdldEFycmF5RnJvbURUeXBlKGR0eXBlLCB0aGlzLnNpemUpO1xuICAgIHRoaXMuc3RyaWRlcyA9IGNvbXB1dGVTdHJpZGVzKHNoYXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdmFsdWUgaW4gdGhlIGJ1ZmZlciBhdCBhIGdpdmVuIGxvY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICogQHBhcmFtIGxvY3MgIFRoZSBsb2NhdGlvbiBpbmRpY2VzLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gICAqL1xuICBzZXQodmFsdWU6IFNpbmdsZVZhbHVlTWFwW0RdLCAuLi5sb2NzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGlmIChsb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9jcyA9IFswXTtcbiAgICB9XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGxvY3MubGVuZ3RoID09PSB0aGlzLnJhbmssXG4gICAgICAgICgpID0+IGBUaGUgbnVtYmVyIG9mIHByb3ZpZGVkIGNvb3JkaW5hdGVzICgke2xvY3MubGVuZ3RofSkgbXVzdCBgICtcbiAgICAgICAgICAgIGBtYXRjaCB0aGUgcmFuayAoJHt0aGlzLnJhbmt9KWApO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmxvY1RvSW5kZXgobG9jcyk7XG4gICAgdGhpcy52YWx1ZXNbaW5kZXhdID0gdmFsdWUgYXMgbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIGluIHRoZSBidWZmZXIgYXQgdGhlIHByb3ZpZGVkIGxvY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbG9jcyBUaGUgbG9jYXRpb24gaW5kaWNlcy5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICAgKi9cbiAgZ2V0KC4uLmxvY3M6IG51bWJlcltdKTogU2luZ2xlVmFsdWVNYXBbRF0ge1xuICAgIGlmIChsb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9jcyA9IFswXTtcbiAgICB9XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3QgbG9jIG9mIGxvY3MpIHtcbiAgICAgIGlmIChsb2MgPCAwIHx8IGxvYyA+PSB0aGlzLnNoYXBlW2ldKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGBSZXF1ZXN0ZWQgb3V0IG9mIHJhbmdlIGVsZW1lbnQgYXQgJHtsb2NzfS4gYCArXG4gICAgICAgICAgICBgICBCdWZmZXIgc2hhcGU9JHt0aGlzLnNoYXBlfWA7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgaSsrO1xuICAgIH1cbiAgICBsZXQgaW5kZXggPSBsb2NzW2xvY3MubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgaW5kZXggKz0gdGhpcy5zdHJpZGVzW2ldICogbG9jc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XSBhcyBTaW5nbGVWYWx1ZU1hcFtEXTtcbiAgfVxuXG4gIGxvY1RvSW5kZXgobG9jczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnJhbmsgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yYW5rID09PSAxKSB7XG4gICAgICByZXR1cm4gbG9jc1swXTtcbiAgICB9XG4gICAgbGV0IGluZGV4ID0gbG9jc1tsb2NzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jcy5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgIGluZGV4ICs9IHRoaXMuc3RyaWRlc1tpXSAqIGxvY3NbaV07XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGluZGV4VG9Mb2MoaW5kZXg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBpZiAodGhpcy5yYW5rID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIGlmICh0aGlzLnJhbmsgPT09IDEpIHtcbiAgICAgIHJldHVybiBbaW5kZXhdO1xuICAgIH1cbiAgICBjb25zdCBsb2NzOiBudW1iZXJbXSA9IG5ldyBBcnJheSh0aGlzLnNoYXBlLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgbG9jc1tpXSA9IE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnN0cmlkZXNbaV0pO1xuICAgICAgaW5kZXggLT0gbG9jc1tpXSAqIHRoaXMuc3RyaWRlc1tpXTtcbiAgICB9XG4gICAgbG9jc1tsb2NzLmxlbmd0aCAtIDFdID0gaW5kZXg7XG4gICAgcmV0dXJuIGxvY3M7XG4gIH1cblxuICBnZXQgcmFuaygpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFwZS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbW11dGFibGUgYHRmLlRlbnNvcmAgb2JqZWN0IGZyb20gdGhlIGJ1ZmZlci5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICAgKi9cbiAgdG9UZW5zb3IoKTogVGVuc29yPFI+IHtcbiAgICByZXR1cm4gdHJhY2tlckZuKCkubWFrZVRlbnNvcih0aGlzLnZhbHVlcywgdGhpcy5zaGFwZSwgdGhpcy5kdHlwZSkgYXNcbiAgICAgICAgVGVuc29yPFI+O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVRvR1BVV2ViR0xPcHRpb24ge1xuICBjdXN0b21UZXhTaGFwZT86IFtudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCB0eXBlIERhdGFUb0dQVU9wdGlvbnMgPSBEYXRhVG9HUFVXZWJHTE9wdGlvbjtcblxuZXhwb3J0IGludGVyZmFjZSBHUFVEYXRhIHtcbiAgdGVuc29yUmVmOiBUZW5zb3I7XG4gIHRleHR1cmU/OiBXZWJHTFRleHR1cmU7XG4gIGJ1ZmZlcj86IEdQVUJ1ZmZlcjtcbiAgdGV4U2hhcGU/OiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvclRyYWNrZXIge1xuICBtYWtlVGVuc29yKFxuICAgICAgdmFsdWVzOiBEYXRhVmFsdWVzLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICAgIGJhY2tlbmQ/OiBCYWNrZW5kKTogVGVuc29yO1xuICBtYWtlVmFyaWFibGUoXG4gICAgICBpbml0aWFsVmFsdWU6IFRlbnNvciwgdHJhaW5hYmxlPzogYm9vbGVhbiwgbmFtZT86IHN0cmluZyxcbiAgICAgIGR0eXBlPzogRGF0YVR5cGUpOiBWYXJpYWJsZTtcbiAgaW5jUmVmKGE6IFRlbnNvciwgYmFja2VuZDogQmFja2VuZCk6IHZvaWQ7XG4gIGRpc3Bvc2VUZW5zb3IodDogVGVuc29yKTogdm9pZDtcbiAgZGlzcG9zZVZhcmlhYmxlKHY6IFZhcmlhYmxlKTogdm9pZDtcbiAgcmVhZChkYXRhSWQ6IERhdGFJZCk6IFByb21pc2U8QmFja2VuZFZhbHVlcz47XG4gIHJlYWRTeW5jKGRhdGFJZDogRGF0YUlkKTogQmFja2VuZFZhbHVlcztcbiAgcmVhZFRvR1BVKGRhdGFJZDogRGF0YUlkLCBvcHRpb25zPzogRGF0YVRvR1BVT3B0aW9ucyk6IEdQVURhdGE7XG59XG5cbi8qKlxuICogVGhlIFRlbnNvciBjbGFzcyBjYWxscyBpbnRvIHRoaXMgaGFuZGxlciB0byBkZWxlZ2F0ZSBjaGFpbmluZyBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wSGFuZGxlciB7XG4gIGNhc3Q8VCBleHRlbmRzIFRlbnNvcj4oeDogVCwgZHR5cGU6IERhdGFUeXBlKTogVDtcbiAgYnVmZmVyPFIgZXh0ZW5kcyBSYW5rLCBEIGV4dGVuZHMgRGF0YVR5cGU+KFxuICAgICAgc2hhcGU6IFNoYXBlTWFwW1JdLCBkdHlwZTogRCxcbiAgICAgIHZhbHVlcz86IERhdGFUeXBlTWFwW0RdKTogVGVuc29yQnVmZmVyPFIsIEQ+O1xuICBwcmludDxUIGV4dGVuZHMgVGVuc29yPih4OiBULCB2ZXJib3NlOiBib29sZWFuKTogdm9pZDtcbiAgY2xvbmU8VCBleHRlbmRzIFRlbnNvcj4oeDogVCk6IFQ7XG4gIC8vIFRPRE8oeWFzc29nYmEpIGJyaW5nIHJlc2hhcGUgYmFjaz9cbn1cblxuLy8gRm9yIHRyYWNraW5nIHRlbnNvciBjcmVhdGlvbiBhbmQgZGlzcG9zYWwuXG5sZXQgdHJhY2tlckZuOiAoKSA9PiBUZW5zb3JUcmFja2VyID0gbnVsbDtcbi8vIFVzZWQgYnkgY2hhaW5pbmcgbWV0aG9kcyB0byBjYWxsIGludG8gb3BzLlxubGV0IG9wSGFuZGxlcjogT3BIYW5kbGVyID0gbnVsbDtcbi8vIFVzZWQgdG8gd2FybiBhYm91dCBkZXByZWNhdGVkIG1ldGhvZHMuXG5sZXQgZGVwcmVjYXRpb25XYXJuaW5nRm46IChtc2c6IHN0cmluZykgPT4gdm9pZCA9IG51bGw7XG4vLyBUaGlzIGhlcmUgc28gdGhhdCB3ZSBjYW4gdXNlIHRoaXMgbWV0aG9kIG9uIGRldiBicmFuY2hlcyBhbmQga2VlcCB0aGVcbi8vIGZ1bmN0aW9uYWxpdHkgYXQgbWFzdGVyLlxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVudXNlZC1leHByZXNzaW9uXG5bZGVwcmVjYXRpb25XYXJuaW5nRm5dO1xuXG4vKipcbiAqIEFuIGV4dGVybmFsIGNvbnN1bWVyIGNhbiByZWdpc3RlciBpdHNlbGYgYXMgdGhlIHRlbnNvciB0cmFja2VyLiBUaGlzIHdheVxuICogdGhlIFRlbnNvciBjbGFzcyBjYW4gbm90aWZ5IHRoZSB0cmFja2VyIGZvciBldmVyeSB0ZW5zb3IgY3JlYXRlZCBhbmRcbiAqIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVuc29yVHJhY2tlcihmbjogKCkgPT4gVGVuc29yVHJhY2tlcikge1xuICB0cmFja2VyRm4gPSBmbjtcbn1cblxuLyoqXG4gKiBBbiBleHRlcm5hbCBjb25zdW1lciBjYW4gcmVnaXN0ZXIgaXRzZWxmIGFzIHRoZSBvcCBoYW5kbGVyLiBUaGlzIHdheSB0aGVcbiAqIFRlbnNvciBjbGFzcyBjYW4gaGF2ZSBjaGFpbmluZyBtZXRob2RzIHRoYXQgY2FsbCBpbnRvIG9wcyB2aWEgdGhlIG9wXG4gKiBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0T3BIYW5kbGVyKGhhbmRsZXI6IE9wSGFuZGxlcikge1xuICBvcEhhbmRsZXIgPSBoYW5kbGVyO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcgZnVuY3Rpb24gdG8gYmUgdXNlZCBieSB0aGlzIGZpbGUuIFRoaXMgd2F5IHRoZVxuICogVGVuc29yIGNsYXNzIGNhbiBiZSBhIGxlYWYgYnV0IHN0aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREZXByZWNhdGlvbldhcm5pbmdGbihmbjogKG1zZzogc3RyaW5nKSA9PiB2b2lkKSB7XG4gIGRlcHJlY2F0aW9uV2FybmluZ0ZuID0gZm47XG59XG5cbi8vIERlY2xhcmUgdGhpcyBuYW1lc3BhY2UgdG8gbWFrZSBUZW5zb3IgY2xhc3MgYXVnbWVudGF0aW9uIHdvcmsgaW4gZ29vZ2xlMy5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBUZW5zb3Ige31cbi8qKlxuICogQSBgdGYuVGVuc29yYCBvYmplY3QgcmVwcmVzZW50cyBhbiBpbW11dGFibGUsIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgb2ZcbiAqIG51bWJlcnMgdGhhdCBoYXMgYSBzaGFwZSBhbmQgYSBkYXRhIHR5cGUuXG4gKlxuICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSB0ZW5zb3JzIGRvIG5vdCBuZWNlc3NhcmlseVxuICogcGVyZm9ybSBhIGNvcHkgb2YgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZW0gKGUuZy4gaWYgdGhlIGRhdGEgaXMgcGFzc2VkIGFzIGFcbiAqIGBGbG9hdDMyQXJyYXlgKSwgYW5kIGNoYW5nZXMgdG8gdGhlIGRhdGEgd2lsbCBjaGFuZ2UgdGhlIHRlbnNvci4gVGhpcyBpcyBub3RcbiAqIGEgZmVhdHVyZSBhbmQgaXMgbm90IHN1cHBvcnRlZC4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciwgdXNlIHRoZSB0ZW5zb3IgYmVmb3JlXG4gKiBjaGFuZ2luZyB0aGUgaW5wdXQgZGF0YSBvciBjcmVhdGUgYSBjb3B5IHdpdGggYGNvcHkgPSB0Zi5hZGQoeW91clRlbnNvciwgMClgLlxuICpcbiAqIFNlZSBgdGYudGVuc29yYCBmb3IgZGV0YWlscyBvbiBob3cgdG8gY3JlYXRlIGEgYHRmLlRlbnNvcmAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gKi9cbmV4cG9ydCBjbGFzcyBUZW5zb3I8UiBleHRlbmRzIFJhbmsgPSBSYW5rPiBpbXBsZW1lbnRzIFRlbnNvckluZm8ge1xuICAvKiogVW5pcXVlIGlkIG9mIHRoaXMgdGVuc29yLiAqL1xuICByZWFkb25seSBpZDogbnVtYmVyO1xuICAvKipcbiAgICogSWQgb2YgdGhlIGJ1Y2tldCBob2xkaW5nIHRoZSBkYXRhIGZvciB0aGlzIHRlbnNvci4gTXVsdGlwbGUgYXJyYXlzIGNhblxuICAgKiBwb2ludCB0byB0aGUgc2FtZSBidWNrZXQgKGUuZy4gd2hlbiBjYWxsaW5nIGFycmF5LnJlc2hhcGUoKSkuXG4gICAqL1xuICBkYXRhSWQ6IERhdGFJZDtcbiAgLyoqIFRoZSBzaGFwZSBvZiB0aGUgdGVuc29yLiAqL1xuICByZWFkb25seSBzaGFwZTogU2hhcGVNYXBbUl07XG4gIC8qKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRlbnNvci4gKi9cbiAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuICAvKiogVGhlIGRhdGEgdHlwZSBmb3IgdGhlIGFycmF5LiAqL1xuICByZWFkb25seSBkdHlwZTogRGF0YVR5cGU7XG4gIC8qKiBUaGUgcmFuayB0eXBlIGZvciB0aGUgYXJyYXkgKHNlZSBgUmFua2AgZW51bSkuICovXG4gIHJlYWRvbmx5IHJhbmtUeXBlOiBSO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgdGVuc29yIGhhcyBiZWVuIGdsb2JhbGx5IGtlcHQuICovXG4gIGtlcHQgPSBmYWxzZTtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgc2NvcGUgdGhpcyB0ZW5zb3IgaXMgYmVpbmcgdHJhY2tlZCBpbi4gKi9cbiAgc2NvcGVJZDogbnVtYmVyO1xuICAvKiogVGhlIGtlcmFzIG1hc2sgdGhhdCBzb21lIGtlcmFzIGxheWVycyBhdHRhY2ggdG8gdGhlIHRlbnNvciAqL1xuICBrZXJhc01hc2s/OiBUZW5zb3I7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGluIGVhY2ggZGltZW5zaW9uIHdoZW4gaW5kZXhpbmcuIFNlZVxuICAgKiBodHRwczovL2RvY3Muc2NpcHkub3JnL2RvYy9udW1weS9yZWZlcmVuY2UvZ2VuZXJhdGVkL1xcXG4gICAqIG51bXB5Lm5kYXJyYXkuc3RyaWRlcy5odG1sXG4gICAqL1xuICByZWFkb25seSBzdHJpZGVzOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihzaGFwZTogU2hhcGVNYXBbUl0sIGR0eXBlOiBEYXRhVHlwZSwgZGF0YUlkOiBEYXRhSWQsIGlkOiBudW1iZXIpIHtcbiAgICB0aGlzLnNoYXBlID0gc2hhcGUuc2xpY2UoKSBhcyBTaGFwZU1hcFtSXTtcbiAgICB0aGlzLmR0eXBlID0gZHR5cGUgfHwgJ2Zsb2F0MzInO1xuICAgIHRoaXMuc2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShzaGFwZSk7XG4gICAgdGhpcy5zdHJpZGVzID0gY29tcHV0ZVN0cmlkZXMoc2hhcGUpO1xuICAgIHRoaXMuZGF0YUlkID0gZGF0YUlkO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnJhbmtUeXBlID0gKHRoaXMucmFuayA8IDUgPyB0aGlzLnJhbmsudG9TdHJpbmcoKSA6ICdoaWdoZXInKSBhcyBSO1xuICB9XG5cbiAgZ2V0IHJhbmsoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zaGFwZS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHByb21pc2Ugb2YgYHRmLlRlbnNvckJ1ZmZlcmAgdGhhdCBob2xkcyB0aGUgdW5kZXJseWluZyBkYXRhLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGFzeW5jIGJ1ZmZlcjxEIGV4dGVuZHMgRGF0YVR5cGUgPSAnZmxvYXQzMic+KCk6IFByb21pc2U8VGVuc29yQnVmZmVyPFIsIEQ+PiB7XG4gICAgY29uc3QgdmFscyA9IGF3YWl0IHRoaXMuZGF0YTxEPigpO1xuICAgIHJldHVybiBvcEhhbmRsZXIuYnVmZmVyKHRoaXMuc2hhcGUsIHRoaXMuZHR5cGUgYXMgRCwgdmFscyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGB0Zi5UZW5zb3JCdWZmZXJgIHRoYXQgaG9sZHMgdGhlIHVuZGVybHlpbmcgZGF0YS5cbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBidWZmZXJTeW5jPEQgZXh0ZW5kcyBEYXRhVHlwZSA9ICdmbG9hdDMyJz4oKTogVGVuc29yQnVmZmVyPFIsIEQ+IHtcbiAgICByZXR1cm4gb3BIYW5kbGVyLmJ1ZmZlcih0aGlzLnNoYXBlLCB0aGlzLmR0eXBlIGFzIEQsIHRoaXMuZGF0YVN5bmMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGVuc29yIGRhdGEgYXMgYSBuZXN0ZWQgYXJyYXkuIFRoZSB0cmFuc2ZlciBvZiBkYXRhIGlzIGRvbmVcbiAgICogYXN5bmNocm9ub3VzbHkuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnfVxuICAgKi9cbiAgYXN5bmMgYXJyYXkoKTogUHJvbWlzZTxBcnJheU1hcFtSXT4ge1xuICAgIGNvbnN0IHZhbHMgPSBhd2FpdCB0aGlzLmRhdGEoKTtcbiAgICByZXR1cm4gdG9OZXN0ZWRBcnJheSh0aGlzLnNoYXBlLCB2YWxzLCB0aGlzLmR0eXBlID09PSAnY29tcGxleDY0JykgYXNcbiAgICAgICAgQXJyYXlNYXBbUl07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGVuc29yIGRhdGEgYXMgYSBuZXN0ZWQgYXJyYXkuIFRoZSB0cmFuc2ZlciBvZiBkYXRhIGlzIGRvbmVcbiAgICogc3luY2hyb25vdXNseS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBhcnJheVN5bmMoKTogQXJyYXlNYXBbUl0ge1xuICAgIHJldHVybiB0b05lc3RlZEFycmF5KFxuICAgICAgICAgICAgICAgdGhpcy5zaGFwZSwgdGhpcy5kYXRhU3luYygpLCB0aGlzLmR0eXBlID09PSAnY29tcGxleDY0JykgYXNcbiAgICAgICAgQXJyYXlNYXBbUl07XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgZG93bmxvYWRzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgYHRmLlRlbnNvcmAuIFJldHVybnMgYVxuICAgKiBwcm9taXNlIG9mIGBUeXBlZEFycmF5YCB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXB1dGF0aW9uIGhhcyBmaW5pc2hlZC5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBhc3luYyBkYXRhPEQgZXh0ZW5kcyBEYXRhVHlwZSA9IE51bWVyaWNEYXRhVHlwZT4oKTogUHJvbWlzZTxEYXRhVHlwZU1hcFtEXT4ge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgY29uc3QgZGF0YSA9IHRyYWNrZXJGbigpLnJlYWQodGhpcy5kYXRhSWQpO1xuICAgIGlmICh0aGlzLmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBkYXRhIGFzIFVpbnQ4QXJyYXlbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBieXRlcy5tYXAoYiA9PiB1dGlsLmRlY29kZVN0cmluZyhiKSkgYXMgRGF0YVR5cGVNYXBbRF07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0ZhaWxlZCB0byBkZWNvZGUgdGhlIHN0cmluZyBieXRlcyBpbnRvIHV0Zi04LiAnICtcbiAgICAgICAgICAgICdUbyBnZXQgdGhlIG9yaWdpbmFsIGJ5dGVzLCBjYWxsIHRlbnNvci5ieXRlcygpLicpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YSBhcyBQcm9taXNlPERhdGFUeXBlTWFwW0RdPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHRoZSB0ZW5zb3IncyBkYXRhIHRvIGEgbmV3IEdQVSByZXNvdXJjZS4gQ29tcGFyaW5nIHRvIHRoZSBgZGF0YVN5bmMoKWBcbiAgICogYW5kIGBkYXRhKClgLCB0aGlzIG1ldGhvZCBwcmV2ZW50cyBkYXRhIGZyb20gYmVpbmcgZG93bmxvYWRlZCB0byBDUFUuXG4gICAqXG4gICAqIEZvciBXZWJHTCBiYWNrZW5kLCB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBvbiBhIGRlbnNlbHkgcGFja2VkIHRleHR1cmUuXG4gICAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIHVzZSB0aGUgUkdCQSBjaGFubmVscyB0byBzdG9yZSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIFdlYkdQVSBiYWNrZW5kLCB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBvbiBhIGJ1ZmZlci4gVGhlcmUgaXMgbm9cbiAgICogcGFyYW1ldGVyLCBzbyBjYW4gbm90IHVzZSBhIHVzZXItZGVmaW5lZCBzaXplIHRvIGNyZWF0ZSB0aGUgYnVmZmVyLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uczpcbiAgICogICAgIEZvciBXZWJHTCxcbiAgICogICAgICAgICAtIGN1c3RvbVRleFNoYXBlOiBPcHRpb25hbC4gSWYgc2V0LCB3aWxsIHVzZSB0aGUgdXNlciBkZWZpbmVkXG4gICAqICAgICB0ZXh0dXJlIHNoYXBlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICpcbiAgICogQHJldHVybnMgRm9yIFdlYkdMIGJhY2tlbmQsIGEgR1BVRGF0YSBjb250YWlucyB0aGUgbmV3IHRleHR1cmUgYW5kXG4gICAqICAgICBpdHMgaW5mb3JtYXRpb24uXG4gICAqICAgICB7XG4gICAqICAgICAgICB0ZW5zb3JSZWY6IFRoZSB0ZW5zb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0ZXh0dXJlLFxuICAgKiAgICAgICAgdGV4dHVyZTogV2ViR0xUZXh0dXJlLFxuICAgKiAgICAgICAgdGV4U2hhcGU6IFtudW1iZXIsIG51bWJlcl0gLy8gW2hlaWdodCwgd2lkdGhdXG4gICAqICAgICB9XG4gICAqXG4gICAqICAgICBGb3IgV2ViR1BVIGJhY2tlbmQsIGEgR1BVRGF0YSBjb250YWlucyB0aGUgbmV3IGJ1ZmZlci5cbiAgICogICAgIHtcbiAgICogICAgICAgIHRlbnNvclJlZjogVGhlIHRlbnNvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlcixcbiAgICogICAgICAgIGJ1ZmZlcjogR1BVQnVmZmVyLFxuICAgKiAgICAgfVxuICAgKlxuICAgKiAgICAgUmVtZW1iZXIgdG8gZGlzcG9zZSB0aGUgR1BVRGF0YSBhZnRlciBpdCBpcyB1c2VkIGJ5XG4gICAqICAgICBgcmVzLnRlbnNvclJlZi5kaXNwb3NlKClgLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGRhdGFUb0dQVShvcHRpb25zPzogRGF0YVRvR1BVT3B0aW9ucyk6IEdQVURhdGEge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgcmV0dXJuIHRyYWNrZXJGbigpLnJlYWRUb0dQVSh0aGlzLmRhdGFJZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25vdXNseSBkb3dubG9hZHMgdGhlIHZhbHVlcyBmcm9tIHRoZSBgdGYuVGVuc29yYC4gVGhpcyBibG9ja3MgdGhlXG4gICAqIFVJIHRocmVhZCB1bnRpbCB0aGUgdmFsdWVzIGFyZSByZWFkeSwgd2hpY2ggY2FuIGNhdXNlIHBlcmZvcm1hbmNlIGlzc3Vlcy5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBkYXRhU3luYzxEIGV4dGVuZHMgRGF0YVR5cGUgPSBOdW1lcmljRGF0YVR5cGU+KCk6IERhdGFUeXBlTWFwW0RdIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIGNvbnN0IGRhdGEgPSB0cmFja2VyRm4oKS5yZWFkU3luYyh0aGlzLmRhdGFJZCk7XG4gICAgaWYgKHRoaXMuZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKGRhdGEgYXMgVWludDhBcnJheVtdKS5tYXAoYiA9PiB1dGlsLmRlY29kZVN0cmluZyhiKSkgYXNcbiAgICAgICAgICAgIERhdGFUeXBlTWFwW0RdO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdGYWlsZWQgdG8gZGVjb2RlIHRoZSBzdHJpbmcgYnl0ZXMgaW50byB1dGYtOC4gJyArXG4gICAgICAgICAgICAnVG8gZ2V0IHRoZSBvcmlnaW5hbCBieXRlcywgY2FsbCB0ZW5zb3IuYnl0ZXMoKS4nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGEgYXMgRGF0YVR5cGVNYXBbRF07XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgdW5kZXJseWluZyBieXRlcyBvZiB0aGUgdGVuc29yJ3MgZGF0YS4gKi9cbiAgYXN5bmMgYnl0ZXMoKTogUHJvbWlzZTxVaW50OEFycmF5W118VWludDhBcnJheT4ge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRyYWNrZXJGbigpLnJlYWQodGhpcy5kYXRhSWQpO1xuICAgIGlmICh0aGlzLmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGEgYXMgVWludDhBcnJheVtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoKGRhdGEgYXMgVHlwZWRBcnJheSkuYnVmZmVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgYHRmLlRlbnNvcmAgZnJvbSBtZW1vcnkuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnfVxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmtlcmFzTWFzaykge1xuICAgICAgdGhpcy5rZXJhc01hc2suZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0cmFja2VyRm4oKS5kaXNwb3NlVGVuc29yKHRoaXMpO1xuICAgIHRoaXMuaXNEaXNwb3NlZEludGVybmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0Rpc3Bvc2VkSW50ZXJuYWwgPSBmYWxzZTtcbiAgZ2V0IGlzRGlzcG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwb3NlZEludGVybmFsO1xuICB9XG5cbiAgdGhyb3dJZkRpc3Bvc2VkKCkge1xuICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yIGlzIGRpc3Bvc2VkLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmludHMgdGhlIGB0Zi5UZW5zb3JgLiBTZWUgYHRmLnByaW50YCBmb3IgZGV0YWlscy5cbiAgICpcbiAgICogQHBhcmFtIHZlcmJvc2UgV2hldGhlciB0byBwcmludCB2ZXJib3NlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW5zb3IsXG4gICAqICAgIGluY2x1ZGluZyBkdHlwZSBhbmQgc2l6ZS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBwcmludCh2ZXJib3NlID0gZmFsc2UpOiB2b2lkIHtcbiAgICByZXR1cm4gb3BIYW5kbGVyLnByaW50KHRoaXMsIHZlcmJvc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0ZW5zb3IuIFNlZSBgdGYuY2xvbmVgIGZvciBkZXRhaWxzLlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGNsb25lPFQgZXh0ZW5kcyBUZW5zb3I+KHRoaXM6IFQpOiBUIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIHJldHVybiBvcEhhbmRsZXIuY2xvbmUodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZW5zb3IuIFVzZWZ1bCBmb3IgbG9nZ2luZy5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICB0b1N0cmluZyh2ZXJib3NlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHMgPSB0aGlzLmRhdGFTeW5jKCk7XG4gICAgcmV0dXJuIHRlbnNvclRvU3RyaW5nKHZhbHMsIHRoaXMuc2hhcGUsIHRoaXMuZHR5cGUsIHZlcmJvc2UpO1xuICB9XG5cbiAgY2FzdDxUIGV4dGVuZHMgdGhpcz4oZHR5cGU6IERhdGFUeXBlKTogVCB7XG4gICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICByZXR1cm4gb3BIYW5kbGVyLmNhc3QodGhpcyBhcyBULCBkdHlwZSk7XG4gIH1cbiAgdmFyaWFibGUodHJhaW5hYmxlID0gdHJ1ZSwgbmFtZT86IHN0cmluZywgZHR5cGU/OiBEYXRhVHlwZSk6IFZhcmlhYmxlPFI+IHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIHJldHVybiB0cmFja2VyRm4oKS5tYWtlVmFyaWFibGUodGhpcywgdHJhaW5hYmxlLCBuYW1lLCBkdHlwZSkgYXNcbiAgICAgICAgVmFyaWFibGU8Uj47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRlbnNvciwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gIHZhbHVlOiAoaW5zdGFuY2U6IFRlbnNvcikgPT4ge1xuICAgIC8vIEltcGxlbWVudGF0aW9uIG5vdGU6IHdlIHNob3VsZCB1c2UgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IHRoYXQgd2lsbCBiZVxuICAgIC8vIGRlZmluZWQgYmVmb3JlIHRoZSBjb25zdHJ1Y3RvciBib2R5IGhhcyBmaW5pc2hlZCBleGVjdXRpbmcgKG1ldGhvZHMpLlxuICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3aGVuIHRoaXMgY29kZSBpcyB0cmFuc3BpbGVkIGJ5IGJhYmVsLCBiYWJlbCB3aWxsIGNhbGxcbiAgICAvLyBjbGFzc0NhbGxDaGVjayBiZWZvcmUgdGhlIGNvbnN0cnVjdG9yIGJvZHkgaXMgcnVuLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2lzc3Vlcy8zMzg0IGZvciBiYWNrc3RvcnkuXG4gICAgcmV0dXJuICEhaW5zdGFuY2UgJiYgaW5zdGFuY2UuZGF0YSAhPSBudWxsICYmIGluc3RhbmNlLmRhdGFTeW5jICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UudGhyb3dJZkRpc3Bvc2VkICE9IG51bGw7XG4gIH1cbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsVGVuc29yQ2xhc3MoKSB7XG4gIC8vIFVzZSBnZXRHbG9iYWwgc28gdGhhdCB3ZSBjYW4gYXVnbWVudCB0aGUgVGVuc29yIGNsYXNzIGFjcm9zcyBwYWNrYWdlXG4gIC8vIGJvdW5kYXJpZXMgYmVjYXNlIHRoZSBub2RlIHJlc29sdXRpb24gYWxnIG1heSByZXN1bHQgaW4gZGlmZmVyZW50IG1vZHVsZXNcbiAgLy8gYmVpbmcgcmV0dXJuZWQgZm9yIHRoaXMgZmlsZSBkZXBlbmRpbmcgb24gdGhlIHBhdGggdGhleSBhcmUgbG9hZGVkIGZyb20uXG4gIHJldHVybiBnZXRHbG9iYWwoJ1RlbnNvcicsICgpID0+IHtcbiAgICByZXR1cm4gVGVuc29yO1xuICB9KTtcbn1cblxuLy8gR2xvYmFsIHNpZGUgZWZmZWN0LiBDYWNoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIFRlbnNvciBjbGFzc1xuZ2V0R2xvYmFsVGVuc29yQ2xhc3MoKTtcblxuZXhwb3J0IGludGVyZmFjZSBOdW1lcmljVGVuc29yPFIgZXh0ZW5kcyBSYW5rID0gUmFuaz4gZXh0ZW5kcyBUZW5zb3I8Uj4ge1xuICBkdHlwZTogTnVtZXJpY0RhdGFUeXBlO1xuICBkYXRhU3luYzxEIGV4dGVuZHMgRGF0YVR5cGUgPSBOdW1lcmljRGF0YVR5cGU+KCk6IERhdGFUeXBlTWFwW0RdO1xuICBkYXRhPEQgZXh0ZW5kcyBEYXRhVHlwZSA9IE51bWVyaWNEYXRhVHlwZT4oKTogUHJvbWlzZTxEYXRhVHlwZU1hcFtEXT47XG4gIGRhdGFUb0dQVShvcHRpb25zPzogRGF0YVRvR1BVT3B0aW9ucyk6IEdQVURhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nVGVuc29yPFIgZXh0ZW5kcyBSYW5rID0gUmFuaz4gZXh0ZW5kcyBUZW5zb3I8Uj4ge1xuICBkdHlwZTogJ3N0cmluZyc7XG4gIGRhdGFTeW5jPEQgZXh0ZW5kcyBEYXRhVHlwZSA9ICdzdHJpbmcnPigpOiBEYXRhVHlwZU1hcFtEXTtcbiAgZGF0YTxEIGV4dGVuZHMgRGF0YVR5cGUgPSAnc3RyaW5nJz4oKTogUHJvbWlzZTxEYXRhVHlwZU1hcFtEXT47XG59XG5cbi8qKiBAZG9jbGluayBUZW5zb3IgKi9cbmV4cG9ydCB0eXBlIFNjYWxhciA9IFRlbnNvcjxSYW5rLlIwPjtcbi8qKiBAZG9jbGluayBUZW5zb3IgKi9cbmV4cG9ydCB0eXBlIFRlbnNvcjFEID0gVGVuc29yPFJhbmsuUjE+O1xuLyoqIEBkb2NsaW5rIFRlbnNvciAqL1xuZXhwb3J0IHR5cGUgVGVuc29yMkQgPSBUZW5zb3I8UmFuay5SMj47XG4vKiogQGRvY2xpbmsgVGVuc29yICovXG5leHBvcnQgdHlwZSBUZW5zb3IzRCA9IFRlbnNvcjxSYW5rLlIzPjtcbi8qKiBAZG9jbGluayBUZW5zb3IgKi9cbmV4cG9ydCB0eXBlIFRlbnNvcjREID0gVGVuc29yPFJhbmsuUjQ+O1xuLyoqIEBkb2NsaW5rIFRlbnNvciAqL1xuZXhwb3J0IHR5cGUgVGVuc29yNUQgPSBUZW5zb3I8UmFuay5SNT47XG4vKiogQGRvY2xpbmsgVGVuc29yICovXG5leHBvcnQgdHlwZSBUZW5zb3I2RCA9IFRlbnNvcjxSYW5rLlI2PjtcblxuLyoqXG4gKiBBIG11dGFibGUgYHRmLlRlbnNvcmAsIHVzZWZ1bCBmb3IgcGVyc2lzdGluZyBzdGF0ZSwgZS5nLiBmb3IgdHJhaW5pbmcuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gKi9cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZTxSIGV4dGVuZHMgUmFuayA9IFJhbms+IGV4dGVuZHMgVGVuc29yPFI+IHtcbiAgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgaW5pdGlhbFZhbHVlOiBUZW5zb3I8Uj4sIHB1YmxpYyB0cmFpbmFibGU6IGJvb2xlYW4sIG5hbWU6IHN0cmluZyxcbiAgICAgIHRlbnNvcklkOiBudW1iZXIpIHtcbiAgICBzdXBlcihcbiAgICAgICAgaW5pdGlhbFZhbHVlLnNoYXBlLCBpbml0aWFsVmFsdWUuZHR5cGUsIGluaXRpYWxWYWx1ZS5kYXRhSWQsIHRlbnNvcklkKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIG5ldyBgdGYuVGVuc29yYCB0byB0aGlzIHZhcmlhYmxlLiBUaGUgbmV3IGB0Zi5UZW5zb3JgIG11c3QgaGF2ZVxuICAgKiB0aGUgc2FtZSBzaGFwZSBhbmQgZHR5cGUgYXMgdGhlIG9sZCBgdGYuVGVuc29yYC5cbiAgICpcbiAgICogQHBhcmFtIG5ld1ZhbHVlIE5ldyB0ZW5zb3IgdG8gYmUgYXNzaWduZWQgdG8gdGhpcyB2YXJpYWJsZS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBhc3NpZ24obmV3VmFsdWU6IFRlbnNvcjxSPik6IHZvaWQge1xuICAgIGlmIChuZXdWYWx1ZS5kdHlwZSAhPT0gdGhpcy5kdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBkdHlwZSBvZiB0aGUgbmV3IHZhbHVlICgke25ld1ZhbHVlLmR0eXBlfSkgYW5kIGAgK1xuICAgICAgICAgIGBwcmV2aW91cyB2YWx1ZSAoJHt0aGlzLmR0eXBlfSkgbXVzdCBtYXRjaGApO1xuICAgIH1cbiAgICBpZiAoIXV0aWwuYXJyYXlzRXF1YWwobmV3VmFsdWUuc2hhcGUsIHRoaXMuc2hhcGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHNoYXBlIG9mIHRoZSBuZXcgdmFsdWUgKCR7bmV3VmFsdWUuc2hhcGV9KSBhbmQgYCArXG4gICAgICAgICAgYHByZXZpb3VzIHZhbHVlICgke3RoaXMuc2hhcGV9KSBtdXN0IG1hdGNoYCk7XG4gICAgfVxuICAgIHRyYWNrZXJGbigpLmRpc3Bvc2VUZW5zb3IodGhpcyk7XG4gICAgdGhpcy5kYXRhSWQgPSBuZXdWYWx1ZS5kYXRhSWQ7XG4gICAgdHJhY2tlckZuKCkuaW5jUmVmKHRoaXMsIG51bGwgLyogYmFja2VuZCAqLyk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRyYWNrZXJGbigpLmRpc3Bvc2VWYXJpYWJsZSh0aGlzKTtcbiAgICB0aGlzLmlzRGlzcG9zZWRJbnRlcm5hbCA9IHRydWU7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZhcmlhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgdmFsdWU6IChpbnN0YW5jZTogVmFyaWFibGUpID0+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UgaW5zdGFuY2VvZiBUZW5zb3IgJiYgaW5zdGFuY2UuYXNzaWduICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UuYXNzaWduIGluc3RhbmNlb2YgRnVuY3Rpb247XG4gIH1cbn0pO1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport var Rank;\n(function (Rank) {\n Rank[\"R0\"] = \"R0\";\n Rank[\"R1\"] = \"R1\";\n Rank[\"R2\"] = \"R2\";\n Rank[\"R3\"] = \"R3\";\n Rank[\"R4\"] = \"R4\";\n Rank[\"R5\"] = \"R5\";\n Rank[\"R6\"] = \"R6\";\n})(Rank || (Rank = {}));\n// Looks for upcasting types. Used, for example, in operations with mixed dtype\n// inputs.\nvar UpcastInt32AndMap;\n(function (UpcastInt32AndMap) {\n UpcastInt32AndMap[\"float32\"] = \"float32\";\n UpcastInt32AndMap[\"int32\"] = \"int32\";\n UpcastInt32AndMap[\"bool\"] = \"int32\";\n UpcastInt32AndMap[\"complex64\"] = \"complex64\";\n})(UpcastInt32AndMap || (UpcastInt32AndMap = {}));\nvar UpcastBoolAndMap;\n(function (UpcastBoolAndMap) {\n UpcastBoolAndMap[\"float32\"] = \"float32\";\n UpcastBoolAndMap[\"int32\"] = \"int32\";\n UpcastBoolAndMap[\"bool\"] = \"bool\";\n UpcastBoolAndMap[\"complex64\"] = \"complex64\";\n})(UpcastBoolAndMap || (UpcastBoolAndMap = {}));\nvar UpcastFloat32AndMap;\n(function (UpcastFloat32AndMap) {\n UpcastFloat32AndMap[\"float32\"] = \"float32\";\n UpcastFloat32AndMap[\"int32\"] = \"float32\";\n UpcastFloat32AndMap[\"bool\"] = \"float32\";\n UpcastFloat32AndMap[\"complex64\"] = \"complex64\";\n})(UpcastFloat32AndMap || (UpcastFloat32AndMap = {}));\nvar UpcastComplex64AndMap;\n(function (UpcastComplex64AndMap) {\n UpcastComplex64AndMap[\"float32\"] = \"complex64\";\n UpcastComplex64AndMap[\"int32\"] = \"complex64\";\n UpcastComplex64AndMap[\"bool\"] = \"complex64\";\n UpcastComplex64AndMap[\"complex64\"] = \"complex64\";\n})(UpcastComplex64AndMap || (UpcastComplex64AndMap = {}));\nconst upcastTypeMap = {\n 'float32': UpcastFloat32AndMap,\n 'int32': UpcastInt32AndMap,\n 'bool': UpcastBoolAndMap,\n 'complex64': UpcastComplex64AndMap\n};\nexport function upcastType(typeA, typeB) {\n if (typeA === 'string' || typeB === 'string') {\n if (typeA === 'string' && typeB === 'string') {\n return 'string';\n }\n throw new Error(`Can not upcast ${typeA} with ${typeB}`);\n }\n return upcastTypeMap[typeA][typeB];\n}\n/** Returns the output type after summation. */\nexport function sumOutType(type) {\n return upcastType(type, 'int32');\n}\nexport function isWebGLData(values) {\n return values != null && typeof values === 'object' && 'texture' in values &&\n values.texture instanceof WebGLTexture;\n}\nexport function isWebGPUData(values) {\n return typeof GPUBuffer !== 'undefined' && values != null &&\n typeof values === 'object' && 'buffer' in values &&\n values.buffer instanceof GPUBuffer;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQXNESCxNQUFNLENBQU4sSUFBWSxJQVFYO0FBUkQsV0FBWSxJQUFJO0lBQ2QsaUJBQVMsQ0FBQTtJQUNULGlCQUFTLENBQUE7SUFDVCxpQkFBUyxDQUFBO0lBQ1QsaUJBQVMsQ0FBQTtJQUNULGlCQUFTLENBQUE7SUFDVCxpQkFBUyxDQUFBO0lBQ1QsaUJBQVMsQ0FBQTtBQUNYLENBQUMsRUFSVyxJQUFJLEtBQUosSUFBSSxRQVFmO0FBV0QsK0VBQStFO0FBQy9FLFVBQVU7QUFDVixJQUFLLGlCQUtKO0FBTEQsV0FBSyxpQkFBaUI7SUFDcEIsd0NBQXFCLENBQUE7SUFDckIsb0NBQWlCLENBQUE7SUFDakIsbUNBQWdCLENBQUE7SUFDaEIsNENBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUxJLGlCQUFpQixLQUFqQixpQkFBaUIsUUFLckI7QUFFRCxJQUFLLGdCQUtKO0FBTEQsV0FBSyxnQkFBZ0I7SUFDbkIsdUNBQXFCLENBQUE7SUFDckIsbUNBQWlCLENBQUE7SUFDakIsaUNBQWUsQ0FBQTtJQUNmLDJDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMSSxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBS3BCO0FBRUQsSUFBSyxtQkFLSjtBQUxELFdBQUssbUJBQW1CO0lBQ3RCLDBDQUFxQixDQUFBO0lBQ3JCLHdDQUFtQixDQUFBO0lBQ25CLHVDQUFrQixDQUFBO0lBQ2xCLDhDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMSSxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBS3ZCO0FBRUQsSUFBSyxxQkFLSjtBQUxELFdBQUsscUJBQXFCO0lBQ3hCLDhDQUF1QixDQUFBO0lBQ3ZCLDRDQUFxQixDQUFBO0lBQ3JCLDJDQUFvQixDQUFBO0lBQ3BCLGdEQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMSSxxQkFBcUIsS0FBckIscUJBQXFCLFFBS3pCO0FBRUQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsU0FBUyxFQUFFLG1CQUFtQjtJQUM5QixPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLE1BQU0sRUFBRSxnQkFBZ0I7SUFDeEIsV0FBVyxFQUFFLHFCQUFxQjtDQUNuQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFlLEVBQUUsS0FBZTtJQUN6RCxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM1QyxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM1QyxPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssU0FBUyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELCtDQUErQztBQUMvQyxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQWM7SUFDdkMsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFrRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFlO0lBQ3pDLE9BQU8sTUFBTSxJQUFJLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLE1BQU07UUFDdEUsTUFBTSxDQUFDLE9BQU8sWUFBWSxZQUFZLENBQUM7QUFDN0MsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZTtJQUMxQyxPQUFPLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxNQUFNLElBQUksSUFBSTtRQUNyRCxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU07UUFDaEQsTUFBTSxDQUFDLE1BQU0sWUFBWSxTQUFTLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqIEBkb2NhbGlhcyBudW1iZXJbXSAqL1xuZXhwb3J0IGludGVyZmFjZSBTaGFwZU1hcCB7XG4gIFIwOiBudW1iZXJbXTtcbiAgUjE6IFtudW1iZXJdO1xuICBSMjogW251bWJlciwgbnVtYmVyXTtcbiAgUjM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgUjQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBSNTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgUjY6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuLyoqIEBkb2NhbGlhcyBudW1iZXJbXSAqL1xuZXhwb3J0IGludGVyZmFjZSBBcnJheU1hcCB7XG4gIFIwOiBudW1iZXI7XG4gIFIxOiBudW1iZXJbXTtcbiAgUjI6IG51bWJlcltdW107XG4gIFIzOiBudW1iZXJbXVtdW107XG4gIFI0OiBudW1iZXJbXVtdW11bXTtcbiAgUjU6IG51bWJlcltdW11bXVtdW107XG4gIFI2OiBudW1iZXJbXVtdW11bXVtdW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVR5cGVNYXAge1xuICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG4gIGludDMyOiBJbnQzMkFycmF5O1xuICBib29sOiBVaW50OEFycmF5O1xuICBjb21wbGV4NjQ6IEZsb2F0MzJBcnJheTtcbiAgc3RyaW5nOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVWYWx1ZU1hcCB7XG4gIGJvb2w6IGJvb2xlYW47XG4gIGludDMyOiBudW1iZXI7XG4gIGZsb2F0MzI6IG51bWJlcjtcbiAgY29tcGxleDY0OiBudW1iZXI7XG4gIHN0cmluZzogc3RyaW5nO1xufVxuXG4vKiogQGRvY2FsaWFzICdmbG9hdDMyJ3wnaW50MzInfCdib29sJ3wnY29tcGxleDY0J3wnc3RyaW5nJyAqL1xuZXhwb3J0IHR5cGUgRGF0YVR5cGUgPSBrZXlvZiBEYXRhVHlwZU1hcDtcbmV4cG9ydCB0eXBlIE51bWVyaWNEYXRhVHlwZSA9ICdmbG9hdDMyJ3wnaW50MzInfCdib29sJ3wnY29tcGxleDY0JztcblxuZXhwb3J0IHR5cGUgRGF0YVR5cGVGb3I8VCBleHRlbmRzIG51bWJlcnxzdHJpbmd8Ym9vbGVhbj4gPVxuICAgIFQgZXh0ZW5kcyBudW1iZXJ8Ym9vbGVhbiA/IE51bWVyaWNEYXRhVHlwZSA6IFQgZXh0ZW5kcyBzdHJpbmcgPyAnc3RyaW5nJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldmVyO1xuXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5ID0gRmxvYXQzMkFycmF5fEludDMyQXJyYXl8VWludDhBcnJheTtcbi8qKiBUZW5zb3IgZGF0YSB1c2VkIGluIHRlbnNvciBjcmVhdGlvbiBhbmQgdXNlci1mYWNpbmcgQVBJLiAqL1xuZXhwb3J0IHR5cGUgRGF0YVZhbHVlcyA9IERhdGFUeXBlTWFwW0RhdGFUeXBlXTtcbi8qKiBUaGUgdW5kZXJseWluZyB0ZW5zb3IgZGF0YSB0aGF0IGdldHMgc3RvcmVkIGluIGEgYmFja2VuZC4gKi9cbmV4cG9ydCB0eXBlIEJhY2tlbmRWYWx1ZXMgPSBGbG9hdDMyQXJyYXl8SW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4QXJyYXlbXTtcblxuZXhwb3J0IGVudW0gUmFuayB7XG4gIFIwID0gJ1IwJyxcbiAgUjEgPSAnUjEnLFxuICBSMiA9ICdSMicsXG4gIFIzID0gJ1IzJyxcbiAgUjQgPSAnUjQnLFxuICBSNSA9ICdSNScsXG4gIFI2ID0gJ1I2J1xufVxuXG5leHBvcnQgdHlwZSBGbGF0VmVjdG9yID0gYm9vbGVhbltdfG51bWJlcltdfFR5cGVkQXJyYXk7XG5leHBvcnQgdHlwZSBSZWd1bGFyQXJyYXk8VD4gPVxuICAgIFRbXXxUW11bXXxUW11bXVtdfFRbXVtdW11bXXxUW11bXVtdW11bXXxUW11bXVtdW11bXVtdO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG5leHBvcnQgaW50ZXJmYWNlIFJlY3Vyc2l2ZUFycmF5PFQgZXh0ZW5kcyBhbnk+IHtcbiAgW2luZGV4OiBudW1iZXJdOiBUfFJlY3Vyc2l2ZUFycmF5PFQ+O1xufVxuXG4vLyBMb29rcyBmb3IgdXBjYXN0aW5nIHR5cGVzLiBVc2VkLCBmb3IgZXhhbXBsZSwgaW4gb3BlcmF0aW9ucyB3aXRoIG1peGVkIGR0eXBlXG4vLyBpbnB1dHMuXG5lbnVtIFVwY2FzdEludDMyQW5kTWFwIHtcbiAgJ2Zsb2F0MzInID0gJ2Zsb2F0MzInLFxuICAnaW50MzInID0gJ2ludDMyJyxcbiAgJ2Jvb2wnID0gJ2ludDMyJyxcbiAgJ2NvbXBsZXg2NCcgPSAnY29tcGxleDY0J1xufVxuXG5lbnVtIFVwY2FzdEJvb2xBbmRNYXAge1xuICAnZmxvYXQzMicgPSAnZmxvYXQzMicsXG4gICdpbnQzMicgPSAnaW50MzInLFxuICAnYm9vbCcgPSAnYm9vbCcsXG4gICdjb21wbGV4NjQnID0gJ2NvbXBsZXg2NCdcbn1cblxuZW51bSBVcGNhc3RGbG9hdDMyQW5kTWFwIHtcbiAgJ2Zsb2F0MzInID0gJ2Zsb2F0MzInLFxuICAnaW50MzInID0gJ2Zsb2F0MzInLFxuICAnYm9vbCcgPSAnZmxvYXQzMicsXG4gICdjb21wbGV4NjQnID0gJ2NvbXBsZXg2NCdcbn1cblxuZW51bSBVcGNhc3RDb21wbGV4NjRBbmRNYXAge1xuICAnZmxvYXQzMicgPSAnY29tcGxleDY0JyxcbiAgJ2ludDMyJyA9ICdjb21wbGV4NjQnLFxuICAnYm9vbCcgPSAnY29tcGxleDY0JyxcbiAgJ2NvbXBsZXg2NCcgPSAnY29tcGxleDY0J1xufVxuXG5jb25zdCB1cGNhc3RUeXBlTWFwID0ge1xuICAnZmxvYXQzMic6IFVwY2FzdEZsb2F0MzJBbmRNYXAsXG4gICdpbnQzMic6IFVwY2FzdEludDMyQW5kTWFwLFxuICAnYm9vbCc6IFVwY2FzdEJvb2xBbmRNYXAsXG4gICdjb21wbGV4NjQnOiBVcGNhc3RDb21wbGV4NjRBbmRNYXBcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGNhc3RUeXBlKHR5cGVBOiBEYXRhVHlwZSwgdHlwZUI6IERhdGFUeXBlKTogRGF0YVR5cGUge1xuICBpZiAodHlwZUEgPT09ICdzdHJpbmcnIHx8IHR5cGVCID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlQSA9PT0gJ3N0cmluZycgJiYgdHlwZUIgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCB1cGNhc3QgJHt0eXBlQX0gd2l0aCAke3R5cGVCfWApO1xuICB9XG4gIHJldHVybiB1cGNhc3RUeXBlTWFwW3R5cGVBXVt0eXBlQl07XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBvdXRwdXQgdHlwZSBhZnRlciBzdW1tYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gc3VtT3V0VHlwZSh0eXBlOiBEYXRhVHlwZSk6IERhdGFUeXBlIHtcbiAgcmV0dXJuIHVwY2FzdFR5cGUodHlwZSwgJ2ludDMyJyk7XG59XG5cbi8qKiBAZG9jYWxpYXMgVHlwZWRBcnJheXxBcnJheSAqL1xuZXhwb3J0IHR5cGUgVGVuc29yTGlrZSA9XG4gICAgVHlwZWRBcnJheXxudW1iZXJ8Ym9vbGVhbnxzdHJpbmd8UmVjdXJzaXZlQXJyYXk8bnVtYmVyfG51bWJlcltdfFR5cGVkQXJyYXk+fFxuICAgIFJlY3Vyc2l2ZUFycmF5PGJvb2xlYW4+fFJlY3Vyc2l2ZUFycmF5PHN0cmluZz58VWludDhBcnJheVtdO1xuZXhwb3J0IHR5cGUgU2NhbGFyTGlrZSA9IG51bWJlcnxib29sZWFufHN0cmluZ3xVaW50OEFycmF5O1xuLyoqIEBkb2NhbGlhcyBUeXBlZEFycmF5fEFycmF5ICovXG5leHBvcnQgdHlwZSBUZW5zb3JMaWtlMUQgPSBUeXBlZEFycmF5fG51bWJlcltdfGJvb2xlYW5bXXxzdHJpbmdbXXxVaW50OEFycmF5W107XG4vKiogQGRvY2FsaWFzIFR5cGVkQXJyYXl8QXJyYXkgKi9cbmV4cG9ydCB0eXBlIFRlbnNvckxpa2UyRCA9IFR5cGVkQXJyYXl8bnVtYmVyW118bnVtYmVyW11bXXxib29sZWFuW118Ym9vbGVhbltdW118XG4gICAgc3RyaW5nW118c3RyaW5nW11bXXxVaW50OEFycmF5W118VWludDhBcnJheVtdW107XG4vKiogQGRvY2FsaWFzIFR5cGVkQXJyYXl8QXJyYXkgKi9cbmV4cG9ydCB0eXBlIFRlbnNvckxpa2UzRCA9IFR5cGVkQXJyYXl8bnVtYmVyW118bnVtYmVyW11bXVtdfGJvb2xlYW5bXXxcbiAgICBib29sZWFuW11bXVtdfHN0cmluZ1tdfHN0cmluZ1tdW11bXXxVaW50OEFycmF5W118VWludDhBcnJheVtdW11bXTtcbi8qKiBAZG9jYWxpYXMgVHlwZWRBcnJheXxBcnJheSAqL1xuZXhwb3J0IHR5cGUgVGVuc29yTGlrZTREID0gVHlwZWRBcnJheXxudW1iZXJbXXxudW1iZXJbXVtdW11bXXxib29sZWFuW118XG4gICAgYm9vbGVhbltdW11bXVtdfHN0cmluZ1tdfHN0cmluZ1tdW11bXVtdfFVpbnQ4QXJyYXlbXXxVaW50OEFycmF5W11bXVtdW107XG4vKiogQGRvY2FsaWFzIFR5cGVkQXJyYXl8QXJyYXkgKi9cbmV4cG9ydCB0eXBlIFRlbnNvckxpa2U1RCA9XG4gICAgVHlwZWRBcnJheXxudW1iZXJbXXxudW1iZXJbXVtdW11bXVtdfGJvb2xlYW5bXXxib29sZWFuW11bXVtdW11bXXxzdHJpbmdbXXxcbiAgICBzdHJpbmdbXVtdW11bXVtdfFVpbnQ4QXJyYXlbXXxVaW50OEFycmF5W11bXVtdW11bXTtcbi8qKiBAZG9jYWxpYXMgVHlwZWRBcnJheXxBcnJheSAqL1xuZXhwb3J0IHR5cGUgVGVuc29yTGlrZTZEID1cbiAgICBUeXBlZEFycmF5fG51bWJlcltdfG51bWJlcltdW11bXVtdW11bXXxib29sZWFuW118Ym9vbGVhbltdW11bXVtdW11bXXxcbiAgICBzdHJpbmdbXXxzdHJpbmdbXVtdW11bXVtdW118VWludDhBcnJheVtdfFVpbnQ4QXJyYXlbXVtdW11bXVtdO1xuXG4vKiogVHlwZSBmb3IgcmVwcmVzZW50aW5nIGltYWdlIGRhdGEgaW4gVWludDhBcnJheSB0eXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXhlbERhdGEge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZGF0YTogVWludDhBcnJheTtcbn1cblxuLyoqXG4gKiBUeXBlIGZvciByZXByZXNlbnRpbmcgYWxsIHBlcm11dGF0aW9ucyBhbmQgY29tYmluYXRpb25zIG9mICdSR0JBJyBjaGFubmVscy5cbiAqL1xuZXhwb3J0IHR5cGUgV2ViR0xDaGFubmVscyA9ICdBJ3wnQid8J0cnfCdSJ3wnQUInfCdBRyd8J0FSJ3wnQkEnfCdCRyd8J0JSJ3wnR0EnfFxuICAgICdHQid8J0dSJ3wnUkEnfCdSQid8J1JHJ3wnQUJHJ3wnQUJSJ3wnQUdCJ3wnQUdSJ3wnQVJCJ3wnQVJHJ3wnQkFHJ3wnQkFSJ3xcbiAgICAnQkdBJ3wnQkdSJ3wnQlJBJ3wnQlJHJ3wnR0FCJ3wnR0FSJ3wnR0JBJ3wnR0JSJ3wnR1JBJ3wnR1JCJ3wnUkFCJ3wnUkFHJ3xcbiAgICAnUkJBJ3wnUkJHJ3wnUkdBJ3wnUkdCJ3wnQUJHUid8J0FCUkcnfCdBR0JSJ3wnQUdSQid8J0FSQkcnfCdBUkdCJ3wnQkFHUid8XG4gICAgJ0JBUkcnfCdCR0FSJ3wnQkdSQSd8J0JSQUcnfCdCUkdBJ3wnR0FCUid8J0dBUkInfCdHQkFSJ3wnR0JSQSd8J0dSQUInfFxuICAgICdHUkJBJ3wnUkFCRyd8J1JBR0InfCdSQkFHJ3wnUkJHQSd8J1JHQUInfCdSR0JBJztcblxuLyoqIFR5cGUgZm9yIHJlcHJlc2VudGluZyBhIHRleHR1cmUgZGF0YSB0byBjcmVhdGUgYSB0ZW5zb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkdMRGF0YSB7XG4gIHRleHR1cmU6IFdlYkdMVGV4dHVyZTtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGNoYW5uZWxzOiBXZWJHTENoYW5uZWxzO1xufVxuXG4vKipcbiAqIFR5cGUgZm9yIHJlcHJlc2VudGluZyBhIGJ1ZmZlciBkYXRhIHRvIGNyZWF0ZSBhIHRlbnNvci4gQnVmZmVyIHVzYWdlIHNob3VsZFxuICogYXQgbGVhc3Qgc3VwcG9ydCBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMuIFdoZW5cbiAqIHplcm9Db3B5IGlzIGZhbHNlIG9yIHVuZGVmaW5lZCAoZGVmYXVsdCksIHRoaXMgR1BVQnVmZmVyIHdpbGwgYmUgY29waWVkIHRvXG4gKiB0aGUgdGVuc29yJ3MgcmVzb3VyY2UgYnVmZmVyLiBXaGVuIHplcm9Db3B5IGlzIHRydWUsIHRlbnNvciB3aWxsIHVzZSB0aGlzXG4gKiBHUFVCdWZmZXIgYXMgdGVuc29yJ3MgcmVzb3VyY2UgYnVmZmVyLCB1c2VyIHNob3VsZCBub3QgZGVzdHJveSB0aGlzIEdQVUJ1ZmZlclxuICogdW50aWwgYWxsIGFjY2VzcyBpcyBkb25lLiBJZiBub3Qgc3BlY2lmaWVkIGF0IGNyZWF0aW5nIGEgdGVuc29yLCB0ZW5zb3IgdHlwZVxuICogaXMgZmxvYXQzMi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJHUFVEYXRhIHtcbiAgYnVmZmVyOiBHUFVCdWZmZXI7XG4gIHplcm9Db3B5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViR0xEYXRhKHZhbHVlczogdW5rbm93bik6IHZhbHVlcyBpcyBXZWJHTERhdGEge1xuICByZXR1cm4gdmFsdWVzICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlcyA9PT0gJ29iamVjdCcgJiYgJ3RleHR1cmUnIGluIHZhbHVlcyAmJlxuICAgICAgdmFsdWVzLnRleHR1cmUgaW5zdGFuY2VvZiBXZWJHTFRleHR1cmU7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNXZWJHUFVEYXRhKHZhbHVlczogdW5rbm93bik6IHZhbHVlcyBpcyBXZWJHUFVEYXRhIHtcbiAgcmV0dXJuIHR5cGVvZiBHUFVCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlcyAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVzID09PSAnb2JqZWN0JyAmJiAnYnVmZmVyJyBpbiB2YWx1ZXMgJiZcbiAgICAgIHZhbHVlcy5idWZmZXIgaW5zdGFuY2VvZiBHUFVCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLiBBIG51bWJlciBpbiByYW5nZSBbMC0xXS4gSWYgdGhlIGltYWdlIGlzIGEgMkQgdGVuc29yIG9yIGEgM0RcbiAgICogdGVuc29yIHdpdGggMSBvciAzIGNoYW5uZWxzLCB0aGUgYWxwaGEgY2hhbm5lbHMgd291bGQgc2V0IGFzIGl0cyB2YWx1ZTtcbiAgICogb3RoZXJ3aXNlLCBpdCB3b3VsZCBub3QgbWFrZSBlZmZlY3RzLlxuICAgKi9cbiAgYWxwaGE/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwuICBJZiB0aGUgY2FudmFzIGhhcyBjcmVhdGVkIGEgY29udGV4dCwgaXQgd291bGQgbm90IG1ha2UgZWZmZWN0cy5cbiAgICogSWYgaXQgaXMgbm90IHNldCwgaXQgd291bGQgYmUgdmFyaWFibGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgYmFja2VuZC5cbiAgICovXG4gIGNvbnRleHRUeXBlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwuIEEgV2ViR0xDb250ZXh0QXR0cmlidXRlcyBjb25maWd1cmF0aW9uLiBJZiB0aGUgY2FudmFzIGhhcyBjcmVhdGVkXG4gICAqIGEgY29udGV4dCwgaXQgd291bGQgbm90IG1ha2UgZWZmZWN0cy5cbiAgICovXG4gIGNvbnRleHRBdHRyaWJ1dGVzPzogV2ViR0xDb250ZXh0QXR0cmlidXRlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmF3T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbC4gQW4gb2JqZWN0IG9mIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSB2YWx1ZXMgb2YgaW1hZ2UgdGVuc29yLlxuICAgKi9cbiAgaW1hZ2VPcHRpb25zPzogSW1hZ2VPcHRpb25zO1xuICAvKipcbiAgICogT3B0aW9uYWwuIEFuIG9iamVjdCB0byBjb25maWd1cmUgdGhlIGNvbnRleHQgb2YgdGhlIGNhbnZhcyB0byBkcmF3IHRvLlxuICAgKi9cbiAgY29udGV4dE9wdGlvbnM/OiBDb250ZXh0T3B0aW9ucztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tensor } from './tensor';\nimport { upcastType } from './types';\nimport { assert } from './util';\nexport function makeTypesMatch(a, b) {\n if (a.dtype === b.dtype) {\n return [a, b];\n }\n const dtype = upcastType(a.dtype, b.dtype);\n return [a.cast(dtype), b.cast(dtype)];\n}\nexport function assertTypesMatch(a, b) {\n assert(a.dtype === b.dtype, () => `The dtypes of the first(${a.dtype}) and` +\n ` second(${b.dtype}) input must match`);\n}\nexport function isTensorInList(tensor, tensorList) {\n return tensorList.some(x => x.id === tensor.id);\n}\n/**\n * Extracts any `Tensor`s found within the provided object.\n *\n * @param container an object that may be a `Tensor` or may directly contain\n * `Tensor`s, such as a `Tensor[]` or `{key: Tensor, ...}`. In general it\n * is safe to pass any object here, except that `Promise`s are not\n * supported.\n * @returns An array of `Tensors` found within the passed object. If the\n * argument is simply a `Tensor', a list containing that `Tensor` is\n * returned. If the object is not a `Tensor` or does not\n * contain `Tensors`, an empty list is returned.\n */\nexport function getTensorsInContainer(result) {\n const list = [];\n const seen = new Set();\n walkTensorContainer(result, list, seen);\n return list;\n}\nfunction walkTensorContainer(container, list, seen) {\n if (container == null) {\n return;\n }\n if (container instanceof Tensor) {\n list.push(container);\n return;\n }\n if (!isIterable(container)) {\n return;\n }\n // Iteration over keys works also for arrays.\n const iterable = container;\n for (const k in iterable) {\n const val = iterable[k];\n if (!seen.has(val)) {\n seen.add(val);\n walkTensorContainer(val, list, seen);\n }\n }\n}\n// tslint:disable-next-line:no-any\nfunction isIterable(obj) {\n return Array.isArray(obj) || typeof obj === 'object';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL3RlbnNvcl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE1BQU0sVUFBVSxjQUFjLENBQW1CLENBQUksRUFBRSxDQUFJO0lBQ3pELElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDZjtJQUNELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNuRCxNQUFNLENBQ0YsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxFQUNuQixHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEtBQUssT0FBTztRQUMzQyxXQUFXLENBQUMsQ0FBQyxLQUFLLG9CQUFvQixDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBYyxFQUFFLFVBQW9CO0lBQ2pFLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUF1QjtJQUMzRCxNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7SUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVcsQ0FBQztJQUNoQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQ3hCLFNBQTBCLEVBQUUsSUFBYyxFQUFFLElBQWtCO0lBQ2hFLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixPQUFPO0tBQ1I7SUFDRCxJQUFJLFNBQVMsWUFBWSxNQUFNLEVBQUU7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQixPQUFPO0tBQ1I7SUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzFCLE9BQU87S0FDUjtJQUNELDZDQUE2QztJQUM3QyxNQUFNLFFBQVEsR0FBRyxTQUFpQyxDQUFDO0lBQ25ELEtBQUssTUFBTSxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsbUJBQW1CLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0QztLQUNGO0FBQ0gsQ0FBQztBQUVELGtDQUFrQztBQUNsQyxTQUFTLFVBQVUsQ0FBQyxHQUFRO0lBQzFCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yQ29udGFpbmVyLCBUZW5zb3JDb250YWluZXJBcnJheX0gZnJvbSAnLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHt1cGNhc3RUeXBlfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVR5cGVzTWF0Y2g8VCBleHRlbmRzIFRlbnNvcj4oYTogVCwgYjogVCk6IFtULCBUXSB7XG4gIGlmIChhLmR0eXBlID09PSBiLmR0eXBlKSB7XG4gICAgcmV0dXJuIFthLCBiXTtcbiAgfVxuICBjb25zdCBkdHlwZSA9IHVwY2FzdFR5cGUoYS5kdHlwZSwgYi5kdHlwZSk7XG4gIHJldHVybiBbYS5jYXN0KGR0eXBlKSwgYi5jYXN0KGR0eXBlKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRUeXBlc01hdGNoKGE6IFRlbnNvciwgYjogVGVuc29yKTogdm9pZCB7XG4gIGFzc2VydChcbiAgICAgIGEuZHR5cGUgPT09IGIuZHR5cGUsXG4gICAgICAoKSA9PiBgVGhlIGR0eXBlcyBvZiB0aGUgZmlyc3QoJHthLmR0eXBlfSkgYW5kYCArXG4gICAgICAgICAgYCBzZWNvbmQoJHtiLmR0eXBlfSkgaW5wdXQgbXVzdCBtYXRjaGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW5zb3JJbkxpc3QodGVuc29yOiBUZW5zb3IsIHRlbnNvckxpc3Q6IFRlbnNvcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiB0ZW5zb3JMaXN0LnNvbWUoeCA9PiB4LmlkID09PSB0ZW5zb3IuaWQpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGFueSBgVGVuc29yYHMgZm91bmQgd2l0aGluIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciBhbiBvYmplY3QgdGhhdCBtYXkgYmUgYSBgVGVuc29yYCBvciBtYXkgZGlyZWN0bHkgY29udGFpblxuICogICBgVGVuc29yYHMsIHN1Y2ggYXMgYSBgVGVuc29yW11gIG9yIGB7a2V5OiBUZW5zb3IsIC4uLn1gLiBJbiBnZW5lcmFsIGl0XG4gKiAgIGlzIHNhZmUgdG8gcGFzcyBhbnkgb2JqZWN0IGhlcmUsIGV4Y2VwdCB0aGF0IGBQcm9taXNlYHMgYXJlIG5vdFxuICogICBzdXBwb3J0ZWQuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBgVGVuc29yc2AgZm91bmQgd2l0aGluIHRoZSBwYXNzZWQgb2JqZWN0LiBJZiB0aGVcbiAqICAgYXJndW1lbnQgaXMgc2ltcGx5IGEgYFRlbnNvcicsIGEgbGlzdCBjb250YWluaW5nIHRoYXQgYFRlbnNvcmAgaXNcbiAqICAgcmV0dXJuZWQuIElmIHRoZSBvYmplY3QgaXMgbm90IGEgYFRlbnNvcmAgb3IgZG9lcyBub3RcbiAqICAgY29udGFpbiBgVGVuc29yc2AsIGFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW5zb3JzSW5Db250YWluZXIocmVzdWx0OiBUZW5zb3JDb250YWluZXIpOiBUZW5zb3JbXSB7XG4gIGNvbnN0IGxpc3Q6IFRlbnNvcltdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHt9fHZvaWQ+KCk7XG4gIHdhbGtUZW5zb3JDb250YWluZXIocmVzdWx0LCBsaXN0LCBzZWVuKTtcbiAgcmV0dXJuIGxpc3Q7XG59XG5cbmZ1bmN0aW9uIHdhbGtUZW5zb3JDb250YWluZXIoXG4gICAgY29udGFpbmVyOiBUZW5zb3JDb250YWluZXIsIGxpc3Q6IFRlbnNvcltdLCBzZWVuOiBTZXQ8e318dm9pZD4pOiB2b2lkIHtcbiAgaWYgKGNvbnRhaW5lciA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICBsaXN0LnB1c2goY29udGFpbmVyKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFpc0l0ZXJhYmxlKGNvbnRhaW5lcikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gSXRlcmF0aW9uIG92ZXIga2V5cyB3b3JrcyBhbHNvIGZvciBhcnJheXMuXG4gIGNvbnN0IGl0ZXJhYmxlID0gY29udGFpbmVyIGFzIFRlbnNvckNvbnRhaW5lckFycmF5O1xuICBmb3IgKGNvbnN0IGsgaW4gaXRlcmFibGUpIHtcbiAgICBjb25zdCB2YWwgPSBpdGVyYWJsZVtrXTtcbiAgICBpZiAoIXNlZW4uaGFzKHZhbCkpIHtcbiAgICAgIHNlZW4uYWRkKHZhbCk7XG4gICAgICB3YWxrVGVuc29yQ29udGFpbmVyKHZhbCwgbGlzdCwgc2Vlbik7XG4gICAgfVxuICB9XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmZ1bmN0aW9uIGlzSXRlcmFibGUob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKSB8fCB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { KernelBackend } from './backends/backend';\nimport { Environment, setEnvironmentGlobal } from './environment';\nimport { getGlobalNamespace } from './global_util';\nimport { Add, Cast, Identity } from './kernel_names';\nimport { getGradient, getKernel, getKernelsForBackend } from './kernel_registry';\nimport * as log from './log';\nimport { Profiler } from './profiler';\nimport { backpropagateGradients, getFilteredNodesXToY } from './tape';\nimport { setTensorTracker, Tensor, Variable } from './tensor';\nimport { getTensorsInContainer } from './tensor_util';\nimport * as util from './util';\nimport { bytesFromStringArray, makeOnesTypedArray, now, sizeFromShape } from './util';\nfunction isRegisteredKernelInvocation(kernelInvocation) {\n return kernelInvocation.kernelName != null;\n}\nclass EngineState {\n constructor() {\n // Public since optimizers will use it.\n this.registeredVariables = {};\n this.nextTapeNodeId = 0;\n this.numBytes = 0;\n this.numTensors = 0;\n this.numStringTensors = 0;\n this.numDataBuffers = 0;\n // Number of nested tf.grad() statements when computing higher-order\n // gradients. E.g. `1` for first-order gradients and `2` for second-order\n // gradients. Used to track if the tape should be removed after a backprop.\n this.gradientDepth = 0;\n // Number of nested kernel calls. When kernel depth is greater than 1, we turn\n // off the tape.\n this.kernelDepth = 0;\n this.scopeStack = [];\n /**\n * Keeps track of the number of data moves during a kernel execution. We\n * maintain a stack since kernels can call other kernels, recursively.\n */\n this.numDataMovesStack = [];\n this.nextScopeId = 0;\n this.tensorInfo = new WeakMap();\n this.profiling = false;\n this.activeProfile = {\n newBytes: 0,\n newTensors: 0,\n peakBytes: 0,\n kernels: [],\n result: null,\n get kernelNames() {\n return Array.from(new Set(this.kernels.map(k => k.name)));\n }\n };\n }\n dispose() {\n for (const variableName in this.registeredVariables) {\n this.registeredVariables[variableName].dispose();\n }\n }\n}\nclass Engine {\n constructor(ENV) {\n this.ENV = ENV;\n this.registry = {};\n this.registryFactory = {};\n this.pendingBackendInitId = 0;\n this.state = new EngineState();\n }\n async ready() {\n if (this.pendingBackendInit != null) {\n return this.pendingBackendInit.then(() => { });\n }\n if (this.backendInstance != null) {\n return;\n }\n const sortedBackends = this.getSortedBackends();\n for (let i = 0; i < sortedBackends.length; i++) {\n const backendName = sortedBackends[i];\n const success = await this.initializeBackend(backendName).success;\n if (success) {\n await this.setBackend(backendName);\n return;\n }\n }\n throw new Error(`Could not initialize any backends, all backend initializations ` +\n `failed.`);\n }\n get backend() {\n if (this.pendingBackendInit != null) {\n throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make ` +\n `sure to await tf.ready() or await tf.setBackend() before calling ` +\n `other methods`);\n }\n if (this.backendInstance == null) {\n const { name, asyncInit } = this.initializeBackendsAndReturnBest();\n if (asyncInit) {\n throw new Error(`The highest priority backend '${name}' has not yet been ` +\n `initialized. Make sure to await tf.ready() or ` +\n `await tf.setBackend() before calling other methods`);\n }\n this.setBackend(name);\n }\n return this.backendInstance;\n }\n backendNames() {\n return Object.keys(this.registryFactory);\n }\n findBackend(backendName) {\n if (!(backendName in this.registry)) {\n // If the backend hasn't been initialized but we have a registry entry for\n // it, initialize it and return it.\n if (backendName in this.registryFactory) {\n const { asyncInit } = this.initializeBackend(backendName);\n if (asyncInit) {\n // Backend is not ready yet.\n return null;\n }\n }\n else {\n return null;\n }\n }\n return this.registry[backendName];\n }\n findBackendFactory(backendName) {\n if (!(backendName in this.registryFactory)) {\n return null;\n }\n return this.registryFactory[backendName].factory;\n }\n registerBackend(backendName, factory, priority = 1) {\n if (backendName in this.registryFactory) {\n log.warn(`${backendName} backend was already registered. ` +\n `Reusing existing backend factory.`);\n return false;\n }\n this.registryFactory[backendName] = { factory, priority };\n return true;\n }\n async setBackend(backendName) {\n if (this.registryFactory[backendName] == null) {\n throw new Error(`Backend name '${backendName}' not found in registry`);\n }\n this.backendName = backendName;\n if (this.registry[backendName] == null) {\n this.backendInstance = null;\n const { success, asyncInit } = this.initializeBackend(backendName);\n const result = asyncInit ? await success : success;\n if (!result) {\n return false;\n }\n }\n this.backendInstance = this.registry[backendName];\n this.setupRegisteredKernels();\n // Reset the profiler.\n this.profiler = new Profiler(this.backendInstance);\n return true;\n }\n setupRegisteredKernels() {\n const kernels = getKernelsForBackend(this.backendName);\n kernels.forEach(kernel => {\n if (kernel.setupFunc != null) {\n kernel.setupFunc(this.backendInstance);\n }\n });\n }\n disposeRegisteredKernels(backendName) {\n const kernels = getKernelsForBackend(backendName);\n kernels.forEach(kernel => {\n if (kernel.disposeFunc != null) {\n kernel.disposeFunc(this.registry[backendName]);\n }\n });\n }\n /**\n * Initializes a backend by looking up the backend name in the factory\n * registry and calling the factory method. Returns a boolean representing\n * whether the initialization of the backend suceeded. Throws an error if\n * there is no backend in the factory registry.\n */\n initializeBackend(backendName) {\n const registryFactoryEntry = this.registryFactory[backendName];\n if (registryFactoryEntry == null) {\n throw new Error(`Cannot initialize backend ${backendName}, no registration found.`);\n }\n try {\n const backend = registryFactoryEntry.factory();\n /* Test if the factory returns a promise.\n Done in a more liberal way than\n previous 'Promise.resolve(backend)===backend'\n as we needed to account for custom Promise\n implementations (e.g. Angular) */\n if (backend && !(backend instanceof KernelBackend) &&\n typeof backend.then === 'function') {\n const promiseId = ++this.pendingBackendInitId;\n const success = backend\n .then(backendInstance => {\n // Outdated promise. Another backend was set in the meantime.\n if (promiseId < this.pendingBackendInitId) {\n return false;\n }\n this.registry[backendName] = backendInstance;\n this.pendingBackendInit = null;\n return true;\n })\n .catch(err => {\n // Outdated promise. Another backend was set in the meantime.\n if (promiseId < this.pendingBackendInitId) {\n return false;\n }\n this.pendingBackendInit = null;\n log.warn(`Initialization of backend ${backendName} failed`);\n log.warn(err.stack || err.message);\n return false;\n });\n this.pendingBackendInit = success;\n return { success, asyncInit: true };\n }\n else {\n this.registry[backendName] = backend;\n return { success: true, asyncInit: false };\n }\n }\n catch (err) {\n log.warn(`Initialization of backend ${backendName} failed`);\n log.warn(err.stack || err.message);\n return { success: false, asyncInit: false };\n }\n }\n removeBackend(backendName) {\n if (!(backendName in this.registryFactory)) {\n throw new Error(`${backendName} backend not found in registry`);\n }\n if (this.backendName === backendName && this.pendingBackendInit != null) {\n // There is a pending promise of the backend we want to remove. Make it\n // obsolete.\n this.pendingBackendInitId++;\n }\n if (backendName in this.registry) {\n this.disposeRegisteredKernels(backendName);\n this.registry[backendName].dispose();\n delete this.registry[backendName];\n }\n delete this.registryFactory[backendName];\n // Unset the backend if it is active.\n if (this.backendName === backendName) {\n this.pendingBackendInit = null;\n this.backendName = null;\n this.backendInstance = null;\n }\n }\n getSortedBackends() {\n if (Object.keys(this.registryFactory).length === 0) {\n throw new Error('No backend found in registry.');\n }\n return Object.keys(this.registryFactory).sort((a, b) => {\n // Highest priority comes first.\n return this.registryFactory[b].priority -\n this.registryFactory[a].priority;\n });\n }\n initializeBackendsAndReturnBest() {\n const sortedBackends = this.getSortedBackends();\n for (let i = 0; i < sortedBackends.length; i++) {\n const backendName = sortedBackends[i];\n const { success, asyncInit } = this.initializeBackend(backendName);\n if (asyncInit || success) {\n return { name: backendName, asyncInit };\n }\n }\n throw new Error(`Could not initialize any backends, all backend initializations ` +\n `failed.`);\n }\n moveData(backend, dataId) {\n const info = this.state.tensorInfo.get(dataId);\n const srcBackend = info.backend;\n const values = this.readSync(dataId);\n const refCount = srcBackend.refCount(dataId);\n // Delete the tensor from the old backend and move it to the new\n // backend.\n srcBackend.disposeData(dataId, true);\n info.backend = backend;\n backend.move(dataId, values, info.shape, info.dtype, refCount);\n if (this.shouldCheckForMemLeaks()) {\n // Track the number of moves during a kernel execution to correctly\n // detect memory leaks.\n this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]++;\n }\n }\n tidy(nameOrFn, fn) {\n let name = null;\n if (fn == null) {\n // Called with only 1 argument.\n if (typeof nameOrFn !== 'function') {\n throw new Error('Please provide a function to tidy()');\n }\n fn = nameOrFn;\n }\n else {\n // Called with 2 arguments.\n if (typeof nameOrFn !== 'string' && !(nameOrFn instanceof String)) {\n throw new Error('When calling with two arguments, the first argument ' +\n 'to tidy() must be a string');\n }\n if (typeof fn !== 'function') {\n throw new Error('When calling with two arguments, the 2nd argument ' +\n 'to tidy() must be a function');\n }\n name = nameOrFn;\n // TODO(nsthorat,smilkov): Do operation logging and performance\n // profiling.\n }\n let result;\n return this.scopedRun(() => this.startScope(name), () => this.endScope(result), () => {\n result = fn();\n if (result instanceof Promise) {\n console.error('Cannot return a Promise inside of tidy.');\n }\n return result;\n });\n }\n scopedRun(start, end, f) {\n start();\n try {\n const res = f();\n end();\n return res;\n }\n catch (ex) {\n end();\n throw ex;\n }\n }\n nextTensorId() {\n return Engine.nextTensorId++;\n }\n nextVariableId() {\n return Engine.nextVariableId++;\n }\n /**\n * This method is called instead of the public-facing tensor.clone() when\n * saving a tensor for backwards pass. It makes sure to add the clone\n * operation to the tape regardless of being called inside a kernel\n * execution.\n */\n clone(x) {\n const y = ENGINE.runKernel(Identity, { x });\n const inputs = { x };\n const grad = (dy) => ({\n x: () => {\n const dtype = 'float32';\n const gradInputs = { x: dy };\n const attrs = { dtype };\n return ENGINE.runKernel(Cast, gradInputs, \n // tslint:disable-next-line: no-unnecessary-type-assertion\n attrs);\n }\n });\n const saved = [];\n this.addTapeNode(this.state.activeScope.name, inputs, [y], grad, saved, {});\n return y;\n }\n /**\n * Execute a kernel with the given name and return the output tensor.\n *\n * @param kernelName The name of the kernel to execute.\n * @param inputs A map of input names to tensors.\n * @param attrs A map of attribute names to their values. An attribute is a\n * primitive (non-tensor) input to the kernel.\n * @param inputsToSave A list of tensors, inputs to save for the backprop\n * computation.\n * @param outputsToSave A list of booleans, specifying which output to save\n * for the backprop computation. These are booleans since the output\n * tensors are not visible to the user.\n */\n runKernel(kernelName, inputs, attrs) {\n if (this.backendName == null) {\n // backend has not been initialized yet (backend initialization is lazy\n // can be deferred until an op/ kernel is run).\n // The below getter has side effects that will try to initialize the\n // backend and set properties like this.backendName\n // tslint:disable-next-line: no-unused-expression\n this.backend;\n }\n const hasKernel = getKernel(kernelName, this.backendName) != null;\n if (!hasKernel) {\n throw new Error(`Kernel '${kernelName}' not registered for backend '${this.backendName}'`);\n }\n return this.runKernelFunc({ kernelName, inputs, attrs });\n }\n shouldCheckForMemLeaks() {\n return this.ENV.getBool('IS_TEST');\n }\n checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos) {\n const numDataIdsAfter = this.backend.numDataIds();\n // Count the number of data ids associated with the result of the kernel.\n let numOutputDataIds = 0;\n outInfos.forEach(info => {\n // Complex numbers allocate 3 data ids, one for 'real', one for\n // 'imaginary', and one for the container that holds the former two.\n numOutputDataIds += (info.dtype === 'complex64' ? 3 : 1);\n });\n // Account for the number of moves during kernel execution. A \"data move\"\n // can happen in the middle of a kernel execution, placing a new (key,value)\n // pair in the data storage. Since data moves have net zero effect (we\n // always remove the data from the old backend), we have to cancel them out\n // when detecting memory leaks.\n const numMoves = this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1];\n const dataIdsLeaked = numDataIdsAfter - numDataIdsBefore - numOutputDataIds - numMoves;\n if (dataIdsLeaked > 0) {\n throw new Error(`Backend '${this.backendName}' has an internal memory leak ` +\n `(${dataIdsLeaked} data ids) after running '${kernelName}'`);\n }\n }\n /**\n * Internal helper method to execute a kernel Func\n *\n * Use `runKernel` to execute kernels from outside of engine.\n */\n runKernelFunc(kernelParams) {\n let outputs;\n let saved = [];\n const isTapeOn = this.isTapeOn();\n const startingBytecount = this.state.numBytes;\n const startingNumTensors = this.state.numTensors;\n if (this.shouldCheckForMemLeaks()) {\n this.state.numDataMovesStack.push(0);\n }\n let kernelFunc;\n if (this.backendName == null) {\n // backend has not been initialized yet (backend initialization is lazy\n // can be deferred until an op/ kernel is run).\n // The below getter has side effects that will try to initialize the\n // backend and set properties like this.backendName\n // tslint:disable-next-line: no-unused-expression\n this.backend;\n }\n let out;\n const kernelOrScopeName = isRegisteredKernelInvocation(kernelParams) ?\n kernelParams.kernelName :\n this.state.activeScope != null ? this.state.activeScope.name : '';\n // Create the kernelFunc from either a registered kernel OR passed in\n // forward/backward functions (used by custom grad). In this context a\n // kernelFunc wraps a kernel implementation with some bookkeeping.\n if (isRegisteredKernelInvocation(kernelParams)) {\n const { kernelName, inputs, attrs } = kernelParams;\n if (this.backendName == null) {\n // backend has not been initialized yet (backend initialization is lazy\n // can be deferred until an op/ kernel is run).\n // The below getter has side effects that will try to initialize the\n // backend and set properties like this.backendName\n // tslint:disable-next-line: no-unused-expression\n this.backend;\n }\n const kernel = getKernel(kernelName, this.backendName);\n util.assert(kernel != null, () => `Cannot find registered kernel '${kernelName}' for backend '${this.backendName}'`);\n kernelFunc = () => {\n const numDataIdsBefore = this.backend.numDataIds();\n out = kernel.kernelFunc({ inputs, attrs, backend: this.backend });\n const outInfos = Array.isArray(out) ? out : [out];\n if (this.shouldCheckForMemLeaks()) {\n this.checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos);\n }\n const outTensors = outInfos.map((outInfo) => {\n // todo (yassogba) remove this option (Tensor) when node backend\n // methods have been modularized and they all return tensorInfo.\n // TensorInfos do not have a rank attribute.\n if (outInfo.rank != null) {\n return outInfo;\n }\n return this.makeTensorFromTensorInfo(outInfo);\n });\n // Save any required inputs and outputs.\n // Do not save unless we are recording to the tape. Otherwise it would\n // cause a mem leak since there would be no backprop for these tensors\n // (which would otherwise dispose them).\n if (isTapeOn) {\n const tensorsToSave = this.getTensorsForGradient(kernelName, inputs, outTensors);\n saved = this.saveTensorsForBackwardMode(tensorsToSave);\n }\n return outTensors;\n };\n }\n else {\n const { forwardFunc } = kernelParams;\n // Running a customGrad op.\n const saveFunc = (tensors) => {\n // Do not save unless we are recording to the tape. Otherwise it would\n // cause a mem leak since we would never run backprop, which disposes\n // the kept tensors.\n if (!isTapeOn) {\n return;\n }\n saved = tensors.map(tensor => this.keep(this.clone(tensor)));\n };\n kernelFunc = () => {\n const numDataIdsBefore = this.backend.numDataIds();\n out = this.tidy(() => forwardFunc(this.backend, saveFunc));\n const outs = (Array.isArray(out) ? out : [out]);\n if (this.shouldCheckForMemLeaks()) {\n // Scope name is used to print a more helpful error message if needed.\n this.checkKernelForMemLeak(kernelOrScopeName, numDataIdsBefore, outs);\n }\n return outs;\n };\n }\n //\n // Run the kernelFunc. Optionally profiling it.\n //\n const { inputs, attrs } = kernelParams;\n const backwardsFunc = isRegisteredKernelInvocation(kernelParams) ?\n null :\n kernelParams.backwardsFunc;\n let kernelProfile;\n this.scopedRun(\n // Stop recording to a tape when running a kernel.\n () => this.state.kernelDepth++, () => this.state.kernelDepth--, () => {\n if (!this.ENV.getBool('DEBUG') && !this.state.profiling) {\n outputs = kernelFunc();\n }\n else {\n kernelProfile = this.profiler.profileKernel(kernelOrScopeName, inputs, () => kernelFunc());\n if (this.ENV.getBool('DEBUG')) {\n this.profiler.logKernelProfile(kernelProfile);\n }\n outputs = kernelProfile.outputs;\n }\n });\n if (isTapeOn) {\n this.addTapeNode(kernelOrScopeName, inputs, outputs, backwardsFunc, saved, attrs);\n }\n if (this.state.profiling) {\n this.state.activeProfile.kernels.push({\n name: kernelOrScopeName,\n bytesAdded: this.state.numBytes - startingBytecount,\n totalBytesSnapshot: this.state.numBytes,\n tensorsAdded: this.state.numTensors - startingNumTensors,\n totalTensorsSnapshot: this.state.numTensors,\n inputShapes: Object.keys(inputs).map(key => inputs[key] != null ? inputs[key].shape : null),\n outputShapes: outputs.map(item => item.shape),\n kernelTimeMs: kernelProfile.timeMs,\n extraInfo: kernelProfile.extraInfo\n });\n }\n return (Array.isArray(out) ? outputs : outputs[0]);\n }\n /**\n * Saves tensors used in forward mode for use in backward mode.\n *\n * @param tensors the list of tensors to save.\n */\n saveTensorsForBackwardMode(tensors) {\n const saved = tensors.map(tensor => this.keep(this.clone(tensor)));\n return saved;\n }\n /**\n * Returns a list of tensors to save for a given gradient calculation.\n *\n * @param kernelName name of kernel to look up gradient for.\n * @param inputs a map of input tensors.\n * @param outputs an array of output tensors from forward mode of kernel.\n */\n getTensorsForGradient(kernelName, inputs, outputs) {\n const gradConfig = getGradient(kernelName);\n if (gradConfig != null) {\n const inputsToSave = gradConfig.inputsToSave || [];\n const outputsToSave = gradConfig.outputsToSave || [];\n // If saveAllInputs is true, all inputs will be saved. Otherwise, inputs\n // specified in inputsToSave will be saved.\n let inputTensorsToSave;\n if (gradConfig.saveAllInputs) {\n util.assert(Array.isArray(inputs), () => 'saveAllInputs is true, expected inputs to be an array.');\n inputTensorsToSave = Object.keys(inputs).map((key) => inputs[key]);\n }\n else {\n inputTensorsToSave = inputsToSave.map((inputName) => inputs[inputName]);\n }\n const outputTensorsToSave = outputs.filter((_, i) => outputsToSave[i]);\n return inputTensorsToSave.concat(outputTensorsToSave);\n }\n // We return an empty list rather than throw an error because the kernel we\n // are looking up may not actually be relevant to backproping through the\n // overall function\n //\n // See 'does not error if irrelevant (pruned) ops are missing grads' test\n // in gradients_test.ts for an example.\n return [];\n }\n /**\n * Internal method used by public APIs for tensor creation. Makes a new\n * tensor with the provided shape, dtype and values. It always\n * creates a new data id and writes the values to the underlying backend.\n */\n makeTensor(values, shape, dtype, backend) {\n if (values == null) {\n throw new Error('Values passed to engine.makeTensor() are null');\n }\n dtype = dtype || 'float32';\n backend = backend || this.backend;\n let backendVals = values;\n if (dtype === 'string' && util.isString(values[0])) {\n backendVals = values.map(d => util.encodeString(d));\n }\n const dataId = backend.write(backendVals, shape, dtype);\n const t = new Tensor(shape, dtype, dataId, this.nextTensorId());\n this.trackTensor(t, backend);\n // Count bytes for string tensors.\n if (dtype === 'string') {\n const info = this.state.tensorInfo.get(dataId);\n const newBytes = bytesFromStringArray(backendVals);\n this.state.numBytes += newBytes - info.bytes;\n info.bytes = newBytes;\n }\n return t;\n }\n /**\n * Internal method used by backends. Makes a new tensor\n * that is a wrapper around an existing data id. It doesn't create\n * a new data id, only increments the ref count used in memory tracking.\n * @deprecated\n */\n makeTensorFromDataId(dataId, shape, dtype, backend) {\n dtype = dtype || 'float32';\n const tensorInfo = { dataId, shape, dtype };\n return this.makeTensorFromTensorInfo(tensorInfo, backend);\n }\n /**\n * Internal method used by backends. Makes a new tensor that is a wrapper\n * around an existing data id in TensorInfo. It doesn't create a new data id,\n * only increments the ref count used in memory tracking.\n */\n makeTensorFromTensorInfo(tensorInfo, backend) {\n const { dataId, shape, dtype } = tensorInfo;\n const t = new Tensor(shape, dtype, dataId, this.nextTensorId());\n this.trackTensor(t, backend);\n return t;\n }\n makeVariable(initialValue, trainable = true, name, dtype) {\n name = name || this.nextVariableId().toString();\n if (dtype != null && dtype !== initialValue.dtype) {\n initialValue = initialValue.cast(dtype);\n }\n const v = new Variable(initialValue, trainable, name, this.nextTensorId());\n if (this.state.registeredVariables[v.name] != null) {\n throw new Error(`Variable with name ${v.name} was already registered`);\n }\n this.state.registeredVariables[v.name] = v;\n this.incRef(v, this.backend);\n return v;\n }\n trackTensor(a, backend) {\n this.state.numTensors++;\n if (a.dtype === 'string') {\n this.state.numStringTensors++;\n }\n // Bytes for complex numbers are counted by their components. Bytes for\n // string tensors are counted when writing values.\n let bytes = 0;\n if (a.dtype !== 'complex64' && a.dtype !== 'string') {\n bytes = a.size * util.bytesPerElement(a.dtype);\n }\n this.state.numBytes += bytes;\n if (!this.state.tensorInfo.has(a.dataId)) {\n this.state.numDataBuffers++;\n this.state.tensorInfo.set(a.dataId, {\n backend: backend || this.backend,\n dtype: a.dtype,\n shape: a.shape,\n bytes\n });\n }\n if (!(a instanceof Variable)) {\n this.track(a);\n }\n }\n // Track the tensor by dataId and increase the refCount for the dataId in the\n // backend.\n // TODO(pyu10055): This is currently used by makeVariable method, to increase\n // refCount on the backend for the dataId. It can potentially be replaced with\n // Identity op indead of calling backend directly.\n incRef(a, backend) {\n this.trackTensor(a, backend);\n this.backend.incRef(a.dataId);\n }\n removeDataId(dataId, backend) {\n if (this.state.tensorInfo.has(dataId) &&\n this.state.tensorInfo.get(dataId).backend === backend) {\n this.state.tensorInfo.delete(dataId);\n this.state.numDataBuffers--;\n }\n }\n disposeTensor(a) {\n if (!this.state.tensorInfo.has(a.dataId)) {\n return;\n }\n const info = this.state.tensorInfo.get(a.dataId);\n this.state.numTensors--;\n if (a.dtype === 'string') {\n this.state.numStringTensors--;\n this.state.numBytes -= info.bytes;\n }\n // Don't count bytes for complex numbers as they are counted by their\n // components.\n if (a.dtype !== 'complex64' && a.dtype !== 'string') {\n const bytes = a.size * util.bytesPerElement(a.dtype);\n this.state.numBytes -= bytes;\n }\n // Remove the reference to dataId if backend dispose the data successfully\n if (info.backend.disposeData(a.dataId)) {\n this.removeDataId(a.dataId, info.backend);\n }\n // TODO(nsthorat): Construct an error and save the stack trace for\n // debugging when in debug mode. Creating a stack trace is too expensive\n // to do unconditionally.\n }\n disposeVariables() {\n for (const varName in this.state.registeredVariables) {\n const v = this.state.registeredVariables[varName];\n this.disposeVariable(v);\n }\n }\n disposeVariable(v) {\n this.disposeTensor(v);\n if (this.state.registeredVariables[v.name] != null) {\n delete this.state.registeredVariables[v.name];\n }\n }\n memory() {\n const info = this.backend.memory();\n info.numTensors = this.state.numTensors;\n info.numDataBuffers = this.state.numDataBuffers;\n info.numBytes = this.state.numBytes;\n if (this.state.numStringTensors > 0) {\n info.unreliable = true;\n if (info.reasons == null) {\n info.reasons = [];\n }\n info.reasons.push('Memory usage by string tensors is approximate ' +\n '(2 bytes per character)');\n }\n return info;\n }\n async profile(query) {\n this.state.profiling = true;\n const startBytes = this.state.numBytes;\n const startNumTensors = this.state.numTensors;\n this.state.activeProfile.kernels = [];\n this.state.activeProfile.result = await query();\n this.state.profiling = false;\n this.state.activeProfile.peakBytes = Math.max(...this.state.activeProfile.kernels.map(d => d.totalBytesSnapshot));\n this.state.activeProfile.newBytes = this.state.numBytes - startBytes;\n this.state.activeProfile.newTensors =\n this.state.numTensors - startNumTensors;\n for (const kernel of this.state.activeProfile.kernels) {\n kernel.kernelTimeMs = await kernel.kernelTimeMs;\n kernel.extraInfo = await kernel.extraInfo;\n }\n return this.state.activeProfile;\n }\n isTapeOn() {\n return this.state.gradientDepth > 0 && this.state.kernelDepth === 0;\n }\n addTapeNode(kernelName, inputs, outputs, gradientsFunc, saved, attrs) {\n const tapeNode = { id: this.state.nextTapeNodeId++, kernelName, inputs, outputs, saved };\n const gradConfig = getGradient(kernelName);\n if (gradConfig != null) {\n gradientsFunc = gradConfig.gradFunc;\n }\n if (gradientsFunc != null) {\n tapeNode.gradient = (dys) => {\n // TODO(smilkov): To optimize back-prop, pass dys that are not used in\n // the backprop graph to the user as null instead of zeros\n dys = dys.map((dy, i) => {\n if (dy == null) {\n const output = outputs[i];\n const vals = util.makeZerosTypedArray(output.size, output.dtype);\n return this.makeTensor(vals, output.shape, output.dtype);\n }\n return dy;\n });\n // Grad functions of ops with single outputs expect a dy, while ops\n // with multiple outputs expect dys (array of dy).\n return gradientsFunc(dys.length > 1 ? dys : dys[0], saved, attrs);\n };\n }\n this.state.activeTape.push(tapeNode);\n }\n keep(result) {\n result.kept = true;\n return result;\n }\n startTape() {\n if (this.state.gradientDepth === 0) {\n this.state.activeTape = [];\n }\n this.state.gradientDepth++;\n }\n endTape() {\n this.state.gradientDepth--;\n }\n /**\n * Start a scope. Use this with endScope() to achieve the same functionality\n * as scope() without the need for a function closure.\n */\n startScope(name) {\n const scopeInfo = {\n track: [],\n name: 'unnamed scope',\n id: this.state.nextScopeId++\n };\n if (name) {\n scopeInfo.name = name;\n }\n this.state.scopeStack.push(scopeInfo);\n this.state.activeScope = scopeInfo;\n }\n /**\n * End a scope. Use this with startScope() to achieve the same functionality\n * as scope() without the need for a function closure.\n */\n endScope(result) {\n const tensorsToTrackInParent = getTensorsInContainer(result);\n const tensorsToTrackInParentSet = new Set(tensorsToTrackInParent.map(t => t.id));\n // Dispose the arrays tracked in this scope.\n for (let i = 0; i < this.state.activeScope.track.length; i++) {\n const tensor = this.state.activeScope.track[i];\n if (!tensor.kept && !tensorsToTrackInParentSet.has(tensor.id)) {\n tensor.dispose();\n }\n }\n const oldScope = this.state.scopeStack.pop();\n this.state.activeScope = this.state.scopeStack.length === 0 ?\n null :\n this.state.scopeStack[this.state.scopeStack.length - 1];\n // Track the current result in the parent scope.\n tensorsToTrackInParent.forEach(tensor => {\n // Only track the tensor if was allocated in the inner scope and is not\n // globally kept.\n if (!tensor.kept && tensor.scopeId === oldScope.id) {\n this.track(tensor);\n }\n });\n }\n /**\n * Returns gradients of `f` with respect to each of the `xs`. The gradients\n * returned are of the same length as `xs`, but some might be null if `f`\n * was not a function of that `x`. It also takes optional dy to multiply the\n * gradient, which defaults to `1`.\n */\n gradients(f, xs, dy, allowNoGradients = false) {\n util.assert(xs.length > 0, () => 'gradients() received an empty list of xs.');\n if (dy != null && dy.dtype !== 'float32') {\n throw new Error(`dy must have 'float32' dtype, but has '${dy.dtype}'`);\n }\n const y = this.scopedRun(() => this.startTape(), () => this.endTape(), () => this.tidy('forward', f));\n util.assert(y instanceof Tensor, () => 'The result y returned by f() must be a tensor.');\n // Filter out the nodes that don't connect x => y.\n const filteredTape = getFilteredNodesXToY(this.state.activeTape, xs, y);\n if (!allowNoGradients && filteredTape.length === 0 && xs.length > 0) {\n throw new Error('Cannot compute gradient of y=f(x) with respect to x. Make sure ' +\n 'that the f you passed encloses all operations that lead from x ' +\n 'to y.');\n }\n return this.tidy('backward', () => {\n const accumulatedGradientMap = {};\n accumulatedGradientMap[y.id] = (dy == null) ? ones(y.shape) : dy;\n // Backprop gradients through the filtered nodes.\n backpropagateGradients(accumulatedGradientMap, filteredTape, \n // Pass the tidy function to avoid circular dep with `tape.ts`.\n f => this.tidy(f), \n // Pass an add function to avoide a circular dep with `tape.ts`.\n add);\n const grads = xs.map(x => accumulatedGradientMap[x.id]);\n if (this.state.gradientDepth === 0) {\n // This means that we are not computing higher-order gradients\n // and can clean up the tape.\n this.state.activeTape.forEach(node => {\n for (const tensor of node.saved) {\n tensor.dispose();\n }\n });\n this.state.activeTape = null;\n }\n return { value: y, grads };\n });\n }\n customGrad(f) {\n util.assert(util.isFunction(f), () => 'The f passed in customGrad(f) must be a function.');\n return (...inputs) => {\n util.assert(inputs.every(t => t instanceof Tensor), () => 'The args passed in customGrad(f)(x1, x2,...) must all be ' +\n 'tensors');\n let res;\n const inputMap = {};\n inputs.forEach((input, i) => {\n inputMap[i] = input;\n });\n const forwardFunc = (_, save) => {\n res = f(...[...inputs, save]);\n util.assert(res.value instanceof Tensor, () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.value` is a tensor');\n util.assert(util.isFunction(res.gradFunc), () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function.');\n return res.value;\n };\n const backwardsFunc = (dy, saved) => {\n const gradRes = res.gradFunc(dy, saved);\n const grads = Array.isArray(gradRes) ? gradRes : [gradRes];\n util.assert(grads.length === inputs.length, () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function that returns ' +\n 'the same number of tensors as inputs passed to f(...).');\n util.assert(grads.every(t => t instanceof Tensor), () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function that returns ' +\n 'a list of only tensors.');\n const gradMap = {};\n grads.forEach((grad, i) => {\n gradMap[i] = () => grad;\n });\n return gradMap;\n };\n return this.runKernelFunc({\n forwardFunc,\n backwardsFunc,\n inputs: inputMap,\n });\n };\n }\n readSync(dataId) {\n // Route the read to the correct backend.\n const info = this.state.tensorInfo.get(dataId);\n return info.backend.readSync(dataId);\n }\n read(dataId) {\n // Route the read to the correct backend.\n const info = this.state.tensorInfo.get(dataId);\n return info.backend.read(dataId);\n }\n readToGPU(dataId, options) {\n // Route the read to the correct backend.\n const info = this.state.tensorInfo.get(dataId);\n return info.backend.readToGPU(dataId, options);\n }\n async time(query) {\n const start = now();\n const timingInfo = await this.backend.time(query);\n timingInfo.wallMs = now() - start;\n return timingInfo;\n }\n /**\n * Tracks a Tensor in the current scope to be automatically cleaned up\n * when the current scope ends, and returns the value.\n *\n * @param result The Tensor to track in the current scope.\n */\n track(result) {\n if (this.state.activeScope != null) {\n result.scopeId = this.state.activeScope.id;\n this.state.activeScope.track.push(result);\n }\n return result;\n }\n get registeredVariables() {\n return this.state.registeredVariables;\n }\n /**\n * Resets the engine state. Removes all backends but does not remove\n * registered backend factories.\n */\n reset() {\n // Make any pending promise obsolete.\n this.pendingBackendInitId++;\n this.state.dispose();\n this.ENV.reset();\n this.state = new EngineState();\n for (const backendName in this.registry) {\n this.disposeRegisteredKernels(backendName);\n this.registry[backendName].dispose();\n delete this.registry[backendName];\n }\n this.backendName = null;\n this.backendInstance = null;\n this.pendingBackendInit = null;\n }\n}\nEngine.nextTensorId = 0;\nEngine.nextVariableId = 0;\nexport { Engine };\nfunction ones(shape) {\n const values = makeOnesTypedArray(sizeFromShape(shape), 'float32');\n return ENGINE.makeTensor(values, shape, 'float32');\n}\nexport function getOrMakeEngine() {\n const ns = getGlobalNamespace();\n if (ns._tfengine == null) {\n const environment = new Environment(ns);\n ns._tfengine = new Engine(environment);\n }\n setEnvironmentGlobal(ns._tfengine.ENV);\n // Tell the current tensor interface that the global engine is responsible\n // for tracking.\n setTensorTracker(() => ns._tfengine);\n return ns._tfengine;\n}\nexport const ENGINE = getOrMakeEngine();\n/**\n * A implementation of the add op for use within engine and tape.\n *\n * This allows us to avoid a circular dependency between add.ts and engine.\n * It is exported to be available in tape tests.\n */\nexport function add(a, b) {\n // We duplicate Add here to avoid a circular dependency with add.ts.\n const inputs = { a, b };\n return ENGINE.runKernel(Add, inputs);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUErQixhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUMsV0FBVyxFQUFFLG9CQUFvQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUV6RyxPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQWdCLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQVcsTUFBTSxRQUFRLENBQUM7QUFDOUUsT0FBTyxFQUE0QixnQkFBZ0IsRUFBRSxNQUFNLEVBQWlCLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUd0RyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUMsTUFBTSxRQUFRLENBQUM7QUF1RXBGLFNBQVMsNEJBQTRCLENBRWpDLGdCQUNnQztJQUVsQyxPQUFRLGdCQUFrRCxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUM7QUFDaEYsQ0FBQztBQUVELE1BQU0sV0FBVztJQUFqQjtRQUNFLHVDQUF1QztRQUN2Qyx3QkFBbUIs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SztTQXRVdkIsTUFBTTtBQTRsQ25CLFNBQVMsSUFBSSxDQUFDLEtBQWU7SUFDM0IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZTtJQUM3QixNQUFNLEVBQUUsR0FBRyxrQkFBa0IsRUFBb0MsQ0FBQztJQUNsRSxJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDeEM7SUFDRCxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXZDLDBFQUEwRTtJQUMxRSxnQkFBZ0I7SUFDaEIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO0FBRXhDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUN0QyxvRUFBb0U7SUFDcEUsTUFBTSxNQUFNLEdBQUcsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7SUFDdEIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtCYWNrZW5kVGltaW5nSW5mbywgRGF0YU1vdmVyLCBLZXJuZWxCYWNrZW5kfSBmcm9tICcuL2JhY2tlbmRzL2JhY2tlbmQnO1xuaW1wb3J0IHtFbnZpcm9ubWVudCwgc2V0RW52aXJvbm1lbnRHbG9iYWx9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtnZXRHbG9iYWxOYW1lc3BhY2V9IGZyb20gJy4vZ2xvYmFsX3V0aWwnO1xuaW1wb3J0IHtBZGQsIENhc3QsIElkZW50aXR5fSBmcm9tICcuL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQgeyBnZXRHcmFkaWVudCwgZ2V0S2VybmVsLCBnZXRLZXJuZWxzRm9yQmFja2VuZCwgR3JhZEZ1bmMsIE5hbWVkQXR0ck1hcCB9IGZyb20gJy4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7IFRlbnNvckluZm8gfSBmcm9tICcuL3RlbnNvcl9pbmZvJztcbmltcG9ydCAqIGFzIGxvZyBmcm9tICcuL2xvZyc7XG5pbXBvcnQge0tlcm5lbFByb2ZpbGUsIFByb2ZpbGVyfSBmcm9tICcuL3Byb2ZpbGVyJztcbmltcG9ydCB7YmFja3Byb3BhZ2F0ZUdyYWRpZW50cywgZ2V0RmlsdGVyZWROb2Rlc1hUb1ksIFRhcGVOb2RlfSBmcm9tICcuL3RhcGUnO1xuaW1wb3J0IHtEYXRhVG9HUFVPcHRpb25zLCBHUFVEYXRhLCBzZXRUZW5zb3JUcmFja2VyLCBUZW5zb3IsIFRlbnNvclRyYWNrZXIsIFZhcmlhYmxlfSBmcm9tICcuL3RlbnNvcic7XG5pbXBvcnQge0RhdGFJZH0gZnJvbSAnLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge0dyYWRTYXZlRnVuYywgTmFtZWRUZW5zb3JNYXAsIE5hbWVkVmFyaWFibGVNYXAsIFRlbnNvckNvbnRhaW5lcn0gZnJvbSAnLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtnZXRUZW5zb3JzSW5Db250YWluZXJ9IGZyb20gJy4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtCYWNrZW5kVmFsdWVzLCBEYXRhVHlwZSwgRGF0YVZhbHVlc30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2J5dGVzRnJvbVN0cmluZ0FycmF5LCBtYWtlT25lc1R5cGVkQXJyYXksIG5vdywgc2l6ZUZyb21TaGFwZX0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgYW4gb3V0cHV0LiBUaGUgc2F2ZSBmdW5jdGlvbiBpcyBmb3Igc2F2aW5nIHRlbnNvcnNcbiAqIGNvbXB1dGVkIGluIHRoZSBmb3J3YXJkIHBhc3MsIHRoYXQgd2UgbmVlZCBpbiB0aGUgYmFja3dhcmQgcGFzcy5cbiAqL1xuZXhwb3J0IHR5cGUgRm9yd2FyZEZ1bmM8VD4gPSAoYmFja2VuZDogS2VybmVsQmFja2VuZCwgc2F2ZT86IEdyYWRTYXZlRnVuYykgPT4gVDtcblxuLyoqXG4gKiBAZG9jYWxpYXMgKGE6IFRlbnNvciwgYjogVGVuc29yLC4uLiwgc2F2ZT86IEZ1bmN0aW9uKSA9PiB7XG4gKiAgIHZhbHVlOiBUZW5zb3IsXG4gKiAgIGdyYWRGdW5jOiAoZHk6IFRlbnNvciwgc2F2ZWQ/OiBOYW1lZFRlbnNvck1hcCkgPT4gVGVuc29yIHwgVGVuc29yW11cbiAqIH1cbiAqL1xuZXhwb3J0IHR5cGUgQ3VzdG9tR3JhZGllbnRGdW5jPFQgZXh0ZW5kcyBUZW5zb3I+ID1cbiAgICAoLi4uaW5wdXRzOiBBcnJheTxUZW5zb3J8R3JhZFNhdmVGdW5jPikgPT4ge1xuICAgICAgdmFsdWU6IFQ7XG4gICAgICBncmFkRnVuYzogKGR5OiBULCBzYXZlZDogVGVuc29yW10pID0+IFRlbnNvciB8IFRlbnNvcltdO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIE1lbW9yeUluZm8gPSB7XG4gIG51bVRlbnNvcnM6IG51bWJlcjsgbnVtRGF0YUJ1ZmZlcnM6IG51bWJlcjsgbnVtQnl0ZXM6IG51bWJlcjtcbiAgdW5yZWxpYWJsZT86IGJvb2xlYW47IHJlYXNvbnM6IHN0cmluZ1tdO1xufTtcblxudHlwZSBLZXJuZWxJbmZvID0ge1xuICBuYW1lOiBzdHJpbmc7IGJ5dGVzQWRkZWQ6IG51bWJlcjsgdG90YWxCeXRlc1NuYXBzaG90OiBudW1iZXI7XG4gIHRlbnNvcnNBZGRlZDogbnVtYmVyO1xuICB0b3RhbFRlbnNvcnNTbmFwc2hvdDogbnVtYmVyO1xuICBpbnB1dFNoYXBlczogbnVtYmVyW11bXTtcbiAgb3V0cHV0U2hhcGVzOiBudW1iZXJbXVtdO1xuICBrZXJuZWxUaW1lTXM6IG51bWJlciB8IHtlcnJvcjogc3RyaW5nfSB8IFByb21pc2U8bnVtYmVyfHtlcnJvcjogc3RyaW5nfT47XG4gIGV4dHJhSW5mbzogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZmlsZUluZm8gPSB7XG4gIG5ld0J5dGVzOiBudW1iZXI7IG5ld1RlbnNvcnM6IG51bWJlcjsgcGVha0J5dGVzOiBudW1iZXI7XG4gIGtlcm5lbHM6IEtlcm5lbEluZm9bXTtcbiAgcmVzdWx0OiBUZW5zb3JDb250YWluZXI7XG4gIGtlcm5lbE5hbWVzOiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltaW5nSW5mbyBleHRlbmRzIEJhY2tlbmRUaW1pbmdJbmZvIHtcbiAgd2FsbE1zOiBudW1iZXI7XG59XG5cbi8qKiBAZG9jYWxpYXMgRnVuY3Rpb24gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRm48VCBleHRlbmRzIFRlbnNvckNvbnRhaW5lcj4gPSAoKSA9PiBUO1xuXG5pbnRlcmZhY2UgU2NvcGVTdGF0ZSB7XG4gIHRyYWNrOiBUZW5zb3JbXTtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVnaXN0ZXJlZEtlcm5lbEludm9jYXRpb248SSBleHRlbmRzIE5hbWVkVGVuc29yTWFwPiB7XG4gIGtlcm5lbE5hbWU6IHN0cmluZztcbiAgaW5wdXRzOiBJO1xuICBhdHRycz86IE5hbWVkQXR0ck1hcDtcbn1cblxuaW50ZXJmYWNlIEN1c3RvbUdyYWRLZXJuZWxJbnZvY2F0aW9uPFQgZXh0ZW5kcyBUZW5zb3J8VGVuc29yW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgZXh0ZW5kcyBOYW1lZFRlbnNvck1hcD4ge1xuICBmb3J3YXJkRnVuYzogRm9yd2FyZEZ1bmM8VD47XG4gIGJhY2t3YXJkc0Z1bmM6IChkeTogVCwgc2F2ZWQ6IFRlbnNvcltdKSA9PiB7XG4gICAgW1AgaW4ga2V5b2YgSV06ICgpID0+IElbUF1cbiAgfTtcbiAgaW5wdXRzOiBJO1xuICBhdHRycz86IE5hbWVkQXR0ck1hcDtcbn1cblxuZnVuY3Rpb24gaXNSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbjxUIGV4dGVuZHMgVGVuc29yfFRlbnNvcltdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSSBleHRlbmRzIE5hbWVkVGVuc29yTWFwPihcbiAgICBrZXJuZWxJbnZvY2F0aW9uOiBSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbjxJPnxcbiAgICBDdXN0b21HcmFkS2VybmVsSW52b2NhdGlvbjxULCBJPik6XG4gICAga2VybmVsSW52b2NhdGlvbiBpcyBSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbjxJPiB7XG4gIHJldHVybiAoa2VybmVsSW52b2NhdGlvbiBhcyBSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbjxJPikua2VybmVsTmFtZSAhPSBudWxsO1xufVxuXG5jbGFzcyBFbmdpbmVTdGF0ZSB7XG4gIC8vIFB1YmxpYyBzaW5jZSBvcHRpbWl6ZXJzIHdpbGwgdXNlIGl0LlxuICByZWdpc3RlcmVkVmFyaWFibGVzOiBOYW1lZFZhcmlhYmxlTWFwID0ge307XG5cbiAgbmV4dFRhcGVOb2RlSWQgPSAwO1xuICBudW1CeXRlcyA9IDA7XG4gIG51bVRlbnNvcnMgPSAwO1xuICBudW1TdHJpbmdUZW5zb3JzID0gMDtcbiAgbnVtRGF0YUJ1ZmZlcnMgPSAwO1xuXG4gIGFjdGl2ZVRhcGU6IFRhcGVOb2RlW107XG4gIC8vIE51bWJlciBvZiBuZXN0ZWQgdGYuZ3JhZCgpIHN0YXRlbWVudHMgd2hlbiBjb21wdXRpbmcgaGlnaGVyLW9yZGVyXG4gIC8vIGdyYWRpZW50cy4gRS5nLiBgMWAgZm9yIGZpcnN0LW9yZGVyIGdyYWRpZW50cyBhbmQgYDJgIGZvciBzZWNvbmQtb3JkZXJcbiAgLy8gZ3JhZGllbnRzLiBVc2VkIHRvIHRyYWNrIGlmIHRoZSB0YXBlIHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIGEgYmFja3Byb3AuXG4gIGdyYWRpZW50RGVwdGggPSAwO1xuICAvLyBOdW1iZXIgb2YgbmVzdGVkIGtlcm5lbCBjYWxscy4gV2hlbiBrZXJuZWwgZGVwdGggaXMgZ3JlYXRlciB0aGFuIDEsIHdlIHR1cm5cbiAgLy8gb2ZmIHRoZSB0YXBlLlxuICBrZXJuZWxEZXB0aCA9IDA7XG5cbiAgLy8gS2VlcCBUZW5zb3JzIHRoYXQgcGFyYWxsZWwgdGhlIHRhcGVzLlxuICBhY3RpdmVTY29wZTogU2NvcGVTdGF0ZTtcbiAgc2NvcGVTdGFjazogU2NvcGVTdGF0ZVtdID0gW107XG4gIC8qKlxuICAgKiBLZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGRhdGEgbW92ZXMgZHVyaW5nIGEga2VybmVsIGV4ZWN1dGlvbi4gV2VcbiAgICogbWFpbnRhaW4gYSBzdGFjayBzaW5jZSBrZXJuZWxzIGNhbiBjYWxsIG90aGVyIGtlcm5lbHMsIHJlY3Vyc2l2ZWx5LlxuICAgKi9cbiAgbnVtRGF0YU1vdmVzU3RhY2s6IG51bWJlcltdID0gW107XG4gIG5leHRTY29wZUlkID0gMDtcblxuICB0ZW5zb3JJbmZvID0gbmV3IFdlYWtNYXA8RGF0YUlkLCB7XG4gICAgYmFja2VuZDogS2VybmVsQmFja2VuZCxcbiAgICBieXRlczogbnVtYmVyLFxuICAgIGR0eXBlOiBEYXRhVHlwZSxcbiAgICBzaGFwZTogbnVtYmVyW11cbiAgfT4oKTtcblxuICBwcm9maWxpbmcgPSBmYWxzZTtcbiAgYWN0aXZlUHJvZmlsZTogUHJvZmlsZUluZm8gPSB7XG4gICAgbmV3Qnl0ZXM6IDAsXG4gICAgbmV3VGVuc29yczogMCxcbiAgICBwZWFrQnl0ZXM6IDAsXG4gICAga2VybmVsczogW10sXG4gICAgcmVzdWx0OiBudWxsLFxuICAgIGdldCBrZXJuZWxOYW1lcygpOlxuICAgICAgICBzdHJpbmdbXSB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh0aGlzLmtlcm5lbHMubWFwKGsgPT4gay5uYW1lKSkpO1xuICAgICAgICB9XG4gIH07XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlTmFtZSBpbiB0aGlzLnJlZ2lzdGVyZWRWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJlZFZhcmlhYmxlc1t2YXJpYWJsZU5hbWVdLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVuZ2luZSBpbXBsZW1lbnRzIFRlbnNvclRyYWNrZXIsIERhdGFNb3ZlciB7XG4gIHN0YXRlOiBFbmdpbmVTdGF0ZTtcbiAgYmFja2VuZE5hbWU6IHN0cmluZztcbiAgcmVnaXN0cnk6IHtbaWQ6IHN0cmluZ106IEtlcm5lbEJhY2tlbmR9ID0ge307XG4gIHJlZ2lzdHJ5RmFjdG9yeToge1xuICAgIFtpZDogc3RyaW5nXToge1xuICAgICAgZmFjdG9yeTogKCkgPT4gS2VybmVsQmFja2VuZCB8IFByb21pc2U8S2VybmVsQmFja2VuZD4sXG4gICAgICBwcmlvcml0eTogbnVtYmVyXG4gICAgfVxuICB9ID0ge307XG5cbiAgcHJpdmF0ZSBwcm9maWxlcjogUHJvZmlsZXI7XG4gIHByaXZhdGUgYmFja2VuZEluc3RhbmNlOiBLZXJuZWxCYWNrZW5kO1xuICBwcml2YXRlIHBlbmRpbmdCYWNrZW5kSW5pdDogUHJvbWlzZTxib29sZWFuPjtcbiAgcHJpdmF0ZSBwZW5kaW5nQmFja2VuZEluaXRJZCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHVibGljIEVOVjogRW52aXJvbm1lbnQpIHtcbiAgICB0aGlzLnN0YXRlID0gbmV3IEVuZ2luZVN0YXRlKCk7XG4gIH1cblxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQmFja2VuZEluaXQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0JhY2tlbmRJbml0LnRoZW4oKCkgPT4ge30pO1xuICAgIH1cbiAgICBpZiAodGhpcy5iYWNrZW5kSW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzb3J0ZWRCYWNrZW5kcyA9IHRoaXMuZ2V0U29ydGVkQmFja2VuZHMoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkQmFja2VuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGJhY2tlbmROYW1lID0gc29ydGVkQmFja2VuZHNbaV07XG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5pbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZSkuc3VjY2VzcztcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QmFja2VuZChiYWNrZW5kTmFtZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgaW5pdGlhbGl6ZSBhbnkgYmFja2VuZHMsIGFsbCBiYWNrZW5kIGluaXRpYWxpemF0aW9ucyBgICtcbiAgICAgICAgYGZhaWxlZC5gKTtcbiAgfVxuXG4gIGdldCBiYWNrZW5kKCk6IEtlcm5lbEJhY2tlbmQge1xuICAgIGlmICh0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEJhY2tlbmQgJyR7dGhpcy5iYWNrZW5kTmFtZX0nIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuIE1ha2UgYCArXG4gICAgICAgICAgYHN1cmUgdG8gYXdhaXQgdGYucmVhZHkoKSBvciBhd2FpdCB0Zi5zZXRCYWNrZW5kKCkgYmVmb3JlIGNhbGxpbmcgYCArXG4gICAgICAgICAgYG90aGVyIG1ldGhvZHNgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmFja2VuZEluc3RhbmNlID09IG51bGwpIHtcbiAgICAgIGNvbnN0IHtuYW1lLCBhc3luY0luaXR9ID0gdGhpcy5pbml0aWFsaXplQmFja2VuZHNBbmRSZXR1cm5CZXN0KCk7XG4gICAgICBpZiAoYXN5bmNJbml0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgaGlnaGVzdCBwcmlvcml0eSBiYWNrZW5kICcke25hbWV9JyBoYXMgbm90IHlldCBiZWVuIGAgK1xuICAgICAgICAgICAgYGluaXRpYWxpemVkLiBNYWtlIHN1cmUgdG8gYXdhaXQgdGYucmVhZHkoKSBvciBgICtcbiAgICAgICAgICAgIGBhd2FpdCB0Zi5zZXRCYWNrZW5kKCkgYmVmb3JlIGNhbGxpbmcgb3RoZXIgbWV0aG9kc2ApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRCYWNrZW5kKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kSW5zdGFuY2U7XG4gIH1cblxuICBiYWNrZW5kTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnJlZ2lzdHJ5RmFjdG9yeSk7XG4gIH1cblxuICBmaW5kQmFja2VuZChiYWNrZW5kTmFtZTogc3RyaW5nKTogS2VybmVsQmFja2VuZCB7XG4gICAgaWYgKCEoYmFja2VuZE5hbWUgaW4gdGhpcy5yZWdpc3RyeSkpIHtcbiAgICAgIC8vIElmIHRoZSBiYWNrZW5kIGhhc24ndCBiZWVuIGluaXRpYWxpemVkIGJ1dCB3ZSBoYXZlIGEgcmVnaXN0cnkgZW50cnkgZm9yXG4gICAgICAvLyBpdCwgaW5pdGlhbGl6ZSBpdCBhbmQgcmV0dXJuIGl0LlxuICAgICAgaWYgKGJhY2tlbmROYW1lIGluIHRoaXMucmVnaXN0cnlGYWN0b3J5KSB7XG4gICAgICAgIGNvbnN0IHthc3luY0luaXR9ID0gdGhpcy5pbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZSk7XG4gICAgICAgIGlmIChhc3luY0luaXQpIHtcbiAgICAgICAgICAvLyBCYWNrZW5kIGlzIG5vdCByZWFkeSB5ZXQuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV07XG4gIH1cblxuICBmaW5kQmFja2VuZEZhY3RvcnkoYmFja2VuZE5hbWU6IHN0cmluZyk6XG4gICAgICAoKSA9PiBLZXJuZWxCYWNrZW5kIHwgUHJvbWlzZTxLZXJuZWxCYWNrZW5kPiB7XG4gICAgaWYgKCEoYmFja2VuZE5hbWUgaW4gdGhpcy5yZWdpc3RyeUZhY3RvcnkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cnlGYWN0b3J5W2JhY2tlbmROYW1lXS5mYWN0b3J5O1xuICB9XG5cbiAgcmVnaXN0ZXJCYWNrZW5kKFxuICAgICAgYmFja2VuZE5hbWU6IHN0cmluZyxcbiAgICAgIGZhY3Rvcnk6ICgpID0+IEtlcm5lbEJhY2tlbmQgfCBQcm9taXNlPEtlcm5lbEJhY2tlbmQ+LFxuICAgICAgcHJpb3JpdHkgPSAxKTogYm9vbGVhbiB7XG4gICAgaWYgKGJhY2tlbmROYW1lIGluIHRoaXMucmVnaXN0cnlGYWN0b3J5KSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgICBgJHtiYWNrZW5kTmFtZX0gYmFja2VuZCB3YXMgYWxyZWFkeSByZWdpc3RlcmVkLiBgICtcbiAgICAgICAgICBgUmV1c2luZyBleGlzdGluZyBiYWNrZW5kIGZhY3RvcnkuYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0cnlGYWN0b3J5W2JhY2tlbmROYW1lXSA9IHtmYWN0b3J5LCBwcmlvcml0eX07XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzZXRCYWNrZW5kKGJhY2tlbmROYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5yZWdpc3RyeUZhY3RvcnlbYmFja2VuZE5hbWVdID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmFja2VuZCBuYW1lICcke2JhY2tlbmROYW1lfScgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7XG4gICAgfVxuICAgIHRoaXMuYmFja2VuZE5hbWUgPSBiYWNrZW5kTmFtZTtcbiAgICBpZiAodGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV0gPT0gbnVsbCkge1xuICAgICAgdGhpcy5iYWNrZW5kSW5zdGFuY2UgPSBudWxsO1xuICAgICAgY29uc3Qge3N1Y2Nlc3MsIGFzeW5jSW5pdH0gPSB0aGlzLmluaXRpYWxpemVCYWNrZW5kKGJhY2tlbmROYW1lKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFzeW5jSW5pdCA/IGF3YWl0IHN1Y2Nlc3MgOiBzdWNjZXNzO1xuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJhY2tlbmRJbnN0YW5jZSA9IHRoaXMucmVnaXN0cnlbYmFja2VuZE5hbWVdO1xuICAgIHRoaXMuc2V0dXBSZWdpc3RlcmVkS2VybmVscygpO1xuICAgIC8vIFJlc2V0IHRoZSBwcm9maWxlci5cbiAgICB0aGlzLnByb2ZpbGVyID0gbmV3IFByb2ZpbGVyKHRoaXMuYmFja2VuZEluc3RhbmNlKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJlZ2lzdGVyZWRLZXJuZWxzKCk6IHZvaWQge1xuICAgIGNvbnN0IGtlcm5lbHMgPSBnZXRLZXJuZWxzRm9yQmFja2VuZCh0aGlzLmJhY2tlbmROYW1lKTtcbiAgICBrZXJuZWxzLmZvckVhY2goa2VybmVsID0+IHtcbiAgICAgIGlmIChrZXJuZWwuc2V0dXBGdW5jICE9IG51bGwpIHtcbiAgICAgICAga2VybmVsLnNldHVwRnVuYyh0aGlzLmJhY2tlbmRJbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VSZWdpc3RlcmVkS2VybmVscyhiYWNrZW5kTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2VybmVscyA9IGdldEtlcm5lbHNGb3JCYWNrZW5kKGJhY2tlbmROYW1lKTtcbiAgICBrZXJuZWxzLmZvckVhY2goa2VybmVsID0+IHtcbiAgICAgIGlmIChrZXJuZWwuZGlzcG9zZUZ1bmMgIT0gbnVsbCkge1xuICAgICAgICBrZXJuZWwuZGlzcG9zZUZ1bmModGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgYmFja2VuZCBieSBsb29raW5nIHVwIHRoZSBiYWNrZW5kIG5hbWUgaW4gdGhlIGZhY3RvcnlcbiAgICogcmVnaXN0cnkgYW5kIGNhbGxpbmcgdGhlIGZhY3RvcnkgbWV0aG9kLiBSZXR1cm5zIGEgYm9vbGVhbiByZXByZXNlbnRpbmdcbiAgICogd2hldGhlciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGJhY2tlbmQgc3VjZWVkZWQuIFRocm93cyBhbiBlcnJvciBpZlxuICAgKiB0aGVyZSBpcyBubyBiYWNrZW5kIGluIHRoZSBmYWN0b3J5IHJlZ2lzdHJ5LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZTogc3RyaW5nKTpcbiAgICAgIHtzdWNjZXNzOiBib29sZWFufFByb21pc2U8Ym9vbGVhbj4sIGFzeW5jSW5pdDogYm9vbGVhbn0ge1xuICAgIGNvbnN0IHJlZ2lzdHJ5RmFjdG9yeUVudHJ5ID0gdGhpcy5yZWdpc3RyeUZhY3RvcnlbYmFja2VuZE5hbWVdO1xuICAgIGlmIChyZWdpc3RyeUZhY3RvcnlFbnRyeSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBpbml0aWFsaXplIGJhY2tlbmQgJHtiYWNrZW5kTmFtZX0sIG5vIHJlZ2lzdHJhdGlvbiBmb3VuZC5gKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFja2VuZCA9IHJlZ2lzdHJ5RmFjdG9yeUVudHJ5LmZhY3RvcnkoKTtcbiAgICAgIC8qIFRlc3QgaWYgdGhlIGZhY3RvcnkgcmV0dXJucyBhIHByb21pc2UuXG4gICAgICBEb25lIGluIGEgbW9yZSBsaWJlcmFsIHdheSB0aGFuXG4gICAgICBwcmV2aW91cyAnUHJvbWlzZS5yZXNvbHZlKGJhY2tlbmQpPT09YmFja2VuZCdcbiAgICAgIGFzIHdlIG5lZWRlZCB0byBhY2NvdW50IGZvciBjdXN0b20gUHJvbWlzZVxuICAgICAgaW1wbGVtZW50YXRpb25zIChlLmcuIEFuZ3VsYXIpICovXG4gICAgICBpZiAoYmFja2VuZCAmJiAhKGJhY2tlbmQgaW5zdGFuY2VvZiBLZXJuZWxCYWNrZW5kKSAmJlxuICAgICAgICAgIHR5cGVvZiBiYWNrZW5kLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZUlkID0gKyt0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdElkO1xuICAgICAgICBjb25zdCBzdWNjZXNzID1cbiAgICAgICAgICAgIGJhY2tlbmRcbiAgICAgICAgICAgICAgICAudGhlbihiYWNrZW5kSW5zdGFuY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gT3V0ZGF0ZWQgcHJvbWlzZS4gQW5vdGhlciBiYWNrZW5kIHdhcyBzZXQgaW4gdGhlIG1lYW50aW1lLlxuICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2VJZCA8IHRoaXMucGVuZGluZ0JhY2tlbmRJbml0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV0gPSBiYWNrZW5kSW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gT3V0ZGF0ZWQgcHJvbWlzZS4gQW5vdGhlciBiYWNrZW5kIHdhcyBzZXQgaW4gdGhlIG1lYW50aW1lLlxuICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2VJZCA8IHRoaXMucGVuZGluZ0JhY2tlbmRJbml0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQmFja2VuZEluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oYEluaXRpYWxpemF0aW9uIG9mIGJhY2tlbmQgJHtiYWNrZW5kTmFtZX0gZmFpbGVkYCk7XG4gICAgICAgICAgICAgICAgICBsb2cud2FybihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCA9IHN1Y2Nlc3M7XG4gICAgICAgIHJldHVybiB7c3VjY2VzcywgYXN5bmNJbml0OiB0cnVlfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVnaXN0cnlbYmFja2VuZE5hbWVdID0gYmFja2VuZCBhcyBLZXJuZWxCYWNrZW5kO1xuICAgICAgICByZXR1cm4ge3N1Y2Nlc3M6IHRydWUsIGFzeW5jSW5pdDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYEluaXRpYWxpemF0aW9uIG9mIGJhY2tlbmQgJHtiYWNrZW5kTmFtZX0gZmFpbGVkYCk7XG4gICAgICBsb2cud2FybihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHtzdWNjZXNzOiBmYWxzZSwgYXN5bmNJbml0OiBmYWxzZX07XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQmFja2VuZChiYWNrZW5kTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCEoYmFja2VuZE5hbWUgaW4gdGhpcy5yZWdpc3RyeUZhY3RvcnkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YmFja2VuZE5hbWV9IGJhY2tlbmQgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJhY2tlbmROYW1lID09PSBiYWNrZW5kTmFtZSAmJiB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCAhPSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBpcyBhIHBlbmRpbmcgcHJvbWlzZSBvZiB0aGUgYmFja2VuZCB3ZSB3YW50IHRvIHJlbW92ZS4gTWFrZSBpdFxuICAgICAgLy8gb2Jzb2xldGUuXG4gICAgICB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdElkKys7XG4gICAgfVxuXG4gICAgaWYgKGJhY2tlbmROYW1lIGluIHRoaXMucmVnaXN0cnkpIHtcbiAgICAgIHRoaXMuZGlzcG9zZVJlZ2lzdGVyZWRLZXJuZWxzKGJhY2tlbmROYW1lKTtcbiAgICAgIHRoaXMucmVnaXN0cnlbYmFja2VuZE5hbWVdLmRpc3Bvc2UoKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnJlZ2lzdHJ5W2JhY2tlbmROYW1lXTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5yZWdpc3RyeUZhY3RvcnlbYmFja2VuZE5hbWVdO1xuXG4gICAgLy8gVW5zZXQgdGhlIGJhY2tlbmQgaWYgaXQgaXMgYWN0aXZlLlxuICAgIGlmICh0aGlzLmJhY2tlbmROYW1lID09PSBiYWNrZW5kTmFtZSkge1xuICAgICAgdGhpcy5wZW5kaW5nQmFja2VuZEluaXQgPSBudWxsO1xuICAgICAgdGhpcy5iYWNrZW5kTmFtZSA9IG51bGw7XG4gICAgICB0aGlzLmJhY2tlbmRJbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTb3J0ZWRCYWNrZW5kcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMucmVnaXN0cnlGYWN0b3J5KS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYmFja2VuZCBmb3VuZCBpbiByZWdpc3RyeS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0cnlGYWN0b3J5KS5zb3J0KChhOiBzdHJpbmcsIGI6IHN0cmluZykgPT4ge1xuICAgICAgLy8gSGlnaGVzdCBwcmlvcml0eSBjb21lcyBmaXJzdC5cbiAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5RmFjdG9yeVtiXS5wcmlvcml0eSAtXG4gICAgICAgICAgdGhpcy5yZWdpc3RyeUZhY3RvcnlbYV0ucHJpb3JpdHk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVCYWNrZW5kc0FuZFJldHVybkJlc3QoKTpcbiAgICAgIHtuYW1lOiBzdHJpbmcsIGFzeW5jSW5pdDogYm9vbGVhbn0ge1xuICAgIGNvbnN0IHNvcnRlZEJhY2tlbmRzID0gdGhpcy5nZXRTb3J0ZWRCYWNrZW5kcygpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRCYWNrZW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYmFja2VuZE5hbWUgPSBzb3J0ZWRCYWNrZW5kc1tpXTtcbiAgICAgIGNvbnN0IHtzdWNjZXNzLCBhc3luY0luaXR9ID0gdGhpcy5pbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZSk7XG4gICAgICBpZiAoYXN5bmNJbml0IHx8IHN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtuYW1lOiBiYWNrZW5kTmFtZSwgYXN5bmNJbml0fTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGluaXRpYWxpemUgYW55IGJhY2tlbmRzLCBhbGwgYmFja2VuZCBpbml0aWFsaXphdGlvbnMgYCArXG4gICAgICAgIGBmYWlsZWQuYCk7XG4gIH1cblxuICBtb3ZlRGF0YShiYWNrZW5kOiBLZXJuZWxCYWNrZW5kLCBkYXRhSWQ6IERhdGFJZCkge1xuICAgIGNvbnN0IGluZm8gPSB0aGlzLnN0YXRlLnRlbnNvckluZm8uZ2V0KGRhdGFJZCk7XG4gICAgY29uc3Qgc3JjQmFja2VuZCA9IGluZm8uYmFja2VuZDtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnJlYWRTeW5jKGRhdGFJZCk7XG4gICAgY29uc3QgcmVmQ291bnQgPSBzcmNCYWNrZW5kLnJlZkNvdW50KGRhdGFJZCk7XG4gICAgLy8gRGVsZXRlIHRoZSB0ZW5zb3IgZnJvbSB0aGUgb2xkIGJhY2tlbmQgYW5kIG1vdmUgaXQgdG8gdGhlIG5ld1xuICAgIC8vIGJhY2tlbmQuXG4gICAgc3JjQmFja2VuZC5kaXNwb3NlRGF0YShkYXRhSWQsIHRydWUpO1xuICAgIGluZm8uYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgYmFja2VuZC5tb3ZlKGRhdGFJZCwgdmFsdWVzLCBpbmZvLnNoYXBlLCBpbmZvLmR0eXBlLCByZWZDb3VudCk7XG4gICAgaWYgKHRoaXMuc2hvdWxkQ2hlY2tGb3JNZW1MZWFrcygpKSB7XG4gICAgICAvLyBUcmFjayB0aGUgbnVtYmVyIG9mIG1vdmVzIGR1cmluZyBhIGtlcm5lbCBleGVjdXRpb24gdG8gY29ycmVjdGx5XG4gICAgICAvLyBkZXRlY3QgbWVtb3J5IGxlYWtzLlxuICAgICAgdGhpcy5zdGF0ZS5udW1EYXRhTW92ZXNTdGFja1t0aGlzLnN0YXRlLm51bURhdGFNb3Zlc1N0YWNrLmxlbmd0aCAtIDFdKys7XG4gICAgfVxuICB9XG5cbiAgdGlkeTxUIGV4dGVuZHMgVGVuc29yQ29udGFpbmVyPihuYW1lT3JGbjogc3RyaW5nfFNjb3BlRm48VD4sIGZuPzogU2NvcGVGbjxUPik6XG4gICAgICBUIHtcbiAgICBsZXQgbmFtZTogc3RyaW5nID0gbnVsbDtcbiAgICBpZiAoZm4gPT0gbnVsbCkge1xuICAgICAgLy8gQ2FsbGVkIHdpdGggb25seSAxIGFyZ3VtZW50LlxuICAgICAgaWYgKHR5cGVvZiBuYW1lT3JGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGEgZnVuY3Rpb24gdG8gdGlkeSgpJyk7XG4gICAgICB9XG4gICAgICBmbiA9IG5hbWVPckZuO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYWxsZWQgd2l0aCAyIGFyZ3VtZW50cy5cbiAgICAgIGlmICh0eXBlb2YgbmFtZU9yRm4gIT09ICdzdHJpbmcnICYmICEobmFtZU9yRm4gaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdXaGVuIGNhbGxpbmcgd2l0aCB0d28gYXJndW1lbnRzLCB0aGUgZmlyc3QgYXJndW1lbnQgJyArXG4gICAgICAgICAgICAndG8gdGlkeSgpIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1doZW4gY2FsbGluZyB3aXRoIHR3byBhcmd1bWVudHMsIHRoZSAybmQgYXJndW1lbnQgJyArXG4gICAgICAgICAgICAndG8gdGlkeSgpIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgfVxuICAgICAgbmFtZSA9IG5hbWVPckZuIGFzIHN0cmluZztcbiAgICAgIC8vIFRPRE8obnN0aG9yYXQsc21pbGtvdik6IERvIG9wZXJhdGlvbiBsb2dnaW5nIGFuZCBwZXJmb3JtYW5jZVxuICAgICAgLy8gcHJvZmlsaW5nLlxuICAgIH1cbiAgICBsZXQgcmVzdWx0OiBUO1xuICAgIHJldHVybiB0aGlzLnNjb3BlZFJ1bihcbiAgICAgICAgKCkgPT4gdGhpcy5zdGFydFNjb3BlKG5hbWUpLCAoKSA9PiB0aGlzLmVuZFNjb3BlKHJlc3VsdCksICgpID0+IHtcbiAgICAgICAgICByZXN1bHQgPSBmbigpO1xuICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcmV0dXJuIGEgUHJvbWlzZSBpbnNpZGUgb2YgdGlkeS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjb3BlZFJ1bjxUPihzdGFydDogKCkgPT4gdm9pZCwgZW5kOiAoKSA9PiB2b2lkLCBmOiAoKSA9PiBUKTogVCB7XG4gICAgc3RhcnQoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gZigpO1xuICAgICAgZW5kKCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBlbmQoKTtcbiAgICAgIHRocm93IGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG5leHRUZW5zb3JJZCA9IDA7XG4gIHByaXZhdGUgbmV4dFRlbnNvcklkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEVuZ2luZS5uZXh0VGVuc29ySWQrKztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG5leHRWYXJpYWJsZUlkID0gMDtcbiAgcHJpdmF0ZSBuZXh0VmFyaWFibGVJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiBFbmdpbmUubmV4dFZhcmlhYmxlSWQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgcHVibGljLWZhY2luZyB0ZW5zb3IuY2xvbmUoKSB3aGVuXG4gICAqIHNhdmluZyBhIHRlbnNvciBmb3IgYmFja3dhcmRzIHBhc3MuIEl0IG1ha2VzIHN1cmUgdG8gYWRkIHRoZSBjbG9uZVxuICAgKiBvcGVyYXRpb24gdG8gdGhlIHRhcGUgcmVnYXJkbGVzcyBvZiBiZWluZyBjYWxsZWQgaW5zaWRlIGEga2VybmVsXG4gICAqIGV4ZWN1dGlvbi5cbiAgICovXG4gIHByaXZhdGUgY2xvbmUoeDogVGVuc29yKTogVGVuc29yIHtcbiAgICBjb25zdCB5OiBUZW5zb3IgPSBFTkdJTkUucnVuS2VybmVsKElkZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3h9IGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xuICAgIGNvbnN0IGlucHV0cyA9IHt4fTtcbiAgICBjb25zdCBncmFkID0gKGR5OiBUZW5zb3IpID0+ICh7XG4gICAgICB4OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0eXBlID0gJ2Zsb2F0MzInO1xuICAgICAgICBjb25zdCBncmFkSW5wdXRzID0ge3g6IGR5fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSB7ZHR5cGV9O1xuXG4gICAgICAgIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgIENhc3QsIGdyYWRJbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzYXZlZDogVGVuc29yW10gPSBbXTtcbiAgICB0aGlzLmFkZFRhcGVOb2RlKHRoaXMuc3RhdGUuYWN0aXZlU2NvcGUubmFtZSwgaW5wdXRzLCBbeV0sIGdyYWQsIHNhdmVkLCB7fSk7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGtlcm5lbCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCByZXR1cm4gdGhlIG91dHB1dCB0ZW5zb3IuXG4gICAqXG4gICAqIEBwYXJhbSBrZXJuZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSBrZXJuZWwgdG8gZXhlY3V0ZS5cbiAgICogQHBhcmFtIGlucHV0cyBBIG1hcCBvZiBpbnB1dCBuYW1lcyB0byB0ZW5zb3JzLlxuICAgKiBAcGFyYW0gYXR0cnMgQSBtYXAgb2YgYXR0cmlidXRlIG5hbWVzIHRvIHRoZWlyIHZhbHVlcy4gQW4gYXR0cmlidXRlIGlzIGFcbiAgICogICAgIHByaW1pdGl2ZSAobm9uLXRlbnNvcikgaW5wdXQgdG8gdGhlIGtlcm5lbC5cbiAgICogQHBhcmFtIGlucHV0c1RvU2F2ZSBBIGxpc3Qgb2YgdGVuc29ycywgaW5wdXRzIHRvIHNhdmUgZm9yIHRoZSBiYWNrcHJvcFxuICAgKiAgICAgY29tcHV0YXRpb24uXG4gICAqIEBwYXJhbSBvdXRwdXRzVG9TYXZlIEEgbGlzdCBvZiBib29sZWFucywgc3BlY2lmeWluZyB3aGljaCBvdXRwdXQgdG8gc2F2ZVxuICAgKiAgICAgZm9yIHRoZSBiYWNrcHJvcCBjb21wdXRhdGlvbi4gVGhlc2UgYXJlIGJvb2xlYW5zIHNpbmNlIHRoZSBvdXRwdXRcbiAgICogdGVuc29ycyBhcmUgbm90IHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBydW5LZXJuZWw8VCBleHRlbmRzIFRlbnNvcnxUZW5zb3JbXT4oXG4gICAgICBrZXJuZWxOYW1lOiBzdHJpbmcsIGlucHV0czogTmFtZWRUZW5zb3JNYXAsIGF0dHJzPzogTmFtZWRBdHRyTWFwKTogVCB7XG4gICAgaWYgKHRoaXMuYmFja2VuZE5hbWUgPT0gbnVsbCkge1xuICAgICAgLy8gYmFja2VuZCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0IChiYWNrZW5kIGluaXRpYWxpemF0aW9uIGlzIGxhenlcbiAgICAgIC8vIGNhbiBiZSBkZWZlcnJlZCB1bnRpbCBhbiBvcC8ga2VybmVsIGlzIHJ1bikuXG4gICAgICAvLyBUaGUgYmVsb3cgZ2V0dGVyIGhhcyBzaWRlIGVmZmVjdHMgdGhhdCB3aWxsIHRyeSB0byBpbml0aWFsaXplIHRoZVxuICAgICAgLy8gYmFja2VuZCBhbmQgc2V0IHByb3BlcnRpZXMgbGlrZSB0aGlzLmJhY2tlbmROYW1lXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVudXNlZC1leHByZXNzaW9uXG4gICAgICB0aGlzLmJhY2tlbmQ7XG4gICAgfVxuICAgIGNvbnN0IGhhc0tlcm5lbCA9IGdldEtlcm5lbChrZXJuZWxOYW1lLCB0aGlzLmJhY2tlbmROYW1lKSAhPSBudWxsO1xuICAgIGlmICghaGFzS2VybmVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEtlcm5lbCAnJHtrZXJuZWxOYW1lfScgbm90IHJlZ2lzdGVyZWQgZm9yIGJhY2tlbmQgJyR7XG4gICAgICAgICAgdGhpcy5iYWNrZW5kTmFtZX0nYCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJ1bktlcm5lbEZ1bmMoe2tlcm5lbE5hbWUsIGlucHV0cywgYXR0cnN9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkQ2hlY2tGb3JNZW1MZWFrcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5FTlYuZ2V0Qm9vbCgnSVNfVEVTVCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0tlcm5lbEZvck1lbUxlYWsoXG4gICAgICBrZXJuZWxOYW1lOiBzdHJpbmcsIG51bURhdGFJZHNCZWZvcmU6IG51bWJlcixcbiAgICAgIG91dEluZm9zOiBUZW5zb3JJbmZvW10pOiB2b2lkIHtcbiAgICBjb25zdCBudW1EYXRhSWRzQWZ0ZXIgPSB0aGlzLmJhY2tlbmQubnVtRGF0YUlkcygpO1xuXG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBkYXRhIGlkcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUga2VybmVsLlxuICAgIGxldCBudW1PdXRwdXREYXRhSWRzID0gMDtcbiAgICBvdXRJbmZvcy5mb3JFYWNoKGluZm8gPT4ge1xuICAgICAgLy8gQ29tcGxleCBudW1iZXJzIGFsbG9jYXRlIDMgZGF0YSBpZHMsIG9uZSBmb3IgJ3JlYWwnLCBvbmUgZm9yXG4gICAgICAvLyAnaW1hZ2luYXJ5JywgYW5kIG9uZSBmb3IgdGhlIGNvbnRhaW5lciB0aGF0IGhvbGRzIHRoZSBmb3JtZXIgdHdvLlxuICAgICAgbnVtT3V0cHV0RGF0YUlkcyArPSAoaW5mby5kdHlwZSA9PT0gJ2NvbXBsZXg2NCcgPyAzIDogMSk7XG4gICAgfSk7XG5cbiAgICAvLyBBY2NvdW50IGZvciB0aGUgbnVtYmVyIG9mIG1vdmVzIGR1cmluZyBrZXJuZWwgZXhlY3V0aW9uLiBBIFwiZGF0YSBtb3ZlXCJcbiAgICAvLyBjYW4gaGFwcGVuIGluIHRoZSBtaWRkbGUgb2YgYSBrZXJuZWwgZXhlY3V0aW9uLCBwbGFjaW5nIGEgbmV3IChrZXksdmFsdWUpXG4gICAgLy8gcGFpciBpbiB0aGUgZGF0YSBzdG9yYWdlLiBTaW5jZSBkYXRhIG1vdmVzIGhhdmUgbmV0IHplcm8gZWZmZWN0ICh3ZVxuICAgIC8vIGFsd2F5cyByZW1vdmUgdGhlIGRhdGEgZnJvbSB0aGUgb2xkIGJhY2tlbmQpLCB3ZSBoYXZlIHRvIGNhbmNlbCB0aGVtIG91dFxuICAgIC8vIHdoZW4gZGV0ZWN0aW5nIG1lbW9yeSBsZWFrcy5cbiAgICBjb25zdCBudW1Nb3ZlcyA9XG4gICAgICAgIHRoaXMuc3RhdGUubnVtRGF0YU1vdmVzU3RhY2tbdGhpcy5zdGF0ZS5udW1EYXRhTW92ZXNTdGFjay5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBkYXRhSWRzTGVha2VkID1cbiAgICAgICAgbnVtRGF0YUlkc0FmdGVyIC0gbnVtRGF0YUlkc0JlZm9yZSAtIG51bU91dHB1dERhdGFJZHMgLSBudW1Nb3ZlcztcbiAgICBpZiAoZGF0YUlkc0xlYWtlZCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQmFja2VuZCAnJHt0aGlzLmJhY2tlbmROYW1lfScgaGFzIGFuIGludGVybmFsIG1lbW9yeSBsZWFrIGAgK1xuICAgICAgICAgIGAoJHtkYXRhSWRzTGVha2VkfSBkYXRhIGlkcykgYWZ0ZXIgcnVubmluZyAnJHtrZXJuZWxOYW1lfSdgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaGVscGVyIG1ldGhvZCB0byBleGVjdXRlIGEga2VybmVsIEZ1bmNcbiAgICpcbiAgICogVXNlIGBydW5LZXJuZWxgIHRvIGV4ZWN1dGUga2VybmVscyBmcm9tIG91dHNpZGUgb2YgZW5naW5lLlxuICAgKi9cbiAgcHJpdmF0ZSBydW5LZXJuZWxGdW5jPFQgZXh0ZW5kcyBUZW5zb3J8VGVuc29yW10sIEkgZXh0ZW5kcyBOYW1lZFRlbnNvck1hcD4oXG4gICAgICBrZXJuZWxQYXJhbXM6IFJlZ2lzdGVyZWRLZXJuZWxJbnZvY2F0aW9uPEk+fFxuICAgICAgQ3VzdG9tR3JhZEtlcm5lbEludm9jYXRpb248VCwgST4pOiBUIHtcbiAgICBsZXQgb3V0cHV0czogVGVuc29yW107XG4gICAgbGV0IHNhdmVkOiBUZW5zb3JbXSA9IFtdO1xuICAgIGNvbnN0IGlzVGFwZU9uID0gdGhpcy5pc1RhcGVPbigpO1xuXG4gICAgY29uc3Qgc3RhcnRpbmdCeXRlY291bnQgPSB0aGlzLnN0YXRlLm51bUJ5dGVzO1xuICAgIGNvbnN0IHN0YXJ0aW5nTnVtVGVuc29ycyA9IHRoaXMuc3RhdGUubnVtVGVuc29ycztcblxuICAgIGlmICh0aGlzLnNob3VsZENoZWNrRm9yTWVtTGVha3MoKSkge1xuICAgICAgdGhpcy5zdGF0ZS5udW1EYXRhTW92ZXNTdGFjay5wdXNoKDApO1xuICAgIH1cblxuICAgIGxldCBrZXJuZWxGdW5jOiAoKSA9PiBUZW5zb3JbXTtcbiAgICBpZiAodGhpcy5iYWNrZW5kTmFtZSA9PSBudWxsKSB7XG4gICAgICAvLyBiYWNrZW5kIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQgKGJhY2tlbmQgaW5pdGlhbGl6YXRpb24gaXMgbGF6eVxuICAgICAgLy8gY2FuIGJlIGRlZmVycmVkIHVudGlsIGFuIG9wLyBrZXJuZWwgaXMgcnVuKS5cbiAgICAgIC8vIFRoZSBiZWxvdyBnZXR0ZXIgaGFzIHNpZGUgZWZmZWN0cyB0aGF0IHdpbGwgdHJ5IHRvIGluaXRpYWxpemUgdGhlXG4gICAgICAvLyBiYWNrZW5kIGFuZCBzZXQgcHJvcGVydGllcyBsaWtlIHRoaXMuYmFja2VuZE5hbWVcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW51c2VkLWV4cHJlc3Npb25cbiAgICAgIHRoaXMuYmFja2VuZDtcbiAgICB9XG5cbiAgICBsZXQgb3V0OiBUZW5zb3JJbmZvfFRlbnNvckluZm9bXTtcblxuICAgIGNvbnN0IGtlcm5lbE9yU2NvcGVOYW1lID0gaXNSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbihrZXJuZWxQYXJhbXMpID9cbiAgICAgICAga2VybmVsUGFyYW1zLmtlcm5lbE5hbWUgOlxuICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlICE9IG51bGwgPyB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlLm5hbWUgOiAnJztcblxuICAgIC8vIENyZWF0ZSB0aGUga2VybmVsRnVuYyBmcm9tIGVpdGhlciBhIHJlZ2lzdGVyZWQga2VybmVsIE9SIHBhc3NlZCBpblxuICAgIC8vIGZvcndhcmQvYmFja3dhcmQgZnVuY3Rpb25zICh1c2VkIGJ5IGN1c3RvbSBncmFkKS4gSW4gdGhpcyBjb250ZXh0IGFcbiAgICAvLyBrZXJuZWxGdW5jIHdyYXBzIGEga2VybmVsIGltcGxlbWVudGF0aW9uIHdpdGggc29tZSBib29ra2VlcGluZy5cblxuICAgIGlmIChpc1JlZ2lzdGVyZWRLZXJuZWxJbnZvY2F0aW9uKGtlcm5lbFBhcmFtcykpIHtcbiAgICAgIGNvbnN0IHtrZXJuZWxOYW1lLCBpbnB1dHMsIGF0dHJzfSA9IGtlcm5lbFBhcmFtcztcbiAgICAgIGlmICh0aGlzLmJhY2tlbmROYW1lID09IG51bGwpIHtcbiAgICAgICAgLy8gYmFja2VuZCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0IChiYWNrZW5kIGluaXRpYWxpemF0aW9uIGlzIGxhenlcbiAgICAgICAgLy8gY2FuIGJlIGRlZmVycmVkIHVudGlsIGFuIG9wLyBrZXJuZWwgaXMgcnVuKS5cbiAgICAgICAgLy8gVGhlIGJlbG93IGdldHRlciBoYXMgc2lkZSBlZmZlY3RzIHRoYXQgd2lsbCB0cnkgdG8gaW5pdGlhbGl6ZSB0aGVcbiAgICAgICAgLy8gYmFja2VuZCBhbmQgc2V0IHByb3BlcnRpZXMgbGlrZSB0aGlzLmJhY2tlbmROYW1lXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW51c2VkLWV4cHJlc3Npb25cbiAgICAgICAgdGhpcy5iYWNrZW5kO1xuICAgICAgfVxuICAgICAgY29uc3Qga2VybmVsID0gZ2V0S2VybmVsKGtlcm5lbE5hbWUsIHRoaXMuYmFja2VuZE5hbWUpO1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAga2VybmVsICE9IG51bGwsXG4gICAgICAgICAgKCkgPT4gYENhbm5vdCBmaW5kIHJlZ2lzdGVyZWQga2VybmVsICcke2tlcm5lbE5hbWV9JyBmb3IgYmFja2VuZCAnJHtcbiAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kTmFtZX0nYCk7XG5cbiAgICAgIGtlcm5lbEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG51bURhdGFJZHNCZWZvcmUgPSB0aGlzLmJhY2tlbmQubnVtRGF0YUlkcygpO1xuICAgICAgICBvdXQgPSBrZXJuZWwua2VybmVsRnVuYyh7aW5wdXRzLCBhdHRycywgYmFja2VuZDogdGhpcy5iYWNrZW5kfSk7XG4gICAgICAgIGNvbnN0IG91dEluZm9zID0gQXJyYXkuaXNBcnJheShvdXQpID8gb3V0IDogW291dF07XG4gICAgICAgIGlmICh0aGlzLnNob3VsZENoZWNrRm9yTWVtTGVha3MoKSkge1xuICAgICAgICAgIHRoaXMuY2hlY2tLZXJuZWxGb3JNZW1MZWFrKGtlcm5lbE5hbWUsIG51bURhdGFJZHNCZWZvcmUsIG91dEluZm9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG91dFRlbnNvcnMgPSBvdXRJbmZvcy5tYXAoKG91dEluZm86IFRlbnNvckluZm98VGVuc29yKSA9PiB7XG4gICAgICAgICAgLy8gdG9kbyAoeWFzc29nYmEpIHJlbW92ZSB0aGlzIG9wdGlvbiAoVGVuc29yKSB3aGVuIG5vZGUgYmFja2VuZFxuICAgICAgICAgIC8vIG1ldGhvZHMgaGF2ZSBiZWVuIG1vZHVsYXJpemVkIGFuZCB0aGV5IGFsbCByZXR1cm4gdGVuc29ySW5mby5cbiAgICAgICAgICAvLyBUZW5zb3JJbmZvcyBkbyBub3QgaGF2ZSBhIHJhbmsgYXR0cmlidXRlLlxuICAgICAgICAgIGlmICgob3V0SW5mbyBhcyBUZW5zb3IpLnJhbmsgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG91dEluZm8gYXMgVGVuc29yO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlVGVuc29yRnJvbVRlbnNvckluZm8ob3V0SW5mbyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNhdmUgYW55IHJlcXVpcmVkIGlucHV0cyBhbmQgb3V0cHV0cy5cblxuICAgICAgICAvLyBEbyBub3Qgc2F2ZSB1bmxlc3Mgd2UgYXJlIHJlY29yZGluZyB0byB0aGUgdGFwZS4gT3RoZXJ3aXNlIGl0IHdvdWxkXG4gICAgICAgIC8vIGNhdXNlIGEgbWVtIGxlYWsgc2luY2UgdGhlcmUgd291bGQgYmUgbm8gYmFja3Byb3AgZm9yIHRoZXNlIHRlbnNvcnNcbiAgICAgICAgLy8gKHdoaWNoIHdvdWxkIG90aGVyd2lzZSBkaXNwb3NlIHRoZW0pLlxuICAgICAgICBpZiAoaXNUYXBlT24pIHtcbiAgICAgICAgICBjb25zdCB0ZW5zb3JzVG9TYXZlID1cbiAgICAgICAgICAgICAgdGhpcy5nZXRUZW5zb3JzRm9yR3JhZGllbnQoa2VybmVsTmFtZSwgaW5wdXRzLCBvdXRUZW5zb3JzKTtcbiAgICAgICAgICBzYXZlZCA9IHRoaXMuc2F2ZVRlbnNvcnNGb3JCYWNrd2FyZE1vZGUodGVuc29yc1RvU2F2ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dFRlbnNvcnM7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7Zm9yd2FyZEZ1bmN9ID0ga2VybmVsUGFyYW1zO1xuICAgICAgLy8gUnVubmluZyBhIGN1c3RvbUdyYWQgb3AuXG4gICAgICBjb25zdCBzYXZlRnVuYzogR3JhZFNhdmVGdW5jID0gKHRlbnNvcnMpID0+IHtcbiAgICAgICAgLy8gRG8gbm90IHNhdmUgdW5sZXNzIHdlIGFyZSByZWNvcmRpbmcgdG8gdGhlIHRhcGUuIE90aGVyd2lzZSBpdCB3b3VsZFxuICAgICAgICAvLyBjYXVzZSBhIG1lbSBsZWFrIHNpbmNlIHdlIHdvdWxkIG5ldmVyIHJ1biBiYWNrcHJvcCwgd2hpY2ggZGlzcG9zZXNcbiAgICAgICAgLy8gdGhlIGtlcHQgdGVuc29ycy5cbiAgICAgICAgaWYgKCFpc1RhcGVPbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzYXZlZCA9IHRlbnNvcnMubWFwKHRlbnNvciA9PiB0aGlzLmtlZXAodGhpcy5jbG9uZSh0ZW5zb3IpKSk7XG4gICAgICB9O1xuXG4gICAgICBrZXJuZWxGdW5jID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBudW1EYXRhSWRzQmVmb3JlID0gdGhpcy5iYWNrZW5kLm51bURhdGFJZHMoKTtcbiAgICAgICAgb3V0ID0gdGhpcy50aWR5KCgpID0+IGZvcndhcmRGdW5jKHRoaXMuYmFja2VuZCwgc2F2ZUZ1bmMpKTtcbiAgICAgICAgY29uc3Qgb3V0cyA9IChBcnJheS5pc0FycmF5KG91dCkgPyBvdXQgOiBbb3V0XSkgYXMgVGVuc29yW107XG4gICAgICAgIGlmICh0aGlzLnNob3VsZENoZWNrRm9yTWVtTGVha3MoKSkge1xuICAgICAgICAgIC8vIFNjb3BlIG5hbWUgaXMgdXNlZCB0byBwcmludCBhIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIGlmIG5lZWRlZC5cbiAgICAgICAgICB0aGlzLmNoZWNrS2VybmVsRm9yTWVtTGVhayhrZXJuZWxPclNjb3BlTmFtZSwgbnVtRGF0YUlkc0JlZm9yZSwgb3V0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHM7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUnVuIHRoZSBrZXJuZWxGdW5jLiBPcHRpb25hbGx5IHByb2ZpbGluZyBpdC5cbiAgICAvL1xuICAgIGNvbnN0IHtpbnB1dHMsIGF0dHJzfSA9IGtlcm5lbFBhcmFtcztcbiAgICBjb25zdCBiYWNrd2FyZHNGdW5jID0gaXNSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbihrZXJuZWxQYXJhbXMpID9cbiAgICAgICAgbnVsbCA6XG4gICAgICAgIGtlcm5lbFBhcmFtcy5iYWNrd2FyZHNGdW5jO1xuXG4gICAgbGV0IGtlcm5lbFByb2ZpbGU6IEtlcm5lbFByb2ZpbGU7XG4gICAgdGhpcy5zY29wZWRSdW4oXG4gICAgICAgIC8vIFN0b3AgcmVjb3JkaW5nIHRvIGEgdGFwZSB3aGVuIHJ1bm5pbmcgYSBrZXJuZWwuXG4gICAgICAgICgpID0+IHRoaXMuc3RhdGUua2VybmVsRGVwdGgrKywgKCkgPT4gdGhpcy5zdGF0ZS5rZXJuZWxEZXB0aC0tLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLkVOVi5nZXRCb29sKCdERUJVRycpICYmICF0aGlzLnN0YXRlLnByb2ZpbGluZykge1xuICAgICAgICAgICAgb3V0cHV0cyA9IGtlcm5lbEZ1bmMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2VybmVsUHJvZmlsZSA9IHRoaXMucHJvZmlsZXIucHJvZmlsZUtlcm5lbChcbiAgICAgICAgICAgICAgICBrZXJuZWxPclNjb3BlTmFtZSwgaW5wdXRzLCAoKSA9PiBrZXJuZWxGdW5jKCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuRU5WLmdldEJvb2woJ0RFQlVHJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9maWxlci5sb2dLZXJuZWxQcm9maWxlKGtlcm5lbFByb2ZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0cyA9IGtlcm5lbFByb2ZpbGUub3V0cHV0cztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgaWYgKGlzVGFwZU9uKSB7XG4gICAgICB0aGlzLmFkZFRhcGVOb2RlKFxuICAgICAgICAgIGtlcm5lbE9yU2NvcGVOYW1lLCBpbnB1dHMsIG91dHB1dHMsIGJhY2t3YXJkc0Z1bmMsIHNhdmVkLCBhdHRycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUucHJvZmlsaW5nKSB7XG4gICAgICB0aGlzLnN0YXRlLmFjdGl2ZVByb2ZpbGUua2VybmVscy5wdXNoKHtcbiAgICAgICAgbmFtZToga2VybmVsT3JTY29wZU5hbWUsXG4gICAgICAgIGJ5dGVzQWRkZWQ6IHRoaXMuc3RhdGUubnVtQnl0ZXMgLSBzdGFydGluZ0J5dGVjb3VudCxcbiAgICAgICAgdG90YWxCeXRlc1NuYXBzaG90OiB0aGlzLnN0YXRlLm51bUJ5dGVzLFxuICAgICAgICB0ZW5zb3JzQWRkZWQ6IHRoaXMuc3RhdGUubnVtVGVuc29ycyAtIHN0YXJ0aW5nTnVtVGVuc29ycyxcbiAgICAgICAgdG90YWxUZW5zb3JzU25hcHNob3Q6IHRoaXMuc3RhdGUubnVtVGVuc29ycyxcbiAgICAgICAgaW5wdXRTaGFwZXM6IE9iamVjdC5rZXlzKGlucHV0cykubWFwKFxuICAgICAgICAgICAga2V5ID0+IGlucHV0c1trZXldICE9IG51bGwgPyBpbnB1dHNba2V5XS5zaGFwZSA6IG51bGwpLFxuICAgICAgICBvdXRwdXRTaGFwZXM6IG91dHB1dHMubWFwKGl0ZW0gPT4gaXRlbS5zaGFwZSksXG4gICAgICAgIGtlcm5lbFRpbWVNczoga2VybmVsUHJvZmlsZS50aW1lTXMsXG4gICAgICAgIGV4dHJhSW5mbzoga2VybmVsUHJvZmlsZS5leHRyYUluZm9cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkob3V0KSA/IG91dHB1dHMgOiBvdXRwdXRzWzBdKSBhcyBUO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRlbnNvcnMgdXNlZCBpbiBmb3J3YXJkIG1vZGUgZm9yIHVzZSBpbiBiYWNrd2FyZCBtb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gdGVuc29ycyB0aGUgbGlzdCBvZiB0ZW5zb3JzIHRvIHNhdmUuXG4gICAqL1xuICBwcml2YXRlIHNhdmVUZW5zb3JzRm9yQmFja3dhcmRNb2RlKHRlbnNvcnM6IFRlbnNvcltdKTogVGVuc29yW10ge1xuICAgIGNvbnN0IHNhdmVkID0gdGVuc29ycy5tYXAodGVuc29yID0+IHRoaXMua2VlcCh0aGlzLmNsb25lKHRlbnNvcikpKTtcbiAgICByZXR1cm4gc2F2ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGVuc29ycyB0byBzYXZlIGZvciBhIGdpdmVuIGdyYWRpZW50IGNhbGN1bGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ga2VybmVsTmFtZSBuYW1lIG9mIGtlcm5lbCB0byBsb29rIHVwIGdyYWRpZW50IGZvci5cbiAgICogQHBhcmFtIGlucHV0cyBhIG1hcCBvZiBpbnB1dCB0ZW5zb3JzLlxuICAgKiBAcGFyYW0gb3V0cHV0cyBhbiBhcnJheSBvZiBvdXRwdXQgdGVuc29ycyBmcm9tIGZvcndhcmQgbW9kZSBvZiBrZXJuZWwuXG4gICAqL1xuICBwcml2YXRlIGdldFRlbnNvcnNGb3JHcmFkaWVudChcbiAgICAgIGtlcm5lbE5hbWU6IHN0cmluZywgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCxcbiAgICAgIG91dHB1dHM6IFRlbnNvcltdKTogVGVuc29yW118bnVsbCB7XG4gICAgY29uc3QgZ3JhZENvbmZpZyA9IGdldEdyYWRpZW50KGtlcm5lbE5hbWUpO1xuICAgIGlmIChncmFkQ29uZmlnICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGlucHV0c1RvU2F2ZTogc3RyaW5nW10gPSBncmFkQ29uZmlnLmlucHV0c1RvU2F2ZSB8fCBbXTtcbiAgICAgIGNvbnN0IG91dHB1dHNUb1NhdmU6IGJvb2xlYW5bXSA9IGdyYWRDb25maWcub3V0cHV0c1RvU2F2ZSB8fCBbXTtcblxuICAgICAgLy8gSWYgc2F2ZUFsbElucHV0cyBpcyB0cnVlLCBhbGwgaW5wdXRzIHdpbGwgYmUgc2F2ZWQuIE90aGVyd2lzZSwgaW5wdXRzXG4gICAgICAvLyBzcGVjaWZpZWQgaW4gaW5wdXRzVG9TYXZlIHdpbGwgYmUgc2F2ZWQuXG4gICAgICBsZXQgaW5wdXRUZW5zb3JzVG9TYXZlOiBUZW5zb3JbXTtcbiAgICAgIGlmIChncmFkQ29uZmlnLnNhdmVBbGxJbnB1dHMpIHtcbiAgICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGlucHV0cyksXG4gICAgICAgICAgICAoKSA9PiAnc2F2ZUFsbElucHV0cyBpcyB0cnVlLCBleHBlY3RlZCBpbnB1dHMgdG8gYmUgYW4gYXJyYXkuJyk7XG5cbiAgICAgICAgaW5wdXRUZW5zb3JzVG9TYXZlID0gT2JqZWN0LmtleXMoaW5wdXRzKS5tYXAoKGtleSkgPT4gaW5wdXRzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRUZW5zb3JzVG9TYXZlID0gaW5wdXRzVG9TYXZlLm1hcCgoaW5wdXROYW1lKSA9PiBpbnB1dHNbaW5wdXROYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG91dHB1dFRlbnNvcnNUb1NhdmU6IFRlbnNvcltdID1cbiAgICAgICAgICBvdXRwdXRzLmZpbHRlcigoXywgaSkgPT4gb3V0cHV0c1RvU2F2ZVtpXSk7XG5cbiAgICAgIHJldHVybiBpbnB1dFRlbnNvcnNUb1NhdmUuY29uY2F0KG91dHB1dFRlbnNvcnNUb1NhdmUpO1xuICAgIH1cbiAgICAvLyBXZSByZXR1cm4gYW4gZW1wdHkgbGlzdCByYXRoZXIgdGhhbiB0aHJvdyBhbiBlcnJvciBiZWNhdXNlIHRoZSBrZXJuZWwgd2VcbiAgICAvLyBhcmUgbG9va2luZyB1cCBtYXkgbm90IGFjdHVhbGx5IGJlIHJlbGV2YW50IHRvIGJhY2twcm9waW5nIHRocm91Z2ggdGhlXG4gICAgLy8gb3ZlcmFsbCBmdW5jdGlvblxuICAgIC8vXG4gICAgLy8gU2VlICdkb2VzIG5vdCBlcnJvciBpZiBpcnJlbGV2YW50IChwcnVuZWQpIG9wcyBhcmUgbWlzc2luZyBncmFkcycgdGVzdFxuICAgIC8vIGluIGdyYWRpZW50c190ZXN0LnRzIGZvciBhbiBleGFtcGxlLlxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBwdWJsaWMgQVBJcyBmb3IgdGVuc29yIGNyZWF0aW9uLiBNYWtlcyBhIG5ld1xuICAgKiB0ZW5zb3Igd2l0aCB0aGUgcHJvdmlkZWQgc2hhcGUsIGR0eXBlIGFuZCB2YWx1ZXMuIEl0IGFsd2F5c1xuICAgKiBjcmVhdGVzIGEgbmV3IGRhdGEgaWQgYW5kIHdyaXRlcyB0aGUgdmFsdWVzIHRvIHRoZSB1bmRlcmx5aW5nIGJhY2tlbmQuXG4gICAqL1xuICBtYWtlVGVuc29yKFxuICAgICAgdmFsdWVzOiBEYXRhVmFsdWVzLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICAgIGJhY2tlbmQ/OiBLZXJuZWxCYWNrZW5kKTogVGVuc29yIHtcbiAgICBpZiAodmFsdWVzID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWVzIHBhc3NlZCB0byBlbmdpbmUubWFrZVRlbnNvcigpIGFyZSBudWxsJyk7XG4gICAgfVxuICAgIGR0eXBlID0gZHR5cGUgfHwgJ2Zsb2F0MzInO1xuICAgIGJhY2tlbmQgPSBiYWNrZW5kIHx8IHRoaXMuYmFja2VuZDtcbiAgICBsZXQgYmFja2VuZFZhbHMgPSB2YWx1ZXMgYXMgQmFja2VuZFZhbHVlcztcbiAgICBpZiAoZHR5cGUgPT09ICdzdHJpbmcnICYmIHV0aWwuaXNTdHJpbmcodmFsdWVzWzBdKSkge1xuICAgICAgYmFja2VuZFZhbHMgPSAodmFsdWVzIGFzIHN0cmluZ1tdKS5tYXAoZCA9PiB1dGlsLmVuY29kZVN0cmluZyhkKSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFJZCA9IGJhY2tlbmQud3JpdGUoYmFja2VuZFZhbHMsIHNoYXBlLCBkdHlwZSk7XG4gICAgY29uc3QgdCA9IG5ldyBUZW5zb3Ioc2hhcGUsIGR0eXBlLCBkYXRhSWQsIHRoaXMubmV4dFRlbnNvcklkKCkpO1xuICAgIHRoaXMudHJhY2tUZW5zb3IodCwgYmFja2VuZCk7XG5cbiAgICAvLyBDb3VudCBieXRlcyBmb3Igc3RyaW5nIHRlbnNvcnMuXG4gICAgaWYgKGR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaW5mbyA9IHRoaXMuc3RhdGUudGVuc29ySW5mby5nZXQoZGF0YUlkKTtcbiAgICAgIGNvbnN0IG5ld0J5dGVzID0gYnl0ZXNGcm9tU3RyaW5nQXJyYXkoYmFja2VuZFZhbHMgYXMgVWludDhBcnJheVtdKTtcbiAgICAgIHRoaXMuc3RhdGUubnVtQnl0ZXMgKz0gbmV3Qnl0ZXMgLSBpbmZvLmJ5dGVzO1xuICAgICAgaW5mby5ieXRlcyA9IG5ld0J5dGVzO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBiYWNrZW5kcy4gTWFrZXMgYSBuZXcgdGVuc29yXG4gICAqIHRoYXQgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBleGlzdGluZyBkYXRhIGlkLiBJdCBkb2Vzbid0IGNyZWF0ZVxuICAgKiBhIG5ldyBkYXRhIGlkLCBvbmx5IGluY3JlbWVudHMgdGhlIHJlZiBjb3VudCB1c2VkIGluIG1lbW9yeSB0cmFja2luZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIG1ha2VUZW5zb3JGcm9tRGF0YUlkKFxuICAgIGRhdGFJZDogRGF0YUlkLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICBiYWNrZW5kPzogS2VybmVsQmFja2VuZCk6IFRlbnNvciB7XG4gICAgZHR5cGUgPSBkdHlwZSB8fCAnZmxvYXQzMic7XG4gICAgY29uc3QgdGVuc29ySW5mbzogVGVuc29ySW5mbyA9IHtkYXRhSWQsIHNoYXBlLCBkdHlwZX07XG4gICAgcmV0dXJuIHRoaXMubWFrZVRlbnNvckZyb21UZW5zb3JJbmZvKHRlbnNvckluZm8sIGJhY2tlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGJ5IGJhY2tlbmRzLiBNYWtlcyBhIG5ldyB0ZW5zb3IgdGhhdCBpcyBhIHdyYXBwZXJcbiAgICogYXJvdW5kIGFuIGV4aXN0aW5nIGRhdGEgaWQgaW4gVGVuc29ySW5mby4gSXQgZG9lc24ndCBjcmVhdGUgYSBuZXcgZGF0YSBpZCxcbiAgICogb25seSBpbmNyZW1lbnRzIHRoZSByZWYgY291bnQgdXNlZCBpbiBtZW1vcnkgdHJhY2tpbmcuXG4gICAqL1xuICBtYWtlVGVuc29yRnJvbVRlbnNvckluZm8odGVuc29ySW5mbzogVGVuc29ySW5mbywgYmFja2VuZD86IEtlcm5lbEJhY2tlbmQpOlxuICAgICAgVGVuc29yIHtcbiAgICBjb25zdCB7ZGF0YUlkLCBzaGFwZSwgZHR5cGV9ID0gdGVuc29ySW5mbztcbiAgICBjb25zdCB0ID0gbmV3IFRlbnNvcihzaGFwZSwgZHR5cGUsIGRhdGFJZCwgdGhpcy5uZXh0VGVuc29ySWQoKSk7XG4gICAgdGhpcy50cmFja1RlbnNvcih0LCBiYWNrZW5kKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIG1ha2VWYXJpYWJsZShcbiAgICAgIGluaXRpYWxWYWx1ZTogVGVuc29yLCB0cmFpbmFibGUgPSB0cnVlLCBuYW1lPzogc3RyaW5nLFxuICAgICAgZHR5cGU/OiBEYXRhVHlwZSk6IFZhcmlhYmxlIHtcbiAgICBuYW1lID0gbmFtZSB8fCB0aGlzLm5leHRWYXJpYWJsZUlkKCkudG9TdHJpbmcoKTtcbiAgICBpZiAoZHR5cGUgIT0gbnVsbCAmJiBkdHlwZSAhPT0gaW5pdGlhbFZhbHVlLmR0eXBlKSB7XG4gICAgICBpbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWUuY2FzdChkdHlwZSk7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBuZXcgVmFyaWFibGUoaW5pdGlhbFZhbHVlLCB0cmFpbmFibGUsIG5hbWUsIHRoaXMubmV4dFRlbnNvcklkKCkpO1xuICAgIGlmICh0aGlzLnN0YXRlLnJlZ2lzdGVyZWRWYXJpYWJsZXNbdi5uYW1lXSAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhcmlhYmxlIHdpdGggbmFtZSAke3YubmFtZX0gd2FzIGFscmVhZHkgcmVnaXN0ZXJlZGApO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLnJlZ2lzdGVyZWRWYXJpYWJsZXNbdi5uYW1lXSA9IHY7XG4gICAgdGhpcy5pbmNSZWYodiwgdGhpcy5iYWNrZW5kKTtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIHRyYWNrVGVuc29yKGE6IFRlbnNvciwgYmFja2VuZDogS2VybmVsQmFja2VuZCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUubnVtVGVuc29ycysrO1xuICAgIGlmIChhLmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5zdGF0ZS5udW1TdHJpbmdUZW5zb3JzKys7XG4gICAgfVxuICAgIC8vIEJ5dGVzIGZvciBjb21wbGV4IG51bWJlcnMgYXJlIGNvdW50ZWQgYnkgdGhlaXIgY29tcG9uZW50cy4gQnl0ZXMgZm9yXG4gICAgLy8gc3RyaW5nIHRlbnNvcnMgYXJlIGNvdW50ZWQgd2hlbiB3cml0aW5nIHZhbHVlcy5cbiAgICBsZXQgYnl0ZXMgPSAwO1xuICAgIGlmIChhLmR0eXBlICE9PSAnY29tcGxleDY0JyAmJiBhLmR0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgYnl0ZXMgPSBhLnNpemUgKiB1dGlsLmJ5dGVzUGVyRWxlbWVudChhLmR0eXBlKTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5udW1CeXRlcyArPSBieXRlcztcblxuICAgIGlmICghdGhpcy5zdGF0ZS50ZW5zb3JJbmZvLmhhcyhhLmRhdGFJZCkpIHtcbiAgICAgIHRoaXMuc3RhdGUubnVtRGF0YUJ1ZmZlcnMrKztcbiAgICAgIHRoaXMuc3RhdGUudGVuc29ySW5mby5zZXQoYS5kYXRhSWQsIHtcbiAgICAgICAgYmFja2VuZDogYmFja2VuZCB8fCB0aGlzLmJhY2tlbmQsXG4gICAgICAgIGR0eXBlOiBhLmR0eXBlLFxuICAgICAgICBzaGFwZTogYS5zaGFwZSxcbiAgICAgICAgYnl0ZXNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghKGEgaW5zdGFuY2VvZiBWYXJpYWJsZSkpIHtcbiAgICAgIHRoaXMudHJhY2soYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVHJhY2sgdGhlIHRlbnNvciBieSBkYXRhSWQgYW5kIGluY3JlYXNlIHRoZSByZWZDb3VudCBmb3IgdGhlIGRhdGFJZCBpbiB0aGVcbiAgLy8gYmFja2VuZC5cbiAgLy8gVE9ETyhweXUxMDA1NSk6IFRoaXMgaXMgY3VycmVudGx5IHVzZWQgYnkgbWFrZVZhcmlhYmxlIG1ldGhvZCwgdG8gaW5jcmVhc2VcbiAgLy8gcmVmQ291bnQgb24gdGhlIGJhY2tlbmQgZm9yIHRoZSBkYXRhSWQuIEl0IGNhbiBwb3RlbnRpYWxseSBiZSByZXBsYWNlZCB3aXRoXG4gIC8vIElkZW50aXR5IG9wIGluZGVhZCBvZiBjYWxsaW5nIGJhY2tlbmQgZGlyZWN0bHkuXG4gIGluY1JlZihhOiBUZW5zb3IsIGJhY2tlbmQ6IEtlcm5lbEJhY2tlbmQpOiB2b2lkIHtcbiAgICB0aGlzLnRyYWNrVGVuc29yKGEsIGJhY2tlbmQpO1xuICAgIHRoaXMuYmFja2VuZC5pbmNSZWYoYS5kYXRhSWQpO1xuICB9XG5cbiAgcmVtb3ZlRGF0YUlkKGRhdGFJZDogRGF0YUlkLCBiYWNrZW5kOiBLZXJuZWxCYWNrZW5kKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUudGVuc29ySW5mby5oYXMoZGF0YUlkKSAmJlxuICAgICAgICB0aGlzLnN0YXRlLnRlbnNvckluZm8uZ2V0KGRhdGFJZCkuYmFja2VuZCA9PT0gYmFja2VuZCkge1xuICAgICAgdGhpcy5zdGF0ZS50ZW5zb3JJbmZvLmRlbGV0ZShkYXRhSWQpO1xuICAgICAgdGhpcy5zdGF0ZS5udW1EYXRhQnVmZmVycy0tO1xuICAgIH1cbiAgfVxuICBkaXNwb3NlVGVuc29yKGE6IFRlbnNvcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGF0ZS50ZW5zb3JJbmZvLmhhcyhhLmRhdGFJZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5mbyA9IHRoaXMuc3RhdGUudGVuc29ySW5mby5nZXQoYS5kYXRhSWQpO1xuXG4gICAgdGhpcy5zdGF0ZS5udW1UZW5zb3JzLS07XG4gICAgaWYgKGEuZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnN0YXRlLm51bVN0cmluZ1RlbnNvcnMtLTtcbiAgICAgIHRoaXMuc3RhdGUubnVtQnl0ZXMgLT0gaW5mby5ieXRlcztcbiAgICB9XG4gICAgLy8gRG9uJ3QgY291bnQgYnl0ZXMgZm9yIGNvbXBsZXggbnVtYmVycyBhcyB0aGV5IGFyZSBjb3VudGVkIGJ5IHRoZWlyXG4gICAgLy8gY29tcG9uZW50cy5cbiAgICBpZiAoYS5kdHlwZSAhPT0gJ2NvbXBsZXg2NCcgJiYgYS5kdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGJ5dGVzID0gYS5zaXplICogdXRpbC5ieXRlc1BlckVsZW1lbnQoYS5kdHlwZSk7XG4gICAgICB0aGlzLnN0YXRlLm51bUJ5dGVzIC09IGJ5dGVzO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIGRhdGFJZCBpZiBiYWNrZW5kIGRpc3Bvc2UgdGhlIGRhdGEgc3VjY2Vzc2Z1bGx5XG4gICAgaWYgKGluZm8uYmFja2VuZC5kaXNwb3NlRGF0YShhLmRhdGFJZCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlRGF0YUlkKGEuZGF0YUlkLCBpbmZvLmJhY2tlbmQpO1xuICAgIH1cblxuICAgIC8vIFRPRE8obnN0aG9yYXQpOiBDb25zdHJ1Y3QgYW4gZXJyb3IgYW5kIHNhdmUgdGhlIHN0YWNrIHRyYWNlIGZvclxuICAgIC8vIGRlYnVnZ2luZyB3aGVuIGluIGRlYnVnIG1vZGUuIENyZWF0aW5nIGEgc3RhY2sgdHJhY2UgaXMgdG9vIGV4cGVuc2l2ZVxuICAgIC8vIHRvIGRvIHVuY29uZGl0aW9uYWxseS5cbiAgfVxuXG4gIGRpc3Bvc2VWYXJpYWJsZXMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB2YXJOYW1lIGluIHRoaXMuc3RhdGUucmVnaXN0ZXJlZFZhcmlhYmxlcykge1xuICAgICAgY29uc3QgdiA9IHRoaXMuc3RhdGUucmVnaXN0ZXJlZFZhcmlhYmxlc1t2YXJOYW1lXTtcbiAgICAgIHRoaXMuZGlzcG9zZVZhcmlhYmxlKHYpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3Bvc2VWYXJpYWJsZSh2OiBWYXJpYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZVRlbnNvcih2KTtcbiAgICBpZiAodGhpcy5zdGF0ZS5yZWdpc3RlcmVkVmFyaWFibGVzW3YubmFtZV0gIT0gbnVsbCkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RhdGUucmVnaXN0ZXJlZFZhcmlhYmxlc1t2Lm5hbWVdO1xuICAgIH1cbiAgfVxuXG4gIG1lbW9yeSgpOiBNZW1vcnlJbmZvIHtcbiAgICBjb25zdCBpbmZvID0gdGhpcy5iYWNrZW5kLm1lbW9yeSgpIGFzIE1lbW9yeUluZm87XG4gICAgaW5mby5udW1UZW5zb3JzID0gdGhpcy5zdGF0ZS5udW1UZW5zb3JzO1xuICAgIGluZm8ubnVtRGF0YUJ1ZmZlcnMgPSB0aGlzLnN0YXRlLm51bURhdGFCdWZmZXJzO1xuICAgIGluZm8ubnVtQnl0ZXMgPSB0aGlzLnN0YXRlLm51bUJ5dGVzO1xuICAgIGlmICh0aGlzLnN0YXRlLm51bVN0cmluZ1RlbnNvcnMgPiAwKSB7XG4gICAgICBpbmZvLnVucmVsaWFibGUgPSB0cnVlO1xuICAgICAgaWYgKGluZm8ucmVhc29ucyA9PSBudWxsKSB7XG4gICAgICAgIGluZm8ucmVhc29ucyA9IFtdO1xuICAgICAgfVxuICAgICAgaW5mby5yZWFzb25zLnB1c2goXG4gICAgICAgICAgJ01lbW9yeSB1c2FnZSBieSBzdHJpbmcgdGVuc29ycyBpcyBhcHByb3hpbWF0ZSAnICtcbiAgICAgICAgICAnKDIgYnl0ZXMgcGVyIGNoYXJhY3RlciknKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH1cblxuICBhc3luYyBwcm9maWxlKHF1ZXJ5OiAoKSA9PiAoVGVuc29yQ29udGFpbmVyIHwgUHJvbWlzZTxUZW5zb3JDb250YWluZXI+KSk6XG4gICAgICBQcm9taXNlPFByb2ZpbGVJbmZvPiB7XG4gICAgdGhpcy5zdGF0ZS5wcm9maWxpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgc3RhcnRCeXRlcyA9IHRoaXMuc3RhdGUubnVtQnl0ZXM7XG4gICAgY29uc3Qgc3RhcnROdW1UZW5zb3JzID0gdGhpcy5zdGF0ZS5udW1UZW5zb3JzO1xuXG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVQcm9maWxlLmtlcm5lbHMgPSBbXTtcbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVByb2ZpbGUucmVzdWx0ID0gYXdhaXQgcXVlcnkoKTtcblxuICAgIHRoaXMuc3RhdGUucHJvZmlsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVByb2ZpbGUucGVha0J5dGVzID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLnRoaXMuc3RhdGUuYWN0aXZlUHJvZmlsZS5rZXJuZWxzLm1hcChkID0+IGQudG90YWxCeXRlc1NuYXBzaG90KSk7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVQcm9maWxlLm5ld0J5dGVzID0gdGhpcy5zdGF0ZS5udW1CeXRlcyAtIHN0YXJ0Qnl0ZXM7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVQcm9maWxlLm5ld1RlbnNvcnMgPVxuICAgICAgICB0aGlzLnN0YXRlLm51bVRlbnNvcnMgLSBzdGFydE51bVRlbnNvcnM7XG4gICAgZm9yIChjb25zdCBrZXJuZWwgb2YgdGhpcy5zdGF0ZS5hY3RpdmVQcm9maWxlLmtlcm5lbHMpIHtcbiAgICAgIGtlcm5lbC5rZXJuZWxUaW1lTXMgPSBhd2FpdCBrZXJuZWwua2VybmVsVGltZU1zO1xuICAgICAga2VybmVsLmV4dHJhSW5mbyA9IGF3YWl0IGtlcm5lbC5leHRyYUluZm87XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2ZVByb2ZpbGU7XG4gIH1cblxuICBpc1RhcGVPbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5ncmFkaWVudERlcHRoID4gMCAmJiB0aGlzLnN0YXRlLmtlcm5lbERlcHRoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUYXBlTm9kZShcbiAgICAgIGtlcm5lbE5hbWU6IHN0cmluZywgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCwgb3V0cHV0czogVGVuc29yW10sXG4gICAgICBncmFkaWVudHNGdW5jOiBHcmFkRnVuYywgc2F2ZWQ6IFRlbnNvcltdLCBhdHRyczogTmFtZWRBdHRyTWFwKTogdm9pZCB7XG4gICAgY29uc3QgdGFwZU5vZGU6IFRhcGVOb2RlID1cbiAgICAgICAge2lkOiB0aGlzLnN0YXRlLm5leHRUYXBlTm9kZUlkKyssIGtlcm5lbE5hbWUsIGlucHV0cywgb3V0cHV0cywgc2F2ZWR9O1xuXG4gICAgY29uc3QgZ3JhZENvbmZpZyA9IGdldEdyYWRpZW50KGtlcm5lbE5hbWUpO1xuICAgIGlmIChncmFkQ29uZmlnICE9IG51bGwpIHtcbiAgICAgIGdyYWRpZW50c0Z1bmMgPSBncmFkQ29uZmlnLmdyYWRGdW5jO1xuICAgIH1cbiAgICBpZiAoZ3JhZGllbnRzRnVuYyAhPSBudWxsKSB7XG4gICAgICB0YXBlTm9kZS5ncmFkaWVudCA9IChkeXM6IFRlbnNvcltdKSA9PiB7XG4gICAgICAgIC8vIFRPRE8oc21pbGtvdik6IFRvIG9wdGltaXplIGJhY2stcHJvcCwgcGFzcyBkeXMgdGhhdCBhcmUgbm90IHVzZWQgaW5cbiAgICAgICAgLy8gdGhlIGJhY2twcm9wIGdyYXBoIHRvIHRoZSB1c2VyIGFzIG51bGwgaW5zdGVhZCBvZiB6ZXJvc1xuICAgICAgICBkeXMgPSBkeXMubWFwKChkeSwgaSkgPT4ge1xuICAgICAgICAgIGlmIChkeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdmFscyA9IHV0aWwubWFrZVplcm9zVHlwZWRBcnJheShvdXRwdXQuc2l6ZSwgb3V0cHV0LmR0eXBlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VUZW5zb3IodmFscywgb3V0cHV0LnNoYXBlLCBvdXRwdXQuZHR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZHk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBHcmFkIGZ1bmN0aW9ucyBvZiBvcHMgd2l0aCBzaW5nbGUgb3V0cHV0cyBleHBlY3QgYSBkeSwgd2hpbGUgb3BzXG4gICAgICAgIC8vIHdpdGggbXVsdGlwbGUgb3V0cHV0cyBleHBlY3QgZHlzIChhcnJheSBvZiBkeSkuXG4gICAgICAgIHJldHVybiBncmFkaWVudHNGdW5jKGR5cy5sZW5ndGggPiAxID8gZHlzIDogZHlzWzBdLCBzYXZlZCwgYXR0cnMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVUYXBlLnB1c2godGFwZU5vZGUpO1xuICB9XG5cbiAga2VlcDxUIGV4dGVuZHMgVGVuc29yPihyZXN1bHQ6IFQpOiBUIHtcbiAgICByZXN1bHQua2VwdCA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRUYXBlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmdyYWRpZW50RGVwdGggPT09IDApIHtcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZlVGFwZSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLmdyYWRpZW50RGVwdGgrKztcbiAgfVxuXG4gIHByaXZhdGUgZW5kVGFwZSgpIHtcbiAgICB0aGlzLnN0YXRlLmdyYWRpZW50RGVwdGgtLTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHNjb3BlLiBVc2UgdGhpcyB3aXRoIGVuZFNjb3BlKCkgdG8gYWNoaWV2ZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5XG4gICAqIGFzIHNjb3BlKCkgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBmdW5jdGlvbiBjbG9zdXJlLlxuICAgKi9cbiAgc3RhcnRTY29wZShuYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2NvcGVJbmZvOiBTY29wZVN0YXRlID0ge1xuICAgICAgdHJhY2s6IFtdLFxuICAgICAgbmFtZTogJ3VubmFtZWQgc2NvcGUnLFxuICAgICAgaWQ6IHRoaXMuc3RhdGUubmV4dFNjb3BlSWQrK1xuICAgIH07XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHNjb3BlSW5mby5uYW1lID0gbmFtZTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5zY29wZVN0YWNrLnB1c2goc2NvcGVJbmZvKTtcbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlID0gc2NvcGVJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZCBhIHNjb3BlLiBVc2UgdGhpcyB3aXRoIHN0YXJ0U2NvcGUoKSB0byBhY2hpZXZlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHlcbiAgICogYXMgc2NvcGUoKSB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGZ1bmN0aW9uIGNsb3N1cmUuXG4gICAqL1xuICBlbmRTY29wZShyZXN1bHQ/OiBUZW5zb3JDb250YWluZXIpIHtcbiAgICBjb25zdCB0ZW5zb3JzVG9UcmFja0luUGFyZW50ID0gZ2V0VGVuc29yc0luQ29udGFpbmVyKHJlc3VsdCk7XG4gICAgY29uc3QgdGVuc29yc1RvVHJhY2tJblBhcmVudFNldCA9XG4gICAgICAgIG5ldyBTZXQodGVuc29yc1RvVHJhY2tJblBhcmVudC5tYXAodCA9PiB0LmlkKSk7XG5cbiAgICAvLyBEaXNwb3NlIHRoZSBhcnJheXMgdHJhY2tlZCBpbiB0aGlzIHNjb3BlLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGF0ZS5hY3RpdmVTY29wZS50cmFjay5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGVuc29yID0gdGhpcy5zdGF0ZS5hY3RpdmVTY29wZS50cmFja1tpXTtcbiAgICAgIGlmICghdGVuc29yLmtlcHQgJiYgIXRlbnNvcnNUb1RyYWNrSW5QYXJlbnRTZXQuaGFzKHRlbnNvci5pZCkpIHtcbiAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbGRTY29wZSA9IHRoaXMuc3RhdGUuc2NvcGVTdGFjay5wb3AoKTtcbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlID0gdGhpcy5zdGF0ZS5zY29wZVN0YWNrLmxlbmd0aCA9PT0gMCA/XG4gICAgICAgIG51bGwgOlxuICAgICAgICB0aGlzLnN0YXRlLnNjb3BlU3RhY2tbdGhpcy5zdGF0ZS5zY29wZVN0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgLy8gVHJhY2sgdGhlIGN1cnJlbnQgcmVzdWx0IGluIHRoZSBwYXJlbnQgc2NvcGUuXG4gICAgdGVuc29yc1RvVHJhY2tJblBhcmVudC5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICAvLyBPbmx5IHRyYWNrIHRoZSB0ZW5zb3IgaWYgd2FzIGFsbG9jYXRlZCBpbiB0aGUgaW5uZXIgc2NvcGUgYW5kIGlzIG5vdFxuICAgICAgLy8gZ2xvYmFsbHkga2VwdC5cbiAgICAgIGlmICghdGVuc29yLmtlcHQgJiYgdGVuc29yLnNjb3BlSWQgPT09IG9sZFNjb3BlLmlkKSB7XG4gICAgICAgIHRoaXMudHJhY2sodGVuc29yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGdyYWRpZW50cyBvZiBgZmAgd2l0aCByZXNwZWN0IHRvIGVhY2ggb2YgdGhlIGB4c2AuIFRoZSBncmFkaWVudHNcbiAgICogcmV0dXJuZWQgYXJlIG9mIHRoZSBzYW1lIGxlbmd0aCBhcyBgeHNgLCBidXQgc29tZSBtaWdodCBiZSBudWxsIGlmIGBmYFxuICAgKiB3YXMgbm90IGEgZnVuY3Rpb24gb2YgdGhhdCBgeGAuIEl0IGFsc28gdGFrZXMgb3B0aW9uYWwgZHkgdG8gbXVsdGlwbHkgdGhlXG4gICAqIGdyYWRpZW50LCB3aGljaCBkZWZhdWx0cyB0byBgMWAuXG4gICAqL1xuICBncmFkaWVudHM8VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgICBmOiAoKSA9PiBULCB4czogVGVuc29yW10sIGR5PzogVCxcbiAgICAgIGFsbG93Tm9HcmFkaWVudHMgPSBmYWxzZSk6IHt2YWx1ZTogVCwgZ3JhZHM6IFRlbnNvcltdfSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHhzLmxlbmd0aCA+IDAsICgpID0+ICdncmFkaWVudHMoKSByZWNlaXZlZCBhbiBlbXB0eSBsaXN0IG9mIHhzLicpO1xuICAgIGlmIChkeSAhPSBudWxsICYmIGR5LmR0eXBlICE9PSAnZmxvYXQzMicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZHkgbXVzdCBoYXZlICdmbG9hdDMyJyBkdHlwZSwgYnV0IGhhcyAnJHtkeS5kdHlwZX0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgeSA9IHRoaXMuc2NvcGVkUnVuKFxuICAgICAgICAoKSA9PiB0aGlzLnN0YXJ0VGFwZSgpLCAoKSA9PiB0aGlzLmVuZFRhcGUoKSxcbiAgICAgICAgKCkgPT4gdGhpcy50aWR5KCdmb3J3YXJkJywgZikpO1xuXG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHkgaW5zdGFuY2VvZiBUZW5zb3IsXG4gICAgICAgICgpID0+ICdUaGUgcmVzdWx0IHkgcmV0dXJuZWQgYnkgZigpIG11c3QgYmUgYSB0ZW5zb3IuJyk7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgbm9kZXMgdGhhdCBkb24ndCBjb25uZWN0IHggPT4geS5cbiAgICBjb25zdCBmaWx0ZXJlZFRhcGUgPSBnZXRGaWx0ZXJlZE5vZGVzWFRvWSh0aGlzLnN0YXRlLmFjdGl2ZVRhcGUsIHhzLCB5KTtcbiAgICBpZiAoIWFsbG93Tm9HcmFkaWVudHMgJiYgZmlsdGVyZWRUYXBlLmxlbmd0aCA9PT0gMCAmJiB4cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb21wdXRlIGdyYWRpZW50IG9mIHk9Zih4KSB3aXRoIHJlc3BlY3QgdG8geC4gTWFrZSBzdXJlICcgK1xuICAgICAgICAgICd0aGF0IHRoZSBmIHlvdSBwYXNzZWQgZW5jbG9zZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBsZWFkIGZyb20geCAnICtcbiAgICAgICAgICAndG8geS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50aWR5KCdiYWNrd2FyZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGFjY3VtdWxhdGVkR3JhZGllbnRNYXA6IHtbdGVuc29ySWQ6IG51bWJlcl06IFRlbnNvcn0gPSB7fTtcbiAgICAgIGFjY3VtdWxhdGVkR3JhZGllbnRNYXBbeS5pZF0gPSAoZHkgPT0gbnVsbCkgPyBvbmVzKHkuc2hhcGUpIDogZHk7XG5cbiAgICAgIC8vIEJhY2twcm9wIGdyYWRpZW50cyB0aHJvdWdoIHRoZSBmaWx0ZXJlZCBub2Rlcy5cbiAgICAgIGJhY2twcm9wYWdhdGVHcmFkaWVudHMoXG4gICAgICAgICAgYWNjdW11bGF0ZWRHcmFkaWVudE1hcCwgZmlsdGVyZWRUYXBlLFxuICAgICAgICAgIC8vIFBhc3MgdGhlIHRpZHkgZnVuY3Rpb24gdG8gYXZvaWQgY2lyY3VsYXIgZGVwIHdpdGggYHRhcGUudHNgLlxuICAgICAgICAgIGYgPT4gdGhpcy50aWR5KGYgYXMgU2NvcGVGbjxUZW5zb3I+KSxcbiAgICAgICAgICAvLyBQYXNzIGFuIGFkZCBmdW5jdGlvbiB0byBhdm9pZGUgYSBjaXJjdWxhciBkZXAgd2l0aCBgdGFwZS50c2AuXG4gICAgICAgICAgYWRkKTtcbiAgICAgIGNvbnN0IGdyYWRzID0geHMubWFwKHggPT4gYWNjdW11bGF0ZWRHcmFkaWVudE1hcFt4LmlkXSk7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmdyYWRpZW50RGVwdGggPT09IDApIHtcbiAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGFyZSBub3QgY29tcHV0aW5nIGhpZ2hlci1vcmRlciBncmFkaWVudHNcbiAgICAgICAgLy8gYW5kIGNhbiBjbGVhbiB1cCB0aGUgdGFwZS5cbiAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVUYXBlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCB0ZW5zb3Igb2Ygbm9kZS5zYXZlZCkge1xuICAgICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVRhcGUgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt2YWx1ZTogeSwgZ3JhZHN9O1xuICAgIH0pO1xuICB9XG5cbiAgY3VzdG9tR3JhZDxUIGV4dGVuZHMgVGVuc29yPihmOiBDdXN0b21HcmFkaWVudEZ1bmM8VD4pOlxuICAgICAgKC4uLmFyZ3M6IEFycmF5PFRlbnNvcnxHcmFkU2F2ZUZ1bmM+KSA9PiBUIHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgdXRpbC5pc0Z1bmN0aW9uKGYpLFxuICAgICAgICAoKSA9PiAnVGhlIGYgcGFzc2VkIGluIGN1c3RvbUdyYWQoZikgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIHJldHVybiAoLi4uaW5wdXRzOiBUZW5zb3JbXSk6IFQgPT4ge1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgaW5wdXRzLmV2ZXJ5KHQgPT4gdCBpbnN0YW5jZW9mIFRlbnNvciksXG4gICAgICAgICAgKCkgPT4gJ1RoZSBhcmdzIHBhc3NlZCBpbiBjdXN0b21HcmFkKGYpKHgxLCB4MiwuLi4pIG11c3QgYWxsIGJlICcgK1xuICAgICAgICAgICAgICAndGVuc29ycycpO1xuXG4gICAgICBsZXQgcmVzOiB7XG4gICAgICAgIHZhbHVlOiBULFxuICAgICAgICBncmFkRnVuYzogKGR5OiBULCBzYXZlZDogVGVuc29yW10pID0+IFRlbnNvciB8IFRlbnNvcltdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlucHV0TWFwOiBOYW1lZFRlbnNvck1hcCA9IHt9O1xuICAgICAgaW5wdXRzLmZvckVhY2goKGlucHV0LCBpKSA9PiB7XG4gICAgICAgIGlucHV0TWFwW2ldID0gaW5wdXQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZm9yd2FyZEZ1bmM6IEZvcndhcmRGdW5jPFQ+ID0gKF8sIHNhdmUpID0+IHtcbiAgICAgICAgcmVzID0gZiguLi5bLi4uaW5wdXRzLCBzYXZlXSk7XG4gICAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgICAgcmVzLnZhbHVlIGluc3RhbmNlb2YgVGVuc29yLFxuICAgICAgICAgICAgKCkgPT4gJ1RoZSBmdW5jdGlvbiBmIHBhc3NlZCBpbiBjdXN0b21HcmFkKGYpIG11c3QgcmV0dXJuIGFuICcgK1xuICAgICAgICAgICAgICAgICdvYmplY3Qgd2hlcmUgYG9iai52YWx1ZWAgaXMgYSB0ZW5zb3InKTtcbiAgICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgICB1dGlsLmlzRnVuY3Rpb24ocmVzLmdyYWRGdW5jKSxcbiAgICAgICAgICAgICgpID0+ICdUaGUgZnVuY3Rpb24gZiBwYXNzZWQgaW4gY3VzdG9tR3JhZChmKSBtdXN0IHJldHVybiBhbiAnICtcbiAgICAgICAgICAgICAgICAnb2JqZWN0IHdoZXJlIGBvYmouZ3JhZEZ1bmNgIGlzIGEgZnVuY3Rpb24uJyk7XG4gICAgICAgIHJldHVybiByZXMudmFsdWU7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBiYWNrd2FyZHNGdW5jID0gKGR5OiBULCBzYXZlZDogVGVuc29yW10pID0+IHtcbiAgICAgICAgY29uc3QgZ3JhZFJlcyA9IHJlcy5ncmFkRnVuYyhkeSwgc2F2ZWQpO1xuICAgICAgICBjb25zdCBncmFkczogVGVuc29yW10gPSBBcnJheS5pc0FycmF5KGdyYWRSZXMpID8gZ3JhZFJlcyA6IFtncmFkUmVzXTtcbiAgICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgICBncmFkcy5sZW5ndGggPT09IGlucHV0cy5sZW5ndGgsXG4gICAgICAgICAgICAoKSA9PiAnVGhlIGZ1bmN0aW9uIGYgcGFzc2VkIGluIGN1c3RvbUdyYWQoZikgbXVzdCByZXR1cm4gYW4gJyArXG4gICAgICAgICAgICAgICAgJ29iamVjdCB3aGVyZSBgb2JqLmdyYWRGdW5jYCBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyAnICtcbiAgICAgICAgICAgICAgICAndGhlIHNhbWUgbnVtYmVyIG9mIHRlbnNvcnMgYXMgaW5wdXRzIHBhc3NlZCB0byBmKC4uLikuJyk7XG4gICAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgICAgZ3JhZHMuZXZlcnkodCA9PiB0IGluc3RhbmNlb2YgVGVuc29yKSxcbiAgICAgICAgICAgICgpID0+ICdUaGUgZnVuY3Rpb24gZiBwYXNzZWQgaW4gY3VzdG9tR3JhZChmKSBtdXN0IHJldHVybiBhbiAnICtcbiAgICAgICAgICAgICAgICAnb2JqZWN0IHdoZXJlIGBvYmouZ3JhZEZ1bmNgIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zICcgK1xuICAgICAgICAgICAgICAgICdhIGxpc3Qgb2Ygb25seSB0ZW5zb3JzLicpO1xuICAgICAgICBjb25zdCBncmFkTWFwOiB7W2tleTogc3RyaW5nXTogKCkgPT4gVGVuc29yfSA9IHt9O1xuICAgICAgICBncmFkcy5mb3JFYWNoKChncmFkLCBpKSA9PiB7XG4gICAgICAgICAgZ3JhZE1hcFtpXSA9ICgpID0+IGdyYWQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ3JhZE1hcDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLnJ1bktlcm5lbEZ1bmMoe1xuICAgICAgICBmb3J3YXJkRnVuYyxcbiAgICAgICAgYmFja3dhcmRzRnVuYyxcbiAgICAgICAgaW5wdXRzOiBpbnB1dE1hcCxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICByZWFkU3luYyhkYXRhSWQ6IERhdGFJZCk6IEJhY2tlbmRWYWx1ZXMge1xuICAgIC8vIFJvdXRlIHRoZSByZWFkIHRvIHRoZSBjb3JyZWN0IGJhY2tlbmQuXG4gICAgY29uc3QgaW5mbyA9IHRoaXMuc3RhdGUudGVuc29ySW5mby5nZXQoZGF0YUlkKTtcbiAgICByZXR1cm4gaW5mby5iYWNrZW5kLnJlYWRTeW5jKGRhdGFJZCk7XG4gIH1cbiAgcmVhZChkYXRhSWQ6IERhdGFJZCk6IFByb21pc2U8QmFja2VuZFZhbHVlcz4ge1xuICAgIC8vIFJvdXRlIHRoZSByZWFkIHRvIHRoZSBjb3JyZWN0IGJhY2tlbmQuXG4gICAgY29uc3QgaW5mbyA9IHRoaXMuc3RhdGUudGVuc29ySW5mby5nZXQoZGF0YUlkKTtcbiAgICByZXR1cm4gaW5mby5iYWNrZW5kLnJlYWQoZGF0YUlkKTtcbiAgfVxuXG4gIHJlYWRUb0dQVShkYXRhSWQ6IERhdGFJZCwgb3B0aW9ucz86IERhdGFUb0dQVU9wdGlvbnMpOiBHUFVEYXRhIHtcbiAgICAvLyBSb3V0ZSB0aGUgcmVhZCB0byB0aGUgY29ycmVjdCBiYWNrZW5kLlxuICAgIGNvbnN0IGluZm8gPSB0aGlzLnN0YXRlLnRlbnNvckluZm8uZ2V0KGRhdGFJZCk7XG4gICAgcmV0dXJuIGluZm8uYmFja2VuZC5yZWFkVG9HUFUoZGF0YUlkLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHRpbWUocXVlcnk6ICgpID0+IHZvaWQpOiBQcm9taXNlPFRpbWluZ0luZm8+IHtcbiAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgIGNvbnN0IHRpbWluZ0luZm8gPSBhd2FpdCB0aGlzLmJhY2tlbmQudGltZShxdWVyeSkgYXMgVGltaW5nSW5mbztcbiAgICB0aW1pbmdJbmZvLndhbGxNcyA9IG5vdygpIC0gc3RhcnQ7XG4gICAgcmV0dXJuIHRpbWluZ0luZm87XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tzIGEgVGVuc29yIGluIHRoZSBjdXJyZW50IHNjb3BlIHRvIGJlIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cFxuICAgKiB3aGVuIHRoZSBjdXJyZW50IHNjb3BlIGVuZHMsIGFuZCByZXR1cm5zIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHJlc3VsdCBUaGUgVGVuc29yIHRvIHRyYWNrIGluIHRoZSBjdXJyZW50IHNjb3BlLlxuICAgKi9cbiAgcHJpdmF0ZSB0cmFjazxUIGV4dGVuZHMgVGVuc29yPihyZXN1bHQ6IFQpOiBUIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5hY3RpdmVTY29wZSAhPSBudWxsKSB7XG4gICAgICByZXN1bHQuc2NvcGVJZCA9IHRoaXMuc3RhdGUuYWN0aXZlU2NvcGUuaWQ7XG4gICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlLnRyYWNrLnB1c2gocmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0IHJlZ2lzdGVyZWRWYXJpYWJsZXMoKTogTmFtZWRWYXJpYWJsZU1hcCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucmVnaXN0ZXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVuZ2luZSBzdGF0ZS4gUmVtb3ZlcyBhbGwgYmFja2VuZHMgYnV0IGRvZXMgbm90IHJlbW92ZVxuICAgKiByZWdpc3RlcmVkIGJhY2tlbmQgZmFjdG9yaWVzLlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgLy8gTWFrZSBhbnkgcGVuZGluZyBwcm9taXNlIG9ic29sZXRlLlxuICAgIHRoaXMucGVuZGluZ0JhY2tlbmRJbml0SWQrKztcblxuICAgIHRoaXMuc3RhdGUuZGlzcG9zZSgpO1xuICAgIHRoaXMuRU5WLnJlc2V0KCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBFbmdpbmVTdGF0ZSgpO1xuXG4gICAgZm9yIChjb25zdCBiYWNrZW5kTmFtZSBpbiB0aGlzLnJlZ2lzdHJ5KSB7XG4gICAgICB0aGlzLmRpc3Bvc2VSZWdpc3RlcmVkS2VybmVscyhiYWNrZW5kTmFtZSk7XG4gICAgICB0aGlzLnJlZ2lzdHJ5W2JhY2tlbmROYW1lXS5kaXNwb3NlKCk7XG4gICAgICBkZWxldGUgdGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV07XG4gICAgfVxuICAgIHRoaXMuYmFja2VuZE5hbWUgPSBudWxsO1xuICAgIHRoaXMuYmFja2VuZEluc3RhbmNlID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25lcyhzaGFwZTogbnVtYmVyW10pOiBUZW5zb3Ige1xuICBjb25zdCB2YWx1ZXMgPSBtYWtlT25lc1R5cGVkQXJyYXkoc2l6ZUZyb21TaGFwZShzaGFwZSksICdmbG9hdDMyJyk7XG4gIHJldHVybiBFTkdJTkUubWFrZVRlbnNvcih2YWx1ZXMsIHNoYXBlLCAnZmxvYXQzMicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JNYWtlRW5naW5lKCk6IEVuZ2luZSB7XG4gIGNvbnN0IG5zID0gZ2V0R2xvYmFsTmFtZXNwYWNlKCkgYXMgdW5rbm93biBhcyB7X3RmZW5naW5lOiBFbmdpbmV9O1xuICBpZiAobnMuX3RmZW5naW5lID09IG51bGwpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IG5ldyBFbnZpcm9ubWVudChucyk7XG4gICAgbnMuX3RmZW5naW5lID0gbmV3IEVuZ2luZShlbnZpcm9ubWVudCk7XG4gIH1cbiAgc2V0RW52aXJvbm1lbnRHbG9iYWwobnMuX3RmZW5naW5lLkVOVik7XG5cbiAgLy8gVGVsbCB0aGUgY3VycmVudCB0ZW5zb3IgaW50ZXJmYWNlIHRoYXQgdGhlIGdsb2JhbCBlbmdpbmUgaXMgcmVzcG9uc2libGVcbiAgLy8gZm9yIHRyYWNraW5nLlxuICBzZXRUZW5zb3JUcmFja2VyKCgpID0+IG5zLl90ZmVuZ2luZSk7XG4gIHJldHVybiBucy5fdGZlbmdpbmU7XG59XG5cbmV4cG9ydCBjb25zdCBFTkdJTkUgPSBnZXRPck1ha2VFbmdpbmUoKTtcblxuLyoqXG4gKiBBIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhZGQgb3AgZm9yIHVzZSB3aXRoaW4gZW5naW5lIGFuZCB0YXBlLlxuICpcbiAqIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIGFkZC50cyBhbmQgZW5naW5lLlxuICogSXQgaXMgZXhwb3J0ZWQgdG8gYmUgYXZhaWxhYmxlIGluIHRhcGUgdGVzdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGQoYTogVGVuc29yLCBiOiBUZW5zb3IpOiBUZW5zb3Ige1xuICAvLyBXZSBkdXBsaWNhdGUgQWRkIGhlcmUgdG8gYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGggYWRkLnRzLlxuICBjb25zdCBpbnB1dHMgPSB7YSwgYn07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEFkZCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from './util';\n/**\n * Computes a list of TapeNodes that connect x to y, filtering everything else\n * out and preserving the order of the original tape elements.\n *\n * @param tape The tape elements to filter.\n * @param xs The input Tensors.\n * @param y The output Tensor.\n */\nexport function getFilteredNodesXToY(tape, xs, y) {\n // Forward pass to compute all the nodes and Tensors that are transitively a\n // function of x.\n const tensorsFromX = {};\n const nodesFromX = {};\n for (let i = 0; i < xs.length; i++) {\n tensorsFromX[xs[i].id] = true;\n }\n for (let i = 0; i < tape.length; i++) {\n const node = tape[i];\n const nodeInputs = node.inputs;\n for (const inputName in nodeInputs) {\n const input = nodeInputs[inputName];\n let anyInputFromX = false;\n for (let j = 0; j < xs.length; j++) {\n if (tensorsFromX[input.id]) {\n node.outputs.forEach(output => tensorsFromX[output.id] = true);\n anyInputFromX = true;\n nodesFromX[node.id] = true;\n break;\n }\n }\n if (anyInputFromX) {\n break;\n }\n }\n }\n // Backward pass to find all of the nodes and Tensors that lead to y.\n const tensorsLeadToY = {};\n tensorsLeadToY[y.id] = true;\n const nodesToY = {};\n for (let i = tape.length - 1; i >= 0; i--) {\n const node = tape[i];\n const nodeInputs = node.inputs;\n // If any of the outputs lead to y, mark all of the inputs as leading to y.\n for (let j = 0; j < node.outputs.length; j++) {\n if (tensorsLeadToY[node.outputs[j].id]) {\n for (const inputName in nodeInputs) {\n tensorsLeadToY[nodeInputs[inputName].id] = true;\n nodesToY[node.id] = true;\n }\n break;\n }\n }\n }\n // Return the paths that come from x and lead to y.\n const filteredTape = [];\n for (let i = 0; i < tape.length; i++) {\n const node = tape[i];\n if (nodesFromX[node.id] && nodesToY[node.id]) {\n // Prune the inputs from the node that aren't a function of x.\n const prunedInputs = {};\n for (const inputName in node.inputs) {\n const nodeInput = node.inputs[inputName];\n if (tensorsFromX[nodeInput.id]) {\n prunedInputs[inputName] = nodeInput;\n }\n }\n // Copy the node and overwrite inputsAndArgs to the pruned version.\n const prunedNode = Object.assign({}, node);\n prunedNode.inputs = prunedInputs;\n prunedNode.outputs = node.outputs;\n filteredTape.push(prunedNode);\n }\n }\n return filteredTape;\n}\n/**\n * Backpropagate gradients through the filtered TapeNodes.\n *\n * @param tensorAccumulatedGradientMap A map of Tensor to its gradient. This map\n * is mutated by this method.\n * @param filteredTape The filtered TapeNodes to backprop through.\n */\nexport function backpropagateGradients(tensorAccumulatedGradientMap, filteredTape, tidy, add) {\n // Walk the tape backward and keep a map of Tensor to its gradient.\n for (let i = filteredTape.length - 1; i >= 0; i--) {\n const node = filteredTape[i];\n const dys = [];\n node.outputs.forEach(o => {\n const gradTensor = tensorAccumulatedGradientMap[o.id];\n if (gradTensor != null) {\n dys.push(gradTensor);\n }\n else {\n // This particular output is not in the back-propagation subgraph, so it\n // does not affect the final output, thus we put null for its dy.\n dys.push(null);\n }\n });\n if (node.gradient == null) {\n throw new Error(`Cannot compute gradient: gradient function not found ` +\n `for ${node.kernelName}.`);\n }\n // Backprop dy through this node and accumulate gradients over the inputs.\n const inputGradients = node.gradient(dys);\n for (const inputName in node.inputs) {\n if (!(inputName in inputGradients)) {\n throw new Error(`Cannot backprop through input ${inputName}. ` +\n `Available gradients found: ${Object.keys(inputGradients)}.`);\n }\n // Call the gradient function.\n const dx = tidy(() => inputGradients[inputName]());\n if (dx.dtype !== 'float32') {\n throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input ` +\n `${inputName} must have 'float32' dtype, but has '${dx.dtype}'`);\n }\n const x = node.inputs[inputName];\n if (!util.arraysEqual(dx.shape, x.shape)) {\n throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input ` +\n `'${inputName}' has shape '${dx.shape}', which does not match ` +\n `the shape of the input '${x.shape}'`);\n }\n if (tensorAccumulatedGradientMap[x.id] == null) {\n tensorAccumulatedGradientMap[x.id] = dx;\n }\n else {\n const curGradient = tensorAccumulatedGradientMap[x.id];\n tensorAccumulatedGradientMap[x.id] = add(curGradient, dx);\n curGradient.dispose();\n }\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvdGFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQztBQWdCL0I7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsSUFBZ0IsRUFBRSxFQUFZLEVBQUUsQ0FBUztJQUMzQyw0RUFBNEU7SUFDNUUsaUJBQWlCO0lBQ2pCLE1BQU0sWUFBWSxHQUFrQyxFQUFFLENBQUM7SUFDdkQsTUFBTSxVQUFVLEdBQWdDLEVBQUUsQ0FBQztJQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUMvQjtJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9CLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVwQyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFB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QUMsQ0FBQztZQUNuRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO2dCQUMxQixNQUFNLElBQUksS0FBSyxDQUNYLDRCQUNJLElBQUksQ0FBQyxVQUFVLDBCQUEwQjtvQkFDN0MsR0FBRyxTQUFTLHdDQUF3QyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUN0RTtZQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ1gsNEJBQ0ksSUFBSSxDQUFDLFVBQVUsMEJBQTBCO29CQUM3QyxJQUFJLFNBQVMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLDBCQUEwQjtvQkFDL0QsMkJBQTJCLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2FBQzVDO1lBRUQsSUFBSSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUM5Qyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3pDO2lCQUFNO2dCQUNMLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzFELFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN2QjtTQUNGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhcGVOb2RlIHtcbiAgaWQ6IG51bWJlcjtcbiAga2VybmVsTmFtZTogc3RyaW5nO1xuICBvdXRwdXRzOiBUZW5zb3JbXTtcbiAgaW5wdXRzOiBOYW1lZFRlbnNvck1hcDtcbiAgLy8gT3B0aW9uYWwgcGFyYW1zLCBkZWZpbmVkIG9ubHkgZm9yIG9wcyB3aXRoIGdyYWRpZW50IGltcGwuXG4gIGdyYWRpZW50PzogKGR5czogVGVuc29yW10pID0+IE5hbWVkR3JhZGllbnRNYXA7XG4gIHNhdmVkPzogVGVuc29yW107XG59XG5cbmV4cG9ydCB0eXBlIE5hbWVkR3JhZGllbnRNYXAgPSB7XG4gIFtpbnB1dE5hbWU6IHN0cmluZ106ICgpID0+IFRlbnNvcjtcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgYSBsaXN0IG9mIFRhcGVOb2RlcyB0aGF0IGNvbm5lY3QgeCB0byB5LCBmaWx0ZXJpbmcgZXZlcnl0aGluZyBlbHNlXG4gKiBvdXQgYW5kIHByZXNlcnZpbmcgdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCB0YXBlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB0YXBlIFRoZSB0YXBlIGVsZW1lbnRzIHRvIGZpbHRlci5cbiAqIEBwYXJhbSB4cyBUaGUgaW5wdXQgVGVuc29ycy5cbiAqIEBwYXJhbSB5IFRoZSBvdXRwdXQgVGVuc29yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyZWROb2Rlc1hUb1koXG4gICAgdGFwZTogVGFwZU5vZGVbXSwgeHM6IFRlbnNvcltdLCB5OiBUZW5zb3IpOiBUYXBlTm9kZVtdIHtcbiAgLy8gRm9yd2FyZCBwYXNzIHRvIGNvbXB1dGUgYWxsIHRoZSBub2RlcyBhbmQgVGVuc29ycyB0aGF0IGFyZSB0cmFuc2l0aXZlbHkgYVxuICAvLyBmdW5jdGlvbiBvZiB4LlxuICBjb25zdCB0ZW5zb3JzRnJvbVg6IHtbdGVuc29ySWQ6IG51bWJlcl06IGJvb2xlYW59ID0ge307XG4gIGNvbnN0IG5vZGVzRnJvbVg6IHtbbm9kZUlkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGVuc29yc0Zyb21YW3hzW2ldLmlkXSA9IHRydWU7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcGUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBub2RlID0gdGFwZVtpXTtcbiAgICBjb25zdCBub2RlSW5wdXRzID0gbm9kZS5pbnB1dHM7XG4gICAgZm9yIChjb25zdCBpbnB1dE5hbWUgaW4gbm9kZUlucHV0cykge1xuICAgICAgY29uc3QgaW5wdXQgPSBub2RlSW5wdXRzW2lucHV0TmFtZV07XG5cbiAgICAgIGxldCBhbnlJbnB1dEZyb21YID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHhzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICh0ZW5zb3JzRnJvbVhbaW5wdXQuaWRdKSB7XG4gICAgICAgICAgbm9kZS5vdXRwdXRzLmZvckVhY2gob3V0cHV0ID0+IHRlbnNvcnNGcm9tWFtvdXRwdXQuaWRdID0gdHJ1ZSk7XG4gICAgICAgICAgYW55SW5wdXRGcm9tWCA9IHRydWU7XG4gICAgICAgICAgbm9kZXNGcm9tWFtub2RlLmlkXSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFueUlucHV0RnJvbVgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQmFja3dhcmQgcGFzcyB0byBmaW5kIGFsbCBvZiB0aGUgbm9kZXMgYW5kIFRlbnNvcnMgdGhhdCBsZWFkIHRvIHkuXG4gIGNvbnN0IHRlbnNvcnNMZWFkVG9ZOiB7W3RlbnNvcklkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuICB0ZW5zb3JzTGVhZFRvWVt5LmlkXSA9IHRydWU7XG4gIGNvbnN0IG5vZGVzVG9ZOiB7W25vZGVJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcblxuICBmb3IgKGxldCBpID0gdGFwZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IG5vZGUgPSB0YXBlW2ldO1xuICAgIGNvbnN0IG5vZGVJbnB1dHMgPSBub2RlLmlucHV0cztcblxuICAgIC8vIElmIGFueSBvZiB0aGUgb3V0cHV0cyBsZWFkIHRvIHksIG1hcmsgYWxsIG9mIHRoZSBpbnB1dHMgYXMgbGVhZGluZyB0byB5LlxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZS5vdXRwdXRzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAodGVuc29yc0xlYWRUb1lbbm9kZS5vdXRwdXRzW2pdLmlkXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlucHV0TmFtZSBpbiBub2RlSW5wdXRzKSB7XG4gICAgICAgICAgdGVuc29yc0xlYWRUb1lbbm9kZUlucHV0c1tpbnB1dE5hbWVdLmlkXSA9IHRydWU7XG4gICAgICAgICAgbm9kZXNUb1lbbm9kZS5pZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcGF0aHMgdGhhdCBjb21lIGZyb20geCBhbmQgbGVhZCB0byB5LlxuICBjb25zdCBmaWx0ZXJlZFRhcGU6IFRhcGVOb2RlW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRhcGVbaV07XG5cbiAgICBpZiAobm9kZXNGcm9tWFtub2RlLmlkXSAmJiBub2Rlc1RvWVtub2RlLmlkXSkge1xuICAgICAgLy8gUHJ1bmUgdGhlIGlucHV0cyBmcm9tIHRoZSBub2RlIHRoYXQgYXJlbid0IGEgZnVuY3Rpb24gb2YgeC5cbiAgICAgIGNvbnN0IHBydW5lZElucHV0czoge1tpbnB1dE5hbWU6IHN0cmluZ106IFRlbnNvcn0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXROYW1lIGluIG5vZGUuaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IG5vZGVJbnB1dCA9IG5vZGUuaW5wdXRzW2lucHV0TmFtZV07XG4gICAgICAgIGlmICh0ZW5zb3JzRnJvbVhbbm9kZUlucHV0LmlkXSkge1xuICAgICAgICAgIHBydW5lZElucHV0c1tpbnB1dE5hbWVdID0gbm9kZUlucHV0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvcHkgdGhlIG5vZGUgYW5kIG92ZXJ3cml0ZSBpbnB1dHNBbmRBcmdzIHRvIHRoZSBwcnVuZWQgdmVyc2lvbi5cbiAgICAgIGNvbnN0IHBydW5lZE5vZGUgPSBPYmplY3QuYXNzaWduKHt9LCBub2RlKTtcbiAgICAgIHBydW5lZE5vZGUuaW5wdXRzID0gcHJ1bmVkSW5wdXRzO1xuICAgICAgcHJ1bmVkTm9kZS5vdXRwdXRzID0gbm9kZS5vdXRwdXRzO1xuXG4gICAgICBmaWx0ZXJlZFRhcGUucHVzaChwcnVuZWROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRUYXBlO1xufVxuXG4vKipcbiAqIEJhY2twcm9wYWdhdGUgZ3JhZGllbnRzIHRocm91Z2ggdGhlIGZpbHRlcmVkIFRhcGVOb2Rlcy5cbiAqXG4gKiBAcGFyYW0gdGVuc29yQWNjdW11bGF0ZWRHcmFkaWVudE1hcCBBIG1hcCBvZiBUZW5zb3IgdG8gaXRzIGdyYWRpZW50LiBUaGlzIG1hcFxuICogaXMgbXV0YXRlZCBieSB0aGlzIG1ldGhvZC5cbiAqIEBwYXJhbSBmaWx0ZXJlZFRhcGUgVGhlIGZpbHRlcmVkIFRhcGVOb2RlcyB0byBiYWNrcHJvcCB0aHJvdWdoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFja3Byb3BhZ2F0ZUdyYWRpZW50cyhcbiAgICB0ZW5zb3JBY2N1bXVsYXRlZEdyYWRpZW50TWFwOiB7W3RlbnNvcklkOiBudW1iZXJdOiBUZW5zb3J9LFxuICAgIGZpbHRlcmVkVGFwZTogVGFwZU5vZGVbXSwgdGlkeTogKGY6IEZ1bmN0aW9uKSA9PiBUZW5zb3IsXG4gICAgYWRkOiAoYTogVGVuc29yLCBiOiBUZW5zb3IpID0+IFRlbnNvcikge1xuICAvLyBXYWxrIHRoZSB0YXBlIGJhY2t3YXJkIGFuZCBrZWVwIGEgbWFwIG9mIFRlbnNvciB0byBpdHMgZ3JhZGllbnQuXG4gIGZvciAobGV0IGkgPSBmaWx0ZXJlZFRhcGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBub2RlID0gZmlsdGVyZWRUYXBlW2ldO1xuXG4gICAgY29uc3QgZHlzOiBUZW5zb3JbXSA9IFtdO1xuICAgIG5vZGUub3V0cHV0cy5mb3JFYWNoKG8gPT4ge1xuICAgICAgY29uc3QgZ3JhZFRlbnNvciA9IHRlbnNvckFjY3VtdWxhdGVkR3JhZGllbnRNYXBbby5pZF07XG4gICAgICBpZiAoZ3JhZFRlbnNvciAhPSBudWxsKSB7XG4gICAgICAgIGR5cy5wdXNoKGdyYWRUZW5zb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBwYXJ0aWN1bGFyIG91dHB1dCBpcyBub3QgaW4gdGhlIGJhY2stcHJvcGFnYXRpb24gc3ViZ3JhcGgsIHNvIGl0XG4gICAgICAgIC8vIGRvZXMgbm90IGFmZmVjdCB0aGUgZmluYWwgb3V0cHV0LCB0aHVzIHdlIHB1dCBudWxsIGZvciBpdHMgZHkuXG4gICAgICAgIGR5cy5wdXNoKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG5vZGUuZ3JhZGllbnQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgY29tcHV0ZSBncmFkaWVudDogZ3JhZGllbnQgZnVuY3Rpb24gbm90IGZvdW5kIGAgK1xuICAgICAgICAgIGBmb3IgJHtub2RlLmtlcm5lbE5hbWV9LmApO1xuICAgIH1cblxuICAgIC8vIEJhY2twcm9wIGR5IHRocm91Z2ggdGhpcyBub2RlIGFuZCBhY2N1bXVsYXRlIGdyYWRpZW50cyBvdmVyIHRoZSBpbnB1dHMuXG4gICAgY29uc3QgaW5wdXRHcmFkaWVudHMgPSBub2RlLmdyYWRpZW50KGR5cyk7XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0TmFtZSBpbiBub2RlLmlucHV0cykge1xuICAgICAgaWYgKCEoaW5wdXROYW1lIGluIGlucHV0R3JhZGllbnRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IGJhY2twcm9wIHRocm91Z2ggaW5wdXQgJHtpbnB1dE5hbWV9LiBgICtcbiAgICAgICAgICAgIGBBdmFpbGFibGUgZ3JhZGllbnRzIGZvdW5kOiAke09iamVjdC5rZXlzKGlucHV0R3JhZGllbnRzKX0uYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgdGhlIGdyYWRpZW50IGZ1bmN0aW9uLlxuICAgICAgY29uc3QgZHggPSB0aWR5KCgpID0+IGlucHV0R3JhZGllbnRzW2lucHV0TmFtZV0oKSk7XG4gICAgICBpZiAoZHguZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRXJyb3IgaW4gZ3JhZGllbnQgZm9yIG9wICR7XG4gICAgICAgICAgICAgICAgbm9kZS5rZXJuZWxOYW1lfS4gVGhlIGdyYWRpZW50IG9mIGlucHV0IGAgK1xuICAgICAgICAgICAgYCR7aW5wdXROYW1lfSBtdXN0IGhhdmUgJ2Zsb2F0MzInIGR0eXBlLCBidXQgaGFzICcke2R4LmR0eXBlfSdgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHggPSBub2RlLmlucHV0c1tpbnB1dE5hbWVdO1xuICAgICAgaWYgKCF1dGlsLmFycmF5c0VxdWFsKGR4LnNoYXBlLCB4LnNoYXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRXJyb3IgaW4gZ3JhZGllbnQgZm9yIG9wICR7XG4gICAgICAgICAgICAgICAgbm9kZS5rZXJuZWxOYW1lfS4gVGhlIGdyYWRpZW50IG9mIGlucHV0IGAgK1xuICAgICAgICAgICAgYCcke2lucHV0TmFtZX0nIGhhcyBzaGFwZSAnJHtkeC5zaGFwZX0nLCB3aGljaCBkb2VzIG5vdCBtYXRjaCBgICtcbiAgICAgICAgICAgIGB0aGUgc2hhcGUgb2YgdGhlIGlucHV0ICcke3guc2hhcGV9J2ApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVuc29yQWNjdW11bGF0ZWRHcmFkaWVudE1hcFt4LmlkXSA9PSBudWxsKSB7XG4gICAgICAgIHRlbnNvckFjY3VtdWxhdGVkR3JhZGllbnRNYXBbeC5pZF0gPSBkeDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1ckdyYWRpZW50ID0gdGVuc29yQWNjdW11bGF0ZWRHcmFkaWVudE1hcFt4LmlkXTtcbiAgICAgICAgdGVuc29yQWNjdW11bGF0ZWRHcmFkaWVudE1hcFt4LmlkXSA9IGFkZChjdXJHcmFkaWVudCwgZHgpO1xuICAgICAgICBjdXJHcmFkaWVudC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line:no-any\nfunction _isNavigatorDefined() {\n return typeof navigator !== 'undefined' && navigator != null;\n}\nlet isMobileMockValue;\nexport function mockIsMobile(value) {\n isMobileMockValue = value;\n}\nexport function isMobile(nav) {\n if (isMobileMockValue !== undefined) {\n return isMobileMockValue;\n }\n if (nav || _isNavigatorDefined()) {\n if (!nav) {\n nav = navigator;\n }\n if (nav.product === 'ReactNative') {\n return true;\n }\n const a = nav.userAgent || nav.vendor ||\n // tslint:disable-next-line:no-any\n (typeof window !== 'undefined' ? window.opera : '');\n // Use `navigator.userAgentData.mobile` as fallback.\n if (!a) {\n // tslint:disable-next-line:no-any\n const navAny = nav;\n return navAny.userAgentData && navAny.userAgentData.mobile;\n }\n // tslint:disable-next-line:max-line-length\n 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\n .test(a) ||\n // tslint:disable-next-line:max-line-length\n /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\n .test(a.substr(0, 4));\n }\n return false;\n}\nexport function isBrowser() {\n return (typeof window !== 'undefined' && window.document != null) ||\n //@ts-ignore\n (typeof WorkerGlobalScope !== 'undefined');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2RldmljZV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILGtDQUFrQztBQUNsQyxTQUFTLG1CQUFtQjtJQUMxQixPQUFPLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDO0FBQy9ELENBQUM7QUFFRCxJQUFJLGlCQUFvQyxDQUFDO0FBRXpDLE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBd0I7SUFDbkQsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQWU7SUFDdEMsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7UUFDbkMsT0FBTyxpQkFBaUIsQ0FBQztLQUMxQjtJQUNELElBQUksR0FBRyxJQUFJLG1CQUFtQixFQUFFLEVBQUU7UUFDaEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLEdBQUcsR0FBRyxTQUFTLENBQUM7U0FDakI7UUFDRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssYUFBYSxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNO1lBQ2pDLGtDQUFrQztZQUNsQyxDQUFDLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUUsTUFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakUsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDTixrQ0FBa0M7WUFDbEMsTUFBTSxNQUFNLEdBQUcsR0FBVSxDQUFDO1lBQzFCLE9BQU8sTUFBTSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztTQUM1RDtRQUNELDJDQUEyQztRQUMzQyxPQUFPLDBUQUEwVDthQUNyVCxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2YsMkNBQTJDO1lBQzNDLHlrREFBeWtEO2lCQUNwa0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0I7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUztJQUN2QixPQUFPLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO1FBQzdELFlBQVk7UUFDWixDQUFDLE9BQU8saUJBQWlCLEtBQUssV0FBVyxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuZnVuY3Rpb24gX2lzTmF2aWdhdG9yRGVmaW5lZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvciAhPSBudWxsO1xufVxuXG5sZXQgaXNNb2JpbGVNb2NrVmFsdWU6IGJvb2xlYW58dW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0lzTW9iaWxlKHZhbHVlOiBib29sZWFufHVuZGVmaW5lZCkge1xuICBpc01vYmlsZU1vY2tWYWx1ZSA9IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNb2JpbGUobmF2PzogTmF2aWdhdG9yKTogYm9vbGVhbiB7XG4gIGlmIChpc01vYmlsZU1vY2tWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGlzTW9iaWxlTW9ja1ZhbHVlO1xuICB9XG4gIGlmIChuYXYgfHwgX2lzTmF2aWdhdG9yRGVmaW5lZCgpKSB7XG4gICAgaWYgKCFuYXYpIHtcbiAgICAgIG5hdiA9IG5hdmlnYXRvcjtcbiAgICB9XG4gICAgaWYgKG5hdi5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhID0gbmF2LnVzZXJBZ2VudCB8fCBuYXYudmVuZG9yIHx8XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gKHdpbmRvdyBhcyBhbnkpLm9wZXJhIDogJycpO1xuICAgIC8vIFVzZSBgbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEubW9iaWxlYCBhcyBmYWxsYmFjay5cbiAgICBpZiAoIWEpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgIGNvbnN0IG5hdkFueSA9IG5hdiBhcyBhbnk7XG4gICAgICByZXR1cm4gbmF2QW55LnVzZXJBZ2VudERhdGEgJiYgbmF2QW55LnVzZXJBZ2VudERhdGEubW9iaWxlO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgcmV0dXJuIC8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyBjZXx4ZGF8eGlpbm8vaVxuICAgICAgICAgICAgICAgLnRlc3QoYSkgfHxcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAvMTIwN3w2MzEwfDY1OTB8M2dzb3w0dGhwfDUwWzEtNl1pfDc3MHN8ODAyc3xhIHdhfGFiYWN8YWMoZXJ8b298c1xcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcXC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcXC0obnx1KXxjNTVcXC98Y2FwaXxjY3dhfGNkbVxcLXxjZWxsfGNodG18Y2xkY3xjbWRcXC18Y28obXB8bmQpfGNyYXd8ZGEoaXR8bGx8bmcpfGRidGV8ZGNcXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcXC18Xyl8ZzEgdXxnNTYwfGdlbmV8Z2ZcXC01fGdcXC1tb3xnbyhcXC53fG9kKXxncihhZHx1bil8aGFpZXxoY2l0fGhkXFwtKG18cHx0KXxoZWlcXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1xcLWN8aHQoYyhcXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXFwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFxcLXxcXC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XFwvKXxrbG9ufGtwdCB8a3djXFwtfGt5byhjfGspfGxlKG5vfHhpKXxsZyggZ3xcXC8oa3xsfHUpfDUwfDU0fFxcLVthLXddKXxsaWJ3fGx5bnh8bTFcXC13fG0zZ2F8bTUwXFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVxcLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFxcLXwgfG98dil8enopfG10KDUwfHAxfHYgKXxtd2JwfG15d2F8bjEwWzAtMl18bjIwWzItM118bjMwKDB8Mil8bjUwKDB8Mnw1KXxuNygwKDB8MSl8MTApfG5lKChjfG0pXFwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcXC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cXC0yfHBvKGNrfHJ0fHNlKXxwcm94fHBzaW98cHRcXC1nfHFhXFwtYXxxYygwN3wxMnwyMXwzMnw2MHxcXC1bMi03XXxpXFwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVxcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFxcLXxvb3xwXFwtKXxzZGtcXC98c2UoYyhcXC18MHwxKXw0N3xtY3xuZHxyaSl8c2doXFwtfHNoYXJ8c2llKFxcLXxtKXxza1xcLTB8c2woNDV8aWQpfHNtKGFsfGFyfGIzfGl0fHQ1KXxzbyhmdHxueSl8c3AoMDF8aFxcLXx2XFwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXFwtfHRkZ1xcLXx0ZWwoaXxtKXx0aW1cXC18dFxcLW1vfHRvKHBsfHNoKXx0cyg3MHxtXFwtfG0zfG01KXx0eFxcLTl8dXAoXFwuYnxnMXxzaSl8dXRzdHx2NDAwfHY3NTB8dmVyaXx2aShyZ3x0ZSl8dmsoNDB8NVswLTNdfFxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXFwtfHlvdXJ8emV0b3x6dGVcXC0vaVxuICAgICAgICAgICAgLnRlc3QoYS5zdWJzdHIoMCwgNCkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlcigpOiBib29sZWFuIHtcbiAgcmV0dXJuICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgIT0gbnVsbCkgfHxcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcpO1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport './engine';\nimport * as device_util from './device_util';\nimport { env } from './environment';\nconst ENV = env();\n/**\n * This file contains environment-related flag registrations.\n */\n/** Whether to enable debug mode. */\nENV.registerFlag('DEBUG', () => false, debugValue => {\n if (debugValue) {\n console.warn('Debugging mode is ON. The output of every math call will ' +\n 'be downloaded to CPU and checked for NaNs. ' +\n 'This significantly impacts performance.');\n }\n});\n/** Whether we are in a browser (as versus, say, node.js) environment. */\nENV.registerFlag('IS_BROWSER', () => device_util.isBrowser());\n/** Whether we are in a browser (as versus, say, node.js) environment. */\nENV.registerFlag('IS_NODE', () => (typeof process !== 'undefined') &&\n (typeof process.versions !== 'undefined') &&\n (typeof process.versions.node !== 'undefined'));\n/** Whether this browser is Chrome. */\nENV.registerFlag('IS_CHROME', () => typeof navigator !== 'undefined' && navigator != null &&\n navigator.userAgent != null && /Chrome/.test(navigator.userAgent) &&\n /Google Inc/.test(navigator.vendor));\n/** Whether this browser is Safari. */\nENV.registerFlag('IS_SAFARI', () => typeof navigator !== 'undefined' && navigator != null &&\n navigator.userAgent != null && /Safari/.test(navigator.userAgent) &&\n /Apple/.test(navigator.vendor));\n/**\n * True when the environment is \"production\" where we disable safety checks\n * to gain performance.\n */\nENV.registerFlag('PROD', () => false);\n/**\n * Whether to do sanity checks when inferring a shape from user-provided\n * values, used when creating a new tensor.\n */\nENV.registerFlag('TENSORLIKE_CHECK_SHAPE_CONSISTENCY', () => ENV.getBool('DEBUG'));\n/** Whether deprecation warnings are enabled. */\nENV.registerFlag('DEPRECATION_WARNINGS_ENABLED', () => true);\n/** True if running unit tests. */\nENV.registerFlag('IS_TEST', () => false);\n/** Whether to check computation result for errors. */\nENV.registerFlag('CHECK_COMPUTATION_FOR_ERRORS', () => ENV.getBool('DEBUG'));\n/** Whether the backend needs to wrap input to imageBitmap. */\nENV.registerFlag('WRAP_TO_IMAGEBITMAP', () => false);\n/** Whether to enable canvas2d willReadFrequently for GPU backends */\nENV.registerFlag('CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU', () => false);\n/** Whether to use setTimeoutCustom */\nENV.registerFlag('USE_SETTIMEOUTCUSTOM', () => false);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2ZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sVUFBVSxDQUFDO0FBRWxCLE9BQU8sS0FBSyxXQUFXLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFFbEI7O0dBRUc7QUFFSCxvQ0FBb0M7QUFDcEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0lBQ2xELElBQUksVUFBVSxFQUFFO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FDUiwyREFBMkQ7WUFDM0QsNkNBQTZDO1lBQzdDLHlDQUF5QyxDQUFDLENBQUM7S0FDaEQ7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILHlFQUF5RTtBQUN6RSxHQUFHLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUU5RCx5RUFBeUU7QUFDekUsR0FBRyxDQUFDLFlBQVksQ0FDWixTQUFTLEVBQ1QsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7SUFDbEMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDO0lBQ3pDLENBQUMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRXhELHNDQUFzQztBQUN0QyxHQUFHLENBQUMsWUFBWSxDQUNaLFdBQVcsRUFDWCxHQUFHLEVBQUUsQ0FBQyxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxJQUFJLElBQUk7SUFDdkQsU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFN0Msc0NBQXNDO0FBQ3RDLEdBQUcsQ0FBQyxZQUFZLENBQ1osV0FBVyxFQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLElBQUksSUFBSTtJQUN2RCxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDakUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4Qzs7O0dBR0c7QUFDSCxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV0Qzs7O0dBR0c7QUFDSCxHQUFHLENBQUMsWUFBWSxDQUNaLG9DQUFvQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUV0RSxnREFBZ0Q7QUFDaEQsR0FBRyxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUU3RCxrQ0FBa0M7QUFDbEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekMsc0RBQXNEO0FBQ3RELEdBQUcsQ0FBQyxZQUFZLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTdFLDhEQUE4RDtBQUM5RCxHQUFHLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXJELHFFQUFxRTtBQUNyRSxHQUFHLENBQUMsWUFBWSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXZFLHNDQUFzQztBQUN0QyxHQUFHLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0ICcuL2VuZ2luZSc7XG5cbmltcG9ydCAqIGFzIGRldmljZV91dGlsIGZyb20gJy4vZGV2aWNlX3V0aWwnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuXG5jb25zdCBFTlYgPSBlbnYoKTtcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgZW52aXJvbm1lbnQtcmVsYXRlZCBmbGFnIHJlZ2lzdHJhdGlvbnMuXG4gKi9cblxuLyoqIFdoZXRoZXIgdG8gZW5hYmxlIGRlYnVnIG1vZGUuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdERUJVRycsICgpID0+IGZhbHNlLCBkZWJ1Z1ZhbHVlID0+IHtcbiAgaWYgKGRlYnVnVmFsdWUpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdEZWJ1Z2dpbmcgbW9kZSBpcyBPTi4gVGhlIG91dHB1dCBvZiBldmVyeSBtYXRoIGNhbGwgd2lsbCAnICtcbiAgICAgICAgJ2JlIGRvd25sb2FkZWQgdG8gQ1BVIGFuZCBjaGVja2VkIGZvciBOYU5zLiAnICtcbiAgICAgICAgJ1RoaXMgc2lnbmlmaWNhbnRseSBpbXBhY3RzIHBlcmZvcm1hbmNlLicpO1xuICB9XG59KTtcblxuLyoqIFdoZXRoZXIgd2UgYXJlIGluIGEgYnJvd3NlciAoYXMgdmVyc3VzLCBzYXksIG5vZGUuanMpIGVudmlyb25tZW50LiAqL1xuRU5WLnJlZ2lzdGVyRmxhZygnSVNfQlJPV1NFUicsICgpID0+IGRldmljZV91dGlsLmlzQnJvd3NlcigpKTtcblxuLyoqIFdoZXRoZXIgd2UgYXJlIGluIGEgYnJvd3NlciAoYXMgdmVyc3VzLCBzYXksIG5vZGUuanMpIGVudmlyb25tZW50LiAqL1xuRU5WLnJlZ2lzdGVyRmxhZyhcbiAgICAnSVNfTk9ERScsXG4gICAgKCkgPT4gKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykgJiZcbiAgICAgICAgKHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zICE9PSAndW5kZWZpbmVkJykgJiZcbiAgICAgICAgKHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgIT09ICd1bmRlZmluZWQnKSk7XG5cbi8qKiBXaGV0aGVyIHRoaXMgYnJvd3NlciBpcyBDaHJvbWUuICovXG5FTlYucmVnaXN0ZXJGbGFnKFxuICAgICdJU19DSFJPTUUnLFxuICAgICgpID0+IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvciAhPSBudWxsICYmXG4gICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQgIT0gbnVsbCAmJiAvQ2hyb21lLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmXG4gICAgICAgIC9Hb29nbGUgSW5jLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpKTtcblxuLyoqIFdoZXRoZXIgdGhpcyBicm93c2VyIGlzIFNhZmFyaS4gKi9cbkVOVi5yZWdpc3RlckZsYWcoXG4gICAgJ0lTX1NBRkFSSScsXG4gICAgKCkgPT4gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yICE9IG51bGwgJiZcbiAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudCAhPSBudWxsICYmIC9TYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiZcbiAgICAgICAgL0FwcGxlLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpKTtcbi8qKlxuICogVHJ1ZSB3aGVuIHRoZSBlbnZpcm9ubWVudCBpcyBcInByb2R1Y3Rpb25cIiB3aGVyZSB3ZSBkaXNhYmxlIHNhZmV0eSBjaGVja3NcbiAqIHRvIGdhaW4gcGVyZm9ybWFuY2UuXG4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1BST0QnLCAoKSA9PiBmYWxzZSk7XG5cbi8qKlxuICogV2hldGhlciB0byBkbyBzYW5pdHkgY2hlY2tzIHdoZW4gaW5mZXJyaW5nIGEgc2hhcGUgZnJvbSB1c2VyLXByb3ZpZGVkXG4gKiB2YWx1ZXMsIHVzZWQgd2hlbiBjcmVhdGluZyBhIG5ldyB0ZW5zb3IuXG4gKi9cbkVOVi5yZWdpc3RlckZsYWcoXG4gICAgJ1RFTlNPUkxJS0VfQ0hFQ0tfU0hBUEVfQ09OU0lTVEVOQ1knLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnREVCVUcnKSk7XG5cbi8qKiBXaGV0aGVyIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGFyZSBlbmFibGVkLiAqL1xuRU5WLnJlZ2lzdGVyRmxhZygnREVQUkVDQVRJT05fV0FSTklOR1NfRU5BQkxFRCcsICgpID0+IHRydWUpO1xuXG4vKiogVHJ1ZSBpZiBydW5uaW5nIHVuaXQgdGVzdHMuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdJU19URVNUJywgKCkgPT4gZmFsc2UpO1xuXG4vKiogV2hldGhlciB0byBjaGVjayBjb21wdXRhdGlvbiByZXN1bHQgZm9yIGVycm9ycy4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ0NIRUNLX0NPTVBVVEFUSU9OX0ZPUl9FUlJPUlMnLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnREVCVUcnKSk7XG5cbi8qKiBXaGV0aGVyIHRoZSBiYWNrZW5kIG5lZWRzIHRvIHdyYXAgaW5wdXQgdG8gaW1hZ2VCaXRtYXAuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXUkFQX1RPX0lNQUdFQklUTUFQJywgKCkgPT4gZmFsc2UpO1xuXG4vKiogV2hldGhlciB0byBlbmFibGUgY2FudmFzMmQgd2lsbFJlYWRGcmVxdWVudGx5IGZvciBHUFUgYmFja2VuZHMgKi9cbkVOVi5yZWdpc3RlckZsYWcoJ0NBTlZBUzJEX1dJTExfUkVBRF9GUkVRVUVOVExZX0ZPUl9HUFUnLCAoKSA9PiBmYWxzZSk7XG5cbi8qKiBXaGV0aGVyIHRvIHVzZSBzZXRUaW1lb3V0Q3VzdG9tICovXG5FTlYucmVnaXN0ZXJGbGFnKCdVU0VfU0VUVElNRU9VVENVU1RPTScsICgpID0+IGZhbHNlKTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from './engine';\nimport { env } from './environment';\nimport { getGlobalTensorClass } from './tensor';\nimport { isWebGLData, isWebGPUData } from './types';\nimport { assert, flatten, inferDtype, isTypedArray, toTypedArray } from './util';\nimport { bytesPerElement } from './util_base';\nexport function inferShape(val, dtype) {\n let firstElem = val;\n if (isTypedArray(val)) {\n return dtype === 'string' ? [] : [val.length];\n }\n if (isWebGLData(val)) {\n const usedChannels = val.channels || 'RGBA';\n return [val.height, val.width * usedChannels.length];\n }\n else if (isWebGPUData(val)) {\n return [val.buffer.size / (dtype == null ? 4 : bytesPerElement(dtype))];\n }\n if (!Array.isArray(val)) {\n return []; // Scalar.\n }\n const shape = [];\n while (Array.isArray(firstElem) ||\n isTypedArray(firstElem) && dtype !== 'string') {\n shape.push(firstElem.length);\n firstElem = firstElem[0];\n }\n if (Array.isArray(val) &&\n env().getBool('TENSORLIKE_CHECK_SHAPE_CONSISTENCY')) {\n deepAssertShapeConsistency(val, shape, []);\n }\n return shape;\n}\nfunction deepAssertShapeConsistency(val, shape, indices) {\n indices = indices || [];\n if (!(Array.isArray(val)) && !isTypedArray(val)) {\n assert(shape.length === 0, () => `Element arr[${indices.join('][')}] is a primitive, ` +\n `but should be an array/TypedArray of ${shape[0]} elements`);\n return;\n }\n assert(shape.length > 0, () => `Element arr[${indices.join('][')}] should be a primitive, ` +\n `but is an array of ${val.length} elements`);\n assert(val.length === shape[0], () => `Element arr[${indices.join('][')}] should have ${shape[0]} ` +\n `elements, but has ${val.length} elements`);\n const subShape = shape.slice(1);\n for (let i = 0; i < val.length; ++i) {\n deepAssertShapeConsistency(val[i], subShape, indices.concat(i));\n }\n}\nfunction assertDtype(expectedDtype, actualDType, argName, functionName) {\n if (expectedDtype === 'string_or_numeric') {\n return;\n }\n if (expectedDtype == null) {\n throw new Error(`Expected dtype cannot be null.`);\n }\n if (expectedDtype !== 'numeric' && expectedDtype !== actualDType ||\n expectedDtype === 'numeric' && actualDType === 'string') {\n throw new Error(`Argument '${argName}' passed to '${functionName}' must ` +\n `be ${expectedDtype} tensor, but got ${actualDType} tensor`);\n }\n}\nexport function convertToTensor(x, argName, functionName, parseAsDtype = 'numeric') {\n if (x instanceof getGlobalTensorClass()) {\n assertDtype(parseAsDtype, x.dtype, argName, functionName);\n return x;\n }\n let inferredDtype = inferDtype(x);\n // If the user expects a bool/int/float, use that info to update the\n // inferredDtype when it is not a string.\n if (inferredDtype !== 'string' &&\n ['bool', 'int32', 'float32'].indexOf(parseAsDtype) >= 0) {\n inferredDtype = parseAsDtype;\n }\n assertDtype(parseAsDtype, inferredDtype, argName, functionName);\n if ((x == null) ||\n (!isTypedArray(x) && !Array.isArray(x) && typeof x !== 'number' &&\n typeof x !== 'boolean' && typeof x !== 'string')) {\n const type = x == null ? 'null' : x.constructor.name;\n throw new Error(`Argument '${argName}' passed to '${functionName}' must be a ` +\n `Tensor or TensorLike, but got '${type}'`);\n }\n const inferredShape = inferShape(x, inferredDtype);\n if (!isTypedArray(x) && !Array.isArray(x)) {\n x = [x];\n }\n const skipTypedArray = true;\n const values = inferredDtype !== 'string' ?\n toTypedArray(x, inferredDtype) :\n flatten(x, [], skipTypedArray);\n return ENGINE.makeTensor(values, inferredShape, inferredDtype);\n}\nexport function convertToTensorArray(arg, argName, functionName, parseAsDtype = 'numeric') {\n if (!Array.isArray(arg)) {\n throw new Error(`Argument ${argName} passed to ${functionName} must be a ` +\n '`Tensor[]` or `TensorLike[]`');\n }\n const tensors = arg;\n return tensors.map((t, i) => convertToTensor(t, `${argName}[${i}]`, functionName, parseAsDtype));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX3V0aWxfZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy90ZW5zb3JfdXRpbF9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxvQkFBb0IsRUFBUyxNQUFNLFVBQVUsQ0FBQztBQUN0RCxPQUFPLEVBQVcsV0FBVyxFQUFFLFlBQVksRUFBb0MsTUFBTSxTQUFTLENBQUM7QUFDL0YsT0FBTyxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDL0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU1QyxNQUFNLFVBQVUsVUFBVSxDQUN0QixHQUFvQyxFQUFFLEtBQWdCO0lBQ3hELElBQUksU0FBUyxHQUFlLEdBQUcsQ0FBQztJQUVoQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNyQixPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0M7SUFFRCxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNwQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQztRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0RDtTQUFNLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RTtJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDLENBQUUsVUFBVTtLQUN2QjtJQUNELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3hCLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQ3BELEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUI7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2xCLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFO1FBQ3ZELDBCQUEwQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDNUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUMvQixHQUFlLEVBQUUsS0FBZSxFQUFFLE9BQWlCO0lBQ3JELE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ3hCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMvQyxNQUFNLENBQ0YsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQ2xCLEdBQUcsRUFBRSxDQUFDLGVBQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQ3ZELHdDQUF3QyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JFLE9BQU87S0FDUjtJQUNELE1BQU0sQ0FDRixLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDaEIsR0FBRyxFQUFFLENBQUMsZUFBZSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywyQkFBMkI7UUFDOUQsc0JBQXNCLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FDRixHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDdkIsR0FBRyxFQUFFLENBQUMsZUFBZSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHO1FBQy9ELHFCQUFxQixHQUFHLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQztJQUNwRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ25DLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pFO0FBQ0gsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUNoQixhQUFxRCxFQUNyRCxXQUFxQixFQUFFLE9BQWUsRUFBRSxZQUFvQjtJQUM5RCxJQUFJLGFBQWEsS0FBSyxtQkFBbUIsRUFBRTtRQUN6QyxPQUFPO0tBQ1I7SUFDRCxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0tBQ25EO0lBQ0QsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsS0FBSyxXQUFXO1FBQzVELGFBQWEsS0FBSyxTQUFTLElBQUksV0FBVyxLQUFLLFFBQVEsRUFBRTtRQUMzRCxNQUFNLElBQUksS0FBSyxDQUNYLGFBQWEsT0FBTyxnQkFBZ0IsWUFBWSxTQUFTO1lBQ3pELE1BQU0sYUFBYSxvQkFBb0IsV0FBVyxTQUFTLENBQUMsQ0FBQztLQUNsRTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUMzQixDQUFlLEVBQUUsT0FBZSxFQUFFLFlBQW9CLEVBQ3RELGVBQXVELFNBQVM7SUFDbEUsSUFBSSxDQUFDLFlBQVksb0JBQW9CLEVBQUUsRUFBRTtRQUN2QyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7SUFDRCxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsb0VBQW9FO0lBQ3BFLHlDQUF5QztJQUN6QyxJQUFJLGFBQWEsS0FBSyxRQUFRO1FBQzFCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzNELGFBQWEsR0FBRyxZQUF3QixDQUFDO0tBQzFDO0lBQ0QsV0FBVyxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRWhFLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ1gsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtZQUM5RCxPQUFPLENBQUMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQUU7UUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxDQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM3RCxNQUFNLElBQUksS0FBSyxDQUNYLGFBQWEsT0FBTyxnQkFBZ0IsWUFBWSxjQUFjO1lBQzlELGtDQUFrQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ2hEO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN6QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQWEsQ0FBQztLQUNyQjtJQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDdkMsWUFBWSxDQUFDLENBQUMsRUFBRSxhQUF5QixDQUFDLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsQ0FBYSxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQWEsQ0FBQztJQUMzRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQU0sQ0FBQztBQUN0RSxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxHQUF3QixFQUFFLE9BQWUsRUFBRSxZQUFvQixFQUMvRCxlQUF1RCxTQUFTO0lBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ1gsWUFBWSxPQUFPLGNBQWMsWUFBWSxhQUFhO1lBQzFELDhCQUE4QixDQUFDLENBQUM7S0FDckM7SUFDRCxNQUFNLE9BQU8sR0FBRyxHQUFVLENBQUM7SUFDM0IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUNkLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ0wsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi9lbmdpbmUnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtnZXRHbG9iYWxUZW5zb3JDbGFzcywgVGVuc29yfSBmcm9tICcuL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBpc1dlYkdMRGF0YSwgaXNXZWJHUFVEYXRhLCBUZW5zb3JMaWtlLCBXZWJHTERhdGEsIFdlYkdQVURhdGF9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnQsIGZsYXR0ZW4sIGluZmVyRHR5cGUsIGlzVHlwZWRBcnJheSwgdG9UeXBlZEFycmF5fSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHtieXRlc1BlckVsZW1lbnR9IGZyb20gJy4vdXRpbF9iYXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluZmVyU2hhcGUoXG4gICAgdmFsOiBUZW5zb3JMaWtlfFdlYkdMRGF0YXxXZWJHUFVEYXRhLCBkdHlwZT86IERhdGFUeXBlKTogbnVtYmVyW10ge1xuICBsZXQgZmlyc3RFbGVtOiB0eXBlb2YgdmFsID0gdmFsO1xuXG4gIGlmIChpc1R5cGVkQXJyYXkodmFsKSkge1xuICAgIHJldHVybiBkdHlwZSA9PT0gJ3N0cmluZycgPyBbXSA6IFt2YWwubGVuZ3RoXTtcbiAgfVxuXG4gIGlmIChpc1dlYkdMRGF0YSh2YWwpKSB7XG4gICAgY29uc3QgdXNlZENoYW5uZWxzID0gdmFsLmNoYW5uZWxzIHx8ICdSR0JBJztcbiAgICByZXR1cm4gW3ZhbC5oZWlnaHQsIHZhbC53aWR0aCAqIHVzZWRDaGFubmVscy5sZW5ndGhdO1xuICB9IGVsc2UgaWYgKGlzV2ViR1BVRGF0YSh2YWwpKSB7XG4gICAgcmV0dXJuIFt2YWwuYnVmZmVyLnNpemUgLyAoZHR5cGUgPT0gbnVsbCA/IDQgOiBieXRlc1BlckVsZW1lbnQoZHR5cGUpKV07XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gW107ICAvLyBTY2FsYXIuXG4gIH1cbiAgY29uc3Qgc2hhcGU6IG51bWJlcltdID0gW107XG5cbiAgd2hpbGUgKEFycmF5LmlzQXJyYXkoZmlyc3RFbGVtKSB8fFxuICAgICAgICAgaXNUeXBlZEFycmF5KGZpcnN0RWxlbSkgJiYgZHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgc2hhcGUucHVzaChmaXJzdEVsZW0ubGVuZ3RoKTtcbiAgICBmaXJzdEVsZW0gPSBmaXJzdEVsZW1bMF07XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSAmJlxuICAgICAgZW52KCkuZ2V0Qm9vbCgnVEVOU09STElLRV9DSEVDS19TSEFQRV9DT05TSVNURU5DWScpKSB7XG4gICAgZGVlcEFzc2VydFNoYXBlQ29uc2lzdGVuY3kodmFsLCBzaGFwZSwgW10pO1xuICB9XG5cbiAgcmV0dXJuIHNoYXBlO1xufVxuXG5mdW5jdGlvbiBkZWVwQXNzZXJ0U2hhcGVDb25zaXN0ZW5jeShcbiAgICB2YWw6IFRlbnNvckxpa2UsIHNoYXBlOiBudW1iZXJbXSwgaW5kaWNlczogbnVtYmVyW10pIHtcbiAgaW5kaWNlcyA9IGluZGljZXMgfHwgW107XG4gIGlmICghKEFycmF5LmlzQXJyYXkodmFsKSkgJiYgIWlzVHlwZWRBcnJheSh2YWwpKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgICBzaGFwZS5sZW5ndGggPT09IDAsXG4gICAgICAgICgpID0+IGBFbGVtZW50IGFyclske2luZGljZXMuam9pbignXVsnKX1dIGlzIGEgcHJpbWl0aXZlLCBgICtcbiAgICAgICAgICAgIGBidXQgc2hvdWxkIGJlIGFuIGFycmF5L1R5cGVkQXJyYXkgb2YgJHtzaGFwZVswXX0gZWxlbWVudHNgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYXNzZXJ0KFxuICAgICAgc2hhcGUubGVuZ3RoID4gMCxcbiAgICAgICgpID0+IGBFbGVtZW50IGFyclske2luZGljZXMuam9pbignXVsnKX1dIHNob3VsZCBiZSBhIHByaW1pdGl2ZSwgYCArXG4gICAgICAgICAgYGJ1dCBpcyBhbiBhcnJheSBvZiAke3ZhbC5sZW5ndGh9IGVsZW1lbnRzYCk7XG4gIGFzc2VydChcbiAgICAgIHZhbC5sZW5ndGggPT09IHNoYXBlWzBdLFxuICAgICAgKCkgPT4gYEVsZW1lbnQgYXJyWyR7aW5kaWNlcy5qb2luKCddWycpfV0gc2hvdWxkIGhhdmUgJHtzaGFwZVswXX0gYCArXG4gICAgICAgICAgYGVsZW1lbnRzLCBidXQgaGFzICR7dmFsLmxlbmd0aH0gZWxlbWVudHNgKTtcbiAgY29uc3Qgc3ViU2hhcGUgPSBzaGFwZS5zbGljZSgxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyArK2kpIHtcbiAgICBkZWVwQXNzZXJ0U2hhcGVDb25zaXN0ZW5jeSh2YWxbaV0sIHN1YlNoYXBlLCBpbmRpY2VzLmNvbmNhdChpKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0RHR5cGUoXG4gICAgZXhwZWN0ZWREdHlwZTogRGF0YVR5cGV8J251bWVyaWMnfCdzdHJpbmdfb3JfbnVtZXJpYycsXG4gICAgYWN0dWFsRFR5cGU6IERhdGFUeXBlLCBhcmdOYW1lOiBzdHJpbmcsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKSB7XG4gIGlmIChleHBlY3RlZER0eXBlID09PSAnc3RyaW5nX29yX251bWVyaWMnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChleHBlY3RlZER0eXBlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGR0eXBlIGNhbm5vdCBiZSBudWxsLmApO1xuICB9XG4gIGlmIChleHBlY3RlZER0eXBlICE9PSAnbnVtZXJpYycgJiYgZXhwZWN0ZWREdHlwZSAhPT0gYWN0dWFsRFR5cGUgfHxcbiAgICAgIGV4cGVjdGVkRHR5cGUgPT09ICdudW1lcmljJyAmJiBhY3R1YWxEVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcmd1bWVudCAnJHthcmdOYW1lfScgcGFzc2VkIHRvICcke2Z1bmN0aW9uTmFtZX0nIG11c3QgYCArXG4gICAgICAgIGBiZSAke2V4cGVjdGVkRHR5cGV9IHRlbnNvciwgYnV0IGdvdCAke2FjdHVhbERUeXBlfSB0ZW5zb3JgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvVGVuc29yPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgYXJnTmFtZTogc3RyaW5nLCBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICBwYXJzZUFzRHR5cGU6IERhdGFUeXBlfCdudW1lcmljJ3wnc3RyaW5nX29yX251bWVyaWMnID0gJ251bWVyaWMnKTogVCB7XG4gIGlmICh4IGluc3RhbmNlb2YgZ2V0R2xvYmFsVGVuc29yQ2xhc3MoKSkge1xuICAgIGFzc2VydER0eXBlKHBhcnNlQXNEdHlwZSwgeC5kdHlwZSwgYXJnTmFtZSwgZnVuY3Rpb25OYW1lKTtcbiAgICByZXR1cm4geDtcbiAgfVxuICBsZXQgaW5mZXJyZWREdHlwZSA9IGluZmVyRHR5cGUoeCk7XG4gIC8vIElmIHRoZSB1c2VyIGV4cGVjdHMgYSBib29sL2ludC9mbG9hdCwgdXNlIHRoYXQgaW5mbyB0byB1cGRhdGUgdGhlXG4gIC8vIGluZmVycmVkRHR5cGUgd2hlbiBpdCBpcyBub3QgYSBzdHJpbmcuXG4gIGlmIChpbmZlcnJlZER0eXBlICE9PSAnc3RyaW5nJyAmJlxuICAgICAgWydib29sJywgJ2ludDMyJywgJ2Zsb2F0MzInXS5pbmRleE9mKHBhcnNlQXNEdHlwZSkgPj0gMCkge1xuICAgIGluZmVycmVkRHR5cGUgPSBwYXJzZUFzRHR5cGUgYXMgRGF0YVR5cGU7XG4gIH1cbiAgYXNzZXJ0RHR5cGUocGFyc2VBc0R0eXBlLCBpbmZlcnJlZER0eXBlLCBhcmdOYW1lLCBmdW5jdGlvbk5hbWUpO1xuXG4gIGlmICgoeCA9PSBudWxsKSB8fFxuICAgICAgKCFpc1R5cGVkQXJyYXkoeCkgJiYgIUFycmF5LmlzQXJyYXkoeCkgJiYgdHlwZW9mIHggIT09ICdudW1iZXInICYmXG4gICAgICAgdHlwZW9mIHggIT09ICdib29sZWFuJyAmJiB0eXBlb2YgeCAhPT0gJ3N0cmluZycpKSB7XG4gICAgY29uc3QgdHlwZSA9IHggPT0gbnVsbCA/ICdudWxsJyA6ICh4IGFzIHt9KS5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFyZ3VtZW50ICcke2FyZ05hbWV9JyBwYXNzZWQgdG8gJyR7ZnVuY3Rpb25OYW1lfScgbXVzdCBiZSBhIGAgK1xuICAgICAgICBgVGVuc29yIG9yIFRlbnNvckxpa2UsIGJ1dCBnb3QgJyR7dHlwZX0nYCk7XG4gIH1cbiAgY29uc3QgaW5mZXJyZWRTaGFwZSA9IGluZmVyU2hhcGUoeCwgaW5mZXJyZWREdHlwZSk7XG4gIGlmICghaXNUeXBlZEFycmF5KHgpICYmICFBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgeCA9IFt4XSBhcyBudW1iZXJbXTtcbiAgfVxuICBjb25zdCBza2lwVHlwZWRBcnJheSA9IHRydWU7XG4gIGNvbnN0IHZhbHVlcyA9IGluZmVycmVkRHR5cGUgIT09ICdzdHJpbmcnID9cbiAgICAgIHRvVHlwZWRBcnJheSh4LCBpbmZlcnJlZER0eXBlIGFzIERhdGFUeXBlKSA6XG4gICAgICBmbGF0dGVuKHggYXMgc3RyaW5nW10sIFtdLCBza2lwVHlwZWRBcnJheSkgYXMgc3RyaW5nW107XG4gIHJldHVybiBFTkdJTkUubWFrZVRlbnNvcih2YWx1ZXMsIGluZmVycmVkU2hhcGUsIGluZmVycmVkRHR5cGUpIGFzIFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9UZW5zb3JBcnJheTxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhcmc6IEFycmF5PFR8VGVuc29yTGlrZT4sIGFyZ05hbWU6IHN0cmluZywgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgcGFyc2VBc0R0eXBlOiBEYXRhVHlwZXwnbnVtZXJpYyd8J3N0cmluZ19vcl9udW1lcmljJyA9ICdudW1lcmljJyk6IFRbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQXJndW1lbnQgJHthcmdOYW1lfSBwYXNzZWQgdG8gJHtmdW5jdGlvbk5hbWV9IG11c3QgYmUgYSBgICtcbiAgICAgICAgJ2BUZW5zb3JbXWAgb3IgYFRlbnNvckxpa2VbXWAnKTtcbiAgfVxuICBjb25zdCB0ZW5zb3JzID0gYXJnIGFzIFRbXTtcbiAgcmV0dXJuIHRlbnNvcnMubWFwKFxuICAgICAgKHQsIGkpID0+XG4gICAgICAgICAgY29udmVydFRvVGVuc29yKHQsIGAke2FyZ05hbWV9WyR7aX1dYCwgZnVuY3Rpb25OYW1lLCBwYXJzZUFzRHR5cGUpKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { isPromise } from '../util';\nexport const OP_SCOPE_SUFFIX = '__op';\n/**\n * Used for wrapping functions that perform math operations on\n * Tensors. The function will be wrapped in a named scope that cleans all\n * memory usage after the function is done.\n */\nexport function op(f) {\n const keys = Object.keys(f);\n if (keys.length !== 1) {\n throw new Error(`Please provide an object with a single key ` +\n `(operation name) mapping to a function. Got an object with ` +\n `${keys.length} keys.`);\n }\n let opName = keys[0];\n const fn = f[opName];\n // Strip the underscore from the end of the function name.\n if (opName.endsWith('_')) {\n opName = opName.substring(0, opName.length - 1);\n }\n // add an __op suffix to distinguish ops from kernels in tf.profile\n opName = opName + OP_SCOPE_SUFFIX;\n // tslint:disable-next-line:no-any\n const f2 = (...args) => {\n ENGINE.startScope(opName);\n try {\n const result = fn(...args);\n if (isPromise(result)) {\n console.error('Cannot return a Promise inside of tidy.');\n }\n ENGINE.endScope(result);\n return result;\n }\n catch (ex) {\n ENGINE.endScope(null);\n throw ex;\n }\n };\n Object.defineProperty(f2, 'name', { value: opName, configurable: true });\n // tslint:disable-next-line:no-any\n return f2;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvb3BlcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRXRDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsRUFBRSxDQUFxQixDQUFzQjtJQUMzRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDWCw2Q0FBNkM7WUFDN0MsNkRBQTZEO1lBQzdELEdBQUcsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7S0FDN0I7SUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXJCLDBEQUEwRDtJQUMxRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDakQ7SUFFRCxtRUFBbUU7SUFDbkUsTUFBTSxHQUFHLE1BQU0sR0FBRyxlQUFlLENBQUM7SUFFbEMsa0NBQWtDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRTtRQUM1QixNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLElBQUk7WUFDRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxDQUFDO1NBQ1Y7SUFDSCxDQUFDLENBQUM7SUFDRixNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRXZFLGtDQUFrQztJQUNsQyxPQUFPLEVBQWMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge2lzUHJvbWlzZX0gZnJvbSAnLi4vdXRpbCc7XG5cbmV4cG9ydCBjb25zdCBPUF9TQ09QRV9TVUZGSVggPSAnX19vcCc7XG5cbi8qKlxuICogVXNlZCBmb3Igd3JhcHBpbmcgZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSBtYXRoIG9wZXJhdGlvbnMgb25cbiAqIFRlbnNvcnMuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIHdyYXBwZWQgaW4gYSBuYW1lZCBzY29wZSB0aGF0IGNsZWFucyBhbGxcbiAqIG1lbW9yeSB1c2FnZSBhZnRlciB0aGUgZnVuY3Rpb24gaXMgZG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wPFQgZXh0ZW5kcyBGdW5jdGlvbj4oZjoge1tuYW1lOiBzdHJpbmddOiBUfSk6IFQge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZik7XG4gIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBsZWFzZSBwcm92aWRlIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleSBgICtcbiAgICAgICAgYChvcGVyYXRpb24gbmFtZSkgbWFwcGluZyB0byBhIGZ1bmN0aW9uLiBHb3QgYW4gb2JqZWN0IHdpdGggYCArXG4gICAgICAgIGAke2tleXMubGVuZ3RofSBrZXlzLmApO1xuICB9XG5cbiAgbGV0IG9wTmFtZSA9IGtleXNbMF07XG4gIGNvbnN0IGZuID0gZltvcE5hbWVdO1xuXG4gIC8vIFN0cmlwIHRoZSB1bmRlcnNjb3JlIGZyb20gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gbmFtZS5cbiAgaWYgKG9wTmFtZS5lbmRzV2l0aCgnXycpKSB7XG4gICAgb3BOYW1lID0gb3BOYW1lLnN1YnN0cmluZygwLCBvcE5hbWUubGVuZ3RoIC0gMSk7XG4gIH1cblxuICAvLyBhZGQgYW4gX19vcCBzdWZmaXggdG8gZGlzdGluZ3Vpc2ggb3BzIGZyb20ga2VybmVscyBpbiB0Zi5wcm9maWxlXG4gIG9wTmFtZSA9IG9wTmFtZSArIE9QX1NDT1BFX1NVRkZJWDtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIGNvbnN0IGYyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgRU5HSU5FLnN0YXJ0U2NvcGUob3BOYW1lKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHJldHVybiBhIFByb21pc2UgaW5zaWRlIG9mIHRpZHkuJyk7XG4gICAgICB9XG4gICAgICBFTkdJTkUuZW5kU2NvcGUocmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIEVOR0lORS5lbmRTY29wZShudWxsKTtcbiAgICAgIHRocm93IGV4O1xuICAgIH1cbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGYyLCAnbmFtZScsIHt2YWx1ZTogb3BOYW1lLCBjb25maWd1cmFibGU6IHRydWV9KTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIHJldHVybiBmMiBhcyBhbnkgYXMgVDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Complex } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Converts two real numbers to a complex number.\n *\n * Given a tensor `real` representing the real part of a complex number, and a\n * tensor `imag` representing the imaginary part of a complex number, this\n * operation returns complex numbers elementwise of the form [r0, i0, r1, i1],\n * where r represents the real part and i represents the imag part.\n *\n * The input tensors real and imag must have the same shape.\n *\n * ```js\n * const real = tf.tensor1d([2.25, 3.25]);\n * const imag = tf.tensor1d([4.75, 5.75]);\n * const complex = tf.complex(real, imag);\n *\n * complex.print();\n * ```\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction complex_(real, imag) {\n const $real = convertToTensor(real, 'real', 'complex');\n const $imag = convertToTensor(imag, 'imag', 'complex');\n util.assertShapesMatch($real.shape, $imag.shape, `real and imag shapes, ${$real.shape} and ${$imag.shape}, ` +\n `must match in call to tf.complex().`);\n const inputs = { real: $real, imag: $imag };\n return ENGINE.runKernel(Complex, inputs);\n}\nexport const complex = /* @__PURE__ */ op({ complex_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxRQUFRLENBQW1CLElBQWtCLEVBQUUsSUFBa0I7SUFDeEUsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLGlCQUFpQixDQUNsQixLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQ3hCLHlCQUF5QixLQUFLLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxLQUFLLElBQUk7UUFDdkQscUNBQXFDLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBa0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0NvbXBsZXgsIENvbXBsZXhJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbnZlcnRzIHR3byByZWFsIG51bWJlcnMgdG8gYSBjb21wbGV4IG51bWJlci5cbiAqXG4gKiBHaXZlbiBhIHRlbnNvciBgcmVhbGAgcmVwcmVzZW50aW5nIHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlciwgYW5kIGFcbiAqIHRlbnNvciBgaW1hZ2AgcmVwcmVzZW50aW5nIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyLCB0aGlzXG4gKiBvcGVyYXRpb24gcmV0dXJucyBjb21wbGV4IG51bWJlcnMgZWxlbWVudHdpc2Ugb2YgdGhlIGZvcm0gW3IwLCBpMCwgcjEsIGkxXSxcbiAqIHdoZXJlIHIgcmVwcmVzZW50cyB0aGUgcmVhbCBwYXJ0IGFuZCBpIHJlcHJlc2VudHMgdGhlIGltYWcgcGFydC5cbiAqXG4gKiBUaGUgaW5wdXQgdGVuc29ycyByZWFsIGFuZCBpbWFnIG11c3QgaGF2ZSB0aGUgc2FtZSBzaGFwZS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVhbCA9IHRmLnRlbnNvcjFkKFsyLjI1LCAzLjI1XSk7XG4gKiBjb25zdCBpbWFnID0gdGYudGVuc29yMWQoWzQuNzUsIDUuNzVdKTtcbiAqIGNvbnN0IGNvbXBsZXggPSB0Zi5jb21wbGV4KHJlYWwsIGltYWcpO1xuICpcbiAqIGNvbXBsZXgucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gY29tcGxleF88VCBleHRlbmRzIFRlbnNvcj4ocmVhbDogVHxUZW5zb3JMaWtlLCBpbWFnOiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHJlYWwgPSBjb252ZXJ0VG9UZW5zb3IocmVhbCwgJ3JlYWwnLCAnY29tcGxleCcpO1xuICBjb25zdCAkaW1hZyA9IGNvbnZlcnRUb1RlbnNvcihpbWFnLCAnaW1hZycsICdjb21wbGV4Jyk7XG4gIHV0aWwuYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAkcmVhbC5zaGFwZSwgJGltYWcuc2hhcGUsXG4gICAgICBgcmVhbCBhbmQgaW1hZyBzaGFwZXMsICR7JHJlYWwuc2hhcGV9IGFuZCAkeyRpbWFnLnNoYXBlfSwgYCArXG4gICAgICAgICAgYG11c3QgbWF0Y2ggaW4gY2FsbCB0byB0Zi5jb21wbGV4KCkuYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBDb21wbGV4SW5wdXRzID0ge3JlYWw6ICRyZWFsLCBpbWFnOiAkaW1hZ307XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKENvbXBsZXgsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBsZXggPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NvbXBsZXhffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { isWebGLData, isWebGPUData } from '../types';\nimport { assert, assertNonNegativeIntegerDimensions, flatten, inferDtype, isTypedArray, sizeFromShape, toTypedArray } from '../util';\n/** This is shared code across all tensor creation methods. */\nexport function makeTensor(values, shape, inferredShape, dtype) {\n if (dtype == null) {\n dtype = inferDtype(values);\n }\n else if (dtype === 'complex64') {\n throw new Error(`Cannot construct a complex64 tensor directly. ` +\n `Please use tf.complex(real, imag).`);\n }\n if (isWebGPUData(values) || isWebGLData(values)) {\n if (dtype !== 'float32' && dtype !== 'int32') {\n throw new Error(`Creating tensor from GPU data only supports ` +\n `'float32'|'int32' dtype, while the dtype is ${dtype}.`);\n }\n return ENGINE.backend.createTensorFromGPUData(values, shape || inferredShape, dtype);\n }\n if (!isTypedArray(values) && !Array.isArray(values) &&\n typeof values !== 'number' && typeof values !== 'boolean' &&\n typeof values !== 'string') {\n throw new Error('values passed to tensor(values) must be a number/boolean/string or ' +\n 'an array of numbers/booleans/strings, or a TypedArray');\n }\n // Verify that the shape matches the inferred shape.\n if (shape != null) {\n assertNonNegativeIntegerDimensions(shape);\n const providedSize = sizeFromShape(shape);\n const inferredSize = sizeFromShape(inferredShape);\n assert(providedSize === inferredSize, () => `Based on the provided shape, [${shape}], the tensor should have ` +\n `${providedSize} values but has ${inferredSize}`);\n for (let i = 0; i < inferredShape.length; ++i) {\n const inferred = inferredShape[i];\n const flatDimsDontMatch = i === inferredShape.length - 1 ?\n inferred !== sizeFromShape(shape.slice(i)) :\n true;\n assert(inferredShape[i] === shape[i] || !flatDimsDontMatch, () => `Error creating a new Tensor. Inferred shape ` +\n `(${inferredShape}) does not match the provided ` +\n `shape (${shape}). `);\n }\n }\n if (!isTypedArray(values) && !Array.isArray(values)) {\n values = [values];\n }\n shape = shape || inferredShape;\n values = dtype !== 'string' ?\n toTypedArray(values, dtype) :\n flatten(values, [], true);\n return ENGINE.makeTensor(values, shape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX29wc191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdGVuc29yX29wc191dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQWdELE1BQU0sVUFBVSxDQUFDO0FBRWxHLE9BQU8sRUFBQyxNQUFNLEVBQUUsa0NBQWtDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVuSSw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFVBQVUsQ0FDdEIsTUFBdUMsRUFBRSxLQUFlLEVBQ3hELGFBQXVCLEVBQUUsS0FBZ0I7SUFDM0MsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDNUI7U0FBTSxJQUFJLEtBQUssS0FBSyxXQUFXLEVBQUU7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDWCxnREFBZ0Q7WUFDaEQsb0NBQW9DLENBQUMsQ0FBQztLQUMzQztJQUVELElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUM1QyxNQUFNLElBQUksS0FBSyxDQUNYLDhDQUE4QztnQkFDOUMsK0NBQStDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQ3pDLE1BQU0sRUFBRSxLQUFLLElBQUksYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzVDO0lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQy9DLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxTQUFTO1FBQ3pELE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUNYLHFFQUFxRTtZQUNyRSx1REFBdUQsQ0FBQyxDQUFDO0tBQzlEO0lBQ0Qsb0RBQW9EO0lBQ3BELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FDRixZQUFZLEtBQUssWUFBWSxFQUM3QixHQUFHLEVBQUUsQ0FDRCxpQ0FBaUMsS0FBSyw0QkFBNEI7WUFDbEUsR0FBRyxZQUFZLG1CQUFtQixZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRTFELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxRQUFRLEtBQUssYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUM7WUFDVCxNQUFNLENBQ0YsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUNuRCxHQUFHLEVBQUUsQ0FBQyw4Q0FBOEM7Z0JBQ2hELElBQUksYUFBYSxnQ0FBZ0M7Z0JBQ2pELFVBQVUsS0FBSyxLQUFLLENBQUMsQ0FBQztTQUMvQjtLQUNGO0lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbkQsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFhLENBQUM7S0FDL0I7SUFFRCxLQUFLLEdBQUcsS0FBSyxJQUFJLGFBQWEsQ0FBQztJQUMvQixNQUFNLEdBQUcsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsTUFBa0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFhLENBQUM7SUFDdEQsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQW9CLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2lzV2ViR0xEYXRhLCBpc1dlYkdQVURhdGEsIFRlbnNvckxpa2UsIFR5cGVkQXJyYXksIFdlYkdMRGF0YSwgV2ViR1BVRGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnQsIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMsIGZsYXR0ZW4sIGluZmVyRHR5cGUsIGlzVHlwZWRBcnJheSwgc2l6ZUZyb21TaGFwZSwgdG9UeXBlZEFycmF5fSBmcm9tICcuLi91dGlsJztcblxuLyoqIFRoaXMgaXMgc2hhcmVkIGNvZGUgYWNyb3NzIGFsbCB0ZW5zb3IgY3JlYXRpb24gbWV0aG9kcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVGVuc29yKFxuICAgIHZhbHVlczogVGVuc29yTGlrZXxXZWJHTERhdGF8V2ViR1BVRGF0YSwgc2hhcGU6IG51bWJlcltdLFxuICAgIGluZmVycmVkU2hhcGU6IG51bWJlcltdLCBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yIHtcbiAgaWYgKGR0eXBlID09IG51bGwpIHtcbiAgICBkdHlwZSA9IGluZmVyRHR5cGUodmFsdWVzKTtcbiAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY29uc3RydWN0IGEgY29tcGxleDY0IHRlbnNvciBkaXJlY3RseS4gYCArXG4gICAgICAgIGBQbGVhc2UgdXNlIHRmLmNvbXBsZXgocmVhbCwgaW1hZykuYCk7XG4gIH1cblxuICBpZiAoaXNXZWJHUFVEYXRhKHZhbHVlcykgfHwgaXNXZWJHTERhdGEodmFsdWVzKSkge1xuICAgIGlmIChkdHlwZSAhPT0gJ2Zsb2F0MzInICYmIGR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENyZWF0aW5nIHRlbnNvciBmcm9tIEdQVSBkYXRhIG9ubHkgc3VwcG9ydHMgYCArXG4gICAgICAgICAgYCdmbG9hdDMyJ3wnaW50MzInIGR0eXBlLCB3aGlsZSB0aGUgZHR5cGUgaXMgJHtkdHlwZX0uYCk7XG4gICAgfVxuICAgIHJldHVybiBFTkdJTkUuYmFja2VuZC5jcmVhdGVUZW5zb3JGcm9tR1BVRGF0YShcbiAgICAgICAgdmFsdWVzLCBzaGFwZSB8fCBpbmZlcnJlZFNoYXBlLCBkdHlwZSk7XG4gIH1cblxuICBpZiAoIWlzVHlwZWRBcnJheSh2YWx1ZXMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlcykgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZXMgIT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZXMgIT09ICdib29sZWFuJyAmJlxuICAgICAgdHlwZW9mIHZhbHVlcyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd2YWx1ZXMgcGFzc2VkIHRvIHRlbnNvcih2YWx1ZXMpIG11c3QgYmUgYSBudW1iZXIvYm9vbGVhbi9zdHJpbmcgb3IgJyArXG4gICAgICAgICdhbiBhcnJheSBvZiBudW1iZXJzL2Jvb2xlYW5zL3N0cmluZ3MsIG9yIGEgVHlwZWRBcnJheScpO1xuICB9XG4gIC8vIFZlcmlmeSB0aGF0IHRoZSBzaGFwZSBtYXRjaGVzIHRoZSBpbmZlcnJlZCBzaGFwZS5cbiAgaWYgKHNoYXBlICE9IG51bGwpIHtcbiAgICBhc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zKHNoYXBlKTtcblxuICAgIGNvbnN0IHByb3ZpZGVkU2l6ZSA9IHNpemVGcm9tU2hhcGUoc2hhcGUpO1xuICAgIGNvbnN0IGluZmVycmVkU2l6ZSA9IHNpemVGcm9tU2hhcGUoaW5mZXJyZWRTaGFwZSk7XG4gICAgYXNzZXJ0KFxuICAgICAgICBwcm92aWRlZFNpemUgPT09IGluZmVycmVkU2l6ZSxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGBCYXNlZCBvbiB0aGUgcHJvdmlkZWQgc2hhcGUsIFske3NoYXBlfV0sIHRoZSB0ZW5zb3Igc2hvdWxkIGhhdmUgYCArXG4gICAgICAgICAgICBgJHtwcm92aWRlZFNpemV9IHZhbHVlcyBidXQgaGFzICR7aW5mZXJyZWRTaXplfWApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmZlcnJlZFNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBpbmZlcnJlZCA9IGluZmVycmVkU2hhcGVbaV07XG4gICAgICBjb25zdCBmbGF0RGltc0RvbnRNYXRjaCA9IGkgPT09IGluZmVycmVkU2hhcGUubGVuZ3RoIC0gMSA/XG4gICAgICAgICAgaW5mZXJyZWQgIT09IHNpemVGcm9tU2hhcGUoc2hhcGUuc2xpY2UoaSkpIDpcbiAgICAgICAgICB0cnVlO1xuICAgICAgYXNzZXJ0KFxuICAgICAgICAgIGluZmVycmVkU2hhcGVbaV0gPT09IHNoYXBlW2ldIHx8ICFmbGF0RGltc0RvbnRNYXRjaCxcbiAgICAgICAgICAoKSA9PiBgRXJyb3IgY3JlYXRpbmcgYSBuZXcgVGVuc29yLiBJbmZlcnJlZCBzaGFwZSBgICtcbiAgICAgICAgICAgICAgYCgke2luZmVycmVkU2hhcGV9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvdmlkZWQgYCArXG4gICAgICAgICAgICAgIGBzaGFwZSAoJHtzaGFwZX0pLiBgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzVHlwZWRBcnJheSh2YWx1ZXMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICB2YWx1ZXMgPSBbdmFsdWVzXSBhcyBudW1iZXJbXTtcbiAgfVxuXG4gIHNoYXBlID0gc2hhcGUgfHwgaW5mZXJyZWRTaGFwZTtcbiAgdmFsdWVzID0gZHR5cGUgIT09ICdzdHJpbmcnID9cbiAgICAgIHRvVHlwZWRBcnJheSh2YWx1ZXMsIGR0eXBlKSA6XG4gICAgICBmbGF0dGVuKHZhbHVlcyBhcyBzdHJpbmdbXSwgW10sIHRydWUpIGFzIHN0cmluZ1tdO1xuICByZXR1cm4gRU5HSU5FLm1ha2VUZW5zb3IodmFsdWVzIGFzIFR5cGVkQXJyYXksIHNoYXBlLCBkdHlwZSk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates a `tf.Tensor` with the provided values, shape and dtype.\n *\n * ```js\n * // Pass an array of values to create a vector.\n * tf.tensor([1, 2, 3, 4]).print();\n * ```\n *\n * ```js\n * // Pass a nested array of values to make a matrix or a higher\n * // dimensional tensor.\n * tf.tensor([[1, 2], [3, 4]]).print();\n * ```\n *\n * ```js\n * // Pass a flat array and specify a shape yourself.\n * tf.tensor([1, 2, 3, 4], [2, 2]).print();\n * ```\n *\n * ```js\n * // Pass a `WebGLData` object and specify a shape yourself.\n *\n * // This makes it possible for TF.js applications to avoid GPU / CPU sync.\n * // For example, if your application includes a preprocessing step on the GPU,\n * // you could upload the GPU output directly to TF.js, rather than first\n * // downloading the values.\n *\n * // Example for WebGL2:\n * if (tf.findBackend('custom-webgl') == null) {\n * const customCanvas = document.createElement('canvas');\n * const customBackend = new tf.MathBackendWebGL(customCanvas);\n * tf.registerBackend('custom-webgl', () => customBackend);\n * }\n * const savedBackend = tf.getBackend();\n * await tf.setBackend('custom-webgl');\n * const gl = tf.backend().gpgpu.gl;\n * const texture = gl.createTexture();\n * const tex2d = gl.TEXTURE_2D;\n * const width = 2;\n * const height = 2;\n *\n * gl.bindTexture(tex2d, texture);\n * gl.texParameteri(tex2d, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n * gl.texParameteri(tex2d, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n * gl.texParameteri(tex2d, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n * gl.texParameteri(tex2d, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n * gl.texImage2D(\n * tex2d, 0, gl.RGBA32F, // internalFormat\n * width, height, 0,\n * gl.RGBA, // textureFormat\n * gl.FLOAT, // textureType\n * new Float32Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])\n * );\n *\n * // Currently, the `texture` has 4 pixels:\n * // Pixel0 is {R:0, G:1, B:2, A:3}\n * // Pixel1 is {R:4, G:5, B:6, A:7}\n * // Pixel2 is {R:8, G:9, B:10, A:11}\n * // Pixel3 is {R:12, G:13, B:14, A:15}\n *\n * const logicalShape = [height * width * 2];\n * const a = tf.tensor({texture, height, width, channels: 'BR'}, logicalShape);\n * a.print();\n * // Tensor value will be [2, 0, 6, 4, 10, 8, 14, 12], since [2, 0] is the\n * // values of 'B' and 'R' channels of Pixel0, [6, 4] is the values of 'B' and\n * 'R'\n * // channels of Pixel1...\n *\n * // For postprocessing on the GPU, it's possible to retrieve the texture\n * // backing any tensor by calling the tensor's `dataToGPU` method like\n * // so:\n *\n * const tex = a.dataToGPU();\n * await tf.setBackend(savedBackend);\n * ```\n *\n * ```js\n * // Pass a `WebGPUData` object and specify a shape yourself.\n *\n * // This makes it possible for TF.js applications to avoid GPU / CPU sync.\n * // For example, if your application includes a preprocessing step on the GPU,\n * // you could upload the GPU output directly to TF.js, rather than first\n * // downloading the values. Unlike WebGL, this optionally supports zero copy\n * // by WebGPUData.zeroCopy. When zeroCopy is false or undefined(default), this\n * // passing GPUBuffer can be destroyed after tensor is created. When zeroCopy\n * // is true, this GPUBuffer is bound directly by the tensor, so do not destroy\n * // this GPUBuffer until all access is done.\n *\n * // Example for WebGPU:\n * function createGPUBufferFromData(device, data, dtype) {\n * const bytesPerElement = 4;\n * const sizeInBytes = data.length * bytesPerElement;\n *\n * const gpuWriteBuffer = device.createBuffer({\n * mappedAtCreation: true,\n * size: sizeInBytes,\n * usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC\n * });\n * const arrayBuffer = gpuWriteBuffer.getMappedRange();\n * if (dtype === 'float32') {\n * new Float32Array(arrayBuffer).set(data);\n * } else if (dtype === 'int32') {\n * new Int32Array(arrayBuffer).set(data);\n * } else {\n * throw new Error(\n * `Creating tensor from GPUBuffer only supports` +\n * `'float32'|'int32' dtype, while the dtype is ${dtype}.`);\n * }\n * gpuWriteBuffer.unmap();\n *\n * const gpuReadBuffer = device.createBuffer({\n * mappedAtCreation: false,\n * size: sizeInBytes,\n * usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE |\n * GPUBufferUsage.COPY_SRC\n * });\n *\n * const copyEncoder = device.createCommandEncoder();\n * copyEncoder.copyBufferToBuffer(\n * gpuWriteBuffer, 0, gpuReadBuffer, 0, sizeInBytes);\n * const copyCommands = copyEncoder.finish();\n * device.queue.submit([copyCommands]);\n * gpuWriteBuffer.destroy();\n * return gpuReadBuffer;\n * }\n *\n * const savedBackend = tf.getBackend();\n * await tf.setBackend('webgpu').catch(\n * () => {throw new Error(\n * 'Failed to use WebGPU backend. Please use Chrome Canary to run.')});\n * const dtype = 'float32';\n * const device = tf.backend().device;\n * const aData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];\n * const bData = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4];\n * const expected = [2, 4, 6, 8, 6, 8, 10, 12, 10, 12, 14, 16, 14, 16, 18, 20];\n * const aBuffer = createGPUBufferFromData(device, aData, dtype);\n * const shape = [aData.length];\n * // To use zeroCopy, use {buffer: aBuffer, zeroCopy: true} instead and destroy\n * // aBuffer untill all access is done.\n * const a = tf.tensor({buffer: aBuffer}, shape, dtype);\n * const b = tf.tensor(bData, shape, dtype);\n * const result = tf.add(a, b);\n * result.print();\n * a.dispose();\n * b.dispose();\n * result.dispose();\n * aBuffer.destroy();\n * await tf.setBackend(savedBackend);\n * ```\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`, or a `WebGLData` object, or a\n * `WebGPUData` object. If the values are strings, they will be encoded as utf-8\n * and kept as `Uint8Array[]`. If the values is a `WebGLData` object, the dtype\n * could only be 'float32' or 'int32' and the object has to have: 1. texture, a\n * `WebGLTexture`, the texture must share the same `WebGLRenderingContext` with\n * TFJS's WebGL backend (you could create a custom WebGL backend from your\n * texture's canvas) and the internal texture format for the input texture must\n * be floating point or normalized integer; 2. height, the height of the\n * texture; 3. width, the width of the texture; 4. channels, a non-empty subset\n * of 'RGBA', indicating the values of which channels will be passed to the\n * tensor, such as 'R' or 'BR' (The order of the channels affect the order of\n * tensor values. ). (If the values passed from texture is less than the tensor\n * size, zeros will be padded at the rear.). If the values is a `WebGPUData`\n * object, the dtype could only be 'float32' or 'int32 and the object has to\n * have: buffer, a `GPUBuffer`. The buffer must: 1. share the same `GPUDevice`\n * with TFJS's WebGPU backend; 2. buffer.usage should at least support\n * GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC; 3. buffer.size should not\n * be smaller than the byte size of tensor shape. WebGPUData optionally supports\n * zero copy by flag zeroCopy. When zeroCopy is false or undefined(default),\n * this passing GPUBuffer can be destroyed after tensor is created. When\n * zeroCopy is true, this GPUBuffer is bound directly by the tensor, so do not\n * destroy this GPUBuffer until all access is done.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor(values, shape, dtype) {\n const inferredShape = inferShape(values, dtype);\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdGVuc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUk5QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlMRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ2xCLE1BQXVDLEVBQUUsS0FBbUIsRUFDNUQsS0FBZ0I7SUFDbEIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQWMsQ0FBQztBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRhVHlwZSwgUmFuaywgU2hhcGVNYXAsIFdlYkdMRGF0YSwgV2ViR1BVRGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge21ha2VUZW5zb3J9IGZyb20gJy4vdGVuc29yX29wc191dGlsJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogYGBganNcbiAqIC8vIFBhc3MgYW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNyZWF0ZSBhIHZlY3Rvci5cbiAqIHRmLnRlbnNvcihbMSwgMiwgMywgNF0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gUGFzcyBhIG5lc3RlZCBhcnJheSBvZiB2YWx1ZXMgdG8gbWFrZSBhIG1hdHJpeCBvciBhIGhpZ2hlclxuICogLy8gZGltZW5zaW9uYWwgdGVuc29yLlxuICogdGYudGVuc29yKFtbMSwgMl0sIFszLCA0XV0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gUGFzcyBhIGZsYXQgYXJyYXkgYW5kIHNwZWNpZnkgYSBzaGFwZSB5b3Vyc2VsZi5cbiAqIHRmLnRlbnNvcihbMSwgMiwgMywgNF0sIFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBQYXNzIGEgYFdlYkdMRGF0YWAgb2JqZWN0IGFuZCBzcGVjaWZ5IGEgc2hhcGUgeW91cnNlbGYuXG4gKlxuICogLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgVEYuanMgYXBwbGljYXRpb25zIHRvIGF2b2lkIEdQVSAvIENQVSBzeW5jLlxuICogLy8gRm9yIGV4YW1wbGUsIGlmIHlvdXIgYXBwbGljYXRpb24gaW5jbHVkZXMgYSBwcmVwcm9jZXNzaW5nIHN0ZXAgb24gdGhlIEdQVSxcbiAqIC8vIHlvdSBjb3VsZCB1cGxvYWQgdGhlIEdQVSBvdXRwdXQgZGlyZWN0bHkgdG8gVEYuanMsIHJhdGhlciB0aGFuIGZpcnN0XG4gKiAvLyBkb3dubG9hZGluZyB0aGUgdmFsdWVzLlxuICpcbiAqIC8vIEV4YW1wbGUgZm9yIFdlYkdMMjpcbiAqIGlmICh0Zi5maW5kQmFja2VuZCgnY3VzdG9tLXdlYmdsJykgPT0gbnVsbCkge1xuICogICBjb25zdCBjdXN0b21DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAqICAgY29uc3QgY3VzdG9tQmFja2VuZCA9IG5ldyB0Zi5NYXRoQmFja2VuZFdlYkdMKGN1c3RvbUNhbnZhcyk7XG4gKiAgIHRmLnJlZ2lzdGVyQmFja2VuZCgnY3VzdG9tLXdlYmdsJywgKCkgPT4gY3VzdG9tQmFja2VuZCk7XG4gKiB9XG4gKiBjb25zdCBzYXZlZEJhY2tlbmQgPSB0Zi5nZXRCYWNrZW5kKCk7XG4gKiBhd2FpdCB0Zi5zZXRCYWNrZW5kKCdjdXN0b20td2ViZ2wnKTtcbiAqIGNvbnN0IGdsID0gdGYuYmFja2VuZCgpLmdwZ3B1LmdsO1xuICogY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAqIGNvbnN0IHRleDJkID0gZ2wuVEVYVFVSRV8yRDtcbiAqIGNvbnN0IHdpZHRoID0gMjtcbiAqIGNvbnN0IGhlaWdodCA9IDI7XG4gKlxuICogZ2wuYmluZFRleHR1cmUodGV4MmQsIHRleHR1cmUpO1xuICogZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICogZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xuICogZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTtcbiAqIGdsLnRleFBhcmFtZXRlcmkodGV4MmQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gKiBnbC50ZXhJbWFnZTJEKFxuICogICB0ZXgyZCwgMCwgZ2wuUkdCQTMyRiwgLy8gaW50ZXJuYWxGb3JtYXRcbiAqICAgd2lkdGgsIGhlaWdodCwgMCxcbiAqICAgZ2wuUkdCQSwgLy8gdGV4dHVyZUZvcm1hdFxuICogICBnbC5GTE9BVCwgLy8gdGV4dHVyZVR5cGVcbiAqICAgbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNV0pXG4gKiApO1xuICpcbiAqIC8vIEN1cnJlbnRseSwgdGhlIGB0ZXh0dXJlYCBoYXMgNCBwaXhlbHM6XG4gKiAvLyBQaXhlbDAgaXMge1I6MCwgRzoxLCBCOjIsIEE6M31cbiAqIC8vIFBpeGVsMSBpcyB7Ujo0LCBHOjUsIEI6NiwgQTo3fVxuICogLy8gUGl4ZWwyIGlzIHtSOjgsIEc6OSwgQjoxMCwgQToxMX1cbiAqIC8vIFBpeGVsMyBpcyB7UjoxMiwgRzoxMywgQjoxNCwgQToxNX1cbiAqXG4gKiBjb25zdCBsb2dpY2FsU2hhcGUgPSBbaGVpZ2h0ICogd2lkdGggKiAyXTtcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3Ioe3RleHR1cmUsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzOiAnQlInfSwgbG9naWNhbFNoYXBlKTtcbiAqIGEucHJpbnQoKTtcbiAqIC8vIFRlbnNvciB2YWx1ZSB3aWxsIGJlIFsyLCAwLCA2LCA0LCAxMCwgOCwgMTQsIDEyXSwgc2luY2UgWzIsIDBdIGlzIHRoZVxuICogLy8gdmFsdWVzIG9mICdCJyBhbmQgJ1InIGNoYW5uZWxzIG9mIFBpeGVsMCwgWzYsIDRdIGlzIHRoZSB2YWx1ZXMgb2YgJ0InIGFuZFxuICogJ1InXG4gKiAvLyBjaGFubmVscyBvZiBQaXhlbDEuLi5cbiAqXG4gKiAvLyBGb3IgcG9zdHByb2Nlc3Npbmcgb24gdGhlIEdQVSwgaXQncyBwb3NzaWJsZSB0byByZXRyaWV2ZSB0aGUgdGV4dHVyZVxuICogLy8gYmFja2luZyBhbnkgdGVuc29yIGJ5IGNhbGxpbmcgdGhlIHRlbnNvcidzIGBkYXRhVG9HUFVgIG1ldGhvZCBsaWtlXG4gKiAvLyBzbzpcbiAqXG4gKiBjb25zdCB0ZXggPSBhLmRhdGFUb0dQVSgpO1xuICogYXdhaXQgdGYuc2V0QmFja2VuZChzYXZlZEJhY2tlbmQpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIFBhc3MgYSBgV2ViR1BVRGF0YWAgb2JqZWN0IGFuZCBzcGVjaWZ5IGEgc2hhcGUgeW91cnNlbGYuXG4gKlxuICogLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgVEYuanMgYXBwbGljYXRpb25zIHRvIGF2b2lkIEdQVSAvIENQVSBzeW5jLlxuICogLy8gRm9yIGV4YW1wbGUsIGlmIHlvdXIgYXBwbGljYXRpb24gaW5jbHVkZXMgYSBwcmVwcm9jZXNzaW5nIHN0ZXAgb24gdGhlIEdQVSxcbiAqIC8vIHlvdSBjb3VsZCB1cGxvYWQgdGhlIEdQVSBvdXRwdXQgZGlyZWN0bHkgdG8gVEYuanMsIHJhdGhlciB0aGFuIGZpcnN0XG4gKiAvLyBkb3dubG9hZGluZyB0aGUgdmFsdWVzLiBVbmxpa2UgV2ViR0wsIHRoaXMgb3B0aW9uYWxseSBzdXBwb3J0cyB6ZXJvIGNvcHlcbiAqIC8vIGJ5IFdlYkdQVURhdGEuemVyb0NvcHkuIFdoZW4gemVyb0NvcHkgaXMgZmFsc2Ugb3IgdW5kZWZpbmVkKGRlZmF1bHQpLCB0aGlzXG4gKiAvLyBwYXNzaW5nIEdQVUJ1ZmZlciBjYW4gYmUgZGVzdHJveWVkIGFmdGVyIHRlbnNvciBpcyBjcmVhdGVkLiBXaGVuIHplcm9Db3B5XG4gKiAvLyBpcyB0cnVlLCB0aGlzIEdQVUJ1ZmZlciBpcyBib3VuZCBkaXJlY3RseSBieSB0aGUgdGVuc29yLCBzbyBkbyBub3QgZGVzdHJveVxuICogLy8gdGhpcyBHUFVCdWZmZXIgdW50aWwgYWxsIGFjY2VzcyBpcyBkb25lLlxuICpcbiAqIC8vIEV4YW1wbGUgZm9yIFdlYkdQVTpcbiAqIGZ1bmN0aW9uIGNyZWF0ZUdQVUJ1ZmZlckZyb21EYXRhKGRldmljZSwgZGF0YSwgZHR5cGUpIHtcbiAqICAgY29uc3QgYnl0ZXNQZXJFbGVtZW50ID0gNDtcbiAqICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBkYXRhLmxlbmd0aCAqIGJ5dGVzUGVyRWxlbWVudDtcbiAqXG4gKiAgIGNvbnN0IGdwdVdyaXRlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gKiAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAqICAgICBzaXplOiBzaXplSW5CeXRlcyxcbiAqICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkNcbiAqICAgfSk7XG4gKiAgIGNvbnN0IGFycmF5QnVmZmVyID0gZ3B1V3JpdGVCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAqICAgaWYgKGR0eXBlID09PSAnZmxvYXQzMicpIHtcbiAqICAgICBuZXcgRmxvYXQzMkFycmF5KGFycmF5QnVmZmVyKS5zZXQoZGF0YSk7XG4gKiAgIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAqICAgICBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZlcikuc2V0KGRhdGEpO1xuICogICB9IGVsc2Uge1xuICogICAgIHRocm93IG5ldyBFcnJvcihcbiAqICAgICAgICAgYENyZWF0aW5nIHRlbnNvciBmcm9tIEdQVUJ1ZmZlciBvbmx5IHN1cHBvcnRzYCArXG4gKiAgICAgICAgIGAnZmxvYXQzMid8J2ludDMyJyBkdHlwZSwgd2hpbGUgdGhlIGR0eXBlIGlzICR7ZHR5cGV9LmApO1xuICogICB9XG4gKiAgIGdwdVdyaXRlQnVmZmVyLnVubWFwKCk7XG4gKlxuICogICBjb25zdCBncHVSZWFkQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gKiAgICAgbWFwcGVkQXRDcmVhdGlvbjogZmFsc2UsXG4gKiAgICAgc2l6ZTogc2l6ZUluQnl0ZXMsXG4gKiAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gKiAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDXG4gKiAgIH0pO1xuICpcbiAqICAgY29uc3QgY29weUVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTtcbiAqICAgY29weUVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKFxuICogICAgICAgZ3B1V3JpdGVCdWZmZXIsIDAsIGdwdVJlYWRCdWZmZXIsIDAsIHNpemVJbkJ5dGVzKTtcbiAqICAgY29uc3QgY29weUNvbW1hbmRzID0gY29weUVuY29kZXIuZmluaXNoKCk7XG4gKiAgIGRldmljZS5xdWV1ZS5zdWJtaXQoW2NvcHlDb21tYW5kc10pO1xuICogICBncHVXcml0ZUJ1ZmZlci5kZXN0cm95KCk7XG4gKiAgIHJldHVybiBncHVSZWFkQnVmZmVyO1xuICogfVxuICpcbiAqIGNvbnN0IHNhdmVkQmFja2VuZCA9IHRmLmdldEJhY2tlbmQoKTtcbiAqIGF3YWl0IHRmLnNldEJhY2tlbmQoJ3dlYmdwdScpLmNhdGNoKFxuICogICAgICgpID0+IHt0aHJvdyBuZXcgRXJyb3IoXG4gKiAgICAgICAgICdGYWlsZWQgdG8gdXNlIFdlYkdQVSBiYWNrZW5kLiBQbGVhc2UgdXNlIENocm9tZSBDYW5hcnkgdG8gcnVuLicpfSk7XG4gKiBjb25zdCBkdHlwZSA9ICdmbG9hdDMyJztcbiAqIGNvbnN0IGRldmljZSA9IHRmLmJhY2tlbmQoKS5kZXZpY2U7XG4gKiBjb25zdCBhRGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNl07XG4gKiBjb25zdCBiRGF0YSA9IFsxLCAyLCAzLCA0LCAxLCAyLCAzLCA0LCAxLCAyLCAzLCA0LCAxLCAyLCAzLCA0XTtcbiAqIGNvbnN0IGV4cGVjdGVkID0gWzIsIDQsIDYsIDgsIDYsIDgsIDEwLCAxMiwgMTAsIDEyLCAxNCwgMTYsIDE0LCAxNiwgMTgsIDIwXTtcbiAqIGNvbnN0IGFCdWZmZXIgPSBjcmVhdGVHUFVCdWZmZXJGcm9tRGF0YShkZXZpY2UsIGFEYXRhLCBkdHlwZSk7XG4gKiBjb25zdCBzaGFwZSA9IFthRGF0YS5sZW5ndGhdO1xuICogLy8gVG8gdXNlIHplcm9Db3B5LCB1c2Uge2J1ZmZlcjogYUJ1ZmZlciwgemVyb0NvcHk6IHRydWV9IGluc3RlYWQgYW5kIGRlc3Ryb3lcbiAqIC8vIGFCdWZmZXIgdW50aWxsIGFsbCBhY2Nlc3MgaXMgZG9uZS5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3Ioe2J1ZmZlcjogYUJ1ZmZlcn0sIHNoYXBlLCBkdHlwZSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yKGJEYXRhLCBzaGFwZSwgZHR5cGUpO1xuICogY29uc3QgcmVzdWx0ID0gdGYuYWRkKGEsIGIpO1xuICogcmVzdWx0LnByaW50KCk7XG4gKiBhLmRpc3Bvc2UoKTtcbiAqIGIuZGlzcG9zZSgpO1xuICogcmVzdWx0LmRpc3Bvc2UoKTtcbiAqIGFCdWZmZXIuZGVzdHJveSgpO1xuICogYXdhaXQgdGYuc2V0QmFja2VuZChzYXZlZEJhY2tlbmQpO1xuICogYGBgXG4gKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgb2YgdGhlIHRlbnNvci4gQ2FuIGJlIG5lc3RlZCBhcnJheSBvZiBudW1iZXJzLFxuICogICAgIG9yIGEgZmxhdCBhcnJheSwgb3IgYSBgVHlwZWRBcnJheWAsIG9yIGEgYFdlYkdMRGF0YWAgb2JqZWN0LCBvciBhXG4gKiBgV2ViR1BVRGF0YWAgb2JqZWN0LiBJZiB0aGUgdmFsdWVzIGFyZSBzdHJpbmdzLCB0aGV5IHdpbGwgYmUgZW5jb2RlZCBhcyB1dGYtOFxuICogYW5kIGtlcHQgYXMgYFVpbnQ4QXJyYXlbXWAuIElmIHRoZSB2YWx1ZXMgaXMgYSBgV2ViR0xEYXRhYCBvYmplY3QsIHRoZSBkdHlwZVxuICogY291bGQgb25seSBiZSAnZmxvYXQzMicgb3IgJ2ludDMyJyBhbmQgdGhlIG9iamVjdCBoYXMgdG8gaGF2ZTogMS4gdGV4dHVyZSwgYVxuICogYFdlYkdMVGV4dHVyZWAsIHRoZSB0ZXh0dXJlIG11c3Qgc2hhcmUgdGhlIHNhbWUgYFdlYkdMUmVuZGVyaW5nQ29udGV4dGAgd2l0aFxuICogVEZKUydzIFdlYkdMIGJhY2tlbmQgKHlvdSBjb3VsZCBjcmVhdGUgYSBjdXN0b20gV2ViR0wgYmFja2VuZCBmcm9tIHlvdXJcbiAqIHRleHR1cmUncyBjYW52YXMpIGFuZCB0aGUgaW50ZXJuYWwgdGV4dHVyZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCB0ZXh0dXJlIG11c3RcbiAqIGJlIGZsb2F0aW5nIHBvaW50IG9yIG5vcm1hbGl6ZWQgaW50ZWdlcjsgMi4gaGVpZ2h0LCB0aGUgaGVpZ2h0IG9mIHRoZVxuICogdGV4dHVyZTsgMy4gd2lkdGgsIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZTsgNC4gY2hhbm5lbHMsIGEgbm9uLWVtcHR5IHN1YnNldFxuICogb2YgJ1JHQkEnLCBpbmRpY2F0aW5nIHRoZSB2YWx1ZXMgb2Ygd2hpY2ggY2hhbm5lbHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlXG4gKiB0ZW5zb3IsIHN1Y2ggYXMgJ1InIG9yICdCUicgKFRoZSBvcmRlciBvZiB0aGUgY2hhbm5lbHMgYWZmZWN0IHRoZSBvcmRlciBvZlxuICogdGVuc29yIHZhbHVlcy4gKS4gKElmIHRoZSB2YWx1ZXMgcGFzc2VkIGZyb20gdGV4dHVyZSBpcyBsZXNzIHRoYW4gdGhlIHRlbnNvclxuICogc2l6ZSwgemVyb3Mgd2lsbCBiZSBwYWRkZWQgYXQgdGhlIHJlYXIuKS4gSWYgdGhlIHZhbHVlcyBpcyBhIGBXZWJHUFVEYXRhYFxuICogb2JqZWN0LCB0aGUgZHR5cGUgY291bGQgb25seSBiZSAnZmxvYXQzMicgb3IgJ2ludDMyIGFuZCB0aGUgb2JqZWN0IGhhcyB0b1xuICogaGF2ZTogYnVmZmVyLCBhIGBHUFVCdWZmZXJgLiBUaGUgYnVmZmVyIG11c3Q6IDEuIHNoYXJlIHRoZSBzYW1lIGBHUFVEZXZpY2VgXG4gKiB3aXRoIFRGSlMncyBXZWJHUFUgYmFja2VuZDsgMi4gYnVmZmVyLnVzYWdlIHNob3VsZCBhdCBsZWFzdCBzdXBwb3J0XG4gKiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkM7IDMuIGJ1ZmZlci5zaXplIHNob3VsZCBub3RcbiAqIGJlIHNtYWxsZXIgdGhhbiB0aGUgYnl0ZSBzaXplIG9mIHRlbnNvciBzaGFwZS4gV2ViR1BVRGF0YSBvcHRpb25hbGx5IHN1cHBvcnRzXG4gKiB6ZXJvIGNvcHkgYnkgZmxhZyB6ZXJvQ29weS4gV2hlbiB6ZXJvQ29weSBpcyBmYWxzZSBvciB1bmRlZmluZWQoZGVmYXVsdCksXG4gKiB0aGlzIHBhc3NpbmcgR1BVQnVmZmVyIGNhbiBiZSBkZXN0cm95ZWQgYWZ0ZXIgdGVuc29yIGlzIGNyZWF0ZWQuIFdoZW5cbiAqIHplcm9Db3B5IGlzIHRydWUsIHRoaXMgR1BVQnVmZmVyIGlzIGJvdW5kIGRpcmVjdGx5IGJ5IHRoZSB0ZW5zb3IsIHNvIGRvIG5vdFxuICogZGVzdHJveSB0aGlzIEdQVUJ1ZmZlciB1bnRpbCBhbGwgYWNjZXNzIGlzIGRvbmUuXG4gKiBAcGFyYW0gc2hhcGUgVGhlIHNoYXBlIG9mIHRoZSB0ZW5zb3IuIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWQsXG4gKiAgIGl0IGlzIGluZmVycmVkIGZyb20gYHZhbHVlc2AuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3I8UiBleHRlbmRzIFJhbms+KFxuICAgIHZhbHVlczogVGVuc29yTGlrZXxXZWJHTERhdGF8V2ViR1BVRGF0YSwgc2hhcGU/OiBTaGFwZU1hcFtSXSxcbiAgICBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yPFI+IHtcbiAgY29uc3QgaW5mZXJyZWRTaGFwZSA9IGluZmVyU2hhcGUodmFsdWVzLCBkdHlwZSk7XG4gIHJldHVybiBtYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGluZmVycmVkU2hhcGUsIGR0eXBlKSBhcyBUZW5zb3I8Uj47XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/* Type definitions for exporting and importing of models. */\n/**\n * A map from Tensor dtype to number of bytes per element of the Tensor.\n */\nexport const DTYPE_VALUE_SIZE_MAP = {\n 'float32': 4,\n 'float16': 2,\n 'int32': 4,\n 'uint16': 2,\n 'uint8': 1,\n 'bool': 1,\n 'complex64': 8\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILDZEQUE2RDtBQUU3RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUE4QjtJQUM3RCxTQUFTLEVBQUUsQ0FBQztJQUNaLFNBQVMsRUFBRSxDQUFDO0lBQ1osT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1YsTUFBTSxFQUFFLENBQUM7SUFDVCxXQUFXLEVBQUUsQ0FBQztDQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGV4cG9ydGluZyBhbmQgaW1wb3J0aW5nIG9mIG1vZGVscy4gKi9cblxuLyoqXG4gKiBBIG1hcCBmcm9tIFRlbnNvciBkdHlwZSB0byBudW1iZXIgb2YgYnl0ZXMgcGVyIGVsZW1lbnQgb2YgdGhlIFRlbnNvci5cbiAqL1xuZXhwb3J0IGNvbnN0IERUWVBFX1ZBTFVFX1NJWkVfTUFQOiB7W2R0eXBlOiBzdHJpbmddOiBudW1iZXJ9ID0ge1xuICAnZmxvYXQzMic6IDQsXG4gICdmbG9hdDE2JzogMixcbiAgJ2ludDMyJzogNCxcbiAgJ3VpbnQxNic6IDIsXG4gICd1aW50OCc6IDEsXG4gICdib29sJzogMSxcbiAgJ2NvbXBsZXg2NCc6IDhcbn07XG5cbi8qKlxuICogQSB3ZWlnaHQgbWFuaWZlc3QuXG4gKlxuICogVGhlIHdlaWdodCBtYW5pZmVzdCBjb25zaXN0cyBvZiBhbiBvcmRlcmVkIGxpc3Qgb2Ygd2VpZ2h0LW1hbmlmZXN0IGdyb3Vwcy5cbiAqIEVhY2ggd2VpZ2h0LW1hbmlmZXN0IGdyb3VwIChcImdyb3VwXCIgZm9yIHNob3J0IGhlcmVhZnRlcikgY29uc2lzdHMgb2YgYVxuICogbnVtYmVyIG9mIHdlaWdodCB2YWx1ZXMgc3RvcmVkIGluIGEgbnVtYmVyIG9mIHBhdGhzLlxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIGBXZWlnaHRNYW5pZmVzdEdyb3VwQ29uZmlnYCBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5leHBvcnQgZGVjbGFyZSB0eXBlIFdlaWdodHNNYW5pZmVzdENvbmZpZyA9IFdlaWdodHNNYW5pZmVzdEdyb3VwQ29uZmlnW107XG5cbi8qKlxuICogQSB3ZWlnaHQtbWFuaWZlc3QgZ3JvdXAuXG4gKlxuICogQ29uc2lzdHMgb2YgYW4gb3JkZXJlZCBsaXN0IG9mIHdlaWdodCB2YWx1ZXMgZW5jb2RlZCBpbiBiaW5hcnkgZm9ybWF0LFxuICogc3RvcmVkIGluIGFuIG9yZGVyZWQgbGlzdCBvZiBwYXRocy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFdlaWdodHNNYW5pZmVzdEdyb3VwQ29uZmlnIHtcbiAgLyoqXG4gICAqIEFuIG9yZGVyZWQgbGlzdCBvZiBwYXRocy5cbiAgICpcbiAgICogUGF0aHMgYXJlIGludGVudGlvbmFsbHkgYWJzdHJhY3QgaW4gb3JkZXIgdG8gYmUgZ2VuZXJhbC4gRm9yIGV4YW1wbGUsIHRoZXlcbiAgICogY2FuIGJlIHJlbGF0aXZlIFVSTCBwYXRocyBvciByZWxhdGl2ZSBwYXRocyBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gICAqL1xuICBwYXRoczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb25zIG9mIHRoZSB3ZWlnaHRzIHN0b3JlZCBpbiB0aGUgcGF0aHMuXG4gICAqL1xuICB3ZWlnaHRzOiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdO1xufVxuXG4vKipcbiAqIEdyb3VwIHRvIHdoaWNoIHRoZSB3ZWlnaHQgYmVsb25ncy5cbiAqXG4gKiAtICdvcHRpbWl6ZXInOiBXZWlnaHQgZnJvbSBhIHN0YXRlZnVsIG9wdGltaXplci5cbiAqL1xuZXhwb3J0IHR5cGUgV2VpZ2h0R3JvdXAgPSAnbW9kZWwnfCdvcHRpbWl6ZXInO1xuXG4vKipcbiAqIEFuIGVudHJ5IGluIHRoZSB3ZWlnaHQgbWFuaWZlc3QuXG4gKlxuICogVGhlIGVudHJ5IGNvbnRhaW5zIHNwZWNpZmljYXRpb24gb2YgYSB3ZWlnaHQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBXZWlnaHRzTWFuaWZlc3RFbnRyeSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSB3ZWlnaHQsIGUuZy4sICdEZW5zZV8xL2JpYXMnXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNoYXBlIG9mIHRoZSB3ZWlnaHQuXG4gICAqL1xuICBzaGFwZTogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIERhdGEgdHlwZSBvZiB0aGUgd2VpZ2h0LlxuICAgKi9cbiAgZHR5cGU6ICdmbG9hdDMyJ3wnaW50MzInfCdib29sJ3wnc3RyaW5nJ3wnY29tcGxleDY0JztcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgd2VpZ2h0LlxuICAgKlxuICAgKiBPcHRpb25hbC5cbiAgICpcbiAgICogVGhlIHZhbHVlICdvcHRpbWl6ZXInIGluZGljYXRlcyB0aGUgd2VpZ2h0IGJlbG9uZ3MgdG8gYW4gb3B0aW1pemVyXG4gICAqIChpLmUuLCB1c2VkIG9ubHkgZHVyaW5nIG1vZGVsIHRyYWluaW5nIGFuZCBub3QgZHVyaW5nIGluZmVyZW5jZSkuXG4gICAqL1xuICBncm91cD86IFdlaWdodEdyb3VwO1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBmb3IgZGVxdWFudGl6YXRpb24gb2YgdGhlIHdlaWdodC5cbiAgICovXG4gIHF1YW50aXphdGlvbj86IHtcbiAgICBzY2FsZT86IG51bWJlciwgIC8vIFRoZSBzY2FsaW5nIGNvbnN0YW50IHRvIG11bHRpcGx5IGJ5LlxuICAgIG1pbj86IG51bWJlciwgICAgLy8gVGhlIChwb3NzaWJseSBudWRnZWQpIG1pbmltdW0gd2VpZ2h0IHRvIGFkZC5cbiAgICAgICBkdHlwZTogJ3VpbnQxNid8J3VpbnQ4J3wnZmxvYXQxNicgIC8vIFRoZSBkdHlwZSBvZiB0aGUgcXVhbnRpemVkIHdlaWdodHMuXG4gIH07XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2F2aW5nIGEgbW9kZWwuXG4gKiBAaW5uYW1lc3BhY2UgaW9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYXZlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2F2ZSBvbmx5IHRoZSB0cmFpbmFibGUgd2VpZ2h0cyBvZiB0aGUgbW9kZWwsIGlnbm9yaW5nIHRoZVxuICAgKiBub24tdHJhaW5hYmxlIG9uZXMuXG4gICAqL1xuICB0cmFpbmFibGVPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgb3B0aW1pemVyIHdpbGwgYmUgc2F2ZWQgKGlmIGV4aXN0cykuXG4gICAqXG4gICAqIERlZmF1bHQ6IGBmYWxzZWAuXG4gICAqL1xuICBpbmNsdWRlT3B0aW1pemVyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBzYXZpbmcgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVSZXN1bHQge1xuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZGVsIGFydGlmYWN0cyBzYXZlZC5cbiAgICovXG4gIG1vZGVsQXJ0aWZhY3RzSW5mbzogTW9kZWxBcnRpZmFjdHNJbmZvO1xuXG4gIC8qKlxuICAgKiBIVFRQIHJlc3BvbnNlcyBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBoYW5kbGVkIHRoZSBtb2RlbC1zYXZpbmcgcmVxdWVzdCAoaWZcbiAgICogYW55KS4gVGhpcyBpcyBhcHBsaWNhYmxlIG9ubHkgdG8gc2VydmVyLWJhc2VkIHNhdmluZyByb3V0ZXMuXG4gICAqL1xuICByZXNwb25zZXM/OiBSZXNwb25zZVtdO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlcyBhbmQgcmVsYXRlZCBkYXRhIChpZiBhbnkpLlxuICAgKi9cbiAgZXJyb3JzPzogQXJyYXk8e318c3RyaW5nPjtcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1vZGVsQXJ0aWZhY3RzSW5mbyB7XG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgZm9yIHdoZW4gdGhlIG1vZGVsIGlzIHNhdmVkLlxuICAgKi9cbiAgZGF0ZVNhdmVkOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBUT0RPIChjYWlzLHlhc3NvZ2JhKSBjb25zaWRlciByZW1vdmluZyBHcmFwaERlZiBhcyBHcmFwaERlZnMgbm93XG4gICAqIGNvbWUgaW4gYSBKU09OIGZvcm1hdCBhbmQgbm9uZSBvZiBvdXIgSU9IYW5kbGVycyBzdXBwb3J0IGEgbm9uIGpzb25cbiAgICogZm9ybWF0LiBXZSBjb3VsZCBjb25kZXIgcmVwbGFjaW5nIHRoaXMgd2l0aCAnQmluYXJ5JyBpZiB3ZSB3YW50IHRvXG4gICAqIGFsbG93IGZ1dHVyZSBoYW5kbGVycyB0byBzYXZlIHRvIG5vbiBqc29uIGZvcm1hdHMgKHRob3VnaCB0aGV5IHdpbGxcbiAgICogcHJvYmFibHkgd2FudCBtb3JlIGluZm9ybWF0aW9uIHRoYW4gJ0JpbmFyeScpLlxuICAgKiBUeXBlIG9mIHRoZSBtb2RlbCB0b3BvbG9neVxuICAgKlxuICAgKiBUeXBlIG9mIHRoZSBtb2RlbCB0b3BvbG9neVxuICAgKlxuICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAqICAgLSBKU09OOiBKU09OIGNvbmZpZyAoaHVtYW4tcmVhZGFibGUsIGUuZy4sIEtlcmFzIEpTT04pLlxuICAgKiAgIC0gR3JhcGhEZWY6IFRlbnNvckZsb3dcbiAgICogICAgIFtHcmFwaERlZl0oaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZXh0ZW5kL3Rvb2xfZGV2ZWxvcGVycy8jZ3JhcGhkZWYpXG4gICAqICAgICBwcm90b2NvbCBidWZmZXIgKGJpbmFyeSkuXG4gICAqL1xuICBtb2RlbFRvcG9sb2d5VHlwZTogJ0pTT04nfCdHcmFwaERlZic7XG5cbiAgLyoqXG4gICAqIFNpemUgb2YgbW9kZWwgdG9wb2xvZ3kgKEtlcmFzIEpTT04gb3IgR3JhcGhEZWYpLCBpbiBieXRlcy5cbiAgICovXG4gIG1vZGVsVG9wb2xvZ3lCeXRlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogU2l6ZSBvZiB3ZWlnaHQgc3BlY2lmaWNhdGlvbiBvciBtYW5pZmVzdCwgaW4gYnl0ZXMuXG4gICAqL1xuICB3ZWlnaHRTcGVjc0J5dGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTaXplIG9mIHdlaWdodCB2YWx1ZSBkYXRhLCBpbiBieXRlcy5cbiAgICovXG4gIHdlaWdodERhdGFCeXRlcz86IG51bWJlcjtcbn1cblxuLyoqIE1vZGVsIHRyYWluaW5nIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVHJhaW5pbmdDb25maWcge1xuICAvLyBUT0RPKGNhaXMpOiBUaWdodGVuIHRoZSB0eXBpbmcgb25jZSBrZXJhcyBzcGVjIGlzIGF2YWlsYWJsZSB0byB0ZmpzLWNvcmUuXG4gIC8vIFNlZVxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMtbGF5ZXJzL2Jsb2IvbWFzdGVyL3NyYy9rZXJhc19mb3JtYXQvdHJhaW5pbmdfY29uZmlnLnRzXG4gIC8qKiBPcHRpbWl6ZXIgdXNlZCBmb3IgdGhlIG1vZGVsIHRyYWluaW5nLiAqL1xuICBvcHRpbWl6ZXJfY29uZmlnOiB7fTtcblxuICAvLyBUT0RPKGNhaXMpOiBUaWdodGVuIHRoZSB0eXBpbmcgb25jZSBrZXJhcyBzcGVjIGlzIGF2YWlsYWJsZSB0byB0ZmpzLWNvcmUuXG4gIC8qKiBMb3NzIGZ1bmN0aW9uKHMpIGZvciB0aGUgbW9kZWwncyBvdXRwdXQocykuICovXG4gIGxvc3M6IHN0cmluZ3xzdHJpbmdbXXx7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcblxuICAvLyBUT0RPKGNhaXMpOiBUaWdodGVuIHRoZSB0eXBpbmcgb25jZSBrZXJhcyBzcGVjIGlzIGF2YWlsYWJsZSB0byB0ZmpzLWNvcmUuXG4gIC8qKiBNZXRyaWMgZnVuY3Rpb24ocykgZm9yIHRoZSBtb2RlbCdzIG91dHB1dChzKS4gKi9cbiAgbWV0cmljcz86IHN0cmluZ1tdfHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuXG4gIC8vIFRPRE8oY2Fpcyk6IFRpZ2h0ZW4gdGhlIHR5cGluZyBvbmNlIGtlcmFzIHNwZWMgaXMgYXZhaWxhYmxlIHRvIHRmanMtY29yZS5cbiAgd2VpZ2h0ZWRfbWV0cmljcz86IHN0cmluZ1tdO1xuXG4gIC8vIFRPRE8oY2Fpcyk6IFRpZ2h0ZW4gdGhlIHR5cGluZyBvbmNlIGtlcmFzIHNwZWMgaXMgYXZhaWxhYmxlIHRvIHRmanMtY29yZS5cbiAgc2FtcGxlX3dlaWdodF9tb2RlPzogc3RyaW5nO1xuXG4gIGxvc3Nfd2VpZ2h0cz86IG51bWJlcltdfHtba2V5OiBzdHJpbmddOiBudW1iZXJ9O1xufVxuXG5leHBvcnQgdHlwZSBXZWlnaHREYXRhID0gQXJyYXlCdWZmZXIgfCBBcnJheUJ1ZmZlcltdO1xuXG4vKipcbiAqIFRoZSBzZXJpYWxpemVkIGFydGlmYWN0cyBvZiBhIG1vZGVsLCBpbmNsdWRpbmcgdG9wb2xvZ3kgYW5kIHdlaWdodHMuXG4gKlxuICogVGhlIGBtb2RlbFRvcG9sb2d5YCwgYHRyYWluaW5nQ29uZmlnYCwgYHdlaWdodFNwZWNzYCBhbmQgYHdlaWdodERhdGFgIGZpZWxkc1xuICogb2YgdGhpcyBpbnRlcmZhY2UgYXJlIG9wdGlvbmFsLCBpbiBvcmRlciB0byBzdXBwb3J0IHRvcG9sb2d5LSBvciB3ZWlnaHRzLW9ubHlcbiAqIHNhdmluZyBhbmQgbG9hZGluZy5cbiAqXG4gKiBOb3RlIHRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBJT0hhbmRsZXJzLiAgRm9yIHRoZSBmaWxlIGZvcm1hdFxuICogd3JpdHRlbiB0byBkaXNrIGFzIGBtb2RlbC5qc29uYCwgc2VlIGBNb2RlbEpTT05gLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTW9kZWxBcnRpZmFjdHMge1xuICAvKipcbiAgICogTW9kZWwgdG9wb2xvZ3kuXG4gICAqXG4gICAqIEZvciBLZXJhcy1zdHlsZSBgdGYuTW9kZWxgcywgdGhpcyBpcyBhIEpTT04gb2JqZWN0LlxuICAgKiBGb3IgVGVuc29yRmxvdy1zdHlsZSBtb2RlbHMgKGUuZy4sIGBTYXZlZE1vZGVsYCksIHRoaXMgaXMgdGhlIEpTT05cbiAgICogZW5jb2Rpbmcgb2YgdGhlIGBHcmFwaERlZmAgcHJvdG9jb2wgYnVmZmVyLlxuICAgKi9cbiAgbW9kZWxUb3BvbG9neT86IHt9fEFycmF5QnVmZmVyO1xuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBtb2RlbCdzIHRyYWluaW5nLlxuICAgKi9cbiAgdHJhaW5pbmdDb25maWc/OiBUcmFpbmluZ0NvbmZpZztcblxuICAvKipcbiAgICogV2VpZ2h0IHNwZWNpZmljYXRpb25zLlxuICAgKlxuICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSB3ZWlnaHRzRGF0YSBiZWxvdy5cbiAgICovXG4gIHdlaWdodFNwZWNzPzogV2VpZ2h0c01hbmlmZXN0RW50cnlbXTtcblxuICAvKipcbiAgICogQmluYXJ5IGJ1ZmZlcihzKSBmb3IgYWxsIHdlaWdodCB2YWx1ZXMgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBieVxuICAgKiBgd2VpZ2h0U3BlY3NgLiBUaGlzIG1heSBiZSBhIHNpbmdsZSBBcnJheUJ1ZmZlciBvZiBhbGwgdGhlIHdlaWdodHNcbiAgICogY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIG9yIGFuIEFycmF5IG9mIEFycmF5QnVmZmVycyBjb250YWluaW5nIHRoZSB3ZWlnaHRzXG4gICAqICh3ZWlnaHRzIG1heSBiZSBzaGFyZGVkIGFjcm9zcyBtdWx0aXBsZSBBcnJheUJ1ZmZlcnMpLlxuICAgKi9cbiAgd2VpZ2h0RGF0YT86IFdlaWdodERhdGE7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJlYW0gb2YgdGhlIHdlaWdodHMuIFNvbWUgbW9kZWxzIGFyZSB0b28gbGFyZ2UgdG8gZml0IGluXG4gICAqIFY4J3MgbWVtb3J5IGhlYXAsIGFuZCBgZ2V0V2VpZ2h0U3RyZWFtYCBsb2FkcyB0aGVpciB3ZWlnaHRzIHdpdGhvdXQgc3RvcmluZ1xuICAgKiB0aGVtIGFsbCBpbiBtZW1vcnkgYXQgdGhlIHNhbWUgdGltZS5cbiAgICovXG4gIGdldFdlaWdodFN0cmVhbT86ICgpID0+IFJlYWRhYmxlU3RyZWFtPEFycmF5QnVmZmVyPjtcblxuICAvKipcbiAgICogSGFyZC1jb2RlZCBmb3JtYXQgbmFtZSBmb3IgbW9kZWxzIHNhdmVkIGZyb20gVGVuc29yRmxvdy5qcyBvciBjb252ZXJ0ZWRcbiAgICogYnkgVGVuc29yRmxvdy5qcyBDb252ZXJ0ZXIuXG4gICAqL1xuICBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgbGlicmFyeSBpcyByZXNwb25zaWJsZSBmb3Igb3JpZ2luYWxseSBnZW5lcmF0aW5nIHRoaXMgYXJ0aWZhY3QuXG4gICAqXG4gICAqIFVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gRS5nLiwgJ1RlbnNvckZsb3cuanMgdjEuMC4wJy5cbiAgICovXG4gIGdlbmVyYXRlZEJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0IGxpYnJhcnkgb3IgdG9vbCBpcyByZXNwb25zaWJsZSBmb3IgY29udmVydGluZyB0aGUgb3JpZ2luYWwgbW9kZWxcbiAgICogdG8gdGhpcyBmb3JtYXQsIGFwcGxpY2FibGUgb25seSBpZiB0aGUgbW9kZWwgaXMgb3V0cHV0IGJ5IGEgY29udmVydGVyLlxuICAgKlxuICAgKiBVc2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuICBFLmcuLCAnVGVuc29yRmxvdy5qcyBDb252ZXJ0ZXIgdjEuMC4wJy5cbiAgICpcbiAgICogQSB2YWx1ZSBvZiBgbnVsbGAgbWVhbnMgdGhlIG1vZGVsIGFydGlmYWN0cyBhcmUgZ2VuZXJhdGVkIHdpdGhvdXQgYW55XG4gICAqIGNvbnZlcnNpb24gcHJvY2VzcyAoZS5nLiwgc2F2ZWQgZGlyZWN0bHkgZnJvbSBhIFRlbnNvckZsb3cuanNcbiAgICogYHRmLkxheWVyc01vZGVsYCBpbnN0YW5jZS4pXG4gICAqL1xuICBjb252ZXJ0ZWRCeT86IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBJbnB1dHMgYW5kIG91dHB1dHMgc2lnbmF0dXJlIGZvciBzYXZlZCBtb2RlbC5cbiAgICovXG4gIHNpZ25hdHVyZT86IHt9O1xuXG4gIC8qKlxuICAgKiBVc2VyLWRlZmluZWQgbWV0YWRhdGEgYWJvdXQgdGhlIG1vZGVsLlxuICAgKi9cbiAgdXNlckRlZmluZWRNZXRhZGF0YT86IHtba2V5OiBzdHJpbmddOiB7fX07XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVyIGZvciB0aGUgbW9kZWwuXG4gICAqL1xuICBtb2RlbEluaXRpYWxpemVyPzoge307XG5cbiAgLyoqXG4gICAqIElucHV0cyBhbmQgb3V0cHV0cyBzaWduYXR1cmUgZm9yIG1vZGVsIGluaXRpYWxpemVyLlxuICAgKi9cbiAgaW5pdGlhbGl6ZXJTaWduYXR1cmU/OiB7fTtcbn1cblxuLyoqXG4gKiBUaGUgb24tZGlzayBmb3JtYXQgb2YgdGhlIGBtb2RlbC5qc29uYCBmaWxlLlxuICpcbiAqIFRGLmpzIDEuMCBhbHdheXMgcG9wdWxhdGVzIHRoZSBvcHRpb25hbCBmaWVsZHMgd2hlbiB3cml0aW5nIG1vZGVsLmpzb24uXG4gKiBQcmlvciB2ZXJzaW9ucyBkaWQgbm90IHByb3ZpZGUgdGhvc2UgZmllbGRzLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTW9kZWxKU09OIHtcbiAgLyoqXG4gICAqIE1vZGVsIHRvcG9sb2d5LlxuICAgKlxuICAgKiBGb3IgS2VyYXMtc3R5bGUgYHRmLk1vZGVsYHMsIHRoaXMgaXMgYSBKU09OIG9iamVjdC5cbiAgICogRm9yIFRlbnNvckZsb3ctc3R5bGUgbW9kZWxzIChlLmcuLCBgU2F2ZWRNb2RlbGApLCB0aGlzIGlzIHRoZSBKU09OXG4gICAqIGVuY29kaW5nIG9mIHRoZSBgR3JhcGhEZWZgIHByb3RvY29sIGJ1ZmZlci5cbiAgICovXG4gIG1vZGVsVG9wb2xvZ3k6IHt9O1xuXG4gIC8qKiBNb2RlbCB0cmFpbmluZyBjb25maWd1cmF0aW9uLiAqL1xuICB0cmFpbmluZ0NvbmZpZz86IFRyYWluaW5nQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBXZWlnaHRzIG1hbmlmZXN0LlxuICAgKlxuICAgKiBUaGUgd2VpZ2h0cyBtYW5pZmVzdCBjb25zaXN0cyBvZiBhbiBvcmRlcmVkIGxpc3Qgb2Ygd2VpZ2h0LW1hbmlmZXN0XG4gICAqIGdyb3Vwcy4gRWFjaCB3ZWlnaHQtbWFuaWZlc3QgZ3JvdXAgY29uc2lzdHMgb2YgYSBudW1iZXIgb2Ygd2VpZ2h0IHZhbHVlc1xuICAgKiBzdG9yZWQgaW4gYSBudW1iZXIgb2YgcGF0aHMuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZlxuICAgKiBgV2VpZ2h0c01hbmlmZXN0Q29uZmlnYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgd2VpZ2h0c01hbmlmZXN0OiBXZWlnaHRzTWFuaWZlc3RDb25maWc7XG5cbiAgLyoqXG4gICAqIEhhcmQtY29kZWQgZm9ybWF0IG5hbWUgZm9yIG1vZGVscyBzYXZlZCBmcm9tIFRlbnNvckZsb3cuanMgb3IgY29udmVydGVkXG4gICAqIGJ5IFRlbnNvckZsb3cuanMgQ29udmVydGVyLlxuICAgKi9cbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0IGxpYnJhcnkgaXMgcmVzcG9uc2libGUgZm9yIG9yaWdpbmFsbHkgZ2VuZXJhdGluZyB0aGlzIGFydGlmYWN0LlxuICAgKlxuICAgKiBVc2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEUuZy4sICdUZW5zb3JGbG93LmpzIHYxLjAuMCcuXG4gICAqL1xuICBnZW5lcmF0ZWRCeT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hhdCBsaWJyYXJ5IG9yIHRvb2wgaXMgcmVzcG9uc2libGUgZm9yIGNvbnZlcnRpbmcgdGhlIG9yaWdpbmFsIG1vZGVsXG4gICAqIHRvIHRoaXMgZm9ybWF0LCBhcHBsaWNhYmxlIG9ubHkgaWYgdGhlIG1vZGVsIGlzIG91dHB1dCBieSBhIGNvbnZlcnRlci5cbiAgICpcbiAgICogVXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgRS5nLiwgJ1RlbnNvckZsb3cuanMgQ29udmVydGVyIHYxLjAuMCcuXG4gICAqXG4gICAqIEEgdmFsdWUgb2YgYG51bGxgIG1lYW5zIHRoZSBtb2RlbCBhcnRpZmFjdHMgYXJlIGdlbmVyYXRlZCB3aXRob3V0IGFueVxuICAgKiBjb252ZXJzaW9uIHByb2Nlc3MgKGUuZy4sIHNhdmVkIGRpcmVjdGx5IGZyb20gYSBUZW5zb3JGbG93LmpzXG4gICAqIGB0Zi5MYXllcnNNb2RlbGAgaW5zdGFuY2UuKVxuICAgKi9cbiAgY29udmVydGVkQnk/OiBzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogSW5wdXRzIGFuZCBvdXRwdXRzIHNpZ25hdHVyZSBmb3Igc2F2ZWQgbW9kZWwuXG4gICAqL1xuICBzaWduYXR1cmU/OiB7fTtcblxuICAvKipcbiAgICogVXNlci1kZWZpbmVkIG1ldGFkYXRhIGFib3V0IHRoZSBtb2RlbC5cbiAgICovXG4gIHVzZXJEZWZpbmVkTWV0YWRhdGE/OiB7W2tleTogc3RyaW5nXToge319O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplciBmb3IgdGhlIG1vZGVsLlxuICAgKi9cbiAgbW9kZWxJbml0aWFsaXplcj86IHt9O1xuXG4gIC8qKlxuICAgKiBJbnB1dHMgYW5kIG91dHB1dHMgc2lnbmF0dXJlIGZvciBtb2RlbCBpbml0aWFsaXplci5cbiAgICovXG4gIGluaXRpYWxpemVyU2lnbmF0dXJlPzoge307XG59XG5cbi8qKlxuICogVHlwZSBkZWZpbml0aW9uIGZvciBoYW5kbGVycyBvZiBsb2FkaW5nIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIExvYWRIYW5kbGVyID0gKCkgPT4gUHJvbWlzZTxNb2RlbEFydGlmYWN0cz47XG5cbi8qKlxuICogVHlwZSBkZWZpbml0aW9uIGZvciBoYW5kbGVycyBvZiBzYXZpbmcgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgU2F2ZUhhbmRsZXIgPSAobW9kZWxBcnRpZmFjdDogTW9kZWxBcnRpZmFjdHMpID0+XG4gICAgUHJvbWlzZTxTYXZlUmVzdWx0PjtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGEgbW9kZWwgaW1wb3J0L2V4cG9ydCBoYW5kbGVyLlxuICpcbiAqIFRoZSBgc2F2ZWAgYW5kIGBsb2FkYCBoYW5kbGVycyBhcmUgYm90aCBvcHRpb25hbCwgaW4gb3JkZXIgdG8gYWxsb3cgaGFuZGxlcnNcbiAqIHRoYXQgc3VwcG9ydCBvbmx5IHNhdmluZyBvciBsb2FkaW5nLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6aW50ZXJmYWNlLW5hbWVcbmV4cG9ydCBpbnRlcmZhY2UgSU9IYW5kbGVyIHtcbiAgc2F2ZT86IFNhdmVIYW5kbGVyO1xuICBsb2FkPzogTG9hZEhhbmRsZXI7XG59XG5cbi8qKlxuICogVHlwZSBkZWZpbml0aW9uIGZvciBoYW5kbGVycyBvZiBzeW5jaHJvbm91cyBsb2FkaW5nIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIExvYWRIYW5kbGVyU3luYyA9ICgpID0+IE1vZGVsQXJ0aWZhY3RzO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbiBmb3IgaGFuZGxlcnMgb2Ygc3luY2hyb25vdXMgc2F2aW5nIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIFNhdmVIYW5kbGVyU3luYyA9IChtb2RlbEFydGlmYWN0OiBNb2RlbEFydGlmYWN0cykgPT4gU2F2ZVJlc3VsdDtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGEgc3luY2hyb25vdXMgbW9kZWwgaW1wb3J0L2V4cG9ydCBoYW5kbGVyLlxuICpcbiAqIFRoZSBgc2F2ZWAgYW5kIGBsb2FkYCBoYW5kbGVycyBhcmUgYm90aCBvcHRpb25hbCwgaW4gb3JkZXIgdG8gYWxsb3cgaGFuZGxlcnNcbiAqIHRoYXQgc3VwcG9ydCBvbmx5IHNhdmluZyBvciBsb2FkaW5nLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6aW50ZXJmYWNlLW5hbWVcbmV4cG9ydCB0eXBlIElPSGFuZGxlclN5bmMgPSB7XG4gIHNhdmU/OiBTYXZlSGFuZGxlclN5bmM7XG4gIGxvYWQ/OiBMb2FkSGFuZGxlclN5bmM7XG59O1xuXG4vKipcbiAqIEFuIGludGVyZmFjZSBmb3IgdGhlIG1hbmFnZXIgb2YgYSBtb2RlbCBzdG9yZS5cbiAqXG4gKiBBIG1vZGVsIHN0b3JlIGlzIGRlZmluZWQgYXMgYSBzdG9yYWdlIG1lZGl1bSBvbiB3aGljaCBtdWx0aXBsZSBtb2RlbHMgY2FuXG4gKiBiZSBzdG9yZWQuIEVhY2ggc3RvcmVkIG1vZGVsIGhhcyBhIHVuaXF1ZSBgcGF0aGAgYXMgaXRzIGlkZW50aWZpZXIuXG4gKiBBIGBNb2RlbFN0b3JlTWFuYWdlcmAgZm9yIHRoZSBzdG9yZSBhbGxvd3MgYWN0aW9ucyBpbmNsdWRpbmdcbiAqXG4gKiAtIExpc3RpbmcgdGhlIG1vZGVscyBzdG9yZWQgaW4gdGhlIHN0b3JlLlxuICogLSBEZWxldGluZyBhIG1vZGVsIGZyb20gdGhlIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsU3RvcmVNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIExpc3QgYWxsIG1vZGVscyBpbiB0aGUgbW9kZWwgc3RvcmUuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgZGljdGlvbmFyeSBtYXBwaW5nIHBhdGhzIG9mIGV4aXN0aW5nIG1vZGVscyB0byB0aGVpclxuICAgKiAgIG1vZGVsIGFydGlmYWN0cyBpbmZvLiBNb2RlbCBhcnRpZmFjdHMgaW5mbyBpbmNsdWRlIHR5cGUgb2YgdGhlIG1vZGVsJ3NcbiAgICogICB0b3BvbG9neSwgYnl0ZSBzaXplcyBvZiB0aGUgdG9wb2xvZ3ksIHdlaWdodHMsIGV0Yy5cbiAgICovXG4gIGxpc3RNb2RlbHMoKTogUHJvbWlzZTx7W3BhdGg6IHN0cmluZ106IE1vZGVsQXJ0aWZhY3RzSW5mb30+O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBtb2RlbCBzcGVjaWZpZWQgYnkgYHBhdGhgLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aFxuICAgKiBAcmV0dXJucyBNb2RlbEFydGlmYWN0c0luZm8gb2YgdGhlIGRlbGV0ZWQgbW9kZWwgKGlmIGFuZCBvbmx5IGlmIGRlbGV0aW9uXG4gICAqICAgaXMgc3VjY2Vzc2Z1bCkuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZGVsZXRpb24gZmFpbHMsIGUuZy4sIGlmIG5vIG1vZGVsIGV4aXN0cyBhdCBgcGF0aGAuXG4gICAqL1xuICByZW1vdmVNb2RlbChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz47XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHRoZSBwcm9ncmVzcyBvZiBhIGxvbmctcnVubmluZyBhY3Rpb24gc3VjaCBhcyBhbiBIVFRQXG4gKiByZXF1ZXN0IGZvciBhIGxhcmdlIGJpbmFyeSBvYmplY3QuXG4gKlxuICogYGZyYWN0aW9uYCBzaG91bGQgYmUgYSBudW1iZXIgaW4gdGhlIFswLCAxXSBpbnRlcnZhbCwgaW5kaWNhdGluZyBob3dcbiAqIG11Y2ggb2YgdGhlIGFjdGlvbiBoYXMgY29tcGxldGVkLlxuICovXG5leHBvcnQgdHlwZSBPblByb2dyZXNzQ2FsbGJhY2sgPSAoZnJhY3Rpb246IG51bWJlcikgPT4gdm9pZDtcblxuLyoqIEBpbm5hbWVzcGFjZSBpbyAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXF1ZXN0SW5pdCAob3B0aW9ucykgZm9yIEhUVFAgcmVxdWVzdHMuXG4gICAqXG4gICAqIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgc3VwcG9ydGVkIGZpZWxkcywgc2VlXG4gICAqIFtodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdC9SZXF1ZXN0XShcbiAgICogICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3QpXG4gICAqL1xuICByZXF1ZXN0SW5pdD86IFJlcXVlc3RJbml0O1xuXG4gIC8qKlxuICAgKiBQcm9ncmVzcyBjYWxsYmFjay5cbiAgICovXG4gIG9uUHJvZ3Jlc3M/OiBPblByb2dyZXNzQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdXNlZCB0byBvdmVycmlkZSB0aGUgYHdpbmRvdy5mZXRjaGAgZnVuY3Rpb24uXG4gICAqL1xuICBmZXRjaEZ1bmM/OiB0eXBlb2YgZmV0Y2g7XG5cbiAgLyoqXG4gICAqIFN0cmljdCBsb2FkaW5nIG1vZGVsOiB3aGV0aGVyIGV4dHJhbmVvdXMgd2VpZ2h0cyBvciBtaXNzaW5nXG4gICAqIHdlaWdodHMgc2hvdWxkIHRyaWdnZXIgYW4gYEVycm9yYC5cbiAgICpcbiAgICogSWYgYHRydWVgLCByZXF1aXJlIHRoYXQgdGhlIHByb3ZpZGVkIHdlaWdodHMgZXhhY3RseSBtYXRjaCB0aG9zZVxuICAgKiByZXF1aXJlZCBieSB0aGUgbGF5ZXJzLiBgZmFsc2VgIG1lYW5zIHRoYXQgYm90aCBleHRyYSB3ZWlnaHRzXG4gICAqIGFuZCBtaXNzaW5nIHdlaWdodHMgd2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkLlxuICAgKlxuICAgKiBEZWZhdWx0OiBgdHJ1ZWAuXG4gICAqL1xuICBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQYXRoIHByZWZpeCBmb3Igd2VpZ2h0IGZpbGVzLCBieSBkZWZhdWx0IHRoaXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZVxuICAgKiBwYXRoIG9mIHRoZSBtb2RlbCBKU09OIGZpbGUuXG4gICAqXG4gICAqIEZvciBpbnN0YW5jZSwgaWYgdGhlIHBhdGggdG8gdGhlIG1vZGVsIEpTT04gZmlsZSBpc1xuICAgKiBgaHR0cDovL2xvY2FsaG9zdC9mb28vbW9kZWwuanNvbmAsIHRoZW4gdGhlIGRlZmF1bHQgcGF0aCBwcmVmaXggd2lsbCBiZVxuICAgKiBgaHR0cDovL2xvY2FsaG9zdC9mb28vYC4gSWYgYSB3ZWlnaHQgZmlsZSBoYXMgdGhlIHBhdGggdmFsdWVcbiAgICogYGdyb3VwMS1zaGFyZDFvZjJgIGluIHRoZSB3ZWlnaHQgbWFuaWZlc3QsIHRoZW4gdGhlIHdlaWdodCBmaWxlIHdpbGwgYmVcbiAgICogbG9hZGVkIGZyb20gYGh0dHA6Ly9sb2NhbGhvc3QvZm9vL2dyb3VwMS1zaGFyZDFvZjJgIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsXG4gICAqIGlmIHlvdSBwcm92aWRlIGEgYHdlaWdodFBhdGhQcmVmaXhgIHZhbHVlIG9mXG4gICAqIGBodHRwOi8vbG9jYWxob3N0L2Zvby9hbHQtd2VpZ2h0c2AsIHRoZW4gdGhlIHdlaWdodCBmaWxlIHdpbGwgYmUgbG9hZGVkXG4gICAqIGZyb20gdGhlIHBhdGggYGh0dHA6Ly9sb2NhbGhvc3QvZm9vL2FsdC13ZWlnaHRzL2dyb3VwMS1zaGFyZDFvZjJgIGluc3RlYWQuXG4gICAqL1xuICB3ZWlnaHRQYXRoUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtb2R1bGUgb3IgbW9kZWwgaXMgdG8gYmUgbG9hZGVkIGZyb20gVEYgSHViLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgdG8gYHRydWVgIGFsbG93cyBwYXNzaW5nIGEgVEYtSHViIG1vZHVsZSBVUkwsIG9taXR0aW5nIHRoZVxuICAgKiBzdGFuZGFyZCBtb2RlbCBmaWxlIG5hbWUgYW5kIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBEZWZhdWx0OiBgZmFsc2VgLlxuICAgKi9cbiAgZnJvbVRGSHViPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gYXN5bmMgZnVuY3Rpb24gdG8gY29udmVydCB3ZWlnaHQgZmlsZSBuYW1lIHRvIFVSTC4gVGhlIHdlaWdodCBmaWxlXG4gICAqIG5hbWVzIGFyZSBzdG9yZWQgaW4gbW9kZWwuanNvbidzIHdlaWdodHNNYW5pZmVzdC5wYXRocyBmaWVsZC4gQnkgZGVmYXVsdCB3ZVxuICAgKiBjb25zaWRlciB3ZWlnaHQgZmlsZXMgYXJlIGNvbG9jYXRlZCB3aXRoIHRoZSBtb2RlbC5qc29uIGZpbGUuIEZvciBleGFtcGxlOlxuICAgKiAgICAgbW9kZWwuanNvbiBVUkw6IGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbW9kZWxzLzEvbW9kZWwuanNvblxuICAgKiAgICAgZ3JvdXAxLXNoYXJkMW9mMS5iaW4gdXJsOlxuICAgKiAgICAgICAgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tb2RlbHMvMS9ncm91cDEtc2hhcmQxb2YxLmJpblxuICAgKlxuICAgKiBXaXRoIHRoaXMgZnVuYyB5b3UgY2FuIGNvbnZlcnQgdGhlIHdlaWdodCBmaWxlIG5hbWUgdG8gYW55IFVSTC5cbiAgICovXG4gIHdlaWdodFVybENvbnZlcnRlcj86ICh3ZWlnaHRGaWxlTmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3RyZWFtIHRoZSBtb2RlbCBkaXJlY3RseSB0byB0aGUgYmFja2VuZCBvciBjYWNoZSBhbGwgaXRzXG4gICAqIHdlaWdodHMgb24gQ1BVIGZpcnN0LiBVc2VmdWwgZm9yIGxhcmdlIG1vZGVscy5cbiAgICovXG4gIHN0cmVhbVdlaWdodHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgUGxhdGZvcm0uZmV0Y2hcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0RGV0YWlscyB7XG4gIC8qKlxuICAgKiBJcyB0aGlzIHJlcXVlc3QgZm9yIGEgYmluYXJ5IGZpbGUgKGFzIG9wcG9zZWQgdG8gYSBqc29uIGZpbGUpXG4gICAqL1xuICBpc0JpbmFyeT86IGJvb2xlYW47XG59XG4iXX0=","import * as util from '../util';\n/**\n * Wraps a list of ArrayBuffers into a `slice()`-able object without allocating\n * a large ArrayBuffer.\n *\n * Allocating large ArrayBuffers (~2GB) can be unstable on Chrome. TFJS loads\n * its weights as a list of (usually) 4MB ArrayBuffers and then slices the\n * weight tensors out of them. For small models, it's safe to concatenate all\n * the weight buffers into a single ArrayBuffer and then slice the weight\n * tensors out of it, but for large models, a different approach is needed.\n */\nexport class CompositeArrayBuffer {\n /**\n * Concatenate a number of ArrayBuffers into one.\n *\n * @param buffers An array of ArrayBuffers to concatenate, or a single\n * ArrayBuffer.\n * @returns Result of concatenating `buffers` in order.\n */\n static join(buffers) {\n return new CompositeArrayBuffer(buffers).slice();\n }\n constructor(buffers) {\n this.shards = [];\n this.previousShardIndex = 0;\n if (buffers == null) {\n return;\n }\n // Normalize the `buffers` input to be `ArrayBuffer[]`.\n if (!(buffers instanceof Array)) {\n buffers = [buffers];\n }\n buffers = buffers.map((bufferOrTypedArray) => {\n if (util.isTypedArray(bufferOrTypedArray)) {\n return bufferOrTypedArray.buffer;\n }\n return bufferOrTypedArray;\n });\n // Skip setting up shards if there are no buffers.\n if (buffers.length === 0) {\n return;\n }\n this.bufferUniformSize = buffers[0].byteLength;\n let start = 0;\n for (let i = 0; i < buffers.length; i++) {\n const buffer = buffers[i];\n // Check that all buffers except the last one have the same length.\n if (i !== buffers.length - 1 &&\n buffer.byteLength !== this.bufferUniformSize) {\n // Unset the buffer uniform size, since the buffer sizes are not\n // uniform.\n this.bufferUniformSize = undefined;\n }\n // Create the shards, including their start and end points.\n const end = start + buffer.byteLength;\n this.shards.push({ buffer, start, end });\n start = end;\n }\n // Set the byteLenghth\n if (this.shards.length === 0) {\n this.byteLength = 0;\n }\n this.byteLength = this.shards[this.shards.length - 1].end;\n }\n slice(start = 0, end = this.byteLength) {\n // If there are no shards, then the CompositeArrayBuffer was initialized\n // with no data.\n if (this.shards.length === 0) {\n return new ArrayBuffer(0);\n }\n // NaN is treated as zero for slicing. This matches ArrayBuffer's behavior.\n start = isNaN(Number(start)) ? 0 : start;\n end = isNaN(Number(end)) ? 0 : end;\n // Fix the bounds to within the array.\n start = Math.max(0, start);\n end = Math.min(this.byteLength, end);\n if (end <= start) {\n return new ArrayBuffer(0);\n }\n const startShardIndex = this.findShardForByte(start);\n if (startShardIndex === -1) {\n // This should not happen since the start and end indices are always\n // within 0 and the composite array's length.\n throw new Error(`Could not find start shard for byte ${start}`);\n }\n const size = end - start;\n const outputBuffer = new ArrayBuffer(size);\n const outputArray = new Uint8Array(outputBuffer);\n let sliced = 0;\n for (let i = startShardIndex; i < this.shards.length; i++) {\n const shard = this.shards[i];\n const globalStart = start + sliced;\n const localStart = globalStart - shard.start;\n const outputStart = sliced;\n const globalEnd = Math.min(end, shard.end);\n const localEnd = globalEnd - shard.start;\n const outputSlice = new Uint8Array(shard.buffer, localStart, localEnd - localStart);\n outputArray.set(outputSlice, outputStart);\n sliced += outputSlice.length;\n if (end < shard.end) {\n break;\n }\n }\n return outputBuffer;\n }\n /**\n * Get the index of the shard that contains the byte at `byteIndex`.\n */\n findShardForByte(byteIndex) {\n if (this.shards.length === 0 || byteIndex < 0 ||\n byteIndex >= this.byteLength) {\n return -1;\n }\n // If the buffers have a uniform size, compute the shard directly.\n if (this.bufferUniformSize != null) {\n this.previousShardIndex = Math.floor(byteIndex / this.bufferUniformSize);\n return this.previousShardIndex;\n }\n // If the buffers don't have a uniform size, we need to search for the\n // shard. That means we need a function to check where the byteIndex lies\n // relative to a given shard.\n function check(shard) {\n if (byteIndex < shard.start) {\n return -1;\n }\n if (byteIndex >= shard.end) {\n return 1;\n }\n return 0;\n }\n // For efficiency, try the previous shard first.\n if (check(this.shards[this.previousShardIndex]) === 0) {\n return this.previousShardIndex;\n }\n // Otherwise, use a generic search function.\n // This should almost never end up being used in practice since the weight\n // entries should always be in order.\n const index = search(this.shards, check);\n if (index === -1) {\n return -1;\n }\n this.previousShardIndex = index;\n return this.previousShardIndex;\n }\n}\n/**\n * Search for an element of a sorted array.\n *\n * @param sortedArray The sorted array to search\n * @param compare A function to compare the current value against the searched\n * value. Return 0 on a match, negative if the searched value is less than\n * the value passed to the function, and positive if the searched value is\n * greater than the value passed to the function.\n * @returns The index of the element, or -1 if it's not in the array.\n */\nexport function search(sortedArray, compare) {\n // Binary search\n let min = 0;\n let max = sortedArray.length;\n while (min <= max) {\n const middle = Math.floor((max - min) / 2) + min;\n const side = compare(sortedArray[middle]);\n if (side === 0) {\n return middle;\n }\n else if (side < 0) {\n max = middle;\n }\n else {\n min = middle + 1;\n }\n }\n return -1;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlX2FycmF5X2J1ZmZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vY29tcG9zaXRlX2FycmF5X2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFRaEM7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQU0vQjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQXFDO1FBQy9DLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsWUFBWSxPQUNFO1FBakJOLFdBQU0sR0FBa0IsRUFBRSxDQUFDO1FBQzNCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQWlCN0IsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1lBQ25CLE9BQU87U0FDUjtRQUNELHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksS0FBSyxDQUFDLEVBQUU7WUFDL0IsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckI7UUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDO2FBQ2xDO1lBQ0QsT0FBTyxrQkFBa0IsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILGtEQUFrRDtRQUNsRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQy9DLElB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QU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUUxQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDZCxPQUFPLE1BQU0sQ0FBQztTQUNmO2FBQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLEdBQUcsR0FBRyxNQUFNLENBQUM7U0FDZDthQUFNO1lBQ0wsR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDbEI7S0FDRjtJQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUeXBlZEFycmF5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG50eXBlIEJ1ZmZlclNoYXJkID0ge1xuICBzdGFydDogbnVtYmVyLFxuICBlbmQ6IG51bWJlcixcbiAgYnVmZmVyOiBBcnJheUJ1ZmZlcixcbn07XG5cbi8qKlxuICogV3JhcHMgYSBsaXN0IG9mIEFycmF5QnVmZmVycyBpbnRvIGEgYHNsaWNlKClgLWFibGUgb2JqZWN0IHdpdGhvdXQgYWxsb2NhdGluZ1xuICogYSBsYXJnZSBBcnJheUJ1ZmZlci5cbiAqXG4gKiBBbGxvY2F0aW5nIGxhcmdlIEFycmF5QnVmZmVycyAofjJHQikgY2FuIGJlIHVuc3RhYmxlIG9uIENocm9tZS4gVEZKUyBsb2Fkc1xuICogaXRzIHdlaWdodHMgYXMgYSBsaXN0IG9mICh1c3VhbGx5KSA0TUIgQXJyYXlCdWZmZXJzIGFuZCB0aGVuIHNsaWNlcyB0aGVcbiAqIHdlaWdodCB0ZW5zb3JzIG91dCBvZiB0aGVtLiBGb3Igc21hbGwgbW9kZWxzLCBpdCdzIHNhZmUgdG8gY29uY2F0ZW5hdGUgYWxsXG4gKiB0aGUgd2VpZ2h0IGJ1ZmZlcnMgaW50byBhIHNpbmdsZSBBcnJheUJ1ZmZlciBhbmQgdGhlbiBzbGljZSB0aGUgd2VpZ2h0XG4gKiB0ZW5zb3JzIG91dCBvZiBpdCwgYnV0IGZvciBsYXJnZSBtb2RlbHMsIGEgZGlmZmVyZW50IGFwcHJvYWNoIGlzIG5lZWRlZC5cbiAqL1xuXG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlQXJyYXlCdWZmZXIge1xuICBwcml2YXRlIHNoYXJkczogQnVmZmVyU2hhcmRbXSA9IFtdO1xuICBwcml2YXRlIHByZXZpb3VzU2hhcmRJbmRleCA9IDA7XG4gIHByaXZhdGUgYnVmZmVyVW5pZm9ybVNpemU/OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBieXRlTGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbmNhdGVuYXRlIGEgbnVtYmVyIG9mIEFycmF5QnVmZmVycyBpbnRvIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlcnMgQW4gYXJyYXkgb2YgQXJyYXlCdWZmZXJzIHRvIGNvbmNhdGVuYXRlLCBvciBhIHNpbmdsZVxuICAgKiAgICAgQXJyYXlCdWZmZXIuXG4gICAqIEByZXR1cm5zIFJlc3VsdCBvZiBjb25jYXRlbmF0aW5nIGBidWZmZXJzYCBpbiBvcmRlci5cbiAgICovXG4gIHN0YXRpYyBqb2luKGJ1ZmZlcnM/OiBBcnJheUJ1ZmZlcltdIHwgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUFycmF5QnVmZmVyKGJ1ZmZlcnMpLnNsaWNlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihidWZmZXJzPzogQXJyYXlCdWZmZXIgfCBBcnJheUJ1ZmZlcltdIHwgVHlwZWRBcnJheSB8XG4gICAgVHlwZWRBcnJheVtdKSB7XG4gICAgaWYgKGJ1ZmZlcnMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgdGhlIGBidWZmZXJzYCBpbnB1dCB0byBiZSBgQXJyYXlCdWZmZXJbXWAuXG4gICAgaWYgKCEoYnVmZmVycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgYnVmZmVycyA9IFtidWZmZXJzXTtcbiAgICB9XG4gICAgYnVmZmVycyA9IGJ1ZmZlcnMubWFwKChidWZmZXJPclR5cGVkQXJyYXkpID0+IHtcbiAgICAgIGlmICh1dGlsLmlzVHlwZWRBcnJheShidWZmZXJPclR5cGVkQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBidWZmZXJPclR5cGVkQXJyYXkuYnVmZmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1ZmZlck9yVHlwZWRBcnJheTtcbiAgICB9KTtcblxuICAgIC8vIFNraXAgc2V0dGluZyB1cCBzaGFyZHMgaWYgdGhlcmUgYXJlIG5vIGJ1ZmZlcnMuXG4gICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJVbmlmb3JtU2l6ZSA9IGJ1ZmZlcnNbMF0uYnl0ZUxlbmd0aDtcbiAgICBsZXQgc3RhcnQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBidWZmZXJzW2ldO1xuICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgYnVmZmVycyBleGNlcHQgdGhlIGxhc3Qgb25lIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuICAgICAgaWYgKGkgIT09IGJ1ZmZlcnMubGVuZ3RoIC0gMSAmJlxuICAgICAgICBidWZmZXIuYnl0ZUxlbmd0aCAhPT0gdGhpcy5idWZmZXJVbmlmb3JtU2l6ZSkge1xuICAgICAgICAvLyBVbnNldCB0aGUgYnVmZmVyIHVuaWZvcm0gc2l6ZSwgc2luY2UgdGhlIGJ1ZmZlciBzaXplcyBhcmUgbm90XG4gICAgICAgIC8vIHVuaWZvcm0uXG4gICAgICAgIHRoaXMuYnVmZmVyVW5pZm9ybVNpemUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgc2hhcmRzLCBpbmNsdWRpbmcgdGhlaXIgc3RhcnQgYW5kIGVuZCBwb2ludHMuXG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIGJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgdGhpcy5zaGFyZHMucHVzaCh7IGJ1ZmZlciwgc3RhcnQsIGVuZCB9KTtcbiAgICAgIHN0YXJ0ID0gZW5kO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgYnl0ZUxlbmdodGhcbiAgICBpZiAodGhpcy5zaGFyZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmJ5dGVMZW5ndGggPSAwO1xuICAgIH1cbiAgICB0aGlzLmJ5dGVMZW5ndGggPSB0aGlzLnNoYXJkc1t0aGlzLnNoYXJkcy5sZW5ndGggLSAxXS5lbmQ7XG4gIH1cblxuICBzbGljZShzdGFydCA9IDAsIGVuZCA9IHRoaXMuYnl0ZUxlbmd0aCk6IEFycmF5QnVmZmVyIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gc2hhcmRzLCB0aGVuIHRoZSBDb21wb3NpdGVBcnJheUJ1ZmZlciB3YXMgaW5pdGlhbGl6ZWRcbiAgICAvLyB3aXRoIG5vIGRhdGEuXG4gICAgaWYgKHRoaXMuc2hhcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG5cbiAgICAvLyBOYU4gaXMgdHJlYXRlZCBhcyB6ZXJvIGZvciBzbGljaW5nLiBUaGlzIG1hdGNoZXMgQXJyYXlCdWZmZXIncyBiZWhhdmlvci5cbiAgICBzdGFydCA9IGlzTmFOKE51bWJlcihzdGFydCkpID8gMCA6IHN0YXJ0O1xuICAgIGVuZCA9IGlzTmFOKE51bWJlcihlbmQpKSA/IDAgOiBlbmQ7XG5cbiAgICAvLyBGaXggdGhlIGJvdW5kcyB0byB3aXRoaW4gdGhlIGFycmF5LlxuICAgIHN0YXJ0ID0gTWF0aC5tYXgoMCwgc3RhcnQpO1xuICAgIGVuZCA9IE1hdGgubWluKHRoaXMuYnl0ZUxlbmd0aCwgZW5kKTtcbiAgICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0U2hhcmRJbmRleCA9IHRoaXMuZmluZFNoYXJkRm9yQnl0ZShzdGFydCk7XG4gICAgaWYgKHN0YXJ0U2hhcmRJbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gc2luY2UgdGhlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyBhcmUgYWx3YXlzXG4gICAgICAvLyB3aXRoaW4gMCBhbmQgdGhlIGNvbXBvc2l0ZSBhcnJheSdzIGxlbmd0aC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc3RhcnQgc2hhcmQgZm9yIGJ5dGUgJHtzdGFydH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaXplID0gZW5kIC0gc3RhcnQ7XG4gICAgY29uc3Qgb3V0cHV0QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHNpemUpO1xuICAgIGNvbnN0IG91dHB1dEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0QnVmZmVyKTtcbiAgICBsZXQgc2xpY2VkID0gMDtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRTaGFyZEluZGV4OyBpIDwgdGhpcy5zaGFyZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gdGhpcy5zaGFyZHNbaV07XG5cbiAgICAgIGNvbnN0IGdsb2JhbFN0YXJ0ID0gc3RhcnQgKyBzbGljZWQ7XG4gICAgICBjb25zdCBsb2NhbFN0YXJ0ID0gZ2xvYmFsU3RhcnQgLSBzaGFyZC5zdGFydDtcbiAgICAgIGNvbnN0IG91dHB1dFN0YXJ0ID0gc2xpY2VkO1xuXG4gICAgICBjb25zdCBnbG9iYWxFbmQgPSBNYXRoLm1pbihlbmQsIHNoYXJkLmVuZCk7XG4gICAgICBjb25zdCBsb2NhbEVuZCA9IGdsb2JhbEVuZCAtIHNoYXJkLnN0YXJ0O1xuXG4gICAgICBjb25zdCBvdXRwdXRTbGljZSA9IG5ldyBVaW50OEFycmF5KHNoYXJkLmJ1ZmZlciwgbG9jYWxTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxFbmQgLSBsb2NhbFN0YXJ0KTtcbiAgICAgIG91dHB1dEFycmF5LnNldChvdXRwdXRTbGljZSwgb3V0cHV0U3RhcnQpO1xuICAgICAgc2xpY2VkICs9IG91dHB1dFNsaWNlLmxlbmd0aDtcblxuICAgICAgaWYgKGVuZCA8IHNoYXJkLmVuZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dEJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGluZGV4IG9mIHRoZSBzaGFyZCB0aGF0IGNvbnRhaW5zIHRoZSBieXRlIGF0IGBieXRlSW5kZXhgLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kU2hhcmRGb3JCeXRlKGJ5dGVJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaGFyZHMubGVuZ3RoID09PSAwIHx8IGJ5dGVJbmRleCA8IDAgfHxcbiAgICAgIGJ5dGVJbmRleCA+PSB0aGlzLmJ5dGVMZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgYnVmZmVycyBoYXZlIGEgdW5pZm9ybSBzaXplLCBjb21wdXRlIHRoZSBzaGFyZCBkaXJlY3RseS5cbiAgICBpZiAodGhpcy5idWZmZXJVbmlmb3JtU2l6ZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnByZXZpb3VzU2hhcmRJbmRleCA9IE1hdGguZmxvb3IoYnl0ZUluZGV4IC8gdGhpcy5idWZmZXJVbmlmb3JtU2l6ZSk7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2aW91c1NoYXJkSW5kZXg7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGJ1ZmZlcnMgZG9uJ3QgaGF2ZSBhIHVuaWZvcm0gc2l6ZSwgd2UgbmVlZCB0byBzZWFyY2ggZm9yIHRoZVxuICAgIC8vIHNoYXJkLiBUaGF0IG1lYW5zIHdlIG5lZWQgYSBmdW5jdGlvbiB0byBjaGVjayB3aGVyZSB0aGUgYnl0ZUluZGV4IGxpZXNcbiAgICAvLyByZWxhdGl2ZSB0byBhIGdpdmVuIHNoYXJkLlxuICAgIGZ1bmN0aW9uIGNoZWNrKHNoYXJkOiBCdWZmZXJTaGFyZCkge1xuICAgICAgaWYgKGJ5dGVJbmRleCA8IHNoYXJkLnN0YXJ0KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChieXRlSW5kZXggPj0gc2hhcmQuZW5kKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gRm9yIGVmZmljaWVuY3ksIHRyeSB0aGUgcHJldmlvdXMgc2hhcmQgZmlyc3QuXG4gICAgaWYgKGNoZWNrKHRoaXMuc2hhcmRzW3RoaXMucHJldmlvdXNTaGFyZEluZGV4XSkgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2hhcmRJbmRleDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIHVzZSBhIGdlbmVyaWMgc2VhcmNoIGZ1bmN0aW9uLlxuICAgIC8vIFRoaXMgc2hvdWxkIGFsbW9zdCBuZXZlciBlbmQgdXAgYmVpbmcgdXNlZCBpbiBwcmFjdGljZSBzaW5jZSB0aGUgd2VpZ2h0XG4gICAgLy8gZW50cmllcyBzaG91bGQgYWx3YXlzIGJlIGluIG9yZGVyLlxuICAgIGNvbnN0IGluZGV4ID0gc2VhcmNoKHRoaXMuc2hhcmRzLCBjaGVjayk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlvdXNTaGFyZEluZGV4ID0gaW5kZXg7XG4gICAgcmV0dXJuIHRoaXMucHJldmlvdXNTaGFyZEluZGV4O1xuICB9XG59XG5cbi8qKlxuICogU2VhcmNoIGZvciBhbiBlbGVtZW50IG9mIGEgc29ydGVkIGFycmF5LlxuICpcbiAqIEBwYXJhbSBzb3J0ZWRBcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIHNlYXJjaFxuICogQHBhcmFtIGNvbXBhcmUgQSBmdW5jdGlvbiB0byBjb21wYXJlIHRoZSBjdXJyZW50IHZhbHVlIGFnYWluc3QgdGhlIHNlYXJjaGVkXG4gKiAgICAgdmFsdWUuIFJldHVybiAwIG9uIGEgbWF0Y2gsIG5lZ2F0aXZlIGlmIHRoZSBzZWFyY2hlZCB2YWx1ZSBpcyBsZXNzIHRoYW5cbiAqICAgICB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYW5kIHBvc2l0aXZlIGlmIHRoZSBzZWFyY2hlZCB2YWx1ZSBpc1xuICogICAgIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCwgb3IgLTEgaWYgaXQncyBub3QgaW4gdGhlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoPFQ+KHNvcnRlZEFycmF5OiBUW10sIGNvbXBhcmU6ICh0OiBUKSA9PiBudW1iZXIpOiBudW1iZXIge1xuICAvLyBCaW5hcnkgc2VhcmNoXG4gIGxldCBtaW4gPSAwO1xuICBsZXQgbWF4ID0gc29ydGVkQXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChtaW4gPD0gbWF4KSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcigobWF4IC0gbWluKSAvIDIpICsgbWluO1xuICAgIGNvbnN0IHNpZGUgPSBjb21wYXJlKHNvcnRlZEFycmF5W21pZGRsZV0pO1xuXG4gICAgaWYgKHNpZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChzaWRlIDwgMCkge1xuICAgICAgbWF4ID0gbWlkZGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW4gPSBtaWRkbGUgKyAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from './engine';\nimport { env } from './environment';\nimport { setDeprecationWarningFn } from './tensor';\nimport { getTensorsInContainer } from './tensor_util';\n/**\n * Enables production mode which disables correctness checks in favor of\n * performance.\n *\n * @doc {heading: 'Environment'}\n */\nexport function enableProdMode() {\n env().set('PROD', true);\n}\n/**\n * Enables debug mode which will log information about all executed kernels:\n * the elapsed time of the kernel execution, as well as the rank, shape, and\n * size of the output tensor.\n *\n * Debug mode will significantly slow down your application as it will\n * download the result of every operation to the CPU. This should not be used in\n * production. Debug mode does not affect the timing information of the kernel\n * execution as we do not measure download time in the kernel execution time.\n *\n * See also: `tf.profile`, `tf.memory`.\n *\n * @doc {heading: 'Environment'}\n */\nexport function enableDebugMode() {\n env().set('DEBUG', true);\n}\n/** Globally disables deprecation warnings */\nexport function disableDeprecationWarnings() {\n env().set('DEPRECATION_WARNINGS_ENABLED', false);\n console.warn(`TensorFlow.js deprecation warnings have been disabled.`);\n}\n/** Warn users about deprecated functionality. */\nexport function deprecationWarn(msg) {\n if (env().getBool('DEPRECATION_WARNINGS_ENABLED')) {\n console.warn(msg + ' You can disable deprecation warnings with ' +\n 'tf.disableDeprecationWarnings().');\n }\n}\nsetDeprecationWarningFn(deprecationWarn);\n/**\n * Dispose all variables kept in backend engine.\n *\n * @doc {heading: 'Environment'}\n */\nexport function disposeVariables() {\n ENGINE.disposeVariables();\n}\n/**\n * It returns the global engine that keeps track of all tensors and backends.\n *\n * @doc {heading: 'Environment'}\n */\nexport function engine() {\n return ENGINE;\n}\n/**\n * Returns memory info at the current time in the program. The result is an\n * object with the following properties:\n *\n * - `numBytes`: Number of bytes allocated (undisposed) at this time.\n * - `numTensors`: Number of unique tensors allocated.\n * - `numDataBuffers`: Number of unique data buffers allocated\n * (undisposed) at this time, which is ≤ the number of tensors\n * (e.g. `a.reshape(newShape)` makes a new Tensor that shares the same\n * data buffer with `a`).\n * - `unreliable`: True if the memory usage is unreliable. See `reasons` when\n * `unreliable` is true.\n * - `reasons`: `string[]`, reasons why the memory is unreliable, present if\n * `unreliable` is true.\n *\n * WebGL Properties:\n * - `numBytesInGPU`: Number of bytes allocated (undisposed) in the GPU only at\n * this time.\n *\n * @doc {heading: 'Performance', subheading: 'Memory'}\n */\nexport function memory() {\n return ENGINE.memory();\n}\n/**\n * Executes the provided function `f()` and returns a promise that resolves\n * with information about the function's memory use:\n * - `newBytes`: the number of new bytes allocated\n * - `newTensors`: the number of new tensors created\n * - `peakBytes`: the peak number of bytes allocated\n * - `kernels`: an array of objects for each kernel involved that reports\n * their input and output shapes, number of bytes used, and number of new\n * tensors created.\n * - `kernelNames`: an array of unique strings with just the names of the\n * kernels in the `kernels` array.\n *\n * ```js\n * const profile = await tf.profile(() => {\n * const x = tf.tensor1d([1, 2, 3]);\n * let x2 = x.square();\n * x2.dispose();\n * x2 = x.square();\n * x2.dispose();\n * return x;\n * });\n *\n * console.log(`newBytes: ${profile.newBytes}`);\n * console.log(`newTensors: ${profile.newTensors}`);\n * console.log(`byte usage over all kernels: ${profile.kernels.map(k =>\n * k.totalBytesSnapshot)}`);\n * ```\n *\n *\n * @doc {heading: 'Performance', subheading: 'Profile'}\n */\nexport function profile(f) {\n return ENGINE.profile(f);\n}\n/**\n * Executes the provided function `fn` and after it is executed, cleans up all\n * intermediate tensors allocated by `fn` except those returned by `fn`.\n * `fn` must not return a Promise (async functions not allowed). The returned\n * result can be a complex object.\n *\n * Using this method helps avoid memory leaks. In general, wrap calls to\n * operations in `tf.tidy` for automatic memory cleanup.\n *\n * NOTE: Variables do *not* get cleaned up when inside a tidy(). If you want to\n * dispose variables, please use `tf.disposeVariables` or call dispose()\n * directly on variables.\n *\n * ```js\n * // y = 2 ^ 2 + 1\n * const y = tf.tidy(() => {\n * // a, b, and one will be cleaned up when the tidy ends.\n * const one = tf.scalar(1);\n * const a = tf.scalar(2);\n * const b = a.square();\n *\n * console.log('numTensors (in tidy): ' + tf.memory().numTensors);\n *\n * // The value returned inside the tidy function will return\n * // through the tidy, in this case to the variable y.\n * return b.add(one);\n * });\n *\n * console.log('numTensors (outside tidy): ' + tf.memory().numTensors);\n * y.print();\n * ```\n *\n * @param nameOrFn The name of the closure, or the function to execute.\n * If a name is provided, the 2nd argument should be the function.\n * If debug mode is on, the timing and the memory usage of the function\n * will be tracked and displayed on the console using the provided name.\n * @param fn The function to execute.\n *\n * @doc {heading: 'Performance', subheading: 'Memory'}\n */\nexport function tidy(nameOrFn, fn) {\n return ENGINE.tidy(nameOrFn, fn);\n}\n/**\n * Disposes any `tf.Tensor`s found within the provided object.\n *\n * @param container an object that may be a `tf.Tensor` or may directly\n * contain `tf.Tensor`s, such as a `Tensor[]` or `{key: Tensor, ...}`. If\n * the object is not a `tf.Tensor` or does not contain `Tensors`, nothing\n * happens. In general it is safe to pass any object here, except that\n * `Promise`s are not supported.\n *\n * @doc {heading: 'Performance', subheading: 'Memory'}\n */\nexport function dispose(container) {\n const tensors = getTensorsInContainer(container);\n tensors.forEach(tensor => tensor.dispose());\n}\n/**\n * Keeps a `tf.Tensor` generated inside a `tf.tidy` from being disposed\n * automatically.\n *\n * ```js\n * let b;\n * const y = tf.tidy(() => {\n * const one = tf.scalar(1);\n * const a = tf.scalar(2);\n *\n * // b will not be cleaned up by the tidy. a and one will be cleaned up\n * // when the tidy ends.\n * b = tf.keep(a.square());\n *\n * console.log('numTensors (in tidy): ' + tf.memory().numTensors);\n *\n * // The value returned inside the tidy function will return\n * // through the tidy, in this case to the variable y.\n * return b.add(one);\n * });\n *\n * console.log('numTensors (outside tidy): ' + tf.memory().numTensors);\n * console.log('y:');\n * y.print();\n * console.log('b:');\n * b.print();\n * ```\n *\n * @param result The tensor to keep from being disposed.\n *\n * @doc {heading: 'Performance', subheading: 'Memory'}\n */\nexport function keep(result) {\n return ENGINE.keep(result);\n}\n/**\n * Executes `f()` and returns a promise that resolves with timing\n * information.\n *\n * The result is an object with the following properties:\n *\n * - `wallMs`: Wall execution time.\n * - `kernelMs`: Kernel execution time, ignoring data transfer. If using the\n * WebGL backend and the query timer extension is not available, this will\n * return an error object.\n * - On `WebGL` The following additional properties exist:\n * - `uploadWaitMs`: CPU blocking time on texture uploads.\n * - `downloadWaitMs`: CPU blocking time on texture downloads (readPixels).\n *\n * ```js\n * const x = tf.randomNormal([20, 20]);\n * const time = await tf.time(() => x.matMul(x));\n *\n * console.log(`kernelMs: ${time.kernelMs}, wallTimeMs: ${time.wallMs}`);\n * ```\n *\n * @param f The function to execute and time.\n *\n * @doc {heading: 'Performance', subheading: 'Timing'}\n */\nexport function time(f) {\n return ENGINE.time(f);\n}\n/**\n * Sets the backend (cpu, webgl, wasm, etc) responsible for creating tensors and\n * executing operations on those tensors. Returns a promise that resolves\n * to a boolean if the backend initialization was successful.\n *\n * Note this disposes the current backend, if any, as well as any tensors\n * associated with it. A new backend is initialized, even if it is of the\n * same type as the previous one.\n *\n * @param backendName The name of the backend. Currently supports\n * `'webgl'|'cpu'` in the browser, `'tensorflow'` under node.js\n * (requires tfjs-node), and `'wasm'` (requires tfjs-backend-wasm).\n *\n * @doc {heading: 'Backends'}\n */\nexport function setBackend(backendName) {\n return ENGINE.setBackend(backendName);\n}\n/**\n * Returns a promise that resolves when the currently selected backend (or the\n * highest priority one) has initialized. Await this promise when you are using\n * a backend that has async initialization.\n *\n * @doc {heading: 'Backends'}\n */\nexport function ready() {\n return ENGINE.ready();\n}\n/**\n * Returns the current backend name (cpu, webgl, etc). The backend is\n * responsible for creating tensors and executing operations on those tensors.\n *\n * @doc {heading: 'Backends'}\n */\nexport function getBackend() {\n return ENGINE.backendName;\n}\n/**\n * Removes a backend and the registered factory.\n *\n * @doc {heading: 'Backends'}\n */\nexport function removeBackend(name) {\n ENGINE.removeBackend(name);\n}\n/**\n * Finds the backend registered under the provided name. Returns null if the\n * name is not in the registry, or the registration hasn't finished yet.\n */\nexport function findBackend(name) {\n return ENGINE.findBackend(name);\n}\n/**\n * Finds the backend factory registered under the provided name. Returns a\n * function that produces a new backend when called. Returns null if the name\n * is not in the registry.\n */\nexport function findBackendFactory(name) {\n return ENGINE.findBackendFactory(name);\n}\n/**\n * Registers a global backend. The registration should happen when importing\n * a module file (e.g. when importing `backend_webgl.ts`), and is used for\n * modular builds (e.g. custom tfjs bundle with only webgl support).\n *\n * @param factory The backend factory function. When called, it should\n * return a backend instance, or a promise of an instance.\n * @param priority The priority of the backend (higher = more important).\n * In case multiple backends are registered, the priority is used to find\n * the best backend. Defaults to 1.\n * @return False if there is already a registered backend under this name, true\n * if not.\n *\n * @doc {heading: 'Backends'}\n */\nexport function registerBackend(name, factory, priority = 1) {\n return ENGINE.registerBackend(name, factory, priority);\n}\n/**\n * Gets the current backend. If no backends have been initialized, this will\n * attempt to initialize the best backend. Will throw an error if the highest\n * priority backend has async initialization, in which case you should call\n * 'await tf.ready()' before running other code.\n *\n * @doc {heading: 'Backends'}\n */\nexport function backend() {\n return ENGINE.backend;\n}\n/**\n * Sets the global platform.\n *\n * @param platformName The name of this platform.\n * @param platform A platform implementation.\n */\nexport function setPlatform(platformName, platform) {\n env().setPlatform(platformName, platform);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvZ2xvYmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsTUFBTSxFQUF1RCxNQUFNLFVBQVUsQ0FBQztBQUN0RixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xDLE9BQU8sRUFBQyx1QkFBdUIsRUFBUyxNQUFNLFVBQVUsQ0FBQztBQUV6RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFcEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGVBQWU7SUFDN0IsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsd0RBQXdELENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVztJQUN6QyxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO1FBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQ1IsR0FBRyxHQUFHLDZDQUE2QztZQUNuRCxrQ0FBa0MsQ0FBQyxDQUFDO0tBQ3pDO0FBQ0gsQ0FBQztBQUNELHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXpDOzs7O0dBSUc7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LEVBQUUsUUFBa0I7SUFDbEUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbEJhY2tlbmR9IGZyb20gJy4vYmFja2VuZHMvYmFja2VuZCc7XG5pbXBvcnQge0VOR0lORSwgRW5naW5lLCBNZW1vcnlJbmZvLCBQcm9maWxlSW5mbywgU2NvcGVGbiwgVGltaW5nSW5mb30gZnJvbSAnLi9lbmdpbmUnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICcuL3BsYXRmb3Jtcy9wbGF0Zm9ybSc7XG5pbXBvcnQge3NldERlcHJlY2F0aW9uV2FybmluZ0ZuLCBUZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yQ29udGFpbmVyfSBmcm9tICcuL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2dldFRlbnNvcnNJbkNvbnRhaW5lcn0gZnJvbSAnLi90ZW5zb3JfdXRpbCc7XG5cbi8qKlxuICogRW5hYmxlcyBwcm9kdWN0aW9uIG1vZGUgd2hpY2ggZGlzYWJsZXMgY29ycmVjdG5lc3MgY2hlY2tzIGluIGZhdm9yIG9mXG4gKiBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnRW52aXJvbm1lbnQnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlUHJvZE1vZGUoKTogdm9pZCB7XG4gIGVudigpLnNldCgnUFJPRCcsIHRydWUpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgZGVidWcgbW9kZSB3aGljaCB3aWxsIGxvZyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgZXhlY3V0ZWQga2VybmVsczpcbiAqIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIGtlcm5lbCBleGVjdXRpb24sIGFzIHdlbGwgYXMgdGhlIHJhbmssIHNoYXBlLCBhbmRcbiAqIHNpemUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuXG4gKlxuICogRGVidWcgbW9kZSB3aWxsIHNpZ25pZmljYW50bHkgc2xvdyBkb3duIHlvdXIgYXBwbGljYXRpb24gYXMgaXQgd2lsbFxuICogZG93bmxvYWQgdGhlIHJlc3VsdCBvZiBldmVyeSBvcGVyYXRpb24gdG8gdGhlIENQVS4gVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgaW5cbiAqIHByb2R1Y3Rpb24uIERlYnVnIG1vZGUgZG9lcyBub3QgYWZmZWN0IHRoZSB0aW1pbmcgaW5mb3JtYXRpb24gb2YgdGhlIGtlcm5lbFxuICogZXhlY3V0aW9uIGFzIHdlIGRvIG5vdCBtZWFzdXJlIGRvd25sb2FkIHRpbWUgaW4gdGhlIGtlcm5lbCBleGVjdXRpb24gdGltZS5cbiAqXG4gKiBTZWUgYWxzbzogYHRmLnByb2ZpbGVgLCBgdGYubWVtb3J5YC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnRW52aXJvbm1lbnQnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlRGVidWdNb2RlKCk6IHZvaWQge1xuICBlbnYoKS5zZXQoJ0RFQlVHJywgdHJ1ZSk7XG59XG5cbi8qKiBHbG9iYWxseSBkaXNhYmxlcyBkZXByZWNhdGlvbiB3YXJuaW5ncyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVEZXByZWNhdGlvbldhcm5pbmdzKCk6IHZvaWQge1xuICBlbnYoKS5zZXQoJ0RFUFJFQ0FUSU9OX1dBUk5JTkdTX0VOQUJMRUQnLCBmYWxzZSk7XG4gIGNvbnNvbGUud2FybihgVGVuc29yRmxvdy5qcyBkZXByZWNhdGlvbiB3YXJuaW5ncyBoYXZlIGJlZW4gZGlzYWJsZWQuYCk7XG59XG5cbi8qKiBXYXJuIHVzZXJzIGFib3V0IGRlcHJlY2F0ZWQgZnVuY3Rpb25hbGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGlvbldhcm4obXNnOiBzdHJpbmcpIHtcbiAgaWYgKGVudigpLmdldEJvb2woJ0RFUFJFQ0FUSU9OX1dBUk5JTkdTX0VOQUJMRUQnKSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgbXNnICsgJyBZb3UgY2FuIGRpc2FibGUgZGVwcmVjYXRpb24gd2FybmluZ3Mgd2l0aCAnICtcbiAgICAgICAgJ3RmLmRpc2FibGVEZXByZWNhdGlvbldhcm5pbmdzKCkuJyk7XG4gIH1cbn1cbnNldERlcHJlY2F0aW9uV2FybmluZ0ZuKGRlcHJlY2F0aW9uV2Fybik7XG5cbi8qKlxuICogRGlzcG9zZSBhbGwgdmFyaWFibGVzIGtlcHQgaW4gYmFja2VuZCBlbmdpbmUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0Vudmlyb25tZW50J31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VWYXJpYWJsZXMoKTogdm9pZCB7XG4gIEVOR0lORS5kaXNwb3NlVmFyaWFibGVzKCk7XG59XG5cbi8qKlxuICogSXQgcmV0dXJucyB0aGUgZ2xvYmFsIGVuZ2luZSB0aGF0IGtlZXBzIHRyYWNrIG9mIGFsbCB0ZW5zb3JzIGFuZCBiYWNrZW5kcy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnRW52aXJvbm1lbnQnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5naW5lKCk6IEVuZ2luZSB7XG4gIHJldHVybiBFTkdJTkU7XG59XG5cbi8qKlxuICogUmV0dXJucyBtZW1vcnkgaW5mbyBhdCB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBwcm9ncmFtLiBUaGUgcmVzdWx0IGlzIGFuXG4gKiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogLSBgbnVtQnl0ZXNgOiBOdW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkICh1bmRpc3Bvc2VkKSBhdCB0aGlzIHRpbWUuXG4gKiAtIGBudW1UZW5zb3JzYDogTnVtYmVyIG9mIHVuaXF1ZSB0ZW5zb3JzIGFsbG9jYXRlZC5cbiAqIC0gYG51bURhdGFCdWZmZXJzYDogTnVtYmVyIG9mIHVuaXF1ZSBkYXRhIGJ1ZmZlcnMgYWxsb2NhdGVkXG4gKiAgICh1bmRpc3Bvc2VkKSBhdCB0aGlzIHRpbWUsIHdoaWNoIGlzIOKJpCB0aGUgbnVtYmVyIG9mIHRlbnNvcnNcbiAqICAgKGUuZy4gYGEucmVzaGFwZShuZXdTaGFwZSlgIG1ha2VzIGEgbmV3IFRlbnNvciB0aGF0IHNoYXJlcyB0aGUgc2FtZVxuICogICBkYXRhIGJ1ZmZlciB3aXRoIGBhYCkuXG4gKiAtIGB1bnJlbGlhYmxlYDogVHJ1ZSBpZiB0aGUgbWVtb3J5IHVzYWdlIGlzIHVucmVsaWFibGUuIFNlZSBgcmVhc29uc2Agd2hlblxuICogICAgYHVucmVsaWFibGVgIGlzIHRydWUuXG4gKiAtIGByZWFzb25zYDogYHN0cmluZ1tdYCwgcmVhc29ucyB3aHkgdGhlIG1lbW9yeSBpcyB1bnJlbGlhYmxlLCBwcmVzZW50IGlmXG4gKiAgICBgdW5yZWxpYWJsZWAgaXMgdHJ1ZS5cbiAqXG4gKiBXZWJHTCBQcm9wZXJ0aWVzOlxuICogLSBgbnVtQnl0ZXNJbkdQVWA6IE51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgKHVuZGlzcG9zZWQpIGluIHRoZSBHUFUgb25seSBhdFxuICogICAgIHRoaXMgdGltZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnUGVyZm9ybWFuY2UnLCBzdWJoZWFkaW5nOiAnTWVtb3J5J31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeSgpOiBNZW1vcnlJbmZvIHtcbiAgcmV0dXJuIEVOR0lORS5tZW1vcnkoKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gYGYoKWAgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAqIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uJ3MgbWVtb3J5IHVzZTpcbiAqIC0gYG5ld0J5dGVzYDogdGhlIG51bWJlciBvZiBuZXcgYnl0ZXMgYWxsb2NhdGVkXG4gKiAtIGBuZXdUZW5zb3JzYDogdGhlIG51bWJlciBvZiBuZXcgdGVuc29ycyBjcmVhdGVkXG4gKiAtIGBwZWFrQnl0ZXNgOiB0aGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkXG4gKiAtIGBrZXJuZWxzYDogYW4gYXJyYXkgb2Ygb2JqZWN0cyBmb3IgZWFjaCBrZXJuZWwgaW52b2x2ZWQgdGhhdCByZXBvcnRzXG4gKiB0aGVpciBpbnB1dCBhbmQgb3V0cHV0IHNoYXBlcywgbnVtYmVyIG9mIGJ5dGVzIHVzZWQsIGFuZCBudW1iZXIgb2YgbmV3XG4gKiB0ZW5zb3JzIGNyZWF0ZWQuXG4gKiAtIGBrZXJuZWxOYW1lc2A6IGFuIGFycmF5IG9mIHVuaXF1ZSBzdHJpbmdzIHdpdGgganVzdCB0aGUgbmFtZXMgb2YgdGhlXG4gKiBrZXJuZWxzIGluIHRoZSBga2VybmVsc2AgYXJyYXkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCB0Zi5wcm9maWxlKCgpID0+IHtcbiAqICAgY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKiAgIGxldCB4MiA9IHguc3F1YXJlKCk7XG4gKiAgIHgyLmRpc3Bvc2UoKTtcbiAqICAgeDIgPSB4LnNxdWFyZSgpO1xuICogICB4Mi5kaXNwb3NlKCk7XG4gKiAgIHJldHVybiB4O1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2coYG5ld0J5dGVzOiAke3Byb2ZpbGUubmV3Qnl0ZXN9YCk7XG4gKiBjb25zb2xlLmxvZyhgbmV3VGVuc29yczogJHtwcm9maWxlLm5ld1RlbnNvcnN9YCk7XG4gKiBjb25zb2xlLmxvZyhgYnl0ZSB1c2FnZSBvdmVyIGFsbCBrZXJuZWxzOiAke3Byb2ZpbGUua2VybmVscy5tYXAoayA9PlxuICogay50b3RhbEJ5dGVzU25hcHNob3QpfWApO1xuICogYGBgXG4gKlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdQZXJmb3JtYW5jZScsIHN1YmhlYWRpbmc6ICdQcm9maWxlJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2ZpbGUoZjogKCkgPT4gKFRlbnNvckNvbnRhaW5lciB8IFByb21pc2U8VGVuc29yQ29udGFpbmVyPikpOlxuICAgIFByb21pc2U8UHJvZmlsZUluZm8+IHtcbiAgcmV0dXJuIEVOR0lORS5wcm9maWxlKGYpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBgZm5gIGFuZCBhZnRlciBpdCBpcyBleGVjdXRlZCwgY2xlYW5zIHVwIGFsbFxuICogaW50ZXJtZWRpYXRlIHRlbnNvcnMgYWxsb2NhdGVkIGJ5IGBmbmAgZXhjZXB0IHRob3NlIHJldHVybmVkIGJ5IGBmbmAuXG4gKiBgZm5gIG11c3Qgbm90IHJldHVybiBhIFByb21pc2UgKGFzeW5jIGZ1bmN0aW9ucyBub3QgYWxsb3dlZCkuIFRoZSByZXR1cm5lZFxuICogcmVzdWx0IGNhbiBiZSBhIGNvbXBsZXggb2JqZWN0LlxuICpcbiAqIFVzaW5nIHRoaXMgbWV0aG9kIGhlbHBzIGF2b2lkIG1lbW9yeSBsZWFrcy4gSW4gZ2VuZXJhbCwgd3JhcCBjYWxscyB0b1xuICogb3BlcmF0aW9ucyBpbiBgdGYudGlkeWAgZm9yIGF1dG9tYXRpYyBtZW1vcnkgY2xlYW51cC5cbiAqXG4gKiBOT1RFOiBWYXJpYWJsZXMgZG8gKm5vdCogZ2V0IGNsZWFuZWQgdXAgd2hlbiBpbnNpZGUgYSB0aWR5KCkuIElmIHlvdSB3YW50IHRvXG4gKiBkaXNwb3NlIHZhcmlhYmxlcywgcGxlYXNlIHVzZSBgdGYuZGlzcG9zZVZhcmlhYmxlc2Agb3IgY2FsbCBkaXNwb3NlKClcbiAqIGRpcmVjdGx5IG9uIHZhcmlhYmxlcy5cbiAqXG4gKiBgYGBqc1xuICogLy8geSA9IDIgXiAyICsgMVxuICogY29uc3QgeSA9IHRmLnRpZHkoKCkgPT4ge1xuICogICAvLyBhLCBiLCBhbmQgb25lIHdpbGwgYmUgY2xlYW5lZCB1cCB3aGVuIHRoZSB0aWR5IGVuZHMuXG4gKiAgIGNvbnN0IG9uZSA9IHRmLnNjYWxhcigxKTtcbiAqICAgY29uc3QgYSA9IHRmLnNjYWxhcigyKTtcbiAqICAgY29uc3QgYiA9IGEuc3F1YXJlKCk7XG4gKlxuICogICBjb25zb2xlLmxvZygnbnVtVGVuc29ycyAoaW4gdGlkeSk6ICcgKyB0Zi5tZW1vcnkoKS5udW1UZW5zb3JzKTtcbiAqXG4gKiAgIC8vIFRoZSB2YWx1ZSByZXR1cm5lZCBpbnNpZGUgdGhlIHRpZHkgZnVuY3Rpb24gd2lsbCByZXR1cm5cbiAqICAgLy8gdGhyb3VnaCB0aGUgdGlkeSwgaW4gdGhpcyBjYXNlIHRvIHRoZSB2YXJpYWJsZSB5LlxuICogICByZXR1cm4gYi5hZGQob25lKTtcbiAqIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKCdudW1UZW5zb3JzIChvdXRzaWRlIHRpZHkpOiAnICsgdGYubWVtb3J5KCkubnVtVGVuc29ycyk7XG4gKiB5LnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbmFtZU9yRm4gVGhlIG5hbWUgb2YgdGhlIGNsb3N1cmUsIG9yIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlLlxuICogICAgIElmIGEgbmFtZSBpcyBwcm92aWRlZCwgdGhlIDJuZCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIGZ1bmN0aW9uLlxuICogICAgIElmIGRlYnVnIG1vZGUgaXMgb24sIHRoZSB0aW1pbmcgYW5kIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhlIGZ1bmN0aW9uXG4gKiAgICAgd2lsbCBiZSB0cmFja2VkIGFuZCBkaXNwbGF5ZWQgb24gdGhlIGNvbnNvbGUgdXNpbmcgdGhlIHByb3ZpZGVkIG5hbWUuXG4gKiBAcGFyYW0gZm4gVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1BlcmZvcm1hbmNlJywgc3ViaGVhZGluZzogJ01lbW9yeSd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWR5PFQgZXh0ZW5kcyBUZW5zb3JDb250YWluZXI+KFxuICAgIG5hbWVPckZuOiBzdHJpbmd8U2NvcGVGbjxUPiwgZm4/OiBTY29wZUZuPFQ+KTogVCB7XG4gIHJldHVybiBFTkdJTkUudGlkeShuYW1lT3JGbiwgZm4pO1xufVxuXG4vKipcbiAqIERpc3Bvc2VzIGFueSBgdGYuVGVuc29yYHMgZm91bmQgd2l0aGluIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciBhbiBvYmplY3QgdGhhdCBtYXkgYmUgYSBgdGYuVGVuc29yYCBvciBtYXkgZGlyZWN0bHlcbiAqICAgICBjb250YWluIGB0Zi5UZW5zb3Jgcywgc3VjaCBhcyBhIGBUZW5zb3JbXWAgb3IgYHtrZXk6IFRlbnNvciwgLi4ufWAuIElmXG4gKiAgICAgdGhlIG9iamVjdCBpcyBub3QgYSBgdGYuVGVuc29yYCBvciBkb2VzIG5vdCBjb250YWluIGBUZW5zb3JzYCwgbm90aGluZ1xuICogICAgIGhhcHBlbnMuIEluIGdlbmVyYWwgaXQgaXMgc2FmZSB0byBwYXNzIGFueSBvYmplY3QgaGVyZSwgZXhjZXB0IHRoYXRcbiAqICAgICBgUHJvbWlzZWBzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdQZXJmb3JtYW5jZScsIHN1YmhlYWRpbmc6ICdNZW1vcnknfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZShjb250YWluZXI6IFRlbnNvckNvbnRhaW5lcikge1xuICBjb25zdCB0ZW5zb3JzID0gZ2V0VGVuc29yc0luQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHRlbnNvcnMuZm9yRWFjaCh0ZW5zb3IgPT4gdGVuc29yLmRpc3Bvc2UoKSk7XG59XG5cbi8qKlxuICogS2VlcHMgYSBgdGYuVGVuc29yYCBnZW5lcmF0ZWQgaW5zaWRlIGEgYHRmLnRpZHlgIGZyb20gYmVpbmcgZGlzcG9zZWRcbiAqIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogYGBganNcbiAqIGxldCBiO1xuICogY29uc3QgeSA9IHRmLnRpZHkoKCkgPT4ge1xuICogICBjb25zdCBvbmUgPSB0Zi5zY2FsYXIoMSk7XG4gKiAgIGNvbnN0IGEgPSB0Zi5zY2FsYXIoMik7XG4gKlxuICogICAvLyBiIHdpbGwgbm90IGJlIGNsZWFuZWQgdXAgYnkgdGhlIHRpZHkuIGEgYW5kIG9uZSB3aWxsIGJlIGNsZWFuZWQgdXBcbiAqICAgLy8gd2hlbiB0aGUgdGlkeSBlbmRzLlxuICogICBiID0gdGYua2VlcChhLnNxdWFyZSgpKTtcbiAqXG4gKiAgIGNvbnNvbGUubG9nKCdudW1UZW5zb3JzIChpbiB0aWR5KTogJyArIHRmLm1lbW9yeSgpLm51bVRlbnNvcnMpO1xuICpcbiAqICAgLy8gVGhlIHZhbHVlIHJldHVybmVkIGluc2lkZSB0aGUgdGlkeSBmdW5jdGlvbiB3aWxsIHJldHVyblxuICogICAvLyB0aHJvdWdoIHRoZSB0aWR5LCBpbiB0aGlzIGNhc2UgdG8gdGhlIHZhcmlhYmxlIHkuXG4gKiAgIHJldHVybiBiLmFkZChvbmUpO1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2coJ251bVRlbnNvcnMgKG91dHNpZGUgdGlkeSk6ICcgKyB0Zi5tZW1vcnkoKS5udW1UZW5zb3JzKTtcbiAqIGNvbnNvbGUubG9nKCd5OicpO1xuICogeS5wcmludCgpO1xuICogY29uc29sZS5sb2coJ2I6Jyk7XG4gKiBiLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcmVzdWx0IFRoZSB0ZW5zb3IgdG8ga2VlcCBmcm9tIGJlaW5nIGRpc3Bvc2VkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdQZXJmb3JtYW5jZScsIHN1YmhlYWRpbmc6ICdNZW1vcnknfVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcDxUIGV4dGVuZHMgVGVuc29yPihyZXN1bHQ6IFQpOiBUIHtcbiAgcmV0dXJuIEVOR0lORS5rZWVwKHJlc3VsdCk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYGYoKWAgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aW1pbmdcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqIC0gYHdhbGxNc2A6IFdhbGwgZXhlY3V0aW9uIHRpbWUuXG4gKiAtIGBrZXJuZWxNc2A6IEtlcm5lbCBleGVjdXRpb24gdGltZSwgaWdub3JpbmcgZGF0YSB0cmFuc2Zlci4gSWYgdXNpbmcgdGhlXG4gKiBXZWJHTCBiYWNrZW5kIGFuZCB0aGUgcXVlcnkgdGltZXIgZXh0ZW5zaW9uIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgd2lsbFxuICogcmV0dXJuIGFuIGVycm9yIG9iamVjdC5cbiAqIC0gT24gYFdlYkdMYCBUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcHJvcGVydGllcyBleGlzdDpcbiAqICAgLSBgdXBsb2FkV2FpdE1zYDogQ1BVIGJsb2NraW5nIHRpbWUgb24gdGV4dHVyZSB1cGxvYWRzLlxuICogICAtIGBkb3dubG9hZFdhaXRNc2A6IENQVSBibG9ja2luZyB0aW1lIG9uIHRleHR1cmUgZG93bmxvYWRzIChyZWFkUGl4ZWxzKS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnJhbmRvbU5vcm1hbChbMjAsIDIwXSk7XG4gKiBjb25zdCB0aW1lID0gYXdhaXQgdGYudGltZSgoKSA9PiB4Lm1hdE11bCh4KSk7XG4gKlxuICogY29uc29sZS5sb2coYGtlcm5lbE1zOiAke3RpbWUua2VybmVsTXN9LCB3YWxsVGltZU1zOiAke3RpbWUud2FsbE1zfWApO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGYgVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYW5kIHRpbWUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1BlcmZvcm1hbmNlJywgc3ViaGVhZGluZzogJ1RpbWluZyd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lKGY6ICgpID0+IHZvaWQpOiBQcm9taXNlPFRpbWluZ0luZm8+IHtcbiAgcmV0dXJuIEVOR0lORS50aW1lKGYpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGJhY2tlbmQgKGNwdSwgd2ViZ2wsIHdhc20sIGV0YykgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRlbnNvcnMgYW5kXG4gKiBleGVjdXRpbmcgb3BlcmF0aW9ucyBvbiB0aG9zZSB0ZW5zb3JzLiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXG4gKiB0byBhIGJvb2xlYW4gaWYgdGhlIGJhY2tlbmQgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gKlxuICogTm90ZSB0aGlzIGRpc3Bvc2VzIHRoZSBjdXJyZW50IGJhY2tlbmQsIGlmIGFueSwgYXMgd2VsbCBhcyBhbnkgdGVuc29yc1xuICogYXNzb2NpYXRlZCB3aXRoIGl0LiBBIG5ldyBiYWNrZW5kIGlzIGluaXRpYWxpemVkLCBldmVuIGlmIGl0IGlzIG9mIHRoZVxuICogc2FtZSB0eXBlIGFzIHRoZSBwcmV2aW91cyBvbmUuXG4gKlxuICogQHBhcmFtIGJhY2tlbmROYW1lIFRoZSBuYW1lIG9mIHRoZSBiYWNrZW5kLiBDdXJyZW50bHkgc3VwcG9ydHNcbiAqICAgICBgJ3dlYmdsJ3wnY3B1J2AgaW4gdGhlIGJyb3dzZXIsIGAndGVuc29yZmxvdydgIHVuZGVyIG5vZGUuanNcbiAqICAgICAocmVxdWlyZXMgdGZqcy1ub2RlKSwgYW5kIGAnd2FzbSdgIChyZXF1aXJlcyB0ZmpzLWJhY2tlbmQtd2FzbSkuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0JhY2tlbmRzJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEJhY2tlbmQoYmFja2VuZE5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gRU5HSU5FLnNldEJhY2tlbmQoYmFja2VuZE5hbWUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJhY2tlbmQgKG9yIHRoZVxuICogaGlnaGVzdCBwcmlvcml0eSBvbmUpIGhhcyBpbml0aWFsaXplZC4gQXdhaXQgdGhpcyBwcm9taXNlIHdoZW4geW91IGFyZSB1c2luZ1xuICogYSBiYWNrZW5kIHRoYXQgaGFzIGFzeW5jIGluaXRpYWxpemF0aW9uLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdCYWNrZW5kcyd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIEVOR0lORS5yZWFkeSgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgYmFja2VuZCBuYW1lIChjcHUsIHdlYmdsLCBldGMpLiBUaGUgYmFja2VuZCBpc1xuICogcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRlbnNvcnMgYW5kIGV4ZWN1dGluZyBvcGVyYXRpb25zIG9uIHRob3NlIHRlbnNvcnMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0JhY2tlbmRzJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tlbmQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIEVOR0lORS5iYWNrZW5kTmFtZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGEgYmFja2VuZCBhbmQgdGhlIHJlZ2lzdGVyZWQgZmFjdG9yeS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnQmFja2VuZHMnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQmFja2VuZChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgRU5HSU5FLnJlbW92ZUJhY2tlbmQobmFtZSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGJhY2tlbmQgcmVnaXN0ZXJlZCB1bmRlciB0aGUgcHJvdmlkZWQgbmFtZS4gUmV0dXJucyBudWxsIGlmIHRoZVxuICogbmFtZSBpcyBub3QgaW4gdGhlIHJlZ2lzdHJ5LCBvciB0aGUgcmVnaXN0cmF0aW9uIGhhc24ndCBmaW5pc2hlZCB5ZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQmFja2VuZChuYW1lOiBzdHJpbmcpOiBLZXJuZWxCYWNrZW5kIHtcbiAgcmV0dXJuIEVOR0lORS5maW5kQmFja2VuZChuYW1lKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgYmFja2VuZCBmYWN0b3J5IHJlZ2lzdGVyZWQgdW5kZXIgdGhlIHByb3ZpZGVkIG5hbWUuIFJldHVybnMgYVxuICogZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhIG5ldyBiYWNrZW5kIHdoZW4gY2FsbGVkLiBSZXR1cm5zIG51bGwgaWYgdGhlIG5hbWVcbiAqIGlzIG5vdCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQmFja2VuZEZhY3RvcnkobmFtZTogc3RyaW5nKTogKCkgPT5cbiAgICBLZXJuZWxCYWNrZW5kIHwgUHJvbWlzZTxLZXJuZWxCYWNrZW5kPiB7XG4gIHJldHVybiBFTkdJTkUuZmluZEJhY2tlbmRGYWN0b3J5KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGdsb2JhbCBiYWNrZW5kLiBUaGUgcmVnaXN0cmF0aW9uIHNob3VsZCBoYXBwZW4gd2hlbiBpbXBvcnRpbmdcbiAqIGEgbW9kdWxlIGZpbGUgKGUuZy4gd2hlbiBpbXBvcnRpbmcgYGJhY2tlbmRfd2ViZ2wudHNgKSwgYW5kIGlzIHVzZWQgZm9yXG4gKiBtb2R1bGFyIGJ1aWxkcyAoZS5nLiBjdXN0b20gdGZqcyBidW5kbGUgd2l0aCBvbmx5IHdlYmdsIHN1cHBvcnQpLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IFRoZSBiYWNrZW5kIGZhY3RvcnkgZnVuY3Rpb24uIFdoZW4gY2FsbGVkLCBpdCBzaG91bGRcbiAqIHJldHVybiBhIGJhY2tlbmQgaW5zdGFuY2UsIG9yIGEgcHJvbWlzZSBvZiBhbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwcmlvcml0eSBUaGUgcHJpb3JpdHkgb2YgdGhlIGJhY2tlbmQgKGhpZ2hlciA9IG1vcmUgaW1wb3J0YW50KS5cbiAqICAgICBJbiBjYXNlIG11bHRpcGxlIGJhY2tlbmRzIGFyZSByZWdpc3RlcmVkLCB0aGUgcHJpb3JpdHkgaXMgdXNlZCB0byBmaW5kXG4gKiAgICAgdGhlIGJlc3QgYmFja2VuZC4gRGVmYXVsdHMgdG8gMS5cbiAqIEByZXR1cm4gRmFsc2UgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlZ2lzdGVyZWQgYmFja2VuZCB1bmRlciB0aGlzIG5hbWUsIHRydWVcbiAqICAgICBpZiBub3QuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0JhY2tlbmRzJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQmFja2VuZChcbiAgICBuYW1lOiBzdHJpbmcsIGZhY3Rvcnk6ICgpID0+IEtlcm5lbEJhY2tlbmQgfCBQcm9taXNlPEtlcm5lbEJhY2tlbmQ+LFxuICAgIHByaW9yaXR5ID0gMSk6IGJvb2xlYW4ge1xuICByZXR1cm4gRU5HSU5FLnJlZ2lzdGVyQmFja2VuZChuYW1lLCBmYWN0b3J5LCBwcmlvcml0eSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBiYWNrZW5kLiBJZiBubyBiYWNrZW5kcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsIHRoaXMgd2lsbFxuICogYXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZSBiZXN0IGJhY2tlbmQuIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGhpZ2hlc3RcbiAqIHByaW9yaXR5IGJhY2tlbmQgaGFzIGFzeW5jIGluaXRpYWxpemF0aW9uLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgY2FsbFxuICogJ2F3YWl0IHRmLnJlYWR5KCknIGJlZm9yZSBydW5uaW5nIG90aGVyIGNvZGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0JhY2tlbmRzJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhY2tlbmQoKTogS2VybmVsQmFja2VuZCB7XG4gIHJldHVybiBFTkdJTkUuYmFja2VuZDtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBnbG9iYWwgcGxhdGZvcm0uXG4gKlxuICogQHBhcmFtIHBsYXRmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGlzIHBsYXRmb3JtLlxuICogQHBhcmFtIHBsYXRmb3JtIEEgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQbGF0Zm9ybShwbGF0Zm9ybU5hbWU6IHN0cmluZywgcGxhdGZvcm06IFBsYXRmb3JtKSB7XG4gIGVudigpLnNldFBsYXRmb3JtKHBsYXRmb3JtTmFtZSwgcGxhdGZvcm0pO1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { complex } from '../ops/complex';\nimport { tensor } from '../ops/tensor';\nimport { sizeFromShape } from '../util';\nimport { DTYPE_VALUE_SIZE_MAP } from './types';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nimport { backend } from '../globals';\nimport { env } from '../environment';\nimport { getBackend } from '../globals';\n/** Number of bytes reserved for the length of the string. (32bit integer). */\nconst NUM_BYTES_STRING_LENGTH = 4;\n/**\n * Encode a map from names to weight values as an ArrayBuffer, along with an\n * `Array` of `WeightsManifestEntry` as specification of the encoded weights.\n *\n * This function does not perform sharding.\n *\n * This function is the reverse of `decodeWeights`.\n *\n * @param tensors A map (\"dict\") from names to tensors.\n * @param group Group to which the weights belong (optional).\n * @returns A `Promise` of\n * - A flat `ArrayBuffer` with all the binary values of the `Tensor`s\n * concatenated.\n * - An `Array` of `WeightManifestEntry`s, carrying information including\n * tensor names, `dtype`s and shapes.\n * @throws Error: on unsupported tensor `dtype`.\n */\nexport async function encodeWeights(tensors, group) {\n // TODO(adarob, cais): Support quantization.\n const specs = [];\n const dataPromises = [];\n const names = Array.isArray(tensors) ?\n tensors.map(tensor => tensor.name) :\n Object.keys(tensors);\n for (let i = 0; i < names.length; ++i) {\n const name = names[i];\n const t = Array.isArray(tensors) ? tensors[i].tensor : tensors[name];\n if (t.dtype !== 'float32' && t.dtype !== 'int32' && t.dtype !== 'bool' &&\n t.dtype !== 'string' && t.dtype !== 'complex64') {\n throw new Error(`Unsupported dtype in weight '${name}': ${t.dtype}`);\n }\n const spec = { name, shape: t.shape, dtype: t.dtype };\n if (t.dtype === 'string') {\n const utf8bytes = new Promise(async (resolve) => {\n const vals = await t.bytes();\n const totalNumBytes = vals.reduce((p, c) => p + c.length, 0) +\n NUM_BYTES_STRING_LENGTH * vals.length;\n const bytes = new Uint8Array(totalNumBytes);\n let offset = 0;\n for (let i = 0; i < vals.length; i++) {\n const val = vals[i];\n const bytesOfLength = new Uint8Array(new Uint32Array([val.length]).buffer);\n bytes.set(bytesOfLength, offset);\n offset += NUM_BYTES_STRING_LENGTH;\n bytes.set(val, offset);\n offset += val.length;\n }\n resolve(bytes);\n });\n dataPromises.push(utf8bytes);\n }\n else {\n dataPromises.push(t.data());\n }\n if (group != null) {\n spec.group = group;\n }\n specs.push(spec);\n }\n const tensorValues = await Promise.all(dataPromises);\n return { data: concatenateTypedArrays(tensorValues), specs };\n}\n/**\n * Decode flat ArrayBuffer as weights.\n *\n * This function does not handle sharding.\n *\n * This function is the reverse of `encodeWeights`.\n *\n * @param weightData A flat ArrayBuffer or an array of ArrayBuffers carrying the\n * binary values of the tensors concatenated in the order specified in\n * `specs`.\n * @param specs Specifications of the names, dtypes and shapes of the tensors\n * whose value are encoded by `buffer`.\n * @return A map from tensor name to tensor value, with the names corresponding\n * to names in `specs`.\n * @throws Error, if any of the tensors has unsupported dtype.\n */\nexport function decodeWeights(weightData, specs) {\n // TODO(adarob, cais): Support quantization.\n const compositeBuffer = new CompositeArrayBuffer(weightData);\n const out = {};\n let offset = 0;\n for (const spec of specs) {\n const byteLength = getWeightBytelength(spec, (start, end) => {\n return compositeBuffer.slice(offset + start, offset + end);\n });\n out[spec.name] = decodeWeight(spec, compositeBuffer\n .slice(offset, offset + byteLength));\n offset += byteLength;\n }\n return out;\n}\nfunction getWeightBytelength(spec, slice) {\n const size = sizeFromShape(spec.shape);\n let bytesPerValue;\n if ('quantization' in spec) {\n const quantization = spec.quantization;\n bytesPerValue = DTYPE_VALUE_SIZE_MAP[quantization.dtype];\n }\n else if (spec.dtype === 'string') {\n // Can not statically determine string length.\n let byteLength = 0;\n for (let i = 0; i < size; i++) {\n byteLength += NUM_BYTES_STRING_LENGTH + new Uint32Array(slice(byteLength, byteLength + NUM_BYTES_STRING_LENGTH))[0];\n }\n return byteLength;\n }\n else {\n bytesPerValue = DTYPE_VALUE_SIZE_MAP[spec.dtype];\n }\n return size * bytesPerValue;\n}\nasync function getWeightBytelengthAsync(spec, slice) {\n const size = sizeFromShape(spec.shape);\n let bytesPerValue;\n if ('quantization' in spec) {\n const quantization = spec.quantization;\n bytesPerValue = DTYPE_VALUE_SIZE_MAP[quantization.dtype];\n }\n else if (spec.dtype === 'string') {\n // Can not statically determine string length.\n let byteLength = 0;\n for (let i = 0; i < size; i++) {\n byteLength += NUM_BYTES_STRING_LENGTH + new Uint32Array(await slice(byteLength, byteLength + NUM_BYTES_STRING_LENGTH))[0];\n }\n return byteLength;\n }\n else {\n bytesPerValue = DTYPE_VALUE_SIZE_MAP[spec.dtype];\n }\n return size * bytesPerValue;\n}\nfunction decodeWeight(spec, byteBuffer) {\n const name = spec.name;\n const dtype = spec.dtype;\n const shape = spec.shape;\n const size = sizeFromShape(shape);\n let values;\n let offset = 0;\n if ('quantization' in spec) {\n const quantization = spec.quantization;\n if (quantization.dtype === 'uint8' || quantization.dtype === 'uint16') {\n if (!('min' in quantization && 'scale' in quantization)) {\n throw new Error(`Weight ${spec.name} with quantization ${quantization.dtype} ` +\n `doesn't have corresponding metadata min and scale.`);\n }\n }\n else if (quantization.dtype === 'float16') {\n if (dtype !== 'float32') {\n throw new Error(`Weight ${spec.name} is quantized with ${quantization.dtype} ` +\n `which only supports weights of type float32 not ${dtype}.`);\n }\n }\n else {\n throw new Error(`Weight ${spec.name} has unknown ` +\n `quantization dtype ${quantization.dtype}. ` +\n `Supported quantization dtypes are: ` +\n `'uint8', 'uint16', and 'float16'.`);\n }\n const quantizationSizeFactor = DTYPE_VALUE_SIZE_MAP[quantization.dtype];\n const quantizedArray = (quantization.dtype === 'uint8') ?\n new Uint8Array(byteBuffer) :\n new Uint16Array(byteBuffer);\n if (dtype === 'float32') {\n if (quantization.dtype === 'uint8' || quantization.dtype === 'uint16') {\n values = new Float32Array(quantizedArray.length);\n for (let i = 0; i < quantizedArray.length; i++) {\n const v = quantizedArray[i];\n values[i] = v * quantization.scale + quantization.min;\n }\n }\n else if (quantization.dtype === 'float16') {\n // TODO: This is inefficient. Make getFloat16Decoder efficient.\n const float16Decode = getFloat16Decoder();\n values = float16Decode(quantizedArray);\n }\n else {\n throw new Error(`Unsupported quantization type ${quantization.dtype} ` +\n `for weight type float32.`);\n }\n }\n else if (dtype === 'int32') {\n if (quantization.dtype !== 'uint8' && quantization.dtype !== 'uint16') {\n throw new Error(`Unsupported quantization type ${quantization.dtype} ` +\n `for weight type int32.`);\n }\n values = new Int32Array(quantizedArray.length);\n for (let i = 0; i < quantizedArray.length; i++) {\n const v = quantizedArray[i];\n values[i] = Math.round(v * quantization.scale + quantization.min);\n }\n }\n else {\n throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`);\n }\n offset += size * quantizationSizeFactor;\n }\n else if (dtype === 'string') {\n const size = sizeFromShape(spec.shape);\n values = [];\n for (let i = 0; i < size; i++) {\n const byteLength = new Uint32Array(byteBuffer.slice(offset, offset + NUM_BYTES_STRING_LENGTH))[0];\n offset += NUM_BYTES_STRING_LENGTH;\n const bytes = new Uint8Array(byteBuffer.slice(offset, offset + byteLength));\n values.push(bytes);\n offset += byteLength;\n }\n }\n else {\n const dtypeFactor = DTYPE_VALUE_SIZE_MAP[dtype];\n if (dtype === 'float32') {\n values = new Float32Array(byteBuffer);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(byteBuffer);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(byteBuffer);\n }\n else if (dtype === 'complex64') {\n values = new Float32Array(byteBuffer);\n const real = new Float32Array(values.length / 2);\n const image = new Float32Array(values.length / 2);\n for (let i = 0; i < real.length; i++) {\n real[i] = values[i * 2];\n image[i] = values[i * 2 + 1];\n }\n const realTensor = tensor(real, shape, 'float32');\n const imageTensor = tensor(image, shape, 'float32');\n const complexTensor = complex(realTensor, imageTensor);\n realTensor.dispose();\n imageTensor.dispose();\n return complexTensor;\n }\n else {\n throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`);\n }\n offset += size * dtypeFactor;\n }\n return tensor(values, shape, dtype);\n}\nasync function readToLength(reader, initialData, length) {\n let data = new Uint8Array(initialData);\n while (data.byteLength < length) {\n const { done, value } = await reader.read();\n if (done && value == null) {\n const missing = length - data.byteLength;\n throw new Error(`Reader is done but ${missing} bytes are still expected`);\n }\n // TODO: Don't create a new array every loop.\n const newData = new Uint8Array(data.length + value.byteLength);\n newData.set(data, 0);\n newData.set(new Uint8Array(value), data.length);\n data = newData;\n }\n return data.buffer;\n}\nexport async function decodeWeightsStream(weightStream, specs) {\n const tensors = {};\n const reader = weightStream.getReader();\n let data = new ArrayBuffer(0);\n for (const spec of specs) {\n const byteLength = await getWeightBytelengthAsync(spec, async (start, end) => {\n data = await readToLength(reader, data, end);\n return data.slice(start, end);\n });\n data = await readToLength(reader, data, byteLength);\n // Slice the tensor out\n const tensorData = data.slice(0, byteLength);\n data = data.slice(byteLength);\n const weightTensor = decodeWeight(spec, tensorData);\n tensors[spec.name] = weightTensor;\n // TODO(mattsoulanille): Better way to call uploadToGPU.\n // TODO(mattsoulanille): Make this work for webgl too.\n if (getBackend() === 'webgpu') {\n const b = backend();\n if ('uploadToGPU' in b &&\n sizeFromShape(weightTensor.shape) >= env()\n .get('WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD')) {\n b.uploadToGPU(weightTensor.dataId);\n }\n }\n }\n return tensors;\n}\n/**\n * Concatenate TypedArrays into an ArrayBuffer.\n */\nexport function concatenateTypedArrays(xs) {\n // TODO(adarob, cais): Support quantization.\n if (xs === null) {\n throw new Error(`Invalid input value: ${JSON.stringify(xs)}`);\n }\n let totalByteLength = 0;\n // `normalizedXs` is here for this reason: a `TypedArray`'s `buffer'\n // can have a different byte length from that of the `TypedArray` itself,\n // for example, when the `TypedArray` is created from an offset in an\n // `ArrayBuffer`. `normliazedXs` holds `TypedArray`s whose `buffer`s match\n // the `TypedArray` in byte length. If an element of `xs` does not show\n // this property, a new `TypedArray` that satisfy this property will be\n // constructed and pushed into `normalizedXs`.\n const normalizedXs = [];\n xs.forEach((x) => {\n totalByteLength += x.byteLength;\n // tslint:disable:no-any\n normalizedXs.push(x.byteLength === x.buffer.byteLength ? x :\n new x.constructor(x));\n if (!(x instanceof Float32Array || x instanceof Int32Array ||\n x instanceof Uint8Array)) {\n throw new Error(`Unsupported TypedArray subtype: ${x.constructor.name}`);\n }\n // tslint:enable:no-any\n });\n const y = new Uint8Array(totalByteLength);\n let offset = 0;\n normalizedXs.forEach((x) => {\n y.set(new Uint8Array(x.buffer), offset);\n offset += x.byteLength;\n });\n return y.buffer;\n}\n// Use Buffer on Node.js instead of Blob/atob/btoa\nconst useNodeBuffer = typeof Buffer !== 'undefined' &&\n (typeof Blob === 'undefined' || typeof atob === 'undefined' ||\n typeof btoa === 'undefined');\n/**\n * Calculate the byte length of a JavaScript string.\n *\n * Note that a JavaScript string can contain wide characters, therefore the\n * length of the string is not necessarily equal to the byte length.\n *\n * @param str Input string.\n * @returns Byte length.\n */\nexport function stringByteLength(str) {\n if (useNodeBuffer) {\n return Buffer.byteLength(str, 'utf8');\n }\n return new Blob([str]).size;\n}\n/**\n * Encode an ArrayBuffer as a base64 encoded string.\n *\n * @param buffer `ArrayBuffer` to be converted.\n * @returns A string that base64-encodes `buffer`.\n */\nexport function arrayBufferToBase64String(buffer) {\n if (useNodeBuffer) {\n return Buffer.from(buffer).toString('base64');\n }\n const buf = new Uint8Array(buffer);\n let s = '';\n for (let i = 0, l = buf.length; i < l; i++) {\n s += String.fromCharCode(buf[i]);\n }\n return btoa(s);\n}\n/**\n * Decode a base64 string as an ArrayBuffer.\n *\n * @param str Base64 string.\n * @returns Decoded `ArrayBuffer`.\n */\nexport function base64StringToArrayBuffer(str) {\n if (useNodeBuffer) {\n const buf = Buffer.from(str, 'base64');\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n }\n const s = atob(str);\n const buffer = new Uint8Array(s.length);\n for (let i = 0; i < s.length; ++i) {\n buffer.set([s.charCodeAt(i)], i);\n }\n return buffer.buffer;\n}\n/**\n * Concatenate a number of ArrayBuffers into one.\n *\n * @param buffers An array of ArrayBuffers to concatenate, or a single\n * ArrayBuffer.\n * @returns Result of concatenating `buffers` in order.\n *\n * @deprecated Use tf.io.CompositeArrayBuffer.join() instead.\n */\nexport function concatenateArrayBuffers(buffers) {\n return CompositeArrayBuffer.join(buffers);\n}\n/**\n * Get the basename of a path.\n *\n * Behaves in a way analogous to Linux's basename command.\n *\n * @param path\n */\nexport function basename(path) {\n const SEPARATOR = '/';\n path = path.trim();\n while (path.endsWith(SEPARATOR)) {\n path = path.slice(0, path.length - 1);\n }\n const items = path.split(SEPARATOR);\n return items[items.length - 1];\n}\n/**\n * Create `ModelJSON` from `ModelArtifacts`.\n *\n * @param artifacts Model artifacts, describing the model and its weights.\n * @param manifest Weight manifest, describing where the weights of the\n * `ModelArtifacts` are stored, and some metadata about them.\n * @returns Object representing the `model.json` file describing the model\n * artifacts and weights\n */\nexport function getModelJSONForModelArtifacts(artifacts, manifest) {\n const result = {\n modelTopology: artifacts.modelTopology,\n format: artifacts.format,\n generatedBy: artifacts.generatedBy,\n convertedBy: artifacts.convertedBy,\n weightsManifest: manifest\n };\n if (artifacts.signature != null) {\n result.signature = artifacts.signature;\n }\n if (artifacts.userDefinedMetadata != null) {\n result.userDefinedMetadata = artifacts.userDefinedMetadata;\n }\n if (artifacts.modelInitializer != null) {\n result.modelInitializer = artifacts.modelInitializer;\n }\n if (artifacts.initializerSignature != null) {\n result.initializerSignature = artifacts.initializerSignature;\n }\n if (artifacts.trainingConfig != null) {\n result.trainingConfig = artifacts.trainingConfig;\n }\n return result;\n}\n/**\n * Create `ModelArtifacts` from a JSON file and weights.\n *\n * @param modelJSON Object containing the parsed JSON of `model.json`\n * @param weightSpecs The list of WeightsManifestEntry for the model. Must be\n * passed if the modelJSON has a weightsManifest.\n * @param weightData An ArrayBuffer or array of ArrayBuffers of weight data for\n * the model corresponding to the weights in weightSpecs. Must be passed if\n * the modelJSON has a weightsManifest.\n * @returns A Promise of the `ModelArtifacts`, as described by the JSON file.\n */\nexport function getModelArtifactsForJSONSync(modelJSON, weightSpecs, weightData) {\n const modelArtifacts = {\n modelTopology: modelJSON.modelTopology,\n format: modelJSON.format,\n generatedBy: modelJSON.generatedBy,\n convertedBy: modelJSON.convertedBy\n };\n if (modelJSON.trainingConfig != null) {\n modelArtifacts.trainingConfig = modelJSON.trainingConfig;\n }\n if (modelJSON.weightsManifest != null) {\n if (!weightSpecs) {\n throw new Error('modelJSON has weightsManifest but weightSpecs is null');\n }\n if (!weightData) {\n throw new Error('modelJSON has weightsManifest but weightData is null');\n }\n modelArtifacts.weightSpecs = weightSpecs;\n modelArtifacts.weightData = weightData;\n }\n if (modelJSON.signature != null) {\n modelArtifacts.signature = modelJSON.signature;\n }\n if (modelJSON.userDefinedMetadata != null) {\n modelArtifacts.userDefinedMetadata = modelJSON.userDefinedMetadata;\n }\n if (modelJSON.modelInitializer != null) {\n modelArtifacts.modelInitializer = modelJSON.modelInitializer;\n }\n if (modelJSON.initializerSignature != null) {\n modelArtifacts.initializerSignature = modelJSON.initializerSignature;\n }\n return modelArtifacts;\n}\n/**\n * Create `ModelArtifacts` from a JSON file.\n *\n * @param modelJSON Object containing the parsed JSON of `model.json`\n * @param loadWeights Function that takes the JSON file's weights manifest,\n * reads weights from the listed path(s), and returns a Promise of the\n * weight manifest entries along with the weights data.\n * @returns A Promise of the `ModelArtifacts`, as described by the JSON file.\n */\nexport async function getModelArtifactsForJSON(modelJSON, loadWeights) {\n let weightSpecs;\n let weightData;\n if (modelJSON.weightsManifest != null) {\n [weightSpecs, weightData] = await loadWeights(modelJSON.weightsManifest);\n }\n return getModelArtifactsForJSONSync(modelJSON, weightSpecs, weightData);\n}\n/**\n * Populate ModelArtifactsInfo fields for a model with JSON topology.\n * @param modelArtifacts\n * @returns A ModelArtifactsInfo object.\n */\nexport function getModelArtifactsInfoForJSON(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('Expected JSON model topology, received ArrayBuffer.');\n }\n return {\n dateSaved: new Date(),\n modelTopologyType: 'JSON',\n modelTopologyBytes: modelArtifacts.modelTopology == null ?\n 0 :\n stringByteLength(JSON.stringify(modelArtifacts.modelTopology)),\n weightSpecsBytes: modelArtifacts.weightSpecs == null ?\n 0 :\n stringByteLength(JSON.stringify(modelArtifacts.weightSpecs)),\n weightDataBytes: modelArtifacts.weightData == null ?\n 0 :\n new CompositeArrayBuffer(modelArtifacts.weightData).byteLength,\n };\n}\n/**\n * Concatenate the weights stored in a WeightsManifestConfig into a list of\n * WeightsManifestEntry\n *\n * @param weightsManifest The WeightsManifestConfig to extract weights from.\n * @returns A list of WeightsManifestEntry of the weights in the weightsManifest\n */\nexport function getWeightSpecs(weightsManifest) {\n const weightSpecs = [];\n for (const entry of weightsManifest) {\n weightSpecs.push(...entry.weights);\n }\n return weightSpecs;\n}\n/**\n * Computes mantisa table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 2048 mantissa lookup values.\n */\nfunction computeFloat16MantisaTable() {\n const convertMantissa = (i) => {\n let m = i << 13;\n let e = 0;\n while ((m & 0x00800000) === 0) {\n e -= 0x00800000;\n m <<= 1;\n }\n m &= ~0x00800000;\n e += 0x38800000;\n return m | e;\n };\n const mantisaTable = new Uint32Array(2048);\n mantisaTable[0] = 0;\n for (let i = 1; i < 1024; i++) {\n mantisaTable[i] = convertMantissa(i);\n }\n for (let i = 1024; i < 2048; i++) {\n mantisaTable[i] = 0x38000000 + ((i - 1024) << 13);\n }\n return mantisaTable;\n}\n/**\n * Computes exponent table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 64 exponent lookup values.\n */\nfunction computeFloat16ExponentTable() {\n const exponentTable = new Uint32Array(64);\n exponentTable[0] = 0;\n exponentTable[31] = 0x47800000;\n exponentTable[32] = 0x80000000;\n exponentTable[63] = 0xc7800000;\n for (let i = 1; i < 31; i++) {\n exponentTable[i] = i << 23;\n }\n for (let i = 33; i < 63; i++) {\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\n }\n return exponentTable;\n}\n/**\n * Computes offset table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 6d offset values.\n */\nfunction computeFloat16OffsetTable() {\n const offsetTable = new Uint32Array(64);\n for (let i = 0; i < 64; i++) {\n offsetTable[i] = 1024;\n }\n offsetTable[0] = offsetTable[32] = 0;\n return offsetTable;\n}\n/**\n * Retrieve a Float16 decoder which will decode a ByteArray of Float16 values\n * to a Float32Array.\n *\n * @returns Function (buffer: Uint16Array) => Float32Array which decodes\n * the Uint16Array of Float16 bytes to a Float32Array.\n */\nexport function getFloat16Decoder() {\n // Algorithm is based off of\n // http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n // Cache lookup tables\n const mantisaTable = computeFloat16MantisaTable();\n const exponentTable = computeFloat16ExponentTable();\n const offsetTable = computeFloat16OffsetTable();\n return (quantizedArray) => {\n const buffer = new ArrayBuffer(4 * quantizedArray.length);\n const bufferUint32View = new Uint32Array(buffer);\n for (let index = 0; index < quantizedArray.length; index++) {\n const float16Bits = quantizedArray[index];\n const float32Bits = mantisaTable[offsetTable[float16Bits >> 10] + (float16Bits & 0x3ff)] +\n exponentTable[float16Bits >> 10];\n bufferUint32View[index] = float32Bits;\n }\n return new Float32Array(buffer);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9fdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL2lvX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3JDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFDLG9CQUFvQixFQUFzSCxNQUFNLFNBQVMsQ0FBQztBQUNsSyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXRDLDhFQUE4RTtBQUM5RSxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUMvQixPQUFxQyxFQUFFLEtBQW1CO0lBRTVELDRDQUE0QztJQUM1QyxNQUFNLEtBQUssR0FBMkIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sWUFBWSxHQUErQixFQUFFLENBQUM7SUFFcEQsTUFBTSxLQUFLLEdBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpCLEtBQUssSUFBSSxDQUFDLEdB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LENBQUMsY0FBMkIsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMxRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsTUFBTSxXQUFXLEdBQ2IsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ3BFLGFBQWEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4uL29wcy9jb21wbGV4JztcbmltcG9ydCB7dGVuc29yfSBmcm9tICcuLi9vcHMvdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3IsIE5hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtUeXBlZEFycmF5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge3NpemVGcm9tU2hhcGV9IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge0RUWVBFX1ZBTFVFX1NJWkVfTUFQLCBNb2RlbEFydGlmYWN0cywgTW9kZWxBcnRpZmFjdHNJbmZvLCBNb2RlbEpTT04sIFdlaWdodERhdGEsIFdlaWdodEdyb3VwLCBXZWlnaHRzTWFuaWZlc3RDb25maWcsIFdlaWdodHNNYW5pZmVzdEVudHJ5fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7YmFja2VuZH0gZnJvbSAnLi4vZ2xvYmFscyc7XG5pbXBvcnQge0RhdGFJZH0gZnJvbSAnLi4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7Z2V0QmFja2VuZH0gZnJvbSAnLi4vZ2xvYmFscyc7XG5cbi8qKiBOdW1iZXIgb2YgYnl0ZXMgcmVzZXJ2ZWQgZm9yIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4gKDMyYml0IGludGVnZXIpLiAqL1xuY29uc3QgTlVNX0JZVEVTX1NUUklOR19MRU5HVEggPSA0O1xuXG4vKipcbiAqIEVuY29kZSBhIG1hcCBmcm9tIG5hbWVzIHRvIHdlaWdodCB2YWx1ZXMgYXMgYW4gQXJyYXlCdWZmZXIsIGFsb25nIHdpdGggYW5cbiAqIGBBcnJheWAgb2YgYFdlaWdodHNNYW5pZmVzdEVudHJ5YCBhcyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBlbmNvZGVkIHdlaWdodHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIHNoYXJkaW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgYGRlY29kZVdlaWdodHNgLlxuICpcbiAqIEBwYXJhbSB0ZW5zb3JzIEEgbWFwIChcImRpY3RcIikgZnJvbSBuYW1lcyB0byB0ZW5zb3JzLlxuICogQHBhcmFtIGdyb3VwIEdyb3VwIHRvIHdoaWNoIHRoZSB3ZWlnaHRzIGJlbG9uZyAob3B0aW9uYWwpLlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgb2ZcbiAqICAgLSBBIGZsYXQgYEFycmF5QnVmZmVyYCB3aXRoIGFsbCB0aGUgYmluYXJ5IHZhbHVlcyBvZiB0aGUgYFRlbnNvcmBzXG4gKiAgICAgY29uY2F0ZW5hdGVkLlxuICogICAtIEFuIGBBcnJheWAgb2YgYFdlaWdodE1hbmlmZXN0RW50cnlgcywgY2FycnlpbmcgaW5mb3JtYXRpb24gaW5jbHVkaW5nXG4gKiAgICAgdGVuc29yIG5hbWVzLCBgZHR5cGVgcyBhbmQgc2hhcGVzLlxuICogQHRocm93cyBFcnJvcjogb24gdW5zdXBwb3J0ZWQgdGVuc29yIGBkdHlwZWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNvZGVXZWlnaHRzKFxuICAgIHRlbnNvcnM6IE5hbWVkVGVuc29yTWFwfE5hbWVkVGVuc29yW10sIGdyb3VwPzogV2VpZ2h0R3JvdXApOlxuICAgIFByb21pc2U8e2RhdGE6IEFycmF5QnVmZmVyLCBzcGVjczogV2VpZ2h0c01hbmlmZXN0RW50cnlbXX0+IHtcbiAgLy8gVE9ETyhhZGFyb2IsIGNhaXMpOiBTdXBwb3J0IHF1YW50aXphdGlvbi5cbiAgY29uc3Qgc3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgY29uc3QgZGF0YVByb21pc2VzOiBBcnJheTxQcm9taXNlPFR5cGVkQXJyYXk+PiA9IFtdO1xuXG4gIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkodGVuc29ycykgP1xuICAgICAgdGVuc29ycy5tYXAodGVuc29yID0+IHRlbnNvci5uYW1lKSA6XG4gICAgICBPYmplY3Qua2V5cyh0ZW5zb3JzKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbmFtZSA9IG5hbWVzW2ldO1xuICAgIGNvbnN0IHQgPSBBcnJheS5pc0FycmF5KHRlbnNvcnMpID8gdGVuc29yc1tpXS50ZW5zb3IgOiB0ZW5zb3JzW25hbWVdO1xuICAgIGlmICh0LmR0eXBlICE9PSAnZmxvYXQzMicgJiYgdC5kdHlwZSAhPT0gJ2ludDMyJyAmJiB0LmR0eXBlICE9PSAnYm9vbCcgJiZcbiAgICAgICAgdC5kdHlwZSAhPT0gJ3N0cmluZycgJiYgdC5kdHlwZSAhPT0gJ2NvbXBsZXg2NCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZHR5cGUgaW4gd2VpZ2h0ICcke25hbWV9JzogJHt0LmR0eXBlfWApO1xuICAgIH1cbiAgICBjb25zdCBzcGVjOiBXZWlnaHRzTWFuaWZlc3RFbnRyeSA9IHtuYW1lLCBzaGFwZTogdC5zaGFwZSwgZHR5cGU6IHQuZHR5cGV9O1xuICAgIGlmICh0LmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdXRmOGJ5dGVzID0gbmV3IFByb21pc2U8VHlwZWRBcnJheT4oYXN5bmMgcmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHMgPSBhd2FpdCB0LmJ5dGVzKCkgYXMgVWludDhBcnJheVtdO1xuICAgICAgICBjb25zdCB0b3RhbE51bUJ5dGVzID0gdmFscy5yZWR1Y2UoKHAsIGMpID0+IHAgKyBjLmxlbmd0aCwgMCkgK1xuICAgICAgICAgICAgTlVNX0JZVEVTX1NUUklOR19MRU5HVEggKiB2YWxzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0b3RhbE51bUJ5dGVzKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHZhbHNbaV07XG4gICAgICAgICAgY29uc3QgYnl0ZXNPZkxlbmd0aCA9XG4gICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShbdmFsLmxlbmd0aF0pLmJ1ZmZlcik7XG4gICAgICAgICAgYnl0ZXMuc2V0KGJ5dGVzT2ZMZW5ndGgsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IE5VTV9CWVRFU19TVFJJTkdfTEVOR1RIO1xuICAgICAgICAgIGJ5dGVzLnNldCh2YWwsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IHZhbC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShieXRlcyk7XG4gICAgICB9KTtcbiAgICAgIGRhdGFQcm9taXNlcy5wdXNoKHV0ZjhieXRlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFQcm9taXNlcy5wdXNoKHQuZGF0YSgpKTtcbiAgICB9XG4gICAgaWYgKGdyb3VwICE9IG51bGwpIHtcbiAgICAgIHNwZWMuZ3JvdXAgPSBncm91cDtcbiAgICB9XG4gICAgc3BlY3MucHVzaChzcGVjKTtcbiAgfVxuXG4gIGNvbnN0IHRlbnNvclZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKGRhdGFQcm9taXNlcyk7XG4gIHJldHVybiB7ZGF0YTogY29uY2F0ZW5hdGVUeXBlZEFycmF5cyh0ZW5zb3JWYWx1ZXMpLCBzcGVjc307XG59XG5cbi8qKlxuICogRGVjb2RlIGZsYXQgQXJyYXlCdWZmZXIgYXMgd2VpZ2h0cy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBzaGFyZGluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZXZlcnNlIG9mIGBlbmNvZGVXZWlnaHRzYC5cbiAqXG4gKiBAcGFyYW0gd2VpZ2h0RGF0YSBBIGZsYXQgQXJyYXlCdWZmZXIgb3IgYW4gYXJyYXkgb2YgQXJyYXlCdWZmZXJzIGNhcnJ5aW5nIHRoZVxuICogICBiaW5hcnkgdmFsdWVzIG9mIHRoZSB0ZW5zb3JzIGNvbmNhdGVuYXRlZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGluXG4gKiAgIGBzcGVjc2AuXG4gKiBAcGFyYW0gc3BlY3MgU3BlY2lmaWNhdGlvbnMgb2YgdGhlIG5hbWVzLCBkdHlwZXMgYW5kIHNoYXBlcyBvZiB0aGUgdGVuc29yc1xuICogICB3aG9zZSB2YWx1ZSBhcmUgZW5jb2RlZCBieSBgYnVmZmVyYC5cbiAqIEByZXR1cm4gQSBtYXAgZnJvbSB0ZW5zb3IgbmFtZSB0byB0ZW5zb3IgdmFsdWUsIHdpdGggdGhlIG5hbWVzIGNvcnJlc3BvbmRpbmdcbiAqICAgdG8gbmFtZXMgaW4gYHNwZWNzYC5cbiAqIEB0aHJvd3MgRXJyb3IsIGlmIGFueSBvZiB0aGUgdGVuc29ycyBoYXMgdW5zdXBwb3J0ZWQgZHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVXZWlnaHRzKFxuICAgIHdlaWdodERhdGE6IFdlaWdodERhdGEsXG4gICAgc3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10pOiBOYW1lZFRlbnNvck1hcCB7XG4gIC8vIFRPRE8oYWRhcm9iLCBjYWlzKTogU3VwcG9ydCBxdWFudGl6YXRpb24uXG4gIGNvbnN0IGNvbXBvc2l0ZUJ1ZmZlciA9IG5ldyBDb21wb3NpdGVBcnJheUJ1ZmZlcih3ZWlnaHREYXRhKTtcbiAgY29uc3Qgb3V0OiBOYW1lZFRlbnNvck1hcCA9IHt9O1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNzKSB7XG4gICAgY29uc3QgYnl0ZUxlbmd0aCA9IGdldFdlaWdodEJ5dGVsZW5ndGgoc3BlYywgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICAgIHJldHVybiBjb21wb3NpdGVCdWZmZXIuc2xpY2Uob2Zmc2V0ICsgc3RhcnQsIG9mZnNldCArIGVuZCk7XG4gICAgfSk7XG4gICAgb3V0W3NwZWMubmFtZV0gPSBkZWNvZGVXZWlnaHQoc3BlYywgY29tcG9zaXRlQnVmZmVyXG4gICAgICAuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBieXRlTGVuZ3RoKSk7XG4gICAgb2Zmc2V0ICs9IGJ5dGVMZW5ndGg7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZ2V0V2VpZ2h0Qnl0ZWxlbmd0aChzcGVjOiBXZWlnaHRzTWFuaWZlc3RFbnRyeSxcbiAgc2xpY2U6IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4gQXJyYXlCdWZmZXIpOiBudW1iZXIge1xuXG4gIGNvbnN0IHNpemUgPSBzaXplRnJvbVNoYXBlKHNwZWMuc2hhcGUpO1xuICBsZXQgYnl0ZXNQZXJWYWx1ZTogbnVtYmVyO1xuICBpZiAoJ3F1YW50aXphdGlvbicgaW4gc3BlYykge1xuICAgIGNvbnN0IHF1YW50aXphdGlvbiA9IHNwZWMucXVhbnRpemF0aW9uO1xuICAgIGJ5dGVzUGVyVmFsdWUgPSBEVFlQRV9WQUxVRV9TSVpFX01BUFtxdWFudGl6YXRpb24uZHR5cGVdO1xuICB9IGVsc2UgaWYgKHNwZWMuZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gQ2FuIG5vdCBzdGF0aWNhbGx5IGRldGVybWluZSBzdHJpbmcgbGVuZ3RoLlxuICAgIGxldCBieXRlTGVuZ3RoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgYnl0ZUxlbmd0aCArPSBOVU1fQllURVNfU1RSSU5HX0xFTkdUSCArIG5ldyBVaW50MzJBcnJheShcbiAgICAgICAgc2xpY2UoYnl0ZUxlbmd0aCwgYnl0ZUxlbmd0aCArIE5VTV9CWVRFU19TVFJJTkdfTEVOR1RIKSlbMF07XG4gICAgfVxuICAgIHJldHVybiBieXRlTGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIGJ5dGVzUGVyVmFsdWUgPSBEVFlQRV9WQUxVRV9TSVpFX01BUFtzcGVjLmR0eXBlXTtcbiAgfVxuXG4gIHJldHVybiBzaXplICogYnl0ZXNQZXJWYWx1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0V2VpZ2h0Qnl0ZWxlbmd0aEFzeW5jKFxuICBzcGVjOiBXZWlnaHRzTWFuaWZlc3RFbnRyeSxcbiAgc2xpY2U6IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4gUHJvbWlzZTxBcnJheUJ1ZmZlcj5cbik6IFByb21pc2U8bnVtYmVyPiB7XG5cbiAgY29uc3Qgc2l6ZSA9IHNpemVGcm9tU2hhcGUoc3BlYy5zaGFwZSk7XG4gIGxldCBieXRlc1BlclZhbHVlOiBudW1iZXI7XG4gIGlmICgncXVhbnRpemF0aW9uJyBpbiBzcGVjKSB7XG4gICAgY29uc3QgcXVhbnRpemF0aW9uID0gc3BlYy5xdWFudGl6YXRpb247XG4gICAgYnl0ZXNQZXJWYWx1ZSA9IERUWVBFX1ZBTFVFX1NJWkVfTUFQW3F1YW50aXphdGlvbi5kdHlwZV07XG4gIH0gZWxzZSBpZiAoc3BlYy5kdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBDYW4gbm90IHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHN0cmluZyBsZW5ndGguXG4gICAgbGV0IGJ5dGVMZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBieXRlTGVuZ3RoICs9IE5VTV9CWVRFU19TVFJJTkdfTEVOR1RIICsgbmV3IFVpbnQzMkFycmF5KFxuICAgICAgICBhd2FpdCBzbGljZShieXRlTGVuZ3RoLCBieXRlTGVuZ3RoICsgTlVNX0JZVEVTX1NUUklOR19MRU5HVEgpKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVMZW5ndGg7XG4gIH0gZWxzZSB7XG4gICAgYnl0ZXNQZXJWYWx1ZSA9IERUWVBFX1ZBTFVFX1NJWkVfTUFQW3NwZWMuZHR5cGVdO1xuICB9XG5cbiAgcmV0dXJuIHNpemUgKiBieXRlc1BlclZhbHVlO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVXZWlnaHQoXG4gIHNwZWM6IFdlaWdodHNNYW5pZmVzdEVudHJ5LFxuICBieXRlQnVmZmVyOiBBcnJheUJ1ZmZlcik6IFRlbnNvciB7XG5cbiAgY29uc3QgbmFtZSA9IHNwZWMubmFtZTtcbiAgY29uc3QgZHR5cGUgPSBzcGVjLmR0eXBlO1xuICBjb25zdCBzaGFwZSA9IHNwZWMuc2hhcGU7XG4gIGNvbnN0IHNpemUgPSBzaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgbGV0IHZhbHVlczogVHlwZWRBcnJheSB8IHN0cmluZ1tdIHwgVWludDhBcnJheVtdO1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAoJ3F1YW50aXphdGlvbicgaW4gc3BlYykge1xuICAgIGNvbnN0IHF1YW50aXphdGlvbiA9IHNwZWMucXVhbnRpemF0aW9uO1xuICAgIGlmIChxdWFudGl6YXRpb24uZHR5cGUgPT09ICd1aW50OCcgfHwgcXVhbnRpemF0aW9uLmR0eXBlID09PSAndWludDE2Jykge1xuICAgICAgaWYgKCEoJ21pbicgaW4gcXVhbnRpemF0aW9uICYmICdzY2FsZScgaW4gcXVhbnRpemF0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgV2VpZ2h0ICR7c3BlYy5uYW1lfSB3aXRoIHF1YW50aXphdGlvbiAke3F1YW50aXphdGlvbi5kdHlwZX0gYCArXG4gICAgICAgICAgICBgZG9lc24ndCBoYXZlIGNvcnJlc3BvbmRpbmcgbWV0YWRhdGEgbWluIGFuZCBzY2FsZS5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHF1YW50aXphdGlvbi5kdHlwZSA9PT0gJ2Zsb2F0MTYnKSB7XG4gICAgICBpZiAoZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgV2VpZ2h0ICR7c3BlYy5uYW1lfSBpcyBxdWFudGl6ZWQgd2l0aCAke3F1YW50aXphdGlvbi5kdHlwZX0gYCArXG4gICAgICAgICAgICBgd2hpY2ggb25seSBzdXBwb3J0cyB3ZWlnaHRzIG9mIHR5cGUgZmxvYXQzMiBub3QgJHtkdHlwZX0uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgV2VpZ2h0ICR7c3BlYy5uYW1lfSBoYXMgdW5rbm93biBgICtcbiAgICAgICAgICBgcXVhbnRpemF0aW9uIGR0eXBlICR7cXVhbnRpemF0aW9uLmR0eXBlfS4gYCArXG4gICAgICAgICAgYFN1cHBvcnRlZCBxdWFudGl6YXRpb24gZHR5cGVzIGFyZTogYCArXG4gICAgICAgICAgYCd1aW50OCcsICd1aW50MTYnLCBhbmQgJ2Zsb2F0MTYnLmApO1xuICAgIH1cbiAgICBjb25zdCBxdWFudGl6YXRpb25TaXplRmFjdG9yID0gRFRZUEVfVkFMVUVfU0laRV9NQVBbcXVhbnRpemF0aW9uLmR0eXBlXTtcbiAgICBjb25zdCBxdWFudGl6ZWRBcnJheSA9IChxdWFudGl6YXRpb24uZHR5cGUgPT09ICd1aW50OCcpID9cbiAgICAgIG5ldyBVaW50OEFycmF5KGJ5dGVCdWZmZXIpIDpcbiAgICAgIG5ldyBVaW50MTZBcnJheShieXRlQnVmZmVyKTtcbiAgICBpZiAoZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgICAgaWYgKHF1YW50aXphdGlvbi5kdHlwZSA9PT0gJ3VpbnQ4JyB8fCBxdWFudGl6YXRpb24uZHR5cGUgPT09ICd1aW50MTYnKSB7XG4gICAgICAgIHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkocXVhbnRpemVkQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWFudGl6ZWRBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHYgPSBxdWFudGl6ZWRBcnJheVtpXTtcbiAgICAgICAgICB2YWx1ZXNbaV0gPSB2ICogcXVhbnRpemF0aW9uLnNjYWxlICsgcXVhbnRpemF0aW9uLm1pbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChxdWFudGl6YXRpb24uZHR5cGUgPT09ICdmbG9hdDE2Jykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGluZWZmaWNpZW50LiBNYWtlIGdldEZsb2F0MTZEZWNvZGVyIGVmZmljaWVudC5cbiAgICAgICAgY29uc3QgZmxvYXQxNkRlY29kZSA9IGdldEZsb2F0MTZEZWNvZGVyKCk7XG4gICAgICAgIHZhbHVlcyA9IGZsb2F0MTZEZWNvZGUocXVhbnRpemVkQXJyYXkgYXMgVWludDE2QXJyYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCBxdWFudGl6YXRpb24gdHlwZSAke3F1YW50aXphdGlvbi5kdHlwZX0gYCArXG4gICAgICAgICAgYGZvciB3ZWlnaHQgdHlwZSBmbG9hdDMyLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICAgIGlmIChxdWFudGl6YXRpb24uZHR5cGUgIT09ICd1aW50OCcgJiYgcXVhbnRpemF0aW9uLmR0eXBlICE9PSAndWludDE2Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIHF1YW50aXphdGlvbiB0eXBlICR7cXVhbnRpemF0aW9uLmR0eXBlfSBgICtcbiAgICAgICAgICBgZm9yIHdlaWdodCB0eXBlIGludDMyLmApO1xuICAgICAgfVxuICAgICAgdmFsdWVzID0gbmV3IEludDMyQXJyYXkocXVhbnRpemVkQXJyYXkubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVhbnRpemVkQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdiA9IHF1YW50aXplZEFycmF5W2ldO1xuICAgICAgICB2YWx1ZXNbaV0gPSBNYXRoLnJvdW5kKHYgKiBxdWFudGl6YXRpb24uc2NhbGUgKyBxdWFudGl6YXRpb24ubWluKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkdHlwZSBpbiB3ZWlnaHQgJyR7bmFtZX0nOiAke2R0eXBlfWApO1xuICAgIH1cbiAgICBvZmZzZXQgKz0gc2l6ZSAqIHF1YW50aXphdGlvblNpemVGYWN0b3I7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3Qgc2l6ZSA9IHNpemVGcm9tU2hhcGUoc3BlYy5zaGFwZSk7XG4gICAgdmFsdWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBuZXcgVWludDMyQXJyYXkoXG4gICAgICAgIGJ5dGVCdWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBOVU1fQllURVNfU1RSSU5HX0xFTkdUSCkpWzBdO1xuICAgICAgb2Zmc2V0ICs9IE5VTV9CWVRFU19TVFJJTkdfTEVOR1RIO1xuICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgYnl0ZUJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVMZW5ndGgpKTtcbiAgICAgICh2YWx1ZXMgYXMgVWludDhBcnJheVtdKS5wdXNoKGJ5dGVzKTtcbiAgICAgIG9mZnNldCArPSBieXRlTGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkdHlwZUZhY3RvciA9IERUWVBFX1ZBTFVFX1NJWkVfTUFQW2R0eXBlXTtcbiAgICBpZiAoZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgICAgdmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheShieXRlQnVmZmVyKTtcbiAgICB9IGVsc2UgaWYgKGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgICB2YWx1ZXMgPSBuZXcgSW50MzJBcnJheShieXRlQnVmZmVyKTtcbiAgICB9IGVsc2UgaWYgKGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAgIHZhbHVlcyA9IG5ldyBVaW50OEFycmF5KGJ5dGVCdWZmZXIpO1xuICAgIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KGJ5dGVCdWZmZXIpO1xuICAgICAgY29uc3QgcmVhbCA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWVzLmxlbmd0aCAvIDIpO1xuICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlcy5sZW5ndGggLyAyKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZWFsW2ldID0gdmFsdWVzW2kgKiAyXTtcbiAgICAgICAgaW1hZ2VbaV0gPSB2YWx1ZXNbaSAqIDIgKyAxXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlYWxUZW5zb3IgPSB0ZW5zb3IocmVhbCwgc2hhcGUsICdmbG9hdDMyJyk7XG4gICAgICBjb25zdCBpbWFnZVRlbnNvciA9IHRlbnNvcihpbWFnZSwgc2hhcGUsICdmbG9hdDMyJyk7XG4gICAgICBjb25zdCBjb21wbGV4VGVuc29yID0gY29tcGxleChyZWFsVGVuc29yLCBpbWFnZVRlbnNvcik7XG4gICAgICByZWFsVGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgIGltYWdlVGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiBjb21wbGV4VGVuc29yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGR0eXBlIGluIHdlaWdodCAnJHtuYW1lfSc6ICR7ZHR5cGV9YCk7XG4gICAgfVxuICAgIG9mZnNldCArPSBzaXplICogZHR5cGVGYWN0b3I7XG4gIH1cbiAgcmV0dXJuIHRlbnNvcih2YWx1ZXMsIHNoYXBlLCBkdHlwZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRUb0xlbmd0aChyZWFkZXI6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcjxBcnJheUJ1ZmZlcj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERhdGE6IEFycmF5QnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICBsZXQgZGF0YSA9IG5ldyBVaW50OEFycmF5KGluaXRpYWxEYXRhKTtcblxuICB3aGlsZSAoZGF0YS5ieXRlTGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKGRvbmUgJiYgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgY29uc3QgbWlzc2luZyAgPSBsZW5ndGggLSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlYWRlciBpcyBkb25lIGJ1dCAke21pc3Npbmd9IGJ5dGVzIGFyZSBzdGlsbCBleHBlY3RlZGApO1xuICAgIH1cblxuICAgIC8vIFRPRE86IERvbid0IGNyZWF0ZSBhIG5ldyBhcnJheSBldmVyeSBsb29wLlxuICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgVWludDhBcnJheShkYXRhLmxlbmd0aCArIHZhbHVlLmJ5dGVMZW5ndGgpO1xuICAgIG5ld0RhdGEuc2V0KGRhdGEsIDApO1xuICAgIG5ld0RhdGEuc2V0KG5ldyBVaW50OEFycmF5KHZhbHVlKSwgZGF0YS5sZW5ndGgpO1xuICAgIGRhdGEgPSBuZXdEYXRhO1xuICB9XG5cbiAgcmV0dXJuIGRhdGEuYnVmZmVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjb2RlV2VpZ2h0c1N0cmVhbShcbiAgd2VpZ2h0U3RyZWFtOiBSZWFkYWJsZVN0cmVhbTxBcnJheUJ1ZmZlcj4sXG4gIHNwZWNzOiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdKTogUHJvbWlzZTxOYW1lZFRlbnNvck1hcD4ge1xuXG4gIGNvbnN0IHRlbnNvcnM6IE5hbWVkVGVuc29yTWFwID0ge307XG4gIGNvbnN0IHJlYWRlciA9IHdlaWdodFN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgbGV0IGRhdGEgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG5cbiAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNzKSB7XG4gICAgY29uc3QgYnl0ZUxlbmd0aCA9IGF3YWl0IGdldFdlaWdodEJ5dGVsZW5ndGhBc3luYyhzcGVjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICAgIGRhdGEgPSBhd2FpdCByZWFkVG9MZW5ndGgocmVhZGVyLCBkYXRhLCBlbmQpO1xuICAgICAgcmV0dXJuIGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfSk7XG4gICAgZGF0YSA9IGF3YWl0IHJlYWRUb0xlbmd0aChyZWFkZXIsIGRhdGEsIGJ5dGVMZW5ndGgpO1xuXG4gICAgLy8gU2xpY2UgdGhlIHRlbnNvciBvdXRcbiAgICBjb25zdCB0ZW5zb3JEYXRhID0gZGF0YS5zbGljZSgwLCBieXRlTGVuZ3RoKTtcbiAgICBkYXRhID0gZGF0YS5zbGljZShieXRlTGVuZ3RoKTtcblxuICAgIGNvbnN0IHdlaWdodFRlbnNvciA9IGRlY29kZVdlaWdodChzcGVjLCB0ZW5zb3JEYXRhKTtcbiAgICB0ZW5zb3JzW3NwZWMubmFtZV0gPSB3ZWlnaHRUZW5zb3I7XG5cbiAgICAvLyBUT0RPKG1hdHRzb3VsYW5pbGxlKTogQmV0dGVyIHdheSB0byBjYWxsIHVwbG9hZFRvR1BVLlxuICAgIC8vIFRPRE8obWF0dHNvdWxhbmlsbGUpOiBNYWtlIHRoaXMgd29yayBmb3Igd2ViZ2wgdG9vLlxuICAgIGlmIChnZXRCYWNrZW5kKCkgPT09ICd3ZWJncHUnKSB7XG4gICAgICBjb25zdCBiID0gYmFja2VuZCgpO1xuXG4gICAgICBpZiAoJ3VwbG9hZFRvR1BVJyBpbiBiICYmXG4gICAgICAgIHNpemVGcm9tU2hhcGUod2VpZ2h0VGVuc29yLnNoYXBlKSA+PSAoZW52KClcbiAgICAgICAgICAuZ2V0KCdXRUJHUFVfQ1BVX0hBTkRPRkZfU0laRV9USFJFU0hPTEQnKSBhcyBudW1iZXIpKSB7XG4gICAgICAgIChiLnVwbG9hZFRvR1BVIGFzIChkYXRhSWQ6IERhdGFJZCkgPT4gdm9pZCkod2VpZ2h0VGVuc29yLmRhdGFJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlbnNvcnM7XG59XG5cbi8qKlxuICogQ29uY2F0ZW5hdGUgVHlwZWRBcnJheXMgaW50byBhbiBBcnJheUJ1ZmZlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdGVuYXRlVHlwZWRBcnJheXMoeHM6IFR5cGVkQXJyYXlbXSk6IEFycmF5QnVmZmVyIHtcbiAgLy8gVE9ETyhhZGFyb2IsIGNhaXMpOiBTdXBwb3J0IHF1YW50aXphdGlvbi5cbiAgaWYgKHhzID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGlucHV0IHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHhzKX1gKTtcbiAgfVxuXG4gIGxldCB0b3RhbEJ5dGVMZW5ndGggPSAwO1xuXG4gIC8vIGBub3JtYWxpemVkWHNgIGlzIGhlcmUgZm9yIHRoaXMgcmVhc29uOiBhIGBUeXBlZEFycmF5YCdzIGBidWZmZXInXG4gIC8vIGNhbiBoYXZlIGEgZGlmZmVyZW50IGJ5dGUgbGVuZ3RoIGZyb20gdGhhdCBvZiB0aGUgYFR5cGVkQXJyYXlgIGl0c2VsZixcbiAgLy8gZm9yIGV4YW1wbGUsIHdoZW4gdGhlIGBUeXBlZEFycmF5YCBpcyBjcmVhdGVkIGZyb20gYW4gb2Zmc2V0IGluIGFuXG4gIC8vIGBBcnJheUJ1ZmZlcmAuIGBub3JtbGlhemVkWHNgIGhvbGRzIGBUeXBlZEFycmF5YHMgd2hvc2UgYGJ1ZmZlcmBzIG1hdGNoXG4gIC8vIHRoZSBgVHlwZWRBcnJheWAgaW4gYnl0ZSBsZW5ndGguIElmIGFuIGVsZW1lbnQgb2YgYHhzYCBkb2VzIG5vdCBzaG93XG4gIC8vIHRoaXMgcHJvcGVydHksIGEgbmV3IGBUeXBlZEFycmF5YCB0aGF0IHNhdGlzZnkgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlXG4gIC8vIGNvbnN0cnVjdGVkIGFuZCBwdXNoZWQgaW50byBgbm9ybWFsaXplZFhzYC5cbiAgY29uc3Qgbm9ybWFsaXplZFhzOiBUeXBlZEFycmF5W10gPSBbXTtcbiAgeHMuZm9yRWFjaCgoeDogVHlwZWRBcnJheSkgPT4ge1xuICAgIHRvdGFsQnl0ZUxlbmd0aCArPSB4LmJ5dGVMZW5ndGg7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tYW55XG4gICAgbm9ybWFsaXplZFhzLnB1c2goXG4gICAgICAgIHguYnl0ZUxlbmd0aCA9PT0geC5idWZmZXIuYnl0ZUxlbmd0aCA/IHggOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgKHguY29uc3RydWN0b3IgYXMgYW55KSh4KSk7XG4gICAgaWYgKCEoeCBhcyBhbnkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHwgeCBhcyBhbnkgaW5zdGFuY2VvZiBJbnQzMkFycmF5IHx8XG4gICAgICAgICAgeCBhcyBhbnkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBUeXBlZEFycmF5IHN1YnR5cGU6ICR7eC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZW5hYmxlOm5vLWFueVxuICB9KTtcblxuICBjb25zdCB5ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxCeXRlTGVuZ3RoKTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIG5vcm1hbGl6ZWRYcy5mb3JFYWNoKCh4OiBUeXBlZEFycmF5KSA9PiB7XG4gICAgeS5zZXQobmV3IFVpbnQ4QXJyYXkoeC5idWZmZXIpLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSB4LmJ5dGVMZW5ndGg7XG4gIH0pO1xuXG4gIHJldHVybiB5LmJ1ZmZlcjtcbn1cblxuLy8gVXNlIEJ1ZmZlciBvbiBOb2RlLmpzIGluc3RlYWQgb2YgQmxvYi9hdG9iL2J0b2FcbmNvbnN0IHVzZU5vZGVCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICh0eXBlb2YgQmxvYiA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGF0b2IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgIHR5cGVvZiBidG9hID09PSAndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBieXRlIGxlbmd0aCBvZiBhIEphdmFTY3JpcHQgc3RyaW5nLlxuICpcbiAqIE5vdGUgdGhhdCBhIEphdmFTY3JpcHQgc3RyaW5nIGNhbiBjb250YWluIHdpZGUgY2hhcmFjdGVycywgdGhlcmVmb3JlIHRoZVxuICogbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaXMgbm90IG5lY2Vzc2FyaWx5IGVxdWFsIHRvIHRoZSBieXRlIGxlbmd0aC5cbiAqXG4gKiBAcGFyYW0gc3RyIElucHV0IHN0cmluZy5cbiAqIEByZXR1cm5zIEJ5dGUgbGVuZ3RoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nQnl0ZUxlbmd0aChzdHI6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmICh1c2VOb2RlQnVmZmVyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKHN0ciwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gbmV3IEJsb2IoW3N0cl0pLnNpemU7XG59XG5cbi8qKlxuICogRW5jb2RlIGFuIEFycmF5QnVmZmVyIGFzIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBidWZmZXIgYEFycmF5QnVmZmVyYCB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJucyBBIHN0cmluZyB0aGF0IGJhc2U2NC1lbmNvZGVzIGBidWZmZXJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0Jhc2U2NFN0cmluZyhidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHVzZU5vZGVCdWZmZXIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYnVmZmVyKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cbiAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgbGV0IHMgPSAnJztcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBidWYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gIH1cbiAgcmV0dXJuIGJ0b2Eocyk7XG59XG5cbi8qKlxuICogRGVjb2RlIGEgYmFzZTY0IHN0cmluZyBhcyBhbiBBcnJheUJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gc3RyIEJhc2U2NCBzdHJpbmcuXG4gKiBAcmV0dXJucyBEZWNvZGVkIGBBcnJheUJ1ZmZlcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRTdHJpbmdUb0FycmF5QnVmZmVyKHN0cjogc3RyaW5nKTogQXJyYXlCdWZmZXIge1xuICBpZiAodXNlTm9kZUJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpO1xuICAgIHJldHVybiBidWYuYnVmZmVyLnNsaWNlKGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZU9mZnNldCArIGJ1Zi5ieXRlTGVuZ3RoKTtcbiAgfVxuICBjb25zdCBzID0gYXRvYihzdHIpO1xuICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7ICsraSkge1xuICAgIGJ1ZmZlci5zZXQoW3MuY2hhckNvZGVBdChpKV0sIGkpO1xuICB9XG4gIHJldHVybiBidWZmZXIuYnVmZmVyO1xufVxuXG4vKipcbiAqIENvbmNhdGVuYXRlIGEgbnVtYmVyIG9mIEFycmF5QnVmZmVycyBpbnRvIG9uZS5cbiAqXG4gKiBAcGFyYW0gYnVmZmVycyBBbiBhcnJheSBvZiBBcnJheUJ1ZmZlcnMgdG8gY29uY2F0ZW5hdGUsIG9yIGEgc2luZ2xlXG4gKiAgICAgQXJyYXlCdWZmZXIuXG4gKiBAcmV0dXJucyBSZXN1bHQgb2YgY29uY2F0ZW5hdGluZyBgYnVmZmVyc2AgaW4gb3JkZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRmLmlvLkNvbXBvc2l0ZUFycmF5QnVmZmVyLmpvaW4oKSBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVBcnJheUJ1ZmZlcnMoYnVmZmVyczogQXJyYXlCdWZmZXJbXVxuICAgICAgfCBBcnJheUJ1ZmZlcik6IEFycmF5QnVmZmVyIHtcbiAgcmV0dXJuIENvbXBvc2l0ZUFycmF5QnVmZmVyLmpvaW4oYnVmZmVycyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBiYXNlbmFtZSBvZiBhIHBhdGguXG4gKlxuICogQmVoYXZlcyBpbiBhIHdheSBhbmFsb2dvdXMgdG8gTGludXgncyBiYXNlbmFtZSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBTRVBBUkFUT1IgPSAnLyc7XG4gIHBhdGggPSBwYXRoLnRyaW0oKTtcbiAgd2hpbGUgKHBhdGguZW5kc1dpdGgoU0VQQVJBVE9SKSkge1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSk7XG4gIH1cbiAgY29uc3QgaXRlbXMgPSBwYXRoLnNwbGl0KFNFUEFSQVRPUik7XG4gIHJldHVybiBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYE1vZGVsSlNPTmAgZnJvbSBgTW9kZWxBcnRpZmFjdHNgLlxuICpcbiAqIEBwYXJhbSBhcnRpZmFjdHMgTW9kZWwgYXJ0aWZhY3RzLCBkZXNjcmliaW5nIHRoZSBtb2RlbCBhbmQgaXRzIHdlaWdodHMuXG4gKiBAcGFyYW0gbWFuaWZlc3QgV2VpZ2h0IG1hbmlmZXN0LCBkZXNjcmliaW5nIHdoZXJlIHRoZSB3ZWlnaHRzIG9mIHRoZVxuICogICAgIGBNb2RlbEFydGlmYWN0c2AgYXJlIHN0b3JlZCwgYW5kIHNvbWUgbWV0YWRhdGEgYWJvdXQgdGhlbS5cbiAqIEByZXR1cm5zIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIGBtb2RlbC5qc29uYCBmaWxlIGRlc2NyaWJpbmcgdGhlIG1vZGVsXG4gKiAgICAgYXJ0aWZhY3RzIGFuZCB3ZWlnaHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbEpTT05Gb3JNb2RlbEFydGlmYWN0cyhcbiAgICBhcnRpZmFjdHM6IE1vZGVsQXJ0aWZhY3RzLCBtYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnKTogTW9kZWxKU09OIHtcbiAgY29uc3QgcmVzdWx0OiBNb2RlbEpTT04gPSB7XG4gICAgbW9kZWxUb3BvbG9neTogYXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3ksXG4gICAgZm9ybWF0OiBhcnRpZmFjdHMuZm9ybWF0LFxuICAgIGdlbmVyYXRlZEJ5OiBhcnRpZmFjdHMuZ2VuZXJhdGVkQnksXG4gICAgY29udmVydGVkQnk6IGFydGlmYWN0cy5jb252ZXJ0ZWRCeSxcbiAgICB3ZWlnaHRzTWFuaWZlc3Q6IG1hbmlmZXN0XG4gIH07XG4gIGlmIChhcnRpZmFjdHMuc2lnbmF0dXJlICE9IG51bGwpIHtcbiAgICByZXN1bHQuc2lnbmF0dXJlID0gYXJ0aWZhY3RzLnNpZ25hdHVyZTtcbiAgfVxuICBpZiAoYXJ0aWZhY3RzLnVzZXJEZWZpbmVkTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgIHJlc3VsdC51c2VyRGVmaW5lZE1ldGFkYXRhID0gYXJ0aWZhY3RzLnVzZXJEZWZpbmVkTWV0YWRhdGE7XG4gIH1cbiAgaWYgKGFydGlmYWN0cy5tb2RlbEluaXRpYWxpemVyICE9IG51bGwpIHtcbiAgICByZXN1bHQubW9kZWxJbml0aWFsaXplciA9IGFydGlmYWN0cy5tb2RlbEluaXRpYWxpemVyO1xuICB9XG4gIGlmIChhcnRpZmFjdHMuaW5pdGlhbGl6ZXJTaWduYXR1cmUgIT0gbnVsbCkge1xuICAgIHJlc3VsdC5pbml0aWFsaXplclNpZ25hdHVyZSA9IGFydGlmYWN0cy5pbml0aWFsaXplclNpZ25hdHVyZTtcbiAgfVxuICBpZiAoYXJ0aWZhY3RzLnRyYWluaW5nQ29uZmlnICE9IG51bGwpIHtcbiAgICByZXN1bHQudHJhaW5pbmdDb25maWcgPSBhcnRpZmFjdHMudHJhaW5pbmdDb25maWc7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYE1vZGVsQXJ0aWZhY3RzYCBmcm9tIGEgSlNPTiBmaWxlIGFuZCB3ZWlnaHRzLlxuICpcbiAqIEBwYXJhbSBtb2RlbEpTT04gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBKU09OIG9mIGBtb2RlbC5qc29uYFxuICogQHBhcmFtIHdlaWdodFNwZWNzIFRoZSBsaXN0IG9mIFdlaWdodHNNYW5pZmVzdEVudHJ5IGZvciB0aGUgbW9kZWwuIE11c3QgYmVcbiAqICAgICBwYXNzZWQgaWYgdGhlIG1vZGVsSlNPTiBoYXMgYSB3ZWlnaHRzTWFuaWZlc3QuXG4gKiBAcGFyYW0gd2VpZ2h0RGF0YSBBbiBBcnJheUJ1ZmZlciBvciBhcnJheSBvZiBBcnJheUJ1ZmZlcnMgb2Ygd2VpZ2h0IGRhdGEgZm9yXG4gKiAgICAgdGhlIG1vZGVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlaWdodHMgaW4gd2VpZ2h0U3BlY3MuIE11c3QgYmUgcGFzc2VkIGlmXG4gKiAgICAgdGhlIG1vZGVsSlNPTiBoYXMgYSB3ZWlnaHRzTWFuaWZlc3QuXG4gKiBAcmV0dXJucyBBIFByb21pc2Ugb2YgdGhlIGBNb2RlbEFydGlmYWN0c2AsIGFzIGRlc2NyaWJlZCBieSB0aGUgSlNPTiBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxBcnRpZmFjdHNGb3JKU09OU3luYyhcbiAgICBtb2RlbEpTT046IE1vZGVsSlNPTiwgd2VpZ2h0U3BlY3M/OiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLFxuICAgIHdlaWdodERhdGE/OiBXZWlnaHREYXRhKTogTW9kZWxBcnRpZmFjdHMge1xuXG4gIGNvbnN0IG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyA9IHtcbiAgICBtb2RlbFRvcG9sb2d5OiBtb2RlbEpTT04ubW9kZWxUb3BvbG9neSxcbiAgICBmb3JtYXQ6IG1vZGVsSlNPTi5mb3JtYXQsXG4gICAgZ2VuZXJhdGVkQnk6IG1vZGVsSlNPTi5nZW5lcmF0ZWRCeSxcbiAgICBjb252ZXJ0ZWRCeTogbW9kZWxKU09OLmNvbnZlcnRlZEJ5XG4gIH07XG5cbiAgaWYgKG1vZGVsSlNPTi50cmFpbmluZ0NvbmZpZyAhPSBudWxsKSB7XG4gICAgbW9kZWxBcnRpZmFjdHMudHJhaW5pbmdDb25maWcgPSBtb2RlbEpTT04udHJhaW5pbmdDb25maWc7XG4gIH1cbiAgaWYgKG1vZGVsSlNPTi53ZWlnaHRzTWFuaWZlc3QgIT0gbnVsbCkge1xuICAgIGlmICghd2VpZ2h0U3BlY3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbW9kZWxKU09OIGhhcyB3ZWlnaHRzTWFuaWZlc3QgYnV0IHdlaWdodFNwZWNzIGlzIG51bGwnKTtcbiAgICB9XG4gICAgaWYgKCF3ZWlnaHREYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21vZGVsSlNPTiBoYXMgd2VpZ2h0c01hbmlmZXN0IGJ1dCB3ZWlnaHREYXRhIGlzIG51bGwnKTtcbiAgICB9XG4gICAgbW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3MgPSB3ZWlnaHRTcGVjcztcbiAgICBtb2RlbEFydGlmYWN0cy53ZWlnaHREYXRhID0gd2VpZ2h0RGF0YTtcbiAgfVxuICBpZiAobW9kZWxKU09OLnNpZ25hdHVyZSAhPSBudWxsKSB7XG4gICAgbW9kZWxBcnRpZmFjdHMuc2lnbmF0dXJlID0gbW9kZWxKU09OLnNpZ25hdHVyZTtcbiAgfVxuICBpZiAobW9kZWxKU09OLnVzZXJEZWZpbmVkTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgIG1vZGVsQXJ0aWZhY3RzLnVzZXJEZWZpbmVkTWV0YWRhdGEgPSBtb2RlbEpTT04udXNlckRlZmluZWRNZXRhZGF0YTtcbiAgfVxuICBpZiAobW9kZWxKU09OLm1vZGVsSW5pdGlhbGl6ZXIgIT0gbnVsbCkge1xuICAgIG1vZGVsQXJ0aWZhY3RzLm1vZGVsSW5pdGlhbGl6ZXIgPSBtb2RlbEpTT04ubW9kZWxJbml0aWFsaXplcjtcbiAgfVxuICBpZiAobW9kZWxKU09OLmluaXRpYWxpemVyU2lnbmF0dXJlICE9IG51bGwpIHtcbiAgICBtb2RlbEFydGlmYWN0cy5pbml0aWFsaXplclNpZ25hdHVyZSA9IG1vZGVsSlNPTi5pbml0aWFsaXplclNpZ25hdHVyZTtcbiAgfVxuXG4gIHJldHVybiBtb2RlbEFydGlmYWN0cztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYE1vZGVsQXJ0aWZhY3RzYCBmcm9tIGEgSlNPTiBmaWxlLlxuICpcbiAqIEBwYXJhbSBtb2RlbEpTT04gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBKU09OIG9mIGBtb2RlbC5qc29uYFxuICogQHBhcmFtIGxvYWRXZWlnaHRzIEZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIEpTT04gZmlsZSdzIHdlaWdodHMgbWFuaWZlc3QsXG4gKiAgICAgcmVhZHMgd2VpZ2h0cyBmcm9tIHRoZSBsaXN0ZWQgcGF0aChzKSwgYW5kIHJldHVybnMgYSBQcm9taXNlIG9mIHRoZVxuICogICAgIHdlaWdodCBtYW5pZmVzdCBlbnRyaWVzIGFsb25nIHdpdGggdGhlIHdlaWdodHMgZGF0YS5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSBvZiB0aGUgYE1vZGVsQXJ0aWZhY3RzYCwgYXMgZGVzY3JpYmVkIGJ5IHRoZSBKU09OIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNb2RlbEFydGlmYWN0c0ZvckpTT04oXG4gICAgbW9kZWxKU09OOiBNb2RlbEpTT04sXG4gICAgbG9hZFdlaWdodHM6ICh3ZWlnaHRzTWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZykgPT4gUHJvbWlzZTxbXG4gICAgICAvKiB3ZWlnaHRTcGVjcyAqLyBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLCBXZWlnaHREYXRhLFxuICAgIF0+KTogUHJvbWlzZTxNb2RlbEFydGlmYWN0cz4ge1xuICBsZXQgd2VpZ2h0U3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10gfCB1bmRlZmluZWQ7XG4gIGxldCB3ZWlnaHREYXRhOiBXZWlnaHREYXRhIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChtb2RlbEpTT04ud2VpZ2h0c01hbmlmZXN0ICE9IG51bGwpIHtcbiAgICBbd2VpZ2h0U3BlY3MsIHdlaWdodERhdGFdID0gYXdhaXQgbG9hZFdlaWdodHMobW9kZWxKU09OLndlaWdodHNNYW5pZmVzdCk7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZWxBcnRpZmFjdHNGb3JKU09OU3luYyhtb2RlbEpTT04sIHdlaWdodFNwZWNzLCB3ZWlnaHREYXRhKTtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSBNb2RlbEFydGlmYWN0c0luZm8gZmllbGRzIGZvciBhIG1vZGVsIHdpdGggSlNPTiB0b3BvbG9neS5cbiAqIEBwYXJhbSBtb2RlbEFydGlmYWN0c1xuICogQHJldHVybnMgQSBNb2RlbEFydGlmYWN0c0luZm8gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxBcnRpZmFjdHNJbmZvRm9ySlNPTihtb2RlbEFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpOlxuICAgIE1vZGVsQXJ0aWZhY3RzSW5mbyB7XG4gIGlmIChtb2RlbEFydGlmYWN0cy5tb2RlbFRvcG9sb2d5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIEpTT04gbW9kZWwgdG9wb2xvZ3ksIHJlY2VpdmVkIEFycmF5QnVmZmVyLicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRlU2F2ZWQ6IG5ldyBEYXRlKCksXG4gICAgbW9kZWxUb3BvbG9neVR5cGU6ICdKU09OJyxcbiAgICBtb2RlbFRvcG9sb2d5Qnl0ZXM6IG1vZGVsQXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3kgPT0gbnVsbCA/XG4gICAgICAgIDAgOlxuICAgICAgICBzdHJpbmdCeXRlTGVuZ3RoKEpTT04uc3RyaW5naWZ5KG1vZGVsQXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3kpKSxcbiAgICB3ZWlnaHRTcGVjc0J5dGVzOiBtb2RlbEFydGlmYWN0cy53ZWlnaHRTcGVjcyA9PSBudWxsID9cbiAgICAgICAgMCA6XG4gICAgICAgIHN0cmluZ0J5dGVMZW5ndGgoSlNPTi5zdHJpbmdpZnkobW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3MpKSxcbiAgICB3ZWlnaHREYXRhQnl0ZXM6IG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEgPT0gbnVsbCA/XG4gICAgICAgIDAgOlxuICAgICAgICBuZXcgQ29tcG9zaXRlQXJyYXlCdWZmZXIobW9kZWxBcnRpZmFjdHMud2VpZ2h0RGF0YSkuYnl0ZUxlbmd0aCxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25jYXRlbmF0ZSB0aGUgd2VpZ2h0cyBzdG9yZWQgaW4gYSBXZWlnaHRzTWFuaWZlc3RDb25maWcgaW50byBhIGxpc3Qgb2ZcbiAqIFdlaWdodHNNYW5pZmVzdEVudHJ5XG4gKlxuICogQHBhcmFtIHdlaWdodHNNYW5pZmVzdCBUaGUgV2VpZ2h0c01hbmlmZXN0Q29uZmlnIHRvIGV4dHJhY3Qgd2VpZ2h0cyBmcm9tLlxuICogQHJldHVybnMgQSBsaXN0IG9mIFdlaWdodHNNYW5pZmVzdEVudHJ5IG9mIHRoZSB3ZWlnaHRzIGluIHRoZSB3ZWlnaHRzTWFuaWZlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlaWdodFNwZWNzKHdlaWdodHNNYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnKTpcbiAgICBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdIHtcbiAgY29uc3Qgd2VpZ2h0U3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiB3ZWlnaHRzTWFuaWZlc3QpIHtcbiAgICB3ZWlnaHRTcGVjcy5wdXNoKC4uLmVudHJ5LndlaWdodHMpO1xuICB9XG4gIHJldHVybiB3ZWlnaHRTcGVjcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBtYW50aXNhIHRhYmxlIGZvciBjYXN0aW5nIEZsb2F0MTYgdG8gRmxvYXQzMlxuICogU2VlIGh0dHA6Ly93d3cuZm94LXRvb2xraXQub3JnL2Z0cC9mYXN0aGFsZmZsb2F0Y29udmVyc2lvbi5wZGZcbiAqXG4gKiBAcmV0dXJucyBVaW50MzJBcnJheSwgMjA0OCBtYW50aXNzYSBsb29rdXAgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBjb21wdXRlRmxvYXQxNk1hbnRpc2FUYWJsZSgpOiBVaW50MzJBcnJheSB7XG4gIGNvbnN0IGNvbnZlcnRNYW50aXNzYSA9IChpOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGxldCBtID0gaSA8PCAxMztcbiAgICBsZXQgZSA9IDA7XG5cbiAgICB3aGlsZSAoKG0gJiAweDAwODAwMDAwKSA9PT0gMCkge1xuICAgICAgZSAtPSAweDAwODAwMDAwO1xuICAgICAgbSA8PD0gMTtcbiAgICB9XG4gICAgbSAmPSB+MHgwMDgwMDAwMDtcbiAgICBlICs9IDB4Mzg4MDAwMDA7XG5cbiAgICByZXR1cm4gbSB8IGU7XG4gIH07XG5cbiAgY29uc3QgbWFudGlzYVRhYmxlID0gbmV3IFVpbnQzMkFycmF5KDIwNDgpO1xuXG4gIG1hbnRpc2FUYWJsZVswXSA9IDA7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgMTAyNDsgaSsrKSB7XG4gICAgbWFudGlzYVRhYmxlW2ldID0gY29udmVydE1hbnRpc3NhKGkpO1xuICB9XG4gIGZvciAobGV0IGkgPSAxMDI0OyBpIDwgMjA0ODsgaSsrKSB7XG4gICAgbWFudGlzYVRhYmxlW2ldID0gMHgzODAwMDAwMCArICgoaSAtIDEwMjQpIDw8IDEzKTtcbiAgfVxuXG4gIHJldHVybiBtYW50aXNhVGFibGU7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgZXhwb25lbnQgdGFibGUgZm9yIGNhc3RpbmcgRmxvYXQxNiB0byBGbG9hdDMyXG4gKiBTZWUgaHR0cDovL3d3dy5mb3gtdG9vbGtpdC5vcmcvZnRwL2Zhc3RoYWxmZmxvYXRjb252ZXJzaW9uLnBkZlxuICpcbiAqIEByZXR1cm5zIFVpbnQzMkFycmF5LCA2NCBleHBvbmVudCBsb29rdXAgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBjb21wdXRlRmxvYXQxNkV4cG9uZW50VGFibGUoKTogVWludDMyQXJyYXkge1xuICBjb25zdCBleHBvbmVudFRhYmxlID0gbmV3IFVpbnQzMkFycmF5KDY0KTtcblxuICBleHBvbmVudFRhYmxlWzBdID0gMDtcbiAgZXhwb25lbnRUYWJsZVszMV0gPSAweDQ3ODAwMDAwO1xuICBleHBvbmVudFRhYmxlWzMyXSA9IDB4ODAwMDAwMDA7XG4gIGV4cG9uZW50VGFibGVbNjNdID0gMHhjNzgwMDAwMDtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCAzMTsgaSsrKSB7XG4gICAgZXhwb25lbnRUYWJsZVtpXSA9IGkgPDwgMjM7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDMzOyBpIDwgNjM7IGkrKykge1xuICAgIGV4cG9uZW50VGFibGVbaV0gPSAweDgwMDAwMDAwICsgKChpIC0gMzIpIDw8IDIzKTtcbiAgfVxuXG4gIHJldHVybiBleHBvbmVudFRhYmxlO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIG9mZnNldCB0YWJsZSBmb3IgY2FzdGluZyBGbG9hdDE2IHRvIEZsb2F0MzJcbiAqIFNlZSBodHRwOi8vd3d3LmZveC10b29sa2l0Lm9yZy9mdHAvZmFzdGhhbGZmbG9hdGNvbnZlcnNpb24ucGRmXG4gKlxuICogQHJldHVybnMgVWludDMyQXJyYXksIDZkIG9mZnNldCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGbG9hdDE2T2Zmc2V0VGFibGUoKTogVWludDMyQXJyYXkge1xuICBjb25zdCBvZmZzZXRUYWJsZSA9IG5ldyBVaW50MzJBcnJheSg2NCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG4gICAgb2Zmc2V0VGFibGVbaV0gPSAxMDI0O1xuICB9XG4gIG9mZnNldFRhYmxlWzBdID0gb2Zmc2V0VGFibGVbMzJdID0gMDtcblxuICByZXR1cm4gb2Zmc2V0VGFibGU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgYSBGbG9hdDE2IGRlY29kZXIgd2hpY2ggd2lsbCBkZWNvZGUgYSBCeXRlQXJyYXkgb2YgRmxvYXQxNiB2YWx1ZXNcbiAqIHRvIGEgRmxvYXQzMkFycmF5LlxuICpcbiAqIEByZXR1cm5zIEZ1bmN0aW9uIChidWZmZXI6IFVpbnQxNkFycmF5KSA9PiBGbG9hdDMyQXJyYXkgd2hpY2ggZGVjb2Rlc1xuICogICAgICAgICAgdGhlIFVpbnQxNkFycmF5IG9mIEZsb2F0MTYgYnl0ZXMgdG8gYSBGbG9hdDMyQXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG9hdDE2RGVjb2RlcigpOiAoYnVmZmVyOiBVaW50MTZBcnJheSkgPT4gRmxvYXQzMkFycmF5IHtcbiAgLy8gQWxnb3JpdGhtIGlzIGJhc2VkIG9mZiBvZlxuICAvLyBodHRwOi8vd3d3LmZveC10b29sa2l0Lm9yZy9mdHAvZmFzdGhhbGZmbG9hdGNvbnZlcnNpb24ucGRmXG5cbiAgLy8gQ2FjaGUgbG9va3VwIHRhYmxlc1xuICBjb25zdCBtYW50aXNhVGFibGUgPSBjb21wdXRlRmxvYXQxNk1hbnRpc2FUYWJsZSgpO1xuICBjb25zdCBleHBvbmVudFRhYmxlID0gY29tcHV0ZUZsb2F0MTZFeHBvbmVudFRhYmxlKCk7XG4gIGNvbnN0IG9mZnNldFRhYmxlID0gY29tcHV0ZUZsb2F0MTZPZmZzZXRUYWJsZSgpO1xuXG4gIHJldHVybiAocXVhbnRpemVkQXJyYXk6IFVpbnQxNkFycmF5KSA9PiB7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDQgKiBxdWFudGl6ZWRBcnJheS5sZW5ndGgpO1xuICAgIGNvbnN0IGJ1ZmZlclVpbnQzMlZpZXcgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcXVhbnRpemVkQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBmbG9hdDE2Qml0cyA9IHF1YW50aXplZEFycmF5W2luZGV4XTtcbiAgICAgIGNvbnN0IGZsb2F0MzJCaXRzID1cbiAgICAgICAgICBtYW50aXNhVGFibGVbb2Zmc2V0VGFibGVbZmxvYXQxNkJpdHMgPj4gMTBdICsgKGZsb2F0MTZCaXRzICYgMHgzZmYpXSArXG4gICAgICAgICAgZXhwb25lbnRUYWJsZVtmbG9hdDE2Qml0cyA+PiAxMF07XG4gICAgICBidWZmZXJVaW50MzJWaWV3W2luZGV4XSA9IGZsb2F0MzJCaXRzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShidWZmZXIpO1xuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class IORouterRegistry {\n constructor() {\n this.saveRouters = [];\n this.loadRouters = [];\n }\n static getInstance() {\n if (IORouterRegistry.instance == null) {\n IORouterRegistry.instance = new IORouterRegistry();\n }\n return IORouterRegistry.instance;\n }\n /**\n * Register a save-handler router.\n *\n * @param saveRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `save` method defined or `null`.\n */\n static registerSaveRouter(saveRouter) {\n IORouterRegistry.getInstance().saveRouters.push(saveRouter);\n }\n /**\n * Register a load-handler router.\n *\n * @param loadRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `load` method defined or `null`.\n */\n static registerLoadRouter(loadRouter) {\n IORouterRegistry.getInstance().loadRouters.push(loadRouter);\n }\n /**\n * Look up IOHandler for saving, given a URL-like string.\n *\n * @param url\n * @returns If only one match is found, an instance of IOHandler with the\n * `save` method defined. If no match is found, `null`.\n * @throws Error, if more than one match is found.\n */\n static getSaveHandlers(url) {\n return IORouterRegistry.getHandlers(url, 'save');\n }\n /**\n * Look up IOHandler for loading, given a URL-like string.\n *\n * @param url\n * @param loadOptions Optional, custom load options.\n * @returns All valid handlers for `url`, given the currently registered\n * handler routers.\n */\n static getLoadHandlers(url, loadOptions) {\n return IORouterRegistry.getHandlers(url, 'load', loadOptions);\n }\n static getHandlers(url, handlerType, loadOptions) {\n const validHandlers = [];\n const routers = handlerType === 'load' ?\n IORouterRegistry.getInstance().loadRouters :\n IORouterRegistry.getInstance().saveRouters;\n routers.forEach(router => {\n const handler = router(url, loadOptions);\n if (handler !== null) {\n validHandlers.push(handler);\n }\n });\n return validHandlers;\n }\n}\nexport const registerSaveRouter = (loudRouter) => IORouterRegistry.registerSaveRouter(loudRouter);\nexport const registerLoadRouter = (loudRouter) => IORouterRegistry.registerLoadRouter(loudRouter);\nexport const getSaveHandlers = (url) => IORouterRegistry.getSaveHandlers(url);\nexport const getLoadHandlers = (url, loadOptions) => IORouterRegistry.getLoadHandlers(url, loadOptions);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX3JlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9pby9yb3V0ZXJfcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjtJQU8zQjtRQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxNQUFNLENBQUMsV0FBVztRQUN4QixJQUFJLGdCQUFnQixDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDckMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztTQUNwRDtRQUNELE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFvQjtRQUM1QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFvQjtRQUM1QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFvQjtRQUN6QyxPQUFPLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQW9CLEVBQUUsV0FBeUI7UUFFcEUsT0FBTyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVcsQ0FDdEIsR0FBb0IsRUFBRSxXQUEwQixFQUNoRCxXQUF5QjtRQUMzQixNQUFNLGFBQWEsR0FBZ0IsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLFdBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNwQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pDLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDcEIsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFvQixFQUFFLEVBQUUsQ0FDdkQsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFvQixFQUFFLEVBQUUsQ0FDdkQsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBb0IsRUFBRSxFQUFFLENBQ3BELGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQ3hCLENBQUMsR0FBb0IsRUFBRSxXQUF5QixFQUFFLEVBQUUsQ0FDaEQsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtJT0hhbmRsZXIsIExvYWRPcHRpb25zfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSU9Sb3V0ZXIgPSAodXJsOiBzdHJpbmd8c3RyaW5nW10sIGxvYWRPcHRpb25zPzogTG9hZE9wdGlvbnMpID0+XG4gICAgSU9IYW5kbGVyO1xuXG5leHBvcnQgY2xhc3MgSU9Sb3V0ZXJSZWdpc3RyeSB7XG4gIC8vIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IElPUm91dGVyUmVnaXN0cnk7XG5cbiAgcHJpdmF0ZSBzYXZlUm91dGVyczogSU9Sb3V0ZXJbXTtcbiAgcHJpdmF0ZSBsb2FkUm91dGVyczogSU9Sb3V0ZXJbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2F2ZVJvdXRlcnMgPSBbXTtcbiAgICB0aGlzLmxvYWRSb3V0ZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBJT1JvdXRlclJlZ2lzdHJ5IHtcbiAgICBpZiAoSU9Sb3V0ZXJSZWdpc3RyeS5pbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICBJT1JvdXRlclJlZ2lzdHJ5Lmluc3RhbmNlID0gbmV3IElPUm91dGVyUmVnaXN0cnkoKTtcbiAgICB9XG4gICAgcmV0dXJuIElPUm91dGVyUmVnaXN0cnkuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBzYXZlLWhhbmRsZXIgcm91dGVyLlxuICAgKlxuICAgKiBAcGFyYW0gc2F2ZVJvdXRlciBBIGZ1bmN0aW9uIHRoYXQgbWFwcyBhIFVSTC1saWtlIHN0cmluZyBvbnRvIGFuIGluc3RhbmNlXG4gICAqIG9mIGBJT0hhbmRsZXJgIHdpdGggdGhlIGBzYXZlYCBtZXRob2QgZGVmaW5lZCBvciBgbnVsbGAuXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXJTYXZlUm91dGVyKHNhdmVSb3V0ZXI6IElPUm91dGVyKSB7XG4gICAgSU9Sb3V0ZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLnNhdmVSb3V0ZXJzLnB1c2goc2F2ZVJvdXRlcik7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBsb2FkLWhhbmRsZXIgcm91dGVyLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFJvdXRlciBBIGZ1bmN0aW9uIHRoYXQgbWFwcyBhIFVSTC1saWtlIHN0cmluZyBvbnRvIGFuIGluc3RhbmNlXG4gICAqIG9mIGBJT0hhbmRsZXJgIHdpdGggdGhlIGBsb2FkYCBtZXRob2QgZGVmaW5lZCBvciBgbnVsbGAuXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXJMb2FkUm91dGVyKGxvYWRSb3V0ZXI6IElPUm91dGVyKSB7XG4gICAgSU9Sb3V0ZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmxvYWRSb3V0ZXJzLnB1c2gobG9hZFJvdXRlcik7XG4gIH1cblxuICAvKipcbiAgICogTG9vayB1cCBJT0hhbmRsZXIgZm9yIHNhdmluZywgZ2l2ZW4gYSBVUkwtbGlrZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHJldHVybnMgSWYgb25seSBvbmUgbWF0Y2ggaXMgZm91bmQsIGFuIGluc3RhbmNlIG9mIElPSGFuZGxlciB3aXRoIHRoZVxuICAgKiBgc2F2ZWAgbWV0aG9kIGRlZmluZWQuIElmIG5vIG1hdGNoIGlzIGZvdW5kLCBgbnVsbGAuXG4gICAqIEB0aHJvd3MgRXJyb3IsIGlmIG1vcmUgdGhhbiBvbmUgbWF0Y2ggaXMgZm91bmQuXG4gICAqL1xuICBzdGF0aWMgZ2V0U2F2ZUhhbmRsZXJzKHVybDogc3RyaW5nfHN0cmluZ1tdKTogSU9IYW5kbGVyW10ge1xuICAgIHJldHVybiBJT1JvdXRlclJlZ2lzdHJ5LmdldEhhbmRsZXJzKHVybCwgJ3NhdmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIElPSGFuZGxlciBmb3IgbG9hZGluZywgZ2l2ZW4gYSBVUkwtbGlrZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIGxvYWRPcHRpb25zIE9wdGlvbmFsLCBjdXN0b20gbG9hZCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBbGwgdmFsaWQgaGFuZGxlcnMgZm9yIGB1cmxgLCBnaXZlbiB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWRcbiAgICogICBoYW5kbGVyIHJvdXRlcnMuXG4gICAqL1xuICBzdGF0aWMgZ2V0TG9hZEhhbmRsZXJzKHVybDogc3RyaW5nfHN0cmluZ1tdLCBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKTpcbiAgICAgIElPSGFuZGxlcltdIHtcbiAgICByZXR1cm4gSU9Sb3V0ZXJSZWdpc3RyeS5nZXRIYW5kbGVycyh1cmwsICdsb2FkJywgbG9hZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SGFuZGxlcnMoXG4gICAgICB1cmw6IHN0cmluZ3xzdHJpbmdbXSwgaGFuZGxlclR5cGU6ICdzYXZlJ3wnbG9hZCcsXG4gICAgICBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKTogSU9IYW5kbGVyW10ge1xuICAgIGNvbnN0IHZhbGlkSGFuZGxlcnM6IElPSGFuZGxlcltdID0gW107XG4gICAgY29uc3Qgcm91dGVycyA9IGhhbmRsZXJUeXBlID09PSAnbG9hZCcgP1xuICAgICAgICBJT1JvdXRlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkubG9hZFJvdXRlcnMgOlxuICAgICAgICBJT1JvdXRlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuc2F2ZVJvdXRlcnM7XG4gICAgcm91dGVycy5mb3JFYWNoKHJvdXRlciA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gcm91dGVyKHVybCwgbG9hZE9wdGlvbnMpO1xuICAgICAgaWYgKGhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFsaWRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2YWxpZEhhbmRsZXJzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlclNhdmVSb3V0ZXIgPSAobG91ZFJvdXRlcjogSU9Sb3V0ZXIpID0+XG4gICAgSU9Sb3V0ZXJSZWdpc3RyeS5yZWdpc3RlclNhdmVSb3V0ZXIobG91ZFJvdXRlcik7XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJMb2FkUm91dGVyID0gKGxvdWRSb3V0ZXI6IElPUm91dGVyKSA9PlxuICAgIElPUm91dGVyUmVnaXN0cnkucmVnaXN0ZXJMb2FkUm91dGVyKGxvdWRSb3V0ZXIpO1xuZXhwb3J0IGNvbnN0IGdldFNhdmVIYW5kbGVycyA9ICh1cmw6IHN0cmluZ3xzdHJpbmdbXSkgPT5cbiAgICBJT1JvdXRlclJlZ2lzdHJ5LmdldFNhdmVIYW5kbGVycyh1cmwpO1xuZXhwb3J0IGNvbnN0IGdldExvYWRIYW5kbGVycyA9XG4gICAgKHVybDogc3RyaW5nfHN0cmluZ1tdLCBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKSA9PlxuICAgICAgICBJT1JvdXRlclJlZ2lzdHJ5LmdldExvYWRIYW5kbGVycyh1cmwsIGxvYWRPcHRpb25zKTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { getModelArtifactsInfoForJSON } from './io_utils';\nimport { IORouterRegistry } from './router_registry';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nconst DATABASE_NAME = 'tensorflowjs';\nconst DATABASE_VERSION = 1;\n// Model data and ModelArtifactsInfo (metadata) are stored in two separate\n// stores for efficient access of the list of stored models and their metadata.\n// 1. The object store for model data: topology, weights and weight manifests.\nconst MODEL_STORE_NAME = 'models_store';\n// 2. The object store for ModelArtifactsInfo, including meta-information such\n// as the type of topology (JSON vs binary), byte size of the topology, byte\n// size of the weights, etc.\nconst INFO_STORE_NAME = 'model_info_store';\n/**\n * Delete the entire database for tensorflow.js, including the models store.\n */\nexport async function deleteDatabase() {\n const idbFactory = getIndexedDBFactory();\n return new Promise((resolve, reject) => {\n const deleteRequest = idbFactory.deleteDatabase(DATABASE_NAME);\n deleteRequest.onsuccess = () => resolve();\n deleteRequest.onerror = error => reject(error);\n });\n}\nfunction getIndexedDBFactory() {\n if (!env().getBool('IS_BROWSER')) {\n // TODO(cais): Add more info about what IOHandler subtypes are available.\n // Maybe point to a doc page on the web and/or automatically determine\n // the available IOHandlers and print them in the error message.\n throw new Error('Failed to obtain IndexedDB factory because the current environment' +\n 'is not a web browser.');\n }\n // tslint:disable-next-line:no-any\n const theWindow = typeof window === 'undefined' ? self : window;\n const factory = theWindow.indexedDB || theWindow.mozIndexedDB ||\n theWindow.webkitIndexedDB || theWindow.msIndexedDB ||\n theWindow.shimIndexedDB;\n if (factory == null) {\n throw new Error('The current browser does not appear to support IndexedDB.');\n }\n return factory;\n}\nfunction setUpDatabase(openRequest) {\n const db = openRequest.result;\n db.createObjectStore(MODEL_STORE_NAME, { keyPath: 'modelPath' });\n db.createObjectStore(INFO_STORE_NAME, { keyPath: 'modelPath' });\n}\n/**\n * IOHandler subclass: Browser IndexedDB.\n *\n * See the doc string of `browserIndexedDB` for more details.\n */\nclass BrowserIndexedDB {\n constructor(modelPath) {\n this.indexedDB = getIndexedDBFactory();\n if (modelPath == null || !modelPath) {\n throw new Error('For IndexedDB, modelPath must not be null, undefined or empty.');\n }\n this.modelPath = modelPath;\n }\n async save(modelArtifacts) {\n // TODO(cais): Support saving GraphDef models.\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserLocalStorage.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n return this.databaseAction(this.modelPath, modelArtifacts);\n }\n async load() {\n return this.databaseAction(this.modelPath);\n }\n /**\n * Perform database action to put model artifacts into or read model artifacts\n * from IndexedDB object store.\n *\n * Whether the action is put or get depends on whether `modelArtifacts` is\n * specified. If it is specified, the action will be put; otherwise the action\n * will be get.\n *\n * @param modelPath A unique string path for the model.\n * @param modelArtifacts If specified, it will be the model artifacts to be\n * stored in IndexedDB.\n * @returns A `Promise` of `SaveResult`, if the action is put, or a `Promise`\n * of `ModelArtifacts`, if the action is get.\n */\n databaseAction(modelPath, modelArtifacts) {\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n if (modelArtifacts == null) {\n // Read model out from object store.\n const modelTx = db.transaction(MODEL_STORE_NAME, 'readonly');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n const getRequest = modelStore.get(this.modelPath);\n getRequest.onsuccess = () => {\n if (getRequest.result == null) {\n db.close();\n return reject(new Error(`Cannot find model with path '${this.modelPath}' ` +\n `in IndexedDB.`));\n }\n else {\n resolve(getRequest.result.modelArtifacts);\n }\n };\n getRequest.onerror = error => {\n db.close();\n return reject(getRequest.error);\n };\n modelTx.oncomplete = () => db.close();\n }\n else {\n // Put model into object store.\n // Concatenate all the model weights into a single ArrayBuffer. Large\n // models (~1GB) have problems saving if they are not concatenated.\n // TODO(mattSoulanille): Save large models to multiple indexeddb\n // records.\n modelArtifacts.weightData = CompositeArrayBuffer.join(modelArtifacts.weightData);\n const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts);\n // First, put ModelArtifactsInfo into info store.\n const infoTx = db.transaction(INFO_STORE_NAME, 'readwrite');\n let infoStore = infoTx.objectStore(INFO_STORE_NAME);\n let putInfoRequest;\n try {\n putInfoRequest =\n infoStore.put({ modelPath: this.modelPath, modelArtifactsInfo });\n }\n catch (error) {\n return reject(error);\n }\n let modelTx;\n putInfoRequest.onsuccess = () => {\n // Second, put model data into model store.\n modelTx = db.transaction(MODEL_STORE_NAME, 'readwrite');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n let putModelRequest;\n try {\n putModelRequest = modelStore.put({\n modelPath: this.modelPath,\n modelArtifacts,\n modelArtifactsInfo\n });\n }\n catch (error) {\n // Sometimes, the serialized value is too large to store.\n return reject(error);\n }\n putModelRequest.onsuccess = () => resolve({ modelArtifactsInfo });\n putModelRequest.onerror = error => {\n // If the put-model request fails, roll back the info entry as\n // well.\n infoStore = infoTx.objectStore(INFO_STORE_NAME);\n const deleteInfoRequest = infoStore.delete(this.modelPath);\n deleteInfoRequest.onsuccess = () => {\n db.close();\n return reject(putModelRequest.error);\n };\n deleteInfoRequest.onerror = error => {\n db.close();\n return reject(putModelRequest.error);\n };\n };\n };\n putInfoRequest.onerror = error => {\n db.close();\n return reject(putInfoRequest.error);\n };\n infoTx.oncomplete = () => {\n if (modelTx == null) {\n db.close();\n }\n else {\n modelTx.oncomplete = () => db.close();\n }\n };\n }\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n}\nBrowserIndexedDB.URL_SCHEME = 'indexeddb://';\nexport { BrowserIndexedDB };\nexport const indexedDBRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserIndexedDB.URL_SCHEME)) {\n return browserIndexedDB(url.slice(BrowserIndexedDB.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(indexedDBRouter);\nIORouterRegistry.registerLoadRouter(indexedDBRouter);\n/**\n * Creates a browser IndexedDB IOHandler for saving and loading models.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(\n * tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'}));\n *\n * const saveResult = await model.save('indexeddb://MyModel'));\n * console.log(saveResult);\n * ```\n *\n * @param modelPath A unique identifier for the model to be saved. Must be a\n * non-empty string.\n * @returns An instance of `BrowserIndexedDB` (sublcass of `IOHandler`),\n * which can be used with, e.g., `tf.Model.save`.\n */\nexport function browserIndexedDB(modelPath) {\n return new BrowserIndexedDB(modelPath);\n}\nfunction maybeStripScheme(key) {\n return key.startsWith(BrowserIndexedDB.URL_SCHEME) ?\n key.slice(BrowserIndexedDB.URL_SCHEME.length) :\n key;\n}\nexport class BrowserIndexedDBManager {\n constructor() {\n this.indexedDB = getIndexedDBFactory();\n }\n async listModels() {\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n const tx = db.transaction(INFO_STORE_NAME, 'readonly');\n const store = tx.objectStore(INFO_STORE_NAME);\n // tslint:disable:max-line-length\n // Need to cast `store` as `any` here because TypeScript's DOM\n // library does not have the `getAll()` method even though the\n // method is supported in the latest version of most mainstream\n // browsers:\n // https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAll\n // tslint:enable:max-line-length\n // tslint:disable-next-line:no-any\n const getAllInfoRequest = store.getAll();\n getAllInfoRequest.onsuccess = () => {\n const out = {};\n for (const item of getAllInfoRequest.result) {\n out[item.modelPath] = item.modelArtifactsInfo;\n }\n resolve(out);\n };\n getAllInfoRequest.onerror = error => {\n db.close();\n return reject(getAllInfoRequest.error);\n };\n tx.oncomplete = () => db.close();\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n async removeModel(path) {\n path = maybeStripScheme(path);\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n const infoTx = db.transaction(INFO_STORE_NAME, 'readwrite');\n const infoStore = infoTx.objectStore(INFO_STORE_NAME);\n const getInfoRequest = infoStore.get(path);\n let modelTx;\n getInfoRequest.onsuccess = () => {\n if (getInfoRequest.result == null) {\n db.close();\n return reject(new Error(`Cannot find model with path '${path}' ` +\n `in IndexedDB.`));\n }\n else {\n // First, delete the entry in the info store.\n const deleteInfoRequest = infoStore.delete(path);\n const deleteModelData = () => {\n // Second, delete the entry in the model store.\n modelTx = db.transaction(MODEL_STORE_NAME, 'readwrite');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n const deleteModelRequest = modelStore.delete(path);\n deleteModelRequest.onsuccess = () => resolve(getInfoRequest.result.modelArtifactsInfo);\n deleteModelRequest.onerror = error => reject(getInfoRequest.error);\n };\n // Proceed with deleting model data regardless of whether deletion\n // of info data succeeds or not.\n deleteInfoRequest.onsuccess = deleteModelData;\n deleteInfoRequest.onerror = error => {\n deleteModelData();\n db.close();\n return reject(getInfoRequest.error);\n };\n }\n };\n getInfoRequest.onerror = error => {\n db.close();\n return reject(getInfoRequest.error);\n };\n infoTx.oncomplete = () => {\n if (modelTx == null) {\n db.close();\n }\n else {\n modelTx.oncomplete = () => db.close();\n }\n };\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZF9kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vaW5kZXhlZF9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3hELE9BQU8sRUFBVyxnQkFBZ0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTdELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQztBQUNyQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUUzQiwwRUFBMEU7QUFDMUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztBQUN4Qyw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLCtCQUErQjtBQUMvQixNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYztJQUNsQyxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBRXpDLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDM0MsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRCxhQUFhLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFD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SSxJQUFJLEVBQUU7d0JBQ25CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDWjt5QkFBTTt3QkFDTCxPQUFPLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDdkM7Z0JBQ0gsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDO1lBQ0YsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCAnLi4vZmxhZ3MnO1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQge2dldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT059IGZyb20gJy4vaW9fdXRpbHMnO1xuaW1wb3J0IHtJT1JvdXRlciwgSU9Sb3V0ZXJSZWdpc3RyeX0gZnJvbSAnLi9yb3V0ZXJfcmVnaXN0cnknO1xuaW1wb3J0IHtJT0hhbmRsZXIsIE1vZGVsQXJ0aWZhY3RzLCBNb2RlbEFydGlmYWN0c0luZm8sIE1vZGVsU3RvcmVNYW5hZ2VyLCBTYXZlUmVzdWx0fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5cbmNvbnN0IERBVEFCQVNFX05BTUUgPSAndGVuc29yZmxvd2pzJztcbmNvbnN0IERBVEFCQVNFX1ZFUlNJT04gPSAxO1xuXG4vLyBNb2RlbCBkYXRhIGFuZCBNb2RlbEFydGlmYWN0c0luZm8gKG1ldGFkYXRhKSBhcmUgc3RvcmVkIGluIHR3byBzZXBhcmF0ZVxuLy8gc3RvcmVzIGZvciBlZmZpY2llbnQgYWNjZXNzIG9mIHRoZSBsaXN0IG9mIHN0b3JlZCBtb2RlbHMgYW5kIHRoZWlyIG1ldGFkYXRhLlxuLy8gMS4gVGhlIG9iamVjdCBzdG9yZSBmb3IgbW9kZWwgZGF0YTogdG9wb2xvZ3ksIHdlaWdodHMgYW5kIHdlaWdodCBtYW5pZmVzdHMuXG5jb25zdCBNT0RFTF9TVE9SRV9OQU1FID0gJ21vZGVsc19zdG9yZSc7XG4vLyAyLiBUaGUgb2JqZWN0IHN0b3JlIGZvciBNb2RlbEFydGlmYWN0c0luZm8sIGluY2x1ZGluZyBtZXRhLWluZm9ybWF0aW9uIHN1Y2hcbi8vICAgIGFzIHRoZSB0eXBlIG9mIHRvcG9sb2d5IChKU09OIHZzIGJpbmFyeSksIGJ5dGUgc2l6ZSBvZiB0aGUgdG9wb2xvZ3ksIGJ5dGVcbi8vICAgIHNpemUgb2YgdGhlIHdlaWdodHMsIGV0Yy5cbmNvbnN0IElORk9fU1RPUkVfTkFNRSA9ICdtb2RlbF9pbmZvX3N0b3JlJztcblxuLyoqXG4gKiBEZWxldGUgdGhlIGVudGlyZSBkYXRhYmFzZSBmb3IgdGVuc29yZmxvdy5qcywgaW5jbHVkaW5nIHRoZSBtb2RlbHMgc3RvcmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVEYXRhYmFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaWRiRmFjdG9yeSA9IGdldEluZGV4ZWREQkZhY3RvcnkoKTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGRlbGV0ZVJlcXVlc3QgPSBpZGJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlKERBVEFCQVNFX05BTUUpO1xuICAgIGRlbGV0ZVJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIGRlbGV0ZVJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRleGVkREJGYWN0b3J5KCk6IElEQkZhY3Rvcnkge1xuICBpZiAoIWVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSkge1xuICAgIC8vIFRPRE8oY2Fpcyk6IEFkZCBtb3JlIGluZm8gYWJvdXQgd2hhdCBJT0hhbmRsZXIgc3VidHlwZXMgYXJlIGF2YWlsYWJsZS5cbiAgICAvLyAgIE1heWJlIHBvaW50IHRvIGEgZG9jIHBhZ2Ugb24gdGhlIHdlYiBhbmQvb3IgYXV0b21hdGljYWxseSBkZXRlcm1pbmVcbiAgICAvLyAgIHRoZSBhdmFpbGFibGUgSU9IYW5kbGVycyBhbmQgcHJpbnQgdGhlbSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdGYWlsZWQgdG8gb2J0YWluIEluZGV4ZWREQiBmYWN0b3J5IGJlY2F1c2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQnICtcbiAgICAgICAgJ2lzIG5vdCBhIHdlYiBicm93c2VyLicpO1xuICB9XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgY29uc3QgdGhlV2luZG93OiBhbnkgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB3aW5kb3c7XG4gIGNvbnN0IGZhY3RvcnkgPSB0aGVXaW5kb3cuaW5kZXhlZERCIHx8IHRoZVdpbmRvdy5tb3pJbmRleGVkREIgfHxcbiAgICAgIHRoZVdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgdGhlV2luZG93Lm1zSW5kZXhlZERCIHx8XG4gICAgICB0aGVXaW5kb3cuc2hpbUluZGV4ZWREQjtcbiAgaWYgKGZhY3RvcnkgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSBjdXJyZW50IGJyb3dzZXIgZG9lcyBub3QgYXBwZWFyIHRvIHN1cHBvcnQgSW5kZXhlZERCLicpO1xuICB9XG4gIHJldHVybiBmYWN0b3J5O1xufVxuXG5mdW5jdGlvbiBzZXRVcERhdGFiYXNlKG9wZW5SZXF1ZXN0OiBJREJSZXF1ZXN0KSB7XG4gIGNvbnN0IGRiID0gb3BlblJlcXVlc3QucmVzdWx0IGFzIElEQkRhdGFiYXNlO1xuICBkYi5jcmVhdGVPYmplY3RTdG9yZShNT0RFTF9TVE9SRV9OQU1FLCB7a2V5UGF0aDogJ21vZGVsUGF0aCd9KTtcbiAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoSU5GT19TVE9SRV9OQU1FLCB7a2V5UGF0aDogJ21vZGVsUGF0aCd9KTtcbn1cblxuLyoqXG4gKiBJT0hhbmRsZXIgc3ViY2xhc3M6IEJyb3dzZXIgSW5kZXhlZERCLlxuICpcbiAqIFNlZSB0aGUgZG9jIHN0cmluZyBvZiBgYnJvd3NlckluZGV4ZWREQmAgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJyb3dzZXJJbmRleGVkREIgaW1wbGVtZW50cyBJT0hhbmRsZXIge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5kZXhlZERCOiBJREJGYWN0b3J5O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZWxQYXRoOiBzdHJpbmc7XG5cbiAgc3RhdGljIHJlYWRvbmx5IFVSTF9TQ0hFTUUgPSAnaW5kZXhlZGRiOi8vJztcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuaW5kZXhlZERCID0gZ2V0SW5kZXhlZERCRmFjdG9yeSgpO1xuXG4gICAgaWYgKG1vZGVsUGF0aCA9PSBudWxsIHx8ICFtb2RlbFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRm9yIEluZGV4ZWREQiwgbW9kZWxQYXRoIG11c3Qgbm90IGJlIG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eS4nKTtcbiAgICB9XG4gICAgdGhpcy5tb2RlbFBhdGggPSBtb2RlbFBhdGg7XG4gIH1cblxuICBhc3luYyBzYXZlKG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyk6IFByb21pc2U8U2F2ZVJlc3VsdD4ge1xuICAgIC8vIFRPRE8oY2Fpcyk6IFN1cHBvcnQgc2F2aW5nIEdyYXBoRGVmIG1vZGVscy5cbiAgICBpZiAobW9kZWxBcnRpZmFjdHMubW9kZWxUb3BvbG9neSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Jyb3dzZXJMb2NhbFN0b3JhZ2Uuc2F2ZSgpIGRvZXMgbm90IHN1cHBvcnQgc2F2aW5nIG1vZGVsIHRvcG9sb2d5ICcgK1xuICAgICAgICAgICdpbiBiaW5hcnkgZm9ybWF0cyB5ZXQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VBY3Rpb24odGhpcy5tb2RlbFBhdGgsIG1vZGVsQXJ0aWZhY3RzKSBhc1xuICAgICAgICBQcm9taXNlPFNhdmVSZXN1bHQ+O1xuICB9XG5cbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VBY3Rpb24odGhpcy5tb2RlbFBhdGgpIGFzIFByb21pc2U8TW9kZWxBcnRpZmFjdHM+O1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gZGF0YWJhc2UgYWN0aW9uIHRvIHB1dCBtb2RlbCBhcnRpZmFjdHMgaW50byBvciByZWFkIG1vZGVsIGFydGlmYWN0c1xuICAgKiBmcm9tIEluZGV4ZWREQiBvYmplY3Qgc3RvcmUuXG4gICAqXG4gICAqIFdoZXRoZXIgdGhlIGFjdGlvbiBpcyBwdXQgb3IgZ2V0IGRlcGVuZHMgb24gd2hldGhlciBgbW9kZWxBcnRpZmFjdHNgIGlzXG4gICAqIHNwZWNpZmllZC4gSWYgaXQgaXMgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIHdpbGwgYmUgcHV0OyBvdGhlcndpc2UgdGhlIGFjdGlvblxuICAgKiB3aWxsIGJlIGdldC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGVsUGF0aCBBIHVuaXF1ZSBzdHJpbmcgcGF0aCBmb3IgdGhlIG1vZGVsLlxuICAgKiBAcGFyYW0gbW9kZWxBcnRpZmFjdHMgSWYgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIHRoZSBtb2RlbCBhcnRpZmFjdHMgdG8gYmVcbiAgICogICBzdG9yZWQgaW4gSW5kZXhlZERCLlxuICAgKiBAcmV0dXJucyBBIGBQcm9taXNlYCBvZiBgU2F2ZVJlc3VsdGAsIGlmIHRoZSBhY3Rpb24gaXMgcHV0LCBvciBhIGBQcm9taXNlYFxuICAgKiAgIG9mIGBNb2RlbEFydGlmYWN0c2AsIGlmIHRoZSBhY3Rpb24gaXMgZ2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBkYXRhYmFzZUFjdGlvbihtb2RlbFBhdGg6IHN0cmluZywgbW9kZWxBcnRpZmFjdHM/OiBNb2RlbEFydGlmYWN0cyk6XG4gICAgICBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzfFNhdmVSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TW9kZWxBcnRpZmFjdHN8U2F2ZVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgb3BlblJlcXVlc3QgPSB0aGlzLmluZGV4ZWREQi5vcGVuKERBVEFCQVNFX05BTUUsIERBVEFCQVNFX1ZFUlNJT04pO1xuICAgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKCkgPT4gc2V0VXBEYXRhYmFzZShvcGVuUmVxdWVzdCk7XG5cbiAgICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZGIgPSBvcGVuUmVxdWVzdC5yZXN1bHQ7XG5cbiAgICAgICAgaWYgKG1vZGVsQXJ0aWZhY3RzID09IG51bGwpIHtcbiAgICAgICAgICAvLyBSZWFkIG1vZGVsIG91dCBmcm9tIG9iamVjdCBzdG9yZS5cbiAgICAgICAgICBjb25zdCBtb2RlbFR4ID0gZGIudHJhbnNhY3Rpb24oTU9ERUxfU1RPUkVfTkFNRSwgJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgY29uc3QgbW9kZWxTdG9yZSA9IG1vZGVsVHgub2JqZWN0U3RvcmUoTU9ERUxfU1RPUkVfTkFNRSk7XG4gICAgICAgICAgY29uc3QgZ2V0UmVxdWVzdCA9IG1vZGVsU3RvcmUuZ2V0KHRoaXMubW9kZWxQYXRoKTtcbiAgICAgICAgICBnZXRSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChnZXRSZXF1ZXN0LnJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgYENhbm5vdCBmaW5kIG1vZGVsIHdpdGggcGF0aCAnJHt0aGlzLm1vZGVsUGF0aH0nIGAgK1xuICAgICAgICAgICAgICAgICAgYGluIEluZGV4ZWREQi5gKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKGdldFJlcXVlc3QucmVzdWx0Lm1vZGVsQXJ0aWZhY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGdldFJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGdldFJlcXVlc3QuZXJyb3IpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgbW9kZWxUeC5vbmNvbXBsZXRlID0gKCkgPT4gZGIuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQdXQgbW9kZWwgaW50byBvYmplY3Qgc3RvcmUuXG5cbiAgICAgICAgICAvLyBDb25jYXRlbmF0ZSBhbGwgdGhlIG1vZGVsIHdlaWdodHMgaW50byBhIHNpbmdsZSBBcnJheUJ1ZmZlci4gTGFyZ2VcbiAgICAgICAgICAvLyBtb2RlbHMgKH4xR0IpIGhhdmUgcHJvYmxlbXMgc2F2aW5nIGlmIHRoZXkgYXJlIG5vdCBjb25jYXRlbmF0ZWQuXG4gICAgICAgICAgLy8gVE9ETyhtYXR0U291bGFuaWxsZSk6IFNhdmUgbGFyZ2UgbW9kZWxzIHRvIG11bHRpcGxlIGluZGV4ZWRkYlxuICAgICAgICAgIC8vIHJlY29yZHMuXG4gICAgICAgICAgbW9kZWxBcnRpZmFjdHMud2VpZ2h0RGF0YSA9IENvbXBvc2l0ZUFycmF5QnVmZmVyLmpvaW4oXG4gICAgICAgICAgICAgIG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEpO1xuICAgICAgICAgIGNvbnN0IG1vZGVsQXJ0aWZhY3RzSW5mbzogTW9kZWxBcnRpZmFjdHNJbmZvID1cbiAgICAgICAgICAgICAgZ2V0TW9kZWxBcnRpZmFjdHNJbmZvRm9ySlNPTihtb2RlbEFydGlmYWN0cyk7XG4gICAgICAgICAgLy8gRmlyc3QsIHB1dCBNb2RlbEFydGlmYWN0c0luZm8gaW50byBpbmZvIHN0b3JlLlxuICAgICAgICAgIGNvbnN0IGluZm9UeCA9IGRiLnRyYW5zYWN0aW9uKElORk9fU1RPUkVfTkFNRSwgJ3JlYWR3cml0ZScpO1xuICAgICAgICAgIGxldCBpbmZvU3RvcmUgPSBpbmZvVHgub2JqZWN0U3RvcmUoSU5GT19TVE9SRV9OQU1FKTtcbiAgICAgICAgICBsZXQgcHV0SW5mb1JlcXVlc3Q6IElEQlJlcXVlc3Q8SURCVmFsaWRLZXk+O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwdXRJbmZvUmVxdWVzdCA9XG4gICAgICAgICAgICAgIGluZm9TdG9yZS5wdXQoe21vZGVsUGF0aDogdGhpcy5tb2RlbFBhdGgsIG1vZGVsQXJ0aWZhY3RzSW5mb30pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IG1vZGVsVHg6IElEQlRyYW5zYWN0aW9uO1xuICAgICAgICAgIHB1dEluZm9SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFNlY29uZCwgcHV0IG1vZGVsIGRhdGEgaW50byBtb2RlbCBzdG9yZS5cbiAgICAgICAgICAgIG1vZGVsVHggPSBkYi50cmFuc2FjdGlvbihNT0RFTF9TVE9SRV9OQU1FLCAncmVhZHdyaXRlJyk7XG4gICAgICAgICAgICBjb25zdCBtb2RlbFN0b3JlID0gbW9kZWxUeC5vYmplY3RTdG9yZShNT0RFTF9TVE9SRV9OQU1FKTtcbiAgICAgICAgICAgIGxldCBwdXRNb2RlbFJlcXVlc3Q6IElEQlJlcXVlc3Q8SURCVmFsaWRLZXk+O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcHV0TW9kZWxSZXF1ZXN0ID0gbW9kZWxTdG9yZS5wdXQoe1xuICAgICAgICAgICAgICAgIG1vZGVsUGF0aDogdGhpcy5tb2RlbFBhdGgsXG4gICAgICAgICAgICAgICAgbW9kZWxBcnRpZmFjdHMsXG4gICAgICAgICAgICAgICAgbW9kZWxBcnRpZmFjdHNJbmZvXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gU29tZXRpbWVzLCB0aGUgc2VyaWFsaXplZCB2YWx1ZSBpcyB0b28gbGFyZ2UgdG8gc3RvcmUuXG4gICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHV0TW9kZWxSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoe21vZGVsQXJ0aWZhY3RzSW5mb30pO1xuICAgICAgICAgICAgcHV0TW9kZWxSZXF1ZXN0Lm9uZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZSBwdXQtbW9kZWwgcmVxdWVzdCBmYWlscywgcm9sbCBiYWNrIHRoZSBpbmZvIGVudHJ5IGFzXG4gICAgICAgICAgICAgIC8vIHdlbGwuXG4gICAgICAgICAgICAgIGluZm9TdG9yZSA9IGluZm9UeC5vYmplY3RTdG9yZShJTkZPX1NUT1JFX05BTUUpO1xuICAgICAgICAgICAgICBjb25zdCBkZWxldGVJbmZvUmVxdWVzdCA9IGluZm9TdG9yZS5kZWxldGUodGhpcy5tb2RlbFBhdGgpO1xuICAgICAgICAgICAgICBkZWxldGVJbmZvUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHB1dE1vZGVsUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGRlbGV0ZUluZm9SZXF1ZXN0Lm9uZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHB1dE1vZGVsUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgICAgcHV0SW5mb1JlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHB1dEluZm9SZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGluZm9UeC5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG1vZGVsVHggPT0gbnVsbCkge1xuICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbW9kZWxUeC5vbmNvbXBsZXRlID0gKCkgPT4gZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgb3BlblJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHJlamVjdChvcGVuUmVxdWVzdC5lcnJvcik7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGluZGV4ZWREQlJvdXRlcjogSU9Sb3V0ZXIgPSAodXJsOiBzdHJpbmd8c3RyaW5nW10pID0+IHtcbiAgaWYgKCFlbnYoKS5nZXRCb29sKCdJU19CUk9XU0VSJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJsKSAmJiB1cmwuc3RhcnRzV2l0aChCcm93c2VySW5kZXhlZERCLlVSTF9TQ0hFTUUpKSB7XG4gICAgICByZXR1cm4gYnJvd3NlckluZGV4ZWREQih1cmwuc2xpY2UoQnJvd3NlckluZGV4ZWREQi5VUkxfU0NIRU1FLmxlbmd0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn07XG5JT1JvdXRlclJlZ2lzdHJ5LnJlZ2lzdGVyU2F2ZVJvdXRlcihpbmRleGVkREJSb3V0ZXIpO1xuSU9Sb3V0ZXJSZWdpc3RyeS5yZWdpc3RlckxvYWRSb3V0ZXIoaW5kZXhlZERCUm91dGVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYnJvd3NlciBJbmRleGVkREIgSU9IYW5kbGVyIGZvciBzYXZpbmcgYW5kIGxvYWRpbmcgbW9kZWxzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtb2RlbCA9IHRmLnNlcXVlbnRpYWwoKTtcbiAqIG1vZGVsLmFkZChcbiAqICAgICB0Zi5sYXllcnMuZGVuc2Uoe3VuaXRzOiAxLCBpbnB1dFNoYXBlOiBbMTAwXSwgYWN0aXZhdGlvbjogJ3NpZ21vaWQnfSkpO1xuICpcbiAqIGNvbnN0IHNhdmVSZXN1bHQgPSBhd2FpdCBtb2RlbC5zYXZlKCdpbmRleGVkZGI6Ly9NeU1vZGVsJykpO1xuICogY29uc29sZS5sb2coc2F2ZVJlc3VsdCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbW9kZWxQYXRoIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBtb2RlbCB0byBiZSBzYXZlZC4gTXVzdCBiZSBhXG4gKiAgIG5vbi1lbXB0eSBzdHJpbmcuXG4gKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiBgQnJvd3NlckluZGV4ZWREQmAgKHN1YmxjYXNzIG9mIGBJT0hhbmRsZXJgKSxcbiAqICAgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCwgZS5nLiwgYHRmLk1vZGVsLnNhdmVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJvd3NlckluZGV4ZWREQihtb2RlbFBhdGg6IHN0cmluZyk6IElPSGFuZGxlciB7XG4gIHJldHVybiBuZXcgQnJvd3NlckluZGV4ZWREQihtb2RlbFBhdGgpO1xufVxuXG5mdW5jdGlvbiBtYXliZVN0cmlwU2NoZW1lKGtleTogc3RyaW5nKSB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChCcm93c2VySW5kZXhlZERCLlVSTF9TQ0hFTUUpID9cbiAgICAgIGtleS5zbGljZShCcm93c2VySW5kZXhlZERCLlVSTF9TQ0hFTUUubGVuZ3RoKSA6XG4gICAgICBrZXk7XG59XG5cbmV4cG9ydCBjbGFzcyBCcm93c2VySW5kZXhlZERCTWFuYWdlciBpbXBsZW1lbnRzIE1vZGVsU3RvcmVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBpbmRleGVkREI6IElEQkZhY3Rvcnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbmRleGVkREIgPSBnZXRJbmRleGVkREJGYWN0b3J5KCk7XG4gIH1cblxuICBhc3luYyBsaXN0TW9kZWxzKCk6IFByb21pc2U8e1twYXRoOiBzdHJpbmddOiBNb2RlbEFydGlmYWN0c0luZm99PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHtbcGF0aDogc3RyaW5nXTogTW9kZWxBcnRpZmFjdHNJbmZvfT4oXG4gICAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBvcGVuUmVxdWVzdCA9XG4gICAgICAgICAgICAgIHRoaXMuaW5kZXhlZERCLm9wZW4oREFUQUJBU0VfTkFNRSwgREFUQUJBU0VfVkVSU0lPTik7XG4gICAgICAgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKCkgPT4gc2V0VXBEYXRhYmFzZShvcGVuUmVxdWVzdCk7XG5cbiAgICAgICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYiA9IG9wZW5SZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oSU5GT19TVE9SRV9OQU1FLCAncmVhZG9ubHknKTtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUoSU5GT19TVE9SRV9OQU1FKTtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgLy8gTmVlZCB0byBjYXN0IGBzdG9yZWAgYXMgYGFueWAgaGVyZSBiZWNhdXNlIFR5cGVTY3JpcHQncyBET01cbiAgICAgICAgICAgIC8vIGxpYnJhcnkgZG9lcyBub3QgaGF2ZSB0aGUgYGdldEFsbCgpYCBtZXRob2QgZXZlbiB0aG91Z2ggdGhlXG4gICAgICAgICAgICAvLyBtZXRob2QgaXMgc3VwcG9ydGVkIGluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBtb3N0IG1haW5zdHJlYW1cbiAgICAgICAgICAgIC8vIGJyb3dzZXJzOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0lEQk9iamVjdFN0b3JlL2dldEFsbFxuICAgICAgICAgICAgLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgIGNvbnN0IGdldEFsbEluZm9SZXF1ZXN0ID0gKHN0b3JlIGFzIGFueSkuZ2V0QWxsKCkgYXMgSURCUmVxdWVzdDtcbiAgICAgICAgICAgIGdldEFsbEluZm9SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb3V0OiB7W3BhdGg6IHN0cmluZ106IE1vZGVsQXJ0aWZhY3RzSW5mb30gPSB7fTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdldEFsbEluZm9SZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIG91dFtpdGVtLm1vZGVsUGF0aF0gPSBpdGVtLm1vZGVsQXJ0aWZhY3RzSW5mbztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKG91dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2V0QWxsSW5mb1JlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChnZXRBbGxJbmZvUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdHgub25jb21wbGV0ZSA9ICgpID0+IGRiLmNsb3NlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBvcGVuUmVxdWVzdC5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KG9wZW5SZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVNb2RlbChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz4ge1xuICAgIHBhdGggPSBtYXliZVN0cmlwU2NoZW1lKHBhdGgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxNb2RlbEFydGlmYWN0c0luZm8+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9wZW5SZXF1ZXN0ID0gdGhpcy5pbmRleGVkREIub3BlbihEQVRBQkFTRV9OQU1FLCBEQVRBQkFTRV9WRVJTSU9OKTtcbiAgICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHNldFVwRGF0YWJhc2Uob3BlblJlcXVlc3QpO1xuXG4gICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRiID0gb3BlblJlcXVlc3QucmVzdWx0O1xuICAgICAgICBjb25zdCBpbmZvVHggPSBkYi50cmFuc2FjdGlvbihJTkZPX1NUT1JFX05BTUUsICdyZWFkd3JpdGUnKTtcbiAgICAgICAgY29uc3QgaW5mb1N0b3JlID0gaW5mb1R4Lm9iamVjdFN0b3JlKElORk9fU1RPUkVfTkFNRSk7XG5cbiAgICAgICAgY29uc3QgZ2V0SW5mb1JlcXVlc3QgPSBpbmZvU3RvcmUuZ2V0KHBhdGgpO1xuICAgICAgICBsZXQgbW9kZWxUeDogSURCVHJhbnNhY3Rpb247XG4gICAgICAgIGdldEluZm9SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoZ2V0SW5mb1JlcXVlc3QucmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ2Fubm90IGZpbmQgbW9kZWwgd2l0aCBwYXRoICcke3BhdGh9JyBgICtcbiAgICAgICAgICAgICAgICBgaW4gSW5kZXhlZERCLmApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmlyc3QsIGRlbGV0ZSB0aGUgZW50cnkgaW4gdGhlIGluZm8gc3RvcmUuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVJbmZvUmVxdWVzdCA9IGluZm9TdG9yZS5kZWxldGUocGF0aCk7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVNb2RlbERhdGEgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIFNlY29uZCwgZGVsZXRlIHRoZSBlbnRyeSBpbiB0aGUgbW9kZWwgc3RvcmUuXG4gICAgICAgICAgICAgIG1vZGVsVHggPSBkYi50cmFuc2FjdGlvbihNT0RFTF9TVE9SRV9OQU1FLCAncmVhZHdyaXRlJyk7XG4gICAgICAgICAgICAgIGNvbnN0IG1vZGVsU3RvcmUgPSBtb2RlbFR4Lm9iamVjdFN0b3JlKE1PREVMX1NUT1JFX05BTUUpO1xuICAgICAgICAgICAgICBjb25zdCBkZWxldGVNb2RlbFJlcXVlc3QgPSBtb2RlbFN0b3JlLmRlbGV0ZShwYXRoKTtcbiAgICAgICAgICAgICAgZGVsZXRlTW9kZWxSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGdldEluZm9SZXF1ZXN0LnJlc3VsdC5tb2RlbEFydGlmYWN0c0luZm8pO1xuICAgICAgICAgICAgICBkZWxldGVNb2RlbFJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+XG4gICAgICAgICAgICAgICAgICByZWplY3QoZ2V0SW5mb1JlcXVlc3QuZXJyb3IpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFByb2NlZWQgd2l0aCBkZWxldGluZyBtb2RlbCBkYXRhIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBkZWxldGlvblxuICAgICAgICAgICAgLy8gb2YgaW5mbyBkYXRhIHN1Y2NlZWRzIG9yIG5vdC5cbiAgICAgICAgICAgIGRlbGV0ZUluZm9SZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZU1vZGVsRGF0YTtcbiAgICAgICAgICAgIGRlbGV0ZUluZm9SZXF1ZXN0Lm9uZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGRlbGV0ZU1vZGVsRGF0YSgpO1xuICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGdldEluZm9SZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBnZXRJbmZvUmVxdWVzdC5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChnZXRJbmZvUmVxdWVzdC5lcnJvcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW5mb1R4Lm9uY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKG1vZGVsVHggPT0gbnVsbCkge1xuICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZWxUeC5vbmNvbXBsZXRlID0gKCkgPT4gZGIuY2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgb3BlblJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHJlamVjdChvcGVuUmVxdWVzdC5lcnJvcik7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { assert } from '../util';\nimport { arrayBufferToBase64String, base64StringToArrayBuffer, getModelArtifactsInfoForJSON } from './io_utils';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nimport { IORouterRegistry } from './router_registry';\nconst PATH_SEPARATOR = '/';\nconst PATH_PREFIX = 'tensorflowjs_models';\nconst INFO_SUFFIX = 'info';\nconst MODEL_TOPOLOGY_SUFFIX = 'model_topology';\nconst WEIGHT_SPECS_SUFFIX = 'weight_specs';\nconst WEIGHT_DATA_SUFFIX = 'weight_data';\nconst MODEL_METADATA_SUFFIX = 'model_metadata';\n/**\n * Purge all tensorflow.js-saved model artifacts from local storage.\n *\n * @returns Paths of the models purged.\n */\nexport function purgeLocalStorageArtifacts() {\n if (!env().getBool('IS_BROWSER') || typeof window === 'undefined' ||\n typeof window.localStorage === 'undefined') {\n throw new Error('purgeLocalStorageModels() cannot proceed because local storage is ' +\n 'unavailable in the current environment.');\n }\n const LS = window.localStorage;\n const purgedModelPaths = [];\n for (let i = 0; i < LS.length; ++i) {\n const key = LS.key(i);\n const prefix = PATH_PREFIX + PATH_SEPARATOR;\n if (key.startsWith(prefix) && key.length > prefix.length) {\n LS.removeItem(key);\n const modelName = getModelPathFromKey(key);\n if (purgedModelPaths.indexOf(modelName) === -1) {\n purgedModelPaths.push(modelName);\n }\n }\n }\n return purgedModelPaths;\n}\nfunction getModelKeys(path) {\n return {\n info: [PATH_PREFIX, path, INFO_SUFFIX].join(PATH_SEPARATOR),\n topology: [PATH_PREFIX, path, MODEL_TOPOLOGY_SUFFIX].join(PATH_SEPARATOR),\n weightSpecs: [PATH_PREFIX, path, WEIGHT_SPECS_SUFFIX].join(PATH_SEPARATOR),\n weightData: [PATH_PREFIX, path, WEIGHT_DATA_SUFFIX].join(PATH_SEPARATOR),\n modelMetadata: [PATH_PREFIX, path, MODEL_METADATA_SUFFIX].join(PATH_SEPARATOR)\n };\n}\nfunction removeItems(keys) {\n for (const key of Object.values(keys)) {\n window.localStorage.removeItem(key);\n }\n}\n/**\n * Get model path from a local-storage key.\n *\n * E.g., 'tensorflowjs_models/my/model/1/info' --> 'my/model/1'\n *\n * @param key\n */\nfunction getModelPathFromKey(key) {\n const items = key.split(PATH_SEPARATOR);\n if (items.length < 3) {\n throw new Error(`Invalid key format: ${key}`);\n }\n return items.slice(1, items.length - 1).join(PATH_SEPARATOR);\n}\nfunction maybeStripScheme(key) {\n return key.startsWith(BrowserLocalStorage.URL_SCHEME) ?\n key.slice(BrowserLocalStorage.URL_SCHEME.length) :\n key;\n}\n/**\n * IOHandler subclass: Browser Local Storage.\n *\n * See the doc string to `browserLocalStorage` for more details.\n */\nclass BrowserLocalStorage {\n constructor(modelPath) {\n if (!env().getBool('IS_BROWSER') || typeof window === 'undefined' ||\n typeof window.localStorage === 'undefined') {\n // TODO(cais): Add more info about what IOHandler subtypes are\n // available.\n // Maybe point to a doc page on the web and/or automatically determine\n // the available IOHandlers and print them in the error message.\n throw new Error('The current environment does not support local storage.');\n }\n this.LS = window.localStorage;\n if (modelPath == null || !modelPath) {\n throw new Error('For local storage, modelPath must not be null, undefined or empty.');\n }\n this.modelPath = modelPath;\n this.keys = getModelKeys(this.modelPath);\n }\n /**\n * Save model artifacts to browser local storage.\n *\n * See the documentation to `browserLocalStorage` for details on the saved\n * artifacts.\n *\n * @param modelArtifacts The model artifacts to be stored.\n * @returns An instance of SaveResult.\n */\n async save(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserLocalStorage.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n else {\n const topology = JSON.stringify(modelArtifacts.modelTopology);\n const weightSpecs = JSON.stringify(modelArtifacts.weightSpecs);\n const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts);\n // TODO(mattsoulanille): Support saving models over 2GB that exceed\n // Chrome's ArrayBuffer size limit.\n const weightBuffer = CompositeArrayBuffer.join(modelArtifacts.weightData);\n try {\n this.LS.setItem(this.keys.info, JSON.stringify(modelArtifactsInfo));\n this.LS.setItem(this.keys.topology, topology);\n this.LS.setItem(this.keys.weightSpecs, weightSpecs);\n this.LS.setItem(this.keys.weightData, arrayBufferToBase64String(weightBuffer));\n // Note that JSON.stringify doesn't write out keys that have undefined\n // values, so for some keys, we set undefined instead of a null-ish\n // value.\n const metadata = {\n format: modelArtifacts.format,\n generatedBy: modelArtifacts.generatedBy,\n convertedBy: modelArtifacts.convertedBy,\n signature: modelArtifacts.signature != null ?\n modelArtifacts.signature :\n undefined,\n userDefinedMetadata: modelArtifacts.userDefinedMetadata != null ?\n modelArtifacts.userDefinedMetadata :\n undefined,\n modelInitializer: modelArtifacts.modelInitializer != null ?\n modelArtifacts.modelInitializer :\n undefined,\n initializerSignature: modelArtifacts.initializerSignature != null ?\n modelArtifacts.initializerSignature :\n undefined,\n trainingConfig: modelArtifacts.trainingConfig != null ?\n modelArtifacts.trainingConfig :\n undefined\n };\n this.LS.setItem(this.keys.modelMetadata, JSON.stringify(metadata));\n return { modelArtifactsInfo };\n }\n catch (err) {\n // If saving failed, clean up all items saved so far.\n removeItems(this.keys);\n throw new Error(`Failed to save model '${this.modelPath}' to local storage: ` +\n `size quota being exceeded is a possible cause of this failure: ` +\n `modelTopologyBytes=${modelArtifactsInfo.modelTopologyBytes}, ` +\n `weightSpecsBytes=${modelArtifactsInfo.weightSpecsBytes}, ` +\n `weightDataBytes=${modelArtifactsInfo.weightDataBytes}.`);\n }\n }\n }\n /**\n * Load a model from local storage.\n *\n * See the documentation to `browserLocalStorage` for details on the saved\n * artifacts.\n *\n * @returns The loaded model (if loading succeeds).\n */\n async load() {\n const info = JSON.parse(this.LS.getItem(this.keys.info));\n if (info == null) {\n throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);\n }\n if (info.modelTopologyType !== 'JSON') {\n throw new Error('BrowserLocalStorage does not support loading non-JSON model ' +\n 'topology yet.');\n }\n const out = {};\n // Load topology.\n const topology = JSON.parse(this.LS.getItem(this.keys.topology));\n if (topology == null) {\n throw new Error(`In local storage, the topology of model '${this.modelPath}' ` +\n `is missing.`);\n }\n out.modelTopology = topology;\n // Load weight specs.\n const weightSpecs = JSON.parse(this.LS.getItem(this.keys.weightSpecs));\n if (weightSpecs == null) {\n throw new Error(`In local storage, the weight specs of model '${this.modelPath}' ` +\n `are missing.`);\n }\n out.weightSpecs = weightSpecs;\n // Load meta-data fields.\n const metadataString = this.LS.getItem(this.keys.modelMetadata);\n if (metadataString != null) {\n const metadata = JSON.parse(metadataString);\n out.format = metadata.format;\n out.generatedBy = metadata.generatedBy;\n out.convertedBy = metadata.convertedBy;\n if (metadata.signature != null) {\n out.signature = metadata.signature;\n }\n if (metadata.userDefinedMetadata != null) {\n out.userDefinedMetadata = metadata.userDefinedMetadata;\n }\n if (metadata.modelInitializer != null) {\n out.modelInitializer = metadata.modelInitializer;\n }\n if (metadata.initializerSignature != null) {\n out.initializerSignature = metadata.initializerSignature;\n }\n if (metadata.trainingConfig != null) {\n out.trainingConfig = metadata.trainingConfig;\n }\n }\n // Load weight data.\n const weightDataBase64 = this.LS.getItem(this.keys.weightData);\n if (weightDataBase64 == null) {\n throw new Error(`In local storage, the binary weight values of model ` +\n `'${this.modelPath}' are missing.`);\n }\n out.weightData = base64StringToArrayBuffer(weightDataBase64);\n return out;\n }\n}\nBrowserLocalStorage.URL_SCHEME = 'localstorage://';\nexport { BrowserLocalStorage };\nexport const localStorageRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserLocalStorage.URL_SCHEME)) {\n return browserLocalStorage(url.slice(BrowserLocalStorage.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(localStorageRouter);\nIORouterRegistry.registerLoadRouter(localStorageRouter);\n/**\n * Factory function for local storage IOHandler.\n *\n * This `IOHandler` supports both `save` and `load`.\n *\n * For each model's saved artifacts, four items are saved to local storage.\n * - `${PATH_SEPARATOR}/${modelPath}/info`: Contains meta-info about the\n * model, such as date saved, type of the topology, size in bytes, etc.\n * - `${PATH_SEPARATOR}/${modelPath}/topology`: Model topology. For Keras-\n * style models, this is a stringized JSON.\n * - `${PATH_SEPARATOR}/${modelPath}/weight_specs`: Weight specs of the\n * model, can be used to decode the saved binary weight values (see\n * item below).\n * - `${PATH_SEPARATOR}/${modelPath}/weight_data`: Concatenated binary\n * weight values, stored as a base64-encoded string.\n *\n * Saving may throw an `Error` if the total size of the artifacts exceed the\n * browser-specific quota.\n *\n * @param modelPath A unique identifier for the model to be saved. Must be a\n * non-empty string.\n * @returns An instance of `IOHandler`, which can be used with, e.g.,\n * `tf.Model.save`.\n */\nexport function browserLocalStorage(modelPath) {\n return new BrowserLocalStorage(modelPath);\n}\nexport class BrowserLocalStorageManager {\n constructor() {\n assert(env().getBool('IS_BROWSER'), () => 'Current environment is not a web browser');\n assert(typeof window === 'undefined' ||\n typeof window.localStorage !== 'undefined', () => 'Current browser does not appear to support localStorage');\n this.LS = window.localStorage;\n }\n async listModels() {\n const out = {};\n const prefix = PATH_PREFIX + PATH_SEPARATOR;\n const suffix = PATH_SEPARATOR + INFO_SUFFIX;\n for (let i = 0; i < this.LS.length; ++i) {\n const key = this.LS.key(i);\n if (key.startsWith(prefix) && key.endsWith(suffix)) {\n const modelPath = getModelPathFromKey(key);\n out[modelPath] = JSON.parse(this.LS.getItem(key));\n }\n }\n return out;\n }\n async removeModel(path) {\n path = maybeStripScheme(path);\n const keys = getModelKeys(path);\n if (this.LS.getItem(keys.info) == null) {\n throw new Error(`Cannot find model at path '${path}'`);\n }\n const info = JSON.parse(this.LS.getItem(keys.info));\n removeItems(keys);\n return info;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxfc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vbG9jYWxfc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDOUcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFXLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHN0QsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMzQixNQUFNLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO0FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDO0FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDO0FBQ3pDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7QUFFL0M7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQzdELE9BQU8sTUFBTSxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FDWCxvRUFBb0U7WUFDcEUseUNBQXlDLENBQUMsQ0FBQztLQUNoRDtJQUNELE1BQU0sRUFBRSxHQUFHLE1BQU0s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QUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBdUIsQ0FBQzthQUN6RTtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFZO1FBQzVCLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLElBQUksR0FBRyxDQUFDLENBQUM7U0FDeEQ7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBdUIsQ0FBQztRQUMxRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCAnLi4vZmxhZ3MnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4uL2Vudmlyb25tZW50JztcblxuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHthcnJheUJ1ZmZlclRvQmFzZTY0U3RyaW5nLCBiYXNlNjRTdHJpbmdUb0FycmF5QnVmZmVyLCBnZXRNb2RlbEFydGlmYWN0c0luZm9Gb3JKU09OfSBmcm9tICcuL2lvX3V0aWxzJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5pbXBvcnQge0lPUm91dGVyLCBJT1JvdXRlclJlZ2lzdHJ5fSBmcm9tICcuL3JvdXRlcl9yZWdpc3RyeSc7XG5pbXBvcnQge0lPSGFuZGxlciwgTW9kZWxBcnRpZmFjdHMsIE1vZGVsQXJ0aWZhY3RzSW5mbywgTW9kZWxKU09OLCBNb2RlbFN0b3JlTWFuYWdlciwgU2F2ZVJlc3VsdH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IFBBVEhfU0VQQVJBVE9SID0gJy8nO1xuY29uc3QgUEFUSF9QUkVGSVggPSAndGVuc29yZmxvd2pzX21vZGVscyc7XG5jb25zdCBJTkZPX1NVRkZJWCA9ICdpbmZvJztcbmNvbnN0IE1PREVMX1RPUE9MT0dZX1NVRkZJWCA9ICdtb2RlbF90b3BvbG9neSc7XG5jb25zdCBXRUlHSFRfU1BFQ1NfU1VGRklYID0gJ3dlaWdodF9zcGVjcyc7XG5jb25zdCBXRUlHSFRfREFUQV9TVUZGSVggPSAnd2VpZ2h0X2RhdGEnO1xuY29uc3QgTU9ERUxfTUVUQURBVEFfU1VGRklYID0gJ21vZGVsX21ldGFkYXRhJztcblxuLyoqXG4gKiBQdXJnZSBhbGwgdGVuc29yZmxvdy5qcy1zYXZlZCBtb2RlbCBhcnRpZmFjdHMgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICpcbiAqIEByZXR1cm5zIFBhdGhzIG9mIHRoZSBtb2RlbHMgcHVyZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVyZ2VMb2NhbFN0b3JhZ2VBcnRpZmFjdHMoKTogc3RyaW5nW10ge1xuICBpZiAoIWVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSB8fCB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAncHVyZ2VMb2NhbFN0b3JhZ2VNb2RlbHMoKSBjYW5ub3QgcHJvY2VlZCBiZWNhdXNlIGxvY2FsIHN0b3JhZ2UgaXMgJyArXG4gICAgICAgICd1bmF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4nKTtcbiAgfVxuICBjb25zdCBMUyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIGNvbnN0IHB1cmdlZE1vZGVsUGF0aHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTFMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBrZXkgPSBMUy5rZXkoaSk7XG4gICAgY29uc3QgcHJlZml4ID0gUEFUSF9QUkVGSVggKyBQQVRIX1NFUEFSQVRPUjtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgocHJlZml4KSAmJiBrZXkubGVuZ3RoID4gcHJlZml4Lmxlbmd0aCkge1xuICAgICAgTFMucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgY29uc3QgbW9kZWxOYW1lID0gZ2V0TW9kZWxQYXRoRnJvbUtleShrZXkpO1xuICAgICAgaWYgKHB1cmdlZE1vZGVsUGF0aHMuaW5kZXhPZihtb2RlbE5hbWUpID09PSAtMSkge1xuICAgICAgICBwdXJnZWRNb2RlbFBhdGhzLnB1c2gobW9kZWxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHB1cmdlZE1vZGVsUGF0aHM7XG59XG5cbnR5cGUgTG9jYWxTdG9yYWdlS2V5cyA9IHtcbiAgLyoqIEtleSBvZiB0aGUgbG9jYWxTdG9yYWdlIGVudHJ5IHN0b3JpbmcgYE1vZGVsQXJ0aWZhY3RzSW5mb2AuICovXG4gIGluZm86IHN0cmluZyxcbiAgLyoqXG4gICAqIEtleSBvZiB0aGUgbG9jYWxTdG9yYWdlIGVudHJ5IHN0b3JpbmcgdGhlICdtb2RlbFRvcG9sb2d5JyBrZXkgb2ZcbiAgICogYG1vZGVsLmpzb25gXG4gICAqL1xuICB0b3BvbG9neTogc3RyaW5nLFxuICAvKipcbiAgICogS2V5IG9mIHRoZSBsb2NhbFN0b3JhZ2UgZW50cnkgc3RvcmluZyB0aGUgYHdlaWdodHNNYW5pZmVzdC53ZWlnaHRzYCBlbnRyaWVzXG4gICAqIG9mIGBtb2RlbC5qc29uYFxuICAgKi9cbiAgd2VpZ2h0U3BlY3M6IHN0cmluZyxcbiAgLyoqIEtleSBvZiB0aGUgbG9jYWxTdG9yYWdlIGVudHJ5IHN0b3JpbmcgdGhlIHdlaWdodCBkYXRhIGluIEJhc2U2NCAqL1xuICB3ZWlnaHREYXRhOiBzdHJpbmcsXG4gIC8qKlxuICAgKiBLZXkgb2YgdGhlIGxvY2FsU3RvcmFnZSBlbnRyeSBzdG9yaW5nIHRoZSByZW1haW5pbmcgZmllbGRzIG9mIGBtb2RlbC5qc29uYFxuICAgKiBAc2VlIHtAbGluayBNb2RlbE1ldGFkYXRhfVxuICAgKi9cbiAgbW9kZWxNZXRhZGF0YTogc3RyaW5nLFxufTtcblxudHlwZSBNb2RlbE1ldGFkYXRhID0gT21pdDxNb2RlbEpTT04sICdtb2RlbFRvcG9sb2d5J3wnd2VpZ2h0c01hbmlmZXN0Jz47XG5cbmZ1bmN0aW9uIGdldE1vZGVsS2V5cyhwYXRoOiBzdHJpbmcpOiBMb2NhbFN0b3JhZ2VLZXlzIHtcbiAgcmV0dXJuIHtcbiAgICBpbmZvOiBbUEFUSF9QUkVGSVgsIHBhdGgsIElORk9fU1VGRklYXS5qb2luKFBBVEhfU0VQQVJBVE9SKSxcbiAgICB0b3BvbG9neTogW1BBVEhfUFJFRklYLCBwYXRoLCBNT0RFTF9UT1BPTE9HWV9TVUZGSVhdLmpvaW4oUEFUSF9TRVBBUkFUT1IpLFxuICAgIHdlaWdodFNwZWNzOiBbUEFUSF9QUkVGSVgsIHBhdGgsIFdFSUdIVF9TUEVDU19TVUZGSVhdLmpvaW4oUEFUSF9TRVBBUkFUT1IpLFxuICAgIHdlaWdodERhdGE6IFtQQVRIX1BSRUZJWCwgcGF0aCwgV0VJR0hUX0RBVEFfU1VGRklYXS5qb2luKFBBVEhfU0VQQVJBVE9SKSxcbiAgICBtb2RlbE1ldGFkYXRhOlxuICAgICAgICBbUEFUSF9QUkVGSVgsIHBhdGgsIE1PREVMX01FVEFEQVRBX1NVRkZJWF0uam9pbihQQVRIX1NFUEFSQVRPUilcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSXRlbXMoa2V5czogTG9jYWxTdG9yYWdlS2V5cyk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3QudmFsdWVzKGtleXMpKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgbW9kZWwgcGF0aCBmcm9tIGEgbG9jYWwtc3RvcmFnZSBrZXkuXG4gKlxuICogRS5nLiwgJ3RlbnNvcmZsb3dqc19tb2RlbHMvbXkvbW9kZWwvMS9pbmZvJyAtLT4gJ215L21vZGVsLzEnXG4gKlxuICogQHBhcmFtIGtleVxuICovXG5mdW5jdGlvbiBnZXRNb2RlbFBhdGhGcm9tS2V5KGtleTogc3RyaW5nKSB7XG4gIGNvbnN0IGl0ZW1zID0ga2V5LnNwbGl0KFBBVEhfU0VQQVJBVE9SKTtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQga2V5IGZvcm1hdDogJHtrZXl9YCk7XG4gIH1cbiAgcmV0dXJuIGl0ZW1zLnNsaWNlKDEsIGl0ZW1zLmxlbmd0aCAtIDEpLmpvaW4oUEFUSF9TRVBBUkFUT1IpO1xufVxuXG5mdW5jdGlvbiBtYXliZVN0cmlwU2NoZW1lKGtleTogc3RyaW5nKSB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChCcm93c2VyTG9jYWxTdG9yYWdlLlVSTF9TQ0hFTUUpID9cbiAgICAgIGtleS5zbGljZShCcm93c2VyTG9jYWxTdG9yYWdlLlVSTF9TQ0hFTUUubGVuZ3RoKSA6XG4gICAgICBrZXk7XG59XG5cbi8qKlxuICogSU9IYW5kbGVyIHN1YmNsYXNzOiBCcm93c2VyIExvY2FsIFN0b3JhZ2UuXG4gKlxuICogU2VlIHRoZSBkb2Mgc3RyaW5nIHRvIGBicm93c2VyTG9jYWxTdG9yYWdlYCBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgQnJvd3NlckxvY2FsU3RvcmFnZSBpbXBsZW1lbnRzIElPSGFuZGxlciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBMUzogU3RvcmFnZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1vZGVsUGF0aDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5czogTG9jYWxTdG9yYWdlS2V5cztcblxuICBzdGF0aWMgcmVhZG9ubHkgVVJMX1NDSEVNRSA9ICdsb2NhbHN0b3JhZ2U6Ly8nO1xuXG4gIGNvbnN0cnVjdG9yKG1vZGVsUGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKCFlbnYoKS5nZXRCb29sKCdJU19CUk9XU0VSJykgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBUT0RPKGNhaXMpOiBBZGQgbW9yZSBpbmZvIGFib3V0IHdoYXQgSU9IYW5kbGVyIHN1YnR5cGVzIGFyZVxuICAgICAgLy8gYXZhaWxhYmxlLlxuICAgICAgLy8gICBNYXliZSBwb2ludCB0byBhIGRvYyBwYWdlIG9uIHRoZSB3ZWIgYW5kL29yIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lXG4gICAgICAvLyAgIHRoZSBhdmFpbGFibGUgSU9IYW5kbGVycyBhbmQgcHJpbnQgdGhlbSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnVGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBsb2NhbCBzdG9yYWdlLicpO1xuICAgIH1cbiAgICB0aGlzLkxTID0gd2luZG93LmxvY2FsU3RvcmFnZTtcblxuICAgIGlmIChtb2RlbFBhdGggPT0gbnVsbCB8fCAhbW9kZWxQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ZvciBsb2NhbCBzdG9yYWdlLCBtb2RlbFBhdGggbXVzdCBub3QgYmUgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5LicpO1xuICAgIH1cbiAgICB0aGlzLm1vZGVsUGF0aCA9IG1vZGVsUGF0aDtcbiAgICB0aGlzLmtleXMgPSBnZXRNb2RlbEtleXModGhpcy5tb2RlbFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgbW9kZWwgYXJ0aWZhY3RzIHRvIGJyb3dzZXIgbG9jYWwgc3RvcmFnZS5cbiAgICpcbiAgICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIHRvIGBicm93c2VyTG9jYWxTdG9yYWdlYCBmb3IgZGV0YWlscyBvbiB0aGUgc2F2ZWRcbiAgICogYXJ0aWZhY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxBcnRpZmFjdHMgVGhlIG1vZGVsIGFydGlmYWN0cyB0byBiZSBzdG9yZWQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIFNhdmVSZXN1bHQuXG4gICAqL1xuICBhc3luYyBzYXZlKG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyk6IFByb21pc2U8U2F2ZVJlc3VsdD4ge1xuICAgIGlmIChtb2RlbEFydGlmYWN0cy5tb2RlbFRvcG9sb2d5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQnJvd3NlckxvY2FsU3RvcmFnZS5zYXZlKCkgZG9lcyBub3Qgc3VwcG9ydCBzYXZpbmcgbW9kZWwgdG9wb2xvZ3kgJyArXG4gICAgICAgICAgJ2luIGJpbmFyeSBmb3JtYXRzIHlldC4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wb2xvZ3kgPSBKU09OLnN0cmluZ2lmeShtb2RlbEFydGlmYWN0cy5tb2RlbFRvcG9sb2d5KTtcbiAgICAgIGNvbnN0IHdlaWdodFNwZWNzID0gSlNPTi5zdHJpbmdpZnkobW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3MpO1xuXG4gICAgICBjb25zdCBtb2RlbEFydGlmYWN0c0luZm86IE1vZGVsQXJ0aWZhY3RzSW5mbyA9XG4gICAgICAgICAgZ2V0TW9kZWxBcnRpZmFjdHNJbmZvRm9ySlNPTihtb2RlbEFydGlmYWN0cyk7XG5cbiAgICAgIC8vIFRPRE8obWF0dHNvdWxhbmlsbGUpOiBTdXBwb3J0IHNhdmluZyBtb2RlbHMgb3ZlciAyR0IgdGhhdCBleGNlZWRcbiAgICAgIC8vIENocm9tZSdzIEFycmF5QnVmZmVyIHNpemUgbGltaXQuXG4gICAgICBjb25zdCB3ZWlnaHRCdWZmZXIgPSBDb21wb3NpdGVBcnJheUJ1ZmZlci5qb2luKG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEpO1xuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLkxTLnNldEl0ZW0odGhpcy5rZXlzLmluZm8sIEpTT04uc3RyaW5naWZ5KG1vZGVsQXJ0aWZhY3RzSW5mbykpO1xuICAgICAgICB0aGlzLkxTLnNldEl0ZW0odGhpcy5rZXlzLnRvcG9sb2d5LCB0b3BvbG9neSk7XG4gICAgICAgIHRoaXMuTFMuc2V0SXRlbSh0aGlzLmtleXMud2VpZ2h0U3BlY3MsIHdlaWdodFNwZWNzKTtcbiAgICAgICAgdGhpcy5MUy5zZXRJdGVtKFxuICAgICAgICAgICAgdGhpcy5rZXlzLndlaWdodERhdGEsXG4gICAgICAgICAgICBhcnJheUJ1ZmZlclRvQmFzZTY0U3RyaW5nKHdlaWdodEJ1ZmZlcikpO1xuXG4gICAgICAgIC8vIE5vdGUgdGhhdCBKU09OLnN0cmluZ2lmeSBkb2Vzbid0IHdyaXRlIG91dCBrZXlzIHRoYXQgaGF2ZSB1bmRlZmluZWRcbiAgICAgICAgLy8gdmFsdWVzLCBzbyBmb3Igc29tZSBrZXlzLCB3ZSBzZXQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSBudWxsLWlzaFxuICAgICAgICAvLyB2YWx1ZS5cbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IFJlcXVpcmVkPE1vZGVsTWV0YWRhdGE+ID0ge1xuICAgICAgICAgIGZvcm1hdDogbW9kZWxBcnRpZmFjdHMuZm9ybWF0LFxuICAgICAgICAgIGdlbmVyYXRlZEJ5OiBtb2RlbEFydGlmYWN0cy5nZW5lcmF0ZWRCeSxcbiAgICAgICAgICBjb252ZXJ0ZWRCeTogbW9kZWxBcnRpZmFjdHMuY29udmVydGVkQnksXG4gICAgICAgICAgc2lnbmF0dXJlOiBtb2RlbEFydGlmYWN0cy5zaWduYXR1cmUgIT0gbnVsbCA/XG4gICAgICAgICAgICAgIG1vZGVsQXJ0aWZhY3RzLnNpZ25hdHVyZSA6XG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1c2VyRGVmaW5lZE1ldGFkYXRhOiBtb2RlbEFydGlmYWN0cy51c2VyRGVmaW5lZE1ldGFkYXRhICE9IG51bGwgP1xuICAgICAgICAgICAgICBtb2RlbEFydGlmYWN0cy51c2VyRGVmaW5lZE1ldGFkYXRhIDpcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIG1vZGVsSW5pdGlhbGl6ZXI6IG1vZGVsQXJ0aWZhY3RzLm1vZGVsSW5pdGlhbGl6ZXIgIT0gbnVsbCA/XG4gICAgICAgICAgICAgIG1vZGVsQXJ0aWZhY3RzLm1vZGVsSW5pdGlhbGl6ZXIgOlxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgaW5pdGlhbGl6ZXJTaWduYXR1cmU6IG1vZGVsQXJ0aWZhY3RzLmluaXRpYWxpemVyU2lnbmF0dXJlICE9IG51bGwgP1xuICAgICAgICAgICAgICBtb2RlbEFydGlmYWN0cy5pbml0aWFsaXplclNpZ25hdHVyZSA6XG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cmFpbmluZ0NvbmZpZzogbW9kZWxBcnRpZmFjdHMudHJhaW5pbmdDb25maWcgIT0gbnVsbCA/XG4gICAgICAgICAgICAgIG1vZGVsQXJ0aWZhY3RzLnRyYWluaW5nQ29uZmlnIDpcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuTFMuc2V0SXRlbSh0aGlzLmtleXMubW9kZWxNZXRhZGF0YSwgSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpKTtcblxuICAgICAgICByZXR1cm4ge21vZGVsQXJ0aWZhY3RzSW5mb307XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gSWYgc2F2aW5nIGZhaWxlZCwgY2xlYW4gdXAgYWxsIGl0ZW1zIHNhdmVkIHNvIGZhci5cbiAgICAgICAgcmVtb3ZlSXRlbXModGhpcy5rZXlzKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHNhdmUgbW9kZWwgJyR7dGhpcy5tb2RlbFBhdGh9JyB0byBsb2NhbCBzdG9yYWdlOiBgICtcbiAgICAgICAgICAgIGBzaXplIHF1b3RhIGJlaW5nIGV4Y2VlZGVkIGlzIGEgcG9zc2libGUgY2F1c2Ugb2YgdGhpcyBmYWlsdXJlOiBgICtcbiAgICAgICAgICAgIGBtb2RlbFRvcG9sb2d5Qnl0ZXM9JHttb2RlbEFydGlmYWN0c0luZm8ubW9kZWxUb3BvbG9neUJ5dGVzfSwgYCArXG4gICAgICAgICAgICBgd2VpZ2h0U3BlY3NCeXRlcz0ke21vZGVsQXJ0aWZhY3RzSW5mby53ZWlnaHRTcGVjc0J5dGVzfSwgYCArXG4gICAgICAgICAgICBgd2VpZ2h0RGF0YUJ5dGVzPSR7bW9kZWxBcnRpZmFjdHNJbmZvLndlaWdodERhdGFCeXRlc30uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBtb2RlbCBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAqXG4gICAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiB0byBgYnJvd3NlckxvY2FsU3RvcmFnZWAgZm9yIGRldGFpbHMgb24gdGhlIHNhdmVkXG4gICAqIGFydGlmYWN0cy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGxvYWRlZCBtb2RlbCAoaWYgbG9hZGluZyBzdWNjZWVkcykuXG4gICAqL1xuICBhc3luYyBsb2FkKCk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHM+IHtcbiAgICBjb25zdCBpbmZvID1cbiAgICAgICAgSlNPTi5wYXJzZSh0aGlzLkxTLmdldEl0ZW0odGhpcy5rZXlzLmluZm8pKSBhcyBNb2RlbEFydGlmYWN0c0luZm87XG4gICAgaWYgKGluZm8gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbiBsb2NhbCBzdG9yYWdlLCB0aGVyZSBpcyBubyBtb2RlbCB3aXRoIG5hbWUgJyR7dGhpcy5tb2RlbFBhdGh9J2ApO1xuICAgIH1cblxuICAgIGlmIChpbmZvLm1vZGVsVG9wb2xvZ3lUeXBlICE9PSAnSlNPTicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQnJvd3NlckxvY2FsU3RvcmFnZSBkb2VzIG5vdCBzdXBwb3J0IGxvYWRpbmcgbm9uLUpTT04gbW9kZWwgJyArXG4gICAgICAgICAgJ3RvcG9sb2d5IHlldC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXQ6IE1vZGVsQXJ0aWZhY3RzID0ge307XG5cbiAgICAvLyBMb2FkIHRvcG9sb2d5LlxuICAgIGNvbnN0IHRvcG9sb2d5ID0gSlNPTi5wYXJzZSh0aGlzLkxTLmdldEl0ZW0odGhpcy5rZXlzLnRvcG9sb2d5KSk7XG4gICAgaWYgKHRvcG9sb2d5ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW4gbG9jYWwgc3RvcmFnZSwgdGhlIHRvcG9sb2d5IG9mIG1vZGVsICcke3RoaXMubW9kZWxQYXRofScgYCArXG4gICAgICAgICAgYGlzIG1pc3NpbmcuYCk7XG4gICAgfVxuICAgIG91dC5tb2RlbFRvcG9sb2d5ID0gdG9wb2xvZ3k7XG5cbiAgICAvLyBMb2FkIHdlaWdodCBzcGVjcy5cbiAgICBjb25zdCB3ZWlnaHRTcGVjcyA9IEpTT04ucGFyc2UodGhpcy5MUy5nZXRJdGVtKHRoaXMua2V5cy53ZWlnaHRTcGVjcykpO1xuICAgIGlmICh3ZWlnaHRTcGVjcyA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluIGxvY2FsIHN0b3JhZ2UsIHRoZSB3ZWlnaHQgc3BlY3Mgb2YgbW9kZWwgJyR7dGhpcy5tb2RlbFBhdGh9JyBgICtcbiAgICAgICAgICBgYXJlIG1pc3NpbmcuYCk7XG4gICAgfVxuICAgIG91dC53ZWlnaHRTcGVjcyA9IHdlaWdodFNwZWNzO1xuXG4gICAgLy8gTG9hZCBtZXRhLWRhdGEgZmllbGRzLlxuICAgIGNvbnN0IG1ldGFkYXRhU3RyaW5nID0gdGhpcy5MUy5nZXRJdGVtKHRoaXMua2V5cy5tb2RlbE1ldGFkYXRhKTtcbiAgICBpZiAobWV0YWRhdGFTdHJpbmcgIT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKG1ldGFkYXRhU3RyaW5nKSBhcyBNb2RlbE1ldGFkYXRhO1xuICAgICAgb3V0LmZvcm1hdCA9IG1ldGFkYXRhLmZvcm1hdDtcbiAgICAgIG91dC5nZW5lcmF0ZWRCeSA9IG1ldGFkYXRhLmdlbmVyYXRlZEJ5O1xuICAgICAgb3V0LmNvbnZlcnRlZEJ5ID0gbWV0YWRhdGEuY29udmVydGVkQnk7XG4gICAgICBpZiAobWV0YWRhdGEuc2lnbmF0dXJlICE9IG51bGwpIHtcbiAgICAgICAgb3V0LnNpZ25hdHVyZSA9IG1ldGFkYXRhLnNpZ25hdHVyZTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS51c2VyRGVmaW5lZE1ldGFkYXRhICE9IG51bGwpIHtcbiAgICAgICAgb3V0LnVzZXJEZWZpbmVkTWV0YWRhdGEgPSBtZXRhZGF0YS51c2VyRGVmaW5lZE1ldGFkYXRhO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLm1vZGVsSW5pdGlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgICBvdXQubW9kZWxJbml0aWFsaXplciA9IG1ldGFkYXRhLm1vZGVsSW5pdGlhbGl6ZXI7XG4gICAgICB9XG4gICAgICBpZiAobWV0YWRhdGEuaW5pdGlhbGl6ZXJTaWduYXR1cmUgIT0gbnVsbCkge1xuICAgICAgICBvdXQuaW5pdGlhbGl6ZXJTaWduYXR1cmUgPSBtZXRhZGF0YS5pbml0aWFsaXplclNpZ25hdHVyZTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS50cmFpbmluZ0NvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgIG91dC50cmFpbmluZ0NvbmZpZyA9IG1ldGFkYXRhLnRyYWluaW5nQ29uZmlnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvYWQgd2VpZ2h0IGRhdGEuXG4gICAgY29uc3Qgd2VpZ2h0RGF0YUJhc2U2NCA9IHRoaXMuTFMuZ2V0SXRlbSh0aGlzLmtleXMud2VpZ2h0RGF0YSk7XG4gICAgaWYgKHdlaWdodERhdGFCYXNlNjQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbiBsb2NhbCBzdG9yYWdlLCB0aGUgYmluYXJ5IHdlaWdodCB2YWx1ZXMgb2YgbW9kZWwgYCArXG4gICAgICAgICAgYCcke3RoaXMubW9kZWxQYXRofScgYXJlIG1pc3NpbmcuYCk7XG4gICAgfVxuICAgIG91dC53ZWlnaHREYXRhID0gYmFzZTY0U3RyaW5nVG9BcnJheUJ1ZmZlcih3ZWlnaHREYXRhQmFzZTY0KTtcblxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvY2FsU3RvcmFnZVJvdXRlcjogSU9Sb3V0ZXIgPSAodXJsOiBzdHJpbmd8c3RyaW5nW10pID0+IHtcbiAgaWYgKCFlbnYoKS5nZXRCb29sKCdJU19CUk9XU0VSJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJsKSAmJiB1cmwuc3RhcnRzV2l0aChCcm93c2VyTG9jYWxTdG9yYWdlLlVSTF9TQ0hFTUUpKSB7XG4gICAgICByZXR1cm4gYnJvd3NlckxvY2FsU3RvcmFnZShcbiAgICAgICAgICB1cmwuc2xpY2UoQnJvd3NlckxvY2FsU3RvcmFnZS5VUkxfU0NIRU1FLmxlbmd0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn07XG5JT1JvdXRlclJlZ2lzdHJ5LnJlZ2lzdGVyU2F2ZVJvdXRlcihsb2NhbFN0b3JhZ2VSb3V0ZXIpO1xuSU9Sb3V0ZXJSZWdpc3RyeS5yZWdpc3RlckxvYWRSb3V0ZXIobG9jYWxTdG9yYWdlUm91dGVyKTtcblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciBsb2NhbCBzdG9yYWdlIElPSGFuZGxlci5cbiAqXG4gKiBUaGlzIGBJT0hhbmRsZXJgIHN1cHBvcnRzIGJvdGggYHNhdmVgIGFuZCBgbG9hZGAuXG4gKlxuICogRm9yIGVhY2ggbW9kZWwncyBzYXZlZCBhcnRpZmFjdHMsIGZvdXIgaXRlbXMgYXJlIHNhdmVkIHRvIGxvY2FsIHN0b3JhZ2UuXG4gKiAgIC0gYCR7UEFUSF9TRVBBUkFUT1J9LyR7bW9kZWxQYXRofS9pbmZvYDogQ29udGFpbnMgbWV0YS1pbmZvIGFib3V0IHRoZVxuICogICAgIG1vZGVsLCBzdWNoIGFzIGRhdGUgc2F2ZWQsIHR5cGUgb2YgdGhlIHRvcG9sb2d5LCBzaXplIGluIGJ5dGVzLCBldGMuXG4gKiAgIC0gYCR7UEFUSF9TRVBBUkFUT1J9LyR7bW9kZWxQYXRofS90b3BvbG9neWA6IE1vZGVsIHRvcG9sb2d5LiBGb3IgS2VyYXMtXG4gKiAgICAgc3R5bGUgbW9kZWxzLCB0aGlzIGlzIGEgc3RyaW5naXplZCBKU09OLlxuICogICAtIGAke1BBVEhfU0VQQVJBVE9SfS8ke21vZGVsUGF0aH0vd2VpZ2h0X3NwZWNzYDogV2VpZ2h0IHNwZWNzIG9mIHRoZVxuICogICAgIG1vZGVsLCBjYW4gYmUgdXNlZCB0byBkZWNvZGUgdGhlIHNhdmVkIGJpbmFyeSB3ZWlnaHQgdmFsdWVzIChzZWVcbiAqICAgICBpdGVtIGJlbG93KS5cbiAqICAgLSBgJHtQQVRIX1NFUEFSQVRPUn0vJHttb2RlbFBhdGh9L3dlaWdodF9kYXRhYDogQ29uY2F0ZW5hdGVkIGJpbmFyeVxuICogICAgIHdlaWdodCB2YWx1ZXMsIHN0b3JlZCBhcyBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBTYXZpbmcgbWF5IHRocm93IGFuIGBFcnJvcmAgaWYgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGFydGlmYWN0cyBleGNlZWQgdGhlXG4gKiBicm93c2VyLXNwZWNpZmljIHF1b3RhLlxuICpcbiAqIEBwYXJhbSBtb2RlbFBhdGggQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG1vZGVsIHRvIGJlIHNhdmVkLiBNdXN0IGJlIGFcbiAqICAgbm9uLWVtcHR5IHN0cmluZy5cbiAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIGBJT0hhbmRsZXJgLCB3aGljaCBjYW4gYmUgdXNlZCB3aXRoLCBlLmcuLFxuICogICBgdGYuTW9kZWwuc2F2ZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicm93c2VyTG9jYWxTdG9yYWdlKG1vZGVsUGF0aDogc3RyaW5nKTogSU9IYW5kbGVyIHtcbiAgcmV0dXJuIG5ldyBCcm93c2VyTG9jYWxTdG9yYWdlKG1vZGVsUGF0aCk7XG59XG5cbmV4cG9ydCBjbGFzcyBCcm93c2VyTG9jYWxTdG9yYWdlTWFuYWdlciBpbXBsZW1lbnRzIE1vZGVsU3RvcmVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBMUzogU3RvcmFnZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIGVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSxcbiAgICAgICAgKCkgPT4gJ0N1cnJlbnQgZW52aXJvbm1lbnQgaXMgbm90IGEgd2ViIGJyb3dzZXInKTtcbiAgICBhc3NlcnQoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgICAgICB0eXBlb2Ygd2luZG93LmxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgICgpID0+ICdDdXJyZW50IGJyb3dzZXIgZG9lcyBub3QgYXBwZWFyIHRvIHN1cHBvcnQgbG9jYWxTdG9yYWdlJyk7XG4gICAgdGhpcy5MUyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH1cblxuICBhc3luYyBsaXN0TW9kZWxzKCk6IFByb21pc2U8e1twYXRoOiBzdHJpbmddOiBNb2RlbEFydGlmYWN0c0luZm99PiB7XG4gICAgY29uc3Qgb3V0OiB7W3BhdGg6IHN0cmluZ106IE1vZGVsQXJ0aWZhY3RzSW5mb30gPSB7fTtcbiAgICBjb25zdCBwcmVmaXggPSBQQVRIX1BSRUZJWCArIFBBVEhfU0VQQVJBVE9SO1xuICAgIGNvbnN0IHN1ZmZpeCA9IFBBVEhfU0VQQVJBVE9SICsgSU5GT19TVUZGSVg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkxTLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLkxTLmtleShpKTtcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChwcmVmaXgpICYmIGtleS5lbmRzV2l0aChzdWZmaXgpKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUGF0aCA9IGdldE1vZGVsUGF0aEZyb21LZXkoa2V5KTtcbiAgICAgICAgb3V0W21vZGVsUGF0aF0gPSBKU09OLnBhcnNlKHRoaXMuTFMuZ2V0SXRlbShrZXkpKSBhcyBNb2RlbEFydGlmYWN0c0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBhc3luYyByZW1vdmVNb2RlbChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz4ge1xuICAgIHBhdGggPSBtYXliZVN0cmlwU2NoZW1lKHBhdGgpO1xuICAgIGNvbnN0IGtleXMgPSBnZXRNb2RlbEtleXMocGF0aCk7XG4gICAgaWYgKHRoaXMuTFMuZ2V0SXRlbShrZXlzLmluZm8pID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgbW9kZWwgYXQgcGF0aCAnJHtwYXRofSdgKTtcbiAgICB9XG4gICAgY29uc3QgaW5mbyA9IEpTT04ucGFyc2UodGhpcy5MUy5nZXRJdGVtKGtleXMuaW5mbykpIGFzIE1vZGVsQXJ0aWZhY3RzSW5mbztcbiAgICByZW1vdmVJdGVtcyhrZXlzKTtcbiAgICByZXR1cm4gaW5mbztcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Classes and functions for model management across multiple storage mediums.\n *\n * Supported client actions:\n * - Listing models on all registered storage mediums.\n * - Remove model by URL from any registered storage mediums, by using URL\n * string.\n * - Moving or copying model from one path to another in the same medium or from\n * one medium to another, by using URL strings.\n */\nimport { assert } from '../util';\nimport { IORouterRegistry } from './router_registry';\nconst URL_SCHEME_SUFFIX = '://';\nexport class ModelStoreManagerRegistry {\n constructor() {\n this.managers = {};\n }\n static getInstance() {\n if (ModelStoreManagerRegistry.instance == null) {\n ModelStoreManagerRegistry.instance = new ModelStoreManagerRegistry();\n }\n return ModelStoreManagerRegistry.instance;\n }\n /**\n * Register a save-handler router.\n *\n * @param saveRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `save` method defined or `null`.\n */\n static registerManager(scheme, manager) {\n assert(scheme != null, () => 'scheme must not be undefined or null.');\n if (scheme.endsWith(URL_SCHEME_SUFFIX)) {\n scheme = scheme.slice(0, scheme.indexOf(URL_SCHEME_SUFFIX));\n }\n assert(scheme.length > 0, () => 'scheme must not be an empty string.');\n const registry = ModelStoreManagerRegistry.getInstance();\n assert(registry.managers[scheme] == null, () => `A model store manager is already registered for scheme '${scheme}'.`);\n registry.managers[scheme] = manager;\n }\n static getManager(scheme) {\n const manager = ModelStoreManagerRegistry.getInstance().managers[scheme];\n if (manager == null) {\n throw new Error(`Cannot find model manager for scheme '${scheme}'`);\n }\n return manager;\n }\n static getSchemes() {\n return Object.keys(ModelStoreManagerRegistry.getInstance().managers);\n }\n}\n/**\n * Helper method for parsing a URL string into a scheme and a path.\n *\n * @param url E.g., 'localstorage://my-model'\n * @returns A dictionary with two fields: scheme and path.\n * Scheme: e.g., 'localstorage' in the example above.\n * Path: e.g., 'my-model' in the example above.\n */\nfunction parseURL(url) {\n if (url.indexOf(URL_SCHEME_SUFFIX) === -1) {\n throw new Error(`The url string provided does not contain a scheme. ` +\n `Supported schemes are: ` +\n `${ModelStoreManagerRegistry.getSchemes().join(',')}`);\n }\n return {\n scheme: url.split(URL_SCHEME_SUFFIX)[0],\n path: url.split(URL_SCHEME_SUFFIX)[1],\n };\n}\nasync function cloneModelInternal(sourceURL, destURL, deleteSource = false) {\n assert(sourceURL !== destURL, () => `Old path and new path are the same: '${sourceURL}'`);\n const loadHandlers = IORouterRegistry.getLoadHandlers(sourceURL);\n assert(loadHandlers.length > 0, () => `Copying failed because no load handler is found for source URL ${sourceURL}.`);\n assert(loadHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) ` +\n `load handlers for source URL ${sourceURL}.`);\n const loadHandler = loadHandlers[0];\n const saveHandlers = IORouterRegistry.getSaveHandlers(destURL);\n assert(saveHandlers.length > 0, () => `Copying failed because no save handler is found for destination ` +\n `URL ${destURL}.`);\n assert(saveHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) ` +\n `save handlers for destination URL ${destURL}.`);\n const saveHandler = saveHandlers[0];\n const sourceScheme = parseURL(sourceURL).scheme;\n const sourcePath = parseURL(sourceURL).path;\n const sameMedium = sourceScheme === parseURL(sourceURL).scheme;\n const modelArtifacts = await loadHandler.load();\n // If moving within the same storage medium, remove the old model as soon as\n // the loading is done. Without doing this, it is possible that the combined\n // size of the two models will cause the cloning to fail.\n if (deleteSource && sameMedium) {\n await ModelStoreManagerRegistry.getManager(sourceScheme)\n .removeModel(sourcePath);\n }\n const saveResult = await saveHandler.save(modelArtifacts);\n // If moving between mediums, the deletion is done after the save succeeds.\n // This guards against the case in which saving to the destination medium\n // fails.\n if (deleteSource && !sameMedium) {\n await ModelStoreManagerRegistry.getManager(sourceScheme)\n .removeModel(sourcePath);\n }\n return saveResult.modelArtifactsInfo;\n}\n/**\n * List all models stored in registered storage mediums.\n *\n * For a web browser environment, the registered mediums are Local Storage and\n * IndexedDB.\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Delete the model.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n * ```\n *\n * @returns A `Promise` of a dictionary mapping URLs of existing models to\n * their model artifacts info. URLs include medium-specific schemes, e.g.,\n * 'indexeddb://my/model/1'. Model artifacts info include type of the\n * model's topology, byte sizes of the topology, weights, etc.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function listModels() {\n const schemes = ModelStoreManagerRegistry.getSchemes();\n const out = {};\n for (const scheme of schemes) {\n const schemeOut = await ModelStoreManagerRegistry.getManager(scheme).listModels();\n for (const path in schemeOut) {\n const url = scheme + URL_SCHEME_SUFFIX + path;\n out[url] = schemeOut[path];\n }\n }\n return out;\n}\n/**\n * Remove a model specified by URL from a registered storage medium.\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Delete the model.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n * ```\n *\n * @param url A URL to a stored model, with a scheme prefix, e.g.,\n * 'localstorage://my-model-1', 'indexeddb://my/model/2'.\n * @returns ModelArtifactsInfo of the deleted model (if and only if deletion\n * is successful).\n * @throws Error if deletion fails, e.g., if no model exists at `path`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function removeModel(url) {\n const schemeAndPath = parseURL(url);\n const manager = ModelStoreManagerRegistry.getManager(schemeAndPath.scheme);\n return manager.removeModel(schemeAndPath.path);\n}\n/**\n * Copy a model from one URL to another.\n *\n * This function supports:\n *\n * 1. Copying within a storage medium, e.g.,\n * `tf.io.copyModel('localstorage://model-1', 'localstorage://model-2')`\n * 2. Copying between two storage mediums, e.g.,\n * `tf.io.copyModel('localstorage://model-1', 'indexeddb://model-1')`\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Copy the model, from Local Storage to IndexedDB.\n * await tf.io.copyModel(\n * 'localstorage://demo/management/model1',\n * 'indexeddb://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Remove both models.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n * await tf.io.removeModel('indexeddb://demo/management/model1');\n * ```\n *\n * @param sourceURL Source URL of copying.\n * @param destURL Destination URL of copying.\n * @returns ModelArtifactsInfo of the copied model (if and only if copying\n * is successful).\n * @throws Error if copying fails, e.g., if no model exists at `sourceURL`, or\n * if `oldPath` and `newPath` are identical.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function copyModel(sourceURL, destURL) {\n const deleteSource = false;\n return cloneModelInternal(sourceURL, destURL, deleteSource);\n}\n/**\n * Move a model from one URL to another.\n *\n * This function supports:\n *\n * 1. Moving within a storage medium, e.g.,\n * `tf.io.moveModel('localstorage://model-1', 'localstorage://model-2')`\n * 2. Moving between two storage mediums, e.g.,\n * `tf.io.moveModel('localstorage://model-1', 'indexeddb://model-1')`\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Move the model, from Local Storage to IndexedDB.\n * await tf.io.moveModel(\n * 'localstorage://demo/management/model1',\n * 'indexeddb://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Remove the moved model.\n * await tf.io.removeModel('indexeddb://demo/management/model1');\n * ```\n *\n * @param sourceURL Source URL of moving.\n * @param destURL Destination URL of moving.\n * @returns ModelArtifactsInfo of the copied model (if and only if copying\n * is successful).\n * @throws Error if moving fails, e.g., if no model exists at `sourceURL`, or\n * if `oldPath` and `newPath` are identical.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function moveModel(sourceURL, destURL) {\n const deleteSource = true;\n return cloneModelInternal(sourceURL, destURL, deleteSource);\n}\nexport { moveModel, copyModel, removeModel, listModels };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxfbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vbW9kZWxfbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRS9CLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR25ELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBRWhDLE1BQU0sT0FBTyx5QkFBeUI7SUFNcEM7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVc7UUFDeEIsSUFBSSx5QkFBeUIsQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzlDLHlCQUF5QixDQUFDLFFBQVEsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7U0FDdEU7UUFDRCxPQUFPLHlCQUF5QixDQUFDLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQWMsRUFBRSxPQUEwQjtRQUMvRCxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztTQUM3RDtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0s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R0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0tBQ0Y7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFDSCxLQUFLLFVBQVUsV0FBVyxDQUFDLEdBQVc7SUFDcEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0UsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFDSCxLQUFLLFVBQVUsU0FBUyxDQUNwQixTQUFpQixFQUFFLE9BQWU7SUFDcEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzNCLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILEtBQUssVUFBVSxTQUFTLENBQ3BCLFNBQWlCLEVBQUUsT0FBZTtJQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDMUIsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKlxuICogQ2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBtb2RlbCBtYW5hZ2VtZW50IGFjcm9zcyBtdWx0aXBsZSBzdG9yYWdlIG1lZGl1bXMuXG4gKlxuICogU3VwcG9ydGVkIGNsaWVudCBhY3Rpb25zOlxuICogLSBMaXN0aW5nIG1vZGVscyBvbiBhbGwgcmVnaXN0ZXJlZCBzdG9yYWdlIG1lZGl1bXMuXG4gKiAtIFJlbW92ZSBtb2RlbCBieSBVUkwgZnJvbSBhbnkgcmVnaXN0ZXJlZCBzdG9yYWdlIG1lZGl1bXMsIGJ5IHVzaW5nIFVSTFxuICogICBzdHJpbmcuXG4gKiAtIE1vdmluZyBvciBjb3B5aW5nIG1vZGVsIGZyb20gb25lIHBhdGggdG8gYW5vdGhlciBpbiB0aGUgc2FtZSBtZWRpdW0gb3IgZnJvbVxuICogICBvbmUgbWVkaXVtIHRvIGFub3RoZXIsIGJ5IHVzaW5nIFVSTCBzdHJpbmdzLlxuICovXG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtJT1JvdXRlclJlZ2lzdHJ5fSBmcm9tICcuL3JvdXRlcl9yZWdpc3RyeSc7XG5pbXBvcnQge01vZGVsQXJ0aWZhY3RzSW5mbywgTW9kZWxTdG9yZU1hbmFnZXJ9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBVUkxfU0NIRU1FX1NVRkZJWCA9ICc6Ly8nO1xuXG5leHBvcnQgY2xhc3MgTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeSB7XG4gIC8vIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnk7XG5cbiAgcHJpdmF0ZSBtYW5hZ2Vyczoge1tzY2hlbWU6IHN0cmluZ106IE1vZGVsU3RvcmVNYW5hZ2VyfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWFuYWdlcnMgPSB7fTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEluc3RhbmNlKCk6IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkge1xuICAgIGlmIChNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5Lmluc3RhbmNlID09IG51bGwpIHtcbiAgICAgIE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuaW5zdGFuY2UgPSBuZXcgTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeSgpO1xuICAgIH1cbiAgICByZXR1cm4gTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeS5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNhdmUtaGFuZGxlciByb3V0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBzYXZlUm91dGVyIEEgZnVuY3Rpb24gdGhhdCBtYXBzIGEgVVJMLWxpa2Ugc3RyaW5nIG9udG8gYW4gaW5zdGFuY2VcbiAgICogb2YgYElPSGFuZGxlcmAgd2l0aCB0aGUgYHNhdmVgIG1ldGhvZCBkZWZpbmVkIG9yIGBudWxsYC5cbiAgICovXG4gIHN0YXRpYyByZWdpc3Rlck1hbmFnZXIoc2NoZW1lOiBzdHJpbmcsIG1hbmFnZXI6IE1vZGVsU3RvcmVNYW5hZ2VyKSB7XG4gICAgYXNzZXJ0KHNjaGVtZSAhPSBudWxsLCAoKSA9PiAnc2NoZW1lIG11c3Qgbm90IGJlIHVuZGVmaW5lZCBvciBudWxsLicpO1xuICAgIGlmIChzY2hlbWUuZW5kc1dpdGgoVVJMX1NDSEVNRV9TVUZGSVgpKSB7XG4gICAgICBzY2hlbWUgPSBzY2hlbWUuc2xpY2UoMCwgc2NoZW1lLmluZGV4T2YoVVJMX1NDSEVNRV9TVUZGSVgpKTtcbiAgICB9XG4gICAgYXNzZXJ0KHNjaGVtZS5sZW5ndGggPiAwLCAoKSA9PiAnc2NoZW1lIG11c3Qgbm90IGJlIGFuIGVtcHR5IHN0cmluZy4nKTtcbiAgICBjb25zdCByZWdpc3RyeSA9IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcbiAgICBhc3NlcnQoXG4gICAgICAgIHJlZ2lzdHJ5Lm1hbmFnZXJzW3NjaGVtZV0gPT0gbnVsbCxcbiAgICAgICAgKCkgPT4gYEEgbW9kZWwgc3RvcmUgbWFuYWdlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIHNjaGVtZSAnJHtcbiAgICAgICAgICAgIHNjaGVtZX0nLmApO1xuICAgIHJlZ2lzdHJ5Lm1hbmFnZXJzW3NjaGVtZV0gPSBtYW5hZ2VyO1xuICB9XG5cbiAgc3RhdGljIGdldE1hbmFnZXIoc2NoZW1lOiBzdHJpbmcpOiBNb2RlbFN0b3JlTWFuYWdlciB7XG4gICAgY29uc3QgbWFuYWdlciA9IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5tYW5hZ2Vyc1tzY2hlbWVdO1xuICAgIGlmIChtYW5hZ2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgbW9kZWwgbWFuYWdlciBmb3Igc2NoZW1lICcke3NjaGVtZX0nYCk7XG4gICAgfVxuICAgIHJldHVybiBtYW5hZ2VyO1xuICB9XG5cbiAgc3RhdGljIGdldFNjaGVtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkubWFuYWdlcnMpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCBmb3IgcGFyc2luZyBhIFVSTCBzdHJpbmcgaW50byBhIHNjaGVtZSBhbmQgYSBwYXRoLlxuICpcbiAqIEBwYXJhbSB1cmwgRS5nLiwgJ2xvY2Fsc3RvcmFnZTovL215LW1vZGVsJ1xuICogQHJldHVybnMgQSBkaWN0aW9uYXJ5IHdpdGggdHdvIGZpZWxkczogc2NoZW1lIGFuZCBwYXRoLlxuICogICBTY2hlbWU6IGUuZy4sICdsb2NhbHN0b3JhZ2UnIGluIHRoZSBleGFtcGxlIGFib3ZlLlxuICogICBQYXRoOiBlLmcuLCAnbXktbW9kZWwnIGluIHRoZSBleGFtcGxlIGFib3ZlLlxuICovXG5mdW5jdGlvbiBwYXJzZVVSTCh1cmw6IHN0cmluZyk6IHtzY2hlbWU6IHN0cmluZywgcGF0aDogc3RyaW5nfSB7XG4gIGlmICh1cmwuaW5kZXhPZihVUkxfU0NIRU1FX1NVRkZJWCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIHVybCBzdHJpbmcgcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiBhIHNjaGVtZS4gYCArXG4gICAgICAgIGBTdXBwb3J0ZWQgc2NoZW1lcyBhcmU6IGAgK1xuICAgICAgICBgJHtNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5LmdldFNjaGVtZXMoKS5qb2luKCcsJyl9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY2hlbWU6IHVybC5zcGxpdChVUkxfU0NIRU1FX1NVRkZJWClbMF0sXG4gICAgcGF0aDogdXJsLnNwbGl0KFVSTF9TQ0hFTUVfU1VGRklYKVsxXSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xvbmVNb2RlbEludGVybmFsKFxuICAgIHNvdXJjZVVSTDogc3RyaW5nLCBkZXN0VVJMOiBzdHJpbmcsXG4gICAgZGVsZXRlU291cmNlID0gZmFsc2UpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz4ge1xuICBhc3NlcnQoXG4gICAgICBzb3VyY2VVUkwgIT09IGRlc3RVUkwsXG4gICAgICAoKSA9PiBgT2xkIHBhdGggYW5kIG5ldyBwYXRoIGFyZSB0aGUgc2FtZTogJyR7c291cmNlVVJMfSdgKTtcblxuICBjb25zdCBsb2FkSGFuZGxlcnMgPSBJT1JvdXRlclJlZ2lzdHJ5LmdldExvYWRIYW5kbGVycyhzb3VyY2VVUkwpO1xuICBhc3NlcnQoXG4gICAgICBsb2FkSGFuZGxlcnMubGVuZ3RoID4gMCxcbiAgICAgICgpID0+IGBDb3B5aW5nIGZhaWxlZCBiZWNhdXNlIG5vIGxvYWQgaGFuZGxlciBpcyBmb3VuZCBmb3Igc291cmNlIFVSTCAke1xuICAgICAgICAgIHNvdXJjZVVSTH0uYCk7XG4gIGFzc2VydChcbiAgICAgIGxvYWRIYW5kbGVycy5sZW5ndGggPCAyLFxuICAgICAgKCkgPT4gYENvcHlpbmcgZmFpbGVkIGJlY2F1c2UgbW9yZSB0aGFuIG9uZSAoJHtsb2FkSGFuZGxlcnMubGVuZ3RofSkgYCArXG4gICAgICAgICAgYGxvYWQgaGFuZGxlcnMgZm9yIHNvdXJjZSBVUkwgJHtzb3VyY2VVUkx9LmApO1xuICBjb25zdCBsb2FkSGFuZGxlciA9IGxvYWRIYW5kbGVyc1swXTtcblxuICBjb25zdCBzYXZlSGFuZGxlcnMgPSBJT1JvdXRlclJlZ2lzdHJ5LmdldFNhdmVIYW5kbGVycyhkZXN0VVJMKTtcbiAgYXNzZXJ0KFxuICAgICAgc2F2ZUhhbmRsZXJzLmxlbmd0aCA+IDAsXG4gICAgICAoKSA9PiBgQ29weWluZyBmYWlsZWQgYmVjYXVzZSBubyBzYXZlIGhhbmRsZXIgaXMgZm91bmQgZm9yIGRlc3RpbmF0aW9uIGAgK1xuICAgICAgICAgIGBVUkwgJHtkZXN0VVJMfS5gKTtcbiAgYXNzZXJ0KFxuICAgICAgc2F2ZUhhbmRsZXJzLmxlbmd0aCA8IDIsXG4gICAgICAoKSA9PiBgQ29weWluZyBmYWlsZWQgYmVjYXVzZSBtb3JlIHRoYW4gb25lICgke2xvYWRIYW5kbGVycy5sZW5ndGh9KSBgICtcbiAgICAgICAgICBgc2F2ZSBoYW5kbGVycyBmb3IgZGVzdGluYXRpb24gVVJMICR7ZGVzdFVSTH0uYCk7XG4gIGNvbnN0IHNhdmVIYW5kbGVyID0gc2F2ZUhhbmRsZXJzWzBdO1xuXG4gIGNvbnN0IHNvdXJjZVNjaGVtZSA9IHBhcnNlVVJMKHNvdXJjZVVSTCkuc2NoZW1lO1xuICBjb25zdCBzb3VyY2VQYXRoID0gcGFyc2VVUkwoc291cmNlVVJMKS5wYXRoO1xuICBjb25zdCBzYW1lTWVkaXVtID0gc291cmNlU2NoZW1lID09PSBwYXJzZVVSTChzb3VyY2VVUkwpLnNjaGVtZTtcblxuICBjb25zdCBtb2RlbEFydGlmYWN0cyA9IGF3YWl0IGxvYWRIYW5kbGVyLmxvYWQoKTtcblxuICAvLyBJZiBtb3Zpbmcgd2l0aGluIHRoZSBzYW1lIHN0b3JhZ2UgbWVkaXVtLCByZW1vdmUgdGhlIG9sZCBtb2RlbCBhcyBzb29uIGFzXG4gIC8vIHRoZSBsb2FkaW5nIGlzIGRvbmUuIFdpdGhvdXQgZG9pbmcgdGhpcywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY29tYmluZWRcbiAgLy8gc2l6ZSBvZiB0aGUgdHdvIG1vZGVscyB3aWxsIGNhdXNlIHRoZSBjbG9uaW5nIHRvIGZhaWwuXG4gIGlmIChkZWxldGVTb3VyY2UgJiYgc2FtZU1lZGl1bSkge1xuICAgIGF3YWl0IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0TWFuYWdlcihzb3VyY2VTY2hlbWUpXG4gICAgICAgIC5yZW1vdmVNb2RlbChzb3VyY2VQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHNhdmVSZXN1bHQgPSBhd2FpdCBzYXZlSGFuZGxlci5zYXZlKG1vZGVsQXJ0aWZhY3RzKTtcblxuICAvLyBJZiBtb3ZpbmcgYmV0d2VlbiBtZWRpdW1zLCB0aGUgZGVsZXRpb24gaXMgZG9uZSBhZnRlciB0aGUgc2F2ZSBzdWNjZWVkcy5cbiAgLy8gVGhpcyBndWFyZHMgYWdhaW5zdCB0aGUgY2FzZSBpbiB3aGljaCBzYXZpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIG1lZGl1bVxuICAvLyBmYWlscy5cbiAgaWYgKGRlbGV0ZVNvdXJjZSAmJiAhc2FtZU1lZGl1bSkge1xuICAgIGF3YWl0IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0TWFuYWdlcihzb3VyY2VTY2hlbWUpXG4gICAgICAgIC5yZW1vdmVNb2RlbChzb3VyY2VQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBzYXZlUmVzdWx0Lm1vZGVsQXJ0aWZhY3RzSW5mbztcbn1cblxuLyoqXG4gKiBMaXN0IGFsbCBtb2RlbHMgc3RvcmVkIGluIHJlZ2lzdGVyZWQgc3RvcmFnZSBtZWRpdW1zLlxuICpcbiAqIEZvciBhIHdlYiBicm93c2VyIGVudmlyb25tZW50LCB0aGUgcmVnaXN0ZXJlZCBtZWRpdW1zIGFyZSBMb2NhbCBTdG9yYWdlIGFuZFxuICogSW5kZXhlZERCLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBGaXJzdCBjcmVhdGUgYW5kIHNhdmUgYSBtb2RlbC5cbiAqIGNvbnN0IG1vZGVsID0gdGYuc2VxdWVudGlhbCgpO1xuICogbW9kZWwuYWRkKHRmLmxheWVycy5kZW5zZShcbiAqICAgICB7dW5pdHM6IDEsIGlucHV0U2hhcGU6IFsxMF0sIGFjdGl2YXRpb246ICdzaWdtb2lkJ30pKTtcbiAqIGF3YWl0IG1vZGVsLnNhdmUoJ2xvY2Fsc3RvcmFnZTovL2RlbW8vbWFuYWdlbWVudC9tb2RlbDEnKTtcbiAqXG4gKiAvLyBUaGVuIGxpc3QgZXhpc3RpbmcgbW9kZWxzLlxuICogY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGYuaW8ubGlzdE1vZGVscygpKSk7XG4gKlxuICogLy8gRGVsZXRlIHRoZSBtb2RlbC5cbiAqIGF3YWl0IHRmLmlvLnJlbW92ZU1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKlxuICogLy8gTGlzdCBtb2RlbHMgYWdhaW4uXG4gKiBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhd2FpdCB0Zi5pby5saXN0TW9kZWxzKCkpKTtcbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEEgYFByb21pc2VgIG9mIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVSTHMgb2YgZXhpc3RpbmcgbW9kZWxzIHRvXG4gKiB0aGVpciBtb2RlbCBhcnRpZmFjdHMgaW5mby4gVVJMcyBpbmNsdWRlIG1lZGl1bS1zcGVjaWZpYyBzY2hlbWVzLCBlLmcuLFxuICogICAnaW5kZXhlZGRiOi8vbXkvbW9kZWwvMScuIE1vZGVsIGFydGlmYWN0cyBpbmZvIGluY2x1ZGUgdHlwZSBvZiB0aGVcbiAqIG1vZGVsJ3MgdG9wb2xvZ3ksIGJ5dGUgc2l6ZXMgb2YgdGhlIHRvcG9sb2d5LCB3ZWlnaHRzLCBldGMuXG4gKlxuICogQGRvYyB7XG4gKiAgIGhlYWRpbmc6ICdNb2RlbHMnLFxuICogICBzdWJoZWFkaW5nOiAnTWFuYWdlbWVudCcsXG4gKiAgIG5hbWVzcGFjZTogJ2lvJyxcbiAqICAgaWdub3JlQ0k6IHRydWVcbiAqIH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlzdE1vZGVscygpOiBQcm9taXNlPHtbdXJsOiBzdHJpbmddOiBNb2RlbEFydGlmYWN0c0luZm99PiB7XG4gIGNvbnN0IHNjaGVtZXMgPSBNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5LmdldFNjaGVtZXMoKTtcbiAgY29uc3Qgb3V0OiB7W3VybDogc3RyaW5nXTogTW9kZWxBcnRpZmFjdHNJbmZvfSA9IHt9O1xuICBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWVzKSB7XG4gICAgY29uc3Qgc2NoZW1lT3V0ID1cbiAgICAgICAgYXdhaXQgTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeS5nZXRNYW5hZ2VyKHNjaGVtZSkubGlzdE1vZGVscygpO1xuICAgIGZvciAoY29uc3QgcGF0aCBpbiBzY2hlbWVPdXQpIHtcbiAgICAgIGNvbnN0IHVybCA9IHNjaGVtZSArIFVSTF9TQ0hFTUVfU1VGRklYICsgcGF0aDtcbiAgICAgIG91dFt1cmxdID0gc2NoZW1lT3V0W3BhdGhdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJlbW92ZSBhIG1vZGVsIHNwZWNpZmllZCBieSBVUkwgZnJvbSBhIHJlZ2lzdGVyZWQgc3RvcmFnZSBtZWRpdW0uXG4gKlxuICogYGBganNcbiAqIC8vIEZpcnN0IGNyZWF0ZSBhbmQgc2F2ZSBhIG1vZGVsLlxuICogY29uc3QgbW9kZWwgPSB0Zi5zZXF1ZW50aWFsKCk7XG4gKiBtb2RlbC5hZGQodGYubGF5ZXJzLmRlbnNlKFxuICogICAgIHt1bml0czogMSwgaW5wdXRTaGFwZTogWzEwXSwgYWN0aXZhdGlvbjogJ3NpZ21vaWQnfSkpO1xuICogYXdhaXQgbW9kZWwuc2F2ZSgnbG9jYWxzdG9yYWdlOi8vZGVtby9tYW5hZ2VtZW50L21vZGVsMScpO1xuICpcbiAqIC8vIFRoZW4gbGlzdCBleGlzdGluZyBtb2RlbHMuXG4gKiBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhd2FpdCB0Zi5pby5saXN0TW9kZWxzKCkpKTtcbiAqXG4gKiAvLyBEZWxldGUgdGhlIG1vZGVsLlxuICogYXdhaXQgdGYuaW8ucmVtb3ZlTW9kZWwoJ2xvY2Fsc3RvcmFnZTovL2RlbW8vbWFuYWdlbWVudC9tb2RlbDEnKTtcbiAqXG4gKiAvLyBMaXN0IG1vZGVscyBhZ2Fpbi5cbiAqIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGF3YWl0IHRmLmlvLmxpc3RNb2RlbHMoKSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHVybCBBIFVSTCB0byBhIHN0b3JlZCBtb2RlbCwgd2l0aCBhIHNjaGVtZSBwcmVmaXgsIGUuZy4sXG4gKiAgICdsb2NhbHN0b3JhZ2U6Ly9teS1tb2RlbC0xJywgJ2luZGV4ZWRkYjovL215L21vZGVsLzInLlxuICogQHJldHVybnMgTW9kZWxBcnRpZmFjdHNJbmZvIG9mIHRoZSBkZWxldGVkIG1vZGVsIChpZiBhbmQgb25seSBpZiBkZWxldGlvblxuICogICBpcyBzdWNjZXNzZnVsKS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgZGVsZXRpb24gZmFpbHMsIGUuZy4sIGlmIG5vIG1vZGVsIGV4aXN0cyBhdCBgcGF0aGAuXG4gKlxuICogQGRvYyB7XG4gKiAgIGhlYWRpbmc6ICdNb2RlbHMnLFxuICogICBzdWJoZWFkaW5nOiAnTWFuYWdlbWVudCcsXG4gKiAgIG5hbWVzcGFjZTogJ2lvJyxcbiAqICAgaWdub3JlQ0k6IHRydWVcbiAqIH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlTW9kZWwodXJsOiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz4ge1xuICBjb25zdCBzY2hlbWVBbmRQYXRoID0gcGFyc2VVUkwodXJsKTtcbiAgY29uc3QgbWFuYWdlciA9IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0TWFuYWdlcihzY2hlbWVBbmRQYXRoLnNjaGVtZSk7XG4gIHJldHVybiBtYW5hZ2VyLnJlbW92ZU1vZGVsKHNjaGVtZUFuZFBhdGgucGF0aCk7XG59XG5cbi8qKlxuICogQ29weSBhIG1vZGVsIGZyb20gb25lIFVSTCB0byBhbm90aGVyLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHM6XG4gKlxuICogMS4gQ29weWluZyB3aXRoaW4gYSBzdG9yYWdlIG1lZGl1bSwgZS5nLixcbiAqICAgIGB0Zi5pby5jb3B5TW9kZWwoJ2xvY2Fsc3RvcmFnZTovL21vZGVsLTEnLCAnbG9jYWxzdG9yYWdlOi8vbW9kZWwtMicpYFxuICogMi4gQ29weWluZyBiZXR3ZWVuIHR3byBzdG9yYWdlIG1lZGl1bXMsIGUuZy4sXG4gKiAgICBgdGYuaW8uY29weU1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9tb2RlbC0xJywgJ2luZGV4ZWRkYjovL21vZGVsLTEnKWBcbiAqXG4gKiBgYGBqc1xuICogLy8gRmlyc3QgY3JlYXRlIGFuZCBzYXZlIGEgbW9kZWwuXG4gKiBjb25zdCBtb2RlbCA9IHRmLnNlcXVlbnRpYWwoKTtcbiAqIG1vZGVsLmFkZCh0Zi5sYXllcnMuZGVuc2UoXG4gKiAgICAge3VuaXRzOiAxLCBpbnB1dFNoYXBlOiBbMTBdLCBhY3RpdmF0aW9uOiAnc2lnbW9pZCd9KSk7XG4gKiBhd2FpdCBtb2RlbC5zYXZlKCdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKlxuICogLy8gVGhlbiBsaXN0IGV4aXN0aW5nIG1vZGVscy5cbiAqIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGF3YWl0IHRmLmlvLmxpc3RNb2RlbHMoKSkpO1xuICpcbiAqIC8vIENvcHkgdGhlIG1vZGVsLCBmcm9tIExvY2FsIFN0b3JhZ2UgdG8gSW5kZXhlZERCLlxuICogYXdhaXQgdGYuaW8uY29weU1vZGVsKFxuICogICAgICdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyxcbiAqICAgICAnaW5kZXhlZGRiOi8vZGVtby9tYW5hZ2VtZW50L21vZGVsMScpO1xuICpcbiAqIC8vIExpc3QgbW9kZWxzIGFnYWluLlxuICogY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGYuaW8ubGlzdE1vZGVscygpKSk7XG4gKlxuICogLy8gUmVtb3ZlIGJvdGggbW9kZWxzLlxuICogYXdhaXQgdGYuaW8ucmVtb3ZlTW9kZWwoJ2xvY2Fsc3RvcmFnZTovL2RlbW8vbWFuYWdlbWVudC9tb2RlbDEnKTtcbiAqIGF3YWl0IHRmLmlvLnJlbW92ZU1vZGVsKCdpbmRleGVkZGI6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc291cmNlVVJMIFNvdXJjZSBVUkwgb2YgY29weWluZy5cbiAqIEBwYXJhbSBkZXN0VVJMIERlc3RpbmF0aW9uIFVSTCBvZiBjb3B5aW5nLlxuICogQHJldHVybnMgTW9kZWxBcnRpZmFjdHNJbmZvIG9mIHRoZSBjb3BpZWQgbW9kZWwgKGlmIGFuZCBvbmx5IGlmIGNvcHlpbmdcbiAqICAgaXMgc3VjY2Vzc2Z1bCkuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGNvcHlpbmcgZmFpbHMsIGUuZy4sIGlmIG5vIG1vZGVsIGV4aXN0cyBhdCBgc291cmNlVVJMYCwgb3JcbiAqICAgaWYgYG9sZFBhdGhgIGFuZCBgbmV3UGF0aGAgYXJlIGlkZW50aWNhbC5cbiAqXG4gKiBAZG9jIHtcbiAqICAgaGVhZGluZzogJ01vZGVscycsXG4gKiAgIHN1YmhlYWRpbmc6ICdNYW5hZ2VtZW50JyxcbiAqICAgbmFtZXNwYWNlOiAnaW8nLFxuICogICBpZ25vcmVDSTogdHJ1ZVxuICogfVxuICovXG5hc3luYyBmdW5jdGlvbiBjb3B5TW9kZWwoXG4gICAgc291cmNlVVJMOiBzdHJpbmcsIGRlc3RVUkw6IHN0cmluZyk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHNJbmZvPiB7XG4gIGNvbnN0IGRlbGV0ZVNvdXJjZSA9IGZhbHNlO1xuICByZXR1cm4gY2xvbmVNb2RlbEludGVybmFsKHNvdXJjZVVSTCwgZGVzdFVSTCwgZGVsZXRlU291cmNlKTtcbn1cblxuLyoqXG4gKiBNb3ZlIGEgbW9kZWwgZnJvbSBvbmUgVVJMIHRvIGFub3RoZXIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0czpcbiAqXG4gKiAxLiBNb3Zpbmcgd2l0aGluIGEgc3RvcmFnZSBtZWRpdW0sIGUuZy4sXG4gKiAgICBgdGYuaW8ubW92ZU1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9tb2RlbC0xJywgJ2xvY2Fsc3RvcmFnZTovL21vZGVsLTInKWBcbiAqIDIuIE1vdmluZyBiZXR3ZWVuIHR3byBzdG9yYWdlIG1lZGl1bXMsIGUuZy4sXG4gKiAgICBgdGYuaW8ubW92ZU1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9tb2RlbC0xJywgJ2luZGV4ZWRkYjovL21vZGVsLTEnKWBcbiAqXG4gKiBgYGBqc1xuICogLy8gRmlyc3QgY3JlYXRlIGFuZCBzYXZlIGEgbW9kZWwuXG4gKiBjb25zdCBtb2RlbCA9IHRmLnNlcXVlbnRpYWwoKTtcbiAqIG1vZGVsLmFkZCh0Zi5sYXllcnMuZGVuc2UoXG4gKiAgICAge3VuaXRzOiAxLCBpbnB1dFNoYXBlOiBbMTBdLCBhY3RpdmF0aW9uOiAnc2lnbW9pZCd9KSk7XG4gKiBhd2FpdCBtb2RlbC5zYXZlKCdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKlxuICogLy8gVGhlbiBsaXN0IGV4aXN0aW5nIG1vZGVscy5cbiAqIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGF3YWl0IHRmLmlvLmxpc3RNb2RlbHMoKSkpO1xuICpcbiAqIC8vIE1vdmUgdGhlIG1vZGVsLCBmcm9tIExvY2FsIFN0b3JhZ2UgdG8gSW5kZXhlZERCLlxuICogYXdhaXQgdGYuaW8ubW92ZU1vZGVsKFxuICogICAgICdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyxcbiAqICAgICAnaW5kZXhlZGRiOi8vZGVtby9tYW5hZ2VtZW50L21vZGVsMScpO1xuICpcbiAqIC8vIExpc3QgbW9kZWxzIGFnYWluLlxuICogY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGYuaW8ubGlzdE1vZGVscygpKSk7XG4gKlxuICogLy8gUmVtb3ZlIHRoZSBtb3ZlZCBtb2RlbC5cbiAqIGF3YWl0IHRmLmlvLnJlbW92ZU1vZGVsKCdpbmRleGVkZGI6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc291cmNlVVJMIFNvdXJjZSBVUkwgb2YgbW92aW5nLlxuICogQHBhcmFtIGRlc3RVUkwgRGVzdGluYXRpb24gVVJMIG9mIG1vdmluZy5cbiAqIEByZXR1cm5zIE1vZGVsQXJ0aWZhY3RzSW5mbyBvZiB0aGUgY29waWVkIG1vZGVsIChpZiBhbmQgb25seSBpZiBjb3B5aW5nXG4gKiAgIGlzIHN1Y2Nlc3NmdWwpLlxuICogQHRocm93cyBFcnJvciBpZiBtb3ZpbmcgZmFpbHMsIGUuZy4sIGlmIG5vIG1vZGVsIGV4aXN0cyBhdCBgc291cmNlVVJMYCwgb3JcbiAqICAgaWYgYG9sZFBhdGhgIGFuZCBgbmV3UGF0aGAgYXJlIGlkZW50aWNhbC5cbiAqXG4gKiBAZG9jIHtcbiAqICAgaGVhZGluZzogJ01vZGVscycsXG4gKiAgIHN1YmhlYWRpbmc6ICdNYW5hZ2VtZW50JyxcbiAqICAgbmFtZXNwYWNlOiAnaW8nLFxuICogICBpZ25vcmVDSTogdHJ1ZVxuICogfVxuICovXG5hc3luYyBmdW5jdGlvbiBtb3ZlTW9kZWwoXG4gICAgc291cmNlVVJMOiBzdHJpbmcsIGRlc3RVUkw6IHN0cmluZyk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHNJbmZvPiB7XG4gIGNvbnN0IGRlbGV0ZVNvdXJjZSA9IHRydWU7XG4gIHJldHVybiBjbG9uZU1vZGVsSW50ZXJuYWwoc291cmNlVVJMLCBkZXN0VVJMLCBkZWxldGVTb3VyY2UpO1xufVxuXG5leHBvcnQge21vdmVNb2RlbCwgY29weU1vZGVsLCByZW1vdmVNb2RlbCwgbGlzdE1vZGVsc307XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { BrowserIndexedDB, BrowserIndexedDBManager } from '../io/indexed_db';\nimport { BrowserLocalStorage, BrowserLocalStorageManager } from '../io/local_storage';\nimport { ModelStoreManagerRegistry } from '../io/model_management';\nimport { isTypedArrayBrowser } from './is_typed_array_browser';\nexport class PlatformBrowser {\n constructor() {\n // For setTimeoutCustom\n this.messageName = 'setTimeoutCustom';\n this.functionRefs = [];\n this.handledMessageCount = 0;\n this.hasEventListener = false;\n }\n fetch(path, init) {\n return fetch(path, init);\n }\n now() {\n return performance.now();\n }\n encode(text, encoding) {\n if (encoding !== 'utf-8' && encoding !== 'utf8') {\n throw new Error(`Browser's encoder only supports utf-8, but got ${encoding}`);\n }\n if (this.textEncoder == null) {\n this.textEncoder = new TextEncoder();\n }\n return this.textEncoder.encode(text);\n }\n decode(bytes, encoding) {\n return new TextDecoder(encoding).decode(bytes);\n }\n // If the setTimeout nesting level is greater than 5 and timeout is less\n // than 4ms, timeout will be clamped to 4ms, which hurts the perf.\n // Interleaving window.postMessage and setTimeout will trick the browser and\n // avoid the clamp.\n setTimeoutCustom(functionRef, delay) {\n if (typeof window === 'undefined' ||\n !env().getBool('USE_SETTIMEOUTCUSTOM')) {\n setTimeout(functionRef, delay);\n return;\n }\n this.functionRefs.push(functionRef);\n setTimeout(() => {\n window.postMessage({ name: this.messageName, index: this.functionRefs.length - 1 }, '*');\n }, delay);\n if (!this.hasEventListener) {\n this.hasEventListener = true;\n window.addEventListener('message', (event) => {\n if (event.source === window && event.data.name === this.messageName) {\n event.stopPropagation();\n const functionRef = this.functionRefs[event.data.index];\n functionRef();\n this.handledMessageCount++;\n if (this.handledMessageCount === this.functionRefs.length) {\n this.functionRefs = [];\n this.handledMessageCount = 0;\n }\n }\n }, true);\n }\n }\n isTypedArray(a) {\n return isTypedArrayBrowser(a);\n }\n}\nif (env().get('IS_BROWSER')) {\n env().setPlatform('browser', new PlatformBrowser());\n // Register LocalStorage IOHandler\n try {\n ModelStoreManagerRegistry.registerManager(BrowserLocalStorage.URL_SCHEME, new BrowserLocalStorageManager());\n }\n catch (err) {\n }\n // Register IndexedDB IOHandler\n try {\n ModelStoreManagerRegistry.registerManager(BrowserIndexedDB.URL_SCHEME, new BrowserIndexedDBManager());\n }\n catch (err) {\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1fYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvcGxhdGZvcm1zL3BsYXRmb3JtX2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR2pFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTdELE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBS0UsdUJBQXVCO1FBQ04sZ0JBQVcsR0FBRyxrQkFBa0IsQ0FBQztRQUMxQyxpQkFBWSxHQUFlLEVBQUUsQ0FBQztRQUM5Qix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO0lBOERuQyxDQUFDO0lBNURDLEtBQUssQ0FBQyxJQUFZLEVBQUUsSUFBa0I7UUFDcEMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxHQUFHO1FBQ0QsT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7UUFDbkMsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDWCxrREFBa0QsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNuRTtRQUNE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QGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0ICcuLi9mbGFncyc7XG5cbmltcG9ydCB7ZW52fSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQge0Jyb3dzZXJJbmRleGVkREIsIEJyb3dzZXJJbmRleGVkREJNYW5hZ2VyfSBmcm9tICcuLi9pby9pbmRleGVkX2RiJztcbmltcG9ydCB7QnJvd3NlckxvY2FsU3RvcmFnZSwgQnJvd3NlckxvY2FsU3RvcmFnZU1hbmFnZXJ9IGZyb20gJy4uL2lvL2xvY2FsX3N0b3JhZ2UnO1xuaW1wb3J0IHtNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5fSBmcm9tICcuLi9pby9tb2RlbF9tYW5hZ2VtZW50JztcblxuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnLi9wbGF0Zm9ybSc7XG5pbXBvcnQge2lzVHlwZWRBcnJheUJyb3dzZXJ9IGZyb20gJy4vaXNfdHlwZWRfYXJyYXlfYnJvd3Nlcic7XG5cbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybUJyb3dzZXIgaW1wbGVtZW50cyBQbGF0Zm9ybSB7XG4gIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYywgdGhlIGJ1aWx0LWluIGVuY29kZXIgY2FuIGRvIG9ubHkgVVRGLTggZW5jb2RpbmcuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UZXh0RW5jb2Rlci9UZXh0RW5jb2RlclxuICBwcml2YXRlIHRleHRFbmNvZGVyOiBUZXh0RW5jb2RlcjtcblxuICAvLyBGb3Igc2V0VGltZW91dEN1c3RvbVxuICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VOYW1lID0gJ3NldFRpbWVvdXRDdXN0b20nO1xuICBwcml2YXRlIGZ1bmN0aW9uUmVmczogRnVuY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIGhhbmRsZWRNZXNzYWdlQ291bnQgPSAwO1xuICBwcml2YXRlIGhhc0V2ZW50TGlzdGVuZXIgPSBmYWxzZTtcblxuICBmZXRjaChwYXRoOiBzdHJpbmcsIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gZmV0Y2gocGF0aCwgaW5pdCk7XG4gIH1cblxuICBub3coKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gIH1cblxuICBlbmNvZGUodGV4dDogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgaWYgKGVuY29kaW5nICE9PSAndXRmLTgnICYmIGVuY29kaW5nICE9PSAndXRmOCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQnJvd3NlcidzIGVuY29kZXIgb25seSBzdXBwb3J0cyB1dGYtOCwgYnV0IGdvdCAke2VuY29kaW5nfWApO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXh0RW5jb2RlciA9PSBudWxsKSB7XG4gICAgICB0aGlzLnRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRleHRFbmNvZGVyLmVuY29kZSh0ZXh0KTtcbiAgfVxuICBkZWNvZGUoYnl0ZXM6IFVpbnQ4QXJyYXksIGVuY29kaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShieXRlcyk7XG4gIH1cblxuICAvLyBJZiB0aGUgc2V0VGltZW91dCBuZXN0aW5nIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiA1IGFuZCB0aW1lb3V0IGlzIGxlc3NcbiAgLy8gdGhhbiA0bXMsIHRpbWVvdXQgd2lsbCBiZSBjbGFtcGVkIHRvIDRtcywgd2hpY2ggaHVydHMgdGhlIHBlcmYuXG4gIC8vIEludGVybGVhdmluZyB3aW5kb3cucG9zdE1lc3NhZ2UgYW5kIHNldFRpbWVvdXQgd2lsbCB0cmljayB0aGUgYnJvd3NlciBhbmRcbiAgLy8gYXZvaWQgdGhlIGNsYW1wLlxuICBzZXRUaW1lb3V0Q3VzdG9tKGZ1bmN0aW9uUmVmOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICAhZW52KCkuZ2V0Qm9vbCgnVVNFX1NFVFRJTUVPVVRDVVNUT00nKSkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvblJlZiwgZGVsYXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZnVuY3Rpb25SZWZzLnB1c2goZnVuY3Rpb25SZWYpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKFxuICAgICAgICAgIHtuYW1lOiB0aGlzLm1lc3NhZ2VOYW1lLCBpbmRleDogdGhpcy5mdW5jdGlvblJlZnMubGVuZ3RoIC0gMX0sICcqJyk7XG4gICAgfSwgZGVsYXkpO1xuXG4gICAgaWYgKCF0aGlzLmhhc0V2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuaGFzRXZlbnRMaXN0ZW5lciA9IHRydWU7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IHdpbmRvdyAmJiBldmVudC5kYXRhLm5hbWUgPT09IHRoaXMubWVzc2FnZU5hbWUpIHtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjb25zdCBmdW5jdGlvblJlZiA9IHRoaXMuZnVuY3Rpb25SZWZzW2V2ZW50LmRhdGEuaW5kZXhdO1xuICAgICAgICAgIGZ1bmN0aW9uUmVmKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVkTWVzc2FnZUNvdW50Kys7XG4gICAgICAgICAgaWYgKHRoaXMuaGFuZGxlZE1lc3NhZ2VDb3VudCA9PT0gdGhpcy5mdW5jdGlvblJlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9uUmVmcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVkTWVzc2FnZUNvdW50ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGlzVHlwZWRBcnJheShhOiB1bmtub3duKTogYSBpcyBVaW50OEFycmF5IHwgRmxvYXQzMkFycmF5IHwgSW50MzJBcnJheVxuICAgIHwgVWludDhDbGFtcGVkQXJyYXkge1xuICAgIHJldHVybiBpc1R5cGVkQXJyYXlCcm93c2VyKGEpO1xuICB9XG59XG5cbmlmIChlbnYoKS5nZXQoJ0lTX0JST1dTRVInKSkge1xuICBlbnYoKS5zZXRQbGF0Zm9ybSgnYnJvd3NlcicsIG5ldyBQbGF0Zm9ybUJyb3dzZXIoKSk7XG5cbiAgLy8gUmVnaXN0ZXIgTG9jYWxTdG9yYWdlIElPSGFuZGxlclxuICB0cnkge1xuICAgIE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkucmVnaXN0ZXJNYW5hZ2VyKFxuICAgICAgICBCcm93c2VyTG9jYWxTdG9yYWdlLlVSTF9TQ0hFTUUsIG5ldyBCcm93c2VyTG9jYWxTdG9yYWdlTWFuYWdlcigpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cblxuICAvLyBSZWdpc3RlciBJbmRleGVkREIgSU9IYW5kbGVyXG4gIHRyeSB7XG4gICAgTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeS5yZWdpc3Rlck1hbmFnZXIoXG4gICAgICAgIEJyb3dzZXJJbmRleGVkREIuVVJMX1NDSEVNRSwgbmV3IEJyb3dzZXJJbmRleGVkREJNYW5hZ2VyKCkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '../environment';\n// We are wrapping this within an object so it can be stubbed by Jasmine.\nexport const getNodeFetch = {\n // tslint:disable-next-line:no-require-imports\n importFetch: () => require('node-fetch')\n};\nlet systemFetch;\n// These getters and setters are for testing so we don't export a mutable\n// variable.\nexport function resetSystemFetch() {\n systemFetch = null;\n}\nexport function setSystemFetch(fetchFn) {\n systemFetch = fetchFn;\n}\nexport function getSystemFetch() {\n return systemFetch;\n}\nexport class PlatformNode {\n constructor() {\n // tslint:disable-next-line:no-require-imports\n this.util = require('util');\n // According to the spec, the built-in encoder can do only UTF-8 encoding.\n // https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder/TextEncoder\n this.textEncoder = new this.util.TextEncoder();\n }\n fetch(path, requestInits) {\n if (env().global.fetch != null) {\n return env().global.fetch(path, requestInits);\n }\n if (systemFetch == null) {\n systemFetch = getNodeFetch.importFetch();\n }\n return systemFetch(path, requestInits);\n }\n now() {\n const time = process.hrtime();\n return time[0] * 1000 + time[1] / 1000000;\n }\n encode(text, encoding) {\n if (encoding !== 'utf-8' && encoding !== 'utf8') {\n throw new Error(`Node built-in encoder only supports utf-8, but got ${encoding}`);\n }\n return this.textEncoder.encode(text);\n }\n decode(bytes, encoding) {\n if (bytes.length === 0) {\n return '';\n }\n return new this.util.TextDecoder(encoding).decode(bytes);\n }\n isTypedArray(a) {\n return this.util.types.isFloat32Array(a)\n || this.util.types.isInt32Array(a)\n || this.util.types.isUint8Array(a)\n || this.util.types.isUint8ClampedArray(a);\n }\n}\nif (env().get('IS_NODE') && !env().get('IS_BROWSER')) {\n env().setPlatform('node', new PlatformNode());\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1fbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvcGxhdGZvcm1zL3BsYXRmb3JtX25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR25DLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsOENBQThDO0lBQzlDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0NBQ3pDLENBQUM7QUFHRixJQUFJLFdBQW9CLENBQUM7QUFDekIseUVBQXlFO0FBQ3pFLFlBQVk7QUFDWixNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDckIsQ0FBQztBQUNELE1BQU0sVUFBVSxjQUFjLENBQUMsT0FBZ0I7SUFDN0MsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN4QixDQUFDO0FBQ0QsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sT0FBTyxZQUFZO0lBS3ZCO1FBQ0UsOENBQThDO1FBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLDBFQUEwRTtRQUMxRSwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZLEVBQUUsWUFBMEI7UUFDNUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtZQUM5QixPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3ZCLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELEdBQUc7UUFDRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7UUFDbkMsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDWCxzREFBc0QsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUN2RTtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE1BQU0sQ0FBQyxLQUFpQixFQUFFLFFBQWdCO1FBQ3hDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELFlBQVksQ0FBQyxDQUFVO1FBRXJCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztlQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2VBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7ZUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBRUQsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7SUFDcEQsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7Q0FDL0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge2Vudn0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnLi9wbGF0Zm9ybSc7XG5cbi8vIFdlIGFyZSB3cmFwcGluZyB0aGlzIHdpdGhpbiBhbiBvYmplY3Qgc28gaXQgY2FuIGJlIHN0dWJiZWQgYnkgSmFzbWluZS5cbmV4cG9ydCBjb25zdCBnZXROb2RlRmV0Y2ggPSB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1yZXF1aXJlLWltcG9ydHNcbiAgaW1wb3J0RmV0Y2g6ICgpID0+IHJlcXVpcmUoJ25vZGUtZmV0Y2gnKVxufTtcblxudHlwZSBGZXRjaEZuID0gKHVybDogc3RyaW5nLCBpbml0PzogUmVxdWVzdEluaXQpID0+IFByb21pc2U8UmVzcG9uc2U+O1xubGV0IHN5c3RlbUZldGNoOiBGZXRjaEZuO1xuLy8gVGhlc2UgZ2V0dGVycyBhbmQgc2V0dGVycyBhcmUgZm9yIHRlc3Rpbmcgc28gd2UgZG9uJ3QgZXhwb3J0IGEgbXV0YWJsZVxuLy8gdmFyaWFibGUuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRTeXN0ZW1GZXRjaCgpIHtcbiAgc3lzdGVtRmV0Y2ggPSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldFN5c3RlbUZldGNoKGZldGNoRm46IEZldGNoRm4pIHtcbiAgc3lzdGVtRmV0Y2ggPSBmZXRjaEZuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN5c3RlbUZldGNoKCk6IEZldGNoRm4ge1xuICByZXR1cm4gc3lzdGVtRmV0Y2g7XG59XG5cbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybU5vZGUgaW1wbGVtZW50cyBQbGF0Zm9ybSB7XG4gIHByaXZhdGUgdGV4dEVuY29kZXI6IFRleHRFbmNvZGVyO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIHV0aWw6IGFueTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgdGhpcy51dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYywgdGhlIGJ1aWx0LWluIGVuY29kZXIgY2FuIGRvIG9ubHkgVVRGLTggZW5jb2RpbmcuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHRFbmNvZGVyL1RleHRFbmNvZGVyXG4gICAgdGhpcy50ZXh0RW5jb2RlciA9IG5ldyB0aGlzLnV0aWwuVGV4dEVuY29kZXIoKTtcbiAgfVxuXG4gIGZldGNoKHBhdGg6IHN0cmluZywgcmVxdWVzdEluaXRzPzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKGVudigpLmdsb2JhbC5mZXRjaCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZW52KCkuZ2xvYmFsLmZldGNoKHBhdGgsIHJlcXVlc3RJbml0cyk7XG4gICAgfVxuXG4gICAgaWYgKHN5c3RlbUZldGNoID09IG51bGwpIHtcbiAgICAgIHN5c3RlbUZldGNoID0gZ2V0Tm9kZUZldGNoLmltcG9ydEZldGNoKCk7XG4gICAgfVxuICAgIHJldHVybiBzeXN0ZW1GZXRjaChwYXRoLCByZXF1ZXN0SW5pdHMpO1xuICB9XG5cbiAgbm93KCk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgcmV0dXJuIHRpbWVbMF0gKiAxMDAwICsgdGltZVsxXSAvIDEwMDAwMDA7XG4gIH1cblxuICBlbmNvZGUodGV4dDogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgaWYgKGVuY29kaW5nICE9PSAndXRmLTgnICYmIGVuY29kaW5nICE9PSAndXRmOCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTm9kZSBidWlsdC1pbiBlbmNvZGVyIG9ubHkgc3VwcG9ydHMgdXRmLTgsIGJ1dCBnb3QgJHtlbmNvZGluZ31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGV4dEVuY29kZXIuZW5jb2RlKHRleHQpO1xuICB9XG4gIGRlY29kZShieXRlczogVWludDhBcnJheSwgZW5jb2Rpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMudXRpbC5UZXh0RGVjb2RlcihlbmNvZGluZykuZGVjb2RlKGJ5dGVzKTtcbiAgfVxuICBpc1R5cGVkQXJyYXkoYTogdW5rbm93bik6IGEgaXMgRmxvYXQzMkFycmF5IHwgSW50MzJBcnJheSB8IFVpbnQ4QXJyYXlcbiAgICB8IFVpbnQ4Q2xhbXBlZEFycmF5IHtcbiAgICByZXR1cm4gdGhpcy51dGlsLnR5cGVzLmlzRmxvYXQzMkFycmF5KGEpXG4gICAgICB8fCB0aGlzLnV0aWwudHlwZXMuaXNJbnQzMkFycmF5KGEpXG4gICAgICB8fCB0aGlzLnV0aWwudHlwZXMuaXNVaW50OEFycmF5KGEpXG4gICAgICB8fCB0aGlzLnV0aWwudHlwZXMuaXNVaW50OENsYW1wZWRBcnJheShhKTtcbiAgfVxufVxuXG5pZiAoZW52KCkuZ2V0KCdJU19OT0RFJykgJiYgIWVudigpLmdldCgnSVNfQlJPV1NFUicpKSB7XG4gIGVudigpLnNldFBsYXRmb3JtKCdub2RlJywgbmV3IFBsYXRmb3JtTm9kZSgpKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TensorBuffer } from '../tensor';\nimport * as util from '../util';\n/**\n * Creates an empty `tf.TensorBuffer` with the specified `shape` and `dtype`.\n *\n * The values are stored in CPU as `TypedArray`. Fill the buffer using\n * `buffer.set()`, or by modifying directly `buffer.values`.\n *\n * When done, call `buffer.toTensor()` to get an immutable `tf.Tensor` with\n * those values.\n *\n * ```js\n * // Create a buffer and set values at particular indices.\n * const buffer = tf.buffer([2, 2]);\n * buffer.set(3, 0, 0);\n * buffer.set(5, 1, 0);\n *\n * // Convert the buffer back to a tensor.\n * buffer.toTensor().print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The dtype of the buffer. Defaults to 'float32'.\n * @param values The values of the buffer as `TypedArray`. Defaults to\n * zeros.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function buffer(shape, dtype = 'float32', values) {\n dtype = dtype || 'float32';\n util.assertNonNegativeIntegerDimensions(shape);\n return new TensorBuffer(shape, dtype, values);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYnVmZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdkMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUNsQixLQUFrQixFQUFFLFFBQVcsU0FBYyxFQUM3QyxNQUF1QjtJQUN6QixLQUFLLEdBQUcsS0FBSyxJQUFJLFNBQWMsQ0FBQztJQUNoQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsT0FBTyxJQUFJLFlBQVksQ0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yQnVmZmVyfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtEYXRhVHlwZSwgRGF0YVR5cGVNYXAsIFJhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZW1wdHkgYHRmLlRlbnNvckJ1ZmZlcmAgd2l0aCB0aGUgc3BlY2lmaWVkIGBzaGFwZWAgYW5kIGBkdHlwZWAuXG4gKlxuICogVGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIENQVSBhcyBgVHlwZWRBcnJheWAuIEZpbGwgdGhlIGJ1ZmZlciB1c2luZ1xuICogYGJ1ZmZlci5zZXQoKWAsIG9yIGJ5IG1vZGlmeWluZyBkaXJlY3RseSBgYnVmZmVyLnZhbHVlc2AuXG4gKlxuICogV2hlbiBkb25lLCBjYWxsIGBidWZmZXIudG9UZW5zb3IoKWAgdG8gZ2V0IGFuIGltbXV0YWJsZSBgdGYuVGVuc29yYCB3aXRoXG4gKiB0aG9zZSB2YWx1ZXMuXG4gKlxuICogYGBganNcbiAqIC8vIENyZWF0ZSBhIGJ1ZmZlciBhbmQgc2V0IHZhbHVlcyBhdCBwYXJ0aWN1bGFyIGluZGljZXMuXG4gKiBjb25zdCBidWZmZXIgPSB0Zi5idWZmZXIoWzIsIDJdKTtcbiAqIGJ1ZmZlci5zZXQoMywgMCwgMCk7XG4gKiBidWZmZXIuc2V0KDUsIDEsIDApO1xuICpcbiAqIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciBiYWNrIHRvIGEgdGVuc29yLlxuICogYnVmZmVyLnRvVGVuc29yKCkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSBkdHlwZSBUaGUgZHR5cGUgb2YgdGhlIGJ1ZmZlci4gRGVmYXVsdHMgdG8gJ2Zsb2F0MzInLlxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIG9mIHRoZSBidWZmZXIgYXMgYFR5cGVkQXJyYXlgLiBEZWZhdWx0cyB0b1xuICogemVyb3MuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyPFIgZXh0ZW5kcyBSYW5rLCBEIGV4dGVuZHMgRGF0YVR5cGUgPSAnZmxvYXQzMic+KFxuICAgIHNoYXBlOiBTaGFwZU1hcFtSXSwgZHR5cGU6IEQgPSAnZmxvYXQzMicgYXMgRCxcbiAgICB2YWx1ZXM/OiBEYXRhVHlwZU1hcFtEXSk6IFRlbnNvckJ1ZmZlcjxSLCBEPiB7XG4gIGR0eXBlID0gZHR5cGUgfHwgJ2Zsb2F0MzInIGFzIEQ7XG4gIHV0aWwuYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG4gIHJldHVybiBuZXcgVGVuc29yQnVmZmVyPFIsIEQ+KHNoYXBlLCBkdHlwZSwgdmFsdWVzKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cast } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Casts a `tf.Tensor` to a new dtype.\n *\n * ```js\n * const x = tf.tensor1d([1.5, 2.5, 3]);\n * tf.cast(x, 'int32').print();\n * ```\n * @param x The input tensor to be casted.\n * @param dtype The dtype to cast the input tensor to.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction cast_(x, dtype) {\n const $x = convertToTensor(x, 'x', 'cast');\n // Sanity checks.\n if (!util.isValidDtype(dtype)) {\n throw new Error(`Failed to cast to unknown dtype ${dtype}`);\n }\n if (dtype === 'string' && $x.dtype !== 'string' ||\n dtype !== 'string' && $x.dtype === 'string') {\n throw new Error('Only strings can be casted to strings');\n }\n const inputs = { x: $x };\n const attrs = { dtype };\n return ENGINE.runKernel(Cast, inputs, attrs);\n}\nexport const cast = /* @__PURE__ */ op({ cast_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Nhc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxLQUFLLENBQW1CLENBQWUsRUFBRSxLQUFlO0lBQy9ELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLGlCQUFpQjtJQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsSUFBSSxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUMzQyxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztLQUMxRDtJQUVELE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFjLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFFakMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q2FzdCwgQ2FzdEF0dHJzLCBDYXN0SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7RGF0YVR5cGUsIFRlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDYXN0cyBhIGB0Zi5UZW5zb3JgIHRvIGEgbmV3IGR0eXBlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEuNSwgMi41LCAzXSk7XG4gKiB0Zi5jYXN0KHgsICdpbnQzMicpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IgdG8gYmUgY2FzdGVkLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkdHlwZSB0byBjYXN0IHRoZSBpbnB1dCB0ZW5zb3IgdG8uXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gY2FzdF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlLCBkdHlwZTogRGF0YVR5cGUpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY2FzdCcpO1xuXG4gIC8vIFNhbml0eSBjaGVja3MuXG4gIGlmICghdXRpbC5pc1ZhbGlkRHR5cGUoZHR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY2FzdCB0byB1bmtub3duIGR0eXBlICR7ZHR5cGV9YCk7XG4gIH1cbiAgaWYgKGR0eXBlID09PSAnc3RyaW5nJyAmJiAkeC5kdHlwZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgIGR0eXBlICE9PSAnc3RyaW5nJyAmJiAkeC5kdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgc3RyaW5ncyBjYW4gYmUgY2FzdGVkIHRvIHN0cmluZ3MnKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogQ2FzdElucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBDYXN0QXR0cnMgPSB7ZHR5cGV9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgQ2FzdCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBjYXN0ID0gLyogQF9fUFVSRV9fICovIG9wKHtjYXN0X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Identity } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a new tensor with the same values and shape as the specified\n * tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n *\n * x.clone().print();\n * ```\n *\n * @param x The tensor to clone.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction clone_(x) {\n const $x = convertToTensor(x, 'x', 'clone', 'string_or_numeric');\n const inputs = { x: $x };\n // Note this op is called tf.identity in python. Hence the kernel name used\n // here.\n return ENGINE.runKernel(Identity, inputs);\n}\nexport const clone = /* @__PURE__ */ op({ clone_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9jbG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFHekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsTUFBTSxDQUFtQixDQUFlO0lBQy9DLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV2QywyRUFBMkU7SUFDM0UsUUFBUTtJQUNSLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtJZGVudGl0eSwgSWRlbnRpdHlJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZW5zb3Igd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYW5kIHNoYXBlIGFzIHRoZSBzcGVjaWZpZWRcbiAqIHRlbnNvci5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcihbMSwgMl0pO1xuICpcbiAqIHguY2xvbmUoKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIHRlbnNvciB0byBjbG9uZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGNsb25lXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY2xvbmUnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgY29uc3QgaW5wdXRzOiBJZGVudGl0eUlucHV0cyA9IHt4OiAkeH07XG5cbiAgLy8gTm90ZSB0aGlzIG9wIGlzIGNhbGxlZCB0Zi5pZGVudGl0eSBpbiBweXRob24uIEhlbmNlIHRoZSBrZXJuZWwgbmFtZSB1c2VkXG4gIC8vIGhlcmUuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKElkZW50aXR5LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBjbG9uZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y2xvbmVffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Prints information about the `tf.Tensor` including its data.\n *\n * ```js\n * const verbose = true;\n * tf.tensor2d([1, 2, 3, 4], [2, 2]).print(verbose);\n * ```\n * @param x The tensor to be printed.\n * @param verbose Whether to print verbose information about the ` Tensor`,\n * including dtype and size.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function print(x, verbose = false) {\n console.log(x.toString(verbose));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wcmludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFtQixDQUFJLEVBQUUsT0FBTyxHQUFHLEtBQUs7SUFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5cbi8qKlxuICogUHJpbnRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgdGYuVGVuc29yYCBpbmNsdWRpbmcgaXRzIGRhdGEuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHZlcmJvc2UgPSB0cnVlO1xuICogdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pLnByaW50KHZlcmJvc2UpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgdGVuc29yIHRvIGJlIHByaW50ZWQuXG4gKiBAcGFyYW0gdmVyYm9zZSBXaGV0aGVyIHRvIHByaW50IHZlcmJvc2UgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGAgVGVuc29yYCxcbiAqIGluY2x1ZGluZyBkdHlwZSBhbmQgc2l6ZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludDxUIGV4dGVuZHMgVGVuc29yPih4OiBULCB2ZXJib3NlID0gZmFsc2UpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coeC50b1N0cmluZyh2ZXJib3NlKSk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Required side effectful code for tfjs-core\n// Set up Engine and ENV\nimport { getOrMakeEngine } from './engine';\ngetOrMakeEngine();\n// Register backend-agnostic flags.\nimport './flags';\n// Register platforms\nimport './platforms/platform_browser';\nimport './platforms/platform_node';\n// Set up OpHandler\nimport { buffer } from './ops/buffer';\nimport { cast } from './ops/cast';\nimport { clone } from './ops/clone';\nimport { print } from './ops/print';\nimport { setOpHandler } from './tensor';\nconst opHandler = {\n buffer,\n cast,\n clone,\n print\n};\nsetOpHandler(opHandler);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9zaWRlX2VmZmVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2Jhc2Vfc2lkZV9lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILDZDQUE2QztBQUU3Qyx3QkFBd0I7QUFDeEIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN6QyxlQUFlLEVBQUUsQ0FBQztBQUVsQixtQ0FBbUM7QUFDbkMsT0FBTyxTQUFTLENBQUM7QUFDakIscUJBQXFCO0FBQ3JCLE9BQU8sOEJBQThCLENBQUM7QUFDdEMsT0FBTywyQkFBMkIsQ0FBQztBQUVuQyxtQkFBbUI7QUFDbkIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQVksWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE1BQU0sU0FBUyxHQUFjO0lBQzNCLE1BQU07SUFDTixJQUFJO0lBQ0osS0FBSztJQUNMLEtBQUs7Q0FDTixDQUFDO0FBQ0YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBSZXF1aXJlZCBzaWRlIGVmZmVjdGZ1bCBjb2RlIGZvciB0ZmpzLWNvcmVcblxuLy8gU2V0IHVwIEVuZ2luZSBhbmQgRU5WXG5pbXBvcnQge2dldE9yTWFrZUVuZ2luZX0gZnJvbSAnLi9lbmdpbmUnO1xuZ2V0T3JNYWtlRW5naW5lKCk7XG5cbi8vIFJlZ2lzdGVyIGJhY2tlbmQtYWdub3N0aWMgZmxhZ3MuXG5pbXBvcnQgJy4vZmxhZ3MnO1xuLy8gUmVnaXN0ZXIgcGxhdGZvcm1zXG5pbXBvcnQgJy4vcGxhdGZvcm1zL3BsYXRmb3JtX2Jyb3dzZXInO1xuaW1wb3J0ICcuL3BsYXRmb3Jtcy9wbGF0Zm9ybV9ub2RlJztcblxuLy8gU2V0IHVwIE9wSGFuZGxlclxuaW1wb3J0IHtidWZmZXJ9IGZyb20gJy4vb3BzL2J1ZmZlcic7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vb3BzL2Nhc3QnO1xuaW1wb3J0IHtjbG9uZX0gZnJvbSAnLi9vcHMvY2xvbmUnO1xuaW1wb3J0IHtwcmludH0gZnJvbSAnLi9vcHMvcHJpbnQnO1xuaW1wb3J0IHtPcEhhbmRsZXIsIHNldE9wSGFuZGxlcn0gZnJvbSAnLi90ZW5zb3InO1xuY29uc3Qgb3BIYW5kbGVyOiBPcEhhbmRsZXIgPSB7XG4gIGJ1ZmZlcixcbiAgY2FzdCxcbiAgY2xvbmUsXG4gIHByaW50XG59O1xuc2V0T3BIYW5kbGVyKG9wSGFuZGxlcik7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Add } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Adds two `tf.Tensor`s element-wise, A + B. Supports broadcasting.\n *\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.tensor1d([10, 20, 30, 40]);\n *\n * a.add(b).print(); // or tf.add(a, b)\n * ```\n *\n * ```js\n * // Broadcast add a with b.\n * const a = tf.scalar(5);\n * const b = tf.tensor1d([10, 20, 30, 40]);\n *\n * a.add(b).print(); // or tf.add(a, b)\n * ```\n * @param a The first `tf.Tensor` to add.\n * @param b The second `tf.Tensor` to add. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction add_(a, b) {\n let $a = convertToTensor(a, 'a', 'add');\n let $b = convertToTensor(b, 'b', 'add');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Add, inputs);\n}\nexport const add = /* @__PURE__ */ op({ add_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYWRkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsSUFBSSxDQUFtQixDQUFvQixFQUFFLENBQW9CO0lBQ3hFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FkZCwgQWRkSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHttYWtlVHlwZXNNYXRjaH0gZnJvbSAnLi4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEFkZHMgdHdvIGB0Zi5UZW5zb3JgcyBlbGVtZW50LXdpc2UsIEEgKyBCLiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMTAsIDIwLCAzMCwgNDBdKTtcbiAqXG4gKiBhLmFkZChiKS5wcmludCgpOyAgLy8gb3IgdGYuYWRkKGEsIGIpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gQnJvYWRjYXN0IGFkZCBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi5zY2FsYXIoNSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzEwLCAyMCwgMzAsIDQwXSk7XG4gKlxuICogYS5hZGQoYikucHJpbnQoKTsgIC8vIG9yIHRmLmFkZChhLCBiKVxuICogYGBgXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgYHRmLlRlbnNvcmAgdG8gYWRkLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBgdGYuVGVuc29yYCB0byBhZGQuIE11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIGBhYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdBcml0aG1ldGljJ31cbiAqL1xuZnVuY3Rpb24gYWRkXzxUIGV4dGVuZHMgVGVuc29yPihhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2FkZCcpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnYWRkJyk7XG4gIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICBjb25zdCBpbnB1dHM6IEFkZElucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEFkZCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgYWRkID0gLyogQF9fUFVSRV9fICovIG9wKHthZGRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { FloorDiv } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting.\n * The result is rounded with floor function.\n *\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.floorDiv(b).print(); // or tf.div(a, b)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n *\n * a.floorDiv(b).print(); // or tf.floorDiv(a, b)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction floorDiv_(a, b) {\n let $a = convertToTensor(a, 'a', 'floorDiv');\n let $b = convertToTensor(b, 'b', 'floorDiv');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(FloorDiv, inputs);\n}\nexport const floorDiv = /* @__PURE__ */ op({ floorDiv_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3JEaXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9mbG9vckRpdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFHekQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsU0FBUyxTQUFTLENBQ2QsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1QyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3QyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3QyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRTlDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtGbG9vckRpdiwgRmxvb3JEaXZJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogRGl2aWRlcyB0d28gYHRmLlRlbnNvcmBzIGVsZW1lbnQtd2lzZSwgQSAvIEIuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqIFRoZSByZXN1bHQgaXMgcm91bmRlZCB3aXRoIGZsb29yIGZ1bmN0aW9uLlxuICpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCA0LCA5LCAxNl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKlxuICogYS5mbG9vckRpdihiKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2KGEsIGIpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gQnJvYWRjYXN0IGRpdiBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMiwgNCwgNiwgOF0pO1xuICogY29uc3QgYiA9IHRmLnNjYWxhcigyKTtcbiAqXG4gKiBhLmZsb29yRGl2KGIpLnByaW50KCk7ICAvLyBvciB0Zi5mbG9vckRpdihhLCBiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvciBhcyB0aGUgbnVtZXJhdG9yLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCB0ZW5zb3IgYXMgdGhlIGRlbm9taW5hdG9yLiBNdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXNcbiAqIGBhYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdBcml0aG1ldGljJ31cbiAqL1xuZnVuY3Rpb24gZmxvb3JEaXZfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnZmxvb3JEaXYnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2Zsb29yRGl2Jyk7XG4gIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICBjb25zdCBpbnB1dHM6IEZsb29yRGl2SW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRmxvb3JEaXYsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGZsb29yRGl2ID0gLyogQF9fUFVSRV9fICovIG9wKHtmbG9vckRpdl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { RealDiv } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { floorDiv } from './floorDiv';\nimport { op } from './operation';\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.div(b).print(); // or tf.div(a, b)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n *\n * a.div(b).print(); // or tf.div(a, b)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction div_(a, b) {\n let $a = convertToTensor(a, 'a', 'div');\n let $b = convertToTensor(b, 'b', 'div');\n [$a, $b] = makeTypesMatch($a, $b);\n if ($a.dtype === 'int32' && $b.dtype === 'int32') {\n return floorDiv($a, $b);\n }\n const inputs = { a: $a, b: $b };\n const attrs = {};\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(RealDiv, inputs, attrs);\n}\nexport const div = /* @__PURE__ */ op({ div_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZGl2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE9BQU8sRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUd2RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxTQUFTLElBQUksQ0FBbUIsQ0FBb0IsRUFBRSxDQUFvQjtJQUN4RSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDaEQsT0FBTyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRWpCLDBEQUEwRDtJQUMxRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUNQLE1BQW1DLEVBQUUsS0FBSyxDQUFNLENBQUM7QUFDM0UsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JlYWxEaXYsIFJlYWxEaXZJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Zsb29yRGl2fSBmcm9tICcuL2Zsb29yRGl2JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBEaXZpZGVzIHR3byBgdGYuVGVuc29yYHMgZWxlbWVudC13aXNlLCBBIC8gQi4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDQsIDksIDE2XSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqXG4gKiBhLmRpdihiKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2KGEsIGIpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gQnJvYWRjYXN0IGRpdiBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMiwgNCwgNiwgOF0pO1xuICogY29uc3QgYiA9IHRmLnNjYWxhcigyKTtcbiAqXG4gKiBhLmRpdihiKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2KGEsIGIpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgdGVuc29yIGFzIHRoZSBudW1lcmF0b3IuXG4gKiBAcGFyYW0gYiBUaGUgc2Vjb25kIHRlbnNvciBhcyB0aGUgZGVub21pbmF0b3IuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhc1xuICogYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0FyaXRobWV0aWMnfVxuICovXG5mdW5jdGlvbiBkaXZfPFQgZXh0ZW5kcyBUZW5zb3I+KGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnZGl2Jyk7XG4gIGxldCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdkaXYnKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGlmICgkYS5kdHlwZSA9PT0gJ2ludDMyJyAmJiAkYi5kdHlwZSA9PT0gJ2ludDMyJykge1xuICAgIHJldHVybiBmbG9vckRpdigkYSwgJGIpO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBSZWFsRGl2SW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG4gIGNvbnN0IGF0dHJzID0ge307XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChSZWFsRGl2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCwgYXR0cnMpIGFzIFQ7XG59XG5cbmV4cG9ydCBjb25zdCBkaXYgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2Rpdl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Multiply } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Multiplies two `tf.Tensor`s element-wise, A * B. Supports broadcasting.\n *\n * We also expose `tf.mulStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.tensor1d([2, 3, 4, 5]);\n *\n * a.mul(b).print(); // or tf.mul(a, b)\n * ```\n *\n * ```js\n * // Broadcast mul a with b.\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.scalar(5);\n *\n * a.mul(b).print(); // or tf.mul(a, b)\n * ```\n * @param a The first tensor to multiply.\n * @param b The second tensor to multiply. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction mul_(a, b) {\n let $a = convertToTensor(a, 'a', 'mul');\n let $b = convertToTensor(b, 'b', 'mul');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Multiply, inputs);\n}\nexport const mul = /* @__PURE__ */ op({ mul_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbXVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILFNBQVMsSUFBSSxDQUFtQixDQUFvQixFQUFFLENBQW9CO0lBQ3hFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQW1CLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFOUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge011bHRpcGx5LCBNdWx0aXBseUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBgdGYuVGVuc29yYHMgZWxlbWVudC13aXNlLCBBICogQi4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIFdlIGFsc28gZXhwb3NlIGB0Zi5tdWxTdHJpY3RgIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBvcCBhbmRcbiAqIGFzc2VydHMgdGhhdCBgYWAgYW5kIGBiYCBhcmUgdGhlIHNhbWUgc2hhcGUgKGRvZXMgbm90IGJyb2FkY2FzdCkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsyLCAzLCA0LCA1XSk7XG4gKlxuICogYS5tdWwoYikucHJpbnQoKTsgIC8vIG9yIHRmLm11bChhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBtdWwgYSB3aXRoIGIuXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqIGNvbnN0IGIgPSB0Zi5zY2FsYXIoNSk7XG4gKlxuICogYS5tdWwoYikucHJpbnQoKTsgIC8vIG9yIHRmLm11bChhLCBiKVxuICogYGBgXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgdGVuc29yIHRvIG11bHRpcGx5LlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCB0ZW5zb3IgdG8gbXVsdGlwbHkuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIG11bF88VCBleHRlbmRzIFRlbnNvcj4oYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdtdWwnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ211bCcpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgY29uc3QgaW5wdXRzOiBNdWx0aXBseUlucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKE11bHRpcGx5LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgbXVsID0gLyogQF9fUFVSRV9fICovIG9wKHttdWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sqrt } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes square root of the input `tf.Tensor` element-wise: `y = sqrt(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 4, -1]);\n *\n * x.sqrt().print(); // or tf.sqrt(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sqrt_(x) {\n const $x = convertToTensor(x, 'x', 'sqrt', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sqrt, inputs);\n}\nexport const sqrt = /* @__PURE__ */ op({ sqrt_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NxcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEQsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1NxcnQsIFNxcnRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgc3F1YXJlIHJvb3Qgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYHkgPSBzcXJ0KHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDQsIC0xXSk7XG4gKlxuICogeC5zcXJ0KCkucHJpbnQoKTsgIC8vIG9yIHRmLnNxcnQoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gc3FydF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3NxcnQnLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogU3FydElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoU3FydCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IHNxcnQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NxcnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes square of `x` element-wise: `x ^ 2`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.sqrt(2), -1]);\n *\n * x.square().print(); // or tf.square(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction square_(x) {\n const $x = convertToTensor(x, 'x', 'square');\n const attrs = {};\n return ENGINE.runKernel('Square', { x: $x }, attrs);\n}\nexport const square = /* @__PURE__ */ op({ square_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3F1YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3F1YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLE9BQU8sQ0FBbUIsQ0FBZTtJQUNoRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDakIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBzcXVhcmUgb2YgYHhgIGVsZW1lbnQtd2lzZTogYHggXiAyYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIE1hdGguc3FydCgyKSwgLTFdKTtcbiAqXG4gKiB4LnNxdWFyZSgpLnByaW50KCk7ICAvLyBvciB0Zi5zcXVhcmUoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IFRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gc3F1YXJlXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3F1YXJlJyk7XG4gIGNvbnN0IGF0dHJzID0ge307XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKCdTcXVhcmUnLCB7eDogJHh9LCBhdHRycyk7XG59XG5cbmV4cG9ydCBjb25zdCBzcXVhcmUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NxdWFyZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ZerosLike } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a `tf.Tensor` with all elements set to 0 with the same shape as the\n * given tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n * tf.zerosLike(x).print();\n * ```\n *\n * @param x The tensor of required shape.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction zerosLike_(x) {\n const $x = convertToTensor(x, 'x', 'zerosLike');\n const inputs = { x: $x };\n return ENGINE.runKernel(ZerosLike, inputs);\n}\nexport const zerosLike = /* @__PURE__ */ op({ zerosLike_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVyb3NfbGlrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3plcm9zX2xpa2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBRzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsVUFBVSxDQUFtQixDQUFlO0lBQ25ELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sTUFBTSxHQUFvQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUN4QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7WmVyb3NMaWtlLCBaZXJvc0xpa2VJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggYWxsIGVsZW1lbnRzIHNldCB0byAwIHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgdGhlXG4gKiBnaXZlbiB0ZW5zb3IuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IoWzEsIDJdKTtcbiAqIHRmLnplcm9zTGlrZSh4KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIHRlbnNvciBvZiByZXF1aXJlZCBzaGFwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIHplcm9zTGlrZV88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3plcm9zTGlrZScpO1xuICBjb25zdCBpbnB1dHM6IFplcm9zTGlrZUlucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFplcm9zTGlrZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IHplcm9zTGlrZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7emVyb3NMaWtlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from './engine';\nimport { Tensor, Variable } from './tensor';\nimport { convertToTensor, convertToTensorArray } from './tensor_util_env';\nimport * as util from './util';\n/**\n * Provided `f(x)`, returns another function `g(x, dy?)`, which gives the\n * gradient of `f(x)` with respect to `x`.\n *\n * If `dy` is provided, the gradient of `f(x).mul(dy).sum()` with respect to\n * `x` is computed instead. `f(x)` must take a single tensor `x` and return a\n * single tensor `y`. If `f()` takes multiple inputs, use `tf.grads` instead.\n *\n * ```js\n * // f(x) = x ^ 2\n * const f = x => x.square();\n * // f'(x) = 2x\n * const g = tf.grad(f);\n *\n * const x = tf.tensor1d([2, 3]);\n * g(x).print();\n * ```\n *\n * ```js\n * // f(x) = x ^ 3\n * const f = x => x.pow(tf.scalar(3, 'int32'));\n * // f'(x) = 3x ^ 2\n * const g = tf.grad(f);\n * // f''(x) = 6x\n * const gg = tf.grad(g);\n *\n * const x = tf.tensor1d([2, 3]);\n * gg(x).print();\n * ```\n *\n * @param f The function f(x), to compute gradient for.\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction grad(f) {\n util.assert(util.isFunction(f), () => 'The f passed in grad(f) must be a function');\n return (x, dy) => {\n // x can be of any dtype, thus null as the last argument.\n const $x = convertToTensor(x, 'x', 'tf.grad', 'string_or_numeric');\n const $dy = (dy != null) ? convertToTensor(dy, 'dy', 'tf.grad') : null;\n return ENGINE.tidy(() => {\n const { value, grads } = ENGINE.gradients(() => f($x), [$x], $dy);\n if ($dy != null) {\n util.assertShapesMatch(value.shape, $dy.shape, 'The shape of dy passed in grad(f)(x, dy) must match the shape ' +\n 'returned by f(x)');\n }\n checkGrads(grads);\n return grads[0];\n });\n };\n}\n/**\n * Provided `f(x1, x2,...)`, returns another function `g([x1, x2,...], dy?)`,\n * which gives an array of gradients of `f()` with respect to each input\n * [`x1`,`x2`,...].\n *\n * If `dy` is passed when calling `g()`, the gradient of\n * `f(x1,...).mul(dy).sum()` with respect to each input is computed instead.\n * The provided `f` must take one or more tensors and return a single tensor\n * `y`. If `f()` takes a single input, we recommend using `tf.grad` instead.\n *\n * ```js\n * // f(a, b) = a * b\n * const f = (a, b) => a.mul(b);\n * // df / da = b, df / db = a\n * const g = tf.grads(f);\n *\n * const a = tf.tensor1d([2, 3]);\n * const b = tf.tensor1d([-2, -3]);\n * const [da, db] = g([a, b]);\n * console.log('da');\n * da.print();\n * console.log('db');\n * db.print();\n * ```\n *\n * @param f The function `f(x1, x2,...)` to compute gradients for.\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction grads(f) {\n util.assert(util.isFunction(f), () => 'The f passed in grads(f) must be a function');\n return (args, dy) => {\n util.assert(Array.isArray(args), () => 'The args passed in grads(f)(args) must be an array ' +\n 'of `Tensor`s or `TensorLike`s');\n // args can be of any dtype, thus null as the last argument.\n const $args = convertToTensorArray(args, 'args', 'tf.grads', 'string_or_numeric');\n const $dy = (dy != null) ? convertToTensor(dy, 'dy', 'tf.grads') : null;\n return ENGINE.tidy(() => {\n const { value, grads } = ENGINE.gradients(() => f(...$args), $args, $dy);\n if ($dy != null) {\n util.assertShapesMatch(value.shape, $dy.shape, 'The shape of dy passed in grads(f)([x1,...], dy) must ' +\n 'match the shape returned by f([x1,...])');\n }\n checkGrads(grads);\n return grads;\n });\n };\n}\n/**\n * Like `tf.grad`, but also returns the value of `f()`. Useful when `f()`\n * returns a metric you want to show.\n *\n * The result is a rich object with the following properties:\n * - grad: The gradient of `f(x)` w.r.t. `x` (result of `tf.grad`).\n * - value: The value returned by `f(x)`.\n *\n * ```js\n * // f(x) = x ^ 2\n * const f = x => x.square();\n * // f'(x) = 2x\n * const g = tf.valueAndGrad(f);\n *\n * const x = tf.tensor1d([2, 3]);\n * const {value, grad} = g(x);\n *\n * console.log('value');\n * value.print();\n * console.log('grad');\n * grad.print();\n * ```\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction valueAndGrad(f) {\n util.assert(util.isFunction(f), () => 'The f passed in valueAndGrad(f) must be a function');\n return (x, dy) => {\n util.assert(x instanceof Tensor, () => 'The x passed in valueAndGrad(f)(x) must be a tensor');\n util.assert(dy == null || dy instanceof Tensor, () => 'The dy passed in valueAndGrad(f)(x, dy) must be a tensor');\n const { grads, value } = ENGINE.gradients(() => f(x), [x], dy);\n checkGrads(grads);\n return { grad: grads[0], value };\n };\n}\n/**\n * Like `tf.grads`, but returns also the value of `f()`. Useful when `f()`\n * returns a metric you want to show.\n *\n * The result is a rich object with the following properties:\n * - grads: The gradients of `f()` w.r.t. each input (result of `tf.grads`).\n * - value: The value returned by `f(x)`.\n *\n * ```js\n * // f(a, b) = a * b\n * const f = (a, b) => a.mul(b);\n * // df/da = b, df/db = a\n * const g = tf.valueAndGrads(f);\n *\n * const a = tf.tensor1d([2, 3]);\n * const b = tf.tensor1d([-2, -3]);\n * const {value, grads} = g([a, b]);\n *\n * const [da, db] = grads;\n *\n * console.log('value');\n * value.print();\n *\n * console.log('da');\n * da.print();\n * console.log('db');\n * db.print();\n * ```\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction valueAndGrads(f) {\n util.assert(util.isFunction(f), () => 'The f passed in valueAndGrads(f) must be a function');\n return (args, dy) => {\n util.assert(Array.isArray(args) && args.every(arg => arg instanceof Tensor), () => 'The args passed in valueAndGrads(f)(args) must be array of ' +\n 'tensors');\n util.assert(dy == null || dy instanceof Tensor, () => 'The dy passed in valueAndGrads(f)(args, dy) must be a tensor');\n const res = ENGINE.gradients(() => f(...args), args, dy);\n if (dy != null) {\n util.assertShapesMatch(res.value.shape, dy.shape, 'The shape of dy passed in valueAndGrads(f)([x1,...], dy) must ' +\n 'match the shape returned by f([x1,...])');\n }\n checkGrads(res.grads);\n return res;\n };\n}\n/**\n * Computes and returns the gradient of f(x) with respect to the list of\n * trainable variables provided by `varList`. If no list is provided, it\n * defaults to all trainable variables.\n *\n * ```js\n * const a = tf.variable(tf.tensor1d([3, 4]));\n * const b = tf.variable(tf.tensor1d([5, 6]));\n * const x = tf.tensor1d([1, 2]);\n *\n * // f(a, b) = a * x ^ 2 + b * x\n * const f = () => a.mul(x.square()).add(b.mul(x)).sum();\n * // df/da = x ^ 2, df/db = x\n * const {value, grads} = tf.variableGrads(f);\n *\n * Object.keys(grads).forEach(varName => grads[varName].print());\n * ```\n *\n * @param f The function to execute. f() should return a scalar.\n * @param varList The list of variables to compute the gradients with respect\n * to. Defaults to all trainable variables.\n * @returns An object with the following keys and values:\n * - `value`: The value of the function `f`.\n * - `grads`: A map from the names of the variables to the gradients.\n * If the `varList` argument is provided explicitly and contains a subset of\n * non-trainable variables, this map in the return value will contain keys\n * that map the names of the non-trainable variables to `null`.\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction variableGrads(f, varList) {\n util.assert(util.isFunction(f), () => 'The f passed in variableGrads(f) must be a function');\n util.assert(varList == null ||\n Array.isArray(varList) && varList.every(v => v instanceof Variable), () => 'The varList passed in variableGrads(f, varList) must be an array ' +\n 'of variables');\n const specifiedVarList = varList != null;\n if (!specifiedVarList) {\n // Get all of the trainable variables.\n varList = [];\n for (const varName in ENGINE.registeredVariables) {\n varList.push(ENGINE.registeredVariables[varName]);\n }\n }\n const specifiedNonTrainable = specifiedVarList ? varList.filter(variable => !variable.trainable) : null;\n // Prune non-trainable variables.\n const originalVarCount = varList.length;\n varList = varList.filter(variable => variable.trainable);\n util.assert(varList.length > 0, () => `variableGrads() expects at least one of the input variables to ` +\n `be trainable, but none of the ${originalVarCount} variables is ` +\n `trainable.`);\n const allowNoGradients = true;\n const { value, grads } = ENGINE.gradients(f, varList, null, allowNoGradients);\n util.assert(grads.some(g => g != null), () => 'Cannot find a connection between any variable and the result of ' +\n 'the loss function y=f(x). Please make sure the operations that ' +\n 'use variables are inside the function f passed to minimize().');\n util.assert(value.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it ` +\n `returned a rank-${value.rank} tensor`);\n const namedGrads = {};\n varList.forEach((v, i) => {\n if (grads[i] != null) {\n namedGrads[v.name] = grads[i];\n }\n });\n if (specifiedNonTrainable != null) {\n // If varList is explicitly provided and contains non-trainable values,\n // add them to the returned gradients with `null` values.\n specifiedNonTrainable.forEach(v => namedGrads[v.name] = null);\n }\n return { value, grads: namedGrads };\n}\n/**\n * Overrides the gradient computation of a function `f`.\n *\n * Takes a function\n * `f(...inputs, save) => {value: Tensor, gradFunc: (dy, saved) => Tensor[]}`\n * and returns another function `g(...inputs)` which takes the same inputs as\n * `f`. When called, `g` returns `f().value`. In backward mode, custom gradients\n * with respect to each input of `f` are computed using `f().gradFunc`.\n *\n * The `save` function passed to `f` should be used for saving tensors needed\n * in the gradient. And the `saved` passed to the `gradFunc` is a\n * `NamedTensorMap`, which contains those saved tensors.\n *\n * ```js\n * const customOp = tf.customGrad((x, save) => {\n * // Save x to make sure it's available later for the gradient.\n * save([x]);\n * // Override gradient of our custom x ^ 2 op to be dy * abs(x);\n * return {\n * value: x.square(),\n * // Note `saved.x` which points to the `x` we saved earlier.\n * gradFunc: (dy, saved) => [dy.mul(saved[0].abs())]\n * };\n * });\n *\n * const x = tf.tensor1d([-1, -2, 3]);\n * const dx = tf.grad(x => customOp(x));\n *\n * console.log(`f(x):`);\n * customOp(x).print();\n * console.log(`f'(x):`);\n * dx(x).print();\n * ```\n *\n * @param f The function to evaluate in forward mode, which should return\n * `{value: Tensor, gradFunc: (dy, saved) => Tensor[]}`, where `gradFunc`\n * returns the custom gradients of `f` with respect to its inputs.\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction customGrad(f) {\n return ENGINE.customGrad(f);\n}\nfunction checkGrads(grads) {\n const numNullGradients = grads.filter(g => g == null).length;\n if (numNullGradients > 0) {\n 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.`);\n }\n}\nexport { customGrad, variableGrads, valueAndGrad, valueAndGrads, grad, grads, };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9ncmFkaWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFxQixNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxFQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXhFLE9BQU8sS0FBSyxJQUFJLE1BQU0sUUFBUSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxTQUFTLElBQUksQ0FBQyxDQUF3QjtJQUVwQyxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUM1RSxPQUFPLENBQUMsQ0FBb0IsRUFBRSxFQUFzQixFQUFVLEVBQUU7UUFDOUQseURBQXlEO1FBQ3pELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxHQUNMLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFB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LEVBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILFNBQVMsVUFBVSxDQUFtQixDQUF3QjtJQUU1RCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWU7SUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxJQUFJLGdCQUFnQixHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUNYO29FQUM0RCxDQUFDLENBQUM7S0FDbkU7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxHQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q3VzdG9tR3JhZGllbnRGdW5jLCBFTkdJTkV9IGZyb20gJy4vZW5naW5lJztcbmltcG9ydCB7U2NhbGFyLCBUZW5zb3IsIFZhcmlhYmxlfSBmcm9tICcuL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvciwgY29udmVydFRvVGVuc29yQXJyYXl9IGZyb20gJy4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogUHJvdmlkZWQgYGYoeClgLCByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24gYGcoeCwgZHk/KWAsIHdoaWNoIGdpdmVzIHRoZVxuICogZ3JhZGllbnQgb2YgYGYoeClgIHdpdGggcmVzcGVjdCB0byBgeGAuXG4gKlxuICogSWYgYGR5YCBpcyBwcm92aWRlZCwgdGhlIGdyYWRpZW50IG9mIGBmKHgpLm11bChkeSkuc3VtKClgIHdpdGggcmVzcGVjdCB0b1xuICogYHhgIGlzIGNvbXB1dGVkIGluc3RlYWQuIGBmKHgpYCBtdXN0IHRha2UgYSBzaW5nbGUgdGVuc29yIGB4YCBhbmQgcmV0dXJuIGFcbiAqIHNpbmdsZSB0ZW5zb3IgYHlgLiBJZiBgZigpYCB0YWtlcyBtdWx0aXBsZSBpbnB1dHMsIHVzZSBgdGYuZ3JhZHNgIGluc3RlYWQuXG4gKlxuICogYGBganNcbiAqIC8vIGYoeCkgPSB4IF4gMlxuICogY29uc3QgZiA9IHggPT4geC5zcXVhcmUoKTtcbiAqIC8vIGYnKHgpID0gMnhcbiAqIGNvbnN0IGcgPSB0Zi5ncmFkKGYpO1xuICpcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMiwgM10pO1xuICogZyh4KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIGYoeCkgPSB4IF4gM1xuICogY29uc3QgZiA9IHggPT4geC5wb3codGYuc2NhbGFyKDMsICdpbnQzMicpKTtcbiAqIC8vIGYnKHgpID0gM3ggXiAyXG4gKiBjb25zdCBnID0gdGYuZ3JhZChmKTtcbiAqIC8vIGYnJyh4KSA9IDZ4XG4gKiBjb25zdCBnZyA9IHRmLmdyYWQoZyk7XG4gKlxuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsyLCAzXSk7XG4gKiBnZyh4KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGYgVGhlIGZ1bmN0aW9uIGYoeCksIHRvIGNvbXB1dGUgZ3JhZGllbnQgZm9yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdHcmFkaWVudHMnfVxuICovXG5mdW5jdGlvbiBncmFkKGY6ICh4OiBUZW5zb3IpID0+IFRlbnNvcik6IChcbiAgICB4OiBUZW5zb3JMaWtlfFRlbnNvciwgZHk/OiBUZW5zb3JMaWtlfFRlbnNvcikgPT4gVGVuc29yIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB1dGlsLmlzRnVuY3Rpb24oZiksICgpID0+ICdUaGUgZiBwYXNzZWQgaW4gZ3JhZChmKSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgcmV0dXJuICh4OiBUZW5zb3JMaWtlfFRlbnNvciwgZHk/OiBUZW5zb3JMaWtlfFRlbnNvcik6IFRlbnNvciA9PiB7XG4gICAgLy8geCBjYW4gYmUgb2YgYW55IGR0eXBlLCB0aHVzIG51bGwgYXMgdGhlIGxhc3QgYXJndW1lbnQuXG4gICAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAndGYuZ3JhZCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICAgIGNvbnN0ICRkeTogVGVuc29yID1cbiAgICAgICAgKGR5ICE9IG51bGwpID8gY29udmVydFRvVGVuc29yKGR5LCAnZHknLCAndGYuZ3JhZCcpIDogbnVsbDtcbiAgICByZXR1cm4gRU5HSU5FLnRpZHkoKCkgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlLCBncmFkc30gPSBFTkdJTkUuZ3JhZGllbnRzKCgpID0+IGYoJHgpLCBbJHhdLCAkZHkpO1xuICAgICAgaWYgKCRkeSAhPSBudWxsKSB7XG4gICAgICAgIHV0aWwuYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAgICAgICB2YWx1ZS5zaGFwZSwgJGR5LnNoYXBlLFxuICAgICAgICAgICAgJ1RoZSBzaGFwZSBvZiBkeSBwYXNzZWQgaW4gZ3JhZChmKSh4LCBkeSkgbXVzdCBtYXRjaCB0aGUgc2hhcGUgJyArXG4gICAgICAgICAgICAgICAgJ3JldHVybmVkIGJ5IGYoeCknKTtcbiAgICAgIH1cbiAgICAgIGNoZWNrR3JhZHMoZ3JhZHMpO1xuICAgICAgcmV0dXJuIGdyYWRzWzBdO1xuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIFByb3ZpZGVkIGBmKHgxLCB4MiwuLi4pYCwgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uIGBnKFt4MSwgeDIsLi4uXSwgZHk/KWAsXG4gKiB3aGljaCBnaXZlcyBhbiBhcnJheSBvZiBncmFkaWVudHMgb2YgYGYoKWAgd2l0aCByZXNwZWN0IHRvIGVhY2ggaW5wdXRcbiAqIFtgeDFgLGB4MmAsLi4uXS5cbiAqXG4gKiBJZiBgZHlgIGlzIHBhc3NlZCB3aGVuIGNhbGxpbmcgYGcoKWAsIHRoZSBncmFkaWVudCBvZlxuICogYGYoeDEsLi4uKS5tdWwoZHkpLnN1bSgpYCB3aXRoIHJlc3BlY3QgdG8gZWFjaCBpbnB1dCBpcyBjb21wdXRlZCBpbnN0ZWFkLlxuICogVGhlIHByb3ZpZGVkIGBmYCBtdXN0IHRha2Ugb25lIG9yIG1vcmUgdGVuc29ycyBhbmQgcmV0dXJuIGEgc2luZ2xlIHRlbnNvclxuICogYHlgLiBJZiBgZigpYCB0YWtlcyBhIHNpbmdsZSBpbnB1dCwgd2UgcmVjb21tZW5kIHVzaW5nIGB0Zi5ncmFkYCBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBmKGEsIGIpID0gYSAqIGJcbiAqIGNvbnN0IGYgPSAoYSwgYikgPT4gYS5tdWwoYik7XG4gKiAvLyBkZiAvIGRhID0gYiwgZGYgLyBkYiA9IGFcbiAqIGNvbnN0IGcgPSB0Zi5ncmFkcyhmKTtcbiAqXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbLTIsIC0zXSk7XG4gKiBjb25zdCBbZGEsIGRiXSA9IGcoW2EsIGJdKTtcbiAqIGNvbnNvbGUubG9nKCdkYScpO1xuICogZGEucHJpbnQoKTtcbiAqIGNvbnNvbGUubG9nKCdkYicpO1xuICogZGIucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBmIFRoZSBmdW5jdGlvbiBgZih4MSwgeDIsLi4uKWAgdG8gY29tcHV0ZSBncmFkaWVudHMgZm9yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdHcmFkaWVudHMnfVxuICovXG5mdW5jdGlvbiBncmFkcyhmOiAoLi4uYXJnczogVGVuc29yW10pID0+IFRlbnNvcik6IChcbiAgICBhcmdzOiBBcnJheTxUZW5zb3J8VGVuc29yTGlrZT4sIGR5PzogVGVuc29yfFRlbnNvckxpa2UpID0+IFRlbnNvcltdIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB1dGlsLmlzRnVuY3Rpb24oZiksICgpID0+ICdUaGUgZiBwYXNzZWQgaW4gZ3JhZHMoZikgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIHJldHVybiAoYXJnczogQXJyYXk8VGVuc29yfFRlbnNvckxpa2U+LCBkeT86IFRlbnNvcnxUZW5zb3JMaWtlKTogVGVuc29yW10gPT4ge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBBcnJheS5pc0FycmF5KGFyZ3MpLFxuICAgICAgICAoKSA9PiAnVGhlIGFyZ3MgcGFzc2VkIGluIGdyYWRzKGYpKGFyZ3MpIG11c3QgYmUgYW4gYXJyYXkgJyArXG4gICAgICAgICAgICAnb2YgYFRlbnNvcmBzIG9yIGBUZW5zb3JMaWtlYHMnKTtcbiAgICAvLyBhcmdzIGNhbiBiZSBvZiBhbnkgZHR5cGUsIHRodXMgbnVsbCBhcyB0aGUgbGFzdCBhcmd1bWVudC5cbiAgICBjb25zdCAkYXJncyA9XG4gICAgICAgIGNvbnZlcnRUb1RlbnNvckFycmF5KGFyZ3MsICdhcmdzJywgJ3RmLmdyYWRzJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gICAgY29uc3QgJGR5OiBUZW5zb3IgPVxuICAgICAgICAoZHkgIT0gbnVsbCkgPyBjb252ZXJ0VG9UZW5zb3IoZHksICdkeScsICd0Zi5ncmFkcycpIDogbnVsbDtcbiAgICByZXR1cm4gRU5HSU5FLnRpZHkoKCkgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlLCBncmFkc30gPSBFTkdJTkUuZ3JhZGllbnRzKCgpID0+IGYoLi4uJGFyZ3MpLCAkYXJncywgJGR5KTtcbiAgICAgIGlmICgkZHkgIT0gbnVsbCkge1xuICAgICAgICB1dGlsLmFzc2VydFNoYXBlc01hdGNoKFxuICAgICAgICAgICAgdmFsdWUuc2hhcGUsICRkeS5zaGFwZSxcbiAgICAgICAgICAgICdUaGUgc2hhcGUgb2YgZHkgcGFzc2VkIGluIGdyYWRzKGYpKFt4MSwuLi5dLCBkeSkgbXVzdCAnICtcbiAgICAgICAgICAgICAgICAnbWF0Y2ggdGhlIHNoYXBlIHJldHVybmVkIGJ5IGYoW3gxLC4uLl0pJyk7XG4gICAgICB9XG4gICAgICBjaGVja0dyYWRzKGdyYWRzKTtcbiAgICAgIHJldHVybiBncmFkcztcbiAgICB9KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBMaWtlIGB0Zi5ncmFkYCwgYnV0IGFsc28gcmV0dXJucyB0aGUgdmFsdWUgb2YgYGYoKWAuIFVzZWZ1bCB3aGVuIGBmKClgXG4gKiByZXR1cm5zIGEgbWV0cmljIHlvdSB3YW50IHRvIHNob3cuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBhIHJpY2ggb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBncmFkOiBUaGUgZ3JhZGllbnQgb2YgYGYoeClgIHcuci50LiBgeGAgKHJlc3VsdCBvZiBgdGYuZ3JhZGApLlxuICogLSB2YWx1ZTogVGhlIHZhbHVlIHJldHVybmVkIGJ5IGBmKHgpYC5cbiAqXG4gKiBgYGBqc1xuICogLy8gZih4KSA9IHggXiAyXG4gKiBjb25zdCBmID0geCA9PiB4LnNxdWFyZSgpO1xuICogLy8gZicoeCkgPSAyeFxuICogY29uc3QgZyA9IHRmLnZhbHVlQW5kR3JhZChmKTtcbiAqXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzIsIDNdKTtcbiAqIGNvbnN0IHt2YWx1ZSwgZ3JhZH0gPSBnKHgpO1xuICpcbiAqIGNvbnNvbGUubG9nKCd2YWx1ZScpO1xuICogdmFsdWUucHJpbnQoKTtcbiAqIGNvbnNvbGUubG9nKCdncmFkJyk7XG4gKiBncmFkLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnR3JhZGllbnRzJ31cbiAqL1xuZnVuY3Rpb24gdmFsdWVBbmRHcmFkPEkgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KGY6ICh4OiBJKSA9PiBPKTogKFxuICAgIHg6IEksIGR5PzogTykgPT4ge1xuICB2YWx1ZTogTztcbiAgZ3JhZDogSTtcbn0ge1xuICB1dGlsLmFzc2VydChcbiAgICAgIHV0aWwuaXNGdW5jdGlvbihmKSxcbiAgICAgICgpID0+ICdUaGUgZiBwYXNzZWQgaW4gdmFsdWVBbmRHcmFkKGYpIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICByZXR1cm4gKHg6IEksIGR5PzogTykgPT4ge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICB4IGluc3RhbmNlb2YgVGVuc29yLFxuICAgICAgICAoKSA9PiAnVGhlIHggcGFzc2VkIGluIHZhbHVlQW5kR3JhZChmKSh4KSBtdXN0IGJlIGEgdGVuc29yJyk7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGR5ID09IG51bGwgfHwgZHkgaW5zdGFuY2VvZiBUZW5zb3IsXG4gICAgICAgICgpID0+ICdUaGUgZHkgcGFzc2VkIGluIHZhbHVlQW5kR3JhZChmKSh4LCBkeSkgbXVzdCBiZSBhIHRlbnNvcicpO1xuICAgIGNvbnN0IHtncmFkcywgdmFsdWV9ID0gRU5HSU5FLmdyYWRpZW50cygoKSA9PiBmKHgpLCBbeF0sIGR5KTtcbiAgICBjaGVja0dyYWRzKGdyYWRzKTtcbiAgICByZXR1cm4ge2dyYWQ6IGdyYWRzWzBdIGFzIEksIHZhbHVlfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBMaWtlIGB0Zi5ncmFkc2AsIGJ1dCByZXR1cm5zIGFsc28gdGhlIHZhbHVlIG9mIGBmKClgLiBVc2VmdWwgd2hlbiBgZigpYFxuICogcmV0dXJucyBhIG1ldHJpYyB5b3Ugd2FudCB0byBzaG93LlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYSByaWNoIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIC0gZ3JhZHM6IFRoZSBncmFkaWVudHMgb2YgYGYoKWAgdy5yLnQuIGVhY2ggaW5wdXQgKHJlc3VsdCBvZiBgdGYuZ3JhZHNgKS5cbiAqIC0gdmFsdWU6IFRoZSB2YWx1ZSByZXR1cm5lZCBieSBgZih4KWAuXG4gKlxuICogYGBganNcbiAqIC8vIGYoYSwgYikgPSBhICogYlxuICogY29uc3QgZiA9IChhLCBiKSA9PiBhLm11bChiKTtcbiAqIC8vIGRmL2RhID0gYiwgZGYvZGIgPSBhXG4gKiBjb25zdCBnID0gdGYudmFsdWVBbmRHcmFkcyhmKTtcbiAqXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbLTIsIC0zXSk7XG4gKiBjb25zdCB7dmFsdWUsIGdyYWRzfSA9IGcoW2EsIGJdKTtcbiAqXG4gKiBjb25zdCBbZGEsIGRiXSA9IGdyYWRzO1xuICpcbiAqIGNvbnNvbGUubG9nKCd2YWx1ZScpO1xuICogdmFsdWUucHJpbnQoKTtcbiAqXG4gKiBjb25zb2xlLmxvZygnZGEnKTtcbiAqIGRhLnByaW50KCk7XG4gKiBjb25zb2xlLmxvZygnZGInKTtcbiAqIGRiLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnR3JhZGllbnRzJ31cbiAqL1xuZnVuY3Rpb24gdmFsdWVBbmRHcmFkczxPIGV4dGVuZHMgVGVuc29yPihmOiAoLi4uYXJnczogVGVuc29yW10pID0+IE8pOiAoXG4gICAgYXJnczogVGVuc29yW10sIGR5PzogTykgPT4ge1xuICBncmFkczogVGVuc29yW107XG4gIHZhbHVlOiBPO1xufSB7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgdXRpbC5pc0Z1bmN0aW9uKGYpLFxuICAgICAgKCkgPT4gJ1RoZSBmIHBhc3NlZCBpbiB2YWx1ZUFuZEdyYWRzKGYpIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICByZXR1cm4gKGFyZ3M6IFRlbnNvcltdLCBkeT86IE8pID0+IHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSAmJiBhcmdzLmV2ZXJ5KGFyZyA9PiBhcmcgaW5zdGFuY2VvZiBUZW5zb3IpLFxuICAgICAgICAoKSA9PiAnVGhlIGFyZ3MgcGFzc2VkIGluIHZhbHVlQW5kR3JhZHMoZikoYXJncykgbXVzdCBiZSBhcnJheSBvZiAnICtcbiAgICAgICAgICAgICd0ZW5zb3JzJyk7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGR5ID09IG51bGwgfHwgZHkgaW5zdGFuY2VvZiBUZW5zb3IsXG4gICAgICAgICgpID0+ICdUaGUgZHkgcGFzc2VkIGluIHZhbHVlQW5kR3JhZHMoZikoYXJncywgZHkpIG11c3QgYmUgYSB0ZW5zb3InKTtcbiAgICBjb25zdCByZXMgPSBFTkdJTkUuZ3JhZGllbnRzKCgpID0+IGYoLi4uYXJncyksIGFyZ3MsIGR5KTtcbiAgICBpZiAoZHkgIT0gbnVsbCkge1xuICAgICAgdXRpbC5hc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICAgICByZXMudmFsdWUuc2hhcGUsIGR5LnNoYXBlLFxuICAgICAgICAgICdUaGUgc2hhcGUgb2YgZHkgcGFzc2VkIGluIHZhbHVlQW5kR3JhZHMoZikoW3gxLC4uLl0sIGR5KSBtdXN0ICcgK1xuICAgICAgICAgICAgICAnbWF0Y2ggdGhlIHNoYXBlIHJldHVybmVkIGJ5IGYoW3gxLC4uLl0pJyk7XG4gICAgfVxuICAgIGNoZWNrR3JhZHMocmVzLmdyYWRzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xufVxuXG4vKipcbiAqIENvbXB1dGVzIGFuZCByZXR1cm5zIHRoZSBncmFkaWVudCBvZiBmKHgpIHdpdGggcmVzcGVjdCB0byB0aGUgbGlzdCBvZlxuICogdHJhaW5hYmxlIHZhcmlhYmxlcyBwcm92aWRlZCBieSBgdmFyTGlzdGAuIElmIG5vIGxpc3QgaXMgcHJvdmlkZWQsIGl0XG4gKiBkZWZhdWx0cyB0byBhbGwgdHJhaW5hYmxlIHZhcmlhYmxlcy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnZhcmlhYmxlKHRmLnRlbnNvcjFkKFszLCA0XSkpO1xuICogY29uc3QgYiA9IHRmLnZhcmlhYmxlKHRmLnRlbnNvcjFkKFs1LCA2XSkpO1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyXSk7XG4gKlxuICogLy8gZihhLCBiKSA9IGEgKiB4IF4gMiArIGIgKiB4XG4gKiBjb25zdCBmID0gKCkgPT4gYS5tdWwoeC5zcXVhcmUoKSkuYWRkKGIubXVsKHgpKS5zdW0oKTtcbiAqIC8vIGRmL2RhID0geCBeIDIsIGRmL2RiID0geFxuICogY29uc3Qge3ZhbHVlLCBncmFkc30gPSB0Zi52YXJpYWJsZUdyYWRzKGYpO1xuICpcbiAqIE9iamVjdC5rZXlzKGdyYWRzKS5mb3JFYWNoKHZhck5hbWUgPT4gZ3JhZHNbdmFyTmFtZV0ucHJpbnQoKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZiBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS4gZigpIHNob3VsZCByZXR1cm4gYSBzY2FsYXIuXG4gKiBAcGFyYW0gdmFyTGlzdCBUaGUgbGlzdCBvZiB2YXJpYWJsZXMgdG8gY29tcHV0ZSB0aGUgZ3JhZGllbnRzIHdpdGggcmVzcGVjdFxuICogICAgIHRvLiBEZWZhdWx0cyB0byBhbGwgdHJhaW5hYmxlIHZhcmlhYmxlcy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5cyBhbmQgdmFsdWVzOlxuICogICAtIGB2YWx1ZWA6IFRoZSB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gYGZgLlxuICogICAtIGBncmFkc2A6IEEgbWFwIGZyb20gdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgdG8gdGhlIGdyYWRpZW50cy5cbiAqICAgICBJZiB0aGUgYHZhckxpc3RgIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGV4cGxpY2l0bHkgYW5kIGNvbnRhaW5zIGEgc3Vic2V0IG9mXG4gKiAgICAgbm9uLXRyYWluYWJsZSB2YXJpYWJsZXMsIHRoaXMgbWFwIGluIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBjb250YWluIGtleXNcbiAqICAgICB0aGF0IG1hcCB0aGUgbmFtZXMgb2YgdGhlIG5vbi10cmFpbmFibGUgdmFyaWFibGVzIHRvIGBudWxsYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnR3JhZGllbnRzJ31cbiAqL1xuZnVuY3Rpb24gdmFyaWFibGVHcmFkcyhmOiAoKSA9PiBTY2FsYXIsIHZhckxpc3Q/OiBWYXJpYWJsZVtdKTpcbiAgICB7dmFsdWU6IFNjYWxhciwgZ3JhZHM6IE5hbWVkVGVuc29yTWFwfSB7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgdXRpbC5pc0Z1bmN0aW9uKGYpLFxuICAgICAgKCkgPT4gJ1RoZSBmIHBhc3NlZCBpbiB2YXJpYWJsZUdyYWRzKGYpIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHZhckxpc3QgPT0gbnVsbCB8fFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFyTGlzdCkgJiYgdmFyTGlzdC5ldmVyeSh2ID0+IHYgaW5zdGFuY2VvZiBWYXJpYWJsZSksXG4gICAgICAoKSA9PlxuICAgICAgICAgICdUaGUgdmFyTGlzdCBwYXNzZWQgaW4gdmFyaWFibGVHcmFkcyhmLCB2YXJMaXN0KSBtdXN0IGJlIGFuIGFycmF5ICcgK1xuICAgICAgICAgICdvZiB2YXJpYWJsZXMnKTtcblxuICBjb25zdCBzcGVjaWZpZWRWYXJMaXN0ID0gdmFyTGlzdCAhPSBudWxsO1xuICBpZiAoIXNwZWNpZmllZFZhckxpc3QpIHtcbiAgICAvLyBHZXQgYWxsIG9mIHRoZSB0cmFpbmFibGUgdmFyaWFibGVzLlxuICAgIHZhckxpc3QgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHZhck5hbWUgaW4gRU5HSU5FLnJlZ2lzdGVyZWRWYXJpYWJsZXMpIHtcbiAgICAgIHZhckxpc3QucHVzaChFTkdJTkUucmVnaXN0ZXJlZFZhcmlhYmxlc1t2YXJOYW1lXSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3BlY2lmaWVkTm9uVHJhaW5hYmxlOiBWYXJpYWJsZVtdID1cbiAgICAgIHNwZWNpZmllZFZhckxpc3QgPyB2YXJMaXN0LmZpbHRlcih2YXJpYWJsZSA9PiAhdmFyaWFibGUudHJhaW5hYmxlKSA6IG51bGw7XG5cbiAgLy8gUHJ1bmUgbm9uLXRyYWluYWJsZSB2YXJpYWJsZXMuXG4gIGNvbnN0IG9yaWdpbmFsVmFyQ291bnQgPSB2YXJMaXN0Lmxlbmd0aDtcbiAgdmFyTGlzdCA9IHZhckxpc3QuZmlsdGVyKHZhcmlhYmxlID0+IHZhcmlhYmxlLnRyYWluYWJsZSk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgdmFyTGlzdC5sZW5ndGggPiAwLFxuICAgICAgKCkgPT4gYHZhcmlhYmxlR3JhZHMoKSBleHBlY3RzIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5wdXQgdmFyaWFibGVzIHRvIGAgK1xuICAgICAgICAgIGBiZSB0cmFpbmFibGUsIGJ1dCBub25lIG9mIHRoZSAke29yaWdpbmFsVmFyQ291bnR9IHZhcmlhYmxlcyBpcyBgICtcbiAgICAgICAgICBgdHJhaW5hYmxlLmApO1xuXG4gIGNvbnN0IGFsbG93Tm9HcmFkaWVudHMgPSB0cnVlO1xuICBjb25zdCB7dmFsdWUsIGdyYWRzfSA9IEVOR0lORS5ncmFkaWVudHMoZiwgdmFyTGlzdCwgbnVsbCwgYWxsb3dOb0dyYWRpZW50cyk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICBncmFkcy5zb21lKGcgPT4gZyAhPSBudWxsKSxcbiAgICAgICgpID0+ICdDYW5ub3QgZmluZCBhIGNvbm5lY3Rpb24gYmV0d2VlbiBhbnkgdmFyaWFibGUgYW5kIHRoZSByZXN1bHQgb2YgJyArXG4gICAgICAgICAgJ3RoZSBsb3NzIGZ1bmN0aW9uIHk9Zih4KS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW9ucyB0aGF0ICcgK1xuICAgICAgICAgICd1c2UgdmFyaWFibGVzIGFyZSBpbnNpZGUgdGhlIGZ1bmN0aW9uIGYgcGFzc2VkIHRvIG1pbmltaXplKCkuJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgdmFsdWUucmFuayA9PT0gMCxcbiAgICAgICgpID0+IGBUaGUgZiBwYXNzZWQgaW4gdmFyaWFibGVHcmFkcyhmKSBtdXN0IHJldHVybiBhIHNjYWxhciwgYnV0IGl0IGAgK1xuICAgICAgICAgIGByZXR1cm5lZCBhIHJhbmstJHt2YWx1ZS5yYW5rfSB0ZW5zb3JgKTtcblxuICBjb25zdCBuYW1lZEdyYWRzOiBOYW1lZFRlbnNvck1hcCA9IHt9O1xuICB2YXJMaXN0LmZvckVhY2goKHYsIGkpID0+IHtcbiAgICBpZiAoZ3JhZHNbaV0gIT0gbnVsbCkge1xuICAgICAgbmFtZWRHcmFkc1t2Lm5hbWVdID0gZ3JhZHNbaV07XG4gICAgfVxuICB9KTtcbiAgaWYgKHNwZWNpZmllZE5vblRyYWluYWJsZSAhPSBudWxsKSB7XG4gICAgLy8gSWYgdmFyTGlzdCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkIGFuZCBjb250YWlucyBub24tdHJhaW5hYmxlIHZhbHVlcyxcbiAgICAvLyBhZGQgdGhlbSB0byB0aGUgcmV0dXJuZWQgZ3JhZGllbnRzIHdpdGggYG51bGxgIHZhbHVlcy5cbiAgICBzcGVjaWZpZWROb25UcmFpbmFibGUuZm9yRWFjaCh2ID0+IG5hbWVkR3JhZHNbdi5uYW1lXSA9IG51bGwpO1xuICB9XG4gIHJldHVybiB7dmFsdWUsIGdyYWRzOiBuYW1lZEdyYWRzfTtcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgdGhlIGdyYWRpZW50IGNvbXB1dGF0aW9uIG9mIGEgZnVuY3Rpb24gYGZgLlxuICpcbiAqIFRha2VzIGEgZnVuY3Rpb25cbiAqIGBmKC4uLmlucHV0cywgc2F2ZSkgPT4ge3ZhbHVlOiBUZW5zb3IsIGdyYWRGdW5jOiAoZHksIHNhdmVkKSA9PiBUZW5zb3JbXX1gXG4gKiBhbmQgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uIGBnKC4uLmlucHV0cylgIHdoaWNoIHRha2VzIHRoZSBzYW1lIGlucHV0cyBhc1xuICogYGZgLiBXaGVuIGNhbGxlZCwgYGdgIHJldHVybnMgYGYoKS52YWx1ZWAuIEluIGJhY2t3YXJkIG1vZGUsIGN1c3RvbSBncmFkaWVudHNcbiAqIHdpdGggcmVzcGVjdCB0byBlYWNoIGlucHV0IG9mIGBmYCBhcmUgY29tcHV0ZWQgdXNpbmcgYGYoKS5ncmFkRnVuY2AuXG4gKlxuICogVGhlIGBzYXZlYCBmdW5jdGlvbiBwYXNzZWQgdG8gYGZgIHNob3VsZCBiZSB1c2VkIGZvciBzYXZpbmcgdGVuc29ycyBuZWVkZWRcbiAqIGluIHRoZSBncmFkaWVudC4gQW5kIHRoZSBgc2F2ZWRgIHBhc3NlZCB0byB0aGUgYGdyYWRGdW5jYCBpcyBhXG4gKiBgTmFtZWRUZW5zb3JNYXBgLCB3aGljaCBjb250YWlucyB0aG9zZSBzYXZlZCB0ZW5zb3JzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBjdXN0b21PcCA9IHRmLmN1c3RvbUdyYWQoKHgsIHNhdmUpID0+IHtcbiAqICAgLy8gU2F2ZSB4IHRvIG1ha2Ugc3VyZSBpdCdzIGF2YWlsYWJsZSBsYXRlciBmb3IgdGhlIGdyYWRpZW50LlxuICogICBzYXZlKFt4XSk7XG4gKiAgIC8vIE92ZXJyaWRlIGdyYWRpZW50IG9mIG91ciBjdXN0b20geCBeIDIgb3AgdG8gYmUgZHkgKiBhYnMoeCk7XG4gKiAgIHJldHVybiB7XG4gKiAgICAgdmFsdWU6IHguc3F1YXJlKCksXG4gKiAgICAgLy8gTm90ZSBgc2F2ZWQueGAgd2hpY2ggcG9pbnRzIHRvIHRoZSBgeGAgd2Ugc2F2ZWQgZWFybGllci5cbiAqICAgICBncmFkRnVuYzogKGR5LCBzYXZlZCkgPT4gW2R5Lm11bChzYXZlZFswXS5hYnMoKSldXG4gKiAgIH07XG4gKiB9KTtcbiAqXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAtMiwgM10pO1xuICogY29uc3QgZHggPSB0Zi5ncmFkKHggPT4gY3VzdG9tT3AoeCkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGBmKHgpOmApO1xuICogY3VzdG9tT3AoeCkucHJpbnQoKTtcbiAqIGNvbnNvbGUubG9nKGBmJyh4KTpgKTtcbiAqIGR4KHgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gZm9yd2FyZCBtb2RlLCB3aGljaCBzaG91bGQgcmV0dXJuXG4gKiAgICAgYHt2YWx1ZTogVGVuc29yLCBncmFkRnVuYzogKGR5LCBzYXZlZCkgPT4gVGVuc29yW119YCwgd2hlcmUgYGdyYWRGdW5jYFxuICogICAgIHJldHVybnMgdGhlIGN1c3RvbSBncmFkaWVudHMgb2YgYGZgIHdpdGggcmVzcGVjdCB0byBpdHMgaW5wdXRzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdHcmFkaWVudHMnfVxuICovXG5mdW5jdGlvbiBjdXN0b21HcmFkPFQgZXh0ZW5kcyBUZW5zb3I+KGY6IEN1c3RvbUdyYWRpZW50RnVuYzxUPik6XG4gICAgKC4uLmFyZ3M6IFRlbnNvcltdKSA9PiBUIHtcbiAgcmV0dXJuIEVOR0lORS5jdXN0b21HcmFkKGYpO1xufVxuXG5mdW5jdGlvbiBjaGVja0dyYWRzKGdyYWRzOiBUZW5zb3JbXSkge1xuICBjb25zdCBudW1OdWxsR3JhZGllbnRzID0gZ3JhZHMuZmlsdGVyKGcgPT4gZyA9PSBudWxsKS5sZW5ndGg7XG4gIGlmIChudW1OdWxsR3JhZGllbnRzID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjb21wdXRlIGdyYWRpZW50IG9mIHk9Zih4KSB3aXRoIHJlc3BlY3QgdG8geC4gTWFrZSBzdXJlIHRoYXRcbiAgICB0aGUgZiB5b3UgcGFzc2VkIGVuY2xvc2VzIGFsbCBvcGVyYXRpb25zIHRoYXQgbGVhZCBmcm9tIHggdG8geS5gKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBjdXN0b21HcmFkLFxuICB2YXJpYWJsZUdyYWRzLFxuICB2YWx1ZUFuZEdyYWQsXG4gIHZhbHVlQW5kR3JhZHMsXG4gIGdyYWQsXG4gIGdyYWRzLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { isTypedArray } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-0 `tf.Tensor` (scalar) with the provided value and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.scalar` as it makes the code more readable.\n *\n * ```js\n * tf.scalar(3.14).print();\n * ```\n *\n * @param value The value of the scalar.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function scalar(value, dtype) {\n if (((isTypedArray(value) && dtype !== 'string') || Array.isArray(value)) &&\n dtype !== 'complex64') {\n throw new Error('Error creating a new Scalar: value must be a primitive ' +\n '(number|boolean|string)');\n }\n if (dtype === 'string' && isTypedArray(value) &&\n !(value instanceof Uint8Array)) {\n throw new Error('When making a scalar from encoded string, ' +\n 'the value must be `Uint8Array`.');\n }\n const shape = [];\n const inferredShape = [];\n return makeTensor(value, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2NhbGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTdDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsS0FBdUMsRUFBRSxLQUFnQjtJQUMzRCxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckUsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCx5QkFBeUIsQ0FBQyxDQUFDO0tBQ2hDO0lBQ0QsSUFBSSxLQUFLLEtBQUssUUFBUSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDekMsQ0FBQyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsRUFBRTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNYLDRDQUE0QztZQUM1QyxpQ0FBaUMsQ0FBQyxDQUFDO0tBQ3hDO0lBQ0QsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUNuQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQVcsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1NjYWxhcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7aXNUeXBlZEFycmF5fSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7bWFrZVRlbnNvcn0gZnJvbSAnLi90ZW5zb3Jfb3BzX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgcmFuay0wIGB0Zi5UZW5zb3JgIChzY2FsYXIpIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlIGFuZCBkdHlwZS5cbiAqXG4gKiBUaGUgc2FtZSBmdW5jdGlvbmFsaXR5IGNhbiBiZSBhY2hpZXZlZCB3aXRoIGB0Zi50ZW5zb3JgLCBidXQgaW4gZ2VuZXJhbFxuICogd2UgcmVjb21tZW5kIHVzaW5nIGB0Zi5zY2FsYXJgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogYGBganNcbiAqIHRmLnNjYWxhcigzLjE0KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgc2NhbGFyLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhbGFyKFxuICAgIHZhbHVlOiBudW1iZXJ8Ym9vbGVhbnxzdHJpbmd8VWludDhBcnJheSwgZHR5cGU/OiBEYXRhVHlwZSk6IFNjYWxhciB7XG4gIGlmICgoKGlzVHlwZWRBcnJheSh2YWx1ZSkgJiYgZHR5cGUgIT09ICdzdHJpbmcnKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgJiZcbiAgICAgIGR0eXBlICE9PSAnY29tcGxleDY0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Vycm9yIGNyZWF0aW5nIGEgbmV3IFNjYWxhcjogdmFsdWUgbXVzdCBiZSBhIHByaW1pdGl2ZSAnICtcbiAgICAgICAgJyhudW1iZXJ8Ym9vbGVhbnxzdHJpbmcpJyk7XG4gIH1cbiAgaWYgKGR0eXBlID09PSAnc3RyaW5nJyAmJiBpc1R5cGVkQXJyYXkodmFsdWUpICYmXG4gICAgICAhKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdXaGVuIG1ha2luZyBhIHNjYWxhciBmcm9tIGVuY29kZWQgc3RyaW5nLCAnICtcbiAgICAgICAgJ3RoZSB2YWx1ZSBtdXN0IGJlIGBVaW50OEFycmF5YC4nKTtcbiAgfVxuICBjb25zdCBzaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5mZXJyZWRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgcmV0dXJuIG1ha2VUZW5zb3IodmFsdWUsIHNoYXBlLCBpbmZlcnJlZFNoYXBlLCBkdHlwZSkgYXMgU2NhbGFyO1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from './util';\n/**\n * Maps to mapping between the custom object and its name.\n *\n * After registering a custom class, these two maps will add key-value pairs\n * for the class object and the registered name.\n *\n * Therefore we can get the relative registered name by calling\n * getRegisteredName() function.\n *\n * For example:\n * GLOBAL_CUSTOM_OBJECT: {key=registeredName: value=corresponding\n * CustomObjectClass}\n *\n * GLOBAL_CUSTOM_NAMES: {key=CustomObjectClass: value=corresponding\n * registeredName}\n *\n */\nconst GLOBAL_CUSTOM_OBJECT = new Map();\nconst GLOBAL_CUSTOM_NAMES = new Map();\n/**\n * Serializable defines the serialization contract.\n *\n * TFJS requires serializable classes to return their className when asked\n * to avoid issues with minification.\n */\nexport class Serializable {\n /**\n * Return the class name for this class to use in serialization contexts.\n *\n * Generally speaking this will be the same thing that constructor.name\n * would have returned. However, the class name needs to be robust\n * against minification for serialization/deserialization to work properly.\n *\n * There's also places such as initializers.VarianceScaling, where\n * implementation details between different languages led to different\n * class hierarchies and a non-leaf node is used for serialization purposes.\n */\n getClassName() {\n return this.constructor\n .className;\n }\n /**\n * Creates an instance of T from a ConfigDict.\n *\n * This works for most descendants of serializable. A few need to\n * provide special handling.\n * @param cls A Constructor for the class to instantiate.\n * @param config The Configuration for the object.\n */\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config);\n }\n}\n/**\n * Maps string keys to class constructors.\n *\n * Used during (de)serialization from the cross-language JSON format, which\n * requires the class name in the serialization format matches the class\n * names as used in Python, should it exist.\n */\nexport class SerializationMap {\n constructor() {\n this.classNameMap = {};\n }\n /**\n * Returns the singleton instance of the map.\n */\n static getMap() {\n if (SerializationMap.instance == null) {\n SerializationMap.instance = new SerializationMap();\n }\n return SerializationMap.instance;\n }\n /**\n * Registers the class as serializable.\n */\n static register(cls) {\n SerializationMap.getMap().classNameMap[cls.className] =\n [cls, cls.fromConfig];\n }\n}\n/**\n * Register a class with the serialization map of TensorFlow.js.\n *\n * This is often used for registering custom Layers, so they can be\n * serialized and deserialized.\n *\n * Example 1. Register the class without package name and specified name.\n *\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n * static className = 'MyCustomLayer';\n *\n * constructor(config) {\n * super(config);\n * }\n * }\n * tf.serialization.registerClass(MyCustomLayer);\n * console.log(tf.serialization.GLOBALCUSTOMOBJECT.get(\"Custom>MyCustomLayer\"));\n * console.log(tf.serialization.GLOBALCUSTOMNAMES.get(MyCustomLayer));\n * ```\n *\n * Example 2. Register the class with package name: \"Package\" and specified\n * name: \"MyLayer\".\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n * static className = 'MyCustomLayer';\n *\n * constructor(config) {\n * super(config);\n * }\n * }\n * tf.serialization.registerClass(MyCustomLayer, \"Package\", \"MyLayer\");\n * console.log(tf.serialization.GLOBALCUSTOMOBJECT.get(\"Package>MyLayer\"));\n * console.log(tf.serialization.GLOBALCUSTOMNAMES.get(MyCustomLayer));\n * ```\n *\n * Example 3. Register the class with specified name: \"MyLayer\".\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n * static className = 'MyCustomLayer';\n *\n * constructor(config) {\n * super(config);\n * }\n * }\n * tf.serialization.registerClass(MyCustomLayer, undefined, \"MyLayer\");\n * console.log(tf.serialization.GLOBALCUSTOMOBJECT.get(\"Custom>MyLayer\"));\n * console.log(tf.serialization.GLOBALCUSTOMNAMES.get(MyCustomLayer));\n * ```\n *\n * Example 4. Register the class with specified package name: \"Package\".\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n * static className = 'MyCustomLayer';\n *\n * constructor(config) {\n * super(config);\n * }\n * }\n * tf.serialization.registerClass(MyCustomLayer, \"Package\");\n * console.log(tf.serialization.GLOBALCUSTOMOBJECT\n * .get(\"Package>MyCustomLayer\"));\n * console.log(tf.serialization.GLOBALCUSTOMNAMES\n * .get(MyCustomLayer));\n * ```\n *\n * @param cls The class to be registered. It must have a public static member\n * called `className` defined and the value must be a non-empty string.\n * @param pkg The pakcage name that this class belongs to. This used to define\n * the key in GlobalCustomObject. If not defined, it defaults to `Custom`.\n * @param name The name that user specified. It defaults to the actual name of\n * the class as specified by its static `className` property.\n * @doc {heading: 'Models', subheading: 'Serialization', ignoreCI: true}\n */\nexport function registerClass(cls, pkg, name) {\n assert(cls.className != null, () => `Class being registered does not have the static className ` +\n `property defined.`);\n assert(typeof cls.className === 'string', () => `className is required to be a string, but got type ` +\n typeof cls.className);\n assert(cls.className.length > 0, () => `Class being registered has an empty-string as its className, ` +\n `which is disallowed.`);\n if (typeof pkg === 'undefined') {\n pkg = 'Custom';\n }\n if (typeof name === 'undefined') {\n name = cls.className;\n }\n const className = name;\n const registerName = pkg + '>' + className;\n SerializationMap.register(cls);\n GLOBAL_CUSTOM_OBJECT.set(registerName, cls);\n GLOBAL_CUSTOM_NAMES.set(cls, registerName);\n return cls;\n}\n/**\n * Get the registered name of a class. If the class has not been registered,\n * return the class name.\n *\n * @param cls The class we want to get register name for. It must have a public\n * static member called `className` defined.\n * @returns registered name or class name.\n */\nexport function getRegisteredName(cls) {\n if (GLOBAL_CUSTOM_NAMES.has(cls)) {\n return GLOBAL_CUSTOM_NAMES.get(cls);\n }\n else {\n return cls.className;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvc2VyaWFsaXphdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBdUM5Qjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sb0JBQW9CLEdBQ3RCLElBQUksR0FBRyxFQUFpRCxDQUFDO0FBRTdELE1BQU0sbUJBQW1CLEdBQ3JCLElBQUksR0FBRyxFQUFpRCxDQUFDO0FBRTdEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFnQixZQUFZO0lBQ2hDOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZO1FBQ1YsT0FBUSxJQUFJLENBQUMsV0FBcUQ7YUFDN0QsU0FBUyxDQUFDO0lBQ2pCLENBQUM7SUFPRDs7Ozs7OztPQU9HO0lBQ0gsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBQyxVQUFVLENBQ2IsR0FBK0IsRUFBRSxNQUFrQjtRQUNyRCxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFPM0I7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsTUFBTTtRQUNYLElBQUksZ0JBQWdCLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUNyQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3BEO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBeUIsR0FBK0I7UUFDckUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDakQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDekIsR0FBK0IsRUFBRSxHQUFZLEVBQUUsSUFBYTtJQUM5RCxNQUFNLENBQ0YsR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQ3JCLEdBQUcsRUFBRSxDQUFDLDREQUE0RDtRQUM5RCxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FDRixPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUNqQyxHQUFHLEVBQUUsQ0FBQyxxREFBcUQ7UUFDdkQsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUNGLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDeEIsR0FBRyxFQUFFLENBQUMsK0RBQStEO1FBQ2pFLHNCQUFzQixDQUFDLENBQUM7SUFFaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxXQUFXLEVBQUU7UUFDOUIsR0FBRyxHQUFHLFFBQVEsQ0FBQztLQUNoQjtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxFQUFFO1FBQy9CLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0tBQ3RCO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sWUFBWSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDO0lBRTNDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFM0MsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsR0FBK0I7SUFDakMsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDaEMsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDckM7U0FBTTtRQUNMLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztLQUN0QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFR5cGVzIHRvIHN1cHBvcnQgSlNPTi1lc3F1ZSBkYXRhIHN0cnVjdHVyZXMgaW50ZXJuYWxseS5cbiAqXG4gKiBJbnRlcm5hbGx5IENvbmZpZ0RpY3QncyB1c2UgY2FtZWxDYXNlIGtleXMgYW5kIHZhbHVlcyB3aGVyZSB0aGVcbiAqIHZhbHVlcyBhcmUgY2xhc3MgbmFtZXMgdG8gYmUgaW5zdGFudGlhdGVkLiAgT24gdGhlIHB5dGhvbiBzaWRlLCB0aGVzZVxuICogd2lsbCBiZSBzbmFrZV9jYXNlLiAgSW50ZXJuYWxseSB3ZSBhbGxvdyBFbnVtcyBpbnRvIHRoZSB2YWx1ZXMgZm9yIGJldHRlclxuICogdHlwZSBzYWZldHksIGJ1dCB0aGVzZSBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byByYXcgcHJpbWl0aXZlcyAodXN1YWxseVxuICogc3RyaW5ncykgZm9yIHJvdW5kLXRyaXBwaW5nIHdpdGggcHl0aG9uLlxuICpcbiAqIHRvQ29uZmlnIHJldHVybnMgdGhlIFRTLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9uLiBtb2RlbC50b0pTT04oKSByZXR1cm5zXG4gKiB0aGUgcHl0aG9uaWMgdmVyc2lvbiBhcyB0aGF0J3MgdGhlIHBvcnRhYmxlIGZvcm1hdC4gIElmIHlvdSBuZWVkIHRvXG4gKiBweXRob24taWZ5IGEgbm9uLW1vZGVsIGxldmVsIHRvQ29uZmlnIG91dHB1dCwgeW91J2xsIG5lZWQgdG8gdXNlIGFcbiAqIGNvbnZlcnRUc1RvUHl0aG9uaWMgZnJvbSBzZXJpYWxpemF0aW9uX3V0aWxzIGluIC1MYXllcnMuXG4gKlxuICovXG5leHBvcnQgZGVjbGFyZSB0eXBlIENvbmZpZ0RpY3RWYWx1ZSA9XG4gICAgYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCBDb25maWdEaWN0QXJyYXkgfCBDb25maWdEaWN0O1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbmZpZ0RpY3Qge1xuICBba2V5OiBzdHJpbmddOiBDb25maWdEaWN0VmFsdWU7XG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29uZmlnRGljdEFycmF5IGV4dGVuZHMgQXJyYXk8Q29uZmlnRGljdFZhbHVlPiB7fVxuXG4vKipcbiAqIFR5cGUgdG8gcmVwcmVzZW50IHRoZSBjbGFzcy10eXBlIG9mIFNlcmlhbGl6YWJsZSBvYmplY3RzLlxuICpcbiAqIEllIHRoZSBjbGFzcyBwcm90b3R5cGUgd2l0aCBhY2Nlc3MgdG8gdGhlIGNvbnN0cnVjdG9yIGFuZCBhbnlcbiAqIHN0YXRpYyBtZW1iZXJzL21ldGhvZHMuIEluc3RhbmNlIG1ldGhvZHMgYXJlIG5vdCBsaXN0ZWQgaGVyZS5cbiAqXG4gKiBTb3VyY2UgZm9yIHRoaXMgaWRlYTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQzNjA3MjU1XG4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4gPSB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7IGNsYXNzTmFtZTogc3RyaW5nOyBmcm9tQ29uZmlnOiBGcm9tQ29uZmlnTWV0aG9kPFQ+O1xufTtcbmV4cG9ydCBkZWNsYXJlIHR5cGUgRnJvbUNvbmZpZ01ldGhvZDxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPiA9XG4gICAgKGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCkgPT4gVDtcblxuLyoqXG4gKiBNYXBzIHRvIG1hcHBpbmcgYmV0d2VlbiB0aGUgY3VzdG9tIG9iamVjdCBhbmQgaXRzIG5hbWUuXG4gKlxuICogQWZ0ZXIgcmVnaXN0ZXJpbmcgYSBjdXN0b20gY2xhc3MsIHRoZXNlIHR3byBtYXBzIHdpbGwgYWRkIGtleS12YWx1ZSBwYWlyc1xuICogZm9yIHRoZSBjbGFzcyBvYmplY3QgYW5kIHRoZSByZWdpc3RlcmVkIG5hbWUuXG4gKlxuICogVGhlcmVmb3JlIHdlIGNhbiBnZXQgdGhlIHJlbGF0aXZlIHJlZ2lzdGVyZWQgbmFtZSBieSBjYWxsaW5nXG4gKiBnZXRSZWdpc3RlcmVkTmFtZSgpIGZ1bmN0aW9uLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogR0xPQkFMX0NVU1RPTV9PQkpFQ1Q6IHtrZXk9cmVnaXN0ZXJlZE5hbWU6IHZhbHVlPWNvcnJlc3BvbmRpbmdcbiAqIEN1c3RvbU9iamVjdENsYXNzfVxuICpcbiAqIEdMT0JBTF9DVVNUT01fTkFNRVM6IHtrZXk9Q3VzdG9tT2JqZWN0Q2xhc3M6IHZhbHVlPWNvcnJlc3BvbmRpbmdcbiAqIHJlZ2lzdGVyZWROYW1lfVxuICpcbiAqL1xuY29uc3QgR0xPQkFMX0NVU1RPTV9PQkpFQ1QgPVxuICAgIG5ldyBNYXA8c3RyaW5nLCBTZXJpYWxpemFibGVDb25zdHJ1Y3RvcjxTZXJpYWxpemFibGU+PigpO1xuXG5jb25zdCBHTE9CQUxfQ1VTVE9NX05BTUVTID1cbiAgICBuZXcgTWFwPFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFNlcmlhbGl6YWJsZT4sIHN0cmluZz4oKTtcblxuLyoqXG4gKiBTZXJpYWxpemFibGUgZGVmaW5lcyB0aGUgc2VyaWFsaXphdGlvbiBjb250cmFjdC5cbiAqXG4gKiBURkpTIHJlcXVpcmVzIHNlcmlhbGl6YWJsZSBjbGFzc2VzIHRvIHJldHVybiB0aGVpciBjbGFzc05hbWUgd2hlbiBhc2tlZFxuICogdG8gYXZvaWQgaXNzdWVzIHdpdGggbWluaWZpY2F0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VyaWFsaXphYmxlIHtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY2xhc3MgbmFtZSBmb3IgdGhpcyBjbGFzcyB0byB1c2UgaW4gc2VyaWFsaXphdGlvbiBjb250ZXh0cy5cbiAgICpcbiAgICogR2VuZXJhbGx5IHNwZWFraW5nIHRoaXMgd2lsbCBiZSB0aGUgc2FtZSB0aGluZyB0aGF0IGNvbnN0cnVjdG9yLm5hbWVcbiAgICogd291bGQgaGF2ZSByZXR1cm5lZC4gIEhvd2V2ZXIsIHRoZSBjbGFzcyBuYW1lIG5lZWRzIHRvIGJlIHJvYnVzdFxuICAgKiBhZ2FpbnN0IG1pbmlmaWNhdGlvbiBmb3Igc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gdG8gd29yayBwcm9wZXJseS5cbiAgICpcbiAgICogVGhlcmUncyBhbHNvIHBsYWNlcyBzdWNoIGFzIGluaXRpYWxpemVycy5WYXJpYW5jZVNjYWxpbmcsIHdoZXJlXG4gICAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYmV0d2VlbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzIGxlZCB0byBkaWZmZXJlbnRcbiAgICogY2xhc3MgaGllcmFyY2hpZXMgYW5kIGEgbm9uLWxlYWYgbm9kZSBpcyB1c2VkIGZvciBzZXJpYWxpemF0aW9uIHB1cnBvc2VzLlxuICAgKi9cbiAgZ2V0Q2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvbnN0cnVjdG9yIGFzIFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFNlcmlhbGl6YWJsZT4pXG4gICAgICAgIC5jbGFzc05hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCB0aGUgbm9uLXdlaWdodCBzdGF0ZSBuZWVkZWQgdG8gc2VyaWFsaXplIHRoaXMgb2JqZWN0LlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Q29uZmlnKCk6IENvbmZpZ0RpY3Q7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVCBmcm9tIGEgQ29uZmlnRGljdC5cbiAgICpcbiAgICogVGhpcyB3b3JrcyBmb3IgbW9zdCBkZXNjZW5kYW50cyBvZiBzZXJpYWxpemFibGUuICBBIGZldyBuZWVkIHRvXG4gICAqIHByb3ZpZGUgc3BlY2lhbCBoYW5kbGluZy5cbiAgICogQHBhcmFtIGNscyBBIENvbnN0cnVjdG9yIGZvciB0aGUgY2xhc3MgdG8gaW5zdGFudGlhdGUuXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBvYmplY3QuXG4gICAqL1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGZyb21Db25maWc8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oXG4gICAgICBjbHM6IFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFQ+LCBjb25maWc6IENvbmZpZ0RpY3QpOiBUIHtcbiAgICByZXR1cm4gbmV3IGNscyhjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogTWFwcyBzdHJpbmcga2V5cyB0byBjbGFzcyBjb25zdHJ1Y3RvcnMuXG4gKlxuICogVXNlZCBkdXJpbmcgKGRlKXNlcmlhbGl6YXRpb24gZnJvbSB0aGUgY3Jvc3MtbGFuZ3VhZ2UgSlNPTiBmb3JtYXQsIHdoaWNoXG4gKiByZXF1aXJlcyB0aGUgY2xhc3MgbmFtZSBpbiB0aGUgc2VyaWFsaXphdGlvbiBmb3JtYXQgbWF0Y2hlcyB0aGUgY2xhc3NcbiAqIG5hbWVzIGFzIHVzZWQgaW4gUHl0aG9uLCBzaG91bGQgaXQgZXhpc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJpYWxpemF0aW9uTWFwIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFNlcmlhbGl6YXRpb25NYXA7XG4gIGNsYXNzTmFtZU1hcDoge1xuICAgIFtjbGFzc05hbWU6IHN0cmluZ106XG4gICAgICAgIFtTZXJpYWxpemFibGVDb25zdHJ1Y3RvcjxTZXJpYWxpemFibGU+LCBGcm9tQ29uZmlnTWV0aG9kPFNlcmlhbGl6YWJsZT5dXG4gIH07XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsYXNzTmFtZU1hcCA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbWFwLlxuICAgKi9cbiAgc3RhdGljIGdldE1hcCgpOiBTZXJpYWxpemF0aW9uTWFwIHtcbiAgICBpZiAoU2VyaWFsaXphdGlvbk1hcC5pbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICBTZXJpYWxpemF0aW9uTWFwLmluc3RhbmNlID0gbmV3IFNlcmlhbGl6YXRpb25NYXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIFNlcmlhbGl6YXRpb25NYXAuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBjbGFzcyBhcyBzZXJpYWxpemFibGUuXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXI8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oY2xzOiBTZXJpYWxpemFibGVDb25zdHJ1Y3RvcjxUPikge1xuICAgIFNlcmlhbGl6YXRpb25NYXAuZ2V0TWFwKCkuY2xhc3NOYW1lTWFwW2Nscy5jbGFzc05hbWVdID1cbiAgICAgICAgW2NscywgY2xzLmZyb21Db25maWddO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjbGFzcyB3aXRoIHRoZSBzZXJpYWxpemF0aW9uIG1hcCBvZiBUZW5zb3JGbG93LmpzLlxuICpcbiAqIFRoaXMgaXMgb2Z0ZW4gdXNlZCBmb3IgcmVnaXN0ZXJpbmcgY3VzdG9tIExheWVycywgc28gdGhleSBjYW4gYmVcbiAqIHNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZC5cbiAqXG4gKiBFeGFtcGxlIDEuIFJlZ2lzdGVyIHRoZSBjbGFzcyB3aXRob3V0IHBhY2thZ2UgbmFtZSBhbmQgc3BlY2lmaWVkIG5hbWUuXG4gKlxuICogYGBganNcbiAqIGNsYXNzIE15Q3VzdG9tTGF5ZXIgZXh0ZW5kcyB0Zi5sYXllcnMuTGF5ZXIge1xuICogICBzdGF0aWMgY2xhc3NOYW1lID0gJ015Q3VzdG9tTGF5ZXInO1xuICpcbiAqICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gKiAgICAgc3VwZXIoY29uZmlnKTtcbiAqICAgfVxuICogfVxuICogdGYuc2VyaWFsaXphdGlvbi5yZWdpc3RlckNsYXNzKE15Q3VzdG9tTGF5ZXIpO1xuICogY29uc29sZS5sb2codGYuc2VyaWFsaXphdGlvbi5HTE9CQUxDVVNUT01PQkpFQ1QuZ2V0KFwiQ3VzdG9tPk15Q3VzdG9tTGF5ZXJcIikpO1xuICogY29uc29sZS5sb2codGYuc2VyaWFsaXphdGlvbi5HTE9CQUxDVVNUT01OQU1FUy5nZXQoTXlDdXN0b21MYXllcikpO1xuICogYGBgXG4gKlxuICogRXhhbXBsZSAyLiBSZWdpc3RlciB0aGUgY2xhc3Mgd2l0aCBwYWNrYWdlIG5hbWU6IFwiUGFja2FnZVwiIGFuZCBzcGVjaWZpZWRcbiAqIG5hbWU6IFwiTXlMYXllclwiLlxuICogYGBganNcbiAqIGNsYXNzIE15Q3VzdG9tTGF5ZXIgZXh0ZW5kcyB0Zi5sYXllcnMuTGF5ZXIge1xuICogICBzdGF0aWMgY2xhc3NOYW1lID0gJ015Q3VzdG9tTGF5ZXInO1xuICpcbiAqICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gKiAgICAgc3VwZXIoY29uZmlnKTtcbiAqICAgfVxuICogfVxuICogdGYuc2VyaWFsaXphdGlvbi5yZWdpc3RlckNsYXNzKE15Q3VzdG9tTGF5ZXIsIFwiUGFja2FnZVwiLCBcIk15TGF5ZXJcIik7XG4gKiBjb25zb2xlLmxvZyh0Zi5zZXJpYWxpemF0aW9uLkdMT0JBTENVU1RPTU9CSkVDVC5nZXQoXCJQYWNrYWdlPk15TGF5ZXJcIikpO1xuICogY29uc29sZS5sb2codGYuc2VyaWFsaXphdGlvbi5HTE9CQUxDVVNUT01OQU1FUy5nZXQoTXlDdXN0b21MYXllcikpO1xuICogYGBgXG4gKlxuICogRXhhbXBsZSAzLiBSZWdpc3RlciB0aGUgY2xhc3Mgd2l0aCBzcGVjaWZpZWQgbmFtZTogXCJNeUxheWVyXCIuXG4gKiBgYGBqc1xuICogY2xhc3MgTXlDdXN0b21MYXllciBleHRlbmRzIHRmLmxheWVycy5MYXllciB7XG4gKiAgIHN0YXRpYyBjbGFzc05hbWUgPSAnTXlDdXN0b21MYXllcic7XG4gKlxuICogICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAqICAgICBzdXBlcihjb25maWcpO1xuICogICB9XG4gKiB9XG4gKiB0Zi5zZXJpYWxpemF0aW9uLnJlZ2lzdGVyQ2xhc3MoTXlDdXN0b21MYXllciwgdW5kZWZpbmVkLCBcIk15TGF5ZXJcIik7XG4gKiBjb25zb2xlLmxvZyh0Zi5zZXJpYWxpemF0aW9uLkdMT0JBTENVU1RPTU9CSkVDVC5nZXQoXCJDdXN0b20+TXlMYXllclwiKSk7XG4gKiBjb25zb2xlLmxvZyh0Zi5zZXJpYWxpemF0aW9uLkdMT0JBTENVU1RPTU5BTUVTLmdldChNeUN1c3RvbUxheWVyKSk7XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlIDQuIFJlZ2lzdGVyIHRoZSBjbGFzcyB3aXRoIHNwZWNpZmllZCBwYWNrYWdlIG5hbWU6IFwiUGFja2FnZVwiLlxuICogYGBganNcbiAqIGNsYXNzIE15Q3VzdG9tTGF5ZXIgZXh0ZW5kcyB0Zi5sYXllcnMuTGF5ZXIge1xuICogICBzdGF0aWMgY2xhc3NOYW1lID0gJ015Q3VzdG9tTGF5ZXInO1xuICpcbiAqICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gKiAgICAgc3VwZXIoY29uZmlnKTtcbiAqICAgfVxuICogfVxuICogdGYuc2VyaWFsaXphdGlvbi5yZWdpc3RlckNsYXNzKE15Q3VzdG9tTGF5ZXIsIFwiUGFja2FnZVwiKTtcbiAqIGNvbnNvbGUubG9nKHRmLnNlcmlhbGl6YXRpb24uR0xPQkFMQ1VTVE9NT0JKRUNUXG4gKiAuZ2V0KFwiUGFja2FnZT5NeUN1c3RvbUxheWVyXCIpKTtcbiAqIGNvbnNvbGUubG9nKHRmLnNlcmlhbGl6YXRpb24uR0xPQkFMQ1VTVE9NTkFNRVNcbiAqIC5nZXQoTXlDdXN0b21MYXllcikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGNscyBUaGUgY2xhc3MgdG8gYmUgcmVnaXN0ZXJlZC4gSXQgbXVzdCBoYXZlIGEgcHVibGljIHN0YXRpYyBtZW1iZXJcbiAqICAgY2FsbGVkIGBjbGFzc05hbWVgIGRlZmluZWQgYW5kIHRoZSB2YWx1ZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5cbiAqIEBwYXJhbSBwa2cgVGhlIHBha2NhZ2UgbmFtZSB0aGF0IHRoaXMgY2xhc3MgYmVsb25ncyB0by4gVGhpcyB1c2VkIHRvIGRlZmluZVxuICogICAgIHRoZSBrZXkgaW4gR2xvYmFsQ3VzdG9tT2JqZWN0LiBJZiBub3QgZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8gYEN1c3RvbWAuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGF0IHVzZXIgc3BlY2lmaWVkLiBJdCBkZWZhdWx0cyB0byB0aGUgYWN0dWFsIG5hbWUgb2ZcbiAqICAgICB0aGUgY2xhc3MgYXMgc3BlY2lmaWVkIGJ5IGl0cyBzdGF0aWMgYGNsYXNzTmFtZWAgcHJvcGVydHkuXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ1NlcmlhbGl6YXRpb24nLCBpZ25vcmVDSTogdHJ1ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ2xhc3M8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oXG4gICAgY2xzOiBTZXJpYWxpemFibGVDb25zdHJ1Y3RvcjxUPiwgcGtnPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nKSB7XG4gIGFzc2VydChcbiAgICAgIGNscy5jbGFzc05hbWUgIT0gbnVsbCxcbiAgICAgICgpID0+IGBDbGFzcyBiZWluZyByZWdpc3RlcmVkIGRvZXMgbm90IGhhdmUgdGhlIHN0YXRpYyBjbGFzc05hbWUgYCArXG4gICAgICAgICAgYHByb3BlcnR5IGRlZmluZWQuYCk7XG4gIGFzc2VydChcbiAgICAgIHR5cGVvZiBjbHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJyxcbiAgICAgICgpID0+IGBjbGFzc05hbWUgaXMgcmVxdWlyZWQgdG8gYmUgYSBzdHJpbmcsIGJ1dCBnb3QgdHlwZSBgICtcbiAgICAgICAgICB0eXBlb2YgY2xzLmNsYXNzTmFtZSk7XG4gIGFzc2VydChcbiAgICAgIGNscy5jbGFzc05hbWUubGVuZ3RoID4gMCxcbiAgICAgICgpID0+IGBDbGFzcyBiZWluZyByZWdpc3RlcmVkIGhhcyBhbiBlbXB0eS1zdHJpbmcgYXMgaXRzIGNsYXNzTmFtZSwgYCArXG4gICAgICAgICAgYHdoaWNoIGlzIGRpc2FsbG93ZWQuYCk7XG5cbiAgaWYgKHR5cGVvZiBwa2cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcGtnID0gJ0N1c3RvbSc7XG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmFtZSA9IGNscy5jbGFzc05hbWU7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWUgPSBuYW1lO1xuICBjb25zdCByZWdpc3Rlck5hbWUgPSBwa2cgKyAnPicgKyBjbGFzc05hbWU7XG5cbiAgU2VyaWFsaXphdGlvbk1hcC5yZWdpc3RlcihjbHMpO1xuICBHTE9CQUxfQ1VTVE9NX09CSkVDVC5zZXQocmVnaXN0ZXJOYW1lLCBjbHMpO1xuICBHTE9CQUxfQ1VTVE9NX05BTUVTLnNldChjbHMsIHJlZ2lzdGVyTmFtZSk7XG5cbiAgcmV0dXJuIGNscztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHJlZ2lzdGVyZWQgbmFtZSBvZiBhIGNsYXNzLiBJZiB0aGUgY2xhc3MgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQsXG4gKiByZXR1cm4gdGhlIGNsYXNzIG5hbWUuXG4gKlxuICogQHBhcmFtIGNscyBUaGUgY2xhc3Mgd2Ugd2FudCB0byBnZXQgcmVnaXN0ZXIgbmFtZSBmb3IuIEl0IG11c3QgaGF2ZSBhIHB1YmxpY1xuICogICAgIHN0YXRpYyBtZW1iZXIgY2FsbGVkIGBjbGFzc05hbWVgIGRlZmluZWQuXG4gKiBAcmV0dXJucyByZWdpc3RlcmVkIG5hbWUgb3IgY2xhc3MgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZ2lzdGVyZWROYW1lPFQgZXh0ZW5kcyBTZXJpYWxpemFibGU+KFxuICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4pIHtcbiAgaWYgKEdMT0JBTF9DVVNUT01fTkFNRVMuaGFzKGNscykpIHtcbiAgICByZXR1cm4gR0xPQkFMX0NVU1RPTV9OQU1FUy5nZXQoY2xzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2xzLmNsYXNzTmFtZTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { dispose } from '../globals';\nimport { variableGrads } from '../gradients';\nimport { scalar } from '../ops/ops';\nimport { Serializable } from '../serialization';\n/** @doc {heading: 'Training', subheading: 'Classes', namespace: 'train'} */\nexport class Optimizer extends Serializable {\n /**\n * Executes `f()` and minimizes the scalar output of `f()` by computing\n * gradients of y with respect to the list of trainable variables provided by\n * `varList`. If no list is provided, it defaults to all trainable variables.\n *\n * @param f The function to execute and whose output to minimize.\n * @param returnCost Whether to return the scalar cost value produced by\n * executing `f()`.\n * @param varList An optional list of variables to update. If specified, only\n * the trainable variables in varList will be updated by minimize. Defaults to\n * all trainable variables.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers'}\n */\n minimize(f, returnCost = false, varList) {\n const { value, grads } = this.computeGradients(f, varList);\n if (varList != null) {\n const gradArray = varList.map(v => ({ name: v.name, tensor: grads[v.name] }));\n this.applyGradients(gradArray);\n }\n else {\n this.applyGradients(grads);\n }\n // Dispose gradients.\n dispose(grads);\n if (returnCost) {\n return value;\n }\n else {\n value.dispose();\n return null;\n }\n }\n /**\n * The number of iterations that this optimizer instance has been invoked for.\n */\n get iterations() {\n if (this.iterations_ == null) {\n this.iterations_ = 0;\n }\n return this.iterations_;\n }\n incrementIterations() {\n this.iterations_ = this.iterations + 1;\n }\n /**\n * Executes f() and computes the gradient of the scalar output of f() with\n * respect to the list of trainable variables provided by `varList`. If no\n * list is provided, it defaults to all trainable variables.\n *\n * @param f The function to execute and whose output to use for computing\n * gradients with respect to variables.\n * @param varList An optional list of variables to compute gradients with\n * respect to. If specified, only the trainable variables in varList will have\n * gradients computed with respect to. Defaults to all trainable variables.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers'}\n */\n computeGradients(f, varList) {\n return variableGrads(f, varList);\n }\n /**\n * Dispose the variables (if any) owned by this optimizer instance.\n */\n dispose() {\n if (this.iterations_ != null) {\n dispose(this.iterations_);\n }\n }\n async saveIterations() {\n if (this.iterations_ == null) {\n this.iterations_ = 0;\n }\n return {\n name: 'iter',\n // TODO(cais): Use 'int64' type when available.\n tensor: scalar(this.iterations_, 'int32')\n };\n }\n async getWeights() {\n throw new Error('getWeights() is not implemented for this optimizer yet.');\n }\n async setWeights(weightValues) {\n throw new Error(`setWeights() is not implemented for this optimizer class ` +\n `${this.getClassName()}`);\n }\n /**\n * Extract the first element of the weight values and set it\n * as the iterations counter variable of this instance of optimizer.\n *\n * @param weightValues\n * @returns Weight values with the first element consumed and excluded.\n */\n async extractIterations(weightValues) {\n this.iterations_ = (await weightValues[0].tensor.data())[0];\n return weightValues.slice(1);\n }\n}\nObject.defineProperty(Optimizer, Symbol.hasInstance, {\n value: (instance) => {\n return instance.minimize != null && instance.computeGradients != null &&\n instance.applyGradients != null;\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHRpbWl6ZXJzL29wdGltaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFvQjlDLDRFQUE0RTtBQUM1RSxNQUFNLE9BQWdCLFNBQVUsU0FBUSxZQUFZO0lBR2xEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxRQUFRLENBQUMsQ0FBZSxFQUFFLFVBQVUsR0FBRyxLQUFLLEVBQUUsT0FBb0I7UUFFaEUsTUFBTSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXpELElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUNuQixNQUFNLFNBQVMsR0FDWCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFFRCxxQkFBcUI7UUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWYsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDdEI7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVTLG1CQUFtQjtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxnQkFBZ0IsQ0FBQyxDQUFlLEVBQUUsT0FBb0I7UUFFcEQsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFZRDs7T0FFRztJQUNILE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTTtZQUNaLCtDQUErQztZQUMvQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO1NBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBMkI7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FDWCwyREFBMkQ7WUFDM0QsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBMkI7UUFFM0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE1BQU0sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFO0lBQ25ELEtBQUssRUFBRSxDQUFDLFFBQW1CLEVBQUUsRUFBRTtRQUM3QixPQUFPLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO1lBQ2pFLFFBQVEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO0lBQ3RDLENBQUM7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZGlzcG9zZX0gZnJvbSAnLi4vZ2xvYmFscyc7XG5pbXBvcnQge3ZhcmlhYmxlR3JhZHN9IGZyb20gJy4uL2dyYWRpZW50cyc7XG5pbXBvcnQge3NjYWxhcn0gZnJvbSAnLi4vb3BzL29wcyc7XG5pbXBvcnQge1NlcmlhbGl6YWJsZX0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1NjYWxhciwgVmFyaWFibGV9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yLCBOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuLyoqXG4gKiBBIHZhcmlhYmxlIHRoYXQgYmVsb25ncyB0byBhbiBvcHRpbWl6ZXIuXG4gKlxuICogVGhlIGBvcmlnaW5hbE5hbWVgIGZpZWxkIGlzIHJlcXVpcmVkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSBjYW5vbmljYWxcbiAqIG5hbWUgb2YgdGhlIHZhcmlhYmxlLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBuYW1lIG9mIHRoZSBtb2RlbCB3ZWlnaHQgdGhhdFxuICogdGhlIHZhcmlhYmxlIGlzIHJlbGF0ZWQgdG8gcGx1cyBhIHN1ZmZpeCwgZS5nLiwgJ2RlbnNlMS9rZXJuZWwvbW9tZW50dW0nLlxuICogVGhlIG5hbWUgb2YgdGhlIGBWYXJpYWJsZWAgb2JqZWN0IGl0c2VsZiBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBkdWUgdG9cbiAqIHBvc3NpYmxlIGRlZHVwbGljYXRpb246IEV2ZXJ5IGBWYXJpYWJsZWAgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUgYnV0IG1vcmVcbiAqIHRoYW4gb25lIG9wdGltaXplciBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgbWF5IGJlIGNyZWF0ZWQgZm9yIHRoZSBzYW1lIG1vZGVsXG4gKiBvciB0aGUgc2FtZSBgVmFyaWFibGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wdGltaXplclZhcmlhYmxlIHtcbiAgb3JpZ2luYWxOYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlOiBWYXJpYWJsZTtcbn1cblxuLyoqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJywgbmFtZXNwYWNlOiAndHJhaW4nfSAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9wdGltaXplciBleHRlbmRzIFNlcmlhbGl6YWJsZSB7XG4gIHByb3RlY3RlZCBpdGVyYXRpb25zXzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBgZigpYCBhbmQgbWluaW1pemVzIHRoZSBzY2FsYXIgb3V0cHV0IG9mIGBmKClgIGJ5IGNvbXB1dGluZ1xuICAgKiBncmFkaWVudHMgb2YgeSB3aXRoIHJlc3BlY3QgdG8gdGhlIGxpc3Qgb2YgdHJhaW5hYmxlIHZhcmlhYmxlcyBwcm92aWRlZCBieVxuICAgKiBgdmFyTGlzdGAuIElmIG5vIGxpc3QgaXMgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIGFsbCB0cmFpbmFibGUgdmFyaWFibGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZiBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhbmQgd2hvc2Ugb3V0cHV0IHRvIG1pbmltaXplLlxuICAgKiBAcGFyYW0gcmV0dXJuQ29zdCBXaGV0aGVyIHRvIHJldHVybiB0aGUgc2NhbGFyIGNvc3QgdmFsdWUgcHJvZHVjZWQgYnlcbiAgICogZXhlY3V0aW5nIGBmKClgLlxuICAgKiBAcGFyYW0gdmFyTGlzdCBBbiBvcHRpb25hbCBsaXN0IG9mIHZhcmlhYmxlcyB0byB1cGRhdGUuIElmIHNwZWNpZmllZCwgb25seVxuICAgKiB0aGUgdHJhaW5hYmxlIHZhcmlhYmxlcyBpbiB2YXJMaXN0IHdpbGwgYmUgdXBkYXRlZCBieSBtaW5pbWl6ZS4gRGVmYXVsdHMgdG9cbiAgICogYWxsIHRyYWluYWJsZSB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdPcHRpbWl6ZXJzJ31cbiAgICovXG4gIG1pbmltaXplKGY6ICgpID0+IFNjYWxhciwgcmV0dXJuQ29zdCA9IGZhbHNlLCB2YXJMaXN0PzogVmFyaWFibGVbXSk6IFNjYWxhclxuICAgICAgfG51bGwge1xuICAgIGNvbnN0IHt2YWx1ZSwgZ3JhZHN9ID0gdGhpcy5jb21wdXRlR3JhZGllbnRzKGYsIHZhckxpc3QpO1xuXG4gICAgaWYgKHZhckxpc3QgIT0gbnVsbCkge1xuICAgICAgY29uc3QgZ3JhZEFycmF5OiBOYW1lZFRlbnNvcltdID1cbiAgICAgICAgICB2YXJMaXN0Lm1hcCh2ID0+ICh7bmFtZTogdi5uYW1lLCB0ZW5zb3I6IGdyYWRzW3YubmFtZV19KSk7XG4gICAgICB0aGlzLmFwcGx5R3JhZGllbnRzKGdyYWRBcnJheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwbHlHcmFkaWVudHMoZ3JhZHMpO1xuICAgIH1cblxuICAgIC8vIERpc3Bvc2UgZ3JhZGllbnRzLlxuICAgIGRpc3Bvc2UoZ3JhZHMpO1xuXG4gICAgaWYgKHJldHVybkNvc3QpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUuZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aGF0IHRoaXMgb3B0aW1pemVyIGluc3RhbmNlIGhhcyBiZWVuIGludm9rZWQgZm9yLlxuICAgKi9cbiAgZ2V0IGl0ZXJhdGlvbnMoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pdGVyYXRpb25zXyA9PSBudWxsKSB7XG4gICAgICB0aGlzLml0ZXJhdGlvbnNfID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXRlcmF0aW9uc187XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5jcmVtZW50SXRlcmF0aW9ucygpIHtcbiAgICB0aGlzLml0ZXJhdGlvbnNfID0gdGhpcy5pdGVyYXRpb25zICsgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBmKCkgYW5kIGNvbXB1dGVzIHRoZSBncmFkaWVudCBvZiB0aGUgc2NhbGFyIG91dHB1dCBvZiBmKCkgd2l0aFxuICAgKiByZXNwZWN0IHRvIHRoZSBsaXN0IG9mIHRyYWluYWJsZSB2YXJpYWJsZXMgcHJvdmlkZWQgYnkgYHZhckxpc3RgLiBJZiBub1xuICAgKiBsaXN0IGlzIHByb3ZpZGVkLCBpdCBkZWZhdWx0cyB0byBhbGwgdHJhaW5hYmxlIHZhcmlhYmxlcy5cbiAgICpcbiAgICogQHBhcmFtIGYgVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYW5kIHdob3NlIG91dHB1dCB0byB1c2UgZm9yIGNvbXB1dGluZ1xuICAgKiBncmFkaWVudHMgd2l0aCByZXNwZWN0IHRvIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHZhckxpc3QgQW4gb3B0aW9uYWwgbGlzdCBvZiB2YXJpYWJsZXMgdG8gY29tcHV0ZSBncmFkaWVudHMgd2l0aFxuICAgKiByZXNwZWN0IHRvLiBJZiBzcGVjaWZpZWQsIG9ubHkgdGhlIHRyYWluYWJsZSB2YXJpYWJsZXMgaW4gdmFyTGlzdCB3aWxsIGhhdmVcbiAgICogZ3JhZGllbnRzIGNvbXB1dGVkIHdpdGggcmVzcGVjdCB0by4gRGVmYXVsdHMgdG8gYWxsIHRyYWluYWJsZSB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdPcHRpbWl6ZXJzJ31cbiAgICovXG4gIGNvbXB1dGVHcmFkaWVudHMoZjogKCkgPT4gU2NhbGFyLCB2YXJMaXN0PzogVmFyaWFibGVbXSk6XG4gICAgICB7dmFsdWU6IFNjYWxhciwgZ3JhZHM6IE5hbWVkVGVuc29yTWFwfSB7XG4gICAgcmV0dXJuIHZhcmlhYmxlR3JhZHMoZiwgdmFyTGlzdCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB2YXJpYWJsZXMgYnkgdXNpbmcgdGhlIGNvbXB1dGVkIGdyYWRpZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlR3JhZGllbnRzIEEgbWFwcGluZyBvZiB2YXJpYWJsZSBuYW1lIHRvIGl0cyBncmFkaWVudCB2YWx1ZS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ09wdGltaXplcnMnfVxuICAgKi9cbiAgYWJzdHJhY3QgYXBwbHlHcmFkaWVudHModmFyaWFibGVHcmFkaWVudHM6IE5hbWVkVGVuc29yTWFwfFxuICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lZFRlbnNvcltdKTogdm9pZDtcblxuICAvKipcbiAgICogRGlzcG9zZSB0aGUgdmFyaWFibGVzIChpZiBhbnkpIG93bmVkIGJ5IHRoaXMgb3B0aW1pemVyIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pdGVyYXRpb25zXyAhPSBudWxsKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuaXRlcmF0aW9uc18pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVJdGVyYXRpb25zKCk6IFByb21pc2U8TmFtZWRUZW5zb3I+IHtcbiAgICBpZiAodGhpcy5pdGVyYXRpb25zXyA9PSBudWxsKSB7XG4gICAgICB0aGlzLml0ZXJhdGlvbnNfID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdpdGVyJywgIC8vIE5hbWVkIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAgIC8vIFRPRE8oY2Fpcyk6IFVzZSAnaW50NjQnIHR5cGUgd2hlbiBhdmFpbGFibGUuXG4gICAgICB0ZW5zb3I6IHNjYWxhcih0aGlzLml0ZXJhdGlvbnNfLCAnaW50MzInKVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRXZWlnaHRzKCk6IFByb21pc2U8TmFtZWRUZW5zb3JbXT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2V0V2VpZ2h0cygpIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcHRpbWl6ZXIgeWV0LicpO1xuICB9XG5cbiAgYXN5bmMgc2V0V2VpZ2h0cyh3ZWlnaHRWYWx1ZXM6IE5hbWVkVGVuc29yW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBzZXRXZWlnaHRzKCkgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIG9wdGltaXplciBjbGFzcyBgICtcbiAgICAgICAgYCR7dGhpcy5nZXRDbGFzc05hbWUoKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB3ZWlnaHQgdmFsdWVzIGFuZCBzZXQgaXRcbiAgICogYXMgdGhlIGl0ZXJhdGlvbnMgY291bnRlciB2YXJpYWJsZSBvZiB0aGlzIGluc3RhbmNlIG9mIG9wdGltaXplci5cbiAgICpcbiAgICogQHBhcmFtIHdlaWdodFZhbHVlc1xuICAgKiBAcmV0dXJucyBXZWlnaHQgdmFsdWVzIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgY29uc3VtZWQgYW5kIGV4Y2x1ZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGV4dHJhY3RJdGVyYXRpb25zKHdlaWdodFZhbHVlczogTmFtZWRUZW5zb3JbXSk6XG4gICAgICBQcm9taXNlPE5hbWVkVGVuc29yW10+IHtcbiAgICB0aGlzLml0ZXJhdGlvbnNfID0gKGF3YWl0IHdlaWdodFZhbHVlc1swXS50ZW5zb3IuZGF0YSgpKVswXTtcbiAgICByZXR1cm4gd2VpZ2h0VmFsdWVzLnNsaWNlKDEpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcHRpbWl6ZXIsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICB2YWx1ZTogKGluc3RhbmNlOiBPcHRpbWl6ZXIpID0+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UubWluaW1pemUgIT0gbnVsbCAmJiBpbnN0YW5jZS5jb21wdXRlR3JhZGllbnRzICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UuYXBwbHlHcmFkaWVudHMgIT0gbnVsbDtcbiAgfVxufSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { mul } from '../ops/mul';\nimport { sqrt } from '../ops/ops';\nimport { square } from '../ops/square';\nimport { zerosLike } from '../ops/zeros_like';\nimport { Optimizer } from './optimizer';\n/** @doclink Optimizer */\nexport class AdadeltaOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Adadelta';\n }\n constructor(learningRate, rho, epsilon = null) {\n super();\n this.learningRate = learningRate;\n this.rho = rho;\n this.epsilon = epsilon;\n this.accumulatedGrads = [];\n this.accumulatedUpdates = [];\n if (epsilon == null) {\n this.epsilon = ENGINE.backend.epsilon();\n }\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n const trainable = false;\n if (this.accumulatedGrads[i] == null) {\n this.accumulatedGrads[i] = {\n originalName: `${name}/accum_grad`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n if (this.accumulatedUpdates[i] == null) {\n this.accumulatedUpdates[i] = {\n originalName: `${name}/accum_var`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const accumulatedGrad = this.accumulatedGrads[i].variable;\n const accumulatedUpdate = this.accumulatedUpdates[i].variable;\n tidy(() => {\n const newAccumulatedGrad = add(mul(accumulatedGrad, this.rho), mul(square(gradient), 1 - this.rho));\n const updates = mul(div(sqrt(add(accumulatedUpdate, this.epsilon)), sqrt(add(accumulatedGrad, this.epsilon))), gradient);\n const newAccumulatedUpdate = add(mul(accumulatedUpdate, this.rho), mul(square(updates), 1 - this.rho));\n accumulatedGrad.assign(newAccumulatedGrad);\n accumulatedUpdate.assign(newAccumulatedUpdate);\n const newValue = add(mul(updates, -this.learningRate), value);\n value.assign(newValue);\n });\n });\n this.incrementIterations();\n }\n dispose() {\n if (this.accumulatedUpdates != null) {\n dispose(this.accumulatedGrads.map(v => v.variable));\n dispose(this.accumulatedUpdates.map(v => v.variable));\n }\n }\n async getWeights() {\n // Order matters for Python compatibility.\n const variables = [...this.accumulatedGrads, ...this.accumulatedUpdates];\n return [await this.saveIterations()].concat(variables.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n const variableCount = weightValues.length / 2;\n const trainable = false;\n this.accumulatedGrads =\n weightValues.slice(0, variableCount).map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n this.accumulatedUpdates =\n weightValues.slice(variableCount, variableCount * 2)\n .map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'rho': this.rho,\n 'epsilon': this.epsilon\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['rho'], config['epsilon']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhZGVsdGFfb3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHRpbWl6ZXJzL2FkYWRlbHRhX29wdGltaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJNUMsT0FBTyxFQUFDLFNBQVMsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFFekQseUJBQXlCO0FBQ3pCLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxTQUFTO0lBQzlDLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssU0FBUztRQUNsQix5Q0FBeUM7UUFDekMsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBSUQsWUFDYyxZQUFvQixFQUFZLEdBQVcsRUFDM0MsVUFBa0IsSUFBSTtRQUNsQyxLQUFLLEVBQUUsQ0FBQztRQUZJLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQVksUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUMzQyxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBTDVCLHFCQUFnQixHQUF3QixFQUFFLENBQUM7UUFDM0MsdUJBQWtC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QUMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtkaXNwb3NlLCB0aWR5fSBmcm9tICcuLi9nbG9iYWxzJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9vcHMvYWRkJztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9vcHMvZGl2JztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9vcHMvbXVsJztcbmltcG9ydCB7c3FydH0gZnJvbSAnLi4vb3BzL29wcyc7XG5pbXBvcnQge3NxdWFyZX0gZnJvbSAnLi4vb3BzL3NxdWFyZSc7XG5pbXBvcnQge3plcm9zTGlrZX0gZnJvbSAnLi4vb3BzL3plcm9zX2xpa2UnO1xuaW1wb3J0IHtDb25maWdEaWN0LCBTZXJpYWxpemFibGUsIFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7TmFtZWRUZW5zb3IsIE5hbWVkVmFyaWFibGVNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5cbmltcG9ydCB7T3B0aW1pemVyLCBPcHRpbWl6ZXJWYXJpYWJsZX0gZnJvbSAnLi9vcHRpbWl6ZXInO1xuXG4vKiogQGRvY2xpbmsgT3B0aW1pemVyICovXG5leHBvcnQgY2xhc3MgQWRhZGVsdGFPcHRpbWl6ZXIgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgLy8gTmFtZSBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBiZWNhdXNlIHdoZW4gaXQncyBhIHByb3BlcnR5LCBpdFxuICAgIC8vIHByZXZlbnRzIHRoZSBlbnRpcmUgY2xhc3MgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgICByZXR1cm4gJ0FkYWRlbHRhJztcbiAgfVxuICBwcml2YXRlIGFjY3VtdWxhdGVkR3JhZHM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZFVwZGF0ZXM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByb3RlY3RlZCBsZWFybmluZ1JhdGU6IG51bWJlciwgcHJvdGVjdGVkIHJobzogbnVtYmVyLFxuICAgICAgcHJvdGVjdGVkIGVwc2lsb246IG51bWJlciA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKGVwc2lsb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5lcHNpbG9uID0gRU5HSU5FLmJhY2tlbmQuZXBzaWxvbigpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFZhcmlhYmxlTWFwfE5hbWVkVGVuc29yW10pIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWVzID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICB2YXJpYWJsZUdyYWRpZW50cy5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpIDpcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFibGVHcmFkaWVudHMpO1xuXG4gICAgdmFyaWFibGVOYW1lcy5mb3JFYWNoKChuYW1lLCBpKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgY29uc3QgdHJhaW5hYmxlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5hY2N1bXVsYXRlZEdyYWRzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZEdyYWRzW2ldID0ge1xuICAgICAgICAgIG9yaWdpbmFsTmFtZTogYCR7bmFtZX0vYWNjdW1fZ3JhZGAsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoKCkgPT4gemVyb3NMaWtlKHZhbHVlKS52YXJpYWJsZSh0cmFpbmFibGUpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRVcGRhdGVzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFVwZGF0ZXNbaV0gPSB7XG4gICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9hY2N1bV92YXJgLFxuICAgICAgICAgIHZhcmlhYmxlOiB0aWR5KCgpID0+IHplcm9zTGlrZSh2YWx1ZSkudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbaV0udGVuc29yIDpcbiAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tuYW1lXTtcbiAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNjdW11bGF0ZWRHcmFkID0gdGhpcy5hY2N1bXVsYXRlZEdyYWRzW2ldLnZhcmlhYmxlO1xuICAgICAgY29uc3QgYWNjdW11bGF0ZWRVcGRhdGUgPSB0aGlzLmFjY3VtdWxhdGVkVXBkYXRlc1tpXS52YXJpYWJsZTtcblxuICAgICAgdGlkeSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0FjY3VtdWxhdGVkR3JhZCA9XG4gICAgICAgICAgICBhZGQobXVsKGFjY3VtdWxhdGVkR3JhZCwgdGhpcy5yaG8pLFxuICAgICAgICAgICAgICAgIG11bChzcXVhcmUoZ3JhZGllbnQpLCAxIC0gdGhpcy5yaG8pKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVzID1cbiAgICAgICAgICAgIG11bChkaXYoc3FydChhZGQoYWNjdW11bGF0ZWRVcGRhdGUsIHRoaXMuZXBzaWxvbikpLFxuICAgICAgICAgICAgICAgICAgICBzcXJ0KGFkZChhY2N1bXVsYXRlZEdyYWQsIHRoaXMuZXBzaWxvbikpKSxcbiAgICAgICAgICAgICAgICBncmFkaWVudCk7XG5cbiAgICAgICAgY29uc3QgbmV3QWNjdW11bGF0ZWRVcGRhdGUgPVxuICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZFVwZGF0ZSwgdGhpcy5yaG8pLFxuICAgICAgICAgICAgICAgIG11bChzcXVhcmUodXBkYXRlcyksIDEgLSB0aGlzLnJobykpO1xuXG4gICAgICAgIGFjY3VtdWxhdGVkR3JhZC5hc3NpZ24obmV3QWNjdW11bGF0ZWRHcmFkKTtcbiAgICAgICAgYWNjdW11bGF0ZWRVcGRhdGUuYXNzaWduKG5ld0FjY3VtdWxhdGVkVXBkYXRlKTtcblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGFkZChtdWwodXBkYXRlcywgLXRoaXMubGVhcm5pbmdSYXRlKSwgdmFsdWUpO1xuICAgICAgICB2YWx1ZS5hc3NpZ24obmV3VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5pbmNyZW1lbnRJdGVyYXRpb25zKCk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjY3VtdWxhdGVkVXBkYXRlcyAhPSBudWxsKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRHcmFkcy5tYXAodiA9PiB2LnZhcmlhYmxlKSk7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRVcGRhdGVzLm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRXZWlnaHRzKCk6IFByb21pc2U8TmFtZWRUZW5zb3JbXT4ge1xuICAgIC8vIE9yZGVyIG1hdHRlcnMgZm9yIFB5dGhvbiBjb21wYXRpYmlsaXR5LlxuICAgIGNvbnN0IHZhcmlhYmxlczogT3B0aW1pemVyVmFyaWFibGVbXSA9XG4gICAgICAgIFsuLi50aGlzLmFjY3VtdWxhdGVkR3JhZHMsIC4uLnRoaXMuYWNjdW11bGF0ZWRVcGRhdGVzXTtcbiAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2F2ZUl0ZXJhdGlvbnMoKV0uY29uY2F0KFxuICAgICAgICB2YXJpYWJsZXMubWFwKHYgPT4gKHtuYW1lOiB2Lm9yaWdpbmFsTmFtZSwgdGVuc29yOiB2LnZhcmlhYmxlfSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGNvbnN0IHZhcmlhYmxlQ291bnQgPSB3ZWlnaHRWYWx1ZXMubGVuZ3RoIC8gMjtcbiAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmFjY3VtdWxhdGVkR3JhZHMgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UoMCwgdmFyaWFibGVDb3VudCkubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogdi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6IHYudGVuc29yLnZhcmlhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgdGhpcy5hY2N1bXVsYXRlZFVwZGF0ZXMgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UodmFyaWFibGVDb3VudCwgdmFyaWFibGVDb3VudCAqIDIpXG4gICAgICAgICAgICAubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogdi50ZW5zb3IudmFyaWFibGUodHJhaW5hYmxlKVxuICAgICAgICAgICAgICAgICB9KSk7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdyaG8nOiB0aGlzLnJobyxcbiAgICAgICdlcHNpbG9uJzogdGhpcy5lcHNpbG9uXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKGNvbmZpZ1snbGVhcm5pbmdSYXRlJ10sIGNvbmZpZ1sncmhvJ10sIGNvbmZpZ1snZXBzaWxvbiddKTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Fill } from '../kernel_names';\nimport { inferDtype } from '../util';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\n/**\n * Creates a `tf.Tensor` filled with a scalar value.\n *\n * ```js\n * tf.fill([2, 2], 4).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param value The scalar value to fill the tensor with.\n * @param dtype The type of an element in the resulting tensor. Defaults to\n * 'float32' if the given param value is a number, otherwise 'string'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction fill(shape, value, dtype) {\n assertNonNegativeIntegerDimensions(shape);\n dtype = dtype || inferDtype(value);\n const attrs = { shape, value, dtype };\n return ENGINE.runKernel(Fill, {}, attrs);\n}\nexport { fill };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ZpbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFJaEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsSUFBSSxDQUNULEtBQWtCLEVBQUUsS0FBb0IsRUFBRSxLQUFnQjtJQUM1RCxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUxQyxLQUFLLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBYyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFFL0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxPQUFPLEVBQUMsSUFBSSxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtGaWxsLCBGaWxsQXR0cnN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtEYXRhVHlwZSwgUmFuaywgU2hhcGVNYXB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7aW5mZXJEdHlwZX0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIGZpbGxlZCB3aXRoIGEgc2NhbGFyIHZhbHVlLlxuICpcbiAqIGBgYGpzXG4gKiB0Zi5maWxsKFsyLCAyXSwgNCkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgc2NhbGFyIHZhbHVlIHRvIGZpbGwgdGhlIHRlbnNvciB3aXRoLlxuICogQHBhcmFtIGR0eXBlIFRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHJlc3VsdGluZyB0ZW5zb3IuIERlZmF1bHRzIHRvXG4gKiAgICAgJ2Zsb2F0MzInIGlmIHRoZSBnaXZlbiBwYXJhbSB2YWx1ZSBpcyBhIG51bWJlciwgb3RoZXJ3aXNlICdzdHJpbmcnLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gZmlsbDxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdLCB2YWx1ZTogbnVtYmVyfHN0cmluZywgZHR5cGU/OiBEYXRhVHlwZSk6IFRlbnNvcjxSPiB7XG4gIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMoc2hhcGUpO1xuXG4gIGR0eXBlID0gZHR5cGUgfHwgaW5mZXJEdHlwZSh2YWx1ZSk7XG4gIGNvbnN0IGF0dHJzOiBGaWxsQXR0cnMgPSB7c2hhcGUsIHZhbHVlLCBkdHlwZX07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRmlsbCwge30sIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IHtmaWxsfTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { fill } from '../ops/fill';\nimport { mul } from '../ops/mul';\nimport { sqrt } from '../ops/sqrt';\nimport { square } from '../ops/square';\nimport { Optimizer } from './optimizer';\n/** @doclink Optimizer */\nexport class AdagradOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Adagrad';\n }\n constructor(learningRate, initialAccumulatorValue = 0.1) {\n super();\n this.learningRate = learningRate;\n this.initialAccumulatorValue = initialAccumulatorValue;\n this.accumulatedGrads = [];\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n if (this.accumulatedGrads[i] == null) {\n const trainable = false;\n this.accumulatedGrads[i] = {\n originalName: `${name}/accumulator`,\n variable: tidy(() => fill(value.shape, this.initialAccumulatorValue)\n .variable(trainable))\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const accumulatedGrad = this.accumulatedGrads[i].variable;\n tidy(() => {\n const newAccumulatedGrad = add(accumulatedGrad, square(gradient));\n accumulatedGrad.assign(newAccumulatedGrad);\n const newValue = add(mul(div(gradient, sqrt(add(newAccumulatedGrad, ENGINE.backend.epsilon()))), -this.learningRate), value);\n value.assign(newValue);\n });\n });\n this.incrementIterations();\n }\n dispose() {\n if (this.accumulatedGrads != null) {\n dispose(this.accumulatedGrads.map(v => v.variable));\n }\n }\n async getWeights() {\n // Order matters for Python compatibility.\n return [await this.saveIterations()].concat(this.accumulatedGrads.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n const trainable = false;\n this.accumulatedGrads = weightValues.map(v => ({ originalName: v.name, variable: v.tensor.variable(trainable) }));\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'initialAccumulatorValue': this.initialAccumulatorValue,\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['initialAccumulatorValue']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhZ3JhZF9vcHRpbWl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wdGltaXplcnMvYWRhZ3JhZF9vcHRpbWl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlyQyxPQUFPLEVBQUMsU0FBUyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUV6RCx5QkFBeUI7QUFDekIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUFDN0Msa0JBQWtCO0lBQ2xCLE1BQU0sS0FBSyxTQUFTO1FBQ2xCLHlDQUF5QztRQUN6QywwRUFBMEU7UUFDMUUsb0RBQW9EO1FBQ3BELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFJRCxZQUNjLFlBQW9CLEVBQVUsMEJBQTBCLEdBQUc7UUFDdkUsS0FBSyxFQUFFLENBQUM7UUFESSxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUFVLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBTTtRQUhqRSxxQkFBZ0IsR0FBd0IsRUFBRSxDQUFDO0lBS25ELENBQUM7SUFFRCxjQUFjLENBQUMsaUJBQWlEO1FBQzlELE1BQU0sYUFB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LFlBQVksQ0FBQyxDQUFDO1FBQzFELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTztZQUNMLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNqQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1NBQ3hELENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBVSxVQUFVLENBQ3RCLEdBQStCLEVBQUUsTUFBa0I7UUFDckQsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtkaXNwb3NlLCB0aWR5fSBmcm9tICcuLi9nbG9iYWxzJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9vcHMvYWRkJztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9vcHMvZGl2JztcbmltcG9ydCB7ZmlsbH0gZnJvbSAnLi4vb3BzL2ZpbGwnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtzcXJ0fSBmcm9tICcuLi9vcHMvc3FydCc7XG5pbXBvcnQge3NxdWFyZX0gZnJvbSAnLi4vb3BzL3NxdWFyZSc7XG5pbXBvcnQge0NvbmZpZ0RpY3QsIFNlcmlhbGl6YWJsZSwgU2VyaWFsaXphYmxlQ29uc3RydWN0b3J9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRWYXJpYWJsZU1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuaW1wb3J0IHtPcHRpbWl6ZXIsIE9wdGltaXplclZhcmlhYmxlfSBmcm9tICcuL29wdGltaXplcic7XG5cbi8qKiBAZG9jbGluayBPcHRpbWl6ZXIgKi9cbmV4cG9ydCBjbGFzcyBBZGFncmFkT3B0aW1pemVyIGV4dGVuZHMgT3B0aW1pemVyIHtcbiAgLyoqIEBub2NvbGxhcHNlICovXG4gIHN0YXRpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgIC8vIE5hbWUgbWF0dGVycyBmb3IgUHl0aG9uIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gVGhpcyBpcyBhIGdldHRlciBpbnN0ZWFkIG9mIGEgcHJvcGVydHkgYmVjYXVzZSB3aGVuIGl0J3MgYSBwcm9wZXJ0eSwgaXRcbiAgICAvLyBwcmV2ZW50cyB0aGUgZW50aXJlIGNsYXNzIGZyb20gYmVpbmcgdHJlZS1zaGFrZW4uXG4gICAgcmV0dXJuICdBZGFncmFkJztcbiAgfVxuXG4gIHByaXZhdGUgYWNjdW11bGF0ZWRHcmFkczogT3B0aW1pemVyVmFyaWFibGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGxlYXJuaW5nUmF0ZTogbnVtYmVyLCBwcml2YXRlIGluaXRpYWxBY2N1bXVsYXRvclZhbHVlID0gMC4xKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFZhcmlhYmxlTWFwfE5hbWVkVGVuc29yW10pIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWVzID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICB2YXJpYWJsZUdyYWRpZW50cy5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpIDpcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFibGVHcmFkaWVudHMpO1xuXG4gICAgdmFyaWFibGVOYW1lcy5mb3JFYWNoKChuYW1lLCBpKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRHcmFkc1tpXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRyYWluYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjY3VtdWxhdGVkR3JhZHNbaV0gPSB7XG4gICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9hY2N1bXVsYXRvcmAsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoXG4gICAgICAgICAgICAgICgpID0+IGZpbGwodmFsdWUuc2hhcGUsIHRoaXMuaW5pdGlhbEFjY3VtdWxhdG9yVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbaV0udGVuc29yIDpcbiAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tuYW1lXTtcbiAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNjdW11bGF0ZWRHcmFkID0gdGhpcy5hY2N1bXVsYXRlZEdyYWRzW2ldLnZhcmlhYmxlO1xuXG4gICAgICB0aWR5KCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3QWNjdW11bGF0ZWRHcmFkID0gYWRkKGFjY3VtdWxhdGVkR3JhZCwgc3F1YXJlKGdyYWRpZW50KSk7XG4gICAgICAgIGFjY3VtdWxhdGVkR3JhZC5hc3NpZ24obmV3QWNjdW11bGF0ZWRHcmFkKTtcblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGFkZChcbiAgICAgICAgICAgIG11bChkaXYoZ3JhZGllbnQsXG4gICAgICAgICAgICAgICAgICAgIHNxcnQoYWRkKG5ld0FjY3VtdWxhdGVkR3JhZCwgRU5HSU5FLmJhY2tlbmQuZXBzaWxvbigpKSkpLFxuICAgICAgICAgICAgICAgIC10aGlzLmxlYXJuaW5nUmF0ZSksXG4gICAgICAgICAgICB2YWx1ZSk7XG4gICAgICAgIHZhbHVlLmFzc2lnbihuZXdWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmluY3JlbWVudEl0ZXJhdGlvbnMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRHcmFkcyAhPSBudWxsKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRHcmFkcy5tYXAodiA9PiB2LnZhcmlhYmxlKSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0V2VpZ2h0cygpOiBQcm9taXNlPE5hbWVkVGVuc29yW10+IHtcbiAgICAvLyBPcmRlciBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2F2ZUl0ZXJhdGlvbnMoKV0uY29uY2F0KHRoaXMuYWNjdW11bGF0ZWRHcmFkcy5tYXAoXG4gICAgICAgIHYgPT4gKHtuYW1lOiB2Lm9yaWdpbmFsTmFtZSwgdGVuc29yOiB2LnZhcmlhYmxlfSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGNvbnN0IHRyYWluYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuYWNjdW11bGF0ZWRHcmFkcyA9IHdlaWdodFZhbHVlcy5tYXAoXG4gICAgICAgIHYgPT4gKHtvcmlnaW5hbE5hbWU6IHYubmFtZSwgdmFyaWFibGU6IHYudGVuc29yLnZhcmlhYmxlKHRyYWluYWJsZSl9KSk7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdpbml0aWFsQWNjdW11bGF0b3JWYWx1ZSc6IHRoaXMuaW5pdGlhbEFjY3VtdWxhdG9yVmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKGNvbmZpZ1snbGVhcm5pbmdSYXRlJ10sIGNvbmZpZ1snaW5pdGlhbEFjY3VtdWxhdG9yVmFsdWUnXSk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Pow } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the power of one `tf.Tensor` to another. Supports broadcasting.\n *\n * Given a `tf.Tensor` x and a `tf.Tensor` y, this operation computes x^y for\n * corresponding elements in x and y. The result's dtype will be the upcasted\n * type of the `base` and `exp` dtypes.\n *\n * ```js\n * const a = tf.tensor([[2, 3], [4, 5]])\n * const b = tf.tensor([[1, 2], [3, 0]]).toInt();\n *\n * a.pow(b).print(); // or tf.pow(a, b)\n * ```\n *\n * ```js\n * const a = tf.tensor([[1, 2], [3, 4]])\n * const b = tf.tensor(2).toInt();\n *\n * a.pow(b).print(); // or tf.pow(a, b)\n * ```\n * We also expose `powStrict` which has the same signature as this op and\n * asserts that `base` and `exp` are the same shape (does not broadcast).\n *\n * @param base The base `tf.Tensor` to pow element-wise.\n * @param exp The exponent `tf.Tensor` to pow element-wise.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction pow_(base, exp) {\n let $base = convertToTensor(base, 'base', 'pow');\n let $exp = convertToTensor(exp, 'exp', 'pow');\n [$base, $exp] = makeTypesMatch($base, $exp);\n const inputs = { a: $base, b: $exp };\n return ENGINE.runKernel(Pow, inputs);\n}\nexport const pow = /* @__PURE__ */ op({ pow_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBUyxJQUFJLENBQ1QsSUFBdUIsRUFBRSxHQUFzQjtJQUNqRCxJQUFJLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxJQUFJLElBQUksR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTVDLE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFFOUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtQb3csIFBvd0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcG93ZXIgb2Ygb25lIGB0Zi5UZW5zb3JgIHRvIGFub3RoZXIuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBHaXZlbiBhIGB0Zi5UZW5zb3JgIHggYW5kIGEgYHRmLlRlbnNvcmAgeSwgdGhpcyBvcGVyYXRpb24gY29tcHV0ZXMgeF55IGZvclxuICogY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB4IGFuZCB5LiBUaGUgcmVzdWx0J3MgZHR5cGUgd2lsbCBiZSB0aGUgdXBjYXN0ZWRcbiAqIHR5cGUgb2YgdGhlIGBiYXNlYCBhbmQgYGV4cGAgZHR5cGVzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yKFtbMiwgM10sIFs0LCA1XV0pXG4gKiBjb25zdCBiID0gdGYudGVuc29yKFtbMSwgMl0sIFszLCAwXV0pLnRvSW50KCk7XG4gKlxuICogYS5wb3coYikucHJpbnQoKTsgIC8vIG9yIHRmLnBvdyhhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IoW1sxLCAyXSwgWzMsIDRdXSlcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IoMikudG9JbnQoKTtcbiAqXG4gKiBhLnBvdyhiKS5wcmludCgpOyAgLy8gb3IgdGYucG93KGEsIGIpXG4gKiBgYGBcbiAqIFdlIGFsc28gZXhwb3NlIGBwb3dTdHJpY3RgIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBvcCBhbmRcbiAqIGFzc2VydHMgdGhhdCBgYmFzZWAgYW5kIGBleHBgIGFyZSB0aGUgc2FtZSBzaGFwZSAoZG9lcyBub3QgYnJvYWRjYXN0KS5cbiAqXG4gKiBAcGFyYW0gYmFzZSBUaGUgYmFzZSBgdGYuVGVuc29yYCB0byBwb3cgZWxlbWVudC13aXNlLlxuICogQHBhcmFtIGV4cCBUaGUgZXhwb25lbnQgYHRmLlRlbnNvcmAgdG8gcG93IGVsZW1lbnQtd2lzZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdBcml0aG1ldGljJ31cbiAqL1xuZnVuY3Rpb24gcG93XzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBiYXNlOiBUZW5zb3J8VGVuc29yTGlrZSwgZXhwOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGJhc2UgPSBjb252ZXJ0VG9UZW5zb3IoYmFzZSwgJ2Jhc2UnLCAncG93Jyk7XG4gIGxldCAkZXhwID0gY29udmVydFRvVGVuc29yKGV4cCwgJ2V4cCcsICdwb3cnKTtcbiAgWyRiYXNlLCAkZXhwXSA9IG1ha2VUeXBlc01hdGNoKCRiYXNlLCAkZXhwKTtcblxuICBjb25zdCBpbnB1dHM6IFBvd0lucHV0cyA9IHthOiAkYmFzZSwgYjogJGV4cH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUG93LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBwb3cgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Bvd199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sub } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Subtracts two `tf.Tensor`s element-wise, A - B. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([10, 20, 30, 40]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.sub(b).print(); // or tf.sub(a, b)\n * ```\n *\n * ```js\n * // Broadcast subtract a with b.\n * const a = tf.tensor1d([10, 20, 30, 40]);\n * const b = tf.scalar(5);\n *\n * a.sub(b).print(); // or tf.sub(a, b)\n * ```\n * @param a The first `tf.Tensor` to subtract from.\n * @param b The second `tf.Tensor` to be subtracted. Must have the same dtype as\n * `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction sub_(a, b) {\n let $a = convertToTensor(a, 'a', 'sub');\n let $b = convertToTensor(b, 'b', 'sub');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Sub, inputs);\n}\nexport const sub = /* @__PURE__ */ op({ sub_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3ViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsSUFBSSxDQUFtQixDQUFvQixFQUFFLENBQW9CO0lBQ3hFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1N1YiwgU3ViSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHttYWtlVHlwZXNNYXRjaH0gZnJvbSAnLi4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFN1YnRyYWN0cyB0d28gYHRmLlRlbnNvcmBzIGVsZW1lbnQtd2lzZSwgQSAtIEIuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxMCwgMjAsIDMwLCA0MF0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKlxuICogYS5zdWIoYikucHJpbnQoKTsgIC8vIG9yIHRmLnN1YihhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBzdWJ0cmFjdCBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMTAsIDIwLCAzMCwgNDBdKTtcbiAqIGNvbnN0IGIgPSB0Zi5zY2FsYXIoNSk7XG4gKlxuICogYS5zdWIoYikucHJpbnQoKTsgIC8vIG9yIHRmLnN1YihhLCBiKVxuICogYGBgXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgYHRmLlRlbnNvcmAgdG8gc3VidHJhY3QgZnJvbS5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgYHRmLlRlbnNvcmAgdG8gYmUgc3VidHJhY3RlZC4gTXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlIGFzXG4gKiBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIHN1Yl88VCBleHRlbmRzIFRlbnNvcj4oYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdzdWInKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ3N1YicpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgY29uc3QgaW5wdXRzOiBTdWJJbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTdWIsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHN1YiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3ViX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { mul } from '../ops/mul';\nimport { pow } from '../ops/pow';\nimport { scalar } from '../ops/scalar';\nimport { sqrt } from '../ops/sqrt';\nimport { square } from '../ops/square';\nimport { sub } from '../ops/sub';\nimport { zerosLike } from '../ops/zeros_like';\nimport { Optimizer } from './optimizer';\nexport class AdamOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Adam';\n }\n constructor(learningRate, beta1, beta2, epsilon = null) {\n super();\n this.learningRate = learningRate;\n this.beta1 = beta1;\n this.beta2 = beta2;\n this.epsilon = epsilon;\n this.accumulatedFirstMoment = [];\n this.accumulatedSecondMoment = [];\n tidy(() => {\n // accB* will be updated by batch.\n this.accBeta1 = scalar(beta1).variable();\n this.accBeta2 = scalar(beta2).variable();\n });\n if (epsilon == null) {\n this.epsilon = ENGINE.backend.epsilon();\n }\n }\n applyGradients(variableGradients) {\n const varNames = Array.isArray(variableGradients) ?\n variableGradients.map(v => v.name) :\n Object.keys(variableGradients);\n tidy(() => {\n const oneMinusAccBeta1 = sub(1, this.accBeta1);\n const oneMinusAccBeta2 = sub(1, this.accBeta2);\n varNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n const trainable = false;\n if (this.accumulatedFirstMoment[i] == null) {\n this.accumulatedFirstMoment[i] = {\n originalName: `${name}/m`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n if (this.accumulatedSecondMoment[i] == null) {\n this.accumulatedSecondMoment[i] = {\n originalName: `${name}/v`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const firstMoment = this.accumulatedFirstMoment[i].variable;\n const secondMoment = this.accumulatedSecondMoment[i].variable;\n const newFirstMoment = add(mul(firstMoment, this.beta1), mul(gradient, 1 - this.beta1));\n const newSecondMoment = add(mul(secondMoment, this.beta2), mul(square(gradient), 1 - this.beta2));\n const biasCorrectedFirstMoment = div(newFirstMoment, oneMinusAccBeta1);\n const biasCorrectedSecondMoment = div(newSecondMoment, oneMinusAccBeta2);\n firstMoment.assign(newFirstMoment);\n secondMoment.assign(newSecondMoment);\n const newValue = add(mul(div(biasCorrectedFirstMoment, add(sqrt(biasCorrectedSecondMoment), this.epsilon)), -this.learningRate), value);\n value.assign(newValue);\n });\n this.accBeta1.assign(mul(this.accBeta1, this.beta1));\n this.accBeta2.assign(mul(this.accBeta2, this.beta2));\n });\n this.incrementIterations();\n }\n dispose() {\n this.accBeta1.dispose();\n this.accBeta2.dispose();\n if (this.accumulatedFirstMoment != null) {\n dispose(this.accumulatedFirstMoment.map(v => v.variable));\n }\n if (this.accumulatedSecondMoment != null) {\n dispose(this.accumulatedSecondMoment.map(v => v.variable));\n }\n }\n async getWeights() {\n // Order matters for Python compatibility.\n const variables = [...this.accumulatedFirstMoment, ...this.accumulatedSecondMoment];\n return [await this.saveIterations()].concat(variables.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n tidy(() => {\n this.accBeta1.assign(pow(this.beta1, this.iterations_ + 1));\n this.accBeta2.assign(pow(this.beta2, this.iterations_ + 1));\n });\n const variableCount = weightValues.length / 2;\n const trainable = false;\n this.accumulatedFirstMoment =\n weightValues.slice(0, variableCount).map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n this.accumulatedSecondMoment =\n weightValues.slice(variableCount, variableCount * 2)\n .map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'beta1': this.beta1,\n 'beta2': this.beta2,\n 'epsilon': this.epsilon,\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['beta1'], config['beta2'], config['epsilon']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhbV9vcHRpbWl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wdGltaXplcnMvYWRhbV9vcHRpbWl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSzVDLE9BQU8sRUFBQyxTQUFTLEVBQW9CLE1BQU0sYUFBYSxDQUFDO0FBRXpELE1BQU0sT0FBTyxhQUFjLFNBQVEsU0FBUztJQUMxQyxrQkFBa0I7SUFDbEIsTUFBTSxLQUFLLFNBQVM7UUFDbEIseUNBQXlDO1FBQ3pDLDBFQUEwRTtRQUMxRSxvREFBb0Q7UUFDcEQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQU9ELFlBQ2MsWUFBb0IsRUFBWSxLQUFhLEVBQzdDLEtBQWEsRUFBWSxVQUFrQixJQUFJO1FBQzNELEtBQUssRUFBRSxDQUFDO1FBRkksaUJB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LFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNLENBQVUsVUFBVSxDQUN0QixHQUErQixFQUFFLE1BQWtCO1FBQ3JELE9BQU8sSUFBSSxHQUFHLENBQ1YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge2Rpc3Bvc2UsIHRpZHl9IGZyb20gJy4uL2dsb2JhbHMnO1xuaW1wb3J0IHthZGR9IGZyb20gJy4uL29wcy9hZGQnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4uL29wcy9kaXYnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtwb3d9IGZyb20gJy4uL29wcy9wb3cnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL29wcy9zY2FsYXInO1xuaW1wb3J0IHtzcXJ0fSBmcm9tICcuLi9vcHMvc3FydCc7XG5pbXBvcnQge3NxdWFyZX0gZnJvbSAnLi4vb3BzL3NxdWFyZSc7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vb3BzL3N1Yic7XG5pbXBvcnQge3plcm9zTGlrZX0gZnJvbSAnLi4vb3BzL3plcm9zX2xpa2UnO1xuaW1wb3J0IHtDb25maWdEaWN0LCBTZXJpYWxpemFibGUsIFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7VmFyaWFibGV9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yLCBOYW1lZFZhcmlhYmxlTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuXG5pbXBvcnQge09wdGltaXplciwgT3B0aW1pemVyVmFyaWFibGV9IGZyb20gJy4vb3B0aW1pemVyJztcblxuZXhwb3J0IGNsYXNzIEFkYW1PcHRpbWl6ZXIgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgLy8gTmFtZSBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBiZWNhdXNlIHdoZW4gaXQncyBhIHByb3BlcnR5LCBpdFxuICAgIC8vIHByZXZlbnRzIHRoZSBlbnRpcmUgY2xhc3MgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgICByZXR1cm4gJ0FkYW0nO1xuICB9XG4gIHByaXZhdGUgYWNjQmV0YTE6IFZhcmlhYmxlO1xuICBwcml2YXRlIGFjY0JldGEyOiBWYXJpYWJsZTtcblxuICBwcml2YXRlIGFjY3VtdWxhdGVkRmlyc3RNb21lbnQ6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZFNlY29uZE1vbWVudDogT3B0aW1pemVyVmFyaWFibGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGxlYXJuaW5nUmF0ZTogbnVtYmVyLCBwcm90ZWN0ZWQgYmV0YTE6IG51bWJlcixcbiAgICAgIHByb3RlY3RlZCBiZXRhMjogbnVtYmVyLCBwcm90ZWN0ZWQgZXBzaWxvbjogbnVtYmVyID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGlkeSgoKSA9PiB7XG4gICAgICAvLyBhY2NCKiB3aWxsIGJlIHVwZGF0ZWQgYnkgYmF0Y2guXG4gICAgICB0aGlzLmFjY0JldGExID0gc2NhbGFyKGJldGExKS52YXJpYWJsZSgpO1xuICAgICAgdGhpcy5hY2NCZXRhMiA9IHNjYWxhcihiZXRhMikudmFyaWFibGUoKTtcbiAgICB9KTtcblxuICAgIGlmIChlcHNpbG9uID09IG51bGwpIHtcbiAgICAgIHRoaXMuZXBzaWxvbiA9IEVOR0lORS5iYWNrZW5kLmVwc2lsb24oKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUdyYWRpZW50cyh2YXJpYWJsZUdyYWRpZW50czogTmFtZWRWYXJpYWJsZU1hcHxOYW1lZFRlbnNvcltdKSB7XG4gICAgY29uc3QgdmFyTmFtZXMgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgIHZhcmlhYmxlR3JhZGllbnRzLm1hcCh2ID0+IHYubmFtZSkgOlxuICAgICAgICBPYmplY3Qua2V5cyh2YXJpYWJsZUdyYWRpZW50cyk7XG4gICAgdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCBvbmVNaW51c0FjY0JldGExID0gc3ViKDEsIHRoaXMuYWNjQmV0YTEpO1xuICAgICAgY29uc3Qgb25lTWludXNBY2NCZXRhMiA9IHN1YigxLCB0aGlzLmFjY0JldGEyKTtcblxuICAgICAgdmFyTmFtZXMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRGaXJzdE1vbWVudFtpXSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50W2ldID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9tYCxcbiAgICAgICAgICAgIHZhcmlhYmxlOiB0aWR5KCgpID0+IHplcm9zTGlrZSh2YWx1ZSkudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjY3VtdWxhdGVkU2Vjb25kTW9tZW50W2ldID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmFjY3VtdWxhdGVkU2Vjb25kTW9tZW50W2ldID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS92YCxcbiAgICAgICAgICAgIHZhcmlhYmxlOiB0aWR5KCgpID0+IHplcm9zTGlrZSh2YWx1ZSkudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tpXS50ZW5zb3IgOlxuICAgICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbbmFtZV07XG4gICAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RNb21lbnQgPSB0aGlzLmFjY3VtdWxhdGVkRmlyc3RNb21lbnRbaV0udmFyaWFibGU7XG4gICAgICAgIGNvbnN0IHNlY29uZE1vbWVudCA9IHRoaXMuYWNjdW11bGF0ZWRTZWNvbmRNb21lbnRbaV0udmFyaWFibGU7XG5cbiAgICAgICAgY29uc3QgbmV3Rmlyc3RNb21lbnQgPVxuICAgICAgICAgICAgYWRkKG11bChmaXJzdE1vbWVudCwgdGhpcy5iZXRhMSksIG11bChncmFkaWVudCwgMSAtIHRoaXMuYmV0YTEpKTtcbiAgICAgICAgY29uc3QgbmV3U2Vjb25kTW9tZW50ID1cbiAgICAgICAgICAgIGFkZChtdWwoc2Vjb25kTW9tZW50LCB0aGlzLmJldGEyKSxcbiAgICAgICAgICAgICAgICBtdWwoc3F1YXJlKGdyYWRpZW50KSwgMSAtIHRoaXMuYmV0YTIpKTtcblxuICAgICAgICBjb25zdCBiaWFzQ29ycmVjdGVkRmlyc3RNb21lbnQgPSBkaXYobmV3Rmlyc3RNb21lbnQsIG9uZU1pbnVzQWNjQmV0YTEpO1xuICAgICAgICBjb25zdCBiaWFzQ29ycmVjdGVkU2Vjb25kTW9tZW50ID1cbiAgICAgICAgICAgIGRpdihuZXdTZWNvbmRNb21lbnQsIG9uZU1pbnVzQWNjQmV0YTIpO1xuXG4gICAgICAgIGZpcnN0TW9tZW50LmFzc2lnbihuZXdGaXJzdE1vbWVudCk7XG4gICAgICAgIHNlY29uZE1vbWVudC5hc3NpZ24obmV3U2Vjb25kTW9tZW50KTtcblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9XG4gICAgICAgICAgICBhZGQobXVsKGRpdihiaWFzQ29ycmVjdGVkRmlyc3RNb21lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGQoc3FydChiaWFzQ29ycmVjdGVkU2Vjb25kTW9tZW50KSwgdGhpcy5lcHNpbG9uKSksXG4gICAgICAgICAgICAgICAgICAgIC10aGlzLmxlYXJuaW5nUmF0ZSksXG4gICAgICAgICAgICAgICAgdmFsdWUpO1xuICAgICAgICB2YWx1ZS5hc3NpZ24obmV3VmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWNjQmV0YTEuYXNzaWduKG11bCh0aGlzLmFjY0JldGExLCB0aGlzLmJldGExKSk7XG4gICAgICB0aGlzLmFjY0JldGEyLmFzc2lnbihtdWwodGhpcy5hY2NCZXRhMiwgdGhpcy5iZXRhMikpO1xuICAgIH0pO1xuICAgIHRoaXMuaW5jcmVtZW50SXRlcmF0aW9ucygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY0JldGExLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmFjY0JldGEyLmRpc3Bvc2UoKTtcblxuICAgIGlmICh0aGlzLmFjY3VtdWxhdGVkRmlyc3RNb21lbnQgIT0gbnVsbCkge1xuICAgICAgZGlzcG9zZSh0aGlzLmFjY3VtdWxhdGVkRmlyc3RNb21lbnQubWFwKHYgPT4gdi52YXJpYWJsZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY2N1bXVsYXRlZFNlY29uZE1vbWVudCAhPSBudWxsKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRTZWNvbmRNb21lbnQubWFwKHYgPT4gdi52YXJpYWJsZSkpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFdlaWdodHMoKTogUHJvbWlzZTxOYW1lZFRlbnNvcltdPiB7XG4gICAgLy8gT3JkZXIgbWF0dGVycyBmb3IgUHl0aG9uIGNvbXBhdGliaWxpdHkuXG4gICAgY29uc3QgdmFyaWFibGVzOiBPcHRpbWl6ZXJWYXJpYWJsZVtdID1cbiAgICAgICAgWy4uLnRoaXMuYWNjdW11bGF0ZWRGaXJzdE1vbWVudCwgLi4udGhpcy5hY2N1bXVsYXRlZFNlY29uZE1vbWVudF07XG4gICAgcmV0dXJuIFthd2FpdCB0aGlzLnNhdmVJdGVyYXRpb25zKCldLmNvbmNhdChcbiAgICAgICAgdmFyaWFibGVzLm1hcCh2ID0+ICh7bmFtZTogdi5vcmlnaW5hbE5hbWUsIHRlbnNvcjogdi52YXJpYWJsZX0pKSk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBzZXRXZWlnaHRzKHdlaWdodFZhbHVlczogTmFtZWRUZW5zb3JbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdlaWdodFZhbHVlcyA9IGF3YWl0IHRoaXMuZXh0cmFjdEl0ZXJhdGlvbnMod2VpZ2h0VmFsdWVzKTtcbiAgICB0aWR5KCgpID0+IHtcbiAgICAgIHRoaXMuYWNjQmV0YTEuYXNzaWduKHBvdyh0aGlzLmJldGExLCB0aGlzLml0ZXJhdGlvbnNfICsgMSkpO1xuICAgICAgdGhpcy5hY2NCZXRhMi5hc3NpZ24ocG93KHRoaXMuYmV0YTIsIHRoaXMuaXRlcmF0aW9uc18gKyAxKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB2YXJpYWJsZUNvdW50ID0gd2VpZ2h0VmFsdWVzLmxlbmd0aCAvIDI7XG4gICAgY29uc3QgdHJhaW5hYmxlID0gZmFsc2U7XG4gICAgdGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50ID1cbiAgICAgICAgd2VpZ2h0VmFsdWVzLnNsaWNlKDAsIHZhcmlhYmxlQ291bnQpLm1hcCh2ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlOiB2LnRlbnNvci52YXJpYWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbmFibGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgIHRoaXMuYWNjdW11bGF0ZWRTZWNvbmRNb21lbnQgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UodmFyaWFibGVDb3VudCwgdmFyaWFibGVDb3VudCAqIDIpXG4gICAgICAgICAgICAubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogdi50ZW5zb3IudmFyaWFibGUodHJhaW5hYmxlKVxuICAgICAgICAgICAgICAgICB9KSk7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdiZXRhMSc6IHRoaXMuYmV0YTEsXG4gICAgICAnYmV0YTInOiB0aGlzLmJldGEyLFxuICAgICAgJ2Vwc2lsb24nOiB0aGlzLmVwc2lsb24sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKFxuICAgICAgICBjb25maWdbJ2xlYXJuaW5nUmF0ZSddLCBjb25maWdbJ2JldGExJ10sIGNvbmZpZ1snYmV0YTInXSxcbiAgICAgICAgY29uZmlnWydlcHNpbG9uJ10pO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Abs, ComplexAbs } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes absolute value element-wise: `abs(x)`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.abs().print(); // or tf.abs(x)\n * ```\n * @param x The input `tf.Tensor`.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction abs_(x) {\n const $x = convertToTensor(x, 'x', 'abs');\n if ($x.dtype === 'complex64') {\n const inputs = { x: $x };\n return ENGINE.runKernel(ComplexAbs, inputs);\n }\n else {\n const inputs = { x: $x };\n return ENGINE.runKernel(Abs, inputs);\n }\n}\nexport const abs = /* @__PURE__ */ op({ abs_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBYSxVQUFVLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFHN0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLElBQUksQ0FBbUIsQ0FBZTtJQUM3QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUxQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQzVCLE1BQU0sTUFBTSxHQUFxQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUN6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQW1DLENBQUMsQ0FBQztLQUMxRTtTQUFNO1FBQ0wsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7S0FDbkU7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QWJzLCBBYnNJbnB1dHMsIENvbXBsZXhBYnMsIENvbXBsZXhBYnNJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgYWJzb2x1dGUgdmFsdWUgZWxlbWVudC13aXNlOiBgYWJzKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgNF0pO1xuICpcbiAqIHguYWJzKCkucHJpbnQoKTsgIC8vIG9yIHRmLmFicyh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgYHRmLlRlbnNvcmAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGFic188VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2FicycpO1xuXG4gIGlmICgkeC5kdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICBjb25zdCBpbnB1dHM6IENvbXBsZXhBYnNJbnB1dHMgPSB7eDogJHh9O1xuICAgIHJldHVybiBFTkdJTkUucnVuS2VybmVsKENvbXBsZXhBYnMsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpbnB1dHM6IEFic0lucHV0cyA9IHt4OiAkeH07XG4gICAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQWJzLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGFicyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YWJzX30pO1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Returns the dimensions in the input shape that are broadcasted to\n * produce the provided output shape.\n *\n * The returned dimensions are 0-indexed and sorted. An example:\n * inShape = [4, 1, 3]\n * outShape = [5, 4, 3, 3]\n * result = [1]. Dimension 1 (2nd dimension of input) gets broadcasted 1 => 3.\n */\nexport function getBroadcastDims(inShape, outShape) {\n const inRank = inShape.length;\n const dims = [];\n for (let i = 0; i < inRank; i++) {\n const dim = inRank - 1 - i;\n const a = inShape[dim] || 1;\n const b = outShape[outShape.length - 1 - i] || 1;\n if (b > 1 && a === 1) {\n dims.unshift(dim);\n }\n }\n return dims;\n}\n/**\n * Returns the axes in the output space that should be reduced to produce\n * the input space.\n */\nexport function getReductionAxes(inShape, outShape) {\n const result = [];\n for (let i = 0; i < outShape.length; i++) {\n const inDim = inShape[inShape.length - i - 1];\n const outAxis = outShape.length - i - 1;\n const outDim = outShape[outAxis];\n if (inDim == null || (inDim === 1 && outDim > 1)) {\n result.unshift(outAxis);\n }\n }\n return result;\n}\nexport function assertAndGetBroadcastShape(shapeA, shapeB) {\n const l = Math.max(shapeA.length, shapeB.length);\n const result = new Array(l);\n for (let i = 0; i < l; i++) {\n let a = shapeA[shapeA.length - i - 1];\n if (a == null) {\n a = 1;\n }\n let b = shapeB[shapeB.length - i - 1];\n if (b == null) {\n b = 1;\n }\n if (a === 1) {\n result[l - i - 1] = b;\n }\n else if (b === 1) {\n result[l - i - 1] = a;\n }\n else if (a !== b) {\n const errMsg = `Operands could not be broadcast together with shapes ` +\n `${shapeA} and ${shapeB}.`;\n throw Error(errMsg);\n }\n else {\n result[l - i - 1] = a;\n }\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9icm9hZGNhc3RfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsT0FBaUIsRUFBRSxRQUFrQjtJQUN2QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzlCLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLE9BQWlCLEVBQUUsUUFBa0I7SUFDdkMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3RDLE1BQWdCLEVBQUUsTUFBZ0I7SUFDcEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDYixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1A7UUFDRCxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ2IsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNQO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO2FBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN2QjthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQixNQUFNLE1BQU0sR0FBRyx1REFBdUQ7Z0JBQ2xFLEdBQUcsTUFBTSxRQUFRLE1BQU0sR0FBRyxDQUFDO1lBQy9CLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JCO2FBQU07WUFDTCxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGltZW5zaW9ucyBpbiB0aGUgaW5wdXQgc2hhcGUgdGhhdCBhcmUgYnJvYWRjYXN0ZWQgdG9cbiAqIHByb2R1Y2UgdGhlIHByb3ZpZGVkIG91dHB1dCBzaGFwZS5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZGltZW5zaW9ucyBhcmUgMC1pbmRleGVkIGFuZCBzb3J0ZWQuIEFuIGV4YW1wbGU6XG4gKiBpblNoYXBlID0gWzQsIDEsIDNdXG4gKiBvdXRTaGFwZSA9IFs1LCA0LCAzLCAzXVxuICogcmVzdWx0ID0gWzFdLiBEaW1lbnNpb24gMSAoMm5kIGRpbWVuc2lvbiBvZiBpbnB1dCkgZ2V0cyBicm9hZGNhc3RlZCAxID0+IDMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm9hZGNhc3REaW1zKFxuICAgIGluU2hhcGU6IG51bWJlcltdLCBvdXRTaGFwZTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGluUmFuayA9IGluU2hhcGUubGVuZ3RoO1xuICBjb25zdCBkaW1zOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGluUmFuazsgaSsrKSB7XG4gICAgY29uc3QgZGltID0gaW5SYW5rIC0gMSAtIGk7XG4gICAgY29uc3QgYSA9IGluU2hhcGVbZGltXSB8fCAxO1xuICAgIGNvbnN0IGIgPSBvdXRTaGFwZVtvdXRTaGFwZS5sZW5ndGggLSAxIC0gaV0gfHwgMTtcbiAgICBpZiAoYiA+IDEgJiYgYSA9PT0gMSkge1xuICAgICAgZGltcy51bnNoaWZ0KGRpbSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkaW1zO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGF4ZXMgaW4gdGhlIG91dHB1dCBzcGFjZSB0aGF0IHNob3VsZCBiZSByZWR1Y2VkIHRvIHByb2R1Y2VcbiAqIHRoZSBpbnB1dCBzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZHVjdGlvbkF4ZXMoXG4gICAgaW5TaGFwZTogbnVtYmVyW10sIG91dFNoYXBlOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG91dFNoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaW5EaW0gPSBpblNoYXBlW2luU2hhcGUubGVuZ3RoIC0gaSAtIDFdO1xuICAgIGNvbnN0IG91dEF4aXMgPSBvdXRTaGFwZS5sZW5ndGggLSBpIC0gMTtcbiAgICBjb25zdCBvdXREaW0gPSBvdXRTaGFwZVtvdXRBeGlzXTtcbiAgICBpZiAoaW5EaW0gPT0gbnVsbCB8fCAoaW5EaW0gPT09IDEgJiYgb3V0RGltID4gMSkpIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KG91dEF4aXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoXG4gICAgc2hhcGVBOiBudW1iZXJbXSwgc2hhcGVCOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbCA9IE1hdGgubWF4KHNoYXBlQS5sZW5ndGgsIHNoYXBlQi5sZW5ndGgpO1xuICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgYSA9IHNoYXBlQVtzaGFwZUEubGVuZ3RoIC0gaSAtIDFdO1xuICAgIGlmIChhID09IG51bGwpIHtcbiAgICAgIGEgPSAxO1xuICAgIH1cbiAgICBsZXQgYiA9IHNoYXBlQltzaGFwZUIubGVuZ3RoIC0gaSAtIDFdO1xuICAgIGlmIChiID09IG51bGwpIHtcbiAgICAgIGIgPSAxO1xuICAgIH1cbiAgICBpZiAoYSA9PT0gMSkge1xuICAgICAgcmVzdWx0W2wgLSBpIC0gMV0gPSBiO1xuICAgIH0gZWxzZSBpZiAoYiA9PT0gMSkge1xuICAgICAgcmVzdWx0W2wgLSBpIC0gMV0gPSBhO1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gYikge1xuICAgICAgY29uc3QgZXJyTXNnID0gYE9wZXJhbmRzIGNvdWxkIG5vdCBiZSBicm9hZGNhc3QgdG9nZXRoZXIgd2l0aCBzaGFwZXMgYCArXG4gICAgICAgICAgYCR7c2hhcGVBfSBhbmQgJHtzaGFwZUJ9LmA7XG4gICAgICB0aHJvdyBFcnJvcihlcnJNc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbbCAtIGkgLSAxXSA9IGE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Maximum } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Returns the max of a and b (`a > b ? a : b`) element-wise.\n * Supports broadcasting.\n *\n * We also expose `tf.maximumStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.maximum(b).print(); // or tf.maximum(a, b)\n * ```\n *\n * ```js\n * // Broadcast maximum a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.maximum(b).print(); // or tf.maximum(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction maximum_(a, b) {\n let $a = convertToTensor(a, 'a', 'maximum');\n let $b = convertToTensor(b, 'b', 'maximum');\n [$a, $b] = makeTypesMatch($a, $b);\n if ($a.dtype === 'bool') {\n $a = cast($a, 'int32');\n $b = cast($b, 'int32');\n }\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Maximum, inputs);\n}\nexport const maximum = /* @__PURE__ */ op({ maximum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4aW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21heGltdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILFNBQVMsUUFBUSxDQUNiLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFN0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01heGltdW0sIE1heGltdW1JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYXggb2YgYSBhbmQgYiAoYGEgPiBiID8gYSA6IGJgKSBlbGVtZW50LXdpc2UuXG4gKiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICogV2UgYWxzbyBleHBvc2UgYHRmLm1heGltdW1TdHJpY3RgIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBvcCBhbmRcbiAqIGFzc2VydHMgdGhhdCBgYWAgYW5kIGBiYCBhcmUgdGhlIHNhbWUgc2hhcGUgKGRvZXMgbm90IGJyb2FkY2FzdCkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgNCwgMywgMTZdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMSwgMiwgOSwgNF0pO1xuICpcbiAqIGEubWF4aW11bShiKS5wcmludCgpOyAgLy8gb3IgdGYubWF4aW11bShhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBtYXhpbXVtIGEgd2l0aCBiLlxuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2LCA4XSk7XG4gKiBjb25zdCBiID0gdGYuc2NhbGFyKDUpO1xuICpcbiAqIGEubWF4aW11bShiKS5wcmludCgpOyAgLy8gb3IgdGYubWF4aW11bShhLCBiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIG1heGltdW1fPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbWF4aW11bScpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbWF4aW11bScpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgaWYgKCRhLmR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAkYSA9IGNhc3QoJGEsICdpbnQzMicpO1xuICAgICRiID0gY2FzdCgkYiwgJ2ludDMyJyk7XG4gIH1cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IE1heGltdW1JbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChNYXhpbXVtLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhpbXVtID0gLyogQF9fUFVSRV9fICovIG9wKHttYXhpbXVtX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { abs } from '../ops/abs';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { maximum } from '../ops/maximum';\nimport { mul } from '../ops/mul';\nimport { scalar } from '../ops/scalar';\nimport { sub } from '../ops/sub';\nimport { zerosLike } from '../ops/zeros_like';\nimport { Optimizer } from './optimizer';\nexport class AdamaxOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Adamax';\n }\n constructor(learningRate, beta1, beta2, epsilon = null, decay = 0.0) {\n super();\n this.learningRate = learningRate;\n this.beta1 = beta1;\n this.beta2 = beta2;\n this.epsilon = epsilon;\n this.decay = decay;\n this.accumulatedFirstMoment = [];\n this.accumulatedWeightedInfNorm = [];\n tidy(() => {\n this.iteration = scalar(0).variable();\n this.accBeta1 = scalar(beta1).variable();\n });\n if (epsilon == null) {\n this.epsilon = ENGINE.backend.epsilon();\n }\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n tidy(() => {\n const oneMinusAccBeta1 = sub(1, this.accBeta1);\n const lr = div(-this.learningRate, add(mul(this.iteration, this.decay), 1));\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n const trainable = false;\n if (this.accumulatedFirstMoment[i] == null) {\n this.accumulatedFirstMoment[i] = {\n originalName: `${name}/m`,\n variable: zerosLike(value).variable(trainable)\n };\n }\n if (this.accumulatedWeightedInfNorm[i] == null) {\n this.accumulatedWeightedInfNorm[i] = {\n originalName: `${name}/v`,\n variable: zerosLike(value).variable(trainable)\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const firstMoment = this.accumulatedFirstMoment[i].variable;\n const weightedInfNorm = this.accumulatedWeightedInfNorm[i].variable;\n const newFirstMoment = add(mul(firstMoment, this.beta1), mul(gradient, 1 - this.beta1));\n const ut0 = mul(weightedInfNorm, this.beta2);\n const ut1 = abs(gradient);\n const newWeightedInfNorm = maximum(ut0, ut1);\n firstMoment.assign(newFirstMoment);\n weightedInfNorm.assign(newWeightedInfNorm);\n const newValue = add(mul(div(lr, oneMinusAccBeta1), div(newFirstMoment, add(newWeightedInfNorm, this.epsilon))), value);\n value.assign(newValue);\n });\n this.iteration.assign(add(this.iteration, 1));\n this.accBeta1.assign(mul(this.accBeta1, this.beta1));\n });\n this.incrementIterations();\n }\n dispose() {\n this.accBeta1.dispose();\n this.iteration.dispose();\n if (this.accumulatedFirstMoment != null) {\n dispose(this.accumulatedFirstMoment.map(v => v.variable));\n }\n if (this.accumulatedWeightedInfNorm != null) {\n dispose(this.accumulatedWeightedInfNorm.map(v => v.variable));\n }\n }\n async getWeights() {\n throw new Error('getWeights() is not implemented for Adamax yet.');\n }\n async setWeights(weightValues) {\n throw new Error('setWeights() is not implemented for Adamax yet.');\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'beta1': this.beta1,\n 'beta2': this.beta2,\n 'epsilon': this.epsilon,\n 'decay': this.decay\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['beta1'], config['beta2'], config['epsilon'], config['decay']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhbWF4X29wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3B0aW1pemVycy9hZGFtYXhfb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUs1QyxPQUFPLEVBQUMsU0FBUyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUV6RCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxTQUFTO0lBQzVDLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssU0FBUztRQUNsQix5Q0FBeUM7UUFDekMsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBT0QsWUFDYyxZQUFvQixFQUFZLEtBQWEsRUFDN0MsS0FBYSxFQUFZLFVBQWtCLElBQUksRUFDL0MsUUFBUSxHQUFHO1FBQ3ZCLEtBQUssRUFBRSxDQUFDO1FBSEksaUJBQVksR0FBWixZQUFZLENBQVE7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RSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtkaXNwb3NlLCB0aWR5fSBmcm9tICcuLi9nbG9iYWxzJztcbmltcG9ydCB7YWJzfSBmcm9tICcuLi9vcHMvYWJzJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9vcHMvYWRkJztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9vcHMvZGl2JztcbmltcG9ydCB7bWF4aW11bX0gZnJvbSAnLi4vb3BzL21heGltdW0nO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL29wcy9zY2FsYXInO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4uL29wcy9zdWInO1xuaW1wb3J0IHt6ZXJvc0xpa2V9IGZyb20gJy4uL29wcy96ZXJvc19saWtlJztcbmltcG9ydCB7Q29uZmlnRGljdCwgU2VyaWFsaXphYmxlLCBTZXJpYWxpemFibGVDb25zdHJ1Y3Rvcn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1ZhcmlhYmxlfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRWYXJpYWJsZU1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuaW1wb3J0IHtPcHRpbWl6ZXIsIE9wdGltaXplclZhcmlhYmxlfSBmcm9tICcuL29wdGltaXplcic7XG5cbmV4cG9ydCBjbGFzcyBBZGFtYXhPcHRpbWl6ZXIgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgLy8gTmFtZSBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBiZWNhdXNlIHdoZW4gaXQncyBhIHByb3BlcnR5LCBpdFxuICAgIC8vIHByZXZlbnRzIHRoZSBlbnRpcmUgY2xhc3MgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgICByZXR1cm4gJ0FkYW1heCc7XG4gIH1cbiAgcHJpdmF0ZSBhY2NCZXRhMTogVmFyaWFibGU7XG4gIHByaXZhdGUgaXRlcmF0aW9uOiBWYXJpYWJsZTtcblxuICBwcml2YXRlIGFjY3VtdWxhdGVkRmlyc3RNb21lbnQ6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZFdlaWdodGVkSW5mTm9ybTogT3B0aW1pemVyVmFyaWFibGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGxlYXJuaW5nUmF0ZTogbnVtYmVyLCBwcm90ZWN0ZWQgYmV0YTE6IG51bWJlcixcbiAgICAgIHByb3RlY3RlZCBiZXRhMjogbnVtYmVyLCBwcm90ZWN0ZWQgZXBzaWxvbjogbnVtYmVyID0gbnVsbCxcbiAgICAgIHByb3RlY3RlZCBkZWNheSA9IDAuMCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aWR5KCgpID0+IHtcbiAgICAgIHRoaXMuaXRlcmF0aW9uID0gc2NhbGFyKDApLnZhcmlhYmxlKCk7XG4gICAgICB0aGlzLmFjY0JldGExID0gc2NhbGFyKGJldGExKS52YXJpYWJsZSgpO1xuICAgIH0pO1xuXG4gICAgaWYgKGVwc2lsb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5lcHNpbG9uID0gRU5HSU5FLmJhY2tlbmQuZXBzaWxvbigpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFZhcmlhYmxlTWFwfE5hbWVkVGVuc29yW10pIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWVzID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICB2YXJpYWJsZUdyYWRpZW50cy5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpIDpcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFibGVHcmFkaWVudHMpO1xuXG4gICAgdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCBvbmVNaW51c0FjY0JldGExID0gc3ViKDEsIHRoaXMuYWNjQmV0YTEpO1xuICAgICAgY29uc3QgbHIgPVxuICAgICAgICAgIGRpdigtdGhpcy5sZWFybmluZ1JhdGUsIGFkZChtdWwodGhpcy5pdGVyYXRpb24sIHRoaXMuZGVjYXkpLCAxKSk7XG5cbiAgICAgIHZhcmlhYmxlTmFtZXMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRGaXJzdE1vbWVudFtpXSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50W2ldID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9tYCxcbiAgICAgICAgICAgIHZhcmlhYmxlOiB6ZXJvc0xpa2UodmFsdWUpLnZhcmlhYmxlKHRyYWluYWJsZSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjY3VtdWxhdGVkV2VpZ2h0ZWRJbmZOb3JtW2ldID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmFjY3VtdWxhdGVkV2VpZ2h0ZWRJbmZOb3JtW2ldID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS92YCxcbiAgICAgICAgICAgIHZhcmlhYmxlOiB6ZXJvc0xpa2UodmFsdWUpLnZhcmlhYmxlKHRyYWluYWJsZSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tpXS50ZW5zb3IgOlxuICAgICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbbmFtZV07XG4gICAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RNb21lbnQgPSB0aGlzLmFjY3VtdWxhdGVkRmlyc3RNb21lbnRbaV0udmFyaWFibGU7XG4gICAgICAgIGNvbnN0IHdlaWdodGVkSW5mTm9ybSA9IHRoaXMuYWNjdW11bGF0ZWRXZWlnaHRlZEluZk5vcm1baV0udmFyaWFibGU7XG5cbiAgICAgICAgY29uc3QgbmV3Rmlyc3RNb21lbnQgPVxuICAgICAgICAgICAgYWRkKG11bChmaXJzdE1vbWVudCwgdGhpcy5iZXRhMSksIG11bChncmFkaWVudCwgMSAtIHRoaXMuYmV0YTEpKTtcblxuICAgICAgICBjb25zdCB1dDAgPSBtdWwod2VpZ2h0ZWRJbmZOb3JtLCB0aGlzLmJldGEyKTtcbiAgICAgICAgY29uc3QgdXQxID0gYWJzKGdyYWRpZW50KTtcblxuICAgICAgICBjb25zdCBuZXdXZWlnaHRlZEluZk5vcm0gPSBtYXhpbXVtKHV0MCwgdXQxKTtcblxuICAgICAgICBmaXJzdE1vbWVudC5hc3NpZ24obmV3Rmlyc3RNb21lbnQpO1xuICAgICAgICB3ZWlnaHRlZEluZk5vcm0uYXNzaWduKG5ld1dlaWdodGVkSW5mTm9ybSk7XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPVxuICAgICAgICAgICAgYWRkKG11bChkaXYobHIsIG9uZU1pbnVzQWNjQmV0YTEpLFxuICAgICAgICAgICAgICAgICAgICBkaXYobmV3Rmlyc3RNb21lbnQsIGFkZChuZXdXZWlnaHRlZEluZk5vcm0sIHRoaXMuZXBzaWxvbikpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSk7XG5cbiAgICAgICAgdmFsdWUuYXNzaWduKG5ld1ZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLml0ZXJhdGlvbi5hc3NpZ24oYWRkKHRoaXMuaXRlcmF0aW9uLCAxKSk7XG4gICAgICB0aGlzLmFjY0JldGExLmFzc2lnbihtdWwodGhpcy5hY2NCZXRhMSwgdGhpcy5iZXRhMSkpO1xuICAgIH0pO1xuICAgIHRoaXMuaW5jcmVtZW50SXRlcmF0aW9ucygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY0JldGExLmRpc3Bvc2UoKTtcbiAgICB0aGlzLml0ZXJhdGlvbi5kaXNwb3NlKCk7XG5cbiAgICBpZiAodGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50ICE9IG51bGwpIHtcbiAgICAgIGRpc3Bvc2UodGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50Lm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRXZWlnaHRlZEluZk5vcm0gIT0gbnVsbCkge1xuICAgICAgZGlzcG9zZSh0aGlzLmFjY3VtdWxhdGVkV2VpZ2h0ZWRJbmZOb3JtLm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRXZWlnaHRzKCk6IFByb21pc2U8TmFtZWRUZW5zb3JbXT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2V0V2VpZ2h0cygpIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgQWRhbWF4IHlldC4nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRXZWlnaHRzKCkgaXMgbm90IGltcGxlbWVudGVkIGZvciBBZGFtYXggeWV0LicpO1xuICB9XG5cbiAgZ2V0Q29uZmlnKCk6IENvbmZpZ0RpY3Qge1xuICAgIHJldHVybiB7XG4gICAgICAnbGVhcm5pbmdSYXRlJzogdGhpcy5sZWFybmluZ1JhdGUsXG4gICAgICAnYmV0YTEnOiB0aGlzLmJldGExLFxuICAgICAgJ2JldGEyJzogdGhpcy5iZXRhMixcbiAgICAgICdlcHNpbG9uJzogdGhpcy5lcHNpbG9uLFxuICAgICAgJ2RlY2F5JzogdGhpcy5kZWNheVxuICAgIH07XG4gIH1cblxuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIG92ZXJyaWRlIGZyb21Db25maWc8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oXG4gICAgICBjbHM6IFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFQ+LCBjb25maWc6IENvbmZpZ0RpY3QpOiBUIHtcbiAgICByZXR1cm4gbmV3IGNscyhcbiAgICAgICAgY29uZmlnWydsZWFybmluZ1JhdGUnXSwgY29uZmlnWydiZXRhMSddLCBjb25maWdbJ2JldGEyJ10sXG4gICAgICAgIGNvbmZpZ1snZXBzaWxvbiddLCBjb25maWdbJ2RlY2F5J10pO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { keep, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { mul } from '../ops/mul';\nimport { scalar } from '../ops/scalar';\nimport { Optimizer } from './optimizer';\n/** @doclink Optimizer */\nexport class SGDOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'SGD';\n }\n constructor(learningRate) {\n super();\n this.learningRate = learningRate;\n this.setLearningRate(learningRate);\n }\n applyGradients(variableGradients) {\n const varNames = Array.isArray(variableGradients) ?\n variableGradients.map(v => v.name) :\n Object.keys(variableGradients);\n varNames.forEach((name, i) => {\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const value = ENGINE.registeredVariables[name];\n tidy(() => {\n const newValue = add(mul(this.c, gradient), value);\n value.assign(newValue);\n });\n });\n this.incrementIterations();\n }\n /**\n * Sets the learning rate of the optimizer.\n */\n setLearningRate(learningRate) {\n this.learningRate = learningRate;\n if (this.c != null) {\n this.c.dispose();\n }\n this.c = keep(scalar(-learningRate));\n }\n dispose() {\n this.c.dispose();\n }\n async getWeights() {\n return [await this.saveIterations()];\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n if (weightValues.length !== 0) {\n throw new Error('SGD optimizer does not have settable weights.');\n }\n }\n getConfig() {\n return { 'learningRate': this.learningRate };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2dkX29wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3B0aW1pemVycy9zZ2Rfb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFLckMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0Qyx5QkFBeUI7QUFDekIsTUFBTSxPQUFPLFlBQWEsU0FBUSxTQUFTO0lBQ3pDLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssU0FBUztRQUNsQix5Q0FBeUM7UUFDekMsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHRCxZQUFzQixZQUFvQjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQURZLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBRXhDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWMsQ0FBQyxpQkFBK0M7UUFDNUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDL0MsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLE9BQU87YUFDUjtZQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNSLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLFlBQW9CO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVRLE9BQU87UUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFUSxLQUFLLENBQUMsVUFBVTtRQUN2QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRVEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUEyQjtRQUNuRCxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUQsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sRUFBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxDQUFVLFVBQVUsQ0FDdEIsR0FBK0IsRUFBRSxNQUFrQjtRQUNyRCxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge2tlZXAsIHRpZHl9IGZyb20gJy4uL2dsb2JhbHMnO1xuaW1wb3J0IHthZGR9IGZyb20gJy4uL29wcy9hZGQnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL29wcy9zY2FsYXInO1xuaW1wb3J0IHtDb25maWdEaWN0LCBTZXJpYWxpemFibGUsIFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7U2NhbGFyfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5cbmltcG9ydCB7T3B0aW1pemVyfSBmcm9tICcuL29wdGltaXplcic7XG5cbi8qKiBAZG9jbGluayBPcHRpbWl6ZXIgKi9cbmV4cG9ydCBjbGFzcyBTR0RPcHRpbWl6ZXIgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgLy8gTmFtZSBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBiZWNhdXNlIHdoZW4gaXQncyBhIHByb3BlcnR5LCBpdFxuICAgIC8vIHByZXZlbnRzIHRoZSBlbnRpcmUgY2xhc3MgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgICByZXR1cm4gJ1NHRCc7XG4gIH1cbiAgcHJvdGVjdGVkIGM6IFNjYWxhcjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbGVhcm5pbmdSYXRlOiBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2V0TGVhcm5pbmdSYXRlKGxlYXJuaW5nUmF0ZSk7XG4gIH1cblxuICBhcHBseUdyYWRpZW50cyh2YXJpYWJsZUdyYWRpZW50czogTmFtZWRUZW5zb3JNYXB8TmFtZWRUZW5zb3JbXSkge1xuICAgIGNvbnN0IHZhck5hbWVzID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICB2YXJpYWJsZUdyYWRpZW50cy5tYXAodiA9PiB2Lm5hbWUpIDpcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFibGVHcmFkaWVudHMpO1xuICAgIHZhck5hbWVzLmZvckVhY2goKG5hbWUsIGkpID0+IHtcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICAgIHZhcmlhYmxlR3JhZGllbnRzW2ldLnRlbnNvciA6XG4gICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbbmFtZV07XG4gICAgICBpZiAoZ3JhZGllbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgdGlkeSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gYWRkKG11bCh0aGlzLmMsIGdyYWRpZW50KSwgdmFsdWUpO1xuICAgICAgICB2YWx1ZS5hc3NpZ24obmV3VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5pbmNyZW1lbnRJdGVyYXRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbGVhcm5pbmcgcmF0ZSBvZiB0aGUgb3B0aW1pemVyLlxuICAgKi9cbiAgc2V0TGVhcm5pbmdSYXRlKGxlYXJuaW5nUmF0ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5sZWFybmluZ1JhdGUgPSBsZWFybmluZ1JhdGU7XG4gICAgaWYgKHRoaXMuYyAhPSBudWxsKSB7XG4gICAgICB0aGlzLmMuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmMgPSBrZWVwKHNjYWxhcigtbGVhcm5pbmdSYXRlKSk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNwb3NlKCkge1xuICAgIHRoaXMuYy5kaXNwb3NlKCk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRXZWlnaHRzKCk6IFByb21pc2U8TmFtZWRUZW5zb3JbXT4ge1xuICAgIHJldHVybiBbYXdhaXQgdGhpcy5zYXZlSXRlcmF0aW9ucygpXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGlmICh3ZWlnaHRWYWx1ZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NHRCBvcHRpbWl6ZXIgZG9lcyBub3QgaGF2ZSBzZXR0YWJsZSB3ZWlnaHRzLicpO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbmZpZygpOiBDb25maWdEaWN0IHtcbiAgICByZXR1cm4geydsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZX07XG4gIH1cblxuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIG92ZXJyaWRlIGZyb21Db25maWc8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oXG4gICAgICBjbHM6IFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFQ+LCBjb25maWc6IENvbmZpZ0RpY3QpOiBUIHtcbiAgICByZXR1cm4gbmV3IGNscyhjb25maWdbJ2xlYXJuaW5nUmF0ZSddKTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { mul } from '../ops/mul';\nimport { scalar } from '../ops/scalar';\nimport { zerosLike } from '../ops/zeros_like';\nimport { SGDOptimizer } from './sgd_optimizer';\n/** @doclink Optimizer */\nexport class MomentumOptimizer extends SGDOptimizer {\n /** @nocollapse */\n // Name matters for Python compatibility.\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Momentum';\n }\n constructor(learningRate, momentum, useNesterov = false) {\n super(learningRate);\n this.learningRate = learningRate;\n this.momentum = momentum;\n this.useNesterov = useNesterov;\n this.accumulations = [];\n this.m = scalar(this.momentum);\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n if (this.accumulations[i] == null) {\n const trainable = false;\n this.accumulations[i] = {\n originalName: `${name}/momentum`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n const accumulation = this.accumulations[i].variable;\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n tidy(() => {\n let newValue;\n const newAccumulation = add(mul(this.m, accumulation), gradient);\n if (this.useNesterov) {\n newValue = add(mul(this.c, add(gradient, mul(newAccumulation, this.m))), value);\n }\n else {\n newValue = add(mul(this.c, newAccumulation), value);\n }\n accumulation.assign(newAccumulation);\n value.assign(newValue);\n });\n });\n this.incrementIterations();\n }\n dispose() {\n this.m.dispose();\n if (this.accumulations != null) {\n dispose(this.accumulations.map(v => v.variable));\n }\n }\n /**\n * Sets the momentum of the optimizer.\n *\n * @param momentum\n */\n setMomentum(momentum) {\n this.momentum = momentum;\n }\n async getWeights() {\n // Order matters for Python compatibility.\n return [await this.saveIterations()].concat(this.accumulations.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n const trainable = false;\n this.accumulations = weightValues.map(v => ({ originalName: v.name, variable: v.tensor.variable(trainable) }));\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'momentum': this.momentum,\n 'useNesterov': this.useNesterov\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['momentum'], config['useNesterov']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9tZW50dW1fb3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHRpbWl6ZXJzL21vbWVudHVtX29wdGltaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQU01QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MseUJBQXlCO0FBQ3pCLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBQ2pELGtCQUFrQjtJQUNsQix5Q0FBeUM7SUFDekMsTUFBTSxLQUFjLFNBQVM7UUFDM0IseUNBQXlDO1FBQ3pDLDBFQUEwRTtRQUMxRSxvREFBb0Q7UUFDcEQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUlELFlBQ3VCLFlBQW9CLEVBQVUsUUFBZ0IsRUFDekQsY0FBYyxLQUFLO1FBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUZDLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN6RCxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUp2QixrQkFBYSxHQUF3QixFQUFFLENBQUM7UUFNOUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENB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RSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFUSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQTJCO1FBQ25ELFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVRLFNBQVM7UUFDaEIsT0FBTztZQUNMLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDekIsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBVSxVQUFVLENBQ3RCLEdBQStCLEVBQUUsTUFBa0I7UUFDckQsT0FBTyxJQUFJLEdBQUcsQ0FDVixNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge2Rpc3Bvc2UsIHRpZHl9IGZyb20gJy4uL2dsb2JhbHMnO1xuaW1wb3J0IHthZGR9IGZyb20gJy4uL29wcy9hZGQnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL29wcy9zY2FsYXInO1xuaW1wb3J0IHt6ZXJvc0xpa2V9IGZyb20gJy4uL29wcy96ZXJvc19saWtlJztcbmltcG9ydCB7Q29uZmlnRGljdCwgU2VyaWFsaXphYmxlLCBTZXJpYWxpemFibGVDb25zdHJ1Y3Rvcn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1NjYWxhciwgVGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRWYXJpYWJsZU1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuaW1wb3J0IHtPcHRpbWl6ZXJWYXJpYWJsZX0gZnJvbSAnLi9vcHRpbWl6ZXInO1xuaW1wb3J0IHtTR0RPcHRpbWl6ZXJ9IGZyb20gJy4vc2dkX29wdGltaXplcic7XG5cbi8qKiBAZG9jbGluayBPcHRpbWl6ZXIgKi9cbmV4cG9ydCBjbGFzcyBNb21lbnR1bU9wdGltaXplciBleHRlbmRzIFNHRE9wdGltaXplciB7XG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICAvLyBOYW1lIG1hdHRlcnMgZm9yIFB5dGhvbiBjb21wYXRpYmlsaXR5LlxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAvLyBOYW1lIG1hdHRlcnMgZm9yIFB5dGhvbiBjb21wYXRpYmlsaXR5LlxuICAgIC8vIFRoaXMgaXMgYSBnZXR0ZXIgaW5zdGVhZCBvZiBhIHByb3BlcnR5IGJlY2F1c2Ugd2hlbiBpdCdzIGEgcHJvcGVydHksIGl0XG4gICAgLy8gcHJldmVudHMgdGhlIGVudGlyZSBjbGFzcyBmcm9tIGJlaW5nIHRyZWUtc2hha2VuLlxuICAgIHJldHVybiAnTW9tZW50dW0nO1xuICB9XG4gIHByaXZhdGUgbTogU2NhbGFyO1xuICBwcml2YXRlIGFjY3VtdWxhdGlvbnM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBsZWFybmluZ1JhdGU6IG51bWJlciwgcHJpdmF0ZSBtb21lbnR1bTogbnVtYmVyLFxuICAgICAgcHJpdmF0ZSB1c2VOZXN0ZXJvdiA9IGZhbHNlKSB7XG4gICAgc3VwZXIobGVhcm5pbmdSYXRlKTtcbiAgICB0aGlzLm0gPSBzY2FsYXIodGhpcy5tb21lbnR1bSk7XG4gIH1cblxuICBvdmVycmlkZSBhcHBseUdyYWRpZW50cyh2YXJpYWJsZUdyYWRpZW50czogTmFtZWRWYXJpYWJsZU1hcHxOYW1lZFRlbnNvcltdKSB7XG4gICAgY29uc3QgdmFyaWFibGVOYW1lcyA9IEFycmF5LmlzQXJyYXkodmFyaWFibGVHcmFkaWVudHMpID9cbiAgICAgICAgdmFyaWFibGVHcmFkaWVudHMubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKSA6XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhYmxlR3JhZGllbnRzKTtcblxuICAgIHZhcmlhYmxlTmFtZXMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBFTkdJTkUucmVnaXN0ZXJlZFZhcmlhYmxlc1tuYW1lXTtcbiAgICAgIGlmICh0aGlzLmFjY3VtdWxhdGlvbnNbaV0gPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRpb25zW2ldID0ge1xuICAgICAgICAgIG9yaWdpbmFsTmFtZTogYCR7bmFtZX0vbW9tZW50dW1gLFxuICAgICAgICAgIHZhcmlhYmxlOiB0aWR5KCgpID0+IHplcm9zTGlrZSh2YWx1ZSkudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNjdW11bGF0aW9uID0gdGhpcy5hY2N1bXVsYXRpb25zW2ldLnZhcmlhYmxlO1xuICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbaV0udGVuc29yIDpcbiAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tuYW1lXTtcbiAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGlkeSgoKSA9PiB7XG4gICAgICAgIGxldCBuZXdWYWx1ZTogVGVuc29yO1xuICAgICAgICBjb25zdCBuZXdBY2N1bXVsYXRpb24gPSBhZGQobXVsKHRoaXMubSwgYWNjdW11bGF0aW9uKSwgZ3JhZGllbnQpO1xuICAgICAgICBpZiAodGhpcy51c2VOZXN0ZXJvdikge1xuICAgICAgICAgIG5ld1ZhbHVlID0gYWRkKFxuICAgICAgICAgICAgICBtdWwodGhpcy5jLCBhZGQoZ3JhZGllbnQsIG11bChuZXdBY2N1bXVsYXRpb24sIHRoaXMubSkpKSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1ZhbHVlID0gYWRkKG11bCh0aGlzLmMsIG5ld0FjY3VtdWxhdGlvbiksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBhY2N1bXVsYXRpb24uYXNzaWduKG5ld0FjY3VtdWxhdGlvbik7XG4gICAgICAgIHZhbHVlLmFzc2lnbihuZXdWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmluY3JlbWVudEl0ZXJhdGlvbnMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5tLmRpc3Bvc2UoKTtcbiAgICBpZiAodGhpcy5hY2N1bXVsYXRpb25zICE9IG51bGwpIHtcbiAgICAgIGRpc3Bvc2UodGhpcy5hY2N1bXVsYXRpb25zLm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbW9tZW50dW0gb2YgdGhlIG9wdGltaXplci5cbiAgICpcbiAgICogQHBhcmFtIG1vbWVudHVtXG4gICAqL1xuICBzZXRNb21lbnR1bShtb21lbnR1bTogbnVtYmVyKSB7XG4gICAgdGhpcy5tb21lbnR1bSA9IG1vbWVudHVtO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0V2VpZ2h0cygpOiBQcm9taXNlPE5hbWVkVGVuc29yW10+IHtcbiAgICAvLyBPcmRlciBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2F2ZUl0ZXJhdGlvbnMoKV0uY29uY2F0KHRoaXMuYWNjdW11bGF0aW9ucy5tYXAoXG4gICAgICAgIHYgPT4gKHtuYW1lOiB2Lm9yaWdpbmFsTmFtZSwgdGVuc29yOiB2LnZhcmlhYmxlfSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGNvbnN0IHRyYWluYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuYWNjdW11bGF0aW9ucyA9IHdlaWdodFZhbHVlcy5tYXAoXG4gICAgICAgIHYgPT4gKHtvcmlnaW5hbE5hbWU6IHYubmFtZSwgdmFyaWFibGU6IHYudGVuc29yLnZhcmlhYmxlKHRyYWluYWJsZSl9KSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdtb21lbnR1bSc6IHRoaXMubW9tZW50dW0sXG4gICAgICAndXNlTmVzdGVyb3YnOiB0aGlzLnVzZU5lc3Rlcm92XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKFxuICAgICAgICBjb25maWdbJ2xlYXJuaW5nUmF0ZSddLCBjb25maWdbJ21vbWVudHVtJ10sIGNvbmZpZ1sndXNlTmVzdGVyb3YnXSk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { mul } from '../ops/mul';\nimport { sqrt } from '../ops/sqrt';\nimport { square } from '../ops/square';\nimport { sub } from '../ops/sub';\nimport { zerosLike } from '../ops/zeros_like';\nimport { Optimizer } from './optimizer';\n/** @doclink Optimizer */\nexport class RMSPropOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'RMSProp';\n }\n constructor(learningRate, decay = 0.9, momentum = 0.0, epsilon = null, centered = false) {\n super();\n this.learningRate = learningRate;\n this.decay = decay;\n this.momentum = momentum;\n this.epsilon = epsilon;\n this.accumulatedMeanSquares = [];\n this.accumulatedMoments = [];\n this.accumulatedMeanGrads = [];\n this.centered = centered;\n if (epsilon == null) {\n this.epsilon = ENGINE.backend.epsilon();\n }\n if (learningRate == null) {\n throw new Error(`learningRate for RMSPropOptimizer must be defined.`);\n }\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n const trainable = false;\n if (this.accumulatedMeanSquares[i] == null) {\n this.accumulatedMeanSquares[i] = {\n originalName: `${name}/rms`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n if (this.accumulatedMoments[i] == null) {\n this.accumulatedMoments[i] = {\n originalName: `${name}/momentum`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n if (this.accumulatedMeanGrads[i] == null && this.centered) {\n this.accumulatedMeanGrads[i] = {\n originalName: `${name}/mg`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const accumulatedMeanSquare = this.accumulatedMeanSquares[i].variable;\n const accumulatedMoments = this.accumulatedMoments[i].variable;\n tidy(() => {\n const newAccumulatedMeanSquare = add(mul(accumulatedMeanSquare, this.decay), mul(square(gradient), 1 - this.decay));\n if (this.centered) {\n const accumulatedMeanGrad = this.accumulatedMeanGrads[i].variable;\n // Centered gradient\n const newAccumulatedMeanGrad = add(mul(accumulatedMeanGrad, this.decay), mul(gradient, 1 - this.decay));\n const gradContribution = div(mul(gradient, this.learningRate), sqrt(sub(newAccumulatedMeanSquare, add(square(newAccumulatedMeanGrad), this.epsilon))));\n const newAccumulatedMoments = add(mul(accumulatedMoments, this.momentum), gradContribution);\n accumulatedMeanSquare.assign(newAccumulatedMeanSquare);\n accumulatedMeanGrad.assign(newAccumulatedMeanGrad);\n accumulatedMoments.assign(newAccumulatedMoments);\n const newValue = sub(value, newAccumulatedMoments);\n value.assign(newValue);\n }\n else {\n // Plain gradient\n const newAccumulatedMeanSquare = add(mul(accumulatedMeanSquare, this.decay), mul(square(gradient), 1 - this.decay));\n const newAccumulatedMoments = add(mul(accumulatedMoments, this.momentum), div(mul(gradient, this.learningRate), sqrt(add(newAccumulatedMeanSquare, this.epsilon))));\n accumulatedMeanSquare.assign(newAccumulatedMeanSquare);\n accumulatedMoments.assign(newAccumulatedMoments);\n const newValue = sub(value, newAccumulatedMoments);\n value.assign(newValue);\n }\n });\n });\n this.incrementIterations();\n }\n dispose() {\n if (this.accumulatedMeanSquares != null) {\n dispose(this.accumulatedMeanSquares.map(v => v.variable));\n }\n if (this.accumulatedMeanGrads != null && this.centered) {\n dispose(this.accumulatedMeanGrads.map(v => v.variable));\n }\n if (this.accumulatedMoments != null) {\n dispose(this.accumulatedMoments.map(v => v.variable));\n }\n }\n async getWeights() {\n // Order matters for Python compatibility.\n const variables = [...this.accumulatedMeanSquares, ...this.accumulatedMoments];\n if (this.centered) {\n variables.push(...this.accumulatedMeanGrads);\n }\n return [await this.saveIterations()].concat(variables.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n const variableCount = this.centered ? weightValues.length / 3 : weightValues.length / 2;\n const trainable = false;\n this.accumulatedMeanSquares =\n weightValues.slice(0, variableCount).map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n this.accumulatedMoments =\n weightValues.slice(variableCount, variableCount * 2)\n .map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n if (this.centered) {\n this.accumulatedMeanGrads =\n weightValues.slice(variableCount * 2, variableCount * 3)\n .map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n }\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'decay': this.decay,\n 'momentum': this.momentum,\n 'epsilon': this.epsilon,\n 'centered': this.centered\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['decay'], config['momentum'], config['epsilon'], config['centered']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm1zcHJvcF9vcHRpbWl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wdGltaXplcnMvcm1zcHJvcF9vcHRpbWl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJNUMsT0FBTyxFQUFDLFNBQVMsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFFekQseUJBQXlCO0FBQ3pCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxTQUFTO0lBQzdDLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssU0FBUztRQUNsQix5Q0FBeUM7UUFDekMsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBT0QsWUFDYyxZQUFvQixFQUFZLFFBQVEsR0FBRyxFQUMzQyxXQUFXLEdBQUcsRUFBWSxVQUFrQixJQUFJLEVBQzFELFFBQVEsR0FBRyxLQUFLO1FBQ2xCLEtBQUssRUFBRSxDQUFDO1FBSEksaUJBQVksR0FBWixZQUFZLENBQVE7UUFBWSxVQUFLLEdBQUwsS0FBSyxDQUFNO1FBQzNDLGFBQVEsR0FBUixRQUFRLENBQU07UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBTnRELDJCQUFzQixHQUF3QixFQUFFLENBQUM7UUFDakQsdUJBQWtCLEdBQXdCLEVBQUUsQ0FBQztRQUM3Qyx5QkFBb0IsR0FBd0IsRUFBRSxDQUFDO1FBUXJELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDekM7UUFDRCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxpQkFBK0M7UUFDNUQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDcEQsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRW5DLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsR0FBRztvQkFDL0IsWUFBWSxFQUFFLEdBQUcsSUFBSSxNQUFNO29CQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzNELENBQUM7YUFDSDtZQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHO29CQUMzQixZQUFZLEVBQUUsR0FBRyxJQUFJLFdBQVc7b0JBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDM0QsQ0FBQzthQUNIO1lBQ0QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRztvQkFDN0IsWUFBWSxFQUFFLEdBQUcsSUFBSSxLQUFLO29CQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzNELENBQUM7YUFDSDtZQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0IsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNwQixPQUFPO2FBQ1I7WUFFRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQy9ELElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1IsTUFBTSx3QkFBd0IsR0FDMUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ3RDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUUvQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2pCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDbEUsb0JBQW9CO29CQUNwQixNQUFNLHNCQUFzQixHQUN4QixHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDcEMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBRXZDLE1BQU0sZ0JBQWdCLEdBQ2xCLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDaEMsSUFBSSxDQUNBLEdBQUcsQ0FBQyx3QkFBd0IsRUFDeEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckUsTUFBTSxxQkFBcUIsR0FDdkIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztvQkFFbEUscUJBQXFCLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQ3ZELG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO29CQUNuRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFFakQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO29CQUNuRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN4QjtxQkFBTTtvQkFDTCxpQkFBaUI7b0JBQ2pCLE1BQU0sd0JBQXdCLEdBQzFCLEdBQUcsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUN0QyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFFL0MsTUFBTSxxQkFBcUIsR0FDdkIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3RDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRWhFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUN2RCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFFakQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO29CQUNuRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN4QjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVEsT0FBTztRQUNkLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksRUFBRTtZQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUN6RDtRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksRUFBRTtZQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxVQUFVO1FBQ3ZCLDBDQUEwQztRQUMxQyxNQUFNLFNBQVMsR0FDWCxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDdkMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFUSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQTJCO1FBQ25ELFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxNQUFNLGFBQWEsR0FDZixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdEUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxzQkFBc0I7WUFDdkIsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDSixZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ3BCLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDdkIsU0FBUyxDQUFDO2FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQjtZQUNuQixZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLEdBQUcsQ0FBQyxDQUFDO2lCQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNKLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSTtnQkFDcEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQzthQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLG9CQUFvQjtnQkFDckIsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLGFBQWEsR0FBRyxDQUFDLENBQUM7cUJBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ0osWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJO29CQUNwQixRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2lCQUN2QyxDQUFDLENBQUMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTztZQUNMLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTztZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxDQUFVLFVBQVUsQ0FDdEIsR0FBK0IsRUFBRSxNQUFrQjtRQUNyRCxPQUFPLElBQUksR0FBRyxDQUNWLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUMzRCxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7ZGlzcG9zZSwgdGlkeX0gZnJvbSAnLi4vZ2xvYmFscyc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi4vb3BzL2FkZCc7XG5pbXBvcnQge2Rpdn0gZnJvbSAnLi4vb3BzL2Rpdic7XG5pbXBvcnQge211bH0gZnJvbSAnLi4vb3BzL211bCc7XG5pbXBvcnQge3NxcnR9IGZyb20gJy4uL29wcy9zcXJ0JztcbmltcG9ydCB7c3F1YXJlfSBmcm9tICcuLi9vcHMvc3F1YXJlJztcbmltcG9ydCB7c3VifSBmcm9tICcuLi9vcHMvc3ViJztcbmltcG9ydCB7emVyb3NMaWtlfSBmcm9tICcuLi9vcHMvemVyb3NfbGlrZSc7XG5pbXBvcnQge0NvbmZpZ0RpY3QsIFNlcmlhbGl6YWJsZSwgU2VyaWFsaXphYmxlQ29uc3RydWN0b3J9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5cbmltcG9ydCB7T3B0aW1pemVyLCBPcHRpbWl6ZXJWYXJpYWJsZX0gZnJvbSAnLi9vcHRpbWl6ZXInO1xuXG4vKiogQGRvY2xpbmsgT3B0aW1pemVyICovXG5leHBvcnQgY2xhc3MgUk1TUHJvcE9wdGltaXplciBleHRlbmRzIE9wdGltaXplciB7XG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAvLyBOYW1lIG1hdHRlcnMgZm9yIFB5dGhvbiBjb21wYXRpYmlsaXR5LlxuICAgIC8vIFRoaXMgaXMgYSBnZXR0ZXIgaW5zdGVhZCBvZiBhIHByb3BlcnR5IGJlY2F1c2Ugd2hlbiBpdCdzIGEgcHJvcGVydHksIGl0XG4gICAgLy8gcHJldmVudHMgdGhlIGVudGlyZSBjbGFzcyBmcm9tIGJlaW5nIHRyZWUtc2hha2VuLlxuICAgIHJldHVybiAnUk1TUHJvcCc7XG4gIH1cbiAgcHJpdmF0ZSBjZW50ZXJlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIGFjY3VtdWxhdGVkTWVhblNxdWFyZXM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZE1vbWVudHM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZE1lYW5HcmFkczogT3B0aW1pemVyVmFyaWFibGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGxlYXJuaW5nUmF0ZTogbnVtYmVyLCBwcm90ZWN0ZWQgZGVjYXkgPSAwLjksXG4gICAgICBwcm90ZWN0ZWQgbW9tZW50dW0gPSAwLjAsIHByb3RlY3RlZCBlcHNpbG9uOiBudW1iZXIgPSBudWxsLFxuICAgICAgY2VudGVyZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNlbnRlcmVkID0gY2VudGVyZWQ7XG5cbiAgICBpZiAoZXBzaWxvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLmVwc2lsb24gPSBFTkdJTkUuYmFja2VuZC5lcHNpbG9uKCk7XG4gICAgfVxuICAgIGlmIChsZWFybmluZ1JhdGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsZWFybmluZ1JhdGUgZm9yIFJNU1Byb3BPcHRpbWl6ZXIgbXVzdCBiZSBkZWZpbmVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFRlbnNvck1hcHxOYW1lZFRlbnNvcltdKSB7XG4gICAgY29uc3QgdmFyaWFibGVOYW1lcyA9IEFycmF5LmlzQXJyYXkodmFyaWFibGVHcmFkaWVudHMpID9cbiAgICAgICAgdmFyaWFibGVHcmFkaWVudHMubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKSA6XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhYmxlR3JhZGllbnRzKTtcblxuICAgIHZhcmlhYmxlTmFtZXMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBFTkdJTkUucmVnaXN0ZXJlZFZhcmlhYmxlc1tuYW1lXTtcbiAgICAgIGNvbnN0IHRyYWluYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRNZWFuU3F1YXJlc1tpXSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuYWNjdW11bGF0ZWRNZWFuU3F1YXJlc1tpXSA9IHtcbiAgICAgICAgICBvcmlnaW5hbE5hbWU6IGAke25hbWV9L3Jtc2AsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoKCkgPT4gemVyb3NMaWtlKHZhbHVlKS52YXJpYWJsZSh0cmFpbmFibGUpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRNb21lbnRzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZE1vbWVudHNbaV0gPSB7XG4gICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9tb21lbnR1bWAsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoKCkgPT4gemVyb3NMaWtlKHZhbHVlKS52YXJpYWJsZSh0cmFpbmFibGUpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHNbaV0gPT0gbnVsbCAmJiB0aGlzLmNlbnRlcmVkKSB7XG4gICAgICAgIHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHNbaV0gPSB7XG4gICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9tZ2AsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoKCkgPT4gemVyb3NMaWtlKHZhbHVlKS52YXJpYWJsZSh0cmFpbmFibGUpKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncmFkaWVudCA9IEFycmF5LmlzQXJyYXkodmFyaWFibGVHcmFkaWVudHMpID9cbiAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tpXS50ZW5zb3IgOlxuICAgICAgICAgIHZhcmlhYmxlR3JhZGllbnRzW25hbWVdO1xuICAgICAgaWYgKGdyYWRpZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY2N1bXVsYXRlZE1lYW5TcXVhcmUgPSB0aGlzLmFjY3VtdWxhdGVkTWVhblNxdWFyZXNbaV0udmFyaWFibGU7XG4gICAgICBjb25zdCBhY2N1bXVsYXRlZE1vbWVudHMgPSB0aGlzLmFjY3VtdWxhdGVkTW9tZW50c1tpXS52YXJpYWJsZTtcbiAgICAgIHRpZHkoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdBY2N1bXVsYXRlZE1lYW5TcXVhcmUgPVxuICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZE1lYW5TcXVhcmUsIHRoaXMuZGVjYXkpLFxuICAgICAgICAgICAgICAgIG11bChzcXVhcmUoZ3JhZGllbnQpLCAxIC0gdGhpcy5kZWNheSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmNlbnRlcmVkKSB7XG4gICAgICAgICAgY29uc3QgYWNjdW11bGF0ZWRNZWFuR3JhZCA9IHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHNbaV0udmFyaWFibGU7XG4gICAgICAgICAgLy8gQ2VudGVyZWQgZ3JhZGllbnRcbiAgICAgICAgICBjb25zdCBuZXdBY2N1bXVsYXRlZE1lYW5HcmFkID1cbiAgICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZE1lYW5HcmFkLCB0aGlzLmRlY2F5KSxcbiAgICAgICAgICAgICAgICAgIG11bChncmFkaWVudCwgMSAtIHRoaXMuZGVjYXkpKTtcblxuICAgICAgICAgIGNvbnN0IGdyYWRDb250cmlidXRpb24gPVxuICAgICAgICAgICAgICBkaXYobXVsKGdyYWRpZW50LCB0aGlzLmxlYXJuaW5nUmF0ZSksXG4gICAgICAgICAgICAgICAgICBzcXJ0KFxuICAgICAgICAgICAgICAgICAgICAgIHN1YihuZXdBY2N1bXVsYXRlZE1lYW5TcXVhcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFkZChzcXVhcmUobmV3QWNjdW11bGF0ZWRNZWFuR3JhZCksIHRoaXMuZXBzaWxvbikpKSk7XG4gICAgICAgICAgY29uc3QgbmV3QWNjdW11bGF0ZWRNb21lbnRzID1cbiAgICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZE1vbWVudHMsIHRoaXMubW9tZW50dW0pLCBncmFkQ29udHJpYnV0aW9uKTtcblxuICAgICAgICAgIGFjY3VtdWxhdGVkTWVhblNxdWFyZS5hc3NpZ24obmV3QWNjdW11bGF0ZWRNZWFuU3F1YXJlKTtcbiAgICAgICAgICBhY2N1bXVsYXRlZE1lYW5HcmFkLmFzc2lnbihuZXdBY2N1bXVsYXRlZE1lYW5HcmFkKTtcbiAgICAgICAgICBhY2N1bXVsYXRlZE1vbWVudHMuYXNzaWduKG5ld0FjY3VtdWxhdGVkTW9tZW50cyk7XG5cbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHN1Yih2YWx1ZSwgbmV3QWNjdW11bGF0ZWRNb21lbnRzKTtcbiAgICAgICAgICB2YWx1ZS5hc3NpZ24obmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBsYWluIGdyYWRpZW50XG4gICAgICAgICAgY29uc3QgbmV3QWNjdW11bGF0ZWRNZWFuU3F1YXJlID1cbiAgICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZE1lYW5TcXVhcmUsIHRoaXMuZGVjYXkpLFxuICAgICAgICAgICAgICAgICAgbXVsKHNxdWFyZShncmFkaWVudCksIDEgLSB0aGlzLmRlY2F5KSk7XG5cbiAgICAgICAgICBjb25zdCBuZXdBY2N1bXVsYXRlZE1vbWVudHMgPVxuICAgICAgICAgICAgICBhZGQobXVsKGFjY3VtdWxhdGVkTW9tZW50cywgdGhpcy5tb21lbnR1bSksXG4gICAgICAgICAgICAgICAgICBkaXYobXVsKGdyYWRpZW50LCB0aGlzLmxlYXJuaW5nUmF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3FydChhZGQobmV3QWNjdW11bGF0ZWRNZWFuU3F1YXJlLCB0aGlzLmVwc2lsb24pKSkpO1xuXG4gICAgICAgICAgYWNjdW11bGF0ZWRNZWFuU3F1YXJlLmFzc2lnbihuZXdBY2N1bXVsYXRlZE1lYW5TcXVhcmUpO1xuICAgICAgICAgIGFjY3VtdWxhdGVkTW9tZW50cy5hc3NpZ24obmV3QWNjdW11bGF0ZWRNb21lbnRzKTtcblxuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gc3ViKHZhbHVlLCBuZXdBY2N1bXVsYXRlZE1vbWVudHMpO1xuICAgICAgICAgIHZhbHVlLmFzc2lnbihuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuaW5jcmVtZW50SXRlcmF0aW9ucygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY2N1bXVsYXRlZE1lYW5TcXVhcmVzICE9IG51bGwpIHtcbiAgICAgIGRpc3Bvc2UodGhpcy5hY2N1bXVsYXRlZE1lYW5TcXVhcmVzLm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHMgIT0gbnVsbCAmJiB0aGlzLmNlbnRlcmVkKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHMubWFwKHYgPT4gdi52YXJpYWJsZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY2N1bXVsYXRlZE1vbWVudHMgIT0gbnVsbCkge1xuICAgICAgZGlzcG9zZSh0aGlzLmFjY3VtdWxhdGVkTW9tZW50cy5tYXAodiA9PiB2LnZhcmlhYmxlKSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0V2VpZ2h0cygpOiBQcm9taXNlPE5hbWVkVGVuc29yW10+IHtcbiAgICAvLyBPcmRlciBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICBjb25zdCB2YXJpYWJsZXM6IE9wdGltaXplclZhcmlhYmxlW10gPVxuICAgICAgICBbLi4udGhpcy5hY2N1bXVsYXRlZE1lYW5TcXVhcmVzLCAuLi50aGlzLmFjY3VtdWxhdGVkTW9tZW50c107XG4gICAgaWYgKHRoaXMuY2VudGVyZWQpIHtcbiAgICAgIHZhcmlhYmxlcy5wdXNoKC4uLnRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHMpO1xuICAgIH1cbiAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2F2ZUl0ZXJhdGlvbnMoKV0uY29uY2F0KFxuICAgICAgICB2YXJpYWJsZXMubWFwKHYgPT4gKHtuYW1lOiB2Lm9yaWdpbmFsTmFtZSwgdGVuc29yOiB2LnZhcmlhYmxlfSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGNvbnN0IHZhcmlhYmxlQ291bnQgPVxuICAgICAgICB0aGlzLmNlbnRlcmVkID8gd2VpZ2h0VmFsdWVzLmxlbmd0aCAvIDMgOiB3ZWlnaHRWYWx1ZXMubGVuZ3RoIC8gMjtcbiAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmFjY3VtdWxhdGVkTWVhblNxdWFyZXMgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UoMCwgdmFyaWFibGVDb3VudCkubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogdi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6IHYudGVuc29yLnZhcmlhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgdGhpcy5hY2N1bXVsYXRlZE1vbWVudHMgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UodmFyaWFibGVDb3VudCwgdmFyaWFibGVDb3VudCAqIDIpXG4gICAgICAgICAgICAubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogdi50ZW5zb3IudmFyaWFibGUodHJhaW5hYmxlKVxuICAgICAgICAgICAgICAgICB9KSk7XG4gICAgaWYgKHRoaXMuY2VudGVyZWQpIHtcbiAgICAgIHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHMgPVxuICAgICAgICAgIHdlaWdodFZhbHVlcy5zbGljZSh2YXJpYWJsZUNvdW50ICogMiwgdmFyaWFibGVDb3VudCAqIDMpXG4gICAgICAgICAgICAgIC5tYXAodiA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogdi50ZW5zb3IudmFyaWFibGUodHJhaW5hYmxlKVxuICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdkZWNheSc6IHRoaXMuZGVjYXksXG4gICAgICAnbW9tZW50dW0nOiB0aGlzLm1vbWVudHVtLFxuICAgICAgJ2Vwc2lsb24nOiB0aGlzLmVwc2lsb24sXG4gICAgICAnY2VudGVyZWQnOiB0aGlzLmNlbnRlcmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKFxuICAgICAgICBjb25maWdbJ2xlYXJuaW5nUmF0ZSddLCBjb25maWdbJ2RlY2F5J10sIGNvbmZpZ1snbW9tZW50dW0nXSxcbiAgICAgICAgY29uZmlnWydlcHNpbG9uJ10sIGNvbmZpZ1snY2VudGVyZWQnXSk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AdadeltaOptimizer } from './adadelta_optimizer';\nimport { AdagradOptimizer } from './adagrad_optimizer';\nimport { AdamOptimizer } from './adam_optimizer';\nimport { AdamaxOptimizer } from './adamax_optimizer';\nimport { MomentumOptimizer } from './momentum_optimizer';\nimport { RMSPropOptimizer } from './rmsprop_optimizer';\nimport { SGDOptimizer } from './sgd_optimizer';\nimport { registerClass } from '../serialization';\nconst OPTIMIZERS = [\n AdadeltaOptimizer,\n AdagradOptimizer,\n AdamOptimizer,\n AdamaxOptimizer,\n MomentumOptimizer,\n RMSPropOptimizer,\n SGDOptimizer,\n];\nexport function registerOptimizers() {\n for (const optimizer of OPTIMIZERS) {\n registerClass(optimizer);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfb3B0aW1pemVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3B0aW1pemVycy9yZWdpc3Rlcl9vcHRpbWl6ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFNLFVBQVUsR0FBRztJQUNqQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixZQUFZO0NBQ2IsQ0FBQztBQUVGLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7UUFDbEMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzFCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBZGFkZWx0YU9wdGltaXplcn0gZnJvbSAnLi9hZGFkZWx0YV9vcHRpbWl6ZXInO1xuaW1wb3J0IHtBZGFncmFkT3B0aW1pemVyfSBmcm9tICcuL2FkYWdyYWRfb3B0aW1pemVyJztcbmltcG9ydCB7QWRhbU9wdGltaXplcn0gZnJvbSAnLi9hZGFtX29wdGltaXplcic7XG5pbXBvcnQge0FkYW1heE9wdGltaXplcn0gZnJvbSAnLi9hZGFtYXhfb3B0aW1pemVyJztcbmltcG9ydCB7TW9tZW50dW1PcHRpbWl6ZXJ9IGZyb20gJy4vbW9tZW50dW1fb3B0aW1pemVyJztcbmltcG9ydCB7Uk1TUHJvcE9wdGltaXplcn0gZnJvbSAnLi9ybXNwcm9wX29wdGltaXplcic7XG5pbXBvcnQge1NHRE9wdGltaXplcn0gZnJvbSAnLi9zZ2Rfb3B0aW1pemVyJztcbmltcG9ydCB7cmVnaXN0ZXJDbGFzc30gZnJvbSAnLi4vc2VyaWFsaXphdGlvbic7XG5cbmNvbnN0IE9QVElNSVpFUlMgPSBbXG4gIEFkYWRlbHRhT3B0aW1pemVyLFxuICBBZGFncmFkT3B0aW1pemVyLFxuICBBZGFtT3B0aW1pemVyLFxuICBBZGFtYXhPcHRpbWl6ZXIsXG4gIE1vbWVudHVtT3B0aW1pemVyLFxuICBSTVNQcm9wT3B0aW1pemVyLFxuICBTR0RPcHRpbWl6ZXIsXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJPcHRpbWl6ZXJzKCkge1xuICBmb3IgKGNvbnN0IG9wdGltaXplciBvZiBPUFRJTUlaRVJTKSB7XG4gICAgcmVnaXN0ZXJDbGFzcyhvcHRpbWl6ZXIpO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * IOHandlers related to files, such as browser-triggered file downloads,\n * user-selected files in browser.\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { basename, getModelArtifactsForJSON, getModelArtifactsInfoForJSON, getModelJSONForModelArtifacts } from './io_utils';\nimport { IORouterRegistry } from './router_registry';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nconst DEFAULT_FILE_NAME_PREFIX = 'model';\nconst DEFAULT_JSON_EXTENSION_NAME = '.json';\nconst DEFAULT_WEIGHT_DATA_EXTENSION_NAME = '.weights.bin';\nfunction defer(f) {\n return new Promise(resolve => setTimeout(resolve)).then(f);\n}\nclass BrowserDownloads {\n constructor(fileNamePrefix) {\n if (!env().getBool('IS_BROWSER')) {\n // TODO(cais): Provide info on what IOHandlers are available under the\n // current environment.\n throw new Error('browserDownloads() cannot proceed because the current environment ' +\n 'is not a browser.');\n }\n if (fileNamePrefix.startsWith(BrowserDownloads.URL_SCHEME)) {\n fileNamePrefix = fileNamePrefix.slice(BrowserDownloads.URL_SCHEME.length);\n }\n if (fileNamePrefix == null || fileNamePrefix.length === 0) {\n fileNamePrefix = DEFAULT_FILE_NAME_PREFIX;\n }\n this.modelJsonFileName = fileNamePrefix + DEFAULT_JSON_EXTENSION_NAME;\n this.weightDataFileName =\n fileNamePrefix + DEFAULT_WEIGHT_DATA_EXTENSION_NAME;\n }\n async save(modelArtifacts) {\n if (typeof (document) === 'undefined') {\n throw new Error('Browser downloads are not supported in ' +\n 'this environment since `document` is not present');\n }\n // TODO(mattsoulanille): Support saving models over 2GB that exceed\n // Chrome's ArrayBuffer size limit.\n const weightBuffer = CompositeArrayBuffer.join(modelArtifacts.weightData);\n const weightsURL = window.URL.createObjectURL(new Blob([weightBuffer], { type: 'application/octet-stream' }));\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserDownloads.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n else {\n const weightsManifest = [{\n paths: ['./' + this.weightDataFileName],\n weights: modelArtifacts.weightSpecs\n }];\n const modelJSON = getModelJSONForModelArtifacts(modelArtifacts, weightsManifest);\n const modelJsonURL = window.URL.createObjectURL(new Blob([JSON.stringify(modelJSON)], { type: 'application/json' }));\n // If anchor elements are not provided, create them without attaching them\n // to parents, so that the downloaded file names can be controlled.\n const jsonAnchor = this.modelJsonAnchor == null ?\n document.createElement('a') :\n this.modelJsonAnchor;\n jsonAnchor.download = this.modelJsonFileName;\n jsonAnchor.href = modelJsonURL;\n // Trigger downloads by evoking a click event on the download anchors.\n // When multiple downloads are started synchronously, Firefox will only\n // save the last one.\n await defer(() => jsonAnchor.dispatchEvent(new MouseEvent('click')));\n if (modelArtifacts.weightData != null) {\n const weightDataAnchor = this.weightDataAnchor == null ?\n document.createElement('a') :\n this.weightDataAnchor;\n weightDataAnchor.download = this.weightDataFileName;\n weightDataAnchor.href = weightsURL;\n await defer(() => weightDataAnchor.dispatchEvent(new MouseEvent('click')));\n }\n return { modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts) };\n }\n }\n}\nBrowserDownloads.URL_SCHEME = 'downloads://';\nexport { BrowserDownloads };\nclass BrowserFiles {\n constructor(files) {\n if (files == null || files.length < 1) {\n throw new Error(`When calling browserFiles, at least 1 file is required, ` +\n `but received ${files}`);\n }\n this.jsonFile = files[0];\n this.weightsFiles = files.slice(1);\n }\n async load() {\n return new Promise((resolve, reject) => {\n const jsonReader = new FileReader();\n jsonReader.onload = (event) => {\n // tslint:disable-next-line:no-any\n const modelJSON = JSON.parse(event.target.result);\n const modelTopology = modelJSON.modelTopology;\n if (modelTopology == null) {\n reject(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));\n return;\n }\n const weightsManifest = modelJSON.weightsManifest;\n if (weightsManifest == null) {\n reject(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));\n return;\n }\n if (this.weightsFiles.length === 0) {\n resolve({ modelTopology });\n return;\n }\n const modelArtifactsPromise = getModelArtifactsForJSON(modelJSON, (weightsManifest) => this.loadWeights(weightsManifest));\n resolve(modelArtifactsPromise);\n };\n jsonReader.onerror = error => reject(`Failed to read model topology and weights manifest JSON ` +\n `from file '${this.jsonFile.name}'. BrowserFiles supports loading ` +\n `Keras-style tf.Model artifacts only.`);\n jsonReader.readAsText(this.jsonFile);\n });\n }\n loadWeights(weightsManifest) {\n const weightSpecs = [];\n const paths = [];\n for (const entry of weightsManifest) {\n weightSpecs.push(...entry.weights);\n paths.push(...entry.paths);\n }\n const pathToFile = this.checkManifestAndWeightFiles(weightsManifest);\n const promises = paths.map(path => this.loadWeightsFile(path, pathToFile[path]));\n return Promise.all(promises).then(buffers => [weightSpecs, buffers]);\n }\n loadWeightsFile(path, file) {\n return new Promise((resolve, reject) => {\n const weightFileReader = new FileReader();\n weightFileReader.onload = (event) => {\n // tslint:disable-next-line:no-any\n const weightData = event.target.result;\n resolve(weightData);\n };\n weightFileReader.onerror = error => reject(`Failed to weights data from file of path '${path}'.`);\n weightFileReader.readAsArrayBuffer(file);\n });\n }\n /**\n * Check the compatibility between weights manifest and weight files.\n */\n checkManifestAndWeightFiles(manifest) {\n const basenames = [];\n const fileNames = this.weightsFiles.map(file => basename(file.name));\n const pathToFile = {};\n for (const group of manifest) {\n group.paths.forEach(path => {\n const pathBasename = basename(path);\n if (basenames.indexOf(pathBasename) !== -1) {\n throw new Error(`Duplicate file basename found in weights manifest: ` +\n `'${pathBasename}'`);\n }\n basenames.push(pathBasename);\n if (fileNames.indexOf(pathBasename) === -1) {\n throw new Error(`Weight file with basename '${pathBasename}' is not provided.`);\n }\n else {\n pathToFile[path] = this.weightsFiles[fileNames.indexOf(pathBasename)];\n }\n });\n }\n if (basenames.length !== this.weightsFiles.length) {\n throw new Error(`Mismatch in the number of files in weights manifest ` +\n `(${basenames.length}) and the number of weight files provided ` +\n `(${this.weightsFiles.length}).`);\n }\n return pathToFile;\n }\n}\nexport const browserDownloadsRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserDownloads.URL_SCHEME)) {\n return browserDownloads(url.slice(BrowserDownloads.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(browserDownloadsRouter);\n/**\n * Creates an IOHandler that triggers file downloads from the browser.\n *\n * The returned `IOHandler` instance can be used as model exporting methods such\n * as `tf.Model.save` and supports only saving.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * const saveResult = await model.save('downloads://mymodel');\n * // This will trigger downloading of two files:\n * // 'mymodel.json' and 'mymodel.weights.bin'.\n * console.log(saveResult);\n * ```\n *\n * @param fileNamePrefix Prefix name of the files to be downloaded. For use with\n * `tf.Model`, `fileNamePrefix` should follow either of the following two\n * formats:\n * 1. `null` or `undefined`, in which case the default file\n * names will be used:\n * - 'model.json' for the JSON file containing the model topology and\n * weights manifest.\n * - 'model.weights.bin' for the binary file containing the binary weight\n * values.\n * 2. A single string or an Array of a single string, as the file name prefix.\n * For example, if `'foo'` is provided, the downloaded JSON\n * file and binary weights file will be named 'foo.json' and\n * 'foo.weights.bin', respectively.\n * @param config Additional configuration for triggering downloads.\n * @returns An instance of `BrowserDownloads` `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function browserDownloads(fileNamePrefix = 'model') {\n return new BrowserDownloads(fileNamePrefix);\n}\n/**\n * Creates an IOHandler that loads model artifacts from user-selected files.\n *\n * This method can be used for loading from files such as user-selected files\n * in the browser.\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * // Note: This code snippet won't run properly without the actual file input\n * // elements in the HTML DOM.\n *\n * // Suppose there are two HTML file input (``)\n * // elements.\n * const uploadJSONInput = document.getElementById('upload-json');\n * const uploadWeightsInput = document.getElementById('upload-weights');\n * const model = await tf.loadLayersModel(tf.io.browserFiles(\n * [uploadJSONInput.files[0], uploadWeightsInput.files[0]]));\n * ```\n *\n * @param files `File`s to load from. Currently, this function supports only\n * loading from files that contain Keras-style models (i.e., `tf.Model`s), for\n * which an `Array` of `File`s is expected (in that order):\n * - A JSON file containing the model topology and weight manifest.\n * - Optionally, one or more binary files containing the binary weights.\n * These files must have names that match the paths in the `weightsManifest`\n * contained by the aforementioned JSON file, or errors will be thrown\n * during loading. These weights files have the same format as the ones\n * generated by `tensorflowjs_converter` that comes with the `tensorflowjs`\n * Python PIP package. If no weights files are provided, only the model\n * topology will be loaded from the JSON file above.\n * @returns An instance of `Files` `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function browserFiles(files) {\n return new BrowserFiles(files);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlcl9maWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vYnJvd3Nlcl9maWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7O0dBR0c7QUFFSCxPQUFPLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMzSCxPQUFPLEVBQVcsZ0JBQWdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQztBQUN6QyxNQUFNLDJCQUEyQixHQUFHLE9BQU8sQ0FBQztBQUM1QyxNQUFNLGtDQUFrQyxHQUFHLGNBQWMsQ0FBQztBQUUxRCxTQUFTLEtBQUssQ0FBSSxDQUFVO0lBQzFCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQWEsZ0JBQWdCO0lBUTNCLFlBQVksY0FBdUI7UUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNoQyxzRUFBc0U7WUFDdEUseUJBQXlCO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ1gsb0VBQW9FO2dCQUNwRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQzFCO1FBRUQsSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFELGNBQWMsR0FBRyxj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QyxZQUFZLENBQUMsRUFBRTtRQUNoQyxPQUFPLElBQUksQ0FBQztLQUNiO1NBQU07UUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RFLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN4RTthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0FBQ0gsQ0FBQyxDQUFDO0FBQ0YsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUU1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLE9BQU87SUFDdkQsT0FBTyxJQUFJLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhO0lBQ3hDLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBJT0hhbmRsZXJzIHJlbGF0ZWQgdG8gZmlsZXMsIHN1Y2ggYXMgYnJvd3Nlci10cmlnZ2VyZWQgZmlsZSBkb3dubG9hZHMsXG4gKiB1c2VyLXNlbGVjdGVkIGZpbGVzIGluIGJyb3dzZXIuXG4gKi9cblxuaW1wb3J0ICcuLi9mbGFncyc7XG5pbXBvcnQge2Vudn0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQge2Jhc2VuYW1lLCBnZXRNb2RlbEFydGlmYWN0c0ZvckpTT04sIGdldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT04sIGdldE1vZGVsSlNPTkZvck1vZGVsQXJ0aWZhY3RzfSBmcm9tICcuL2lvX3V0aWxzJztcbmltcG9ydCB7SU9Sb3V0ZXIsIElPUm91dGVyUmVnaXN0cnl9IGZyb20gJy4vcm91dGVyX3JlZ2lzdHJ5JztcbmltcG9ydCB7SU9IYW5kbGVyLCBNb2RlbEFydGlmYWN0cywgTW9kZWxKU09OLCBTYXZlUmVzdWx0LCBXZWlnaHREYXRhLCBXZWlnaHRzTWFuaWZlc3RDb25maWcsIFdlaWdodHNNYW5pZmVzdEVudHJ5fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5cbmNvbnN0IERFRkFVTFRfRklMRV9OQU1FX1BSRUZJWCA9ICdtb2RlbCc7XG5jb25zdCBERUZBVUxUX0pTT05fRVhURU5TSU9OX05BTUUgPSAnLmpzb24nO1xuY29uc3QgREVGQVVMVF9XRUlHSFRfREFUQV9FWFRFTlNJT05fTkFNRSA9ICcud2VpZ2h0cy5iaW4nO1xuXG5mdW5jdGlvbiBkZWZlcjxUPihmOiAoKSA9PiBUKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSkpLnRoZW4oZik7XG59XG5cbmV4cG9ydCBjbGFzcyBCcm93c2VyRG93bmxvYWRzIGltcGxlbWVudHMgSU9IYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2RlbEpzb25GaWxlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodERhdGFGaWxlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG1vZGVsSnNvbkFuY2hvcjogSFRNTEFuY2hvckVsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2VpZ2h0RGF0YUFuY2hvcjogSFRNTEFuY2hvckVsZW1lbnQ7XG5cbiAgc3RhdGljIHJlYWRvbmx5IFVSTF9TQ0hFTUUgPSAnZG93bmxvYWRzOi8vJztcblxuICBjb25zdHJ1Y3RvcihmaWxlTmFtZVByZWZpeD86IHN0cmluZykge1xuICAgIGlmICghZW52KCkuZ2V0Qm9vbCgnSVNfQlJPV1NFUicpKSB7XG4gICAgICAvLyBUT0RPKGNhaXMpOiBQcm92aWRlIGluZm8gb24gd2hhdCBJT0hhbmRsZXJzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gICAgICAvLyAgIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ2Jyb3dzZXJEb3dubG9hZHMoKSBjYW5ub3QgcHJvY2VlZCBiZWNhdXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50ICcgK1xuICAgICAgICAgICdpcyBub3QgYSBicm93c2VyLicpO1xuICAgIH1cblxuICAgIGlmIChmaWxlTmFtZVByZWZpeC5zdGFydHNXaXRoKEJyb3dzZXJEb3dubG9hZHMuVVJMX1NDSEVNRSkpIHtcbiAgICAgIGZpbGVOYW1lUHJlZml4ID0gZmlsZU5hbWVQcmVmaXguc2xpY2UoQnJvd3NlckRvd25sb2Fkcy5VUkxfU0NIRU1FLmxlbmd0aCk7XG4gICAgfVxuICAgIGlmIChmaWxlTmFtZVByZWZpeCA9PSBudWxsIHx8IGZpbGVOYW1lUHJlZml4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgZmlsZU5hbWVQcmVmaXggPSBERUZBVUxUX0ZJTEVfTkFNRV9QUkVGSVg7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlbEpzb25GaWxlTmFtZSA9IGZpbGVOYW1lUHJlZml4ICsgREVGQVVMVF9KU09OX0VYVEVOU0lPTl9OQU1FO1xuICAgIHRoaXMud2VpZ2h0RGF0YUZpbGVOYW1lID1cbiAgICAgICAgZmlsZU5hbWVQcmVmaXggKyBERUZBVUxUX1dFSUdIVF9EQVRBX0VYVEVOU0lPTl9OQU1FO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShtb2RlbEFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpOiBQcm9taXNlPFNhdmVSZXN1bHQ+IHtcbiAgICBpZiAodHlwZW9mIChkb2N1bWVudCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Jyb3dzZXIgZG93bmxvYWRzIGFyZSBub3Qgc3VwcG9ydGVkIGluICcgK1xuICAgICAgICAgICd0aGlzIGVudmlyb25tZW50IHNpbmNlIGBkb2N1bWVudGAgaXMgbm90IHByZXNlbnQnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPKG1hdHRzb3VsYW5pbGxlKTogU3VwcG9ydCBzYXZpbmcgbW9kZWxzIG92ZXIgMkdCIHRoYXQgZXhjZWVkXG4gICAgLy8gQ2hyb21lJ3MgQXJyYXlCdWZmZXIgc2l6ZSBsaW1pdC5cbiAgICBjb25zdCB3ZWlnaHRCdWZmZXIgPSBDb21wb3NpdGVBcnJheUJ1ZmZlci5qb2luKG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEpO1xuXG4gICAgY29uc3Qgd2VpZ2h0c1VSTCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFxuICAgICAgICBbd2VpZ2h0QnVmZmVyXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nfSkpO1xuXG4gICAgaWYgKG1vZGVsQXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3kgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdCcm93c2VyRG93bmxvYWRzLnNhdmUoKSBkb2VzIG5vdCBzdXBwb3J0IHNhdmluZyBtb2RlbCB0b3BvbG9neSAnICtcbiAgICAgICAgICAnaW4gYmluYXJ5IGZvcm1hdHMgeWV0LicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB3ZWlnaHRzTWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZyA9IFt7XG4gICAgICAgIHBhdGhzOiBbJy4vJyArIHRoaXMud2VpZ2h0RGF0YUZpbGVOYW1lXSxcbiAgICAgICAgd2VpZ2h0czogbW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbW9kZWxKU09OOiBNb2RlbEpTT04gPVxuICAgICAgICAgIGdldE1vZGVsSlNPTkZvck1vZGVsQXJ0aWZhY3RzKG1vZGVsQXJ0aWZhY3RzLCB3ZWlnaHRzTWFuaWZlc3QpO1xuXG4gICAgICBjb25zdCBtb2RlbEpzb25VUkwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChcbiAgICAgICAgICBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkobW9kZWxKU09OKV0sIHt0eXBlOiAnYXBwbGljYXRpb24vanNvbid9KSk7XG5cbiAgICAgIC8vIElmIGFuY2hvciBlbGVtZW50cyBhcmUgbm90IHByb3ZpZGVkLCBjcmVhdGUgdGhlbSB3aXRob3V0IGF0dGFjaGluZyB0aGVtXG4gICAgICAvLyB0byBwYXJlbnRzLCBzbyB0aGF0IHRoZSBkb3dubG9hZGVkIGZpbGUgbmFtZXMgY2FuIGJlIGNvbnRyb2xsZWQuXG4gICAgICBjb25zdCBqc29uQW5jaG9yID0gdGhpcy5tb2RlbEpzb25BbmNob3IgPT0gbnVsbCA/XG4gICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpIDpcbiAgICAgICAgICB0aGlzLm1vZGVsSnNvbkFuY2hvcjtcbiAgICAgIGpzb25BbmNob3IuZG93bmxvYWQgPSB0aGlzLm1vZGVsSnNvbkZpbGVOYW1lO1xuICAgICAganNvbkFuY2hvci5ocmVmID0gbW9kZWxKc29uVVJMO1xuICAgICAgLy8gVHJpZ2dlciBkb3dubG9hZHMgYnkgZXZva2luZyBhIGNsaWNrIGV2ZW50IG9uIHRoZSBkb3dubG9hZCBhbmNob3JzLlxuICAgICAgLy8gV2hlbiBtdWx0aXBsZSBkb3dubG9hZHMgYXJlIHN0YXJ0ZWQgc3luY2hyb25vdXNseSwgRmlyZWZveCB3aWxsIG9ubHlcbiAgICAgIC8vIHNhdmUgdGhlIGxhc3Qgb25lLlxuICAgICAgYXdhaXQgZGVmZXIoKCkgPT4ganNvbkFuY2hvci5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKSk7XG5cbiAgICAgIGlmIChtb2RlbEFydGlmYWN0cy53ZWlnaHREYXRhICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgd2VpZ2h0RGF0YUFuY2hvciA9IHRoaXMud2VpZ2h0RGF0YUFuY2hvciA9PSBudWxsID9cbiAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKSA6XG4gICAgICAgICAgICB0aGlzLndlaWdodERhdGFBbmNob3I7XG4gICAgICAgIHdlaWdodERhdGFBbmNob3IuZG93bmxvYWQgPSB0aGlzLndlaWdodERhdGFGaWxlTmFtZTtcbiAgICAgICAgd2VpZ2h0RGF0YUFuY2hvci5ocmVmID0gd2VpZ2h0c1VSTDtcbiAgICAgICAgYXdhaXQgZGVmZXIoXG4gICAgICAgICAgICAoKSA9PiB3ZWlnaHREYXRhQW5jaG9yLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJykpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHttb2RlbEFydGlmYWN0c0luZm86IGdldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT04obW9kZWxBcnRpZmFjdHMpfTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgQnJvd3NlckZpbGVzIGltcGxlbWVudHMgSU9IYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBqc29uRmlsZTogRmlsZTtcbiAgcHJpdmF0ZSByZWFkb25seSB3ZWlnaHRzRmlsZXM6IEZpbGVbXTtcblxuICBjb25zdHJ1Y3RvcihmaWxlczogRmlsZVtdKSB7XG4gICAgaWYgKGZpbGVzID09IG51bGwgfHwgZmlsZXMubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBXaGVuIGNhbGxpbmcgYnJvd3NlckZpbGVzLCBhdCBsZWFzdCAxIGZpbGUgaXMgcmVxdWlyZWQsIGAgK1xuICAgICAgICAgIGBidXQgcmVjZWl2ZWQgJHtmaWxlc31gKTtcbiAgICB9XG4gICAgdGhpcy5qc29uRmlsZSA9IGZpbGVzWzBdO1xuICAgIHRoaXMud2VpZ2h0c0ZpbGVzID0gZmlsZXMuc2xpY2UoMSk7XG4gIH1cblxuICBhc3luYyBsb2FkKCk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHM+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QganNvblJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICBqc29uUmVhZGVyLm9ubG9hZCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICBjb25zdCBtb2RlbEpTT04gPSBKU09OLnBhcnNlKChldmVudC50YXJnZXQgYXMgYW55KS5yZXN1bHQpIGFzIE1vZGVsSlNPTjtcblxuICAgICAgICBjb25zdCBtb2RlbFRvcG9sb2d5ID0gbW9kZWxKU09OLm1vZGVsVG9wb2xvZ3k7XG4gICAgICAgIGlmIChtb2RlbFRvcG9sb2d5ID09IG51bGwpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBtb2RlbFRvcG9sb2d5IGZpZWxkIGlzIG1pc3NpbmcgZnJvbSBmaWxlICR7XG4gICAgICAgICAgICAgIHRoaXMuanNvbkZpbGUubmFtZX1gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2VpZ2h0c01hbmlmZXN0ID0gbW9kZWxKU09OLndlaWdodHNNYW5pZmVzdDtcbiAgICAgICAgaWYgKHdlaWdodHNNYW5pZmVzdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgd2VpZ2h0TWFuaWZlc3QgZmllbGQgaXMgbWlzc2luZyBmcm9tIGZpbGUgJHtcbiAgICAgICAgICAgICAgdGhpcy5qc29uRmlsZS5uYW1lfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy53ZWlnaHRzRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmVzb2x2ZSh7bW9kZWxUb3BvbG9neX0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsQXJ0aWZhY3RzUHJvbWlzZSA9IGdldE1vZGVsQXJ0aWZhY3RzRm9ySlNPTihcbiAgICAgICAgICAgIG1vZGVsSlNPTiwgKHdlaWdodHNNYW5pZmVzdCkgPT4gdGhpcy5sb2FkV2VpZ2h0cyh3ZWlnaHRzTWFuaWZlc3QpKTtcbiAgICAgICAgcmVzb2x2ZShtb2RlbEFydGlmYWN0c1Byb21pc2UpO1xuICAgICAgfTtcblxuICAgICAganNvblJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KFxuICAgICAgICAgIGBGYWlsZWQgdG8gcmVhZCBtb2RlbCB0b3BvbG9neSBhbmQgd2VpZ2h0cyBtYW5pZmVzdCBKU09OIGAgK1xuICAgICAgICAgIGBmcm9tIGZpbGUgJyR7dGhpcy5qc29uRmlsZS5uYW1lfScuIEJyb3dzZXJGaWxlcyBzdXBwb3J0cyBsb2FkaW5nIGAgK1xuICAgICAgICAgIGBLZXJhcy1zdHlsZSB0Zi5Nb2RlbCBhcnRpZmFjdHMgb25seS5gKTtcbiAgICAgIGpzb25SZWFkZXIucmVhZEFzVGV4dCh0aGlzLmpzb25GaWxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFdlaWdodHMod2VpZ2h0c01hbmlmZXN0OiBXZWlnaHRzTWFuaWZlc3RDb25maWcpOiBQcm9taXNlPFtcbiAgICAvKiB3ZWlnaHRTcGVjcyAqLyBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLCBXZWlnaHREYXRhLFxuICBdPiB7XG4gICAgY29uc3Qgd2VpZ2h0U3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBwYXRoczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHdlaWdodHNNYW5pZmVzdCkge1xuICAgICAgd2VpZ2h0U3BlY3MucHVzaCguLi5lbnRyeS53ZWlnaHRzKTtcbiAgICAgIHBhdGhzLnB1c2goLi4uZW50cnkucGF0aHMpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGhUb0ZpbGU6IHtbcGF0aDogc3RyaW5nXTogRmlsZX0gPVxuICAgICAgICB0aGlzLmNoZWNrTWFuaWZlc3RBbmRXZWlnaHRGaWxlcyh3ZWlnaHRzTWFuaWZlc3QpO1xuXG4gICAgY29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2U8QXJyYXlCdWZmZXI+PiA9XG4gICAgICAgIHBhdGhzLm1hcChwYXRoID0+IHRoaXMubG9hZFdlaWdodHNGaWxlKHBhdGgsIHBhdGhUb0ZpbGVbcGF0aF0pKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihcbiAgICAgICAgYnVmZmVycyA9PiBbd2VpZ2h0U3BlY3MsIGJ1ZmZlcnNdKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFdlaWdodHNGaWxlKHBhdGg6IHN0cmluZywgZmlsZTogRmlsZSk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgd2VpZ2h0RmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICB3ZWlnaHRGaWxlUmVhZGVyLm9ubG9hZCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICBjb25zdCB3ZWlnaHREYXRhID0gKGV2ZW50LnRhcmdldCBhcyBhbnkpLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcbiAgICAgICAgcmVzb2x2ZSh3ZWlnaHREYXRhKTtcbiAgICAgIH07XG4gICAgICB3ZWlnaHRGaWxlUmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PlxuICAgICAgICAgIHJlamVjdChgRmFpbGVkIHRvIHdlaWdodHMgZGF0YSBmcm9tIGZpbGUgb2YgcGF0aCAnJHtwYXRofScuYCk7XG4gICAgICB3ZWlnaHRGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gd2VpZ2h0cyBtYW5pZmVzdCBhbmQgd2VpZ2h0IGZpbGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja01hbmlmZXN0QW5kV2VpZ2h0RmlsZXMobWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZyk6XG4gICAgICB7W3BhdGg6IHN0cmluZ106IEZpbGV9IHtcbiAgICBjb25zdCBiYXNlbmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZmlsZU5hbWVzID0gdGhpcy53ZWlnaHRzRmlsZXMubWFwKGZpbGUgPT4gYmFzZW5hbWUoZmlsZS5uYW1lKSk7XG4gICAgY29uc3QgcGF0aFRvRmlsZToge1twYXRoOiBzdHJpbmddOiBGaWxlfSA9IHt9O1xuICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgbWFuaWZlc3QpIHtcbiAgICAgIGdyb3VwLnBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGhCYXNlbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICAgICAgICBpZiAoYmFzZW5hbWVzLmluZGV4T2YocGF0aEJhc2VuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBEdXBsaWNhdGUgZmlsZSBiYXNlbmFtZSBmb3VuZCBpbiB3ZWlnaHRzIG1hbmlmZXN0OiBgICtcbiAgICAgICAgICAgICAgYCcke3BhdGhCYXNlbmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgYmFzZW5hbWVzLnB1c2gocGF0aEJhc2VuYW1lKTtcbiAgICAgICAgaWYgKGZpbGVOYW1lcy5pbmRleE9mKHBhdGhCYXNlbmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgV2VpZ2h0IGZpbGUgd2l0aCBiYXNlbmFtZSAnJHtwYXRoQmFzZW5hbWV9JyBpcyBub3QgcHJvdmlkZWQuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0aFRvRmlsZVtwYXRoXSA9IHRoaXMud2VpZ2h0c0ZpbGVzW2ZpbGVOYW1lcy5pbmRleE9mKHBhdGhCYXNlbmFtZSldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZW5hbWVzLmxlbmd0aCAhPT0gdGhpcy53ZWlnaHRzRmlsZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE1pc21hdGNoIGluIHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gd2VpZ2h0cyBtYW5pZmVzdCBgICtcbiAgICAgICAgICBgKCR7YmFzZW5hbWVzLmxlbmd0aH0pIGFuZCB0aGUgbnVtYmVyIG9mIHdlaWdodCBmaWxlcyBwcm92aWRlZCBgICtcbiAgICAgICAgICBgKCR7dGhpcy53ZWlnaHRzRmlsZXMubGVuZ3RofSkuYCk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoVG9GaWxlO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBicm93c2VyRG93bmxvYWRzUm91dGVyOiBJT1JvdXRlciA9ICh1cmw6IHN0cmluZ3xzdHJpbmdbXSkgPT4ge1xuICBpZiAoIWVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmwpICYmIHVybC5zdGFydHNXaXRoKEJyb3dzZXJEb3dubG9hZHMuVVJMX1NDSEVNRSkpIHtcbiAgICAgIHJldHVybiBicm93c2VyRG93bmxvYWRzKHVybC5zbGljZShCcm93c2VyRG93bmxvYWRzLlVSTF9TQ0hFTUUubGVuZ3RoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufTtcbklPUm91dGVyUmVnaXN0cnkucmVnaXN0ZXJTYXZlUm91dGVyKGJyb3dzZXJEb3dubG9hZHNSb3V0ZXIpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gSU9IYW5kbGVyIHRoYXQgdHJpZ2dlcnMgZmlsZSBkb3dubG9hZHMgZnJvbSB0aGUgYnJvd3Nlci5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYElPSGFuZGxlcmAgaW5zdGFuY2UgY2FuIGJlIHVzZWQgYXMgbW9kZWwgZXhwb3J0aW5nIG1ldGhvZHMgc3VjaFxuICogYXMgYHRmLk1vZGVsLnNhdmVgIGFuZCBzdXBwb3J0cyBvbmx5IHNhdmluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW9kZWwgPSB0Zi5zZXF1ZW50aWFsKCk7XG4gKiBtb2RlbC5hZGQodGYubGF5ZXJzLmRlbnNlKFxuICogICAgIHt1bml0czogMSwgaW5wdXRTaGFwZTogWzEwXSwgYWN0aXZhdGlvbjogJ3NpZ21vaWQnfSkpO1xuICogY29uc3Qgc2F2ZVJlc3VsdCA9IGF3YWl0IG1vZGVsLnNhdmUoJ2Rvd25sb2FkczovL215bW9kZWwnKTtcbiAqIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGRvd25sb2FkaW5nIG9mIHR3byBmaWxlczpcbiAqIC8vICAgJ215bW9kZWwuanNvbicgYW5kICdteW1vZGVsLndlaWdodHMuYmluJy5cbiAqIGNvbnNvbGUubG9nKHNhdmVSZXN1bHQpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lUHJlZml4IFByZWZpeCBuYW1lIG9mIHRoZSBmaWxlcyB0byBiZSBkb3dubG9hZGVkLiBGb3IgdXNlIHdpdGhcbiAqICAgYHRmLk1vZGVsYCwgYGZpbGVOYW1lUHJlZml4YCBzaG91bGQgZm9sbG93IGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIHR3b1xuICogICBmb3JtYXRzOlxuICogICAxLiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAsIGluIHdoaWNoIGNhc2UgdGhlIGRlZmF1bHQgZmlsZVxuICogICAgICBuYW1lcyB3aWxsIGJlIHVzZWQ6XG4gKiAgICAgIC0gJ21vZGVsLmpzb24nIGZvciB0aGUgSlNPTiBmaWxlIGNvbnRhaW5pbmcgdGhlIG1vZGVsIHRvcG9sb2d5IGFuZFxuICogICAgICAgIHdlaWdodHMgbWFuaWZlc3QuXG4gKiAgICAgIC0gJ21vZGVsLndlaWdodHMuYmluJyBmb3IgdGhlIGJpbmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGJpbmFyeSB3ZWlnaHRcbiAqICAgICAgICB2YWx1ZXMuXG4gKiAgIDIuIEEgc2luZ2xlIHN0cmluZyBvciBhbiBBcnJheSBvZiBhIHNpbmdsZSBzdHJpbmcsIGFzIHRoZSBmaWxlIG5hbWUgcHJlZml4LlxuICogICAgICBGb3IgZXhhbXBsZSwgaWYgYCdmb28nYCBpcyBwcm92aWRlZCwgdGhlIGRvd25sb2FkZWQgSlNPTlxuICogICAgICBmaWxlIGFuZCBiaW5hcnkgd2VpZ2h0cyBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Zvby5qc29uJyBhbmRcbiAqICAgICAgJ2Zvby53ZWlnaHRzLmJpbicsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBjb25maWcgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0cmlnZ2VyaW5nIGRvd25sb2Fkcy5cbiAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIGBCcm93c2VyRG93bmxvYWRzYCBgSU9IYW5kbGVyYC5cbiAqXG4gKiBAZG9jIHtcbiAqICAgaGVhZGluZzogJ01vZGVscycsXG4gKiAgIHN1YmhlYWRpbmc6ICdMb2FkaW5nJyxcbiAqICAgbmFtZXNwYWNlOiAnaW8nLFxuICogICBpZ25vcmVDSTogdHJ1ZVxuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJvd3NlckRvd25sb2FkcyhmaWxlTmFtZVByZWZpeCA9ICdtb2RlbCcpOiBJT0hhbmRsZXIge1xuICByZXR1cm4gbmV3IEJyb3dzZXJEb3dubG9hZHMoZmlsZU5hbWVQcmVmaXgpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gSU9IYW5kbGVyIHRoYXQgbG9hZHMgbW9kZWwgYXJ0aWZhY3RzIGZyb20gdXNlci1zZWxlY3RlZCBmaWxlcy5cbiAqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBmb3IgbG9hZGluZyBmcm9tIGZpbGVzIHN1Y2ggYXMgdXNlci1zZWxlY3RlZCBmaWxlc1xuICogaW4gdGhlIGJyb3dzZXIuXG4gKiBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgdGYubG9hZExheWVyc01vZGVsYCwgYW4gaW5zdGFuY2Ugb2ZcbiAqIGB0Zi5MYXllcnNNb2RlbGAgKEtlcmFzLXN0eWxlKSBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgbG9hZGVkIGFydGlmYWN0cy5cbiAqXG4gKiBgYGBqc1xuICogLy8gTm90ZTogVGhpcyBjb2RlIHNuaXBwZXQgd29uJ3QgcnVuIHByb3Blcmx5IHdpdGhvdXQgdGhlIGFjdHVhbCBmaWxlIGlucHV0XG4gKiAvLyAgIGVsZW1lbnRzIGluIHRoZSBIVE1MIERPTS5cbiAqXG4gKiAvLyBTdXBwb3NlIHRoZXJlIGFyZSB0d28gSFRNTCBmaWxlIGlucHV0IChgPGlucHV0IHR5cGU9XCJmaWxlXCIgLi4uPmApXG4gKiAvLyBlbGVtZW50cy5cbiAqIGNvbnN0IHVwbG9hZEpTT05JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWQtanNvbicpO1xuICogY29uc3QgdXBsb2FkV2VpZ2h0c0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZC13ZWlnaHRzJyk7XG4gKiBjb25zdCBtb2RlbCA9IGF3YWl0IHRmLmxvYWRMYXllcnNNb2RlbCh0Zi5pby5icm93c2VyRmlsZXMoXG4gKiAgICAgW3VwbG9hZEpTT05JbnB1dC5maWxlc1swXSwgdXBsb2FkV2VpZ2h0c0lucHV0LmZpbGVzWzBdXSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGZpbGVzIGBGaWxlYHMgdG8gbG9hZCBmcm9tLiBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgb25seVxuICogICBsb2FkaW5nIGZyb20gZmlsZXMgdGhhdCBjb250YWluIEtlcmFzLXN0eWxlIG1vZGVscyAoaS5lLiwgYHRmLk1vZGVsYHMpLCBmb3JcbiAqICAgd2hpY2ggYW4gYEFycmF5YCBvZiBgRmlsZWBzIGlzIGV4cGVjdGVkIChpbiB0aGF0IG9yZGVyKTpcbiAqICAgLSBBIEpTT04gZmlsZSBjb250YWluaW5nIHRoZSBtb2RlbCB0b3BvbG9neSBhbmQgd2VpZ2h0IG1hbmlmZXN0LlxuICogICAtIE9wdGlvbmFsbHksIG9uZSBvciBtb3JlIGJpbmFyeSBmaWxlcyBjb250YWluaW5nIHRoZSBiaW5hcnkgd2VpZ2h0cy5cbiAqICAgICBUaGVzZSBmaWxlcyBtdXN0IGhhdmUgbmFtZXMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgaW4gdGhlIGB3ZWlnaHRzTWFuaWZlc3RgXG4gKiAgICAgY29udGFpbmVkIGJ5IHRoZSBhZm9yZW1lbnRpb25lZCBKU09OIGZpbGUsIG9yIGVycm9ycyB3aWxsIGJlIHRocm93blxuICogICAgIGR1cmluZyBsb2FkaW5nLiBUaGVzZSB3ZWlnaHRzIGZpbGVzIGhhdmUgdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBvbmVzXG4gKiAgICAgZ2VuZXJhdGVkIGJ5IGB0ZW5zb3JmbG93anNfY29udmVydGVyYCB0aGF0IGNvbWVzIHdpdGggdGhlIGB0ZW5zb3JmbG93anNgXG4gKiAgICAgUHl0aG9uIFBJUCBwYWNrYWdlLiBJZiBubyB3ZWlnaHRzIGZpbGVzIGFyZSBwcm92aWRlZCwgb25seSB0aGUgbW9kZWxcbiAqICAgICB0b3BvbG9neSB3aWxsIGJlIGxvYWRlZCBmcm9tIHRoZSBKU09OIGZpbGUgYWJvdmUuXG4gKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiBgRmlsZXNgIGBJT0hhbmRsZXJgLlxuICpcbiAqIEBkb2Mge1xuICogICBoZWFkaW5nOiAnTW9kZWxzJyxcbiAqICAgc3ViaGVhZGluZzogJ0xvYWRpbmcnLFxuICogICBuYW1lc3BhY2U6ICdpbycsXG4gKiAgIGlnbm9yZUNJOiB0cnVlXG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicm93c2VyRmlsZXMoZmlsZXM6IEZpbGVbXSk6IElPSGFuZGxlciB7XG4gIHJldHVybiBuZXcgQnJvd3NlckZpbGVzKGZpbGVzKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from '../util';\n/**\n * Monitor Promise.all progress, fire onProgress callback function.\n *\n * @param promises Promise list going to be monitored\n * @param onProgress Callback function. Fired when a promise resolved.\n * @param startFraction Optional fraction start. Default to 0.\n * @param endFraction Optional fraction end. Default to 1.\n */\nexport function monitorPromisesProgress(promises, onProgress, startFraction, endFraction) {\n checkPromises(promises);\n startFraction = startFraction == null ? 0 : startFraction;\n endFraction = endFraction == null ? 1 : endFraction;\n checkFraction(startFraction, endFraction);\n let resolvedPromise = 0;\n const registerMonitor = (promise) => {\n promise.then(value => {\n const fraction = startFraction +\n ++resolvedPromise / promises.length * (endFraction - startFraction);\n // pass fraction as parameter to callback function.\n onProgress(fraction);\n return value;\n });\n return promise;\n };\n function checkPromises(promises) {\n assert(promises != null && Array.isArray(promises) && promises.length > 0, () => 'promises must be a none empty array');\n }\n function checkFraction(startFraction, endFraction) {\n assert(startFraction >= 0 && startFraction <= 1, () => `Progress fraction must be in range [0, 1], but ` +\n `got startFraction ${startFraction}`);\n assert(endFraction >= 0 && endFraction <= 1, () => `Progress fraction must be in range [0, 1], but ` +\n `got endFraction ${endFraction}`);\n assert(endFraction >= startFraction, () => `startFraction must be no more than endFraction, but ` +\n `got startFraction ${startFraction} and endFraction ` +\n `${endFraction}`);\n }\n return Promise.all(promises.map(registerMonitor));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL3Byb2dyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFJL0I7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDbkMsUUFBMkIsRUFBRSxVQUE4QixFQUMzRCxhQUFzQixFQUFFLFdBQW9CO0lBQzlDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QixhQUFhLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDMUQsV0FBVyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3BELGFBQWEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBbUIsRUFBRSxFQUFFO1FBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsTUFBTSxRQUFRLEdBQUcsYUFBYTtnQkFDMUIsRUFBRSxlQUFlLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUN4RSxtREFBbUQ7WUFDbkQsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixTQUFTLGFBQWEsQ0FBQyxRQUEyQjtRQUNoRCxNQUFNLENBQ0YsUUFBUSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNsRSxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FBQyxhQUFxQixFQUFFLFdBQW1CO1FBQy9ELE1BQU0sQ0FDRixhQUFhLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLGlEQUFpRDtZQUNuRCxxQkFBcUIsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQ0YsV0FBVyxJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUNwQyxHQUFHLEVBQUUsQ0FBQyxpREFBaUQ7WUFDbkQsbUJBQW1CLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUNGLFdBQVcsSUFBSSxhQUFhLEVBQzVCLEdBQUcsRUFBRSxDQUFDLHNEQUFzRDtZQUN4RCxxQkFBcUIsYUFBYSxtQkFBbUI7WUFDckQsR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtPblByb2dyZXNzQ2FsbGJhY2t9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIE1vbml0b3IgUHJvbWlzZS5hbGwgcHJvZ3Jlc3MsIGZpcmUgb25Qcm9ncmVzcyBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZXMgUHJvbWlzZSBsaXN0IGdvaW5nIHRvIGJlIG1vbml0b3JlZFxuICogQHBhcmFtIG9uUHJvZ3Jlc3MgQ2FsbGJhY2sgZnVuY3Rpb24uIEZpcmVkIHdoZW4gYSBwcm9taXNlIHJlc29sdmVkLlxuICogQHBhcmFtIHN0YXJ0RnJhY3Rpb24gT3B0aW9uYWwgZnJhY3Rpb24gc3RhcnQuIERlZmF1bHQgdG8gMC5cbiAqIEBwYXJhbSBlbmRGcmFjdGlvbiBPcHRpb25hbCBmcmFjdGlvbiBlbmQuIERlZmF1bHQgdG8gMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbml0b3JQcm9taXNlc1Byb2dyZXNzPFQ+KFxuICAgIHByb21pc2VzOiBBcnJheTxQcm9taXNlPFQ+Piwgb25Qcm9ncmVzczogT25Qcm9ncmVzc0NhbGxiYWNrLFxuICAgIHN0YXJ0RnJhY3Rpb24/OiBudW1iZXIsIGVuZEZyYWN0aW9uPzogbnVtYmVyKSB7XG4gIGNoZWNrUHJvbWlzZXMocHJvbWlzZXMpO1xuICBzdGFydEZyYWN0aW9uID0gc3RhcnRGcmFjdGlvbiA9PSBudWxsID8gMCA6IHN0YXJ0RnJhY3Rpb247XG4gIGVuZEZyYWN0aW9uID0gZW5kRnJhY3Rpb24gPT0gbnVsbCA/IDEgOiBlbmRGcmFjdGlvbjtcbiAgY2hlY2tGcmFjdGlvbihzdGFydEZyYWN0aW9uLCBlbmRGcmFjdGlvbik7XG4gIGxldCByZXNvbHZlZFByb21pc2UgPSAwO1xuXG4gIGNvbnN0IHJlZ2lzdGVyTW9uaXRvciA9IChwcm9taXNlOiBQcm9taXNlPFQ+KSA9PiB7XG4gICAgcHJvbWlzZS50aGVuKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IGZyYWN0aW9uID0gc3RhcnRGcmFjdGlvbiArXG4gICAgICAgICAgKytyZXNvbHZlZFByb21pc2UgLyBwcm9taXNlcy5sZW5ndGggKiAoZW5kRnJhY3Rpb24gLSBzdGFydEZyYWN0aW9uKTtcbiAgICAgIC8vIHBhc3MgZnJhY3Rpb24gYXMgcGFyYW1ldGVyIHRvIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAgb25Qcm9ncmVzcyhmcmFjdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgZnVuY3Rpb24gY2hlY2tQcm9taXNlcyhwcm9taXNlczogQXJyYXk8UHJvbWlzZTxUPj4pOiB2b2lkIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIHByb21pc2VzICE9IG51bGwgJiYgQXJyYXkuaXNBcnJheShwcm9taXNlcykgJiYgcHJvbWlzZXMubGVuZ3RoID4gMCxcbiAgICAgICAgKCkgPT4gJ3Byb21pc2VzIG11c3QgYmUgYSBub25lIGVtcHR5IGFycmF5Jyk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0ZyYWN0aW9uKHN0YXJ0RnJhY3Rpb246IG51bWJlciwgZW5kRnJhY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGFzc2VydChcbiAgICAgICAgc3RhcnRGcmFjdGlvbiA+PSAwICYmIHN0YXJ0RnJhY3Rpb24gPD0gMSxcbiAgICAgICAgKCkgPT4gYFByb2dyZXNzIGZyYWN0aW9uIG11c3QgYmUgaW4gcmFuZ2UgWzAsIDFdLCBidXQgYCArXG4gICAgICAgICAgICBgZ290IHN0YXJ0RnJhY3Rpb24gJHtzdGFydEZyYWN0aW9ufWApO1xuICAgIGFzc2VydChcbiAgICAgICAgZW5kRnJhY3Rpb24gPj0gMCAmJiBlbmRGcmFjdGlvbiA8PSAxLFxuICAgICAgICAoKSA9PiBgUHJvZ3Jlc3MgZnJhY3Rpb24gbXVzdCBiZSBpbiByYW5nZSBbMCwgMV0sIGJ1dCBgICtcbiAgICAgICAgICAgIGBnb3QgZW5kRnJhY3Rpb24gJHtlbmRGcmFjdGlvbn1gKTtcbiAgICBhc3NlcnQoXG4gICAgICAgIGVuZEZyYWN0aW9uID49IHN0YXJ0RnJhY3Rpb24sXG4gICAgICAgICgpID0+IGBzdGFydEZyYWN0aW9uIG11c3QgYmUgbm8gbW9yZSB0aGFuIGVuZEZyYWN0aW9uLCBidXQgYCArXG4gICAgICAgICAgICBgZ290IHN0YXJ0RnJhY3Rpb24gJHtzdGFydEZyYWN0aW9ufSBhbmQgZW5kRnJhY3Rpb24gYCArXG4gICAgICAgICAgICBgJHtlbmRGcmFjdGlvbn1gKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcy5tYXAocmVnaXN0ZXJNb25pdG9yKSk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '../environment';\nimport * as util from '../util';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nimport { decodeWeights } from './io_utils';\nimport { monitorPromisesProgress } from './progress';\nimport { DTYPE_VALUE_SIZE_MAP } from './types';\n/**\n * Reads binary weights data from a number of URLs.\n *\n * @param fetchURLs URLs to send the HTTP requests at, using `fetch` calls.\n * @param requestOptions RequestInit (options) for the HTTP requests.\n * @param fetchFunc Optional overriding value for the `window.fetch` function.\n * @param onProgress Optional, progress callback function, fired periodically\n * before the load is completed.\n * @returns A `Promise` of an Array of `ArrayBuffer`. The Array has the same\n * length as `fetchURLs`.\n */\nexport async function loadWeightsAsArrayBuffer(fetchURLs, loadOptions) {\n if (loadOptions == null) {\n loadOptions = {};\n }\n const fetchFunc = loadOptions.fetchFunc == null ? env().platform.fetch :\n loadOptions.fetchFunc;\n // Create the requests for all of the weights in parallel.\n const requests = fetchURLs.map(fetchURL => fetchFunc(fetchURL, loadOptions.requestInit, { isBinary: true }));\n const fetchStartFraction = 0;\n const fetchEndFraction = 0.5;\n const responses = loadOptions.onProgress == null ?\n await Promise.all(requests) :\n await monitorPromisesProgress(requests, loadOptions.onProgress, fetchStartFraction, fetchEndFraction);\n const bufferPromises = responses.map(response => response.arrayBuffer());\n const bufferStartFraction = 0.5;\n const bufferEndFraction = 1;\n const buffers = loadOptions.onProgress == null ?\n await Promise.all(bufferPromises) :\n await monitorPromisesProgress(bufferPromises, loadOptions.onProgress, bufferStartFraction, bufferEndFraction);\n return buffers;\n}\nexport function streamWeights(fetchURLs, loadOptions) {\n var _a;\n const fetchFunc = loadOptions.fetchFunc == null ? env().platform.fetch :\n loadOptions.fetchFunc;\n let fetchIndex = 0;\n let chunkReader;\n (_a = loadOptions.onProgress) === null || _a === void 0 ? void 0 : _a.call(loadOptions, 0);\n return new ReadableStream({\n pull: async (controller) => {\n var _a;\n while (fetchIndex < fetchURLs.length) {\n if (!chunkReader) {\n const body = (await fetchFunc(fetchURLs[fetchIndex], loadOptions.requestInit, { isBinary: true })).body;\n chunkReader = body.getReader();\n }\n const { done, value } = await chunkReader.read();\n if (done) {\n fetchIndex++;\n chunkReader = undefined;\n (_a = loadOptions.onProgress) === null || _a === void 0 ? void 0 : _a.call(loadOptions, fetchIndex / fetchURLs.length);\n continue;\n }\n controller.enqueue(value);\n return;\n }\n controller.close();\n },\n });\n}\n/**\n * Reads a weights manifest JSON configuration, fetches the weights and\n * returns them as `Tensor`s.\n *\n * @param manifest The weights manifest JSON.\n * @param filePathPrefix The path prefix for filenames given in the manifest.\n * Defaults to the empty string.\n * @param weightNames The names of the weights to be fetched.\n */\nexport async function loadWeights(manifest, filePathPrefix = '', weightNames, requestInit) {\n // TODO(nsthorat): Groups are currently fetched atomically. If you need a\n // single weight from a group, the whole group will be fetched. At a future\n // date, we should support fetching only the individual shards within a\n // group that are needed to reconstruct the requested weight.\n // TODO(cais): Use `decodeWeights` for implementation.\n const fetchWeights = (fetchUrls) => loadWeightsAsArrayBuffer(fetchUrls, { requestInit });\n const loadWeights = weightsLoaderFactory(fetchWeights);\n return loadWeights(manifest, filePathPrefix, weightNames);\n}\n/**\n * Creates a function, which reads a weights manifest JSON configuration,\n * fetches the weight files using the specified function and returns them as\n * `Tensor`s.\n *\n * ```js\n * // example for creating a nodejs weight loader, which reads the weight files\n * // from disk using fs.readFileSync\n *\n * import * as fs from 'fs'\n *\n * const fetchWeightsFromDisk = (filePaths: string[]) =>\n * filePaths.map(filePath => fs.readFileSync(filePath).buffer)\n *\n * const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n *\n * const manifest = JSON.parse(\n * fs.readFileSync('./my_model-weights_manifest').toString()\n * )\n * const weightMap = await loadWeights(manifest, './')\n * ```\n * @param fetchWeightsFunction The function used for fetching the weight files.\n * @returns Weight loading function.\n */\nexport function weightsLoaderFactory(fetchWeightsFunction) {\n return async (manifest, filePathPrefix = '', weightNames) => {\n // Collect all the groups, weights, and their relative offsets to be\n // fetched.\n const groupIndicesToFetchMap = manifest.map(() => false);\n const groupWeightsToFetch = {};\n const weightsFound = weightNames != null ? weightNames.map(() => false) : [];\n const allManifestWeightNames = [];\n manifest.forEach((manifestGroupConfig, groupIndex) => {\n let groupOffset = 0;\n manifestGroupConfig.weights.forEach(weightsEntry => {\n const rawDtype = ('quantization' in weightsEntry) ?\n weightsEntry.quantization.dtype :\n weightsEntry.dtype;\n const weightsBytes = DTYPE_VALUE_SIZE_MAP[rawDtype] *\n util.sizeFromShape(weightsEntry.shape);\n const enqueueWeightsForFetchingFn = () => {\n groupIndicesToFetchMap[groupIndex] = true;\n if (groupWeightsToFetch[groupIndex] == null) {\n groupWeightsToFetch[groupIndex] = [];\n }\n groupWeightsToFetch[groupIndex].push({\n manifestEntry: weightsEntry,\n groupOffset,\n sizeBytes: weightsBytes\n });\n };\n if (weightNames != null) {\n weightNames.forEach((weightName, weightIndex) => {\n if (weightName === weightsEntry.name) {\n enqueueWeightsForFetchingFn();\n weightsFound[weightIndex] = true;\n }\n });\n }\n else {\n enqueueWeightsForFetchingFn();\n }\n allManifestWeightNames.push(weightsEntry.name);\n groupOffset += weightsBytes;\n });\n });\n if (!weightsFound.every(found => found)) {\n const weightsNotFound = weightNames.filter((_, i) => !weightsFound[i]);\n throw new Error(`Could not find weights in manifest with names: ` +\n `${weightsNotFound.join(', ')}. \\n` +\n `Manifest JSON has weights with names: ` +\n `${allManifestWeightNames.join(', ')}.`);\n }\n // Convert the one-hot boolean groupId => shouldFetch map to a list of group\n // IDs.\n const groupIndicesToFetch = groupIndicesToFetchMap.reduce((accumulator, shouldFetch, i) => {\n if (shouldFetch) {\n accumulator.push(i);\n }\n return accumulator;\n }, []);\n const fetchUrls = [];\n groupIndicesToFetch.forEach(i => {\n manifest[i].paths.forEach(filepath => {\n const fetchUrl = filePathPrefix +\n (!filePathPrefix.endsWith('/') ? '/' : '') + filepath;\n fetchUrls.push(fetchUrl);\n });\n });\n const buffers = await fetchWeightsFunction(fetchUrls);\n const weightsTensorMap = {};\n let bufferIndexOffset = 0;\n groupIndicesToFetch.forEach(i => {\n const numBuffers = manifest[i].paths.length;\n const weightsBuffer = new CompositeArrayBuffer(buffers.slice(bufferIndexOffset, bufferIndexOffset + numBuffers));\n const weightsEntries = groupWeightsToFetch[i];\n weightsEntries.forEach(weightsEntry => {\n const byteBuffer = weightsBuffer.slice(weightsEntry.groupOffset, weightsEntry.groupOffset + weightsEntry.sizeBytes);\n const nameToTensorMap = decodeWeights(byteBuffer, [weightsEntry.manifestEntry]);\n for (const name in nameToTensorMap) {\n weightsTensorMap[name] = nameToTensorMap[name];\n }\n });\n bufferIndexOffset += numBuffers;\n });\n return weightsTensorMap;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VpZ2h0c19sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL3dlaWdodHNfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUduQyxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUMsb0JBQW9CLEVBQTJELE1BQU0sU0FBUyxDQUFDO0FBRXZHOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxTQUFtQixFQUFFLFdBQXlCO0lBQzlDLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtRQUN2QixXQUFXLEdBQUcsRUFBRSxDQUFDO0tBQ2xCO0lBRUQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxXQUFXLENBQUMsU0FBUyxDQUFDO0lBRXhCLDBEQUEwRDtJQUMxRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUM1QixRQUFRLENBQUMsRUFBRSxDQUNULFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdEUsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxHQUFH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QyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUU1QyxNQUFNLGFBQWEsR0FBRyxJQUFJLG9CQUFvQixDQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFFcEUsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFOUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDcEMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FDcEMsWUFBWSxDQUFDLFdBQVcsRUFDeEIsWUFBWSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sZUFBZSxHQUNuQixhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELEtBQUssTUFBTSxJQUFJLElBQUksZUFBZSxFQUFFO29CQUNsQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2hEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxpQkFBaUIsSUFBSSxVQUFVLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52fSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wb3NpdGVBcnJheUJ1ZmZlcn0gZnJvbSAnLi9jb21wb3NpdGVfYXJyYXlfYnVmZmVyJztcbmltcG9ydCB7ZGVjb2RlV2VpZ2h0c30gZnJvbSAnLi9pb191dGlscyc7XG5pbXBvcnQge21vbml0b3JQcm9taXNlc1Byb2dyZXNzfSBmcm9tICcuL3Byb2dyZXNzJztcbmltcG9ydCB7RFRZUEVfVkFMVUVfU0laRV9NQVAsIExvYWRPcHRpb25zLCBXZWlnaHRzTWFuaWZlc3RDb25maWcsIFdlaWdodHNNYW5pZmVzdEVudHJ5fSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBSZWFkcyBiaW5hcnkgd2VpZ2h0cyBkYXRhIGZyb20gYSBudW1iZXIgb2YgVVJMcy5cbiAqXG4gKiBAcGFyYW0gZmV0Y2hVUkxzIFVSTHMgdG8gc2VuZCB0aGUgSFRUUCByZXF1ZXN0cyBhdCwgdXNpbmcgYGZldGNoYCBjYWxscy5cbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyBSZXF1ZXN0SW5pdCAob3B0aW9ucykgZm9yIHRoZSBIVFRQIHJlcXVlc3RzLlxuICogQHBhcmFtIGZldGNoRnVuYyBPcHRpb25hbCBvdmVycmlkaW5nIHZhbHVlIGZvciB0aGUgYHdpbmRvdy5mZXRjaGAgZnVuY3Rpb24uXG4gKiBAcGFyYW0gb25Qcm9ncmVzcyBPcHRpb25hbCwgcHJvZ3Jlc3MgY2FsbGJhY2sgZnVuY3Rpb24sIGZpcmVkIHBlcmlvZGljYWxseVxuICogICBiZWZvcmUgdGhlIGxvYWQgaXMgY29tcGxldGVkLlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgb2YgYW4gQXJyYXkgb2YgYEFycmF5QnVmZmVyYC4gVGhlIEFycmF5IGhhcyB0aGUgc2FtZVxuICogICBsZW5ndGggYXMgYGZldGNoVVJMc2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2VpZ2h0c0FzQXJyYXlCdWZmZXIoXG4gIGZldGNoVVJMczogc3RyaW5nW10sIGxvYWRPcHRpb25zPzogTG9hZE9wdGlvbnMpOiBQcm9taXNlPEFycmF5QnVmZmVyW10+IHtcbiAgaWYgKGxvYWRPcHRpb25zID09IG51bGwpIHtcbiAgICBsb2FkT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgZmV0Y2hGdW5jID0gbG9hZE9wdGlvbnMuZmV0Y2hGdW5jID09IG51bGwgPyBlbnYoKS5wbGF0Zm9ybS5mZXRjaCA6XG4gICAgbG9hZE9wdGlvbnMuZmV0Y2hGdW5jO1xuXG4gIC8vIENyZWF0ZSB0aGUgcmVxdWVzdHMgZm9yIGFsbCBvZiB0aGUgd2VpZ2h0cyBpbiBwYXJhbGxlbC5cbiAgY29uc3QgcmVxdWVzdHMgPSBmZXRjaFVSTHMubWFwKFxuICAgIGZldGNoVVJMID0+XG4gICAgICBmZXRjaEZ1bmMoZmV0Y2hVUkwsIGxvYWRPcHRpb25zLnJlcXVlc3RJbml0LCB7IGlzQmluYXJ5OiB0cnVlIH0pKTtcblxuICBjb25zdCBmZXRjaFN0YXJ0RnJhY3Rpb24gPSAwO1xuICBjb25zdCBmZXRjaEVuZEZyYWN0aW9uID0gMC41O1xuXG4gIGNvbnN0IHJlc3BvbnNlcyA9IGxvYWRPcHRpb25zLm9uUHJvZ3Jlc3MgPT0gbnVsbCA/XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocmVxdWVzdHMpIDpcbiAgICBhd2FpdCBtb25pdG9yUHJvbWlzZXNQcm9ncmVzcyhcbiAgICAgIHJlcXVlc3RzLCBsb2FkT3B0aW9ucy5vblByb2dyZXNzLCBmZXRjaFN0YXJ0RnJhY3Rpb24sXG4gICAgICBmZXRjaEVuZEZyYWN0aW9uKTtcblxuICBjb25zdCBidWZmZXJQcm9taXNlcyA9IHJlc3BvbnNlcy5tYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG5cbiAgY29uc3QgYnVmZmVyU3RhcnRGcmFjdGlvbiA9IDAuNTtcbiAgY29uc3QgYnVmZmVyRW5kRnJhY3Rpb24gPSAxO1xuXG4gIGNvbnN0IGJ1ZmZlcnMgPSBsb2FkT3B0aW9ucy5vblByb2dyZXNzID09IG51bGwgP1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGJ1ZmZlclByb21pc2VzKSA6XG4gICAgYXdhaXQgbW9uaXRvclByb21pc2VzUHJvZ3Jlc3MoXG4gICAgICBidWZmZXJQcm9taXNlcywgbG9hZE9wdGlvbnMub25Qcm9ncmVzcywgYnVmZmVyU3RhcnRGcmFjdGlvbixcbiAgICAgIGJ1ZmZlckVuZEZyYWN0aW9uKTtcbiAgcmV0dXJuIGJ1ZmZlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1XZWlnaHRzKGZldGNoVVJMczogc3RyaW5nW10sIGxvYWRPcHRpb25zOiBMb2FkT3B0aW9ucyk6IFJlYWRhYmxlU3RyZWFtPEFycmF5QnVmZmVyPiB7XG4gIGNvbnN0IGZldGNoRnVuYyA9IGxvYWRPcHRpb25zLmZldGNoRnVuYyA9PSBudWxsID8gZW52KCkucGxhdGZvcm0uZmV0Y2ggOlxuICAgIGxvYWRPcHRpb25zLmZldGNoRnVuYztcblxuICBsZXQgZmV0Y2hJbmRleCA9IDA7XG4gIGxldCBjaHVua1JlYWRlcjogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyPFVpbnQ4QXJyYXk+IHwgdW5kZWZpbmVkO1xuICBsb2FkT3B0aW9ucy5vblByb2dyZXNzPy4oMCk7XG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgIHB1bGw6IGFzeW5jIChjb250cm9sbGVyKSA9PiB7XG4gICAgICB3aGlsZSAoZmV0Y2hJbmRleCA8IGZldGNoVVJMcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFjaHVua1JlYWRlcikge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgZmV0Y2hGdW5jKGZldGNoVVJMc1tmZXRjaEluZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnMucmVxdWVzdEluaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc0JpbmFyeTogdHJ1ZX0pKS5ib2R5O1xuXG4gICAgICAgICAgY2h1bmtSZWFkZXIgPSBib2R5LmdldFJlYWRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGNodW5rUmVhZGVyLnJlYWQoKTtcblxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIGZldGNoSW5kZXgrKztcbiAgICAgICAgICBjaHVua1JlYWRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBsb2FkT3B0aW9ucy5vblByb2dyZXNzPy4oZmV0Y2hJbmRleCAvIGZldGNoVVJMcy5sZW5ndGgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkcyBhIHdlaWdodHMgbWFuaWZlc3QgSlNPTiBjb25maWd1cmF0aW9uLCBmZXRjaGVzIHRoZSB3ZWlnaHRzIGFuZFxuICogcmV0dXJucyB0aGVtIGFzIGBUZW5zb3Jgcy5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3QgVGhlIHdlaWdodHMgbWFuaWZlc3QgSlNPTi5cbiAqIEBwYXJhbSBmaWxlUGF0aFByZWZpeCBUaGUgcGF0aCBwcmVmaXggZm9yIGZpbGVuYW1lcyBnaXZlbiBpbiB0aGUgbWFuaWZlc3QuXG4gKiAgICAgRGVmYXVsdHMgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAqIEBwYXJhbSB3ZWlnaHROYW1lcyBUaGUgbmFtZXMgb2YgdGhlIHdlaWdodHMgdG8gYmUgZmV0Y2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXZWlnaHRzKFxuICBtYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnLCBmaWxlUGF0aFByZWZpeCA9ICcnLFxuICB3ZWlnaHROYW1lcz86IHN0cmluZ1tdLFxuICByZXF1ZXN0SW5pdD86IFJlcXVlc3RJbml0KTogUHJvbWlzZTxOYW1lZFRlbnNvck1hcD4ge1xuICAvLyBUT0RPKG5zdGhvcmF0KTogR3JvdXBzIGFyZSBjdXJyZW50bHkgZmV0Y2hlZCBhdG9taWNhbGx5LiBJZiB5b3UgbmVlZCBhXG4gIC8vIHNpbmdsZSB3ZWlnaHQgZnJvbSBhIGdyb3VwLCB0aGUgd2hvbGUgZ3JvdXAgd2lsbCBiZSBmZXRjaGVkLiBBdCBhIGZ1dHVyZVxuICAvLyBkYXRlLCB3ZSBzaG91bGQgc3VwcG9ydCBmZXRjaGluZyBvbmx5IHRoZSBpbmRpdmlkdWFsIHNoYXJkcyB3aXRoaW4gYVxuICAvLyBncm91cCB0aGF0IGFyZSBuZWVkZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3RlZCB3ZWlnaHQuXG4gIC8vIFRPRE8oY2Fpcyk6IFVzZSBgZGVjb2RlV2VpZ2h0c2AgZm9yIGltcGxlbWVudGF0aW9uLlxuXG4gIGNvbnN0IGZldGNoV2VpZ2h0cyA9IChmZXRjaFVybHM6IHN0cmluZ1tdKSA9PlxuICAgIGxvYWRXZWlnaHRzQXNBcnJheUJ1ZmZlcihmZXRjaFVybHMsIHsgcmVxdWVzdEluaXQgfSk7XG4gIGNvbnN0IGxvYWRXZWlnaHRzID0gd2VpZ2h0c0xvYWRlckZhY3RvcnkoZmV0Y2hXZWlnaHRzKTtcblxuICByZXR1cm4gbG9hZFdlaWdodHMobWFuaWZlc3QsIGZpbGVQYXRoUHJlZml4LCB3ZWlnaHROYW1lcyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uLCB3aGljaCByZWFkcyBhIHdlaWdodHMgbWFuaWZlc3QgSlNPTiBjb25maWd1cmF0aW9uLFxuICogZmV0Y2hlcyB0aGUgd2VpZ2h0IGZpbGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlbSBhc1xuICogYFRlbnNvcmBzLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBleGFtcGxlIGZvciBjcmVhdGluZyBhIG5vZGVqcyB3ZWlnaHQgbG9hZGVyLCB3aGljaCByZWFkcyB0aGUgd2VpZ2h0IGZpbGVzXG4gKiAvLyBmcm9tIGRpc2sgdXNpbmcgZnMucmVhZEZpbGVTeW5jXG4gKlxuICogaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG4gKlxuICogY29uc3QgZmV0Y2hXZWlnaHRzRnJvbURpc2sgPSAoZmlsZVBhdGhzOiBzdHJpbmdbXSkgPT5cbiAqICAgZmlsZVBhdGhzLm1hcChmaWxlUGF0aCA9PiBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgpLmJ1ZmZlcilcbiAqXG4gKiBjb25zdCBsb2FkV2VpZ2h0cyA9IHRmLmlvLndlaWdodHNMb2FkZXJGYWN0b3J5KGZldGNoV2VpZ2h0c0Zyb21EaXNrKVxuICpcbiAqIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5wYXJzZShcbiAqICAgZnMucmVhZEZpbGVTeW5jKCcuL215X21vZGVsLXdlaWdodHNfbWFuaWZlc3QnKS50b1N0cmluZygpXG4gKiApXG4gKiBjb25zdCB3ZWlnaHRNYXAgPSBhd2FpdCBsb2FkV2VpZ2h0cyhtYW5pZmVzdCwgJy4vJylcbiAqIGBgYFxuICogQHBhcmFtIGZldGNoV2VpZ2h0c0Z1bmN0aW9uIFRoZSBmdW5jdGlvbiB1c2VkIGZvciBmZXRjaGluZyB0aGUgd2VpZ2h0IGZpbGVzLlxuICogQHJldHVybnMgV2VpZ2h0IGxvYWRpbmcgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3ZWlnaHRzTG9hZGVyRmFjdG9yeShcbiAgZmV0Y2hXZWlnaHRzRnVuY3Rpb246IChmZXRjaFVybHM6IHN0cmluZ1tdKSA9PiBQcm9taXNlPEFycmF5QnVmZmVyW10+KTpcbiAgKG1hbmlmZXN0OiBXZWlnaHRzTWFuaWZlc3RDb25maWcsIGZpbGVQYXRoUHJlZml4Pzogc3RyaW5nLFxuICAgIHdlaWdodE5hbWVzPzogc3RyaW5nW10pID0+IFByb21pc2U8TmFtZWRUZW5zb3JNYXA+IHtcbiAgcmV0dXJuIGFzeW5jIChcbiAgICBtYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnLCBmaWxlUGF0aFByZWZpeCA9ICcnLFxuICAgIHdlaWdodE5hbWVzPzogc3RyaW5nW10pOiBQcm9taXNlPE5hbWVkVGVuc29yTWFwPiA9PiB7XG4gICAgLy8gQ29sbGVjdCBhbGwgdGhlIGdyb3Vwcywgd2VpZ2h0cywgYW5kIHRoZWlyIHJlbGF0aXZlIG9mZnNldHMgdG8gYmVcbiAgICAvLyBmZXRjaGVkLlxuICAgIGNvbnN0IGdyb3VwSW5kaWNlc1RvRmV0Y2hNYXAgPSBtYW5pZmVzdC5tYXAoKCkgPT4gZmFsc2UpO1xuICAgIGNvbnN0IGdyb3VwV2VpZ2h0c1RvRmV0Y2g6IHtcbiAgICAgIFtncm91cDogbnVtYmVyXTogQXJyYXk8e1xuICAgICAgICBtYW5pZmVzdEVudHJ5OiBXZWlnaHRzTWFuaWZlc3RFbnRyeTsgZ3JvdXBPZmZzZXQ6IG51bWJlcjtcbiAgICAgICAgc2l6ZUJ5dGVzOiBudW1iZXI7XG4gICAgICB9PlxuICAgIH0gPSB7fTtcbiAgICBjb25zdCB3ZWlnaHRzRm91bmQgPVxuICAgICAgd2VpZ2h0TmFtZXMgIT0gbnVsbCA/IHdlaWdodE5hbWVzLm1hcCgoKSA9PiBmYWxzZSkgOiBbXTtcbiAgICBjb25zdCBhbGxNYW5pZmVzdFdlaWdodE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIG1hbmlmZXN0LmZvckVhY2goKG1hbmlmZXN0R3JvdXBDb25maWcsIGdyb3VwSW5kZXgpID0+IHtcbiAgICAgIGxldCBncm91cE9mZnNldCA9IDA7XG4gICAgICBtYW5pZmVzdEdyb3VwQ29uZmlnLndlaWdodHMuZm9yRWFjaCh3ZWlnaHRzRW50cnkgPT4ge1xuICAgICAgICBjb25zdCByYXdEdHlwZSA9ICgncXVhbnRpemF0aW9uJyBpbiB3ZWlnaHRzRW50cnkpID9cbiAgICAgICAgICB3ZWlnaHRzRW50cnkucXVhbnRpemF0aW9uLmR0eXBlIDpcbiAgICAgICAgICB3ZWlnaHRzRW50cnkuZHR5cGU7XG5cbiAgICAgICAgY29uc3Qgd2VpZ2h0c0J5dGVzID0gRFRZUEVfVkFMVUVfU0laRV9NQVBbcmF3RHR5cGVdICpcbiAgICAgICAgICB1dGlsLnNpemVGcm9tU2hhcGUod2VpZ2h0c0VudHJ5LnNoYXBlKTtcblxuICAgICAgICBjb25zdCBlbnF1ZXVlV2VpZ2h0c0ZvckZldGNoaW5nRm4gPSAoKSA9PiB7XG4gICAgICAgICAgZ3JvdXBJbmRpY2VzVG9GZXRjaE1hcFtncm91cEluZGV4XSA9IHRydWU7XG4gICAgICAgICAgaWYgKGdyb3VwV2VpZ2h0c1RvRmV0Y2hbZ3JvdXBJbmRleF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZ3JvdXBXZWlnaHRzVG9GZXRjaFtncm91cEluZGV4XSA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdyb3VwV2VpZ2h0c1RvRmV0Y2hbZ3JvdXBJbmRleF0ucHVzaCh7XG4gICAgICAgICAgICBtYW5pZmVzdEVudHJ5OiB3ZWlnaHRzRW50cnksXG4gICAgICAgICAgICBncm91cE9mZnNldCxcbiAgICAgICAgICAgIHNpemVCeXRlczogd2VpZ2h0c0J5dGVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHdlaWdodE5hbWVzICE9IG51bGwpIHtcbiAgICAgICAgICB3ZWlnaHROYW1lcy5mb3JFYWNoKCh3ZWlnaHROYW1lLCB3ZWlnaHRJbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHdlaWdodE5hbWUgPT09IHdlaWdodHNFbnRyeS5uYW1lKSB7XG4gICAgICAgICAgICAgIGVucXVldWVXZWlnaHRzRm9yRmV0Y2hpbmdGbigpO1xuICAgICAgICAgICAgICB3ZWlnaHRzRm91bmRbd2VpZ2h0SW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnF1ZXVlV2VpZ2h0c0ZvckZldGNoaW5nRm4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFsbE1hbmlmZXN0V2VpZ2h0TmFtZXMucHVzaCh3ZWlnaHRzRW50cnkubmFtZSk7XG4gICAgICAgIGdyb3VwT2Zmc2V0ICs9IHdlaWdodHNCeXRlcztcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCF3ZWlnaHRzRm91bmQuZXZlcnkoZm91bmQgPT4gZm91bmQpKSB7XG4gICAgICBjb25zdCB3ZWlnaHRzTm90Rm91bmQgPSB3ZWlnaHROYW1lcy5maWx0ZXIoKF8sIGkpID0+ICF3ZWlnaHRzRm91bmRbaV0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgd2VpZ2h0cyBpbiBtYW5pZmVzdCB3aXRoIG5hbWVzOiBgICtcbiAgICAgICAgYCR7d2VpZ2h0c05vdEZvdW5kLmpvaW4oJywgJyl9LiBcXG5gICtcbiAgICAgICAgYE1hbmlmZXN0IEpTT04gaGFzIHdlaWdodHMgd2l0aCBuYW1lczogYCArXG4gICAgICAgIGAke2FsbE1hbmlmZXN0V2VpZ2h0TmFtZXMuam9pbignLCAnKX0uYCk7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCB0aGUgb25lLWhvdCBib29sZWFuIGdyb3VwSWQgPT4gc2hvdWxkRmV0Y2ggbWFwIHRvIGEgbGlzdCBvZiBncm91cFxuICAgIC8vIElEcy5cbiAgICBjb25zdCBncm91cEluZGljZXNUb0ZldGNoID1cbiAgICAgIGdyb3VwSW5kaWNlc1RvRmV0Y2hNYXAucmVkdWNlKChhY2N1bXVsYXRvciwgc2hvdWxkRmV0Y2gsIGkpID0+IHtcbiAgICAgICAgaWYgKHNob3VsZEZldGNoKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBmZXRjaFVybHM6IHN0cmluZ1tdID0gW107XG4gICAgZ3JvdXBJbmRpY2VzVG9GZXRjaC5mb3JFYWNoKGkgPT4ge1xuICAgICAgbWFuaWZlc3RbaV0ucGF0aHMuZm9yRWFjaChmaWxlcGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IGZldGNoVXJsID0gZmlsZVBhdGhQcmVmaXggK1xuICAgICAgICAgICghZmlsZVBhdGhQcmVmaXguZW5kc1dpdGgoJy8nKSA/ICcvJyA6ICcnKSArIGZpbGVwYXRoO1xuICAgICAgICBmZXRjaFVybHMucHVzaChmZXRjaFVybCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBidWZmZXJzID0gYXdhaXQgZmV0Y2hXZWlnaHRzRnVuY3Rpb24oZmV0Y2hVcmxzKTtcblxuICAgIGNvbnN0IHdlaWdodHNUZW5zb3JNYXA6IE5hbWVkVGVuc29yTWFwID0ge307XG4gICAgbGV0IGJ1ZmZlckluZGV4T2Zmc2V0ID0gMDtcbiAgICBncm91cEluZGljZXNUb0ZldGNoLmZvckVhY2goaSA9PiB7XG4gICAgICBjb25zdCBudW1CdWZmZXJzID0gbWFuaWZlc3RbaV0ucGF0aHMubGVuZ3RoO1xuXG4gICAgICBjb25zdCB3ZWlnaHRzQnVmZmVyID0gbmV3IENvbXBvc2l0ZUFycmF5QnVmZmVyKFxuICAgICAgICBidWZmZXJzLnNsaWNlKGJ1ZmZlckluZGV4T2Zmc2V0LCBidWZmZXJJbmRleE9mZnNldCArIG51bUJ1ZmZlcnMpKTtcblxuICAgICAgY29uc3Qgd2VpZ2h0c0VudHJpZXMgPSBncm91cFdlaWdodHNUb0ZldGNoW2ldO1xuXG4gICAgICB3ZWlnaHRzRW50cmllcy5mb3JFYWNoKHdlaWdodHNFbnRyeSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVCdWZmZXIgPSB3ZWlnaHRzQnVmZmVyLnNsaWNlKFxuICAgICAgICAgIHdlaWdodHNFbnRyeS5ncm91cE9mZnNldCxcbiAgICAgICAgICB3ZWlnaHRzRW50cnkuZ3JvdXBPZmZzZXQgKyB3ZWlnaHRzRW50cnkuc2l6ZUJ5dGVzKTtcbiAgICAgICAgY29uc3QgbmFtZVRvVGVuc29yTWFwID1cbiAgICAgICAgICBkZWNvZGVXZWlnaHRzKGJ5dGVCdWZmZXIsIFt3ZWlnaHRzRW50cnkubWFuaWZlc3RFbnRyeV0pO1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gbmFtZVRvVGVuc29yTWFwKSB7XG4gICAgICAgICAgd2VpZ2h0c1RlbnNvck1hcFtuYW1lXSA9IG5hbWVUb1RlbnNvck1hcFtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGJ1ZmZlckluZGV4T2Zmc2V0ICs9IG51bUJ1ZmZlcnM7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gd2VpZ2h0c1RlbnNvck1hcDtcbiAgfTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * IOHandler implementations based on HTTP requests in the web browser.\n *\n * Uses [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n */\nimport { env } from '../environment';\nimport { assert } from '../util';\nimport { getModelArtifactsForJSON, getModelArtifactsInfoForJSON, getModelJSONForModelArtifacts, getWeightSpecs } from './io_utils';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nimport { IORouterRegistry } from './router_registry';\nimport { loadWeightsAsArrayBuffer, streamWeights } from './weights_loader';\nconst OCTET_STREAM_MIME_TYPE = 'application/octet-stream';\nconst JSON_TYPE = 'application/json';\nclass HTTPRequest {\n constructor(path, loadOptions) {\n this.DEFAULT_METHOD = 'POST';\n if (loadOptions == null) {\n loadOptions = {};\n }\n this.weightPathPrefix = loadOptions.weightPathPrefix;\n this.weightUrlConverter = loadOptions.weightUrlConverter;\n if (loadOptions.fetchFunc != null) {\n assert(typeof loadOptions.fetchFunc === 'function', () => 'Must pass a function that matches the signature of ' +\n '`fetch` (see ' +\n 'https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)');\n this.fetch = loadOptions.fetchFunc;\n }\n else {\n this.fetch = env().platform.fetch;\n }\n assert(path != null && path.length > 0, () => 'URL path for http must not be null, undefined or ' +\n 'empty.');\n if (Array.isArray(path)) {\n assert(path.length === 2, () => 'URL paths for http must have a length of 2, ' +\n `(actual length is ${path.length}).`);\n }\n this.path = path;\n if (loadOptions.requestInit != null &&\n loadOptions.requestInit.body != null) {\n throw new Error('requestInit is expected to have no pre-existing body, but has one.');\n }\n this.requestInit = loadOptions.requestInit || {};\n this.loadOptions = loadOptions;\n }\n async save(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserHTTPRequest.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n const init = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit);\n init.body = new FormData();\n const weightsManifest = [{\n paths: ['./model.weights.bin'],\n weights: modelArtifacts.weightSpecs,\n }];\n const modelTopologyAndWeightManifest = getModelJSONForModelArtifacts(modelArtifacts, weightsManifest);\n init.body.append('model.json', new Blob([JSON.stringify(modelTopologyAndWeightManifest)], { type: JSON_TYPE }), 'model.json');\n if (modelArtifacts.weightData != null) {\n // TODO(mattsoulanille): Support saving models over 2GB that exceed\n // Chrome's ArrayBuffer size limit.\n const weightBuffer = CompositeArrayBuffer.join(modelArtifacts.weightData);\n init.body.append('model.weights.bin', new Blob([weightBuffer], { type: OCTET_STREAM_MIME_TYPE }), 'model.weights.bin');\n }\n const response = await this.fetch(this.path, init);\n if (response.ok) {\n return {\n modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts),\n responses: [response],\n };\n }\n else {\n throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ` +\n `${response.status}.`);\n }\n }\n async loadModelJSON() {\n const modelConfigRequest = await this.fetch(this.path, this.requestInit);\n if (!modelConfigRequest.ok) {\n throw new Error(`Request to ${this.path} failed with status code ` +\n `${modelConfigRequest.status}. Please verify this URL points to ` +\n `the model JSON of the model to load.`);\n }\n let modelJSON;\n try {\n modelJSON = await modelConfigRequest.json();\n }\n catch (e) {\n let message = `Failed to parse model JSON of response from ${this.path}.`;\n // TODO(nsthorat): Remove this after some time when we're comfortable that\n // .pb files are mostly gone.\n if (this.path.endsWith('.pb')) {\n message += ' Your path contains a .pb file extension. ' +\n 'Support for .pb models have been removed in TensorFlow.js 1.0 ' +\n 'in favor of .json models. You can re-convert your Python ' +\n 'TensorFlow model using the TensorFlow.js 1.0 conversion scripts ' +\n 'or you can convert your.pb models with the \\'pb2json\\'' +\n 'NPM script in the tensorflow/tfjs-converter repository.';\n }\n else {\n message += ' Please make sure the server is serving valid ' +\n 'JSON for this request.';\n }\n throw new Error(message);\n }\n // We do not allow both modelTopology and weightsManifest to be missing.\n const modelTopology = modelJSON.modelTopology;\n const weightsManifest = modelJSON.weightsManifest;\n if (modelTopology == null && weightsManifest == null) {\n throw new Error(`The JSON from HTTP path ${this.path} contains neither model ` +\n `topology or manifest for weights.`);\n }\n return modelJSON;\n }\n /**\n * Load model artifacts via HTTP request(s).\n *\n * See the documentation to `tf.io.http` for details on the saved\n * artifacts.\n *\n * @returns The loaded model artifacts (if loading succeeds).\n */\n async load() {\n if (this.loadOptions.streamWeights) {\n return this.loadStream();\n }\n const modelJSON = await this.loadModelJSON();\n return getModelArtifactsForJSON(modelJSON, (weightsManifest) => this.loadWeights(weightsManifest));\n }\n async loadStream() {\n const modelJSON = await this.loadModelJSON();\n const fetchURLs = await this.getWeightUrls(modelJSON.weightsManifest);\n const weightSpecs = getWeightSpecs(modelJSON.weightsManifest);\n const stream = () => streamWeights(fetchURLs, this.loadOptions);\n return Object.assign(Object.assign({}, modelJSON), { weightSpecs, getWeightStream: stream });\n }\n async getWeightUrls(weightsManifest) {\n const weightPath = Array.isArray(this.path) ? this.path[1] : this.path;\n const [prefix, suffix] = parseUrl(weightPath);\n const pathPrefix = this.weightPathPrefix || prefix;\n const fetchURLs = [];\n const urlPromises = [];\n for (const weightsGroup of weightsManifest) {\n for (const path of weightsGroup.paths) {\n if (this.weightUrlConverter != null) {\n urlPromises.push(this.weightUrlConverter(path));\n }\n else {\n fetchURLs.push(pathPrefix + path + suffix);\n }\n }\n }\n if (this.weightUrlConverter) {\n fetchURLs.push(...await Promise.all(urlPromises));\n }\n return fetchURLs;\n }\n async loadWeights(weightsManifest) {\n const fetchURLs = await this.getWeightUrls(weightsManifest);\n const weightSpecs = getWeightSpecs(weightsManifest);\n const buffers = await loadWeightsAsArrayBuffer(fetchURLs, this.loadOptions);\n return [weightSpecs, buffers];\n }\n}\nHTTPRequest.URL_SCHEME_REGEX = /^https?:\\/\\//;\nexport { HTTPRequest };\n/**\n * Extract the prefix and suffix of the url, where the prefix is the path before\n * the last file, and suffix is the search params after the last file.\n * ```\n * const url = 'http://tfhub.dev/model/1/tensorflowjs_model.pb?tfjs-format=file'\n * [prefix, suffix] = parseUrl(url)\n * // prefix = 'http://tfhub.dev/model/1/'\n * // suffix = '?tfjs-format=file'\n * ```\n * @param url the model url to be parsed.\n */\nexport function parseUrl(url) {\n const lastSlash = url.lastIndexOf('/');\n const lastSearchParam = url.lastIndexOf('?');\n const prefix = url.substring(0, lastSlash);\n const suffix = lastSearchParam > lastSlash ? url.substring(lastSearchParam) : '';\n return [prefix + '/', suffix];\n}\nexport function isHTTPScheme(url) {\n return url.match(HTTPRequest.URL_SCHEME_REGEX) != null;\n}\nexport const httpRouter = (url, loadOptions) => {\n if (typeof fetch === 'undefined' &&\n (loadOptions == null || loadOptions.fetchFunc == null)) {\n // `http` uses `fetch` or `node-fetch`, if one wants to use it in\n // an environment that is not the browser or node they have to setup a\n // global fetch polyfill.\n return null;\n }\n else {\n let isHTTP = true;\n if (Array.isArray(url)) {\n isHTTP = url.every(urlItem => isHTTPScheme(urlItem));\n }\n else {\n isHTTP = isHTTPScheme(url);\n }\n if (isHTTP) {\n return http(url, loadOptions);\n }\n }\n return null;\n};\nIORouterRegistry.registerSaveRouter(httpRouter);\nIORouterRegistry.registerLoadRouter(httpRouter);\n/**\n * Creates an IOHandler subtype that sends model artifacts to HTTP server.\n *\n * An HTTP request of the `multipart/form-data` mime type will be sent to the\n * `path` URL. The form data includes artifacts that represent the topology\n * and/or weights of the model. In the case of Keras-style `tf.Model`, two\n * blobs (files) exist in form-data:\n * - A JSON file consisting of `modelTopology` and `weightsManifest`.\n * - A binary weights file consisting of the concatenated weight values.\n * These files are in the same format as the one generated by\n * [tfjs_converter](https://js.tensorflow.org/tutorials/import-keras.html).\n *\n * The following code snippet exemplifies the client-side code that uses this\n * function:\n *\n * ```js\n * const model = tf.sequential();\n * model.add(\n * tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'}));\n *\n * const saveResult = await model.save(tf.io.http(\n * 'http://model-server:5000/upload', {requestInit: {method: 'PUT'}}));\n * console.log(saveResult);\n * ```\n *\n * If the default `POST` method is to be used, without any custom parameters\n * such as headers, you can simply pass an HTTP or HTTPS URL to `model.save`:\n *\n * ```js\n * const saveResult = await model.save('http://model-server:5000/upload');\n * ```\n *\n * The following GitHub Gist\n * https://gist.github.com/dsmilkov/1b6046fd6132d7408d5257b0976f7864\n * implements a server based on [flask](https://github.com/pallets/flask) that\n * can receive the request. Upon receiving the model artifacts via the requst,\n * this particular server reconstitutes instances of [Keras\n * Models](https://keras.io/models/model/) in memory.\n *\n *\n * @param path A URL path to the model.\n * Can be an absolute HTTP path (e.g.,\n * 'http://localhost:8000/model-upload)') or a relative path (e.g.,\n * './model-upload').\n * @param requestInit Request configurations to be used when sending\n * HTTP request to server using `fetch`. It can contain fields such as\n * `method`, `credentials`, `headers`, `mode`, etc. See\n * https://developer.mozilla.org/en-US/docs/Web/API/Request/Request\n * for more information. `requestInit` must not have a body, because the\n * body will be set by TensorFlow.js. File blobs representing the model\n * topology (filename: 'model.json') and the weights of the model (filename:\n * 'model.weights.bin') will be appended to the body. If `requestInit` has a\n * `body`, an Error will be thrown.\n * @param loadOptions Optional configuration for the loading. It includes the\n * following fields:\n * - weightPathPrefix Optional, this specifies the path prefix for weight\n * files, by default this is calculated from the path param.\n * - fetchFunc Optional, custom `fetch` function. E.g., in Node.js,\n * the `fetch` from node-fetch can be used here.\n * - onProgress Optional, progress callback function, fired periodically\n * before the load is completed.\n * @returns An instance of `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function http(path, loadOptions) {\n return new HTTPRequest(path, loadOptions);\n}\n/**\n * Deprecated. Use `tf.io.http`.\n * @param path\n * @param loadOptions\n */\nexport function browserHTTPRequest(path, loadOptions) {\n return http(path, loadOptions);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vaHR0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDL0IsT0FBTyxFQUFDLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLGNBQWMsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNqSSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQVcsZ0JBQWdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFekUsTUFBTSxzQkFBc0IsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztBQUNyQyxNQUFhLFdBQVc7SUFjdEIsWUFBWSxJQUFZLEVBQUUsV0FBeUI7UUFQMUMsbUJBQWMsR0FBRyxNQUFNLENBQUM7UUFRL0IsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3ZCLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDbEI7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDO1FBQ3JELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFFekQsSUFBSSxXQUFXLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUNqQyxNQUFNLENBQ0YsT0FBTyxXQUFXLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFDM0MsR0FBRyxFQUFFLENBQUMscURBQXFEO2dCQUN2RCxlQUFlO2dCQUNm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QUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNMLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUMvQjtLQUNGO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDTixnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRCxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUVoRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUVHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFZLEVBQUUsV0FBeUI7SUFDMUQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQzlCLElBQVksRUFBRSxXQUF5QjtJQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBJT0hhbmRsZXIgaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIEhUVFAgcmVxdWVzdHMgaW4gdGhlIHdlYiBicm93c2VyLlxuICpcbiAqIFVzZXMgW2BmZXRjaGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkpLlxuICovXG5cbmltcG9ydCB7ZW52fSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7Z2V0TW9kZWxBcnRpZmFjdHNGb3JKU09OLCBnZXRNb2RlbEFydGlmYWN0c0luZm9Gb3JKU09OLCBnZXRNb2RlbEpTT05Gb3JNb2RlbEFydGlmYWN0cywgZ2V0V2VpZ2h0U3BlY3N9IGZyb20gJy4vaW9fdXRpbHMnO1xuaW1wb3J0IHtDb21wb3NpdGVBcnJheUJ1ZmZlcn0gZnJvbSAnLi9jb21wb3NpdGVfYXJyYXlfYnVmZmVyJztcbmltcG9ydCB7SU9Sb3V0ZXIsIElPUm91dGVyUmVnaXN0cnl9IGZyb20gJy4vcm91dGVyX3JlZ2lzdHJ5JztcbmltcG9ydCB7SU9IYW5kbGVyLCBMb2FkT3B0aW9ucywgTW9kZWxBcnRpZmFjdHMsIE1vZGVsSlNPTiwgU2F2ZVJlc3VsdCwgV2VpZ2h0RGF0YSwgV2VpZ2h0c01hbmlmZXN0Q29uZmlnLCBXZWlnaHRzTWFuaWZlc3RFbnRyeX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2xvYWRXZWlnaHRzQXNBcnJheUJ1ZmZlciwgc3RyZWFtV2VpZ2h0c30gZnJvbSAnLi93ZWlnaHRzX2xvYWRlcic7XG5cbmNvbnN0IE9DVEVUX1NUUkVBTV9NSU1FX1RZUEUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcbmNvbnN0IEpTT05fVFlQRSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbmV4cG9ydCBjbGFzcyBIVFRQUmVxdWVzdCBpbXBsZW1lbnRzIElPSGFuZGxlciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSByZXF1ZXN0SW5pdDogUmVxdWVzdEluaXQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBmZXRjaDogdHlwZW9mIGZldGNoO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodFVybENvbnZlcnRlcjogKHdlaWdodE5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4gIHJlYWRvbmx5IERFRkFVTFRfTUVUSE9EID0gJ1BPU1QnO1xuXG4gIHN0YXRpYyByZWFkb25seSBVUkxfU0NIRU1FX1JFR0VYID0gL15odHRwcz86XFwvXFwvLztcblxuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodFBhdGhQcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkT3B0aW9uczogTG9hZE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IocGF0aDogc3RyaW5nLCBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKSB7XG4gICAgaWYgKGxvYWRPcHRpb25zID09IG51bGwpIHtcbiAgICAgIGxvYWRPcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMud2VpZ2h0UGF0aFByZWZpeCA9IGxvYWRPcHRpb25zLndlaWdodFBhdGhQcmVmaXg7XG4gICAgdGhpcy53ZWlnaHRVcmxDb252ZXJ0ZXIgPSBsb2FkT3B0aW9ucy53ZWlnaHRVcmxDb252ZXJ0ZXI7XG5cbiAgICBpZiAobG9hZE9wdGlvbnMuZmV0Y2hGdW5jICE9IG51bGwpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgICB0eXBlb2YgbG9hZE9wdGlvbnMuZmV0Y2hGdW5jID09PSAnZnVuY3Rpb24nLFxuICAgICAgICAgICgpID0+ICdNdXN0IHBhc3MgYSBmdW5jdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHNpZ25hdHVyZSBvZiAnICtcbiAgICAgICAgICAgICAgJ2BmZXRjaGAgKHNlZSAnICtcbiAgICAgICAgICAgICAgJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkpJyk7XG4gICAgICB0aGlzLmZldGNoID0gbG9hZE9wdGlvbnMuZmV0Y2hGdW5jO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZldGNoID0gZW52KCkucGxhdGZvcm0uZmV0Y2g7XG4gICAgfVxuXG4gICAgYXNzZXJ0KFxuICAgICAgICBwYXRoICE9IG51bGwgJiYgcGF0aC5sZW5ndGggPiAwLFxuICAgICAgICAoKSA9PiAnVVJMIHBhdGggZm9yIGh0dHAgbXVzdCBub3QgYmUgbnVsbCwgdW5kZWZpbmVkIG9yICcgK1xuICAgICAgICAgICAgJ2VtcHR5LicpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgICBwYXRoLmxlbmd0aCA9PT0gMixcbiAgICAgICAgICAoKSA9PiAnVVJMIHBhdGhzIGZvciBodHRwIG11c3QgaGF2ZSBhIGxlbmd0aCBvZiAyLCAnICtcbiAgICAgICAgICAgICAgYChhY3R1YWwgbGVuZ3RoIGlzICR7cGF0aC5sZW5ndGh9KS5gKTtcbiAgICB9XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcblxuICAgIGlmIChsb2FkT3B0aW9ucy5yZXF1ZXN0SW5pdCAhPSBudWxsICYmXG4gICAgICAgIGxvYWRPcHRpb25zLnJlcXVlc3RJbml0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdyZXF1ZXN0SW5pdCBpcyBleHBlY3RlZCB0byBoYXZlIG5vIHByZS1leGlzdGluZyBib2R5LCBidXQgaGFzIG9uZS4nKTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0SW5pdCA9IGxvYWRPcHRpb25zLnJlcXVlc3RJbml0IHx8IHt9O1xuICAgIHRoaXMubG9hZE9wdGlvbnMgPSBsb2FkT3B0aW9ucztcbiAgfVxuXG4gIGFzeW5jIHNhdmUobW9kZWxBcnRpZmFjdHM6IE1vZGVsQXJ0aWZhY3RzKTogUHJvbWlzZTxTYXZlUmVzdWx0PiB7XG4gICAgaWYgKG1vZGVsQXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3kgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdCcm93c2VySFRUUFJlcXVlc3Quc2F2ZSgpIGRvZXMgbm90IHN1cHBvcnQgc2F2aW5nIG1vZGVsIHRvcG9sb2d5ICcgK1xuICAgICAgICAgICdpbiBiaW5hcnkgZm9ybWF0cyB5ZXQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdCA9IE9iamVjdC5hc3NpZ24oe21ldGhvZDogdGhpcy5ERUZBVUxUX01FVEhPRH0sIHRoaXMucmVxdWVzdEluaXQpO1xuICAgIGluaXQuYm9keSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgY29uc3Qgd2VpZ2h0c01hbmlmZXN0OiBXZWlnaHRzTWFuaWZlc3RDb25maWcgPSBbe1xuICAgICAgcGF0aHM6IFsnLi9tb2RlbC53ZWlnaHRzLmJpbiddLFxuICAgICAgd2VpZ2h0czogbW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3MsXG4gICAgfV07XG4gICAgY29uc3QgbW9kZWxUb3BvbG9neUFuZFdlaWdodE1hbmlmZXN0OiBNb2RlbEpTT04gPVxuICAgICAgICBnZXRNb2RlbEpTT05Gb3JNb2RlbEFydGlmYWN0cyhtb2RlbEFydGlmYWN0cywgd2VpZ2h0c01hbmlmZXN0KTtcblxuICAgIGluaXQuYm9keS5hcHBlbmQoXG4gICAgICAgICdtb2RlbC5qc29uJyxcbiAgICAgICAgbmV3IEJsb2IoXG4gICAgICAgICAgICBbSlNPTi5zdHJpbmdpZnkobW9kZWxUb3BvbG9neUFuZFdlaWdodE1hbmlmZXN0KV0sXG4gICAgICAgICAgICB7dHlwZTogSlNPTl9UWVBFfSksXG4gICAgICAgICdtb2RlbC5qc29uJyk7XG5cbiAgICBpZiAobW9kZWxBcnRpZmFjdHMud2VpZ2h0RGF0YSAhPSBudWxsKSB7XG4gICAgICAvLyBUT0RPKG1hdHRzb3VsYW5pbGxlKTogU3VwcG9ydCBzYXZpbmcgbW9kZWxzIG92ZXIgMkdCIHRoYXQgZXhjZWVkXG4gICAgICAvLyBDaHJvbWUncyBBcnJheUJ1ZmZlciBzaXplIGxpbWl0LlxuICAgICAgY29uc3Qgd2VpZ2h0QnVmZmVyID0gQ29tcG9zaXRlQXJyYXlCdWZmZXIuam9pbihtb2RlbEFydGlmYWN0cy53ZWlnaHREYXRhKTtcblxuICAgICAgaW5pdC5ib2R5LmFwcGVuZChcbiAgICAgICAgICAnbW9kZWwud2VpZ2h0cy5iaW4nLFxuICAgICAgICAgIG5ldyBCbG9iKFt3ZWlnaHRCdWZmZXJdLCB7dHlwZTogT0NURVRfU1RSRUFNX01JTUVfVFlQRX0pLFxuICAgICAgICAgICdtb2RlbC53ZWlnaHRzLmJpbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh0aGlzLnBhdGgsIGluaXQpO1xuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlbEFydGlmYWN0c0luZm86IGdldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT04obW9kZWxBcnRpZmFjdHMpLFxuICAgICAgICByZXNwb25zZXM6IFtyZXNwb25zZV0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEJyb3dzZXJIVFRQUmVxdWVzdC5zYXZlKCkgZmFpbGVkIGR1ZSB0byBIVFRQIHJlc3BvbnNlIHN0YXR1cyBgICtcbiAgICAgICAgICBgJHtyZXNwb25zZS5zdGF0dXN9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZE1vZGVsSlNPTigpOiBQcm9taXNlPE1vZGVsSlNPTj4ge1xuICAgIGNvbnN0IG1vZGVsQ29uZmlnUmVxdWVzdCA9IGF3YWl0IHRoaXMuZmV0Y2godGhpcy5wYXRoLCB0aGlzLnJlcXVlc3RJbml0KTtcblxuICAgIGlmICghbW9kZWxDb25maWdSZXF1ZXN0Lm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFJlcXVlc3QgdG8gJHt0aGlzLnBhdGh9IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlIGAgK1xuICAgICAgICAgIGAke21vZGVsQ29uZmlnUmVxdWVzdC5zdGF0dXN9LiBQbGVhc2UgdmVyaWZ5IHRoaXMgVVJMIHBvaW50cyB0byBgICtcbiAgICAgICAgICBgdGhlIG1vZGVsIEpTT04gb2YgdGhlIG1vZGVsIHRvIGxvYWQuYCk7XG4gICAgfVxuICAgIGxldCBtb2RlbEpTT046IE1vZGVsSlNPTjtcbiAgICB0cnkge1xuICAgICAgbW9kZWxKU09OID0gYXdhaXQgbW9kZWxDb25maWdSZXF1ZXN0Lmpzb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IGBGYWlsZWQgdG8gcGFyc2UgbW9kZWwgSlNPTiBvZiByZXNwb25zZSBmcm9tICR7dGhpcy5wYXRofS5gO1xuICAgICAgLy8gVE9ETyhuc3Rob3JhdCk6IFJlbW92ZSB0aGlzIGFmdGVyIHNvbWUgdGltZSB3aGVuIHdlJ3JlIGNvbWZvcnRhYmxlIHRoYXRcbiAgICAgIC8vIC5wYiBmaWxlcyBhcmUgbW9zdGx5IGdvbmUuXG4gICAgICBpZiAodGhpcy5wYXRoLmVuZHNXaXRoKCcucGInKSkge1xuICAgICAgICBtZXNzYWdlICs9ICcgWW91ciBwYXRoIGNvbnRhaW5zIGEgLnBiIGZpbGUgZXh0ZW5zaW9uLiAnICtcbiAgICAgICAgICAgICdTdXBwb3J0IGZvciAucGIgbW9kZWxzIGhhdmUgYmVlbiByZW1vdmVkIGluIFRlbnNvckZsb3cuanMgMS4wICcgK1xuICAgICAgICAgICAgJ2luIGZhdm9yIG9mIC5qc29uIG1vZGVscy4gWW91IGNhbiByZS1jb252ZXJ0IHlvdXIgUHl0aG9uICcgK1xuICAgICAgICAgICAgJ1RlbnNvckZsb3cgbW9kZWwgdXNpbmcgdGhlIFRlbnNvckZsb3cuanMgMS4wIGNvbnZlcnNpb24gc2NyaXB0cyAnICtcbiAgICAgICAgICAgICdvciB5b3UgY2FuIGNvbnZlcnQgeW91ci5wYiBtb2RlbHMgd2l0aCB0aGUgXFwncGIyanNvblxcJycgK1xuICAgICAgICAgICAgJ05QTSBzY3JpcHQgaW4gdGhlIHRlbnNvcmZsb3cvdGZqcy1jb252ZXJ0ZXIgcmVwb3NpdG9yeS4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZSArPSAnIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHNlcnZlciBpcyBzZXJ2aW5nIHZhbGlkICcgK1xuICAgICAgICAgICAgJ0pTT04gZm9yIHRoaXMgcmVxdWVzdC4nO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8vIFdlIGRvIG5vdCBhbGxvdyBib3RoIG1vZGVsVG9wb2xvZ3kgYW5kIHdlaWdodHNNYW5pZmVzdCB0byBiZSBtaXNzaW5nLlxuICAgIGNvbnN0IG1vZGVsVG9wb2xvZ3kgPSBtb2RlbEpTT04ubW9kZWxUb3BvbG9neTtcbiAgICBjb25zdCB3ZWlnaHRzTWFuaWZlc3QgPSBtb2RlbEpTT04ud2VpZ2h0c01hbmlmZXN0O1xuICAgIGlmIChtb2RlbFRvcG9sb2d5ID09IG51bGwgJiYgd2VpZ2h0c01hbmlmZXN0ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIEpTT04gZnJvbSBIVFRQIHBhdGggJHt0aGlzLnBhdGh9IGNvbnRhaW5zIG5laXRoZXIgbW9kZWwgYCArXG4gICAgICAgICAgYHRvcG9sb2d5IG9yIG1hbmlmZXN0IGZvciB3ZWlnaHRzLmApO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlbEpTT047XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBtb2RlbCBhcnRpZmFjdHMgdmlhIEhUVFAgcmVxdWVzdChzKS5cbiAgICpcbiAgICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIHRvIGB0Zi5pby5odHRwYCBmb3IgZGV0YWlscyBvbiB0aGUgc2F2ZWRcbiAgICogYXJ0aWZhY3RzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIG1vZGVsIGFydGlmYWN0cyAoaWYgbG9hZGluZyBzdWNjZWVkcykuXG4gICAqL1xuICBhc3luYyBsb2FkKCk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHM+IHtcbiAgICBpZiAodGhpcy5sb2FkT3B0aW9ucy5zdHJlYW1XZWlnaHRzKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkU3RyZWFtKCk7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsSlNPTiA9IGF3YWl0IHRoaXMubG9hZE1vZGVsSlNPTigpO1xuICAgIHJldHVybiBnZXRNb2RlbEFydGlmYWN0c0ZvckpTT04oXG4gICAgICAgIG1vZGVsSlNPTiwgKHdlaWdodHNNYW5pZmVzdCkgPT4gdGhpcy5sb2FkV2VpZ2h0cyh3ZWlnaHRzTWFuaWZlc3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFN0cmVhbSgpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzPiB7XG4gICAgY29uc3QgbW9kZWxKU09OID0gYXdhaXQgdGhpcy5sb2FkTW9kZWxKU09OKCk7XG4gICAgY29uc3QgZmV0Y2hVUkxzID0gYXdhaXQgdGhpcy5nZXRXZWlnaHRVcmxzKG1vZGVsSlNPTi53ZWlnaHRzTWFuaWZlc3QpO1xuICAgIGNvbnN0IHdlaWdodFNwZWNzID0gZ2V0V2VpZ2h0U3BlY3MobW9kZWxKU09OLndlaWdodHNNYW5pZmVzdCk7XG4gICAgY29uc3Qgc3RyZWFtID0gKCkgPT4gc3RyZWFtV2VpZ2h0cyhmZXRjaFVSTHMsIHRoaXMubG9hZE9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1vZGVsSlNPTixcbiAgICAgIHdlaWdodFNwZWNzLFxuICAgICAgZ2V0V2VpZ2h0U3RyZWFtOiBzdHJlYW0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0V2VpZ2h0VXJscyh3ZWlnaHRzTWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZyk6XG4gICAgUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHdlaWdodFBhdGggPSBBcnJheS5pc0FycmF5KHRoaXMucGF0aCkgPyB0aGlzLnBhdGhbMV0gOiB0aGlzLnBhdGg7XG4gICAgY29uc3QgW3ByZWZpeCwgc3VmZml4XSA9IHBhcnNlVXJsKHdlaWdodFBhdGgpO1xuICAgIGNvbnN0IHBhdGhQcmVmaXggPSB0aGlzLndlaWdodFBhdGhQcmVmaXggfHwgcHJlZml4O1xuXG4gICAgY29uc3QgZmV0Y2hVUkxzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHVybFByb21pc2VzOiBBcnJheTxQcm9taXNlPHN0cmluZz4+ID0gW107XG4gICAgZm9yIChjb25zdCB3ZWlnaHRzR3JvdXAgb2Ygd2VpZ2h0c01hbmlmZXN0KSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2Ygd2VpZ2h0c0dyb3VwLnBhdGhzKSB7XG4gICAgICAgIGlmICh0aGlzLndlaWdodFVybENvbnZlcnRlciAhPSBudWxsKSB7XG4gICAgICAgICAgdXJsUHJvbWlzZXMucHVzaCh0aGlzLndlaWdodFVybENvbnZlcnRlcihwYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmV0Y2hVUkxzLnB1c2gocGF0aFByZWZpeCArIHBhdGggKyBzdWZmaXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2VpZ2h0VXJsQ29udmVydGVyKSB7XG4gICAgICBmZXRjaFVSTHMucHVzaCguLi5hd2FpdCBQcm9taXNlLmFsbCh1cmxQcm9taXNlcykpO1xuICAgIH1cbiAgICByZXR1cm4gZmV0Y2hVUkxzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkV2VpZ2h0cyh3ZWlnaHRzTWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZyk6XG4gICAgUHJvbWlzZTxbV2VpZ2h0c01hbmlmZXN0RW50cnlbXSwgV2VpZ2h0RGF0YV0+IHtcbiAgICBjb25zdCBmZXRjaFVSTHMgPSBhd2FpdCB0aGlzLmdldFdlaWdodFVybHMod2VpZ2h0c01hbmlmZXN0KTtcbiAgICBjb25zdCB3ZWlnaHRTcGVjcyA9IGdldFdlaWdodFNwZWNzKHdlaWdodHNNYW5pZmVzdCk7XG5cbiAgICBjb25zdCBidWZmZXJzID0gYXdhaXQgbG9hZFdlaWdodHNBc0FycmF5QnVmZmVyKGZldGNoVVJMcywgdGhpcy5sb2FkT3B0aW9ucyk7XG4gICAgcmV0dXJuIFt3ZWlnaHRTcGVjcywgYnVmZmVyc107XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBvZiB0aGUgdXJsLCB3aGVyZSB0aGUgcHJlZml4IGlzIHRoZSBwYXRoIGJlZm9yZVxuICogdGhlIGxhc3QgZmlsZSwgYW5kIHN1ZmZpeCBpcyB0aGUgc2VhcmNoIHBhcmFtcyBhZnRlciB0aGUgbGFzdCBmaWxlLlxuICogYGBgXG4gKiBjb25zdCB1cmwgPSAnaHR0cDovL3RmaHViLmRldi9tb2RlbC8xL3RlbnNvcmZsb3dqc19tb2RlbC5wYj90ZmpzLWZvcm1hdD1maWxlJ1xuICogW3ByZWZpeCwgc3VmZml4XSA9IHBhcnNlVXJsKHVybClcbiAqIC8vIHByZWZpeCA9ICdodHRwOi8vdGZodWIuZGV2L21vZGVsLzEvJ1xuICogLy8gc3VmZml4ID0gJz90ZmpzLWZvcm1hdD1maWxlJ1xuICogYGBgXG4gKiBAcGFyYW0gdXJsIHRoZSBtb2RlbCB1cmwgdG8gYmUgcGFyc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVcmwodXJsOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgY29uc3QgbGFzdFNsYXNoID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7XG4gIGNvbnN0IGxhc3RTZWFyY2hQYXJhbSA9IHVybC5sYXN0SW5kZXhPZignPycpO1xuICBjb25zdCBwcmVmaXggPSB1cmwuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCk7XG4gIGNvbnN0IHN1ZmZpeCA9XG4gICAgICBsYXN0U2VhcmNoUGFyYW0gPiBsYXN0U2xhc2ggPyB1cmwuc3Vic3RyaW5nKGxhc3RTZWFyY2hQYXJhbSkgOiAnJztcbiAgcmV0dXJuIFtwcmVmaXggKyAnLycsIHN1ZmZpeF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hUVFBTY2hlbWUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHVybC5tYXRjaChIVFRQUmVxdWVzdC5VUkxfU0NIRU1FX1JFR0VYKSAhPSBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgaHR0cFJvdXRlcjogSU9Sb3V0ZXIgPVxuICAgICh1cmw6IHN0cmluZywgbG9hZE9wdGlvbnM/OiBMb2FkT3B0aW9ucykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAobG9hZE9wdGlvbnMgPT0gbnVsbCB8fCBsb2FkT3B0aW9ucy5mZXRjaEZ1bmMgPT0gbnVsbCkpIHtcbiAgICAgICAgLy8gYGh0dHBgIHVzZXMgYGZldGNoYCBvciBgbm9kZS1mZXRjaGAsIGlmIG9uZSB3YW50cyB0byB1c2UgaXQgaW5cbiAgICAgICAgLy8gYW4gZW52aXJvbm1lbnQgdGhhdCBpcyBub3QgdGhlIGJyb3dzZXIgb3Igbm9kZSB0aGV5IGhhdmUgdG8gc2V0dXAgYVxuICAgICAgICAvLyBnbG9iYWwgZmV0Y2ggcG9seWZpbGwuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGlzSFRUUCA9IHRydWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHtcbiAgICAgICAgICBpc0hUVFAgPSB1cmwuZXZlcnkodXJsSXRlbSA9PiBpc0hUVFBTY2hlbWUodXJsSXRlbSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzSFRUUCA9IGlzSFRUUFNjaGVtZSh1cmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0hUVFApIHtcbiAgICAgICAgICByZXR1cm4gaHR0cCh1cmwsIGxvYWRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbklPUm91dGVyUmVnaXN0cnkucmVnaXN0ZXJTYXZlUm91dGVyKGh0dHBSb3V0ZXIpO1xuSU9Sb3V0ZXJSZWdpc3RyeS5yZWdpc3RlckxvYWRSb3V0ZXIoaHR0cFJvdXRlcik7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBJT0hhbmRsZXIgc3VidHlwZSB0aGF0IHNlbmRzIG1vZGVsIGFydGlmYWN0cyB0byBIVFRQIHNlcnZlci5cbiAqXG4gKiBBbiBIVFRQIHJlcXVlc3Qgb2YgdGhlIGBtdWx0aXBhcnQvZm9ybS1kYXRhYCBtaW1lIHR5cGUgd2lsbCBiZSBzZW50IHRvIHRoZVxuICogYHBhdGhgIFVSTC4gVGhlIGZvcm0gZGF0YSBpbmNsdWRlcyBhcnRpZmFjdHMgdGhhdCByZXByZXNlbnQgdGhlIHRvcG9sb2d5XG4gKiBhbmQvb3Igd2VpZ2h0cyBvZiB0aGUgbW9kZWwuIEluIHRoZSBjYXNlIG9mIEtlcmFzLXN0eWxlIGB0Zi5Nb2RlbGAsIHR3b1xuICogYmxvYnMgKGZpbGVzKSBleGlzdCBpbiBmb3JtLWRhdGE6XG4gKiAgIC0gQSBKU09OIGZpbGUgY29uc2lzdGluZyBvZiBgbW9kZWxUb3BvbG9neWAgYW5kIGB3ZWlnaHRzTWFuaWZlc3RgLlxuICogICAtIEEgYmluYXJ5IHdlaWdodHMgZmlsZSBjb25zaXN0aW5nIG9mIHRoZSBjb25jYXRlbmF0ZWQgd2VpZ2h0IHZhbHVlcy5cbiAqIFRoZXNlIGZpbGVzIGFyZSBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIG9uZSBnZW5lcmF0ZWQgYnlcbiAqIFt0ZmpzX2NvbnZlcnRlcl0oaHR0cHM6Ly9qcy50ZW5zb3JmbG93Lm9yZy90dXRvcmlhbHMvaW1wb3J0LWtlcmFzLmh0bWwpLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IGV4ZW1wbGlmaWVzIHRoZSBjbGllbnQtc2lkZSBjb2RlIHRoYXQgdXNlcyB0aGlzXG4gKiBmdW5jdGlvbjpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW9kZWwgPSB0Zi5zZXF1ZW50aWFsKCk7XG4gKiBtb2RlbC5hZGQoXG4gKiAgICAgdGYubGF5ZXJzLmRlbnNlKHt1bml0czogMSwgaW5wdXRTaGFwZTogWzEwMF0sIGFjdGl2YXRpb246ICdzaWdtb2lkJ30pKTtcbiAqXG4gKiBjb25zdCBzYXZlUmVzdWx0ID0gYXdhaXQgbW9kZWwuc2F2ZSh0Zi5pby5odHRwKFxuICogICAgICdodHRwOi8vbW9kZWwtc2VydmVyOjUwMDAvdXBsb2FkJywge3JlcXVlc3RJbml0OiB7bWV0aG9kOiAnUFVUJ319KSk7XG4gKiBjb25zb2xlLmxvZyhzYXZlUmVzdWx0KTtcbiAqIGBgYFxuICpcbiAqIElmIHRoZSBkZWZhdWx0IGBQT1NUYCBtZXRob2QgaXMgdG8gYmUgdXNlZCwgd2l0aG91dCBhbnkgY3VzdG9tIHBhcmFtZXRlcnNcbiAqIHN1Y2ggYXMgaGVhZGVycywgeW91IGNhbiBzaW1wbHkgcGFzcyBhbiBIVFRQIG9yIEhUVFBTIFVSTCB0byBgbW9kZWwuc2F2ZWA6XG4gKlxuICogYGBganNcbiAqIGNvbnN0IHNhdmVSZXN1bHQgPSBhd2FpdCBtb2RlbC5zYXZlKCdodHRwOi8vbW9kZWwtc2VydmVyOjUwMDAvdXBsb2FkJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgZm9sbG93aW5nIEdpdEh1YiBHaXN0XG4gKiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kc21pbGtvdi8xYjYwNDZmZDYxMzJkNzQwOGQ1MjU3YjA5NzZmNzg2NFxuICogaW1wbGVtZW50cyBhIHNlcnZlciBiYXNlZCBvbiBbZmxhc2tdKGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxsZXRzL2ZsYXNrKSB0aGF0XG4gKiBjYW4gcmVjZWl2ZSB0aGUgcmVxdWVzdC4gVXBvbiByZWNlaXZpbmcgdGhlIG1vZGVsIGFydGlmYWN0cyB2aWEgdGhlIHJlcXVzdCxcbiAqIHRoaXMgcGFydGljdWxhciBzZXJ2ZXIgcmVjb25zdGl0dXRlcyBpbnN0YW5jZXMgb2YgW0tlcmFzXG4gKiBNb2RlbHNdKGh0dHBzOi8va2VyYXMuaW8vbW9kZWxzL21vZGVsLykgaW4gbWVtb3J5LlxuICpcbiAqXG4gKiBAcGFyYW0gcGF0aCBBIFVSTCBwYXRoIHRvIHRoZSBtb2RlbC5cbiAqICAgQ2FuIGJlIGFuIGFic29sdXRlIEhUVFAgcGF0aCAoZS5nLixcbiAqICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9tb2RlbC11cGxvYWQpJykgb3IgYSByZWxhdGl2ZSBwYXRoIChlLmcuLFxuICogICAnLi9tb2RlbC11cGxvYWQnKS5cbiAqIEBwYXJhbSByZXF1ZXN0SW5pdCBSZXF1ZXN0IGNvbmZpZ3VyYXRpb25zIHRvIGJlIHVzZWQgd2hlbiBzZW5kaW5nXG4gKiAgICBIVFRQIHJlcXVlc3QgdG8gc2VydmVyIHVzaW5nIGBmZXRjaGAuIEl0IGNhbiBjb250YWluIGZpZWxkcyBzdWNoIGFzXG4gKiAgICBgbWV0aG9kYCwgYGNyZWRlbnRpYWxzYCwgYGhlYWRlcnNgLCBgbW9kZWAsIGV0Yy4gU2VlXG4gKiAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdC9SZXF1ZXN0XG4gKiAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gYHJlcXVlc3RJbml0YCBtdXN0IG5vdCBoYXZlIGEgYm9keSwgYmVjYXVzZSB0aGVcbiAqIGJvZHkgd2lsbCBiZSBzZXQgYnkgVGVuc29yRmxvdy5qcy4gRmlsZSBibG9icyByZXByZXNlbnRpbmcgdGhlIG1vZGVsXG4gKiB0b3BvbG9neSAoZmlsZW5hbWU6ICdtb2RlbC5qc29uJykgYW5kIHRoZSB3ZWlnaHRzIG9mIHRoZSBtb2RlbCAoZmlsZW5hbWU6XG4gKiAnbW9kZWwud2VpZ2h0cy5iaW4nKSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBib2R5LiBJZiBgcmVxdWVzdEluaXRgIGhhcyBhXG4gKiBgYm9keWAsIGFuIEVycm9yIHdpbGwgYmUgdGhyb3duLlxuICogQHBhcmFtIGxvYWRPcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBsb2FkaW5nLiBJdCBpbmNsdWRlcyB0aGVcbiAqICAgZm9sbG93aW5nIGZpZWxkczpcbiAqICAgLSB3ZWlnaHRQYXRoUHJlZml4IE9wdGlvbmFsLCB0aGlzIHNwZWNpZmllcyB0aGUgcGF0aCBwcmVmaXggZm9yIHdlaWdodFxuICogICAgIGZpbGVzLCBieSBkZWZhdWx0IHRoaXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBwYXRoIHBhcmFtLlxuICogICAtIGZldGNoRnVuYyBPcHRpb25hbCwgY3VzdG9tIGBmZXRjaGAgZnVuY3Rpb24uIEUuZy4sIGluIE5vZGUuanMsXG4gKiAgICAgdGhlIGBmZXRjaGAgZnJvbSBub2RlLWZldGNoIGNhbiBiZSB1c2VkIGhlcmUuXG4gKiAgIC0gb25Qcm9ncmVzcyBPcHRpb25hbCwgcHJvZ3Jlc3MgY2FsbGJhY2sgZnVuY3Rpb24sIGZpcmVkIHBlcmlvZGljYWxseVxuICogICAgIGJlZm9yZSB0aGUgbG9hZCBpcyBjb21wbGV0ZWQuXG4gKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiBgSU9IYW5kbGVyYC5cbiAqXG4gKiBAZG9jIHtcbiAqICAgaGVhZGluZzogJ01vZGVscycsXG4gKiAgIHN1YmhlYWRpbmc6ICdMb2FkaW5nJyxcbiAqICAgbmFtZXNwYWNlOiAnaW8nLFxuICogICBpZ25vcmVDSTogdHJ1ZVxuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaHR0cChwYXRoOiBzdHJpbmcsIGxvYWRPcHRpb25zPzogTG9hZE9wdGlvbnMpOiBJT0hhbmRsZXIge1xuICByZXR1cm4gbmV3IEhUVFBSZXF1ZXN0KHBhdGgsIGxvYWRPcHRpb25zKTtcbn1cblxuLyoqXG4gKiBEZXByZWNhdGVkLiBVc2UgYHRmLmlvLmh0dHBgLlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBsb2FkT3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnJvd3NlckhUVFBSZXF1ZXN0KFxuICAgIHBhdGg6IHN0cmluZywgbG9hZE9wdGlvbnM/OiBMb2FkT3B0aW9ucyk6IElPSGFuZGxlciB7XG4gIHJldHVybiBodHRwKHBhdGgsIGxvYWRPcHRpb25zKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nclass PassthroughLoader {\n constructor(modelArtifacts) {\n this.modelArtifacts = modelArtifacts;\n }\n load() {\n return this.modelArtifacts;\n }\n}\nclass PassthroughSaver {\n constructor(saveHandler) {\n this.saveHandler = saveHandler;\n }\n save(modelArtifacts) {\n return this.saveHandler(modelArtifacts);\n }\n}\nclass PassthroughAsync {\n constructor(handler) {\n if (handler.load) {\n this.load = () => Promise.resolve(handler.load());\n }\n if (handler.save) {\n this.save = (modelArtifacts) => Promise.resolve(handler.save(modelArtifacts));\n }\n }\n}\n/**\n * Creates an IOHandler that loads model artifacts from memory.\n *\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * const model = await tf.loadLayersModel(tf.io.fromMemory(\n * modelTopology, weightSpecs, weightData));\n * ```\n *\n * @param modelArtifacts a object containing model topology (i.e., parsed from\n * the JSON format).\n * @param weightSpecs An array of `WeightsManifestEntry` objects describing the\n * names, shapes, types, and quantization of the weight data. Optional.\n * @param weightData A single `ArrayBuffer` containing the weight data,\n * concatenated in the order described by the weightSpecs. Optional.\n * @param trainingConfig Model training configuration. Optional.\n *\n * @returns A passthrough `IOHandler` that simply loads the provided data.\n */\nexport function fromMemory(modelArtifacts, weightSpecs, weightData, trainingConfig) {\n const args = arguments;\n return new PassthroughAsync(fromMemorySync(...args));\n}\n/**\n * Creates an IOHandler that loads model artifacts from memory.\n *\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * const model = await tf.loadLayersModel(tf.io.fromMemory(\n * modelTopology, weightSpecs, weightData));\n * ```\n *\n * @param modelArtifacts a object containing model topology (i.e., parsed from\n * the JSON format).\n * @param weightSpecs An array of `WeightsManifestEntry` objects describing the\n * names, shapes, types, and quantization of the weight data. Optional.\n * @param weightData A single `ArrayBuffer` containing the weight data,\n * concatenated in the order described by the weightSpecs. Optional.\n * @param trainingConfig Model training configuration. Optional.\n *\n * @returns A passthrough `IOHandlerSync` that simply loads the provided data.\n */\nexport function fromMemorySync(modelArtifacts, weightSpecs, weightData, trainingConfig) {\n if (arguments.length === 1) {\n const isModelArtifacts = modelArtifacts.modelTopology != null ||\n modelArtifacts.weightSpecs != null;\n if (isModelArtifacts) {\n return new PassthroughLoader(modelArtifacts);\n }\n else {\n // Legacy support: with only modelTopology.\n // TODO(cais): Remove this deprecated API.\n console.warn('Please call tf.io.fromMemory() with only one argument. ' +\n 'The argument should be of type ModelArtifacts. ' +\n 'The multi-argument signature of tf.io.fromMemory() has been ' +\n 'deprecated and will be removed in a future release.');\n return new PassthroughLoader({ modelTopology: modelArtifacts });\n }\n }\n else {\n // Legacy support.\n // TODO(cais): Remove this deprecated API.\n console.warn('Please call tf.io.fromMemory() with only one argument. ' +\n 'The argument should be of type ModelArtifacts. ' +\n 'The multi-argument signature of tf.io.fromMemory() has been ' +\n 'deprecated and will be removed in a future release.');\n return new PassthroughLoader({\n modelTopology: modelArtifacts,\n weightSpecs,\n weightData,\n trainingConfig\n });\n }\n}\n/**\n * Creates an IOHandler that passes saved model artifacts to a callback.\n *\n * ```js\n * function handleSave(artifacts) {\n * // ... do something with the artifacts ...\n * return {modelArtifactsInfo: {...}, ...};\n * }\n *\n * const saveResult = model.save(tf.io.withSaveHandler(handleSave));\n * ```\n *\n * @param saveHandler A function that accepts a `ModelArtifacts` and returns a\n * promise that resolves to a `SaveResult`.\n */\nexport function withSaveHandler(saveHandler) {\n return new PassthroughSaver(saveHandler);\n}\n/**\n * Creates an IOHandlerSync that passes saved model artifacts to a callback.\n *\n * ```js\n * function handleSave(artifacts) {\n * // ... do something with the artifacts ...\n * return {modelArtifactsInfo: {...}, ...};\n * }\n *\n * const saveResult = model.save(tf.io.withSaveHandler(handleSave));\n * ```\n *\n * @param saveHandler A function that accepts a `ModelArtifacts` and returns a\n * `SaveResult`.\n */\nexport function withSaveHandlerSync(saveHandler) {\n return new PassthroughSaver(saveHandler);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3Rocm91Z2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL3Bhc3N0aHJvdWdoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQVFILE1BQU0saUJBQWlCO0lBQ3JCLFlBQTZCLGNBQStCO1FBQS9CLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtJQUFHLENBQUM7SUFFaEUsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGdCQUFnQjtJQUNwQixZQUNtQixXQUE2QztRQUE3QyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0M7SUFBRyxDQUFDO0lBRXBFLElBQUksQ0FBQyxjQUE4QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBRUQsTUFBTSxnQkFBZ0I7SUFJcEIsWUFBWSxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FDN0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN0QixjQUFpQyxFQUFFLFdBQW9DLEVBQ3ZFLFVBQXVCLEVBQUUsY0FBK0I7SUFFMUQsTUFBTSxJQUFJLEdBQUcsU0FBcUQsQ0FBQztJQUNuRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDMUIsY0FBaUMsRUFBRSxXQUFvQyxFQUN2RSxVQUF1QixFQUFFLGNBQStCO0lBQzFELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxnQkFBZ0IsR0FDakIsY0FBaUMsQ0FBQyxhQUFhLElBQUksSUFBSTtZQUN2RCxjQUFpQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFDM0QsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixPQUFPLElBQUksaUJBQWlCLENBQUMsY0FBZ0MsQ0FBQyxDQUFDO1NBQ2hFO2FBQU07WUFDTCwyQ0FBMkM7WUFDM0MsMENBQTBDO1lBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQ1IseURBQXlEO2dCQUN6RCxpREFBaUQ7Z0JBQ2pELDhEQUE4RDtnQkFDOUQscURBQXFELENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksaUJBQWlCLENBQUMsRUFBQyxhQUFhLEVBQUUsY0FBb0IsRUFBQyxDQUFDLENBQUM7U0FDckU7S0FDRjtTQUFNO1FBQ0wsa0JBQWtCO1FBQ2xCLDBDQUEwQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUNSLHlEQUF5RDtZQUN6RCxpREFBaUQ7WUFDakQsOERBQThEO1lBQzlELHFEQUFxRCxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLGlCQUFpQixDQUFDO1lBQzNCLGFBQWEsRUFBRSxjQUFvQjtZQUNuQyxXQUFXO1lBQ1gsVUFBVTtZQUNWLGNBQWM7U0FDZixDQUFDLENBQUM7S0FDSjtBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzNCLFdBQ3VCO0lBQ3pCLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQy9CLFdBQXNEO0lBQ3hELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBYSxXQUFXLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKipcbiAqIElPSGFuZGxlcnMgdGhhdCBwYXNzIHRocm91Z2ggdGhlIGluLW1lbW9yeSBNb2RlbEFydGlmYWN0cyBmb3JtYXQuXG4gKi9cblxuaW1wb3J0IHtJT0hhbmRsZXIsIElPSGFuZGxlclN5bmMsIExvYWRIYW5kbGVyLCBNb2RlbEFydGlmYWN0cywgU2F2ZUhhbmRsZXIsIFNhdmVSZXN1bHQsIFRyYWluaW5nQ29uZmlnLCBXZWlnaHREYXRhLCBXZWlnaHRzTWFuaWZlc3RFbnRyeX0gZnJvbSAnLi90eXBlcyc7XG5cbmNsYXNzIFBhc3N0aHJvdWdoTG9hZGVyIGltcGxlbWVudHMgSU9IYW5kbGVyU3luYyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbW9kZWxBcnRpZmFjdHM/OiBNb2RlbEFydGlmYWN0cykge31cblxuICBsb2FkKCk6IE1vZGVsQXJ0aWZhY3RzIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbEFydGlmYWN0cztcbiAgfVxufVxuXG5jbGFzcyBQYXNzdGhyb3VnaFNhdmVyPFIgZXh0ZW5kcyBTYXZlUmVzdWx0IHwgUHJvbWlzZTxTYXZlUmVzdWx0Pj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhdmVIYW5kbGVyOiAoYXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cykgPT4gUikge31cblxuICBzYXZlKG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyk6IFIge1xuICAgIHJldHVybiB0aGlzLnNhdmVIYW5kbGVyKG1vZGVsQXJ0aWZhY3RzKTtcbiAgfVxufVxuXG5jbGFzcyBQYXNzdGhyb3VnaEFzeW5jIGltcGxlbWVudHMgSU9IYW5kbGVyIHtcbiAgbG9hZD86IExvYWRIYW5kbGVyO1xuICBzYXZlPzogU2F2ZUhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IoaGFuZGxlcjogSU9IYW5kbGVyU3luYykge1xuICAgIGlmIChoYW5kbGVyLmxvYWQpIHtcbiAgICAgIHRoaXMubG9hZCA9ICgpID0+IFByb21pc2UucmVzb2x2ZShoYW5kbGVyLmxvYWQoKSk7XG4gICAgfVxuICAgIGlmIChoYW5kbGVyLnNhdmUpIHtcbiAgICAgIHRoaXMuc2F2ZSA9IChtb2RlbEFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShoYW5kbGVyLnNhdmUobW9kZWxBcnRpZmFjdHMpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIElPSGFuZGxlciB0aGF0IGxvYWRzIG1vZGVsIGFydGlmYWN0cyBmcm9tIG1lbW9yeS5cbiAqXG4gKiBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgdGYubG9hZExheWVyc01vZGVsYCwgYW4gaW5zdGFuY2Ugb2ZcbiAqIGB0Zi5MYXllcnNNb2RlbGAgKEtlcmFzLXN0eWxlKSBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgbG9hZGVkIGFydGlmYWN0cy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW9kZWwgPSBhd2FpdCB0Zi5sb2FkTGF5ZXJzTW9kZWwodGYuaW8uZnJvbU1lbW9yeShcbiAqICAgICBtb2RlbFRvcG9sb2d5LCB3ZWlnaHRTcGVjcywgd2VpZ2h0RGF0YSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIG1vZGVsQXJ0aWZhY3RzIGEgb2JqZWN0IGNvbnRhaW5pbmcgbW9kZWwgdG9wb2xvZ3kgKGkuZS4sIHBhcnNlZCBmcm9tXG4gKiAgIHRoZSBKU09OIGZvcm1hdCkuXG4gKiBAcGFyYW0gd2VpZ2h0U3BlY3MgQW4gYXJyYXkgb2YgYFdlaWdodHNNYW5pZmVzdEVudHJ5YCBvYmplY3RzIGRlc2NyaWJpbmcgdGhlXG4gKiAgIG5hbWVzLCBzaGFwZXMsIHR5cGVzLCBhbmQgcXVhbnRpemF0aW9uIG9mIHRoZSB3ZWlnaHQgZGF0YS4gT3B0aW9uYWwuXG4gKiBAcGFyYW0gd2VpZ2h0RGF0YSBBIHNpbmdsZSBgQXJyYXlCdWZmZXJgIGNvbnRhaW5pbmcgdGhlIHdlaWdodCBkYXRhLFxuICogICBjb25jYXRlbmF0ZWQgaW4gdGhlIG9yZGVyIGRlc2NyaWJlZCBieSB0aGUgd2VpZ2h0U3BlY3MuIE9wdGlvbmFsLlxuICogQHBhcmFtIHRyYWluaW5nQ29uZmlnIE1vZGVsIHRyYWluaW5nIGNvbmZpZ3VyYXRpb24uIE9wdGlvbmFsLlxuICpcbiAqIEByZXR1cm5zIEEgcGFzc3Rocm91Z2ggYElPSGFuZGxlcmAgdGhhdCBzaW1wbHkgbG9hZHMgdGhlIHByb3ZpZGVkIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWVtb3J5KFxuICAgIG1vZGVsQXJ0aWZhY3RzOiB7fXxNb2RlbEFydGlmYWN0cywgd2VpZ2h0U3BlY3M/OiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLFxuICAgIHdlaWdodERhdGE/OiBXZWlnaHREYXRhLCB0cmFpbmluZ0NvbmZpZz86IFRyYWluaW5nQ29uZmlnKTogSU9IYW5kbGVyIHtcblxuICBjb25zdCBhcmdzID0gYXJndW1lbnRzIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2YgZnJvbU1lbW9yeT47XG4gIHJldHVybiBuZXcgUGFzc3Rocm91Z2hBc3luYyhmcm9tTWVtb3J5U3luYyguLi5hcmdzKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBJT0hhbmRsZXIgdGhhdCBsb2FkcyBtb2RlbCBhcnRpZmFjdHMgZnJvbSBtZW1vcnkuXG4gKlxuICogV2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHRmLmxvYWRMYXllcnNNb2RlbGAsIGFuIGluc3RhbmNlIG9mXG4gKiBgdGYuTGF5ZXJzTW9kZWxgIChLZXJhcy1zdHlsZSkgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIGxvYWRlZCBhcnRpZmFjdHMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1vZGVsID0gYXdhaXQgdGYubG9hZExheWVyc01vZGVsKHRmLmlvLmZyb21NZW1vcnkoXG4gKiAgICAgbW9kZWxUb3BvbG9neSwgd2VpZ2h0U3BlY3MsIHdlaWdodERhdGEpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBtb2RlbEFydGlmYWN0cyBhIG9iamVjdCBjb250YWluaW5nIG1vZGVsIHRvcG9sb2d5IChpLmUuLCBwYXJzZWQgZnJvbVxuICogICB0aGUgSlNPTiBmb3JtYXQpLlxuICogQHBhcmFtIHdlaWdodFNwZWNzIEFuIGFycmF5IG9mIGBXZWlnaHRzTWFuaWZlc3RFbnRyeWAgb2JqZWN0cyBkZXNjcmliaW5nIHRoZVxuICogICBuYW1lcywgc2hhcGVzLCB0eXBlcywgYW5kIHF1YW50aXphdGlvbiBvZiB0aGUgd2VpZ2h0IGRhdGEuIE9wdGlvbmFsLlxuICogQHBhcmFtIHdlaWdodERhdGEgQSBzaW5nbGUgYEFycmF5QnVmZmVyYCBjb250YWluaW5nIHRoZSB3ZWlnaHQgZGF0YSxcbiAqICAgY29uY2F0ZW5hdGVkIGluIHRoZSBvcmRlciBkZXNjcmliZWQgYnkgdGhlIHdlaWdodFNwZWNzLiBPcHRpb25hbC5cbiAqIEBwYXJhbSB0cmFpbmluZ0NvbmZpZyBNb2RlbCB0cmFpbmluZyBjb25maWd1cmF0aW9uLiBPcHRpb25hbC5cbiAqXG4gKiBAcmV0dXJucyBBIHBhc3N0aHJvdWdoIGBJT0hhbmRsZXJTeW5jYCB0aGF0IHNpbXBseSBsb2FkcyB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21NZW1vcnlTeW5jKFxuICAgIG1vZGVsQXJ0aWZhY3RzOiB7fXxNb2RlbEFydGlmYWN0cywgd2VpZ2h0U3BlY3M/OiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLFxuICAgIHdlaWdodERhdGE/OiBXZWlnaHREYXRhLCB0cmFpbmluZ0NvbmZpZz86IFRyYWluaW5nQ29uZmlnKTogSU9IYW5kbGVyU3luYyB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgaXNNb2RlbEFydGlmYWN0cyA9XG4gICAgICAgIChtb2RlbEFydGlmYWN0cyBhcyBNb2RlbEFydGlmYWN0cykubW9kZWxUb3BvbG9neSAhPSBudWxsIHx8XG4gICAgICAgIChtb2RlbEFydGlmYWN0cyBhcyBNb2RlbEFydGlmYWN0cykud2VpZ2h0U3BlY3MgIT0gbnVsbDtcbiAgICBpZiAoaXNNb2RlbEFydGlmYWN0cykge1xuICAgICAgcmV0dXJuIG5ldyBQYXNzdGhyb3VnaExvYWRlcihtb2RlbEFydGlmYWN0cyBhcyBNb2RlbEFydGlmYWN0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExlZ2FjeSBzdXBwb3J0OiB3aXRoIG9ubHkgbW9kZWxUb3BvbG9neS5cbiAgICAgIC8vIFRPRE8oY2Fpcyk6IFJlbW92ZSB0aGlzIGRlcHJlY2F0ZWQgQVBJLlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdQbGVhc2UgY2FsbCB0Zi5pby5mcm9tTWVtb3J5KCkgd2l0aCBvbmx5IG9uZSBhcmd1bWVudC4gJyArXG4gICAgICAgICAgJ1RoZSBhcmd1bWVudCBzaG91bGQgYmUgb2YgdHlwZSBNb2RlbEFydGlmYWN0cy4gJyArXG4gICAgICAgICAgJ1RoZSBtdWx0aS1hcmd1bWVudCBzaWduYXR1cmUgb2YgdGYuaW8uZnJvbU1lbW9yeSgpIGhhcyBiZWVuICcgK1xuICAgICAgICAgICdkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4nKTtcbiAgICAgIHJldHVybiBuZXcgUGFzc3Rocm91Z2hMb2FkZXIoe21vZGVsVG9wb2xvZ3k6IG1vZGVsQXJ0aWZhY3RzIGFzIHt9fSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExlZ2FjeSBzdXBwb3J0LlxuICAgIC8vIFRPRE8oY2Fpcyk6IFJlbW92ZSB0aGlzIGRlcHJlY2F0ZWQgQVBJLlxuICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1BsZWFzZSBjYWxsIHRmLmlvLmZyb21NZW1vcnkoKSB3aXRoIG9ubHkgb25lIGFyZ3VtZW50LiAnICtcbiAgICAgICAgJ1RoZSBhcmd1bWVudCBzaG91bGQgYmUgb2YgdHlwZSBNb2RlbEFydGlmYWN0cy4gJyArXG4gICAgICAgICdUaGUgbXVsdGktYXJndW1lbnQgc2lnbmF0dXJlIG9mIHRmLmlvLmZyb21NZW1vcnkoKSBoYXMgYmVlbiAnICtcbiAgICAgICAgJ2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLicpO1xuICAgIHJldHVybiBuZXcgUGFzc3Rocm91Z2hMb2FkZXIoe1xuICAgICAgbW9kZWxUb3BvbG9neTogbW9kZWxBcnRpZmFjdHMgYXMge30sXG4gICAgICB3ZWlnaHRTcGVjcyxcbiAgICAgIHdlaWdodERhdGEsXG4gICAgICB0cmFpbmluZ0NvbmZpZ1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBJT0hhbmRsZXIgdGhhdCBwYXNzZXMgc2F2ZWQgbW9kZWwgYXJ0aWZhY3RzIHRvIGEgY2FsbGJhY2suXG4gKlxuICogYGBganNcbiAqIGZ1bmN0aW9uIGhhbmRsZVNhdmUoYXJ0aWZhY3RzKSB7XG4gKiAgIC8vIC4uLiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgYXJ0aWZhY3RzIC4uLlxuICogICByZXR1cm4ge21vZGVsQXJ0aWZhY3RzSW5mbzogey4uLn0sIC4uLn07XG4gKiB9XG4gKlxuICogY29uc3Qgc2F2ZVJlc3VsdCA9IG1vZGVsLnNhdmUodGYuaW8ud2l0aFNhdmVIYW5kbGVyKGhhbmRsZVNhdmUpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzYXZlSGFuZGxlciBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIGBNb2RlbEFydGlmYWN0c2AgYW5kIHJldHVybnMgYVxuICogICAgIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGBTYXZlUmVzdWx0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTYXZlSGFuZGxlcihcbiAgICBzYXZlSGFuZGxlcjogKGFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpID0+XG4gICAgICAgIFByb21pc2U8U2F2ZVJlc3VsdD4pOiBJT0hhbmRsZXIge1xuICByZXR1cm4gbmV3IFBhc3N0aHJvdWdoU2F2ZXIoc2F2ZUhhbmRsZXIpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gSU9IYW5kbGVyU3luYyB0aGF0IHBhc3NlcyBzYXZlZCBtb2RlbCBhcnRpZmFjdHMgdG8gYSBjYWxsYmFjay5cbiAqXG4gKiBgYGBqc1xuICogZnVuY3Rpb24gaGFuZGxlU2F2ZShhcnRpZmFjdHMpIHtcbiAqICAgLy8gLi4uIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBhcnRpZmFjdHMgLi4uXG4gKiAgIHJldHVybiB7bW9kZWxBcnRpZmFjdHNJbmZvOiB7Li4ufSwgLi4ufTtcbiAqIH1cbiAqXG4gKiBjb25zdCBzYXZlUmVzdWx0ID0gbW9kZWwuc2F2ZSh0Zi5pby53aXRoU2F2ZUhhbmRsZXIoaGFuZGxlU2F2ZSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNhdmVIYW5kbGVyIEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgYE1vZGVsQXJ0aWZhY3RzYCBhbmQgcmV0dXJucyBhXG4gKiAgICAgYFNhdmVSZXN1bHRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNhdmVIYW5kbGVyU3luYyhcbiAgICBzYXZlSGFuZGxlcjogKGFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpID0+IFNhdmVSZXN1bHQpOiBJT0hhbmRsZXJTeW5jIHtcbiAgcmV0dXJuIG5ldyBQYXNzdGhyb3VnaFNhdmVyPFNhdmVSZXN1bHQ+KHNhdmVIYW5kbGVyKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BatchMatMul } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the dot product of two matrices, A * B. These must be matrices.\n *\n * ```js\n * const a = tf.tensor2d([1, 2], [1, 2]);\n * const b = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * a.matMul(b).print(); // or tf.matMul(a, b)\n * ```\n * @param a First matrix in dot product operation.\n * @param b Second matrix in dot product operation.\n * @param transposeA If true, `a` is transposed before multiplication.\n * @param transposeB If true, `b` is transposed before multiplication.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction matMul_(a, b, transposeA = false, transposeB = false) {\n let $a = convertToTensor(a, 'a', 'matMul');\n let $b = convertToTensor(b, 'b', 'matMul');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n const attrs = { transposeA, transposeB };\n return ENGINE.runKernel(BatchMatMul, inputs, attrs);\n}\nexport const matMul = /* @__PURE__ */ op({ matMul_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0X211bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21hdF9tdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsV0FBVyxFQUFzQyxNQUFNLGlCQUFpQixDQUFDO0FBSWpGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLE9BQU8sQ0FDWixDQUFvQixFQUFFLENBQW9CLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFDOUQsVUFBVSxHQUFHLEtBQUs7SUFDcEIsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxNQUFNLE1BQU0sR0FBc0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBcUIsRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFDLENBQUM7SUFFekQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixXQUFXLEVBQUUsTUFBbUMsRUFDaEQsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QmF0Y2hNYXRNdWwsIEJhdGNoTWF0TXVsQXR0cnMsIEJhdGNoTWF0TXVsSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBtYXRyaWNlcywgQSAqIEIuIFRoZXNlIG11c3QgYmUgbWF0cmljZXMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IyZChbMSwgMl0sIFsxLCAyXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pO1xuICpcbiAqIGEubWF0TXVsKGIpLnByaW50KCk7ICAvLyBvciB0Zi5tYXRNdWwoYSwgYilcbiAqIGBgYFxuICogQHBhcmFtIGEgRmlyc3QgbWF0cml4IGluIGRvdCBwcm9kdWN0IG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBiIFNlY29uZCBtYXRyaXggaW4gZG90IHByb2R1Y3Qgb3BlcmF0aW9uLlxuICogQHBhcmFtIHRyYW5zcG9zZUEgSWYgdHJ1ZSwgYGFgIGlzIHRyYW5zcG9zZWQgYmVmb3JlIG11bHRpcGxpY2F0aW9uLlxuICogQHBhcmFtIHRyYW5zcG9zZUIgSWYgdHJ1ZSwgYGJgIGlzIHRyYW5zcG9zZWQgYmVmb3JlIG11bHRpcGxpY2F0aW9uLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gbWF0TXVsXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UsIHRyYW5zcG9zZUEgPSBmYWxzZSxcbiAgICB0cmFuc3Bvc2VCID0gZmFsc2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ21hdE11bCcpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbWF0TXVsJyk7XG4gIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICBjb25zdCBpbnB1dHM6IEJhdGNoTWF0TXVsSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG4gIGNvbnN0IGF0dHJzOiBCYXRjaE1hdE11bEF0dHJzID0ge3RyYW5zcG9zZUEsIHRyYW5zcG9zZUJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgQmF0Y2hNYXRNdWwsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgbWF0TXVsID0gLyogQF9fUFVSRV9fICovIG9wKHttYXRNdWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { OneHot } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a one-hot `tf.Tensor`. The locations represented by `indices` take\n * value `onValue` (defaults to 1), while all other locations take value\n * `offValue` (defaults to 0). If `indices` is rank `R`, the output has rank\n * `R+1` with the last axis of size `depth`.\n * `indices` used to encode prediction class must start from 0. For example,\n * if you have 3 classes of data, class 1 should be encoded as 0, class 2\n * should be 1, and class 3 should be 2.\n *\n * ```js\n * tf.oneHot(tf.tensor1d([0, 1], 'int32'), 3).print();\n * ```\n *\n * @param indices `tf.Tensor` of indices with dtype `int32`. Indices must\n * start from 0.\n * @param depth The depth of the one hot dimension.\n * @param onValue A number used to fill in the output when the index matches\n * the location.\n * @param offValue A number used to fill in the output when the index does\n * not match the location.\n * @param dtype The dtype of the output tensor, default to 'int32'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction oneHot_(indices, depth, onValue = 1, offValue = 0, dtype = 'int32') {\n if (depth < 2) {\n throw new Error(`Error in oneHot: depth must be >=2, but it is ${depth}`);\n }\n const $indices = convertToTensor(indices, 'indices', 'oneHot', 'int32');\n const inputs = { indices: $indices };\n const attrs = { dtype, depth, onValue, offValue };\n return ENGINE.runKernel(OneHot, inputs, attrs);\n}\nexport const oneHot = /* @__PURE__ */ op({ oneHot_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lX2hvdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL29uZV9ob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBSWxFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQVMsT0FBTyxDQUNaLE9BQTBCLEVBQUUsS0FBYSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFDcEUsUUFBa0IsT0FBTztJQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzNFO0lBQ0QsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhFLE1BQU0sTUFBTSxHQUFpQixFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBZ0IsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUU3RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge09uZUhvdCwgT25lSG90QXR0cnMsIE9uZUhvdElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge0RhdGFUeXBlLCBUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgb25lLWhvdCBgdGYuVGVuc29yYC4gVGhlIGxvY2F0aW9ucyByZXByZXNlbnRlZCBieSBgaW5kaWNlc2AgdGFrZVxuICogdmFsdWUgYG9uVmFsdWVgIChkZWZhdWx0cyB0byAxKSwgd2hpbGUgYWxsIG90aGVyIGxvY2F0aW9ucyB0YWtlIHZhbHVlXG4gKiBgb2ZmVmFsdWVgIChkZWZhdWx0cyB0byAwKS4gSWYgYGluZGljZXNgIGlzIHJhbmsgYFJgLCB0aGUgb3V0cHV0IGhhcyByYW5rXG4gKiBgUisxYCB3aXRoIHRoZSBsYXN0IGF4aXMgb2Ygc2l6ZSBgZGVwdGhgLlxuICogYGluZGljZXNgIHVzZWQgdG8gZW5jb2RlIHByZWRpY3Rpb24gY2xhc3MgbXVzdCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLFxuICogIGlmIHlvdSBoYXZlIDMgY2xhc3NlcyBvZiBkYXRhLCBjbGFzcyAxIHNob3VsZCBiZSBlbmNvZGVkIGFzIDAsIGNsYXNzIDJcbiAqICBzaG91bGQgYmUgMSwgYW5kIGNsYXNzIDMgc2hvdWxkIGJlIDIuXG4gKlxuICogYGBganNcbiAqIHRmLm9uZUhvdCh0Zi50ZW5zb3IxZChbMCwgMV0sICdpbnQzMicpLCAzKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGluZGljZXMgYHRmLlRlbnNvcmAgb2YgaW5kaWNlcyB3aXRoIGR0eXBlIGBpbnQzMmAuIEluZGljZXMgbXVzdFxuICogc3RhcnQgZnJvbSAwLlxuICogQHBhcmFtIGRlcHRoIFRoZSBkZXB0aCBvZiB0aGUgb25lIGhvdCBkaW1lbnNpb24uXG4gKiBAcGFyYW0gb25WYWx1ZSBBIG51bWJlciB1c2VkIHRvIGZpbGwgaW4gdGhlIG91dHB1dCB3aGVuIHRoZSBpbmRleCBtYXRjaGVzXG4gKiB0aGUgbG9jYXRpb24uXG4gKiBAcGFyYW0gb2ZmVmFsdWUgQSBudW1iZXIgdXNlZCB0byBmaWxsIGluIHRoZSBvdXRwdXQgd2hlbiB0aGUgaW5kZXggZG9lc1xuICogICAgIG5vdCBtYXRjaCB0aGUgbG9jYXRpb24uXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGR0eXBlIG9mIHRoZSBvdXRwdXQgdGVuc29yLCBkZWZhdWx0IHRvICdpbnQzMicuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5mdW5jdGlvbiBvbmVIb3RfKFxuICAgIGluZGljZXM6IFRlbnNvcnxUZW5zb3JMaWtlLCBkZXB0aDogbnVtYmVyLCBvblZhbHVlID0gMSwgb2ZmVmFsdWUgPSAwLFxuICAgIGR0eXBlOiBEYXRhVHlwZSA9ICdpbnQzMicpOiBUZW5zb3Ige1xuICBpZiAoZGVwdGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbiBvbmVIb3Q6IGRlcHRoIG11c3QgYmUgPj0yLCBidXQgaXQgaXMgJHtkZXB0aH1gKTtcbiAgfVxuICBjb25zdCAkaW5kaWNlcyA9IGNvbnZlcnRUb1RlbnNvcihpbmRpY2VzLCAnaW5kaWNlcycsICdvbmVIb3QnLCAnaW50MzInKTtcblxuICBjb25zdCBpbnB1dHM6IE9uZUhvdElucHV0cyA9IHtpbmRpY2VzOiAkaW5kaWNlc307XG4gIGNvbnN0IGF0dHJzOiBPbmVIb3RBdHRycyA9IHtkdHlwZSwgZGVwdGgsIG9uVmFsdWUsIG9mZlZhbHVlfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIE9uZUhvdCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBvbmVIb3QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe29uZUhvdF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Imag } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the imaginary part of a complex (or real) tensor.\n *\n * Given a tensor input, this operation returns a tensor of type float that is\n * the imaginary part of each element in input considered as a complex number.\n * If input is real, a tensor of all zeros is returned.\n *\n * ```js\n * const x = tf.complex([-2.25, 3.25], [4.75, 5.75]);\n * tf.imag(x).print();\n * ```\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction imag_(input) {\n const $input = convertToTensor(input, 'input', 'imag');\n const inputs = { input: $input };\n return ENGINE.runKernel(Imag, inputs);\n}\nexport const imag = /* @__PURE__ */ op({ imag_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsS0FBSyxDQUFtQixLQUFtQjtJQUNsRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV2RCxNQUFNLE1BQU0sR0FBZSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUMzQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7SW1hZywgSW1hZ0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG4vKipcbiAqIFJldHVybnMgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCAob3IgcmVhbCkgdGVuc29yLlxuICpcbiAqIEdpdmVuIGEgdGVuc29yIGlucHV0LCB0aGlzIG9wZXJhdGlvbiByZXR1cm5zIGEgdGVuc29yIG9mIHR5cGUgZmxvYXQgdGhhdCBpc1xuICogdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGVhY2ggZWxlbWVudCBpbiBpbnB1dCBjb25zaWRlcmVkIGFzIGEgY29tcGxleCBudW1iZXIuXG4gKiBJZiBpbnB1dCBpcyByZWFsLCBhIHRlbnNvciBvZiBhbGwgemVyb3MgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi5jb21wbGV4KFstMi4yNSwgMy4yNV0sIFs0Ljc1LCA1Ljc1XSk7XG4gKiB0Zi5pbWFnKHgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGltYWdfPFQgZXh0ZW5kcyBUZW5zb3I+KGlucHV0OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJGlucHV0ID0gY29udmVydFRvVGVuc29yKGlucHV0LCAnaW5wdXQnLCAnaW1hZycpO1xuXG4gIGNvbnN0IGlucHV0czogSW1hZ0lucHV0cyA9IHtpbnB1dDogJGlucHV0fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoSW1hZywgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgaW1hZyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aW1hZ199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Neg } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes `-1 * x` element-wise.\n *\n * ```js\n * const x = tf.tensor2d([1, 2, -2, 0], [2, 2]);\n *\n * x.neg().print(); // or tf.neg(x)\n * ```\n *\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction neg_(x) {\n const $x = convertToTensor(x, 'x', 'neg');\n const inputs = { x: $x };\n return ENGINE.runKernel(Neg, inputs);\n}\nexport const neg = /* @__PURE__ */ op({ neg_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbmVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsSUFBSSxDQUFtQixDQUFlO0lBQzdDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtOZWcsIE5lZ0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBgLTEgKiB4YCBlbGVtZW50LXdpc2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgLTIsIDBdLCBbMiwgMl0pO1xuICpcbiAqIHgubmVnKCkucHJpbnQoKTsgIC8vIG9yIHRmLm5lZyh4KVxuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gbmVnXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbmVnJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBOZWdJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChOZWcsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBuZWcgPSAvKiBAX19QVVJFX18gKi8gb3Aoe25lZ199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Real } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the real part of a complex (or real) tensor.\n *\n * Given a tensor input, this operation returns a tensor of type float that is\n * the real part of each element in input considered as a complex number.\n *\n * If the input is real, it simply makes a clone.\n *\n * ```js\n * const x = tf.complex([-2.25, 3.25], [4.75, 5.75]);\n * tf.real(x).print();\n * ```\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction real_(input) {\n const $input = convertToTensor(input, 'input', 'real');\n const inputs = { input: $input };\n return ENGINE.runKernel(Real, inputs);\n}\nexport const real = /* @__PURE__ */ op({ real_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JlYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsS0FBbUI7SUFDbEQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFdkQsTUFBTSxNQUFNLEdBQWUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JlYWwsIFJlYWxJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlYWwgcGFydCBvZiBhIGNvbXBsZXggKG9yIHJlYWwpIHRlbnNvci5cbiAqXG4gKiBHaXZlbiBhIHRlbnNvciBpbnB1dCwgdGhpcyBvcGVyYXRpb24gcmV0dXJucyBhIHRlbnNvciBvZiB0eXBlIGZsb2F0IHRoYXQgaXNcbiAqIHRoZSByZWFsIHBhcnQgb2YgZWFjaCBlbGVtZW50IGluIGlucHV0IGNvbnNpZGVyZWQgYXMgYSBjb21wbGV4IG51bWJlci5cbiAqXG4gKiBJZiB0aGUgaW5wdXQgaXMgcmVhbCwgaXQgc2ltcGx5IG1ha2VzIGEgY2xvbmUuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi5jb21wbGV4KFstMi4yNSwgMy4yNV0sIFs0Ljc1LCA1Ljc1XSk7XG4gKiB0Zi5yZWFsKHgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIHJlYWxfPFQgZXh0ZW5kcyBUZW5zb3I+KGlucHV0OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJGlucHV0ID0gY29udmVydFRvVGVuc29yKGlucHV0LCAnaW5wdXQnLCAncmVhbCcpO1xuXG4gIGNvbnN0IGlucHV0czogUmVhbElucHV0cyA9IHtpbnB1dDogJGlucHV0fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUmVhbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgcmVhbCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmVhbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { tidy } from '../globals';\nimport { Transpose } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { complex } from './complex';\nimport { imag } from './imag';\nimport { neg } from './neg';\nimport { op } from './operation';\nimport { real } from './real';\n/**\n * Transposes the `tf.Tensor`. Permutes the dimensions according to `perm`.\n *\n * The returned `tf.Tensor`'s dimension `i` will correspond to the input\n * dimension `perm[i]`. If `perm` is not given, it is set to `[n-1...0]`,\n * where `n` is the rank of the input `tf.Tensor`. Hence by default, this\n * operation performs a regular matrix transpose on 2-D input `tf.Tensor`s.\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4, 5, 6], [2, 3]);\n *\n * a.transpose().print(); // or tf.transpose(a)\n * ```\n *\n * @param x The tensor to transpose.\n * @param perm The permutation of the dimensions of a.\n * @param conjugate Will conjugate complex input if true.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction transpose_(x, perm, conjugate) {\n const $x = convertToTensor(x, 'x', 'transpose');\n if (perm == null) {\n perm = $x.shape.map((s, i) => i).reverse();\n }\n util.assert($x.rank === perm.length, () => `Error in transpose: rank of input ${$x.rank} ` +\n `must match length of perm ${perm}.`);\n perm.forEach(axis => {\n util.assert(axis >= 0 && axis < $x.rank, () => `All entries in 'perm' must be between 0 and ${$x.rank - 1}` +\n ` but got ${perm}`);\n });\n if ($x.rank <= 1) {\n return $x.clone();\n }\n const inputs = { x: $x };\n const attrs = { perm };\n if ($x.dtype === 'complex64') {\n return tidy(() => {\n let $real = real($x);\n let $imag = imag($x);\n $real = ENGINE.runKernel(Transpose, { x: $real }, attrs);\n $imag = ENGINE.runKernel(Transpose, { x: $imag }, attrs);\n if (conjugate) {\n $imag = neg($imag);\n }\n return complex($real, $imag);\n });\n }\n return ENGINE.runKernel(Transpose, inputs, attrs);\n}\nexport const transpose = /* @__PURE__ */ op({ transpose_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3NlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdHJhbnNwb3NlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUMsU0FBUyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDO0FBSTNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxTQUFTLFVBQVUsQ0FDZixDQUFlLEVBQUUsSUFBZSxFQUFFLFNBQW1CO0lBQ3ZELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWhELElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtRQUNoQixJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUM1QztJQUNELElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUN2QixHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDLElBQUksR0FBRztRQUNqRCw2QkFBNkIsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQ1AsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDM0IsR0FBRyxFQUFFLENBQUMsK0NBQStDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQzlELFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUU7UUFDaEIsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDbkI7SUFFRCxNQUFNLE1BQU0sR0FBb0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQW1CLEVBQUMsSUFBSSxFQUFDLENBQUM7SUFFckMsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNwQixTQUFTLEVBQUUsRUFBQyxDQUFDLEVBQUUsS0FBSyxFQUE4QixFQUNsRCxLQUFnQyxDQUFDLENBQUM7WUFDdEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ3BCLFNBQVMsRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQThCLEVBQ2xELEtBQWdDLENBQUMsQ0FBQztZQUN0QyxJQUFJLFNBQVMsRUFBRTtnQkFDYixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFNBQVMsRUFBRSxNQUFtQyxFQUM5QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge3RpZHl9IGZyb20gJy4uL2dsb2JhbHMnO1xuaW1wb3J0IHtUcmFuc3Bvc2UsIFRyYW5zcG9zZUF0dHJzLCBUcmFuc3Bvc2VJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuL2NvbXBsZXgnO1xuaW1wb3J0IHtpbWFnfSBmcm9tICcuL2ltYWcnO1xuaW1wb3J0IHtuZWd9IGZyb20gJy4vbmVnJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVhbH0gZnJvbSAnLi9yZWFsJztcblxuLyoqXG4gKiBUcmFuc3Bvc2VzIHRoZSBgdGYuVGVuc29yYC4gUGVybXV0ZXMgdGhlIGRpbWVuc2lvbnMgYWNjb3JkaW5nIHRvIGBwZXJtYC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYHRmLlRlbnNvcmAncyBkaW1lbnNpb24gYGlgIHdpbGwgY29ycmVzcG9uZCB0byB0aGUgaW5wdXRcbiAqIGRpbWVuc2lvbiBgcGVybVtpXWAuIElmIGBwZXJtYCBpcyBub3QgZ2l2ZW4sIGl0IGlzIHNldCB0byBgW24tMS4uLjBdYCxcbiAqIHdoZXJlIGBuYCBpcyB0aGUgcmFuayBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAuIEhlbmNlIGJ5IGRlZmF1bHQsIHRoaXNcbiAqIG9wZXJhdGlvbiBwZXJmb3JtcyBhIHJlZ3VsYXIgbWF0cml4IHRyYW5zcG9zZSBvbiAyLUQgaW5wdXQgYHRmLlRlbnNvcmBzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDQsIDUsIDZdLCBbMiwgM10pO1xuICpcbiAqIGEudHJhbnNwb3NlKCkucHJpbnQoKTsgIC8vIG9yIHRmLnRyYW5zcG9zZShhKVxuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIHRlbnNvciB0byB0cmFuc3Bvc2UuXG4gKiBAcGFyYW0gcGVybSBUaGUgcGVybXV0YXRpb24gb2YgdGhlIGRpbWVuc2lvbnMgb2YgYS5cbiAqIEBwYXJhbSBjb25qdWdhdGUgV2lsbCBjb25qdWdhdGUgY29tcGxleCBpbnB1dCBpZiB0cnVlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gdHJhbnNwb3NlXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIHBlcm0/OiBudW1iZXJbXSwgY29uanVnYXRlPzogYm9vbGVhbik6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICd0cmFuc3Bvc2UnKTtcblxuICBpZiAocGVybSA9PSBudWxsKSB7XG4gICAgcGVybSA9ICR4LnNoYXBlLm1hcCgocywgaSkgPT4gaSkucmV2ZXJzZSgpO1xuICB9XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gcGVybS5sZW5ndGgsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gdHJhbnNwb3NlOiByYW5rIG9mIGlucHV0ICR7JHgucmFua30gYCArXG4gICAgICAgICAgYG11c3QgbWF0Y2ggbGVuZ3RoIG9mIHBlcm0gJHtwZXJtfS5gKTtcbiAgcGVybS5mb3JFYWNoKGF4aXMgPT4ge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBheGlzID49IDAgJiYgYXhpcyA8ICR4LnJhbmssXG4gICAgICAgICgpID0+IGBBbGwgZW50cmllcyBpbiAncGVybScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICR7JHgucmFuayAtIDF9YCArXG4gICAgICAgICAgICBgIGJ1dCBnb3QgJHtwZXJtfWApO1xuICB9KTtcblxuICBpZiAoJHgucmFuayA8PSAxKSB7XG4gICAgcmV0dXJuICR4LmNsb25lKCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFRyYW5zcG9zZUlucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBUcmFuc3Bvc2VBdHRycyA9IHtwZXJtfTtcblxuICBpZiAoJHguZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgcmV0dXJuIHRpZHkoKCkgPT4ge1xuICAgICAgbGV0ICRyZWFsID0gcmVhbCgkeCk7XG4gICAgICBsZXQgJGltYWcgPSBpbWFnKCR4KTtcbiAgICAgICRyZWFsID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICBUcmFuc3Bvc2UsIHt4OiAkcmVhbH0gYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG4gICAgICAkaW1hZyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgVHJhbnNwb3NlLCB7eDogJGltYWd9IGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xuICAgICAgaWYgKGNvbmp1Z2F0ZSkge1xuICAgICAgICAkaW1hZyA9IG5lZygkaW1hZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tcGxleCgkcmVhbCwgJGltYWcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBUcmFuc3Bvc2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgdHJhbnNwb3NlID0gLyogQF9fUFVSRV9fICovIG9wKHt0cmFuc3Bvc2VffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { cast } from './cast';\nimport { matMul } from './mat_mul';\nimport { oneHot } from './one_hot';\nimport { op } from './operation';\nimport { transpose } from './transpose';\n/**\n * Computes the confusion matrix from true labels and predicted labels.\n *\n * ```js\n * const labels = tf.tensor1d([0, 1, 2, 1, 0], 'int32');\n * const predictions = tf.tensor1d([0, 2, 2, 1, 0], 'int32');\n * const numClasses = 3;\n * const out = tf.math.confusionMatrix(labels, predictions, numClasses);\n * out.print();\n * // Expected output matrix:\n * // [[2, 0, 0],\n * // [0, 1, 1],\n * // [0, 0, 1]]\n * ```\n *\n * @param labels The target labels, assumed to be 0-based integers\n * for the classes. The shape is `[numExamples]`, where\n * `numExamples` is the number of examples included.\n * @param predictions The predicted classes, assumed to be\n * 0-based integers for the classes. Must have the same shape as `labels`.\n * @param numClasses Number of all classes, as an integer.\n * Its value must be larger than the largest element in `labels` and\n * `predictions`.\n * @returns The confusion matrix as a int32-type 2D tensor. The value at\n * row `r` and column `c` is the number of times examples of actual class\n * `r` were predicted as class `c`.\n *\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nexport function confusionMatrix_(labels, predictions, numClasses) {\n const $labels = convertToTensor(labels, 'labels', 'confusionMatrix');\n const $predictions = convertToTensor(predictions, 'predictions', 'confusionMatrix');\n util.assert(numClasses == null || numClasses > 0 && Number.isInteger(numClasses), () => `If provided, numClasses must be a positive integer, ` +\n `but got ${numClasses}`);\n util.assert($labels.rank === 1, () => `Expected the rank of labels to be 1, but got ${$labels.rank}`);\n util.assert($predictions.rank === 1, () => `Expected the rank of predictions to be 1, ` +\n `but got ${$predictions.rank}`);\n util.assert($labels.shape[0] === $predictions.shape[0], () => `Mismatch in the number of examples: ` +\n `${$labels.shape[0]} vs. ${$predictions.shape[0]}. ` +\n `Labels and predictions should have the same number of elements.`);\n util.assert(numClasses > 0 && Number.isInteger(numClasses), () => `numClasses is required to be a positive integer, but got ` +\n `${numClasses}`);\n // TODO(cais): In the future, if oneHot supports tensors inputs for\n // `numClasses`, `confusionMatrix` can make `numClasses` optional.\n const oneHotLabels = oneHot(cast($labels, 'int32'), numClasses);\n const oneHotPredictions = oneHot(cast($predictions, 'int32'), numClasses);\n const oneHotLabelsT = transpose(oneHotLabels);\n const product = matMul(oneHotLabelsT, oneHotPredictions);\n return cast(product, 'int32');\n}\nexport const confusionMatrix = /* @__PURE__ */ op({ confusionMatrix_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZnVzaW9uX21hdHJpeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbmZ1c2lvbl9tYXRyaXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsTUFBMkIsRUFBRSxXQUFnQyxFQUM3RCxVQUFrQjtJQUNwQixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sWUFBWSxHQUNkLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFbkUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFDcEUsR0FBRyxFQUFFLENBQUMsc0RBQXNEO1FBQ3hELFdBQVcsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNsQixHQUFHLEVBQUUsQ0FBQyxnREFBZ0QsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDdkIsR0FBRyxFQUFFLENBQUMsNENBQTRDO1FBQzlDLFdBQVcsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzFDLEdBQUcsRUFBRSxDQUFDLHNDQUFzQztRQUN4QyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNwRCxpRUFBaUUsQ0FBQyxDQUFDO0lBQzNFLElBQUksQ0FBQyxNQUFNLENBQ1AsVUFBVSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUM5QyxHQUFHLEVBQUUsQ0FBQywyREFBMkQ7UUFDN0QsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLG1FQUFtRTtJQUNuRSxvRUFBb0U7SUFFcEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFhLENBQUM7SUFDNUUsTUFBTSxpQkFBaUIsR0FDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFhLENBQUM7SUFDaEUsTUFBTSxhQUFhLEdBQWEsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hELE1BQU0sT0FBTyxHQUFhLE1BQU0sQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vY2FzdCc7XG5pbXBvcnQge21hdE11bH0gZnJvbSAnLi9tYXRfbXVsJztcbmltcG9ydCB7b25lSG90fSBmcm9tICcuL29uZV9ob3QnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vdHJhbnNwb3NlJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgY29uZnVzaW9uIG1hdHJpeCBmcm9tIHRydWUgbGFiZWxzIGFuZCBwcmVkaWN0ZWQgbGFiZWxzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBsYWJlbHMgPSB0Zi50ZW5zb3IxZChbMCwgMSwgMiwgMSwgMF0sICdpbnQzMicpO1xuICogY29uc3QgcHJlZGljdGlvbnMgPSB0Zi50ZW5zb3IxZChbMCwgMiwgMiwgMSwgMF0sICdpbnQzMicpO1xuICogY29uc3QgbnVtQ2xhc3NlcyA9IDM7XG4gKiBjb25zdCBvdXQgPSB0Zi5tYXRoLmNvbmZ1c2lvbk1hdHJpeChsYWJlbHMsIHByZWRpY3Rpb25zLCBudW1DbGFzc2VzKTtcbiAqIG91dC5wcmludCgpO1xuICogLy8gRXhwZWN0ZWQgb3V0cHV0IG1hdHJpeDpcbiAqIC8vIFtbMiwgMCwgMF0sXG4gKiAvLyAgWzAsIDEsIDFdLFxuICogLy8gIFswLCAwLCAxXV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBsYWJlbHMgVGhlIHRhcmdldCBsYWJlbHMsIGFzc3VtZWQgdG8gYmUgMC1iYXNlZCBpbnRlZ2Vyc1xuICogICBmb3IgdGhlIGNsYXNzZXMuIFRoZSBzaGFwZSBpcyBgW251bUV4YW1wbGVzXWAsIHdoZXJlXG4gKiAgIGBudW1FeGFtcGxlc2AgaXMgdGhlIG51bWJlciBvZiBleGFtcGxlcyBpbmNsdWRlZC5cbiAqIEBwYXJhbSBwcmVkaWN0aW9ucyBUaGUgcHJlZGljdGVkIGNsYXNzZXMsIGFzc3VtZWQgdG8gYmVcbiAqICAgMC1iYXNlZCBpbnRlZ2VycyBmb3IgdGhlIGNsYXNzZXMuIE11c3QgaGF2ZSB0aGUgc2FtZSBzaGFwZSBhcyBgbGFiZWxzYC5cbiAqIEBwYXJhbSBudW1DbGFzc2VzIE51bWJlciBvZiBhbGwgY2xhc3NlcywgYXMgYW4gaW50ZWdlci5cbiAqICAgSXRzIHZhbHVlIG11c3QgYmUgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3QgZWxlbWVudCBpbiBgbGFiZWxzYCBhbmRcbiAqICAgYHByZWRpY3Rpb25zYC5cbiAqIEByZXR1cm5zIFRoZSBjb25mdXNpb24gbWF0cml4IGFzIGEgaW50MzItdHlwZSAyRCB0ZW5zb3IuIFRoZSB2YWx1ZSBhdFxuICogICByb3cgYHJgIGFuZCBjb2x1bW4gYGNgIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgZXhhbXBsZXMgb2YgYWN0dWFsIGNsYXNzXG4gKiAgIGByYCB3ZXJlIHByZWRpY3RlZCBhcyBjbGFzcyBgY2AuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnRXZhbHVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25mdXNpb25NYXRyaXhfKFxuICAgIGxhYmVsczogVGVuc29yMUR8VGVuc29yTGlrZSwgcHJlZGljdGlvbnM6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgbnVtQ2xhc3NlczogbnVtYmVyKTogVGVuc29yMkQge1xuICBjb25zdCAkbGFiZWxzID0gY29udmVydFRvVGVuc29yKGxhYmVscywgJ2xhYmVscycsICdjb25mdXNpb25NYXRyaXgnKTtcbiAgY29uc3QgJHByZWRpY3Rpb25zID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ2NvbmZ1c2lvbk1hdHJpeCcpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgbnVtQ2xhc3NlcyA9PSBudWxsIHx8IG51bUNsYXNzZXMgPiAwICYmIE51bWJlci5pc0ludGVnZXIobnVtQ2xhc3NlcyksXG4gICAgICAoKSA9PiBgSWYgcHJvdmlkZWQsIG51bUNsYXNzZXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGAgK1xuICAgICAgICAgIGBidXQgZ290ICR7bnVtQ2xhc3Nlc31gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkbGFiZWxzLnJhbmsgPT09IDEsXG4gICAgICAoKSA9PiBgRXhwZWN0ZWQgdGhlIHJhbmsgb2YgbGFiZWxzIHRvIGJlIDEsIGJ1dCBnb3QgJHskbGFiZWxzLnJhbmt9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHByZWRpY3Rpb25zLnJhbmsgPT09IDEsXG4gICAgICAoKSA9PiBgRXhwZWN0ZWQgdGhlIHJhbmsgb2YgcHJlZGljdGlvbnMgdG8gYmUgMSwgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgJHskcHJlZGljdGlvbnMucmFua31gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkbGFiZWxzLnNoYXBlWzBdID09PSAkcHJlZGljdGlvbnMuc2hhcGVbMF0sXG4gICAgICAoKSA9PiBgTWlzbWF0Y2ggaW4gdGhlIG51bWJlciBvZiBleGFtcGxlczogYCArXG4gICAgICAgICAgYCR7JGxhYmVscy5zaGFwZVswXX0gdnMuICR7JHByZWRpY3Rpb25zLnNoYXBlWzBdfS4gYCArXG4gICAgICAgICAgYExhYmVscyBhbmQgcHJlZGljdGlvbnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIG51bUNsYXNzZXMgPiAwICYmIE51bWJlci5pc0ludGVnZXIobnVtQ2xhc3NlcyksXG4gICAgICAoKSA9PiBgbnVtQ2xhc3NlcyBpcyByZXF1aXJlZCB0byBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYCR7bnVtQ2xhc3Nlc31gKTtcbiAgLy8gVE9ETyhjYWlzKTogSW4gdGhlIGZ1dHVyZSwgaWYgb25lSG90IHN1cHBvcnRzIHRlbnNvcnMgaW5wdXRzIGZvclxuICAvLyAgIGBudW1DbGFzc2VzYCwgYGNvbmZ1c2lvbk1hdHJpeGAgY2FuIG1ha2UgYG51bUNsYXNzZXNgIG9wdGlvbmFsLlxuXG4gIGNvbnN0IG9uZUhvdExhYmVscyA9IG9uZUhvdChjYXN0KCRsYWJlbHMsICdpbnQzMicpLCBudW1DbGFzc2VzKSBhcyBUZW5zb3IyRDtcbiAgY29uc3Qgb25lSG90UHJlZGljdGlvbnMgPVxuICAgICAgb25lSG90KGNhc3QoJHByZWRpY3Rpb25zLCAnaW50MzInKSwgbnVtQ2xhc3NlcykgYXMgVGVuc29yMkQ7XG4gIGNvbnN0IG9uZUhvdExhYmVsc1Q6IFRlbnNvcjJEID0gdHJhbnNwb3NlKG9uZUhvdExhYmVscyk7XG4gIGNvbnN0IHByb2R1Y3Q6IFRlbnNvcjJEID0gbWF0TXVsKG9uZUhvdExhYmVsc1QsIG9uZUhvdFByZWRpY3Rpb25zKTtcbiAgcmV0dXJuIGNhc3QocHJvZHVjdCwgJ2ludDMyJyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb25mdXNpb25NYXRyaXggPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NvbmZ1c2lvbk1hdHJpeF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-3 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor3d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor3d([[[1], [2]], [[3], [4]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor3d([1, 2, 3, 4], [2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. If not provided, it is inferred from\n * `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor3d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 3) {\n throw new Error('tensor3d() requires shape to have three numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 3 && inferredShape.length !== 1) {\n throw new Error('tensor3d() requires values to be number[][][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor3d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3IzZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUFFLEtBQWdDLEVBQ3RELEtBQWdCO0lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0tBQ3BFO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsa0VBQWtFLENBQUMsQ0FBQztLQUN6RTtJQUNELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUMvQyxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCxrQkFBa0IsQ0FBQyxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFhLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IzRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTNEfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk51bGx9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHttYWtlVGVuc29yfSBmcm9tICcuL3RlbnNvcl9vcHNfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyByYW5rLTMgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBgdGYudGVuc29yYCwgYnV0IGluIGdlbmVyYWxcbiAqIHdlIHJlY29tbWVuZCB1c2luZyBgdGYudGVuc29yM2RgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogIGBgYGpzXG4gKiAvLyBQYXNzIGEgbmVzdGVkIGFycmF5LlxuICogdGYudGVuc29yM2QoW1tbMV0sIFsyXV0sIFtbM10sIFs0XV1dKS5wcmludCgpO1xuICogYGBgXG4gKiBgYGBqc1xuICogLy8gUGFzcyBhIGZsYXQgYXJyYXkgYW5kIHNwZWNpZnkgYSBzaGFwZS5cbiAqIHRmLnRlbnNvcjNkKFsxLCAyLCAzLCA0XSwgWzIsIDIsIDFdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIG9mIHRoZSB0ZW5zb3IuIENhbiBiZSBuZXN0ZWQgYXJyYXkgb2YgbnVtYmVycyxcbiAqICAgICBvciBhIGZsYXQgYXJyYXksIG9yIGEgYFR5cGVkQXJyYXlgLlxuICogQHBhcmFtIHNoYXBlIFRoZSBzaGFwZSBvZiB0aGUgdGVuc29yLiBJZiBub3QgcHJvdmlkZWQsICBpdCBpcyBpbmZlcnJlZCBmcm9tXG4gKiAgICAgYHZhbHVlc2AuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3IzZChcbiAgICB2YWx1ZXM6IFRlbnNvckxpa2UzRCwgc2hhcGU/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgZHR5cGU/OiBEYXRhVHlwZSk6IFRlbnNvcjNEIHtcbiAgYXNzZXJ0Tm9uTnVsbCh2YWx1ZXMpO1xuICBpZiAoc2hhcGUgIT0gbnVsbCAmJiBzaGFwZS5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RlbnNvcjNkKCkgcmVxdWlyZXMgc2hhcGUgdG8gaGF2ZSB0aHJlZSBudW1iZXJzJyk7XG4gIH1cbiAgY29uc3QgaW5mZXJyZWRTaGFwZSA9IGluZmVyU2hhcGUodmFsdWVzLCBkdHlwZSk7XG4gIGlmIChpbmZlcnJlZFNoYXBlLmxlbmd0aCAhPT0gMyAmJiBpbmZlcnJlZFNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RlbnNvcjNkKCkgcmVxdWlyZXMgdmFsdWVzIHRvIGJlIG51bWJlcltdW11bXSBvciBmbGF0L1R5cGVkQXJyYXknKTtcbiAgfVxuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggPT09IDEgJiYgc2hhcGUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RlbnNvcjNkKCkgcmVxdWlyZXMgc2hhcGUgdG8gYmUgcHJvdmlkZWQgd2hlbiBgdmFsdWVzYCAnICtcbiAgICAgICAgJ2FyZSBhIGZsYXQgYXJyYXknKTtcbiAgfVxuICByZXR1cm4gbWFrZVRlbnNvcih2YWx1ZXMsIHNoYXBlLCBpbmZlcnJlZFNoYXBlLCBkdHlwZSkgYXMgVGVuc29yM0Q7XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { env } from '../environment';\nimport { Draw, FromPixels } from '../kernel_names';\nimport { getKernel } from '../kernel_registry';\nimport { Tensor } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { op } from './operation';\nimport { tensor3d } from './tensor3d';\nlet fromPixels2DContext;\nlet hasToPixelsWarned = false;\n/**\n * Creates a `tf.Tensor` from an image.\n *\n * ```js\n * const image = new ImageData(1, 1);\n * image.data[0] = 100;\n * image.data[1] = 150;\n * image.data[2] = 200;\n * image.data[3] = 255;\n *\n * tf.browser.fromPixels(image).print();\n * ```\n *\n * @param pixels The input image to construct the tensor from. The\n * supported image types are all 4-channel. You can also pass in an image\n * object with following attributes:\n * `{data: Uint8Array; width: number; height: number}`\n * @param numChannels The number of channels of the output tensor. A\n * numChannels value less than 4 allows you to ignore channels. Defaults to\n * 3 (ignores alpha channel of input image).\n *\n * @returns A Tensor3D with the shape `[height, width, numChannels]`.\n *\n * Note: fromPixels can be lossy in some cases, same image may result in\n * slightly different tensor values, if rendered by different rendering\n * engines. This means that results from different browsers, or even same\n * browser with CPU and GPU rendering engines can be different. See discussion\n * in details:\n * https://github.com/tensorflow/tfjs/issues/5482\n *\n * @doc {heading: 'Browser', namespace: 'browser', ignoreCI: true}\n */\nfunction fromPixels_(pixels, numChannels = 3) {\n // Sanity checks.\n if (numChannels > 4) {\n throw new Error('Cannot construct Tensor with more than 4 channels from pixels.');\n }\n if (pixels == null) {\n throw new Error('pixels passed to tf.browser.fromPixels() can not be null');\n }\n let isPixelData = false;\n let isImageData = false;\n let isVideo = false;\n let isImage = false;\n let isCanvasLike = false;\n let isImageBitmap = false;\n if (pixels.data instanceof Uint8Array) {\n isPixelData = true;\n }\n else if (typeof (ImageData) !== 'undefined' && pixels instanceof ImageData) {\n isImageData = true;\n }\n else if (typeof (HTMLVideoElement) !== 'undefined' &&\n pixels instanceof HTMLVideoElement) {\n isVideo = true;\n }\n else if (typeof (HTMLImageElement) !== 'undefined' &&\n pixels instanceof HTMLImageElement) {\n isImage = true;\n // tslint:disable-next-line: no-any\n }\n else if (pixels.getContext != null) {\n isCanvasLike = true;\n }\n else if (typeof (ImageBitmap) !== 'undefined' && pixels instanceof ImageBitmap) {\n isImageBitmap = true;\n }\n else {\n throw new Error('pixels passed to tf.browser.fromPixels() must be either an ' +\n `HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData ` +\n `in browser, or OffscreenCanvas, ImageData in webworker` +\n ` or {data: Uint32Array, width: number, height: number}, ` +\n `but was ${pixels.constructor.name}`);\n }\n // If the current backend has 'FromPixels' registered, it has a more\n // efficient way of handling pixel uploads, so we call that.\n const kernel = getKernel(FromPixels, ENGINE.backendName);\n if (kernel != null) {\n const inputs = { pixels };\n const attrs = { numChannels };\n return ENGINE.runKernel(FromPixels, inputs, attrs);\n }\n const [width, height] = isVideo ?\n [\n pixels.videoWidth,\n pixels.videoHeight\n ] :\n [pixels.width, pixels.height];\n let vals;\n if (isCanvasLike) {\n vals =\n // tslint:disable-next-line:no-any\n pixels.getContext('2d').getImageData(0, 0, width, height).data;\n }\n else if (isImageData || isPixelData) {\n vals = pixels.data;\n }\n else if (isImage || isVideo || isImageBitmap) {\n if (fromPixels2DContext == null) {\n if (typeof document === 'undefined') {\n if (typeof OffscreenCanvas !== 'undefined' &&\n typeof OffscreenCanvasRenderingContext2D !== 'undefined') {\n // @ts-ignore\n fromPixels2DContext = new OffscreenCanvas(1, 1).getContext('2d');\n }\n else {\n throw new Error('Cannot parse input in current context. ' +\n 'Reason: OffscreenCanvas Context2D rendering is not supported.');\n }\n }\n else {\n fromPixels2DContext = document.createElement('canvas').getContext('2d', { willReadFrequently: true });\n }\n }\n fromPixels2DContext.canvas.width = width;\n fromPixels2DContext.canvas.height = height;\n fromPixels2DContext.drawImage(pixels, 0, 0, width, height);\n vals = fromPixels2DContext.getImageData(0, 0, width, height).data;\n }\n let values;\n if (numChannels === 4) {\n values = new Int32Array(vals);\n }\n else {\n const numPixels = width * height;\n values = new Int32Array(numPixels * numChannels);\n for (let i = 0; i < numPixels; i++) {\n for (let channel = 0; channel < numChannels; ++channel) {\n values[i * numChannels + channel] = vals[i * 4 + channel];\n }\n }\n }\n const outShape = [height, width, numChannels];\n return tensor3d(values, outShape, 'int32');\n}\n// Helper functions for |fromPixelsAsync| to check whether the input can\n// be wrapped into imageBitmap.\nfunction isPixelData(pixels) {\n return (pixels != null) && (pixels.data instanceof Uint8Array);\n}\nfunction isImageBitmapFullySupported() {\n return typeof window !== 'undefined' &&\n typeof (ImageBitmap) !== 'undefined' &&\n window.hasOwnProperty('createImageBitmap');\n}\nfunction isNonEmptyPixels(pixels) {\n return pixels != null && pixels.width !== 0 && pixels.height !== 0;\n}\nfunction canWrapPixelsToImageBitmap(pixels) {\n return isImageBitmapFullySupported() && !(pixels instanceof ImageBitmap) &&\n isNonEmptyPixels(pixels) && !isPixelData(pixels);\n}\n/**\n * Creates a `tf.Tensor` from an image in async way.\n *\n * ```js\n * const image = new ImageData(1, 1);\n * image.data[0] = 100;\n * image.data[1] = 150;\n * image.data[2] = 200;\n * image.data[3] = 255;\n *\n * (await tf.browser.fromPixelsAsync(image)).print();\n * ```\n * This API is the async version of fromPixels. The API will first\n * check |WRAP_TO_IMAGEBITMAP| flag, and try to wrap the input to\n * imageBitmap if the flag is set to true.\n *\n * @param pixels The input image to construct the tensor from. The\n * supported image types are all 4-channel. You can also pass in an image\n * object with following attributes:\n * `{data: Uint8Array; width: number; height: number}`\n * @param numChannels The number of channels of the output tensor. A\n * numChannels value less than 4 allows you to ignore channels. Defaults to\n * 3 (ignores alpha channel of input image).\n *\n * @doc {heading: 'Browser', namespace: 'browser', ignoreCI: true}\n */\nexport async function fromPixelsAsync(pixels, numChannels = 3) {\n let inputs = null;\n // Check whether the backend needs to wrap |pixels| to imageBitmap and\n // whether |pixels| can be wrapped to imageBitmap.\n if (env().getBool('WRAP_TO_IMAGEBITMAP') &&\n canWrapPixelsToImageBitmap(pixels)) {\n // Force the imageBitmap creation to not do any premultiply alpha\n // ops.\n let imageBitmap;\n try {\n // wrap in try-catch block, because createImageBitmap may not work\n // properly in some browsers, e.g.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1335594\n // tslint:disable-next-line: no-any\n imageBitmap = await createImageBitmap(pixels, { premultiplyAlpha: 'none' });\n }\n catch (e) {\n imageBitmap = null;\n }\n // createImageBitmap will clip the source size.\n // In some cases, the input will have larger size than its content.\n // E.g. new Image(10, 10) but with 1 x 1 content. Using\n // createImageBitmap will clip the size from 10 x 10 to 1 x 1, which\n // is not correct. We should avoid wrapping such resouce to\n // imageBitmap.\n if (imageBitmap != null && imageBitmap.width === pixels.width &&\n imageBitmap.height === pixels.height) {\n inputs = imageBitmap;\n }\n else {\n inputs = pixels;\n }\n }\n else {\n inputs = pixels;\n }\n return fromPixels_(inputs, numChannels);\n}\nfunction validateImgTensor(img) {\n if (img.rank !== 2 && img.rank !== 3) {\n throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${img.rank}.`);\n }\n const depth = img.rank === 2 ? 1 : img.shape[2];\n if (depth > 4 || depth === 2) {\n throw new Error(`toPixels only supports depth of size ` +\n `1, 3 or 4 but got ${depth}`);\n }\n if (img.dtype !== 'float32' && img.dtype !== 'int32') {\n throw new Error(`Unsupported type for toPixels: ${img.dtype}.` +\n ` Please use float32 or int32 tensors.`);\n }\n}\nfunction validateImageOptions(imageOptions) {\n const alpha = (imageOptions === null || imageOptions === void 0 ? void 0 : imageOptions.alpha) || 1;\n if (alpha > 1 || alpha < 0) {\n throw new Error(`Alpha value ${alpha} is suppoed to be in range [0 - 1].`);\n }\n}\n/**\n * Draws a `tf.Tensor` of pixel values to a byte array or optionally a\n * canvas.\n *\n * When the dtype of the input is 'float32', we assume values in the range\n * [0-1]. Otherwise, when input is 'int32', we assume values in the range\n * [0-255].\n *\n * Returns a promise that resolves when the canvas has been drawn to.\n *\n * @param img A rank-2 tensor with shape `[height, width]`, or a rank-3 tensor\n * of shape `[height, width, numChannels]`. If rank-2, draws grayscale. If\n * rank-3, must have depth of 1, 3 or 4. When depth of 1, draws\n * grayscale. When depth of 3, we draw with the first three components of\n * the depth dimension corresponding to r, g, b and alpha = 1. When depth of\n * 4, all four components of the depth dimension correspond to r, g, b, a.\n * @param canvas The canvas to draw to.\n *\n * @doc {heading: 'Browser', namespace: 'browser'}\n */\nexport async function toPixels(img, canvas) {\n let $img = convertToTensor(img, 'img', 'toPixels');\n if (!(img instanceof Tensor)) {\n // Assume int32 if user passed a native array.\n const originalImgTensor = $img;\n $img = cast(originalImgTensor, 'int32');\n originalImgTensor.dispose();\n }\n validateImgTensor($img);\n const [height, width] = $img.shape.slice(0, 2);\n const depth = $img.rank === 2 ? 1 : $img.shape[2];\n const data = await $img.data();\n const multiplier = $img.dtype === 'float32' ? 255 : 1;\n const bytes = new Uint8ClampedArray(width * height * 4);\n for (let i = 0; i < height * width; ++i) {\n const rgba = [0, 0, 0, 255];\n for (let d = 0; d < depth; d++) {\n const value = data[i * depth + d];\n if ($img.dtype === 'float32') {\n if (value < 0 || value > 1) {\n throw new Error(`Tensor values for a float32 Tensor must be in the ` +\n `range [0 - 1] but encountered ${value}.`);\n }\n }\n else if ($img.dtype === 'int32') {\n if (value < 0 || value > 255) {\n throw new Error(`Tensor values for a int32 Tensor must be in the ` +\n `range [0 - 255] but encountered ${value}.`);\n }\n }\n if (depth === 1) {\n rgba[0] = value * multiplier;\n rgba[1] = value * multiplier;\n rgba[2] = value * multiplier;\n }\n else {\n rgba[d] = value * multiplier;\n }\n }\n const j = i * 4;\n bytes[j + 0] = Math.round(rgba[0]);\n bytes[j + 1] = Math.round(rgba[1]);\n bytes[j + 2] = Math.round(rgba[2]);\n bytes[j + 3] = Math.round(rgba[3]);\n }\n if (canvas != null) {\n if (!hasToPixelsWarned) {\n const kernel = getKernel(Draw, ENGINE.backendName);\n if (kernel != null) {\n console.warn('tf.browser.toPixels is not efficient to draw tensor on canvas. ' +\n 'Please try tf.browser.draw instead.');\n hasToPixelsWarned = true;\n }\n }\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n const imageData = new ImageData(bytes, width, height);\n ctx.putImageData(imageData, 0, 0);\n }\n if ($img !== img) {\n $img.dispose();\n }\n return bytes;\n}\n/**\n * Draws a `tf.Tensor` to a canvas.\n *\n * When the dtype of the input is 'float32', we assume values in the range\n * [0-1]. Otherwise, when input is 'int32', we assume values in the range\n * [0-255].\n *\n * @param image The tensor to draw on the canvas. Must match one of\n * these shapes:\n * - Rank-2 with shape `[height, width`]: Drawn as grayscale.\n * - Rank-3 with shape `[height, width, 1]`: Drawn as grayscale.\n * - Rank-3 with shape `[height, width, 3]`: Drawn as RGB with alpha set in\n * `imageOptions` (defaults to 1, which is opaque).\n * - Rank-3 with shape `[height, width, 4]`: Drawn as RGBA.\n * @param canvas The canvas to draw to.\n * @param options The configuration arguments for image to be drawn and the\n * canvas to draw to.\n *\n * @doc {heading: 'Browser', namespace: 'browser'}\n */\nexport function draw(image, canvas, options) {\n let $img = convertToTensor(image, 'img', 'draw');\n if (!(image instanceof Tensor)) {\n // Assume int32 if user passed a native array.\n const originalImgTensor = $img;\n $img = cast(originalImgTensor, 'int32');\n originalImgTensor.dispose();\n }\n validateImgTensor($img);\n validateImageOptions(options === null || options === void 0 ? void 0 : options.imageOptions);\n const inputs = { image: $img };\n const attrs = { canvas, options };\n ENGINE.runKernel(Draw, inputs, attrs);\n}\nexport const fromPixels = /* @__PURE__ */ op({ fromPixels_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLElBQUksRUFBeUIsVUFBVSxFQUFvQyxNQUFNLGlCQUFpQixDQUFDO0FBQzNHLE9BQU8sRUFBQyxTQUFTLEVBQWUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsTUFBTSxFQUFxQixNQUFNLFdBQVcsQ0FBQztBQUVyRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEMsSUFBSSxtQkFBNkMsQ0FBQztBQUNsRCxJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUU5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUNILFNBQVMsV0FBVyxDQUNoQixNQUM0QixFQUM1QixXQUFXLEdBQUcsQ0FBQztJQUNqQixpQkFBaUI7SUFDakIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0VBQWdFLENBQUMsQ0FBQztLQUN2RTtJQUNELElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7S0FDN0U7SUFDRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDeEIs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eEMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDN0I7SUFDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixvQkFBb0IsQ0FBQyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSxDQUFDLENBQUM7SUFFNUMsTUFBTSxNQUFNLEdBQWUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQWMsRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLFNBQVMsQ0FDWixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7RHJhdywgRHJhd0F0dHJzLCBEcmF3SW5wdXRzLCBGcm9tUGl4ZWxzLCBGcm9tUGl4ZWxzQXR0cnMsIEZyb21QaXhlbHNJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge2dldEtlcm5lbCwgTmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjJELCBUZW5zb3IzRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7RHJhd09wdGlvbnMsIEltYWdlT3B0aW9ucywgUGl4ZWxEYXRhLCBUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7dGVuc29yM2R9IGZyb20gJy4vdGVuc29yM2QnO1xuXG5sZXQgZnJvbVBpeGVsczJEQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xubGV0IGhhc1RvUGl4ZWxzV2FybmVkID0gZmFsc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIGZyb20gYW4gaW1hZ2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGltYWdlID0gbmV3IEltYWdlRGF0YSgxLCAxKTtcbiAqIGltYWdlLmRhdGFbMF0gPSAxMDA7XG4gKiBpbWFnZS5kYXRhWzFdID0gMTUwO1xuICogaW1hZ2UuZGF0YVsyXSA9IDIwMDtcbiAqIGltYWdlLmRhdGFbM10gPSAyNTU7XG4gKlxuICogdGYuYnJvd3Nlci5mcm9tUGl4ZWxzKGltYWdlKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBpeGVscyBUaGUgaW5wdXQgaW1hZ2UgdG8gY29uc3RydWN0IHRoZSB0ZW5zb3IgZnJvbS4gVGhlXG4gKiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMgYXJlIGFsbCA0LWNoYW5uZWwuIFlvdSBjYW4gYWxzbyBwYXNzIGluIGFuIGltYWdlXG4gKiBvYmplY3Qgd2l0aCBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIGB7ZGF0YTogVWludDhBcnJheTsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9YFxuICogQHBhcmFtIG51bUNoYW5uZWxzIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIEFcbiAqIG51bUNoYW5uZWxzIHZhbHVlIGxlc3MgdGhhbiA0IGFsbG93cyB5b3UgdG8gaWdub3JlIGNoYW5uZWxzLiBEZWZhdWx0cyB0b1xuICogMyAoaWdub3JlcyBhbHBoYSBjaGFubmVsIG9mIGlucHV0IGltYWdlKS5cbiAqXG4gKiBAcmV0dXJucyBBIFRlbnNvcjNEIHdpdGggdGhlIHNoYXBlIGBbaGVpZ2h0LCB3aWR0aCwgbnVtQ2hhbm5lbHNdYC5cbiAqXG4gKiBOb3RlOiBmcm9tUGl4ZWxzIGNhbiBiZSBsb3NzeSBpbiBzb21lIGNhc2VzLCBzYW1lIGltYWdlIG1heSByZXN1bHQgaW5cbiAqIHNsaWdodGx5IGRpZmZlcmVudCB0ZW5zb3IgdmFsdWVzLCBpZiByZW5kZXJlZCBieSBkaWZmZXJlbnQgcmVuZGVyaW5nXG4gKiBlbmdpbmVzLiBUaGlzIG1lYW5zIHRoYXQgcmVzdWx0cyBmcm9tIGRpZmZlcmVudCBicm93c2Vycywgb3IgZXZlbiBzYW1lXG4gKiBicm93c2VyIHdpdGggQ1BVIGFuZCBHUFUgcmVuZGVyaW5nIGVuZ2luZXMgY2FuIGJlIGRpZmZlcmVudC4gU2VlIGRpc2N1c3Npb25cbiAqIGluIGRldGFpbHM6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2lzc3Vlcy81NDgyXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0Jyb3dzZXInLCBuYW1lc3BhY2U6ICdicm93c2VyJywgaWdub3JlQ0k6IHRydWV9XG4gKi9cbmZ1bmN0aW9uIGZyb21QaXhlbHNfKFxuICAgIHBpeGVsczogUGl4ZWxEYXRhfEltYWdlRGF0YXxIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fFxuICAgIEhUTUxWaWRlb0VsZW1lbnR8SW1hZ2VCaXRtYXAsXG4gICAgbnVtQ2hhbm5lbHMgPSAzKTogVGVuc29yM0Qge1xuICAvLyBTYW5pdHkgY2hlY2tzLlxuICBpZiAobnVtQ2hhbm5lbHMgPiA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGNvbnN0cnVjdCBUZW5zb3Igd2l0aCBtb3JlIHRoYW4gNCBjaGFubmVscyBmcm9tIHBpeGVscy4nKTtcbiAgfVxuICBpZiAocGl4ZWxzID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BpeGVscyBwYXNzZWQgdG8gdGYuYnJvd3Nlci5mcm9tUGl4ZWxzKCkgY2FuIG5vdCBiZSBudWxsJyk7XG4gIH1cbiAgbGV0IGlzUGl4ZWxEYXRhID0gZmFsc2U7XG4gIGxldCBpc0ltYWdlRGF0YSA9IGZhbHNlO1xuICBsZXQgaXNWaWRlbyA9IGZhbHNlO1xuICBsZXQgaXNJbWFnZSA9IGZhbHNlO1xuICBsZXQgaXNDYW52YXNMaWtlID0gZmFsc2U7XG4gIGxldCBpc0ltYWdlQml0bWFwID0gZmFsc2U7XG4gIGlmICgocGl4ZWxzIGFzIFBpeGVsRGF0YSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICBpc1BpeGVsRGF0YSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgKEltYWdlRGF0YSkgIT09ICd1bmRlZmluZWQnICYmIHBpeGVscyBpbnN0YW5jZW9mIEltYWdlRGF0YSkge1xuICAgIGlzSW1hZ2VEYXRhID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVvZiAoSFRNTFZpZGVvRWxlbWVudCkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBwaXhlbHMgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaXNWaWRlbyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgKEhUTUxJbWFnZUVsZW1lbnQpICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgcGl4ZWxzIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuICAgIGlzSW1hZ2UgPSB0cnVlO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gIH0gZWxzZSBpZiAoKHBpeGVscyBhcyBhbnkpLmdldENvbnRleHQgIT0gbnVsbCkge1xuICAgIGlzQ2FudmFzTGlrZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgKEltYWdlQml0bWFwKSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGl4ZWxzIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApIHtcbiAgICBpc0ltYWdlQml0bWFwID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdwaXhlbHMgcGFzc2VkIHRvIHRmLmJyb3dzZXIuZnJvbVBpeGVscygpIG11c3QgYmUgZWl0aGVyIGFuICcgK1xuICAgICAgICBgSFRNTFZpZGVvRWxlbWVudCwgSFRNTEltYWdlRWxlbWVudCwgSFRNTENhbnZhc0VsZW1lbnQsIEltYWdlRGF0YSBgICtcbiAgICAgICAgYGluIGJyb3dzZXIsIG9yIE9mZnNjcmVlbkNhbnZhcywgSW1hZ2VEYXRhIGluIHdlYndvcmtlcmAgK1xuICAgICAgICBgIG9yIHtkYXRhOiBVaW50MzJBcnJheSwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9LCBgICtcbiAgICAgICAgYGJ1dCB3YXMgJHsocGl4ZWxzIGFzIHt9KS5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICB9XG4gIC8vIElmIHRoZSBjdXJyZW50IGJhY2tlbmQgaGFzICdGcm9tUGl4ZWxzJyByZWdpc3RlcmVkLCBpdCBoYXMgYSBtb3JlXG4gIC8vIGVmZmljaWVudCB3YXkgb2YgaGFuZGxpbmcgcGl4ZWwgdXBsb2Fkcywgc28gd2UgY2FsbCB0aGF0LlxuICBjb25zdCBrZXJuZWwgPSBnZXRLZXJuZWwoRnJvbVBpeGVscywgRU5HSU5FLmJhY2tlbmROYW1lKTtcbiAgaWYgKGtlcm5lbCAhPSBudWxsKSB7XG4gICAgY29uc3QgaW5wdXRzOiBGcm9tUGl4ZWxzSW5wdXRzID0ge3BpeGVsc307XG4gICAgY29uc3QgYXR0cnM6IEZyb21QaXhlbHNBdHRycyA9IHtudW1DaGFubmVsc307XG4gICAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgIEZyb21QaXhlbHMsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG4gIH1cblxuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSBpc1ZpZGVvID9cbiAgICAgIFtcbiAgICAgICAgKHBpeGVscyBhcyBIVE1MVmlkZW9FbGVtZW50KS52aWRlb1dpZHRoLFxuICAgICAgICAocGl4ZWxzIGFzIEhUTUxWaWRlb0VsZW1lbnQpLnZpZGVvSGVpZ2h0XG4gICAgICBdIDpcbiAgICAgIFtwaXhlbHMud2lkdGgsIHBpeGVscy5oZWlnaHRdO1xuICBsZXQgdmFsczogVWludDhDbGFtcGVkQXJyYXl8VWludDhBcnJheTtcblxuICBpZiAoaXNDYW52YXNMaWtlKSB7XG4gICAgdmFscyA9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgKHBpeGVscyBhcyBhbnkpLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gIH0gZWxzZSBpZiAoaXNJbWFnZURhdGEgfHwgaXNQaXhlbERhdGEpIHtcbiAgICB2YWxzID0gKHBpeGVscyBhcyBQaXhlbERhdGEgfCBJbWFnZURhdGEpLmRhdGE7XG4gIH0gZWxzZSBpZiAoaXNJbWFnZSB8fCBpc1ZpZGVvIHx8IGlzSW1hZ2VCaXRtYXApIHtcbiAgICBpZiAoZnJvbVBpeGVsczJEQ29udGV4dCA9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGZyb21QaXhlbHMyRENvbnRleHQgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsIDEpLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnQ2Fubm90IHBhcnNlIGlucHV0IGluIGN1cnJlbnQgY29udGV4dC4gJyArXG4gICAgICAgICAgICAgICdSZWFzb246IE9mZnNjcmVlbkNhbnZhcyBDb250ZXh0MkQgcmVuZGVyaW5nIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb21QaXhlbHMyRENvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KFxuICAgICAgICAgICAgJzJkJywge3dpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZX0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmcm9tUGl4ZWxzMkRDb250ZXh0LmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGZyb21QaXhlbHMyRENvbnRleHQuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICBmcm9tUGl4ZWxzMkRDb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgcGl4ZWxzIGFzIEhUTUxWaWRlb0VsZW1lbnQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHZhbHMgPSBmcm9tUGl4ZWxzMkRDb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICB9XG4gIGxldCB2YWx1ZXM6IEludDMyQXJyYXk7XG4gIGlmIChudW1DaGFubmVscyA9PT0gNCkge1xuICAgIHZhbHVlcyA9IG5ldyBJbnQzMkFycmF5KHZhbHMpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bVBpeGVscyA9IHdpZHRoICogaGVpZ2h0O1xuICAgIHZhbHVlcyA9IG5ldyBJbnQzMkFycmF5KG51bVBpeGVscyAqIG51bUNoYW5uZWxzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBpeGVsczsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG51bUNoYW5uZWxzOyArK2NoYW5uZWwpIHtcbiAgICAgICAgdmFsdWVzW2kgKiBudW1DaGFubmVscyArIGNoYW5uZWxdID0gdmFsc1tpICogNCArIGNoYW5uZWxdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBvdXRTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gW2hlaWdodCwgd2lkdGgsIG51bUNoYW5uZWxzXTtcbiAgcmV0dXJuIHRlbnNvcjNkKHZhbHVlcywgb3V0U2hhcGUsICdpbnQzMicpO1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB8ZnJvbVBpeGVsc0FzeW5jfCB0byBjaGVjayB3aGV0aGVyIHRoZSBpbnB1dCBjYW5cbi8vIGJlIHdyYXBwZWQgaW50byBpbWFnZUJpdG1hcC5cbmZ1bmN0aW9uIGlzUGl4ZWxEYXRhKHBpeGVsczogUGl4ZWxEYXRhfEltYWdlRGF0YXxIVE1MSW1hZ2VFbGVtZW50fFxuICAgICAgICAgICAgICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnR8SFRNTFZpZGVvRWxlbWVudHxcbiAgICAgICAgICAgICAgICAgICAgIEltYWdlQml0bWFwKTogcGl4ZWxzIGlzIFBpeGVsRGF0YSB7XG4gIHJldHVybiAocGl4ZWxzICE9IG51bGwpICYmICgocGl4ZWxzIGFzIFBpeGVsRGF0YSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xufVxuXG5mdW5jdGlvbiBpc0ltYWdlQml0bWFwRnVsbHlTdXBwb3J0ZWQoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgdHlwZW9mIChJbWFnZUJpdG1hcCkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2NyZWF0ZUltYWdlQml0bWFwJyk7XG59XG5cbmZ1bmN0aW9uIGlzTm9uRW1wdHlQaXhlbHMocGl4ZWxzOiBQaXhlbERhdGF8SW1hZ2VEYXRhfEhUTUxJbWFnZUVsZW1lbnR8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR8SW1hZ2VCaXRtYXApIHtcbiAgcmV0dXJuIHBpeGVscyAhPSBudWxsICYmIHBpeGVscy53aWR0aCAhPT0gMCAmJiBwaXhlbHMuaGVpZ2h0ICE9PSAwO1xufVxuXG5mdW5jdGlvbiBjYW5XcmFwUGl4ZWxzVG9JbWFnZUJpdG1hcChwaXhlbHM6IFBpeGVsRGF0YXxJbWFnZURhdGF8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTFZpZGVvRWxlbWVudHxJbWFnZUJpdG1hcCkge1xuICByZXR1cm4gaXNJbWFnZUJpdG1hcEZ1bGx5U3VwcG9ydGVkKCkgJiYgIShwaXhlbHMgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkgJiZcbiAgICAgIGlzTm9uRW1wdHlQaXhlbHMocGl4ZWxzKSAmJiAhaXNQaXhlbERhdGEocGl4ZWxzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYHRmLlRlbnNvcmAgZnJvbSBhbiBpbWFnZSBpbiBhc3luYyB3YXkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGltYWdlID0gbmV3IEltYWdlRGF0YSgxLCAxKTtcbiAqIGltYWdlLmRhdGFbMF0gPSAxMDA7XG4gKiBpbWFnZS5kYXRhWzFdID0gMTUwO1xuICogaW1hZ2UuZGF0YVsyXSA9IDIwMDtcbiAqIGltYWdlLmRhdGFbM10gPSAyNTU7XG4gKlxuICogKGF3YWl0IHRmLmJyb3dzZXIuZnJvbVBpeGVsc0FzeW5jKGltYWdlKSkucHJpbnQoKTtcbiAqIGBgYFxuICogVGhpcyBBUEkgaXMgdGhlIGFzeW5jIHZlcnNpb24gb2YgZnJvbVBpeGVscy4gVGhlIEFQSSB3aWxsIGZpcnN0XG4gKiBjaGVjayB8V1JBUF9UT19JTUFHRUJJVE1BUHwgZmxhZywgYW5kIHRyeSB0byB3cmFwIHRoZSBpbnB1dCB0b1xuICogaW1hZ2VCaXRtYXAgaWYgdGhlIGZsYWcgaXMgc2V0IHRvIHRydWUuXG4gKlxuICogQHBhcmFtIHBpeGVscyBUaGUgaW5wdXQgaW1hZ2UgdG8gY29uc3RydWN0IHRoZSB0ZW5zb3IgZnJvbS4gVGhlXG4gKiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMgYXJlIGFsbCA0LWNoYW5uZWwuIFlvdSBjYW4gYWxzbyBwYXNzIGluIGFuIGltYWdlXG4gKiBvYmplY3Qgd2l0aCBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIGB7ZGF0YTogVWludDhBcnJheTsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9YFxuICogQHBhcmFtIG51bUNoYW5uZWxzIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIEFcbiAqIG51bUNoYW5uZWxzIHZhbHVlIGxlc3MgdGhhbiA0IGFsbG93cyB5b3UgdG8gaWdub3JlIGNoYW5uZWxzLiBEZWZhdWx0cyB0b1xuICogMyAoaWdub3JlcyBhbHBoYSBjaGFubmVsIG9mIGlucHV0IGltYWdlKS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnQnJvd3NlcicsIG5hbWVzcGFjZTogJ2Jyb3dzZXInLCBpZ25vcmVDSTogdHJ1ZX1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZyb21QaXhlbHNBc3luYyhcbiAgICBwaXhlbHM6IFBpeGVsRGF0YXxJbWFnZURhdGF8SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudHxcbiAgICBIVE1MVmlkZW9FbGVtZW50fEltYWdlQml0bWFwLFxuICAgIG51bUNoYW5uZWxzID0gMykge1xuICBsZXQgaW5wdXRzOiBQaXhlbERhdGF8SW1hZ2VEYXRhfEhUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1lbnR8XG4gICAgICBIVE1MVmlkZW9FbGVtZW50fEltYWdlQml0bWFwID0gbnVsbDtcblxuICAvLyBDaGVjayB3aGV0aGVyIHRoZSBiYWNrZW5kIG5lZWRzIHRvIHdyYXAgfHBpeGVsc3wgdG8gaW1hZ2VCaXRtYXAgYW5kXG4gIC8vIHdoZXRoZXIgfHBpeGVsc3wgY2FuIGJlIHdyYXBwZWQgdG8gaW1hZ2VCaXRtYXAuXG4gIGlmIChlbnYoKS5nZXRCb29sKCdXUkFQX1RPX0lNQUdFQklUTUFQJykgJiZcbiAgICAgIGNhbldyYXBQaXhlbHNUb0ltYWdlQml0bWFwKHBpeGVscykpIHtcbiAgICAvLyBGb3JjZSB0aGUgaW1hZ2VCaXRtYXAgY3JlYXRpb24gdG8gbm90IGRvIGFueSBwcmVtdWx0aXBseSBhbHBoYVxuICAgIC8vIG9wcy5cbiAgICBsZXQgaW1hZ2VCaXRtYXA7XG5cbiAgICB0cnkge1xuICAgICAgLy8gd3JhcCBpbiB0cnktY2F0Y2ggYmxvY2ssIGJlY2F1c2UgY3JlYXRlSW1hZ2VCaXRtYXAgbWF5IG5vdCB3b3JrXG4gICAgICAvLyBwcm9wZXJseSBpbiBzb21lIGJyb3dzZXJzLCBlLmcuXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM1NTk0XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWFueVxuICAgICAgaW1hZ2VCaXRtYXAgPSBhd2FpdCAoY3JlYXRlSW1hZ2VCaXRtYXAgYXMgYW55KShcbiAgICAgICAgICBwaXhlbHMgYXMgSW1hZ2VCaXRtYXBTb3VyY2UsIHtwcmVtdWx0aXBseUFscGhhOiAnbm9uZSd9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpbWFnZUJpdG1hcCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlSW1hZ2VCaXRtYXAgd2lsbCBjbGlwIHRoZSBzb3VyY2Ugc2l6ZS5cbiAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgaW5wdXQgd2lsbCBoYXZlIGxhcmdlciBzaXplIHRoYW4gaXRzIGNvbnRlbnQuXG4gICAgLy8gRS5nLiBuZXcgSW1hZ2UoMTAsIDEwKSBidXQgd2l0aCAxIHggMSBjb250ZW50LiBVc2luZ1xuICAgIC8vIGNyZWF0ZUltYWdlQml0bWFwIHdpbGwgY2xpcCB0aGUgc2l6ZSBmcm9tIDEwIHggMTAgdG8gMSB4IDEsIHdoaWNoXG4gICAgLy8gaXMgbm90IGNvcnJlY3QuIFdlIHNob3VsZCBhdm9pZCB3cmFwcGluZyBzdWNoIHJlc291Y2UgdG9cbiAgICAvLyBpbWFnZUJpdG1hcC5cbiAgICBpZiAoaW1hZ2VCaXRtYXAgIT0gbnVsbCAmJiBpbWFnZUJpdG1hcC53aWR0aCA9PT0gcGl4ZWxzLndpZHRoICYmXG4gICAgICAgIGltYWdlQml0bWFwLmhlaWdodCA9PT0gcGl4ZWxzLmhlaWdodCkge1xuICAgICAgaW5wdXRzID0gaW1hZ2VCaXRtYXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0cyA9IHBpeGVscztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRzID0gcGl4ZWxzO1xuICB9XG5cbiAgcmV0dXJuIGZyb21QaXhlbHNfKGlucHV0cywgbnVtQ2hhbm5lbHMpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUltZ1RlbnNvcihpbWc6IFRlbnNvcjJEfFRlbnNvcjNEKSB7XG4gIGlmIChpbWcucmFuayAhPT0gMiAmJiBpbWcucmFuayAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHRvUGl4ZWxzIG9ubHkgc3VwcG9ydHMgcmFuayAyIG9yIDMgdGVuc29ycywgZ290IHJhbmsgJHtpbWcucmFua30uYCk7XG4gIH1cbiAgY29uc3QgZGVwdGggPSBpbWcucmFuayA9PT0gMiA/IDEgOiBpbWcuc2hhcGVbMl07XG5cbiAgaWYgKGRlcHRoID4gNCB8fCBkZXB0aCA9PT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHRvUGl4ZWxzIG9ubHkgc3VwcG9ydHMgZGVwdGggb2Ygc2l6ZSBgICtcbiAgICAgICAgYDEsIDMgb3IgNCBidXQgZ290ICR7ZGVwdGh9YCk7XG4gIH1cblxuICBpZiAoaW1nLmR0eXBlICE9PSAnZmxvYXQzMicgJiYgaW1nLmR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5zdXBwb3J0ZWQgdHlwZSBmb3IgdG9QaXhlbHM6ICR7aW1nLmR0eXBlfS5gICtcbiAgICAgICAgYCBQbGVhc2UgdXNlIGZsb2F0MzIgb3IgaW50MzIgdGVuc29ycy5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUltYWdlT3B0aW9ucyhpbWFnZU9wdGlvbnM6IEltYWdlT3B0aW9ucykge1xuICBjb25zdCBhbHBoYSA9IGltYWdlT3B0aW9ucyA/LmFscGhhIHx8IDE7XG4gIGlmIChhbHBoYSA+IDEgfHwgYWxwaGEgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBbHBoYSB2YWx1ZSAke2FscGhhfSBpcyBzdXBwb2VkIHRvIGJlIGluIHJhbmdlIFswIC0gMV0uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3cyBhIGB0Zi5UZW5zb3JgIG9mIHBpeGVsIHZhbHVlcyB0byBhIGJ5dGUgYXJyYXkgb3Igb3B0aW9uYWxseSBhXG4gKiBjYW52YXMuXG4gKlxuICogV2hlbiB0aGUgZHR5cGUgb2YgdGhlIGlucHV0IGlzICdmbG9hdDMyJywgd2UgYXNzdW1lIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIFswLTFdLiBPdGhlcndpc2UsIHdoZW4gaW5wdXQgaXMgJ2ludDMyJywgd2UgYXNzdW1lIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIFswLTI1NV0uXG4gKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjYW52YXMgaGFzIGJlZW4gZHJhd24gdG8uXG4gKlxuICogQHBhcmFtIGltZyBBIHJhbmstMiB0ZW5zb3Igd2l0aCBzaGFwZSBgW2hlaWdodCwgd2lkdGhdYCwgb3IgYSByYW5rLTMgdGVuc29yXG4gKiBvZiBzaGFwZSBgW2hlaWdodCwgd2lkdGgsIG51bUNoYW5uZWxzXWAuIElmIHJhbmstMiwgZHJhd3MgZ3JheXNjYWxlLiBJZlxuICogcmFuay0zLCBtdXN0IGhhdmUgZGVwdGggb2YgMSwgMyBvciA0LiBXaGVuIGRlcHRoIG9mIDEsIGRyYXdzXG4gKiBncmF5c2NhbGUuIFdoZW4gZGVwdGggb2YgMywgd2UgZHJhdyB3aXRoIHRoZSBmaXJzdCB0aHJlZSBjb21wb25lbnRzIG9mXG4gKiB0aGUgZGVwdGggZGltZW5zaW9uIGNvcnJlc3BvbmRpbmcgdG8gciwgZywgYiBhbmQgYWxwaGEgPSAxLiBXaGVuIGRlcHRoIG9mXG4gKiA0LCBhbGwgZm91ciBjb21wb25lbnRzIG9mIHRoZSBkZXB0aCBkaW1lbnNpb24gY29ycmVzcG9uZCB0byByLCBnLCBiLCBhLlxuICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgdG8uXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0Jyb3dzZXInLCBuYW1lc3BhY2U6ICdicm93c2VyJ31cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvUGl4ZWxzKFxuICAgIGltZzogVGVuc29yMkR8VGVuc29yM0R8VGVuc29yTGlrZSxcbiAgICBjYW52YXM/OiBIVE1MQ2FudmFzRWxlbWVudCk6IFByb21pc2U8VWludDhDbGFtcGVkQXJyYXk+IHtcbiAgbGV0ICRpbWcgPSBjb252ZXJ0VG9UZW5zb3IoaW1nLCAnaW1nJywgJ3RvUGl4ZWxzJyk7XG4gIGlmICghKGltZyBpbnN0YW5jZW9mIFRlbnNvcikpIHtcbiAgICAvLyBBc3N1bWUgaW50MzIgaWYgdXNlciBwYXNzZWQgYSBuYXRpdmUgYXJyYXkuXG4gICAgY29uc3Qgb3JpZ2luYWxJbWdUZW5zb3IgPSAkaW1nO1xuICAgICRpbWcgPSBjYXN0KG9yaWdpbmFsSW1nVGVuc29yLCAnaW50MzInKTtcbiAgICBvcmlnaW5hbEltZ1RlbnNvci5kaXNwb3NlKCk7XG4gIH1cbiAgdmFsaWRhdGVJbWdUZW5zb3IoJGltZyk7XG5cbiAgY29uc3QgW2hlaWdodCwgd2lkdGhdID0gJGltZy5zaGFwZS5zbGljZSgwLCAyKTtcbiAgY29uc3QgZGVwdGggPSAkaW1nLnJhbmsgPT09IDIgPyAxIDogJGltZy5zaGFwZVsyXTtcbiAgY29uc3QgZGF0YSA9IGF3YWl0ICRpbWcuZGF0YSgpO1xuICBjb25zdCBtdWx0aXBsaWVyID0gJGltZy5kdHlwZSA9PT0gJ2Zsb2F0MzInID8gMjU1IDogMTtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodCAqIHdpZHRoOyArK2kpIHtcbiAgICBjb25zdCByZ2JhID0gWzAsIDAsIDAsIDI1NV07XG5cbiAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRlcHRoOyBkKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtpICogZGVwdGggKyBkXTtcblxuICAgICAgaWYgKCRpbWcuZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRlbnNvciB2YWx1ZXMgZm9yIGEgZmxvYXQzMiBUZW5zb3IgbXVzdCBiZSBpbiB0aGUgYCArXG4gICAgICAgICAgICAgIGByYW5nZSBbMCAtIDFdIGJ1dCBlbmNvdW50ZXJlZCAke3ZhbHVlfS5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkaW1nLmR0eXBlID09PSAnaW50MzInKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyNTUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUZW5zb3IgdmFsdWVzIGZvciBhIGludDMyIFRlbnNvciBtdXN0IGJlIGluIHRoZSBgICtcbiAgICAgICAgICAgICAgYHJhbmdlIFswIC0gMjU1XSBidXQgZW5jb3VudGVyZWQgJHt2YWx1ZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRlcHRoID09PSAxKSB7XG4gICAgICAgIHJnYmFbMF0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICAgIHJnYmFbMV0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICAgIHJnYmFbMl0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZ2JhW2RdID0gdmFsdWUgKiBtdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGogPSBpICogNDtcbiAgICBieXRlc1tqICsgMF0gPSBNYXRoLnJvdW5kKHJnYmFbMF0pO1xuICAgIGJ5dGVzW2ogKyAxXSA9IE1hdGgucm91bmQocmdiYVsxXSk7XG4gICAgYnl0ZXNbaiArIDJdID0gTWF0aC5yb3VuZChyZ2JhWzJdKTtcbiAgICBieXRlc1tqICsgM10gPSBNYXRoLnJvdW5kKHJnYmFbM10pO1xuICB9XG5cbiAgaWYgKGNhbnZhcyAhPSBudWxsKSB7XG4gICAgaWYgKCFoYXNUb1BpeGVsc1dhcm5lZCkge1xuICAgICAgY29uc3Qga2VybmVsID0gZ2V0S2VybmVsKERyYXcsIEVOR0lORS5iYWNrZW5kTmFtZSk7XG4gICAgICBpZiAoa2VybmVsICE9IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ3RmLmJyb3dzZXIudG9QaXhlbHMgaXMgbm90IGVmZmljaWVudCB0byBkcmF3IHRlbnNvciBvbiBjYW52YXMuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB0cnkgdGYuYnJvd3Nlci5kcmF3IGluc3RlYWQuJyk7XG4gICAgICAgIGhhc1RvUGl4ZWxzV2FybmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnN0IGltYWdlRGF0YSA9IG5ldyBJbWFnZURhdGEoYnl0ZXMsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgfVxuICBpZiAoJGltZyAhPT0gaW1nKSB7XG4gICAgJGltZy5kaXNwb3NlKCk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG4vKipcbiAqIERyYXdzIGEgYHRmLlRlbnNvcmAgdG8gYSBjYW52YXMuXG4gKlxuICogV2hlbiB0aGUgZHR5cGUgb2YgdGhlIGlucHV0IGlzICdmbG9hdDMyJywgd2UgYXNzdW1lIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIFswLTFdLiBPdGhlcndpc2UsIHdoZW4gaW5wdXQgaXMgJ2ludDMyJywgd2UgYXNzdW1lIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIFswLTI1NV0uXG4gKlxuICogQHBhcmFtIGltYWdlIFRoZSB0ZW5zb3IgdG8gZHJhdyBvbiB0aGUgY2FudmFzLiBNdXN0IG1hdGNoIG9uZSBvZlxuICogdGhlc2Ugc2hhcGVzOlxuICogICAtIFJhbmstMiB3aXRoIHNoYXBlIGBbaGVpZ2h0LCB3aWR0aGBdOiBEcmF3biBhcyBncmF5c2NhbGUuXG4gKiAgIC0gUmFuay0zIHdpdGggc2hhcGUgYFtoZWlnaHQsIHdpZHRoLCAxXWA6IERyYXduIGFzIGdyYXlzY2FsZS5cbiAqICAgLSBSYW5rLTMgd2l0aCBzaGFwZSBgW2hlaWdodCwgd2lkdGgsIDNdYDogRHJhd24gYXMgUkdCIHdpdGggYWxwaGEgc2V0IGluXG4gKiAgICAgYGltYWdlT3B0aW9uc2AgKGRlZmF1bHRzIHRvIDEsIHdoaWNoIGlzIG9wYXF1ZSkuXG4gKiAgIC0gUmFuay0zIHdpdGggc2hhcGUgYFtoZWlnaHQsIHdpZHRoLCA0XWA6IERyYXduIGFzIFJHQkEuXG4gKiBAcGFyYW0gY2FudmFzIFRoZSBjYW52YXMgdG8gZHJhdyB0by5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBjb25maWd1cmF0aW9uIGFyZ3VtZW50cyBmb3IgaW1hZ2UgdG8gYmUgZHJhd24gYW5kIHRoZVxuICogICAgIGNhbnZhcyB0byBkcmF3IHRvLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdCcm93c2VyJywgbmFtZXNwYWNlOiAnYnJvd3Nlcid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3KFxuICAgIGltYWdlOiBUZW5zb3IyRHxUZW5zb3IzRHxUZW5zb3JMaWtlLCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICAgIG9wdGlvbnM/OiBEcmF3T3B0aW9ucyk6IHZvaWQge1xuICBsZXQgJGltZyA9IGNvbnZlcnRUb1RlbnNvcihpbWFnZSwgJ2ltZycsICdkcmF3Jyk7XG4gIGlmICghKGltYWdlIGluc3RhbmNlb2YgVGVuc29yKSkge1xuICAgIC8vIEFzc3VtZSBpbnQzMiBpZiB1c2VyIHBhc3NlZCBhIG5hdGl2ZSBhcnJheS5cbiAgICBjb25zdCBvcmlnaW5hbEltZ1RlbnNvciA9ICRpbWc7XG4gICAgJGltZyA9IGNhc3Qob3JpZ2luYWxJbWdUZW5zb3IsICdpbnQzMicpO1xuICAgIG9yaWdpbmFsSW1nVGVuc29yLmRpc3Bvc2UoKTtcbiAgfVxuICB2YWxpZGF0ZUltZ1RlbnNvcigkaW1nKTtcbiAgdmFsaWRhdGVJbWFnZU9wdGlvbnMob3B0aW9ucz8uaW1hZ2VPcHRpb25zKTtcblxuICBjb25zdCBpbnB1dHM6IERyYXdJbnB1dHMgPSB7aW1hZ2U6ICRpbWd9O1xuICBjb25zdCBhdHRyczogRHJhd0F0dHJzID0ge2NhbnZhcywgb3B0aW9uc307XG4gIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBEcmF3LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGZyb21QaXhlbHMgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2Zyb21QaXhlbHNffSk7XG4iXX0=","import { computeStrides, sizeFromShape } from '../util';\n/**\n * Validate gather nd inputs.\n *\n * @param tensor The tensor contains the source values.\n * @param indices The tensor contains the indices to slice the source.\n *\n * @returns [resultShape, numUpdates, sliceSize, strides]\n */\nexport function prepareAndValidate(tensor, indices) {\n const tensorRank = tensor.shape.length;\n const indicesRank = indices.shape.length;\n if (tensorRank < 1) {\n throw new Error('tf.gatherND() expects the input to be rank 1 or higher,' +\n ` but the rank was ${tensorRank}.`);\n }\n if (indicesRank < 1) {\n throw new Error('tf.gatherND() expects the indices to be rank 1 or higher,' +\n ` but the rank was ${indicesRank}.`);\n }\n if (indices.dtype !== 'int32') {\n throw new Error('tf.gatherND() expects the indices to be int32 type,' +\n ` but the dtype was ${indices.dtype}.`);\n }\n if (indices.shape[indicesRank - 1] > tensorRank) {\n throw new Error('index innermost dimension length must be <= tensor rank; saw: ' +\n `${indices.shape[indicesRank - 1]} vs. ${tensorRank}`);\n }\n if (sizeFromShape(tensor.shape) === 0) {\n throw new Error('Requested more than 0 entries, but input is empty.' +\n ` Input shape: ${tensor.shape}.`);\n }\n const indicesShape = indices.shape;\n const sliceRank = indicesShape[indicesShape.length - 1];\n // The result shape is\n // indices.shape[:-1] + params.shape[indices.shape[-1]:]\n let nResult = 1;\n for (let i = 0; i < indicesShape.length - 1; ++i) {\n nResult *= indicesShape[i];\n }\n const inputShape = tensor.shape;\n const resultShape = indicesShape.slice();\n resultShape.pop();\n let sliceSize = 1;\n for (let i = sliceRank; i < tensorRank; ++i) {\n sliceSize *= inputShape[i];\n resultShape.push(inputShape[i]);\n }\n const strides = [...computeStrides(tensor.shape).map(stride => stride / sliceSize),\n 1].slice(0, sliceRank);\n return [resultShape, nResult, sliceSize, strides];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0aGVyX25kX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9nYXRoZXJfbmRfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFrQixFQUFFLE9BQW1CO0lBRXhFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3pDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCxxQkFBcUIsVUFBVSxHQUFHLENBQUMsQ0FBQztLQUN6QztJQUNELElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtRQUNuQixNQUFNLElBQUksS0FBSyxDQUNYLDJEQUEyRDtZQUMzRCxxQkFBcUIsV0FBVyxHQUFHLENBQUMsQ0FBQztLQUMxQztJQUNELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDWCxxREFBcUQ7WUFDckQsc0JBQXNCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQzdDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUU7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDWCxnRUFBZ0U7WUFDaEUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsUUFBUSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUNYLG9EQUFvRDtZQUNwRCxpQkFBaUIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7S0FDdkM7SUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ25DLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXhELHNCQUFzQjtJQUN0QiwwREFBMEQ7SUFDMUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNoRCxPQUFPLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVCO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUVoQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRWxCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzNDLFNBQVMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQztJQUVELE1BQU0sT0FBTyxHQUNULENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUU1QixPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7IFRlbnNvckluZm8gfSBmcm9tICcuLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge2NvbXB1dGVTdHJpZGVzLCBzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiBWYWxpZGF0ZSBnYXRoZXIgbmQgaW5wdXRzLlxuICpcbiAqIEBwYXJhbSB0ZW5zb3IgVGhlIHRlbnNvciBjb250YWlucyB0aGUgc291cmNlIHZhbHVlcy5cbiAqIEBwYXJhbSBpbmRpY2VzIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIGluZGljZXMgdG8gc2xpY2UgdGhlIHNvdXJjZS5cbiAqXG4gKiBAcmV0dXJucyBbcmVzdWx0U2hhcGUsIG51bVVwZGF0ZXMsIHNsaWNlU2l6ZSwgc3RyaWRlc11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVBbmRWYWxpZGF0ZSh0ZW5zb3I6IFRlbnNvckluZm8sIGluZGljZXM6IFRlbnNvckluZm8pOlxuICAgIFtudW1iZXJbXSwgbnVtYmVyLCBudW1iZXIsIG51bWJlcltdXSB7XG4gIGNvbnN0IHRlbnNvclJhbmsgPSB0ZW5zb3Iuc2hhcGUubGVuZ3RoO1xuICBjb25zdCBpbmRpY2VzUmFuayA9IGluZGljZXMuc2hhcGUubGVuZ3RoO1xuICBpZiAodGVuc29yUmFuayA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0Zi5nYXRoZXJORCgpIGV4cGVjdHMgdGhlIGlucHV0IHRvIGJlIHJhbmsgMSBvciBoaWdoZXIsJyArXG4gICAgICAgIGAgYnV0IHRoZSByYW5rIHdhcyAke3RlbnNvclJhbmt9LmApO1xuICB9XG4gIGlmIChpbmRpY2VzUmFuayA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0Zi5nYXRoZXJORCgpIGV4cGVjdHMgdGhlIGluZGljZXMgdG8gYmUgcmFuayAxIG9yIGhpZ2hlciwnICtcbiAgICAgICAgYCBidXQgdGhlIHJhbmsgd2FzICR7aW5kaWNlc1Jhbmt9LmApO1xuICB9XG4gIGlmIChpbmRpY2VzLmR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndGYuZ2F0aGVyTkQoKSBleHBlY3RzIHRoZSBpbmRpY2VzIHRvIGJlIGludDMyIHR5cGUsJyArXG4gICAgICAgIGAgYnV0IHRoZSBkdHlwZSB3YXMgJHtpbmRpY2VzLmR0eXBlfS5gKTtcbiAgfVxuICBpZiAoaW5kaWNlcy5zaGFwZVtpbmRpY2VzUmFuayAtIDFdID4gdGVuc29yUmFuaykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2luZGV4IGlubmVybW9zdCBkaW1lbnNpb24gbGVuZ3RoIG11c3QgYmUgPD0gdGVuc29yIHJhbms7IHNhdzogJyArXG4gICAgICAgIGAke2luZGljZXMuc2hhcGVbaW5kaWNlc1JhbmsgLSAxXX0gdnMuICR7dGVuc29yUmFua31gKTtcbiAgfVxuXG4gIGlmIChzaXplRnJvbVNoYXBlKHRlbnNvci5zaGFwZSkgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSZXF1ZXN0ZWQgbW9yZSB0aGFuIDAgZW50cmllcywgYnV0IGlucHV0IGlzIGVtcHR5LicgK1xuICAgICAgICBgIElucHV0IHNoYXBlOiAke3RlbnNvci5zaGFwZX0uYCk7XG4gIH1cblxuICBjb25zdCBpbmRpY2VzU2hhcGUgPSBpbmRpY2VzLnNoYXBlO1xuICBjb25zdCBzbGljZVJhbmsgPSBpbmRpY2VzU2hhcGVbaW5kaWNlc1NoYXBlLmxlbmd0aCAtIDFdO1xuXG4gIC8vIFRoZSByZXN1bHQgc2hhcGUgaXNcbiAgLy8gICBpbmRpY2VzLnNoYXBlWzotMV0gKyBwYXJhbXMuc2hhcGVbaW5kaWNlcy5zaGFwZVstMV06XVxuICBsZXQgblJlc3VsdCA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlc1NoYXBlLmxlbmd0aCAtIDE7ICsraSkge1xuICAgIG5SZXN1bHQgKj0gaW5kaWNlc1NoYXBlW2ldO1xuICB9XG5cbiAgY29uc3QgaW5wdXRTaGFwZSA9IHRlbnNvci5zaGFwZTtcblxuICBjb25zdCByZXN1bHRTaGFwZSA9IGluZGljZXNTaGFwZS5zbGljZSgpO1xuICByZXN1bHRTaGFwZS5wb3AoKTtcblxuICBsZXQgc2xpY2VTaXplID0gMTtcbiAgZm9yIChsZXQgaSA9IHNsaWNlUmFuazsgaSA8IHRlbnNvclJhbms7ICsraSkge1xuICAgIHNsaWNlU2l6ZSAqPSBpbnB1dFNoYXBlW2ldO1xuICAgIHJlc3VsdFNoYXBlLnB1c2goaW5wdXRTaGFwZVtpXSk7XG4gIH1cblxuICBjb25zdCBzdHJpZGVzID1cbiAgICAgIFsuLi5jb21wdXRlU3RyaWRlcyh0ZW5zb3Iuc2hhcGUpLm1hcChzdHJpZGUgPT4gc3RyaWRlIC8gc2xpY2VTaXplKSxcbiAgICAgICAxXS5zbGljZSgwLCBzbGljZVJhbmspO1xuXG4gIHJldHVybiBbcmVzdWx0U2hhcGUsIG5SZXN1bHQsIHNsaWNlU2l6ZSwgc3RyaWRlc107XG59XG4iXX0=","import { computeStrides, sizeFromShape } from '../util';\n/**\n * Check whether updates.shape = indices.shape[:batchDim] +\n * shape[sliceDim:]\n *\n * @param x The input tensor.\n */\nexport function validateUpdateShape(shape, indices, updates) {\n const sliceDim = (indices.rank > 1) ? indices.shape[indices.rank - 1] : 1;\n const batchDim = (indices.rank > 1) ? indices.rank - 1 : 1;\n const shapeError = 'Must have updates.shape = indices.shape[:batchDim] + ' +\n `shape[sliceDim:], got updates.shape: ${updates.shape}` +\n `, indices.shape: ${indices.shape}, shape: ${shape}` +\n `, sliceDim: ${sliceDim}, and batchDim: ${batchDim}.`;\n if (updates.rank < batchDim) {\n throw new Error(shapeError + ` update.rank < ${batchDim}. `);\n }\n if (shape.length < sliceDim + (updates.rank - batchDim)) {\n throw new Error(shapeError +\n ` Output shape length < ${sliceDim + (updates.rank - batchDim)}`);\n }\n if (updates.rank !== batchDim + shape.length - sliceDim) {\n throw new Error(shapeError + ` update.rank != ${batchDim + shape.length - sliceDim}`);\n }\n for (let d = 0; d < batchDim; ++d) {\n if (updates.shape[d] !== indices.shape[d]) {\n throw new Error(shapeError +\n ` updates.shape[${d}] (${updates.shape[d]}) != indices.shape[${d}] (${indices.shape[d]}).`);\n }\n }\n for (let d = 0; d < updates.rank - batchDim; ++d) {\n if (updates.shape[d + batchDim] !== shape[d + sliceDim]) {\n throw new Error(shapeError +\n ` updates.shape[${d + batchDim}] (${updates.shape[d + batchDim]}) != shape[${d + batchDim}] (${shape[d + batchDim]})`);\n }\n }\n}\n/**\n * Validate scatter nd inputs.\n *\n * @param update The tensor contains the update values.\n * @param indices The tensor contains the indices for the update values.\n * @param shape The shape of the output tensor.\n */\nexport function validateInput(updates, indices, shape) {\n if (indices.rank < 1) {\n throw new Error('tf.scatterND() expects the indices to be rank 1 or higher,' +\n ` but the rank was ${indices.rank}.`);\n }\n if (updates.rank < 1) {\n throw new Error('tf.scatterND() expects the updates to be rank 1 or higher,' +\n ` but the rank was ${updates.rank}.`);\n }\n if (indices.dtype !== 'int32') {\n throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${indices.dtype}`);\n }\n if (shape.length < 1) {\n throw new Error(`Output rank must be greater or equal to 1, but got shape: ${shape}`);\n }\n if (shape.length === 0) {\n if (indices.size === 0) {\n throw new Error(`Indices specified for empty output. indices shape: ${indices.shape}`);\n }\n if (updates.size === 0) {\n throw new Error(`Updates specified for empty output. updates shape: ${updates.shape}`);\n }\n }\n validateUpdateShape(shape, indices, updates);\n}\n/**\n * Calculate the shape information for the output.\n *\n * @param update The tensor contains the update values.\n * @param indices The tensor contains the indices for the update values.\n * @param shape The shape of the output tensor.\n *\n * @returns ScatterShapeInfo\n */\nexport function calculateShapes(updates, indices, shape) {\n // Calculate the number of dimensions in indices\n const indicesRank = indices.shape.length;\n const sliceRank = (indicesRank > 1) ? indices.shape[indicesRank - 1] : 1;\n // Calculate the number of elements that make up each slice of our updated\n // tensor. This allows us to work with flattened tensors and copy over whole\n // slices at a time.\n const totalNd = shape.length;\n let sliceSize = 1;\n for (let i = sliceRank; i < totalNd; ++i) {\n sliceSize *= shape[i];\n }\n const safeSliceDim = (sliceRank < 1) ? 1 : sliceRank;\n const numUpdates = sizeFromShape(indices.shape) / safeSliceDim;\n const strides = [...computeStrides(shape.slice(0, sliceRank)), 1];\n const outputSize = sizeFromShape(shape);\n return { sliceRank, numUpdates, sliceSize, strides, outputSize };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhdHRlcl9uZF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2NhdHRlcl9uZF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0RDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsS0FBZSxFQUFFLE9BQWUsRUFBRSxPQUFlO0lBQ25ELE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNELE1BQU0sVUFBVSxHQUFHLHVEQUF1RDtRQUN0RSx3Q0FBd0MsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUN2RCxvQkFBb0IsT0FBTyxDQUFDLEtBQUssWUFBWSxLQUFLLEVBQUU7UUFDcEQsZUFBZSxRQUFRLG1CQUFtQixRQUFRLEdBQUcsQ0FBQztJQUUxRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxFQUFFO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLGtCQUFrQixRQUFRLElBQUksQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEVBQUU7UUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDWCxVQUFVO1lB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cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQgeyBUZW5zb3JJbmZvIH0gZnJvbSAnLi4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbXB1dGVTdHJpZGVzLCBzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHVwZGF0ZXMuc2hhcGUgPSBpbmRpY2VzLnNoYXBlWzpiYXRjaERpbV0gK1xuICogc2hhcGVbc2xpY2VEaW06XVxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVVwZGF0ZVNoYXBlKFxuICAgIHNoYXBlOiBudW1iZXJbXSwgaW5kaWNlczogVGVuc29yLCB1cGRhdGVzOiBUZW5zb3IpIHtcbiAgY29uc3Qgc2xpY2VEaW0gPSAoaW5kaWNlcy5yYW5rID4gMSkgPyBpbmRpY2VzLnNoYXBlW2luZGljZXMucmFuayAtIDFdIDogMTtcbiAgY29uc3QgYmF0Y2hEaW0gPSAoaW5kaWNlcy5yYW5rID4gMSkgPyBpbmRpY2VzLnJhbmsgLSAxIDogMTtcblxuICBjb25zdCBzaGFwZUVycm9yID0gJ011c3QgaGF2ZSB1cGRhdGVzLnNoYXBlID0gaW5kaWNlcy5zaGFwZVs6YmF0Y2hEaW1dICsgJyArXG4gICAgICBgc2hhcGVbc2xpY2VEaW06XSwgZ290IHVwZGF0ZXMuc2hhcGU6ICR7dXBkYXRlcy5zaGFwZX1gICtcbiAgICAgIGAsIGluZGljZXMuc2hhcGU6ICR7aW5kaWNlcy5zaGFwZX0sIHNoYXBlOiAke3NoYXBlfWAgK1xuICAgICAgYCwgc2xpY2VEaW06ICR7c2xpY2VEaW19LCBhbmQgYmF0Y2hEaW06ICR7YmF0Y2hEaW19LmA7XG5cbiAgaWYgKHVwZGF0ZXMucmFuayA8IGJhdGNoRGltKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHNoYXBlRXJyb3IgKyBgIHVwZGF0ZS5yYW5rIDwgJHtiYXRjaERpbX0uIGApO1xuICB9XG4gIGlmIChzaGFwZS5sZW5ndGggPCBzbGljZURpbSArICh1cGRhdGVzLnJhbmsgLSBiYXRjaERpbSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHNoYXBlRXJyb3IgK1xuICAgICAgICBgIE91dHB1dCBzaGFwZSBsZW5ndGggPCAke3NsaWNlRGltICsgKHVwZGF0ZXMucmFuayAtIGJhdGNoRGltKX1gKTtcbiAgfVxuICBpZiAodXBkYXRlcy5yYW5rICE9PSBiYXRjaERpbSArIHNoYXBlLmxlbmd0aCAtIHNsaWNlRGltKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBzaGFwZUVycm9yICsgYCB1cGRhdGUucmFuayAhPSAke2JhdGNoRGltICsgc2hhcGUubGVuZ3RoIC0gc2xpY2VEaW19YCk7XG4gIH1cbiAgZm9yIChsZXQgZCA9IDA7IGQgPCBiYXRjaERpbTsgKytkKSB7XG4gICAgaWYgKHVwZGF0ZXMuc2hhcGVbZF0gIT09IGluZGljZXMuc2hhcGVbZF0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBzaGFwZUVycm9yICtcbiAgICAgICAgICBgIHVwZGF0ZXMuc2hhcGVbJHtkfV0gKCR7dXBkYXRlcy5zaGFwZVtkXX0pICE9IGluZGljZXMuc2hhcGVbJHtkfV0gKCR7XG4gICAgICAgICAgICAgIGluZGljZXMuc2hhcGVbZF19KS5gKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgZCA9IDA7IGQgPCB1cGRhdGVzLnJhbmsgLSBiYXRjaERpbTsgKytkKSB7XG4gICAgaWYgKHVwZGF0ZXMuc2hhcGVbZCArIGJhdGNoRGltXSAhPT0gc2hhcGVbZCArIHNsaWNlRGltXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIHNoYXBlRXJyb3IgK1xuICAgICAgICAgIGAgdXBkYXRlcy5zaGFwZVske2QgKyBiYXRjaERpbX1dICgke1xuICAgICAgICAgICAgICB1cGRhdGVzLnNoYXBlW2QgKyBiYXRjaERpbV19KSAhPSBzaGFwZVske2QgKyBiYXRjaERpbX1dICgke1xuICAgICAgICAgICAgICBzaGFwZVtkICsgYmF0Y2hEaW1dfSlgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2F0dGVyU2hhcGVJbmZvIHtcbiAgc2xpY2VSYW5rOiBudW1iZXI7XG4gIG51bVVwZGF0ZXM6IG51bWJlcjtcbiAgc2xpY2VTaXplOiBudW1iZXI7XG4gIHN0cmlkZXM6IG51bWJlcltdO1xuICBvdXRwdXRTaXplOiBudW1iZXI7XG59XG4vKipcbiAqIFZhbGlkYXRlIHNjYXR0ZXIgbmQgaW5wdXRzLlxuICpcbiAqIEBwYXJhbSB1cGRhdGUgVGhlIHRlbnNvciBjb250YWlucyB0aGUgdXBkYXRlIHZhbHVlcy5cbiAqIEBwYXJhbSBpbmRpY2VzIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIGluZGljZXMgZm9yIHRoZSB1cGRhdGUgdmFsdWVzLlxuICogQHBhcmFtIHNoYXBlIFRoZSBzaGFwZSBvZiB0aGUgb3V0cHV0IHRlbnNvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5wdXQoXG4gICAgdXBkYXRlczogVGVuc29yLCBpbmRpY2VzOiBUZW5zb3IsIHNoYXBlOiBudW1iZXJbXSkge1xuICBpZiAoaW5kaWNlcy5yYW5rIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RmLnNjYXR0ZXJORCgpIGV4cGVjdHMgdGhlIGluZGljZXMgdG8gYmUgcmFuayAxIG9yIGhpZ2hlciwnICtcbiAgICAgICAgYCBidXQgdGhlIHJhbmsgd2FzICR7aW5kaWNlcy5yYW5rfS5gKTtcbiAgfVxuICBpZiAodXBkYXRlcy5yYW5rIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RmLnNjYXR0ZXJORCgpIGV4cGVjdHMgdGhlIHVwZGF0ZXMgdG8gYmUgcmFuayAxIG9yIGhpZ2hlciwnICtcbiAgICAgICAgYCBidXQgdGhlIHJhbmsgd2FzICR7dXBkYXRlcy5yYW5rfS5gKTtcbiAgfVxuICBpZiAoaW5kaWNlcy5kdHlwZSAhPT0gJ2ludDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGR0eXBlIG9mICdpbmRpY2VzJyBzaG91bGQgYmUgaW50MzIsIGJ1dCBnb3QgZHR5cGU6ICR7XG4gICAgICAgIGluZGljZXMuZHR5cGV9YCk7XG4gIH1cbiAgaWYgKHNoYXBlLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBPdXRwdXQgcmFuayBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMSwgYnV0IGdvdCBzaGFwZTogJHtzaGFwZX1gKTtcbiAgfVxuXG4gIGlmIChzaGFwZS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaW5kaWNlcy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGljZXMgc3BlY2lmaWVkIGZvciBlbXB0eSBvdXRwdXQuIGluZGljZXMgc2hhcGU6ICR7XG4gICAgICAgICAgaW5kaWNlcy5zaGFwZX1gKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVcGRhdGVzIHNwZWNpZmllZCBmb3IgZW1wdHkgb3V0cHV0LiB1cGRhdGVzIHNoYXBlOiAke1xuICAgICAgICAgIHVwZGF0ZXMuc2hhcGV9YCk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVVcGRhdGVTaGFwZShzaGFwZSwgaW5kaWNlcywgdXBkYXRlcyk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBzaGFwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gdXBkYXRlIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIHVwZGF0ZSB2YWx1ZXMuXG4gKiBAcGFyYW0gaW5kaWNlcyBUaGUgdGVuc29yIGNvbnRhaW5zIHRoZSBpbmRpY2VzIGZvciB0aGUgdXBkYXRlIHZhbHVlcy5cbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuXG4gKlxuICogQHJldHVybnMgU2NhdHRlclNoYXBlSW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2hhcGVzKFxuICAgIHVwZGF0ZXM6IFRlbnNvckluZm8sIGluZGljZXM6IFRlbnNvckluZm8sXG4gICAgc2hhcGU6IG51bWJlcltdKTogU2NhdHRlclNoYXBlSW5mbyB7XG4gIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMgaW4gaW5kaWNlc1xuICBjb25zdCBpbmRpY2VzUmFuayA9IGluZGljZXMuc2hhcGUubGVuZ3RoO1xuICBjb25zdCBzbGljZVJhbmsgPSAoaW5kaWNlc1JhbmsgPiAxKSA/IGluZGljZXMuc2hhcGVbaW5kaWNlc1JhbmsgLSAxXSA6IDE7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCBtYWtlIHVwIGVhY2ggc2xpY2Ugb2Ygb3VyIHVwZGF0ZWRcbiAgLy8gdGVuc29yLiBUaGlzIGFsbG93cyB1cyB0byB3b3JrIHdpdGggZmxhdHRlbmVkIHRlbnNvcnMgYW5kIGNvcHkgb3ZlciB3aG9sZVxuICAvLyBzbGljZXMgYXQgYSB0aW1lLlxuICBjb25zdCB0b3RhbE5kID0gc2hhcGUubGVuZ3RoO1xuXG4gIGxldCBzbGljZVNpemUgPSAxO1xuICBmb3IgKGxldCBpID0gc2xpY2VSYW5rOyBpIDwgdG90YWxOZDsgKytpKSB7XG4gICAgc2xpY2VTaXplICo9IHNoYXBlW2ldO1xuICB9XG5cbiAgY29uc3Qgc2FmZVNsaWNlRGltID0gKHNsaWNlUmFuayA8IDEpID8gMSA6IHNsaWNlUmFuaztcbiAgY29uc3QgbnVtVXBkYXRlcyA9IHNpemVGcm9tU2hhcGUoaW5kaWNlcy5zaGFwZSkgLyBzYWZlU2xpY2VEaW07XG5cbiAgY29uc3Qgc3RyaWRlcyA9IFsuLi5jb21wdXRlU3RyaWRlcyhzaGFwZS5zbGljZSgwLCBzbGljZVJhbmspKSwgMV07XG4gIGNvbnN0IG91dHB1dFNpemUgPSBzaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgcmV0dXJuIHtzbGljZVJhbmssIG51bVVwZGF0ZXMsIHNsaWNlU2l6ZSwgc3RyaWRlcywgb3V0cHV0U2l6ZX07XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\nconst NEW_AXIS = -2;\nconst SHRINK_AXIS = -1;\nexport function assertParamsValid(input, begin, size) {\n const inputRank = input.shape.length;\n util.assert(inputRank === begin.length, () => `Error in slice${inputRank}D: Length of begin ${begin} must ` +\n `match the rank of the array (${inputRank}).`);\n util.assert(inputRank === size.length, () => `Error in slice${inputRank}D: Length of size ${size} must ` +\n `match the rank of the array (${inputRank}).`);\n for (let i = 0; i < inputRank; ++i) {\n util.assert(begin[i] + size[i] <= input.shape[i], () => `Error in slice${inputRank}D: begin[${i}] + size[${i}] ` +\n `(${begin[i] + size[i]}) would overflow input.shape[${i}] (${input.shape[i]})`);\n }\n}\n/** Converts a binary mask to an array of axes. Used in stridedSlice(). */\nexport function maskToAxes(mask) {\n const axes = [];\n let axis = 0;\n while (mask > 0) {\n if (mask & 1) {\n axes.push(axis);\n }\n mask /= 2;\n axis++;\n }\n return axes;\n}\n/** Computes the output shape given the strided slice params. */\nexport function computeOutShape(begin, end, strides) {\n const size = [];\n for (let axis = 0; axis < begin.length; axis++) {\n size[axis] = Math.ceil((end[axis] - begin[axis]) / strides[axis]);\n }\n return size;\n}\n// Creates full selection at the elided dimensions. If the dimension matches\n// the ellipsis mask, override the current stride value. Otherwise, insert.\nexport function stridesWithElidedDims(strides, ellipsisInsertionIndex, numElidedAxes, inputShape) {\n const newStrides = [...strides];\n for (let i = newStrides.length; i < inputShape.length; i++) {\n newStrides.push(1);\n }\n for (let i = 0; i < numElidedAxes; i++) {\n if (i === 0) {\n newStrides[ellipsisInsertionIndex] = 1;\n }\n else {\n newStrides.splice(ellipsisInsertionIndex, 0 /* num elements to delete */, 1 /* element to add */);\n newStrides.pop();\n }\n }\n return newStrides;\n}\nfunction unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, normalizedAxis) {\n if (normalizedAxis <= ellipsisInsertionIndex) {\n return normalizedAxis;\n }\n return normalizedAxis - (numElidedAxes - 1);\n}\nfunction getElidedAxes(numElidedAxes, ellipsisInsertionIndex) {\n const elidedAxes = [];\n for (let i = 0; i < numElidedAxes; i++) {\n elidedAxes.push(ellipsisInsertionIndex + i);\n }\n return elidedAxes;\n}\n// Normalize the start, end and strides.\nexport function getNormalizedAxes(inputShape, ellipsisAxes, numInterpolatedAxes, begin, end, strides, beginMask, endMask, ellipsisMask) {\n const inputRank = inputShape.length;\n let normalizedBegin = new Array(inputRank), normalizedEnd = new Array(inputRank), normalizedStrides = new Array(inputRank);\n if (ellipsisAxes.length && numInterpolatedAxes > 0) {\n const fullIndex = ellipsisAxes[0];\n // The ellipsis applies to the masked index as well as any dimensions\n // that are interpolated.\n const numElidedAxes = numInterpolatedAxes + 1;\n normalizedBegin = startIndicesWithElidedDims(beginMask, fullIndex, numElidedAxes, begin, inputShape);\n normalizedEnd = stopIndicesWithElidedDims(endMask, fullIndex, numElidedAxes, end, inputShape);\n normalizedStrides =\n stridesWithElidedDims(strides, fullIndex, numElidedAxes, inputShape);\n }\n else {\n for (let axis = 0; axis < inputRank; axis++) {\n normalizedBegin[axis] = startForAxis(beginMask, begin, strides, inputShape, axis, ellipsisMask);\n normalizedEnd[axis] =\n stopForAxis(endMask, end, strides, inputShape, axis, ellipsisMask);\n normalizedStrides[axis] = stridesForAxis(strides, axis, ellipsisMask);\n }\n }\n return {\n begin: normalizedBegin,\n end: normalizedEnd,\n strides: normalizedStrides\n };\n}\n// Creates full selection at the elided dimensions. If the dimension matches\n// the ellipsis mask, override the current start value. Otherwise, insert.\nexport function startIndicesWithElidedDims(beginMask, ellipsisInsertionIndex, numElidedAxes, originalBegin, inputShape) {\n const newIndices = [...inputShape];\n const elidedAxes = getElidedAxes(numElidedAxes, ellipsisInsertionIndex);\n for (let axis = 0; axis < newIndices.length; axis++) {\n if (elidedAxes.indexOf(axis) > -1) {\n newIndices[axis] = 0;\n }\n else {\n const originalAxis = unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, axis);\n let originalValue = originalBegin[originalAxis];\n if (beginMask & 1 << originalAxis) {\n originalValue = 0;\n }\n newIndices[axis] = originalValue;\n }\n }\n return newIndices;\n}\n// Creates full selection at the elided dimensions. If the dimension matches\n// the ellipsis mask, override the current stop value. Otherwise, insert.\nexport function stopIndicesWithElidedDims(endMask, ellipsisInsertionIndex, numElidedAxes, originalEnd, inputShape) {\n const newIndices = [...inputShape];\n const elidedAxes = getElidedAxes(numElidedAxes, ellipsisInsertionIndex);\n for (let axis = 0; axis < newIndices.length; axis++) {\n if (elidedAxes.indexOf(axis) > -1) {\n newIndices[axis] = Number.MAX_SAFE_INTEGER;\n }\n else {\n const originalAxis = unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, axis);\n let originalValue = originalEnd[originalAxis];\n if (endMask & 1 << originalAxis) {\n originalValue = Number.MAX_SAFE_INTEGER;\n }\n newIndices[axis] = originalValue;\n }\n }\n for (let i = 0; i < newIndices.length; i++) {\n // Handle negative indices\n const axisSize = inputShape[i];\n if (newIndices[i] < 0) {\n newIndices[i] += axisSize;\n }\n newIndices[i] = util.clamp(0, newIndices[i], inputShape[i]);\n }\n return newIndices;\n}\nexport function stridesForAxis(strides, axis, ellipsisMask) {\n let stride = strides[axis];\n if (ellipsisMask & (1 << axis) || stride == null) {\n stride = 1;\n }\n return stride;\n}\nexport function startForAxis(beginMask, startIndices, strides, inputShape, axis, ellipsisMask) {\n // Begin with the specified index\n let start = startIndices[axis];\n const stride = strides[axis] || 1;\n // Check the axis bit from right of masked axes, or the begin index is not set\n // for the axis.\n if (beginMask & 1 << axis || ellipsisMask & 1 << axis || start == null) {\n if (stride > 0) {\n // Forward iteration - use the first element. These values will get\n // clamped below (Note: We could have set them to 0 and axis_size-1, but\n // use lowest() and max() to maintain symmetry with StopForAxis())\n start = Number.MIN_SAFE_INTEGER;\n }\n else {\n // Backward iteration - use the last element.\n start = Number.MAX_SAFE_INTEGER;\n }\n }\n // Handle negative indices\n const axisSize = inputShape[axis];\n if (start < 0) {\n start += axisSize;\n }\n // Clamping\n start = util.clamp(0, start, axisSize - 1);\n return start;\n}\nexport function stopForAxis(endMask, stopIndices, strides, inputShape, axis, ellipsisMask) {\n // Begin with the specified index\n let stop = stopIndices[axis];\n const stride = strides[axis] || 1;\n // Check the axis bit from right of masked axes, or if the stop index is not\n // set for this axis.\n if (endMask & (1 << axis) || ellipsisMask & (1 << axis) || stop == null) {\n if (stride > 0) {\n // Forward iteration - use the last element. These values will get\n // clamped below\n stop = Number.MAX_SAFE_INTEGER;\n }\n else {\n // Backward iteration - use the first element.\n stop = Number.MIN_SAFE_INTEGER;\n }\n }\n // Handle negative indices\n const axisSize = inputShape[axis];\n if (stop < 0) {\n stop += axisSize;\n }\n // Clamping\n // Because the end index points one past the last element, we need slightly\n // different clamping ranges depending on the direction.\n if (stride > 0) {\n // Forward iteration\n stop = util.clamp(0, stop, axisSize);\n }\n else {\n // Backward iteration\n stop = util.clamp(-1, stop, axisSize - 1);\n }\n return stop;\n}\n/**\n * Returns true if the slice occupies a continous set of elements in the\n * 'flat' space.\n */\nexport function isSliceContinous(shape, begin, size) {\n // Index of the first axis that has size > 1.\n let firstNonOneAxis = size.length;\n for (let i = 0; i < size.length; i++) {\n if (size[i] > 1) {\n firstNonOneAxis = i;\n break;\n }\n }\n for (let i = firstNonOneAxis + 1; i < size.length; i++) {\n if (begin[i] > 0 || size[i] !== shape[i]) {\n return false;\n }\n }\n return true;\n}\nexport function computeFlatOffset(begin, strides) {\n let flatOffset = begin.length > 0 ? begin[begin.length - 1] : 1;\n for (let i = 0; i < begin.length - 1; i++) {\n flatOffset += begin[i] * strides[i];\n }\n return flatOffset;\n}\nexport function parseSliceParams(x, begin, size) {\n // The following logic allows for more ergonomic calls.\n let begin_;\n const xRank = x.shape.length;\n if (typeof begin === 'number') {\n begin_ = [begin, ...new Array(xRank - 1).fill(0)];\n }\n else if (begin.length < xRank) {\n begin_ = begin.concat(new Array(xRank - begin.length).fill(0));\n }\n else {\n begin_ = begin.slice();\n }\n begin_.forEach(d => {\n util.assert(d !== -1, () => 'slice() does not support negative begin indexing.');\n });\n let size_;\n if (size == null) {\n size_ = new Array(xRank).fill(-1);\n }\n else if (typeof size === 'number') {\n size_ = [size, ...new Array(xRank - 1).fill(-1)];\n }\n else if (size.length < xRank) {\n size_ = size.concat(new Array(xRank - size.length).fill(-1));\n }\n else {\n size_ = size;\n }\n size_ = size_.map((d, i) => {\n if (d >= 0) {\n return d;\n }\n else {\n util.assert(d === -1, () => `Negative size values should be exactly -1 but got ` +\n `${d} for the slice() size at index ${i}.`);\n return x.shape[i] - begin_[i];\n }\n });\n return [begin_, size_];\n}\n// Convert the slicing specification from a sparse representation to a dense\n// representation. This means that all ellipses and newaxis are expanded out.\nexport function sliceInfo(xShape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask) {\n let stridesNonNull;\n if (strides == null) {\n stridesNonNull = new Array(begin.length);\n stridesNonNull.fill(1);\n }\n else {\n stridesNonNull = strides;\n }\n // Only one non-zero bit is allowed in ellipsisMask, which means ellipsisMask\n // is a power of 2. Use bit compares to ensure ellipsisMask is 0 or a power\n // of 2. When i is a power of 2, i & (i - 1) is always 0.\n // Also ref:\n // https://stackoverflow.com/questions/600293/how-to-check-if-a-number-is-a-power-of-2\n if (ellipsisMask != null && (ellipsisMask & (ellipsisMask - 1)) !== 0) {\n throw new Error('Multiple ellipses in slice is not allowed.');\n }\n // Step 1: Account for ellipsis and new axis.\n // Check for ellipsis and count how many non-newaxis there are after.\n let ellipsisSeen = false;\n const sparseSpec = {\n dims: stridesNonNull.length,\n numAddAxisAfterEllipsis: 0,\n begin: begin.slice(),\n end: end.slice(),\n strides: stridesNonNull.slice(),\n beginMask,\n endMask,\n ellipsisMask,\n newAxisMask,\n shrinkAxisMask\n };\n for (let i = 0; i < sparseSpec.dims; i++) {\n if (ellipsisSeen && ((1 << i) & newAxisMask) !== 0) {\n sparseSpec.numAddAxisAfterEllipsis++;\n }\n if ((1 << i) & ellipsisMask) {\n ellipsisSeen = true;\n }\n }\n // If no ellipsis insert one at the end.\n if (!ellipsisSeen) {\n sparseSpec.ellipsisMask |= (1 << sparseSpec.dims);\n sparseSpec.dims++; // this effects loop iteration below\n }\n // Step 2: Make a sparse spec into a full index spec.\n //\n // The sparse spec deos not correspond to the number of dimensions.\n // Make a dense spec that cooresponds to the number of dimensions.\n //\n // For example suppose foo[...,3:] on foo.shape = [2, 2, 3] then we need to\n // produce the missing beginMask for the first two dimensions i.e. from\n // beginMaskSpec = 0, endMaskSpec = 2, we achieve beginMask = 6 (110),\n // endMask = 7 (111).\n const denseSpec = {\n dims: xShape.length,\n beginMask: 0,\n endMask: 0,\n beginValid: false,\n endValid: false\n };\n buildDenseSpec(sparseSpec, denseSpec);\n // Step 3: Make implicit ranges (non-zero beginMasks and endMasks) explicit\n // and bounds check.\n let isIdentity = true;\n let sliceDim0 = true;\n let isSimpleSlice = true;\n const processingShape = [];\n const finalShape = [];\n for (let i = 0; i < xShape.length; ++i) {\n if (denseSpec.strides[i] === 0) {\n throw Error(`strides[${i}] must be non-zero`);\n }\n const shrinkI = !!(denseSpec.shrinkAxisMask & (1 << i));\n const dimI = xShape[i];\n if (dimI === -1) {\n processingShape.push(shrinkI ? 1 : -1);\n continue;\n }\n const masks = [denseSpec.beginMask & (1 << i), denseSpec.endMask & (1 << i)];\n const validRange = [\n denseSpec.strides[i] > 0 ? 0 : -1,\n denseSpec.strides[i] > 0 ? dimI : dimI - 1\n ];\n if (shrinkI && denseSpec.strides[i] <= 0) {\n throw Error('only stride 1 allowed on non-range indexing.');\n }\n isSimpleSlice = isSimpleSlice && (denseSpec.strides[i] === 1);\n const beginAndEndMasked = !!((denseSpec.beginMask & (1 << i)) && (denseSpec.endMask & (1 << i)));\n if (denseSpec.beginValid && denseSpec.endValid) {\n if (shrinkI) {\n // If we are shrinking, the end index is now possibly incorrect. In\n // particular foo[-1] produces sparseBegin = -1, sparseEnd = 0.\n // and canonical puts these to n-1 and 0, which implies a degenerate\n // interval. Fortunately, it is now safe to re-create end as begin + 1.\n const xFwd = denseSpec.begin[i] < 0 ? dimI + denseSpec.begin[i] :\n denseSpec.begin[i];\n denseSpec.begin[i] = xFwd;\n denseSpec.end[i] = denseSpec.begin[i] + 1;\n if (xFwd < 0 || xFwd >= dimI) {\n throw Error(`slice index ${denseSpec.begin[i]} of dimension ${i} out of bounds.`);\n }\n }\n else {\n denseSpec.begin[i] = canonical(denseSpec.begin[i], 0, denseSpec.strides[i], dimI, masks, validRange);\n denseSpec.end[i] = canonical(denseSpec.end[i], 1, denseSpec.strides[i], dimI, masks, validRange);\n }\n // Update optimization values\n const takeAllInDimension = denseSpec.strides[i] === 1 &&\n denseSpec.begin[i] === 0 && denseSpec.end[i] === dimI;\n isIdentity = isIdentity && takeAllInDimension;\n sliceDim0 = sliceDim0 &&\n ((i === 0 && denseSpec.strides[i] === 1) || takeAllInDimension);\n }\n else {\n isIdentity =\n isIdentity && ((denseSpec.strides[i] === 1) && beginAndEndMasked);\n sliceDim0 = sliceDim0 &&\n ((i === 0 && denseSpec.strides[i] === 1) || beginAndEndMasked);\n }\n // Compute the processing shape (the intermediate Eigen will produce)\n let intervalLength;\n let knownInterval = false;\n if (denseSpec.beginValid && denseSpec.endValid) {\n intervalLength = denseSpec.end[i] - denseSpec.begin[i];\n knownInterval = true;\n }\n else if (shrinkI) {\n // The dimension is still known as 1 for the processingShape, but will be\n // discarded for the final shape.\n intervalLength = 1;\n knownInterval = true;\n }\n else if (beginAndEndMasked) {\n // Even if we don't have values for begin or end, we do know that this\n // dimension covers the whole interval. If we have shape information for\n // this dimension, that tells us the interval length.\n if (dimI >= 0) {\n if (denseSpec.strides[i] < 0) {\n intervalLength = -dimI;\n }\n else {\n intervalLength = dimI;\n }\n knownInterval = true;\n }\n }\n if (knownInterval) {\n let sizeI;\n // Hold zero if the interval is degenerate, otherwise account for\n // remainder\n if (intervalLength === 0 ||\n ((intervalLength < 0) !== (denseSpec.strides[i] < 0))) {\n sizeI = 0;\n }\n else {\n sizeI = Math.trunc(intervalLength / denseSpec.strides[i]) +\n (intervalLength % denseSpec.strides[i] !== 0 ? 1 : 0);\n }\n processingShape.push(sizeI);\n }\n else {\n processingShape.push(-1);\n }\n }\n // Step 4: Compute the final shape\n //\n // newAxis will increase dimension by 1 (with a one-size dimension)\n // slices like foo[3, ...] will reduce dimension by 1.\n // This cannot be done earlier, because it depends on Step 3.\n for (let denseDim = 0; denseDim < denseSpec.finalShapeGatherIndices.length; ++denseDim) {\n const gatherIndex = denseSpec.finalShapeGatherIndices[denseDim];\n if (gatherIndex >= 0) {\n finalShape.push(processingShape[gatherIndex]);\n }\n else if (gatherIndex === NEW_AXIS) {\n finalShape.push(1);\n }\n }\n const finalShapeSparse = finalShape.filter((dim, i) => denseSpec.finalShapeGatherIndices[i] !== NEW_AXIS);\n return {\n finalShapeSparse,\n finalShape,\n isIdentity,\n sliceDim0,\n isSimpleSlice,\n begin: denseSpec.begin,\n end: denseSpec.end,\n strides: denseSpec.strides\n };\n}\nfunction buildDenseSpec(sparse, dense) {\n dense.beginMask = 0;\n dense.endMask = 0;\n dense.shrinkAxisMask = 0;\n let fullIndex = 0;\n dense.beginValid = sparse.begin != null;\n dense.endValid = sparse.end != null;\n dense.begin = new Array(dense.dims);\n dense.end = new Array(dense.dims);\n dense.strides = new Array(dense.dims);\n dense.finalShapeGatherIndices = [];\n dense.finalShapeGatherIndicesSparse = [];\n dense.inputShapeGatherIndicesSparse = new Array(dense.dims);\n for (let i = 0; i < sparse.dims; i++) {\n if ((1 << i) & sparse.ellipsisMask) {\n // Only the bit that has ellipsis will fall in this condition.\n // Expand the ellipsis into the appropriate indices\n // Note: this only works because we guaranteed one ellipsis.\n const nextIndex = Math.min(dense.dims - (sparse.dims - i) + 1 + sparse.numAddAxisAfterEllipsis, dense.dims);\n for (; fullIndex < nextIndex; fullIndex++) {\n // newAxis aren't real axis so you have to skip.\n dense.begin[fullIndex] = 0;\n dense.end[fullIndex] = 0;\n dense.strides[fullIndex] = 1;\n dense.beginMask |= (1 << fullIndex);\n dense.endMask |= (1 << fullIndex);\n dense.finalShapeGatherIndices.push(fullIndex);\n dense.finalShapeGatherIndicesSparse.push(-1);\n dense.inputShapeGatherIndicesSparse[fullIndex] = i;\n }\n }\n else if ((1 << i) & sparse.newAxisMask) {\n // Only the bit that has newAxis will fall in this condition.\n dense.finalShapeGatherIndices.push(NEW_AXIS);\n dense.finalShapeGatherIndicesSparse.push(-1);\n }\n else {\n if (fullIndex === dense.begin.length) {\n throw Error(`Index out of range using input dim ${fullIndex}; input ` +\n `has only ${dense.dims} dims, ${dense.begin.length}.`);\n }\n // Gather slicing spec into appropriate index.\n if (sparse.begin != null) {\n dense.begin[fullIndex] = sparse.begin[i];\n }\n if (sparse.end != null) {\n dense.end[fullIndex] = sparse.end[i];\n }\n dense.strides[fullIndex] = sparse.strides[i];\n if (sparse.beginMask & (1 << i)) {\n dense.beginMask |= (1 << fullIndex);\n }\n if (sparse.endMask & (1 << i)) {\n dense.endMask |= (1 << fullIndex);\n }\n // If shrink, record where to get the dimensionality from (i.e. newAxis)\n // creates a fake 1 size dimension. Also remember shrink axis (now in\n // dense form) so we can ignore dense.end below.\n if (sparse.shrinkAxisMask & (1 << i)) {\n dense.finalShapeGatherIndices.push(SHRINK_AXIS);\n dense.finalShapeGatherIndicesSparse.push(-1);\n dense.shrinkAxisMask |= (1 << fullIndex);\n }\n else {\n dense.finalShapeGatherIndices.push(fullIndex);\n // Remember that where in the sparse shape the dense dim comes from.\n dense.finalShapeGatherIndicesSparse.push(i);\n }\n dense.inputShapeGatherIndicesSparse[fullIndex] = i;\n fullIndex++;\n }\n }\n}\nfunction canonical(x, c, strideI, dimI, masks, validRange) {\n if (masks[c]) {\n return strideI > 0 ? validRange[c] : validRange[(c + 1) & 1];\n }\n else {\n const xFwd = x < 0 ? dimI + x : x; // make negative indices positive\n return xFwd < validRange[0] ? validRange[0] :\n xFwd > validRange[1] ? validRange[1] : xFwd;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2VfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUE2RHZCLE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsS0FBaUIsRUFBRSxLQUFlLEVBQUUsSUFBYztJQUNwRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUMxQixHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsU0FBUyxzQkFBc0IsS0FBSyxRQUFRO1FBQy9ELGdDQUFnQyxTQUFTLElBQUksQ0FBQyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQ1AsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQ3pCLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixTQUFTLHFCQUFxQixJQUFJLFFBQVE7UUFDN0QsZ0NBQWdDLFNBQVMsSUFBSSxDQUFDLENBQUM7SUFFdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDcEMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLFNBQVMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJO1lBQzFELElBQUksS0FBSyxDQUFD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UyxDQUFDLENBQUM7Z0JBQzlDLG9FQUFvRTtnQkFDcEUsS0FBSyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztZQUNELEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkQsU0FBUyxFQUFFLENBQUM7U0FDYjtLQUNGO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUNkLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBZSxFQUFFLElBQVksRUFBRSxLQUFlLEVBQ3BFLFVBQW9CO0lBQ3RCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ1osT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM5RDtTQUFNO1FBQ0wsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsaUNBQWlDO1FBQ3JFLE9BQU8sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztLQUMzRTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7IFRlbnNvckluZm8gfSBmcm9tICcuLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5jb25zdCBORVdfQVhJUyA9IC0yO1xuY29uc3QgU0hSSU5LX0FYSVMgPSAtMTtcblxuLy8gU3BhcnNlIHNsaWNpbmcgc3BlY2lmaWNhdGlvblxuLy8gaWYgb25lIGRvZXMgZm9vWzM6NSwgLi4uLCAtM10sIHRoZSBiZWdpbiwgZW5kIGFuZCBzdHJpZGVzIHdpbGwgaGF2ZSBsZW5ndGhcbi8vIG9mIDMuXG5pbnRlcmZhY2UgU3RyaWRlZFNsaWNlU3BhcnNlU3BlYyB7XG4gIGRpbXM6IG51bWJlcjtcbiAgbnVtQWRkQXhpc0FmdGVyRWxsaXBzaXM6IG51bWJlcjtcbiAgYmVnaW46IG51bWJlcltdO1xuICBlbmQ6IG51bWJlcltdO1xuICBzdHJpZGVzOiBudW1iZXJbXTtcbiAgYmVnaW5NYXNrOiBudW1iZXI7XG4gIGVuZE1hc2s6IG51bWJlcjtcbiAgZWxsaXBzaXNNYXNrOiBudW1iZXI7XG4gIG5ld0F4aXNNYXNrOiBudW1iZXI7XG4gIHNocmlua0F4aXNNYXNrOiBudW1iZXI7XG59XG5cbi8vIERlbnNlIHNsaWNpbmcgc3BlY2lmaWNhdGlvblxuLy8gYWxsIGVsbGlwc2VzIGFuZCBuZXdheGlzIGFyZSBleHBhbmRlZCBvdXQuIFNvIGlmIGZvb1szOjUsIC4uLiwgLTNdIHdoZXJlIGZvb1xuLy8gaXMgMTAgZGltZW5zaW9uYWwsIGVhY2ggYXJyYXkgb2YgYmVnaW4sIGVuZCwgc3RyaWRlcyB3aWxsIGhhdmUgMTAgZW50cmllc1xuLy8gd2hlcmUgYXMgdGhlIHNwYXJzZSBjYW4gaGF2ZSBsZW5ndGggbGVzcyB0aGFuIHRoZSByYW5rIG9mIGZvby5cbmludGVyZmFjZSBTdHJpZGVkU2xpY2VEZW5zZVNwZWMge1xuICBkaW1zOiBudW1iZXI7XG4gIGJlZ2luTWFzaz86IG51bWJlcjtcbiAgZW5kTWFzaz86IG51bWJlcjtcbiAgYmVnaW5WYWxpZDogYm9vbGVhbjtcbiAgZW5kVmFsaWQ6IGJvb2xlYW47XG4gIGJlZ2luPzogbnVtYmVyW107XG4gIGVuZD86IG51bWJlcltdO1xuICBzdHJpZGVzPzogbnVtYmVyW107XG4gIC8vIFRoaXMgYXJyYXkgaGVscHMgY29uc3RydWN0IHRoZSBmaW5hbCBzaGFwZSBvZiB0aGUgc2xpY2UuXG4gIC8vIFRoZSBmaW5hbCB0ZW5zb3IgaXMgcmVkdWNlZCBpbiByYW5rIHdoZW5ldmVyIGEgc2luZ2xlIGluZGV4IGUuZy4gZm9vWzNdXG4gIC8vIGlzIGNhbGxlZCBmb3IuIFRoZSBmaW5hbCB0ZW5zb3IgaW5jcmVhc2VzIGluIHJhbmsgd2l0aCBuZXdBeGlzIGVudHJpZXMuXG4gIC8vIElmIGFuIGluZGV4IGluIHRoaXMgYXJyYXkgaXMgcG9zaXRpdmUsIHRoZSBzaXplIG9mIHRoZSBkaW1lbnNpb24gaXNcbiAgLy8gb2J0YWluZWQgZnJvbSBjYW5vbmljYWwgZW5kLWJlZ2luLiAgT3RoZXJ3aXNlLCBpZiBpdCBpcyBhIE5FV19BWElTLCBpdCB3aWxsXG4gIC8vIGJlIDEuIEEgc2hydW5rIGRpbWVuc2lvbiBpcyBza2lwcGVkLlxuICBmaW5hbFNoYXBlR2F0aGVySW5kaWNlcz86IG51bWJlcltdO1xuICAvLyBUaGlzIGFycmF5IGhhcyB0aGUgc2FtZSBzaXplIGFzIGZpbmFsU2hhcGVHYXRoZXJJbmRpY2VzLCBidXQgaXQgcmVtZW1iZXJzXG4gIC8vIHRoZSBzcGFyc2UgaW5kZXggdGhhdCBhIGRpbWVuc2lvbiBjb21lcyBmcm9tLCBpbnN0ZWFkIG9mIGRlbnNlIGluZGV4LlxuICAvLyBBIC0xIGluIHRoaXMgdmVjdG9yIG1lYW5zIHRoZSBpbmRleCBpcyBub3QgZnJvbSB0aGUgc3BhcnNlIGlucHV0LlxuICBmaW5hbFNoYXBlR2F0aGVySW5kaWNlc1NwYXJzZT86IG51bWJlcltdO1xuICBpbnB1dFNoYXBlR2F0aGVySW5kaWNlc1NwYXJzZT86IG51bWJlcltdO1xuICAvLyBUaGUgZGVuc2UgaW5kZXhlZCBzaHJpbmsgbWFzayBpcyB3aGljaCBwcm9jZXNzaW5nIGRpbWVuc2lvbnMgc2hvdWxkIGJlXG4gIC8vIHNocnVuay4gRm9yIGV4YW1wbGUsIGlmIGZvby5zaGFwZSA9IFsxMCwgMTAsIDEwLCAxMF0sIGZvb1szLCAuLi4sIDVdIGhhc1xuICAvLyBzcGFyc2VTaHJpbmtBeGlzTWFzayBvZiA1ICgwMTAxKSBhbmQgZGVuc2VTaHJpbmtBeGlzTWFzayBvZiA5ICgxMDAxKSxcbiAgLy8geWllbGRpbmcgYSBmaW5hbCBzaGFwZSBbMTAsIDEwXS5cbiAgc2hyaW5rQXhpc01hc2s/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFNsaWNlSW5mbyA9IHtcbiAgZmluYWxTaGFwZVNwYXJzZTogbnVtYmVyW10sXG4gIGZpbmFsU2hhcGU6IG51bWJlcltdLFxuICBpc0lkZW50aXR5OiBib29sZWFuLFxuICBzbGljZURpbTA6IGJvb2xlYW4sXG4gIGlzU2ltcGxlU2xpY2U6IGJvb2xlYW4sXG4gIGJlZ2luOiBudW1iZXJbXSxcbiAgZW5kOiBudW1iZXJbXSxcbiAgc3RyaWRlczogbnVtYmVyW11cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQYXJhbXNWYWxpZChcbiAgICBpbnB1dDogVGVuc29ySW5mbywgYmVnaW46IG51bWJlcltdLCBzaXplOiBudW1iZXJbXSk6IHZvaWQge1xuICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dC5zaGFwZS5sZW5ndGg7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaW5wdXRSYW5rID09PSBiZWdpbi5sZW5ndGgsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2xpY2Uke2lucHV0UmFua31EOiBMZW5ndGggb2YgYmVnaW4gJHtiZWdpbn0gbXVzdCBgICtcbiAgICAgICAgICBgbWF0Y2ggdGhlIHJhbmsgb2YgdGhlIGFycmF5ICgke2lucHV0UmFua30pLmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGlucHV0UmFuayA9PT0gc2l6ZS5sZW5ndGgsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2xpY2Uke2lucHV0UmFua31EOiBMZW5ndGggb2Ygc2l6ZSAke3NpemV9IG11c3QgYCArXG4gICAgICAgICAgYG1hdGNoIHRoZSByYW5rIG9mIHRoZSBhcnJheSAoJHtpbnB1dFJhbmt9KS5gKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0UmFuazsgKytpKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGJlZ2luW2ldICsgc2l6ZVtpXSA8PSBpbnB1dC5zaGFwZVtpXSxcbiAgICAgICAgKCkgPT4gYEVycm9yIGluIHNsaWNlJHtpbnB1dFJhbmt9RDogYmVnaW5bJHtpfV0gKyBzaXplWyR7aX1dIGAgK1xuICAgICAgICAgICAgYCgke2JlZ2luW2ldICsgc2l6ZVtpXX0pIHdvdWxkIG92ZXJmbG93IGlucHV0LnNoYXBlWyR7aX1dICgke1xuICAgICAgICAgICAgICAgICAgaW5wdXQuc2hhcGVbaV19KWApO1xuICB9XG59XG5cbi8qKiBDb252ZXJ0cyBhIGJpbmFyeSBtYXNrIHRvIGFuIGFycmF5IG9mIGF4ZXMuIFVzZWQgaW4gc3RyaWRlZFNsaWNlKCkuICovXG5leHBvcnQgZnVuY3Rpb24gbWFza1RvQXhlcyhtYXNrOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGF4ZXMgPSBbXTtcbiAgbGV0IGF4aXMgPSAwO1xuICB3aGlsZSAobWFzayA+IDApIHtcbiAgICBpZiAobWFzayAmIDEpIHtcbiAgICAgIGF4ZXMucHVzaChheGlzKTtcbiAgICB9XG4gICAgbWFzayAvPSAyO1xuICAgIGF4aXMrKztcbiAgfVxuICByZXR1cm4gYXhlcztcbn1cblxuLyoqIENvbXB1dGVzIHRoZSBvdXRwdXQgc2hhcGUgZ2l2ZW4gdGhlIHN0cmlkZWQgc2xpY2UgcGFyYW1zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPdXRTaGFwZShcbiAgICBiZWdpbjogbnVtYmVyW10sIGVuZDogbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCBzaXplID0gW107XG4gIGZvciAobGV0IGF4aXMgPSAwOyBheGlzIDwgYmVnaW4ubGVuZ3RoOyBheGlzKyspIHtcbiAgICBzaXplW2F4aXNdID0gTWF0aC5jZWlsKChlbmRbYXhpc10gLSBiZWdpbltheGlzXSkgLyBzdHJpZGVzW2F4aXNdKTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuLy8gQ3JlYXRlcyBmdWxsIHNlbGVjdGlvbiBhdCB0aGUgZWxpZGVkIGRpbWVuc2lvbnMuIElmIHRoZSBkaW1lbnNpb24gbWF0Y2hlc1xuLy8gdGhlIGVsbGlwc2lzIG1hc2ssIG92ZXJyaWRlIHRoZSBjdXJyZW50IHN0cmlkZSB2YWx1ZS4gT3RoZXJ3aXNlLCBpbnNlcnQuXG5leHBvcnQgZnVuY3Rpb24gc3RyaWRlc1dpdGhFbGlkZWREaW1zKFxuICAgIHN0cmlkZXM6IG51bWJlcltdLCBlbGxpcHNpc0luc2VydGlvbkluZGV4OiBudW1iZXIsIG51bUVsaWRlZEF4ZXM6IG51bWJlcixcbiAgICBpbnB1dFNoYXBlOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbmV3U3RyaWRlcyA9IFsuLi5zdHJpZGVzXTtcbiAgZm9yIChsZXQgaSA9IG5ld1N0cmlkZXMubGVuZ3RoOyBpIDwgaW5wdXRTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgIG5ld1N0cmlkZXMucHVzaCgxKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUVsaWRlZEF4ZXM7IGkrKykge1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBuZXdTdHJpZGVzW2VsbGlwc2lzSW5zZXJ0aW9uSW5kZXhdID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3RyaWRlcy5zcGxpY2UoXG4gICAgICAgICAgZWxsaXBzaXNJbnNlcnRpb25JbmRleCwgMCAvKiBudW0gZWxlbWVudHMgdG8gZGVsZXRlICovLFxuICAgICAgICAgIDEgLyogZWxlbWVudCB0byBhZGQgKi8pO1xuICAgICAgbmV3U3RyaWRlcy5wb3AoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1N0cmlkZXM7XG59XG5cbmZ1bmN0aW9uIHVubm9ybWFsaXplQXhpcyhcbiAgICBlbGxpcHNpc0luc2VydGlvbkluZGV4OiBudW1iZXIsIG51bUVsaWRlZEF4ZXM6IG51bWJlcixcbiAgICBub3JtYWxpemVkQXhpczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKG5vcm1hbGl6ZWRBeGlzIDw9IGVsbGlwc2lzSW5zZXJ0aW9uSW5kZXgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZEF4aXM7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZEF4aXMgLSAobnVtRWxpZGVkQXhlcyAtIDEpO1xufVxuXG5mdW5jdGlvbiBnZXRFbGlkZWRBeGVzKG51bUVsaWRlZEF4ZXM6IG51bWJlciwgZWxsaXBzaXNJbnNlcnRpb25JbmRleDogbnVtYmVyKSB7XG4gIGNvbnN0IGVsaWRlZEF4ZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1FbGlkZWRBeGVzOyBpKyspIHtcbiAgICBlbGlkZWRBeGVzLnB1c2goZWxsaXBzaXNJbnNlcnRpb25JbmRleCArIGkpO1xuICB9XG4gIHJldHVybiBlbGlkZWRBeGVzO1xufVxuXG4vLyBOb3JtYWxpemUgdGhlIHN0YXJ0LCBlbmQgYW5kIHN0cmlkZXMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZEF4ZXMoXG4gICAgaW5wdXRTaGFwZTogbnVtYmVyW10sIGVsbGlwc2lzQXhlczogbnVtYmVyW10sIG51bUludGVycG9sYXRlZEF4ZXM6IG51bWJlcixcbiAgICBiZWdpbjogbnVtYmVyW10sIGVuZDogbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdLCBiZWdpbk1hc2s6IG51bWJlcixcbiAgICBlbmRNYXNrOiBudW1iZXIsXG4gICAgZWxsaXBzaXNNYXNrOiBudW1iZXIpOiB7YmVnaW46IG51bWJlcltdLCBlbmQ6IG51bWJlcltdLCBzdHJpZGVzOiBudW1iZXJbXX0ge1xuICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aDtcbiAgbGV0IG5vcm1hbGl6ZWRCZWdpbiA9IG5ldyBBcnJheShpbnB1dFJhbmspLFxuICAgICAgbm9ybWFsaXplZEVuZCA9IG5ldyBBcnJheShpbnB1dFJhbmspLFxuICAgICAgbm9ybWFsaXplZFN0cmlkZXMgPSBuZXcgQXJyYXkoaW5wdXRSYW5rKTtcbiAgaWYgKGVsbGlwc2lzQXhlcy5sZW5ndGggJiYgbnVtSW50ZXJwb2xhdGVkQXhlcyA+IDApIHtcbiAgICBjb25zdCBmdWxsSW5kZXggPSBlbGxpcHNpc0F4ZXNbMF07XG5cbiAgICAvLyBUaGUgZWxsaXBzaXMgYXBwbGllcyB0byB0aGUgbWFza2VkIGluZGV4IGFzIHdlbGwgYXMgYW55IGRpbWVuc2lvbnNcbiAgICAvLyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQuXG4gICAgY29uc3QgbnVtRWxpZGVkQXhlcyA9IG51bUludGVycG9sYXRlZEF4ZXMgKyAxO1xuICAgIG5vcm1hbGl6ZWRCZWdpbiA9IHN0YXJ0SW5kaWNlc1dpdGhFbGlkZWREaW1zKFxuICAgICAgICBiZWdpbk1hc2ssIGZ1bGxJbmRleCwgbnVtRWxpZGVkQXhlcywgYmVnaW4sIGlucHV0U2hhcGUpO1xuICAgIG5vcm1hbGl6ZWRFbmQgPSBzdG9wSW5kaWNlc1dpdGhFbGlkZWREaW1zKFxuICAgICAgICBlbmRNYXNrLCBmdWxsSW5kZXgsIG51bUVsaWRlZEF4ZXMsIGVuZCwgaW5wdXRTaGFwZSk7XG4gICAgbm9ybWFsaXplZFN0cmlkZXMgPVxuICAgICAgICBzdHJpZGVzV2l0aEVsaWRlZERpbXMoc3RyaWRlcywgZnVsbEluZGV4LCBudW1FbGlkZWRBeGVzLCBpbnB1dFNoYXBlKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBheGlzID0gMDsgYXhpcyA8IGlucHV0UmFuazsgYXhpcysrKSB7XG4gICAgICBub3JtYWxpemVkQmVnaW5bYXhpc10gPSBzdGFydEZvckF4aXMoXG4gICAgICAgICAgYmVnaW5NYXNrLCBiZWdpbiwgc3RyaWRlcywgaW5wdXRTaGFwZSwgYXhpcywgZWxsaXBzaXNNYXNrKTtcbiAgICAgIG5vcm1hbGl6ZWRFbmRbYXhpc10gPVxuICAgICAgICAgIHN0b3BGb3JBeGlzKGVuZE1hc2ssIGVuZCwgc3RyaWRlcywgaW5wdXRTaGFwZSwgYXhpcywgZWxsaXBzaXNNYXNrKTtcbiAgICAgIG5vcm1hbGl6ZWRTdHJpZGVzW2F4aXNdID0gc3RyaWRlc0ZvckF4aXMoc3RyaWRlcywgYXhpcywgZWxsaXBzaXNNYXNrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJlZ2luOiBub3JtYWxpemVkQmVnaW4sXG4gICAgZW5kOiBub3JtYWxpemVkRW5kLFxuICAgIHN0cmlkZXM6IG5vcm1hbGl6ZWRTdHJpZGVzXG4gIH07XG59XG5cbi8vIENyZWF0ZXMgZnVsbCBzZWxlY3Rpb24gYXQgdGhlIGVsaWRlZCBkaW1lbnNpb25zLiBJZiB0aGUgZGltZW5zaW9uIG1hdGNoZXNcbi8vIHRoZSBlbGxpcHNpcyBtYXNrLCBvdmVycmlkZSB0aGUgY3VycmVudCBzdGFydCB2YWx1ZS4gT3RoZXJ3aXNlLCBpbnNlcnQuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRJbmRpY2VzV2l0aEVsaWRlZERpbXMoXG4gICAgYmVnaW5NYXNrOiBudW1iZXIsIGVsbGlwc2lzSW5zZXJ0aW9uSW5kZXg6IG51bWJlciwgbnVtRWxpZGVkQXhlczogbnVtYmVyLFxuICAgIG9yaWdpbmFsQmVnaW46IG51bWJlcltdLCBpbnB1dFNoYXBlOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbmV3SW5kaWNlcyA9IFsuLi5pbnB1dFNoYXBlXTtcbiAgY29uc3QgZWxpZGVkQXhlcyA9IGdldEVsaWRlZEF4ZXMobnVtRWxpZGVkQXhlcywgZWxsaXBzaXNJbnNlcnRpb25JbmRleCk7XG5cbiAgZm9yIChsZXQgYXhpcyA9IDA7IGF4aXMgPCBuZXdJbmRpY2VzLmxlbmd0aDsgYXhpcysrKSB7XG4gICAgaWYgKGVsaWRlZEF4ZXMuaW5kZXhPZihheGlzKSA+IC0xKSB7XG4gICAgICBuZXdJbmRpY2VzW2F4aXNdID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3JpZ2luYWxBeGlzID1cbiAgICAgICAgICB1bm5vcm1hbGl6ZUF4aXMoZWxsaXBzaXNJbnNlcnRpb25JbmRleCwgbnVtRWxpZGVkQXhlcywgYXhpcyk7XG4gICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsQmVnaW5bb3JpZ2luYWxBeGlzXTtcbiAgICAgIGlmIChiZWdpbk1hc2sgJiAxIDw8IG9yaWdpbmFsQXhpcykge1xuICAgICAgICBvcmlnaW5hbFZhbHVlID0gMDtcbiAgICAgIH1cblxuICAgICAgbmV3SW5kaWNlc1theGlzXSA9IG9yaWdpbmFsVmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdJbmRpY2VzO1xufVxuXG4vLyBDcmVhdGVzIGZ1bGwgc2VsZWN0aW9uIGF0IHRoZSBlbGlkZWQgZGltZW5zaW9ucy4gSWYgdGhlIGRpbWVuc2lvbiBtYXRjaGVzXG4vLyB0aGUgZWxsaXBzaXMgbWFzaywgb3ZlcnJpZGUgdGhlIGN1cnJlbnQgc3RvcCB2YWx1ZS4gT3RoZXJ3aXNlLCBpbnNlcnQuXG5leHBvcnQgZnVuY3Rpb24gc3RvcEluZGljZXNXaXRoRWxpZGVkRGltcyhcbiAgICBlbmRNYXNrOiBudW1iZXIsIGVsbGlwc2lzSW5zZXJ0aW9uSW5kZXg6IG51bWJlciwgbnVtRWxpZGVkQXhlczogbnVtYmVyLFxuICAgIG9yaWdpbmFsRW5kOiBudW1iZXJbXSwgaW5wdXRTaGFwZTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IG5ld0luZGljZXMgPSBbLi4uaW5wdXRTaGFwZV07XG4gIGNvbnN0IGVsaWRlZEF4ZXMgPSBnZXRFbGlkZWRBeGVzKG51bUVsaWRlZEF4ZXMsIGVsbGlwc2lzSW5zZXJ0aW9uSW5kZXgpO1xuXG4gIGZvciAobGV0IGF4aXMgPSAwOyBheGlzIDwgbmV3SW5kaWNlcy5sZW5ndGg7IGF4aXMrKykge1xuICAgIGlmIChlbGlkZWRBeGVzLmluZGV4T2YoYXhpcykgPiAtMSkge1xuICAgICAgbmV3SW5kaWNlc1theGlzXSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEF4aXMgPVxuICAgICAgICAgIHVubm9ybWFsaXplQXhpcyhlbGxpcHNpc0luc2VydGlvbkluZGV4LCBudW1FbGlkZWRBeGVzLCBheGlzKTtcbiAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxFbmRbb3JpZ2luYWxBeGlzXTtcbiAgICAgIGlmIChlbmRNYXNrICYgMSA8PCBvcmlnaW5hbEF4aXMpIHtcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgfVxuICAgICAgbmV3SW5kaWNlc1theGlzXSA9IG9yaWdpbmFsVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gSGFuZGxlIG5lZ2F0aXZlIGluZGljZXNcbiAgICBjb25zdCBheGlzU2l6ZSA9IGlucHV0U2hhcGVbaV07XG4gICAgaWYgKG5ld0luZGljZXNbaV0gPCAwKSB7XG4gICAgICBuZXdJbmRpY2VzW2ldICs9IGF4aXNTaXplO1xuICAgIH1cbiAgICBuZXdJbmRpY2VzW2ldID0gdXRpbC5jbGFtcCgwLCBuZXdJbmRpY2VzW2ldLCBpbnB1dFNoYXBlW2ldKTtcbiAgfVxuICByZXR1cm4gbmV3SW5kaWNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlkZXNGb3JBeGlzKFxuICAgIHN0cmlkZXM6IG51bWJlcltdLCBheGlzOiBudW1iZXIsIGVsbGlwc2lzTWFzazogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHN0cmlkZSA9IHN0cmlkZXNbYXhpc107XG4gIGlmIChlbGxpcHNpc01hc2sgJiAoMSA8PCBheGlzKSB8fCBzdHJpZGUgPT0gbnVsbCkge1xuICAgIHN0cmlkZSA9IDE7XG4gIH1cblxuICByZXR1cm4gc3RyaWRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRGb3JBeGlzKFxuICAgIGJlZ2luTWFzazogbnVtYmVyLCBzdGFydEluZGljZXM6IG51bWJlcltdLCBzdHJpZGVzOiBudW1iZXJbXSxcbiAgICBpbnB1dFNoYXBlOiBudW1iZXJbXSwgYXhpczogbnVtYmVyLCBlbGxpcHNpc01hc2s6IG51bWJlcik6IG51bWJlciB7XG4gIC8vIEJlZ2luIHdpdGggdGhlIHNwZWNpZmllZCBpbmRleFxuICBsZXQgc3RhcnQgPSBzdGFydEluZGljZXNbYXhpc107XG4gIGNvbnN0IHN0cmlkZSA9IHN0cmlkZXNbYXhpc10gfHwgMTtcblxuICAvLyBDaGVjayB0aGUgYXhpcyBiaXQgZnJvbSByaWdodCBvZiBtYXNrZWQgYXhlcywgb3IgdGhlIGJlZ2luIGluZGV4IGlzIG5vdCBzZXRcbiAgLy8gZm9yIHRoZSBheGlzLlxuICBpZiAoYmVnaW5NYXNrICYgMSA8PCBheGlzIHx8IGVsbGlwc2lzTWFzayAmIDEgPDwgYXhpcyB8fCBzdGFydCA9PSBudWxsKSB7XG4gICAgaWYgKHN0cmlkZSA+IDApIHtcbiAgICAgIC8vIEZvcndhcmQgaXRlcmF0aW9uIC0gdXNlIHRoZSBmaXJzdCBlbGVtZW50LiBUaGVzZSB2YWx1ZXMgd2lsbCBnZXRcbiAgICAgIC8vIGNsYW1wZWQgYmVsb3cgKE5vdGU6IFdlIGNvdWxkIGhhdmUgc2V0IHRoZW0gdG8gMCBhbmQgYXhpc19zaXplLTEsIGJ1dFxuICAgICAgLy8gdXNlIGxvd2VzdCgpIGFuZCBtYXgoKSB0byBtYWludGFpbiBzeW1tZXRyeSB3aXRoIFN0b3BGb3JBeGlzKCkpXG4gICAgICBzdGFydCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrd2FyZCBpdGVyYXRpb24gLSB1c2UgdGhlIGxhc3QgZWxlbWVudC5cbiAgICAgIHN0YXJ0ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIG5lZ2F0aXZlIGluZGljZXNcbiAgY29uc3QgYXhpc1NpemUgPSBpbnB1dFNoYXBlW2F4aXNdO1xuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gYXhpc1NpemU7XG4gIH1cblxuICAvLyBDbGFtcGluZ1xuICBzdGFydCA9IHV0aWwuY2xhbXAoMCwgc3RhcnQsIGF4aXNTaXplIC0gMSk7XG5cbiAgcmV0dXJuIHN0YXJ0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcEZvckF4aXMoXG4gICAgZW5kTWFzazogbnVtYmVyLCBzdG9wSW5kaWNlczogbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdLFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLCBheGlzOiBudW1iZXIsIGVsbGlwc2lzTWFzazogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gQmVnaW4gd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gIGxldCBzdG9wID0gc3RvcEluZGljZXNbYXhpc107XG4gIGNvbnN0IHN0cmlkZSA9IHN0cmlkZXNbYXhpc10gfHwgMTtcblxuICAvLyBDaGVjayB0aGUgYXhpcyBiaXQgZnJvbSByaWdodCBvZiBtYXNrZWQgYXhlcywgb3IgaWYgdGhlIHN0b3AgaW5kZXggaXMgbm90XG4gIC8vIHNldCBmb3IgdGhpcyBheGlzLlxuICBpZiAoZW5kTWFzayAmICgxIDw8IGF4aXMpIHx8IGVsbGlwc2lzTWFzayAmICgxIDw8IGF4aXMpIHx8IHN0b3AgPT0gbnVsbCkge1xuICAgIGlmIChzdHJpZGUgPiAwKSB7XG4gICAgICAvLyBGb3J3YXJkIGl0ZXJhdGlvbiAtIHVzZSB0aGUgbGFzdCBlbGVtZW50LiBUaGVzZSB2YWx1ZXMgd2lsbCBnZXRcbiAgICAgIC8vIGNsYW1wZWQgYmVsb3dcbiAgICAgIHN0b3AgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmFja3dhcmQgaXRlcmF0aW9uIC0gdXNlIHRoZSBmaXJzdCBlbGVtZW50LlxuICAgICAgc3RvcCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBuZWdhdGl2ZSBpbmRpY2VzXG4gIGNvbnN0IGF4aXNTaXplID0gaW5wdXRTaGFwZVtheGlzXTtcbiAgaWYgKHN0b3AgPCAwKSB7XG4gICAgc3RvcCArPSBheGlzU2l6ZTtcbiAgfVxuXG4gIC8vIENsYW1waW5nXG4gIC8vIEJlY2F1c2UgdGhlIGVuZCBpbmRleCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCwgd2UgbmVlZCBzbGlnaHRseVxuICAvLyBkaWZmZXJlbnQgY2xhbXBpbmcgcmFuZ2VzIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uLlxuICBpZiAoc3RyaWRlID4gMCkge1xuICAgIC8vIEZvcndhcmQgaXRlcmF0aW9uXG4gICAgc3RvcCA9IHV0aWwuY2xhbXAoMCwgc3RvcCwgYXhpc1NpemUpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJhY2t3YXJkIGl0ZXJhdGlvblxuICAgIHN0b3AgPSB1dGlsLmNsYW1wKC0xLCBzdG9wLCBheGlzU2l6ZSAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHN0b3A7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzbGljZSBvY2N1cGllcyBhIGNvbnRpbm91cyBzZXQgb2YgZWxlbWVudHMgaW4gdGhlXG4gKiAnZmxhdCcgc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NsaWNlQ29udGlub3VzKFxuICAgIHNoYXBlOiBudW1iZXJbXSwgYmVnaW46IG51bWJlcltdLCBzaXplOiBudW1iZXJbXSkge1xuICAvLyBJbmRleCBvZiB0aGUgZmlyc3QgYXhpcyB0aGF0IGhhcyBzaXplID4gMS5cbiAgbGV0IGZpcnN0Tm9uT25lQXhpcyA9IHNpemUubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc2l6ZVtpXSA+IDEpIHtcbiAgICAgIGZpcnN0Tm9uT25lQXhpcyA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gZmlyc3ROb25PbmVBeGlzICsgMTsgaSA8IHNpemUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYmVnaW5baV0gPiAwIHx8IHNpemVbaV0gIT09IHNoYXBlW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUZsYXRPZmZzZXQoYmVnaW46IG51bWJlcltdLCBzdHJpZGVzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gIGxldCBmbGF0T2Zmc2V0ID0gYmVnaW4ubGVuZ3RoID4gMCA/IGJlZ2luW2JlZ2luLmxlbmd0aCAtIDFdIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZWdpbi5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBmbGF0T2Zmc2V0ICs9IGJlZ2luW2ldICogc3RyaWRlc1tpXTtcbiAgfVxuICByZXR1cm4gZmxhdE9mZnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2xpY2VQYXJhbXMoXG4gICAgeDogVGVuc29ySW5mbywgYmVnaW46IG51bWJlcnxudW1iZXJbXSwgc2l6ZT86IG51bWJlcnxudW1iZXJbXSkge1xuICAvLyBUaGUgZm9sbG93aW5nIGxvZ2ljIGFsbG93cyBmb3IgbW9yZSBlcmdvbm9taWMgY2FsbHMuXG4gIGxldCBiZWdpbl86IG51bWJlcltdO1xuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuICBpZiAodHlwZW9mIGJlZ2luID09PSAnbnVtYmVyJykge1xuICAgIGJlZ2luXyA9IFtiZWdpbiwgLi4ubmV3IEFycmF5KHhSYW5rIC0gMSkuZmlsbCgwKV07XG4gIH0gZWxzZSBpZiAoYmVnaW4ubGVuZ3RoIDwgeFJhbmspIHtcbiAgICBiZWdpbl8gPSBiZWdpbi5jb25jYXQobmV3IEFycmF5KHhSYW5rIC0gYmVnaW4ubGVuZ3RoKS5maWxsKDApKTtcbiAgfSBlbHNlIHtcbiAgICBiZWdpbl8gPSBiZWdpbi5zbGljZSgpO1xuICB9XG4gIGJlZ2luXy5mb3JFYWNoKGQgPT4ge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBkICE9PSAtMSwgKCkgPT4gJ3NsaWNlKCkgZG9lcyBub3Qgc3VwcG9ydCBuZWdhdGl2ZSBiZWdpbiBpbmRleGluZy4nKTtcbiAgfSk7XG4gIGxldCBzaXplXzogbnVtYmVyW107XG4gIGlmIChzaXplID09IG51bGwpIHtcbiAgICBzaXplXyA9IG5ldyBBcnJheSh4UmFuaykuZmlsbCgtMSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNpemUgPT09ICdudW1iZXInKSB7XG4gICAgc2l6ZV8gPSBbc2l6ZSwgLi4ubmV3IEFycmF5KHhSYW5rIC0gMSkuZmlsbCgtMSldO1xuICB9IGVsc2UgaWYgKHNpemUubGVuZ3RoIDwgeFJhbmspIHtcbiAgICBzaXplXyA9IHNpemUuY29uY2F0KG5ldyBBcnJheSh4UmFuayAtIHNpemUubGVuZ3RoKS5maWxsKC0xKSk7XG4gIH0gZWxzZSB7XG4gICAgc2l6ZV8gPSBzaXplO1xuICB9XG4gIHNpemVfID0gc2l6ZV8ubWFwKChkLCBpKSA9PiB7XG4gICAgaWYgKGQgPj0gMCkge1xuICAgICAgcmV0dXJuIGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgIGQgPT09IC0xLFxuICAgICAgICAgICgpID0+IGBOZWdhdGl2ZSBzaXplIHZhbHVlcyBzaG91bGQgYmUgZXhhY3RseSAtMSBidXQgZ290IGAgK1xuICAgICAgICAgICAgICBgJHtkfSBmb3IgdGhlIHNsaWNlKCkgc2l6ZSBhdCBpbmRleCAke2l9LmApO1xuICAgICAgcmV0dXJuIHguc2hhcGVbaV0gLSBiZWdpbl9baV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFtiZWdpbl8sIHNpemVfXTtcbn1cblxuLy8gQ29udmVydCB0aGUgc2xpY2luZyBzcGVjaWZpY2F0aW9uIGZyb20gYSBzcGFyc2UgcmVwcmVzZW50YXRpb24gdG8gYSBkZW5zZVxuLy8gcmVwcmVzZW50YXRpb24uIFRoaXMgbWVhbnMgdGhhdCBhbGwgZWxsaXBzZXMgYW5kIG5ld2F4aXMgYXJlIGV4cGFuZGVkIG91dC5cbmV4cG9ydCBmdW5jdGlvbiBzbGljZUluZm8oXG4gICAgeFNoYXBlOiBudW1iZXJbXSwgYmVnaW46IG51bWJlcltdLCBlbmQ6IG51bWJlcltdLCBzdHJpZGVzOiBudW1iZXJbXSxcbiAgICBiZWdpbk1hc2s6IG51bWJlciwgZW5kTWFzazogbnVtYmVyLCBlbGxpcHNpc01hc2s6IG51bWJlcixcbiAgICBuZXdBeGlzTWFzazogbnVtYmVyLCBzaHJpbmtBeGlzTWFzazogbnVtYmVyKTogU2xpY2VJbmZvIHtcbiAgbGV0IHN0cmlkZXNOb25OdWxsO1xuICBpZiAoc3RyaWRlcyA9PSBudWxsKSB7XG4gICAgc3RyaWRlc05vbk51bGwgPSBuZXcgQXJyYXkoYmVnaW4ubGVuZ3RoKTtcbiAgICBzdHJpZGVzTm9uTnVsbC5maWxsKDEpO1xuICB9IGVsc2Uge1xuICAgIHN0cmlkZXNOb25OdWxsID0gc3RyaWRlcztcbiAgfVxuXG4gIC8vIE9ubHkgb25lIG5vbi16ZXJvIGJpdCBpcyBhbGxvd2VkIGluIGVsbGlwc2lzTWFzaywgd2hpY2ggbWVhbnMgZWxsaXBzaXNNYXNrXG4gIC8vIGlzIGEgcG93ZXIgb2YgMi4gVXNlIGJpdCBjb21wYXJlcyB0byBlbnN1cmUgZWxsaXBzaXNNYXNrIGlzIDAgb3IgYSBwb3dlclxuICAvLyBvZiAyLiBXaGVuIGkgaXMgYSBwb3dlciBvZiAyLCBpICYgKGkgLSAxKSBpcyBhbHdheXMgMC5cbiAgLy8gQWxzbyByZWY6XG4gIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMDI5My9ob3ctdG8tY2hlY2staWYtYS1udW1iZXItaXMtYS1wb3dlci1vZi0yXG4gIGlmIChlbGxpcHNpc01hc2sgIT0gbnVsbCAmJiAoZWxsaXBzaXNNYXNrICYgKGVsbGlwc2lzTWFzayAtIDEpKSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgZWxsaXBzZXMgaW4gc2xpY2UgaXMgbm90IGFsbG93ZWQuJyk7XG4gIH1cblxuICAvLyBTdGVwIDE6IEFjY291bnQgZm9yIGVsbGlwc2lzIGFuZCBuZXcgYXhpcy5cbiAgLy8gQ2hlY2sgZm9yIGVsbGlwc2lzIGFuZCBjb3VudCBob3cgbWFueSBub24tbmV3YXhpcyB0aGVyZSBhcmUgYWZ0ZXIuXG4gIGxldCBlbGxpcHNpc1NlZW4gPSBmYWxzZTtcblxuICBjb25zdCBzcGFyc2VTcGVjOiBTdHJpZGVkU2xpY2VTcGFyc2VTcGVjID0ge1xuICAgIGRpbXM6IHN0cmlkZXNOb25OdWxsLmxlbmd0aCxcbiAgICBudW1BZGRBeGlzQWZ0ZXJFbGxpcHNpczogMCxcbiAgICBiZWdpbjogYmVnaW4uc2xpY2UoKSxcbiAgICBlbmQ6IGVuZC5zbGljZSgpLFxuICAgIHN0cmlkZXM6IHN0cmlkZXNOb25OdWxsLnNsaWNlKCksXG4gICAgYmVnaW5NYXNrLFxuICAgIGVuZE1hc2ssXG4gICAgZWxsaXBzaXNNYXNrLFxuICAgIG5ld0F4aXNNYXNrLFxuICAgIHNocmlua0F4aXNNYXNrXG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGFyc2VTcGVjLmRpbXM7IGkrKykge1xuICAgIGlmIChlbGxpcHNpc1NlZW4gJiYgKCgxIDw8IGkpICYgbmV3QXhpc01hc2spICE9PSAwKSB7XG4gICAgICBzcGFyc2VTcGVjLm51bUFkZEF4aXNBZnRlckVsbGlwc2lzKys7XG4gICAgfVxuICAgIGlmICgoMSA8PCBpKSAmIGVsbGlwc2lzTWFzaykge1xuICAgICAgZWxsaXBzaXNTZWVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgLy8gSWYgbm8gZWxsaXBzaXMgaW5zZXJ0IG9uZSBhdCB0aGUgZW5kLlxuICBpZiAoIWVsbGlwc2lzU2Vlbikge1xuICAgIHNwYXJzZVNwZWMuZWxsaXBzaXNNYXNrIHw9ICgxIDw8IHNwYXJzZVNwZWMuZGltcyk7XG4gICAgc3BhcnNlU3BlYy5kaW1zKys7ICAvLyB0aGlzIGVmZmVjdHMgbG9vcCBpdGVyYXRpb24gYmVsb3dcbiAgfVxuXG4gIC8vIFN0ZXAgMjogTWFrZSBhIHNwYXJzZSBzcGVjIGludG8gYSBmdWxsIGluZGV4IHNwZWMuXG4gIC8vXG4gIC8vIFRoZSBzcGFyc2Ugc3BlYyBkZW9zIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucy5cbiAgLy8gTWFrZSBhIGRlbnNlIHNwZWMgdGhhdCBjb29yZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuXG4gIC8vXG4gIC8vIEZvciBleGFtcGxlIHN1cHBvc2UgZm9vWy4uLiwzOl0gb24gZm9vLnNoYXBlID0gWzIsIDIsIDNdIHRoZW4gd2UgbmVlZCB0b1xuICAvLyBwcm9kdWNlIHRoZSBtaXNzaW5nIGJlZ2luTWFzayBmb3IgdGhlIGZpcnN0IHR3byBkaW1lbnNpb25zIGkuZS4gZnJvbVxuICAvLyBiZWdpbk1hc2tTcGVjID0gMCwgZW5kTWFza1NwZWMgPSAyLCB3ZSBhY2hpZXZlIGJlZ2luTWFzayA9IDYgKDExMCksXG4gIC8vIGVuZE1hc2sgPSA3ICgxMTEpLlxuICBjb25zdCBkZW5zZVNwZWM6IFN0cmlkZWRTbGljZURlbnNlU3BlYyA9IHtcbiAgICBkaW1zOiB4U2hhcGUubGVuZ3RoLFxuICAgIGJlZ2luTWFzazogMCxcbiAgICBlbmRNYXNrOiAwLFxuICAgIGJlZ2luVmFsaWQ6IGZhbHNlLFxuICAgIGVuZFZhbGlkOiBmYWxzZVxuICB9O1xuXG4gIGJ1aWxkRGVuc2VTcGVjKHNwYXJzZVNwZWMsIGRlbnNlU3BlYyk7XG5cbiAgLy8gU3RlcCAzOiBNYWtlIGltcGxpY2l0IHJhbmdlcyAobm9uLXplcm8gYmVnaW5NYXNrcyBhbmQgZW5kTWFza3MpIGV4cGxpY2l0XG4gIC8vIGFuZCBib3VuZHMgY2hlY2suXG4gIGxldCBpc0lkZW50aXR5ID0gdHJ1ZTtcbiAgbGV0IHNsaWNlRGltMCA9IHRydWU7XG4gIGxldCBpc1NpbXBsZVNsaWNlID0gdHJ1ZTtcbiAgY29uc3QgcHJvY2Vzc2luZ1NoYXBlID0gW107XG4gIGNvbnN0IGZpbmFsU2hhcGUgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHhTaGFwZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChkZW5zZVNwZWMuc3RyaWRlc1tpXSA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoYHN0cmlkZXNbJHtpfV0gbXVzdCBiZSBub24temVyb2ApO1xuICAgIH1cbiAgICBjb25zdCBzaHJpbmtJID0gISEoZGVuc2VTcGVjLnNocmlua0F4aXNNYXNrICYgKDEgPDwgaSkpO1xuICAgIGNvbnN0IGRpbUkgPSB4U2hhcGVbaV07XG4gICAgaWYgKGRpbUkgPT09IC0xKSB7XG4gICAgICBwcm9jZXNzaW5nU2hhcGUucHVzaChzaHJpbmtJID8gMSA6IC0xKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hc2tzID1cbiAgICAgICAgW2RlbnNlU3BlYy5iZWdpbk1hc2sgJiAoMSA8PCBpKSwgZGVuc2VTcGVjLmVuZE1hc2sgJiAoMSA8PCBpKV07XG4gICAgY29uc3QgdmFsaWRSYW5nZSA9IFtcbiAgICAgIGRlbnNlU3BlYy5zdHJpZGVzW2ldID4gMCA/IDAgOiAtMSxcbiAgICAgIGRlbnNlU3BlYy5zdHJpZGVzW2ldID4gMCA/IGRpbUkgOiBkaW1JIC0gMVxuICAgIF07XG5cbiAgICBpZiAoc2hyaW5rSSAmJiBkZW5zZVNwZWMuc3RyaWRlc1tpXSA8PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignb25seSBzdHJpZGUgMSBhbGxvd2VkIG9uIG5vbi1yYW5nZSBpbmRleGluZy4nKTtcbiAgICB9XG5cbiAgICBpc1NpbXBsZVNsaWNlID0gaXNTaW1wbGVTbGljZSAmJiAoZGVuc2VTcGVjLnN0cmlkZXNbaV0gPT09IDEpO1xuXG4gICAgY29uc3QgYmVnaW5BbmRFbmRNYXNrZWQgPVxuICAgICAgICAhISgoZGVuc2VTcGVjLmJlZ2luTWFzayAmICgxIDw8IGkpKSAmJiAoZGVuc2VTcGVjLmVuZE1hc2sgJiAoMSA8PCBpKSkpO1xuXG4gICAgaWYgKGRlbnNlU3BlYy5iZWdpblZhbGlkICYmIGRlbnNlU3BlYy5lbmRWYWxpZCkge1xuICAgICAgaWYgKHNocmlua0kpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIHNocmlua2luZywgdGhlIGVuZCBpbmRleCBpcyBub3cgcG9zc2libHkgaW5jb3JyZWN0LiBJblxuICAgICAgICAvLyBwYXJ0aWN1bGFyIGZvb1stMV0gcHJvZHVjZXMgc3BhcnNlQmVnaW4gPSAtMSwgc3BhcnNlRW5kID0gMC5cbiAgICAgICAgLy8gYW5kIGNhbm9uaWNhbCBwdXRzIHRoZXNlIHRvIG4tMSBhbmQgMCwgd2hpY2ggaW1wbGllcyBhIGRlZ2VuZXJhdGVcbiAgICAgICAgLy8gaW50ZXJ2YWwuIEZvcnR1bmF0ZWx5LCBpdCBpcyBub3cgc2FmZSB0byByZS1jcmVhdGUgZW5kIGFzIGJlZ2luICsgMS5cbiAgICAgICAgY29uc3QgeEZ3ZCA9IGRlbnNlU3BlYy5iZWdpbltpXSA8IDAgPyBkaW1JICsgZGVuc2VTcGVjLmJlZ2luW2ldIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW5zZVNwZWMuYmVnaW5baV07XG4gICAgICAgIGRlbnNlU3BlYy5iZWdpbltpXSA9IHhGd2Q7XG4gICAgICAgIGRlbnNlU3BlYy5lbmRbaV0gPSBkZW5zZVNwZWMuYmVnaW5baV0gKyAxO1xuICAgICAgICBpZiAoeEZ3ZCA8IDAgfHwgeEZ3ZCA+PSBkaW1JKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoYHNsaWNlIGluZGV4ICR7ZGVuc2VTcGVjLmJlZ2luW2ldfSBvZiBkaW1lbnNpb24gJHtcbiAgICAgICAgICAgICAgaX0gb3V0IG9mIGJvdW5kcy5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVuc2VTcGVjLmJlZ2luW2ldID0gY2Fub25pY2FsKFxuICAgICAgICAgICAgZGVuc2VTcGVjLmJlZ2luW2ldLCAwLCBkZW5zZVNwZWMuc3RyaWRlc1tpXSwgZGltSSwgbWFza3MsXG4gICAgICAgICAgICB2YWxpZFJhbmdlKTtcbiAgICAgICAgZGVuc2VTcGVjLmVuZFtpXSA9IGNhbm9uaWNhbChcbiAgICAgICAgICAgIGRlbnNlU3BlYy5lbmRbaV0sIDEsIGRlbnNlU3BlYy5zdHJpZGVzW2ldLCBkaW1JLCBtYXNrcywgdmFsaWRSYW5nZSk7XG4gICAgICB9XG4gICAgICAvLyBVcGRhdGUgb3B0aW1pemF0aW9uIHZhbHVlc1xuICAgICAgY29uc3QgdGFrZUFsbEluRGltZW5zaW9uID0gZGVuc2VTcGVjLnN0cmlkZXNbaV0gPT09IDEgJiZcbiAgICAgICAgICBkZW5zZVNwZWMuYmVnaW5baV0gPT09IDAgJiYgZGVuc2VTcGVjLmVuZFtpXSA9PT0gZGltSTtcbiAgICAgIGlzSWRlbnRpdHkgPSBpc0lkZW50aXR5ICYmIHRha2VBbGxJbkRpbWVuc2lvbjtcbiAgICAgIHNsaWNlRGltMCA9IHNsaWNlRGltMCAmJlxuICAgICAgICAgICgoaSA9PT0gMCAmJiBkZW5zZVNwZWMuc3RyaWRlc1tpXSA9PT0gMSkgfHwgdGFrZUFsbEluRGltZW5zaW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNJZGVudGl0eSA9XG4gICAgICAgICAgaXNJZGVudGl0eSAmJiAoKGRlbnNlU3BlYy5zdHJpZGVzW2ldID09PSAxKSAmJiBiZWdpbkFuZEVuZE1hc2tlZCk7XG4gICAgICBzbGljZURpbTAgPSBzbGljZURpbTAgJiZcbiAgICAgICAgICAoKGkgPT09IDAgJiYgZGVuc2VTcGVjLnN0cmlkZXNbaV0gPT09IDEpIHx8IGJlZ2luQW5kRW5kTWFza2VkKTtcbiAgICB9XG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJvY2Vzc2luZyBzaGFwZSAodGhlIGludGVybWVkaWF0ZSBFaWdlbiB3aWxsIHByb2R1Y2UpXG4gICAgbGV0IGludGVydmFsTGVuZ3RoO1xuICAgIGxldCBrbm93bkludGVydmFsID0gZmFsc2U7XG4gICAgaWYgKGRlbnNlU3BlYy5iZWdpblZhbGlkICYmIGRlbnNlU3BlYy5lbmRWYWxpZCkge1xuICAgICAgaW50ZXJ2YWxMZW5ndGggPSBkZW5zZVNwZWMuZW5kW2ldIC0gZGVuc2VTcGVjLmJlZ2luW2ldO1xuICAgICAga25vd25JbnRlcnZhbCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzaHJpbmtJKSB7XG4gICAgICAvLyBUaGUgZGltZW5zaW9uIGlzIHN0aWxsIGtub3duIGFzIDEgZm9yIHRoZSBwcm9jZXNzaW5nU2hhcGUsIGJ1dCB3aWxsIGJlXG4gICAgICAvLyBkaXNjYXJkZWQgZm9yIHRoZSBmaW5hbCBzaGFwZS5cbiAgICAgIGludGVydmFsTGVuZ3RoID0gMTtcbiAgICAgIGtub3duSW50ZXJ2YWwgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYmVnaW5BbmRFbmRNYXNrZWQpIHtcbiAgICAgIC8vIEV2ZW4gaWYgd2UgZG9uJ3QgaGF2ZSB2YWx1ZXMgZm9yIGJlZ2luIG9yIGVuZCwgd2UgZG8ga25vdyB0aGF0IHRoaXNcbiAgICAgIC8vIGRpbWVuc2lvbiBjb3ZlcnMgdGhlIHdob2xlIGludGVydmFsLiBJZiB3ZSBoYXZlIHNoYXBlIGluZm9ybWF0aW9uIGZvclxuICAgICAgLy8gdGhpcyBkaW1lbnNpb24sIHRoYXQgdGVsbHMgdXMgdGhlIGludGVydmFsIGxlbmd0aC5cbiAgICAgIGlmIChkaW1JID49IDApIHtcbiAgICAgICAgaWYgKGRlbnNlU3BlYy5zdHJpZGVzW2ldIDwgMCkge1xuICAgICAgICAgIGludGVydmFsTGVuZ3RoID0gLWRpbUk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJ2YWxMZW5ndGggPSBkaW1JO1xuICAgICAgICB9XG4gICAgICAgIGtub3duSW50ZXJ2YWwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoa25vd25JbnRlcnZhbCkge1xuICAgICAgbGV0IHNpemVJO1xuICAgICAgLy8gSG9sZCB6ZXJvIGlmIHRoZSBpbnRlcnZhbCBpcyBkZWdlbmVyYXRlLCBvdGhlcndpc2UgYWNjb3VudCBmb3JcbiAgICAgIC8vIHJlbWFpbmRlclxuICAgICAgaWYgKGludGVydmFsTGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKChpbnRlcnZhbExlbmd0aCA8IDApICE9PSAoZGVuc2VTcGVjLnN0cmlkZXNbaV0gPCAwKSkpIHtcbiAgICAgICAgc2l6ZUkgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZUkgPSBNYXRoLnRydW5jKGludGVydmFsTGVuZ3RoIC8gZGVuc2VTcGVjLnN0cmlkZXNbaV0pICtcbiAgICAgICAgICAgIChpbnRlcnZhbExlbmd0aCAlIGRlbnNlU3BlYy5zdHJpZGVzW2ldICE9PSAwID8gMSA6IDApO1xuICAgICAgfVxuICAgICAgcHJvY2Vzc2luZ1NoYXBlLnB1c2goc2l6ZUkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzaW5nU2hhcGUucHVzaCgtMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RlcCA0OiBDb21wdXRlIHRoZSBmaW5hbCBzaGFwZVxuICAvL1xuICAvLyBuZXdBeGlzIHdpbGwgaW5jcmVhc2UgZGltZW5zaW9uIGJ5IDEgKHdpdGggYSBvbmUtc2l6ZSBkaW1lbnNpb24pXG4gIC8vIHNsaWNlcyBsaWtlIGZvb1szLCAuLi5dIHdpbGwgcmVkdWNlIGRpbWVuc2lvbiBieSAxLlxuICAvLyBUaGlzIGNhbm5vdCBiZSBkb25lIGVhcmxpZXIsIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBTdGVwIDMuXG4gIGZvciAobGV0IGRlbnNlRGltID0gMDsgZGVuc2VEaW0gPCBkZW5zZVNwZWMuZmluYWxTaGFwZUdhdGhlckluZGljZXMubGVuZ3RoO1xuICAgICAgICsrZGVuc2VEaW0pIHtcbiAgICBjb25zdCBnYXRoZXJJbmRleCA9IGRlbnNlU3BlYy5maW5hbFNoYXBlR2F0aGVySW5kaWNlc1tkZW5zZURpbV07XG4gICAgaWYgKGdhdGhlckluZGV4ID49IDApIHtcbiAgICAgIGZpbmFsU2hhcGUucHVzaChwcm9jZXNzaW5nU2hhcGVbZ2F0aGVySW5kZXhdKTtcbiAgICB9IGVsc2UgaWYgKGdhdGhlckluZGV4ID09PSBORVdfQVhJUykge1xuICAgICAgZmluYWxTaGFwZS5wdXNoKDEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbmFsU2hhcGVTcGFyc2UgPSBmaW5hbFNoYXBlLmZpbHRlcihcbiAgICAgIChkaW0sIGkpID0+IGRlbnNlU3BlYy5maW5hbFNoYXBlR2F0aGVySW5kaWNlc1tpXSAhPT0gTkVXX0FYSVMpO1xuXG4gIHJldHVybiB7XG4gICAgZmluYWxTaGFwZVNwYXJzZSxcbiAgICBmaW5hbFNoYXBlLFxuICAgIGlzSWRlbnRpdHksXG4gICAgc2xpY2VEaW0wLFxuICAgIGlzU2ltcGxlU2xpY2UsXG4gICAgYmVnaW46IGRlbnNlU3BlYy5iZWdpbixcbiAgICBlbmQ6IGRlbnNlU3BlYy5lbmQsXG4gICAgc3RyaWRlczogZGVuc2VTcGVjLnN0cmlkZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGREZW5zZVNwZWMoXG4gICAgc3BhcnNlOiBTdHJpZGVkU2xpY2VTcGFyc2VTcGVjLCBkZW5zZTogU3RyaWRlZFNsaWNlRGVuc2VTcGVjKSB7XG4gIGRlbnNlLmJlZ2luTWFzayA9IDA7XG4gIGRlbnNlLmVuZE1hc2sgPSAwO1xuICBkZW5zZS5zaHJpbmtBeGlzTWFzayA9IDA7XG5cbiAgbGV0IGZ1bGxJbmRleCA9IDA7XG4gIGRlbnNlLmJlZ2luVmFsaWQgPSBzcGFyc2UuYmVnaW4gIT0gbnVsbDtcbiAgZGVuc2UuZW5kVmFsaWQgPSBzcGFyc2UuZW5kICE9IG51bGw7XG5cbiAgZGVuc2UuYmVnaW4gPSBuZXcgQXJyYXkoZGVuc2UuZGltcyk7XG4gIGRlbnNlLmVuZCA9IG5ldyBBcnJheShkZW5zZS5kaW1zKTtcbiAgZGVuc2Uuc3RyaWRlcyA9IG5ldyBBcnJheShkZW5zZS5kaW1zKTtcbiAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXMgPSBbXTtcbiAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXNTcGFyc2UgPSBbXTtcbiAgZGVuc2UuaW5wdXRTaGFwZUdhdGhlckluZGljZXNTcGFyc2UgPSBuZXcgQXJyYXkoZGVuc2UuZGltcyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGFyc2UuZGltczsgaSsrKSB7XG4gICAgaWYgKCgxIDw8IGkpICYgc3BhcnNlLmVsbGlwc2lzTWFzaykge1xuICAgICAgLy8gT25seSB0aGUgYml0IHRoYXQgaGFzIGVsbGlwc2lzIHdpbGwgZmFsbCBpbiB0aGlzIGNvbmRpdGlvbi5cbiAgICAgIC8vIEV4cGFuZCB0aGUgZWxsaXBzaXMgaW50byB0aGUgYXBwcm9wcmlhdGUgaW5kaWNlc1xuICAgICAgLy8gTm90ZTogdGhpcyBvbmx5IHdvcmtzIGJlY2F1c2Ugd2UgZ3VhcmFudGVlZCBvbmUgZWxsaXBzaXMuXG4gICAgICBjb25zdCBuZXh0SW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBkZW5zZS5kaW1zIC0gKHNwYXJzZS5kaW1zIC0gaSkgKyAxICsgc3BhcnNlLm51bUFkZEF4aXNBZnRlckVsbGlwc2lzLFxuICAgICAgICAgIGRlbnNlLmRpbXMpO1xuICAgICAgZm9yICg7IGZ1bGxJbmRleCA8IG5leHRJbmRleDsgZnVsbEluZGV4KyspIHtcbiAgICAgICAgLy8gbmV3QXhpcyBhcmVuJ3QgcmVhbCBheGlzIHNvIHlvdSBoYXZlIHRvIHNraXAuXG4gICAgICAgIGRlbnNlLmJlZ2luW2Z1bGxJbmRleF0gPSAwO1xuICAgICAgICBkZW5zZS5lbmRbZnVsbEluZGV4XSA9IDA7XG4gICAgICAgIGRlbnNlLnN0cmlkZXNbZnVsbEluZGV4XSA9IDE7XG4gICAgICAgIGRlbnNlLmJlZ2luTWFzayB8PSAoMSA8PCBmdWxsSW5kZXgpO1xuICAgICAgICBkZW5zZS5lbmRNYXNrIHw9ICgxIDw8IGZ1bGxJbmRleCk7XG4gICAgICAgIGRlbnNlLmZpbmFsU2hhcGVHYXRoZXJJbmRpY2VzLnB1c2goZnVsbEluZGV4KTtcbiAgICAgICAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXNTcGFyc2UucHVzaCgtMSk7XG4gICAgICAgIGRlbnNlLmlucHV0U2hhcGVHYXRoZXJJbmRpY2VzU3BhcnNlW2Z1bGxJbmRleF0gPSBpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDEgPDwgaSkgJiBzcGFyc2UubmV3QXhpc01hc2spIHtcbiAgICAgIC8vIE9ubHkgdGhlIGJpdCB0aGF0IGhhcyBuZXdBeGlzIHdpbGwgZmFsbCBpbiB0aGlzIGNvbmRpdGlvbi5cbiAgICAgIGRlbnNlLmZpbmFsU2hhcGVHYXRoZXJJbmRpY2VzLnB1c2goTkVXX0FYSVMpO1xuICAgICAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXNTcGFyc2UucHVzaCgtMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmdWxsSW5kZXggPT09IGRlbnNlLmJlZ2luLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIGBJbmRleCBvdXQgb2YgcmFuZ2UgdXNpbmcgaW5wdXQgZGltICR7ZnVsbEluZGV4fTsgaW5wdXQgYCArXG4gICAgICAgICAgICBgaGFzIG9ubHkgJHtkZW5zZS5kaW1zfSBkaW1zLCAke2RlbnNlLmJlZ2luLmxlbmd0aH0uYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdhdGhlciBzbGljaW5nIHNwZWMgaW50byBhcHByb3ByaWF0ZSBpbmRleC5cbiAgICAgIGlmIChzcGFyc2UuYmVnaW4gIT0gbnVsbCkge1xuICAgICAgICBkZW5zZS5iZWdpbltmdWxsSW5kZXhdID0gc3BhcnNlLmJlZ2luW2ldO1xuICAgICAgfVxuICAgICAgaWYgKHNwYXJzZS5lbmQgIT0gbnVsbCkge1xuICAgICAgICBkZW5zZS5lbmRbZnVsbEluZGV4XSA9IHNwYXJzZS5lbmRbaV07XG4gICAgICB9XG4gICAgICBkZW5zZS5zdHJpZGVzW2Z1bGxJbmRleF0gPSBzcGFyc2Uuc3RyaWRlc1tpXTtcbiAgICAgIGlmIChzcGFyc2UuYmVnaW5NYXNrICYgKDEgPDwgaSkpIHtcbiAgICAgICAgZGVuc2UuYmVnaW5NYXNrIHw9ICgxIDw8IGZ1bGxJbmRleCk7XG4gICAgICB9XG4gICAgICBpZiAoc3BhcnNlLmVuZE1hc2sgJiAoMSA8PCBpKSkge1xuICAgICAgICBkZW5zZS5lbmRNYXNrIHw9ICgxIDw8IGZ1bGxJbmRleCk7XG4gICAgICB9XG4gICAgICAvLyBJZiBzaHJpbmssIHJlY29yZCB3aGVyZSB0byBnZXQgdGhlIGRpbWVuc2lvbmFsaXR5IGZyb20gKGkuZS4gbmV3QXhpcylcbiAgICAgIC8vIGNyZWF0ZXMgYSBmYWtlIDEgc2l6ZSBkaW1lbnNpb24uIEFsc28gcmVtZW1iZXIgc2hyaW5rIGF4aXMgKG5vdyBpblxuICAgICAgLy8gZGVuc2UgZm9ybSkgc28gd2UgY2FuIGlnbm9yZSBkZW5zZS5lbmQgYmVsb3cuXG4gICAgICBpZiAoc3BhcnNlLnNocmlua0F4aXNNYXNrICYgKDEgPDwgaSkpIHtcbiAgICAgICAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXMucHVzaChTSFJJTktfQVhJUyk7XG4gICAgICAgIGRlbnNlLmZpbmFsU2hhcGVHYXRoZXJJbmRpY2VzU3BhcnNlLnB1c2goLTEpO1xuICAgICAgICBkZW5zZS5zaHJpbmtBeGlzTWFzayB8PSAoMSA8PCBmdWxsSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXMucHVzaChmdWxsSW5kZXgpO1xuICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHdoZXJlIGluIHRoZSBzcGFyc2Ugc2hhcGUgdGhlIGRlbnNlIGRpbSBjb21lcyBmcm9tLlxuICAgICAgICBkZW5zZS5maW5hbFNoYXBlR2F0aGVySW5kaWNlc1NwYXJzZS5wdXNoKGkpO1xuICAgICAgfVxuICAgICAgZGVuc2UuaW5wdXRTaGFwZUdhdGhlckluZGljZXNTcGFyc2VbZnVsbEluZGV4XSA9IGk7XG4gICAgICBmdWxsSW5kZXgrKztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2Fub25pY2FsKFxuICAgIHg6IG51bWJlciwgYzogbnVtYmVyLCBzdHJpZGVJOiBudW1iZXIsIGRpbUk6IG51bWJlciwgbWFza3M6IG51bWJlcltdLFxuICAgIHZhbGlkUmFuZ2U6IG51bWJlcltdKSB7XG4gIGlmIChtYXNrc1tjXSkge1xuICAgIHJldHVybiBzdHJpZGVJID4gMCA/IHZhbGlkUmFuZ2VbY10gOiB2YWxpZFJhbmdlWyhjICsgMSkgJiAxXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB4RndkID0geCA8IDAgPyBkaW1JICsgeCA6IHg7ICAvLyBtYWtlIG5lZ2F0aXZlIGluZGljZXMgcG9zaXRpdmVcbiAgICByZXR1cm4geEZ3ZCA8IHZhbGlkUmFuZ2VbMF0gPyB2YWxpZFJhbmdlWzBdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RndkID4gdmFsaWRSYW5nZVsxXSA/IHZhbGlkUmFuZ2VbMV0gOiB4RndkO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from './engine';\nimport { inferShape } from './tensor_util_env';\nimport { arraysEqual, encodeString, flatten, isString, isTypedArray } from './util';\nconst TEST_EPSILON_FLOAT32 = 1e-3;\nexport const TEST_EPSILON_FLOAT16 = 1e-1;\nexport function expectArraysClose(actual, expected, epsilon) {\n if (epsilon == null) {\n epsilon = testEpsilon();\n }\n return expectArraysPredicate(actual, expected, (a, b) => areClose(a, b, epsilon));\n}\nexport function testEpsilon() {\n return ENGINE.backend.floatPrecision() === 32 ? TEST_EPSILON_FLOAT32 :\n TEST_EPSILON_FLOAT16;\n}\nfunction expectArraysPredicate(actual, expected, predicate) {\n let checkClassType = true;\n if (isTypedArray(actual) || isTypedArray(expected)) {\n checkClassType = false;\n }\n if (isTypedArray(actual) && isTypedArray(expected)) {\n checkClassType = true;\n }\n if (checkClassType) {\n const aType = actual.constructor.name;\n const bType = expected.constructor.name;\n if (aType !== bType) {\n throw new Error(`Arrays are of different type. Actual: ${aType}. ` +\n `Expected: ${bType}`);\n }\n }\n if (Array.isArray(actual) && Array.isArray(expected)) {\n const actualShape = inferShape(actual);\n const expectedShape = inferShape(expected);\n if (!arraysEqual(actualShape, expectedShape)) {\n throw new Error(`Arrays have different shapes. ` +\n `Actual: [${actualShape}]. Expected: [${expectedShape}]`);\n }\n }\n const actualFlat = isTypedArray(actual) ? actual : flatten(actual);\n const expectedFlat = isTypedArray(expected) ?\n expected :\n flatten(expected);\n if (actualFlat.length !== expectedFlat.length) {\n throw new Error(`Arrays have different lengths actual: ${actualFlat.length} vs ` +\n `expected: ${expectedFlat.length}.\\n` +\n `Actual: ${actualFlat}.\\n` +\n `Expected: ${expectedFlat}.`);\n }\n for (let i = 0; i < expectedFlat.length; ++i) {\n const a = actualFlat[i];\n const e = expectedFlat[i];\n if (!predicate(a, e)) {\n throw new Error(`Arrays differ: actual[${i}] = ${a}, expected[${i}] = ${e}.\\n` +\n `Actual: ${actualFlat}.\\n` +\n `Expected: ${expectedFlat}.`);\n }\n }\n if (typeof expect !== 'undefined') {\n expect().nothing();\n }\n}\nexport function expectPromiseToFail(fn, done) {\n fn().then(() => done.fail(), () => done());\n if (typeof expect !== 'undefined') {\n expect().nothing();\n }\n}\nexport function expectArraysEqual(actual, expected) {\n const exp = typeof expected === 'string' || typeof expected === 'number' ||\n typeof expected === 'boolean' ?\n [expected] :\n expected;\n if (isString(actual) || isString(actual[0]) ||\n isString(expected) || isString(expected[0])) {\n // tslint:disable-next-line: triple-equals\n return expectArraysPredicate(actual, exp, (a, b) => a == b);\n }\n return expectArraysPredicate(actual, expected, (a, b) => areClose(a, b, 0));\n}\nexport function expectNumbersClose(a, e, epsilon) {\n if (epsilon == null) {\n epsilon = testEpsilon();\n }\n if (!areClose(a, e, epsilon)) {\n throw new Error(`Numbers differ: actual === ${a}, expected === ${e}`);\n }\n if (typeof expect !== 'undefined') {\n expect().nothing();\n }\n}\nfunction areClose(a, e, epsilon) {\n if (!isFinite(a) && !isFinite(e)) {\n return true;\n }\n if (isNaN(a) || isNaN(e) || Math.abs(a - e) > epsilon) {\n return false;\n }\n return true;\n}\nexport function expectValuesInRange(actual, low, high) {\n for (let i = 0; i < actual.length; i++) {\n if (actual[i] < low || actual[i] > high) {\n throw new Error(`Value out of range:${actual[i]} low: ${low}, high: ${high}`);\n }\n }\n}\nexport function expectArrayBuffersEqual(actual, expected) {\n // Safari does not like comparing ArrayBuffers directly. Wrapping in\n // a Float32Array solves this issue.\n const actualArray = new Float32Array(actual);\n const expectedArray = new Float32Array(expected);\n if (actualArray.length !== expectedArray.length) {\n throw new Error('Expected ArrayBuffer to be of length ' +\n `${expectedArray.length}, but it was ${actualArray.length}`);\n }\n for (let i = 0; i < expectedArray.length; i++) {\n if (actualArray[i] !== expectedArray[i]) {\n throw new Error(`Expected ArrayBuffer value at ${i} to be ` +\n `${expectedArray[i]} but got ${actualArray[i]} instead`);\n }\n }\n}\n/** Encodes strings into utf-8 bytes. */\nexport function encodeStrings(a) {\n for (let i = 0; i < a.length; i++) {\n const val = a[i];\n if (Array.isArray(val)) {\n encodeStrings(val);\n }\n else {\n a[i] = encodeString(val);\n }\n }\n return a;\n}\n/** Creates an HTMLVideoElement with autoplay-friendly default settings. */\nexport function createVideoElement(source) {\n const video = document.createElement('video');\n if ('playsInline' in video) {\n // tslint:disable-next-line:no-any\n video.playsInline = true;\n }\n video.muted = true;\n video.loop = true;\n video.style.position = 'fixed';\n video.style.left = '0px';\n video.style.top = '0px';\n video.preload = 'auto';\n video.appendChild(source);\n return new Promise(resolve => {\n video.addEventListener('loadeddata', _ => resolve(video));\n video.load();\n });\n}\nexport async function play(video) {\n await video.play();\n if ('requestVideoFrameCallback' in video) {\n await new Promise(resolve => {\n // tslint:disable-next-line:no-any\n video.requestVideoFrameCallback(resolve);\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy90ZXN0X3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0MsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFbEYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRXpDLE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsTUFBZ0QsRUFDaEQsUUFBa0QsRUFBRSxPQUFnQjtJQUN0RSxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7UUFDbkIsT0FBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxxQkFBcUIsQ0FDeEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFXLEVBQUUsQ0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdEIsb0JBQW9CLENBQUM7QUFDdkUsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQzFCLE1BQWtCLEVBQUUsUUFBb0IsRUFDeEMsU0FBb0M7SUFDdEMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzFCLElBQUksWUFBWSxDQUFDLE1BQU0s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QUFJLENBQUM7S0FDbkM7SUFDRCxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNuQixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUV4QixLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN2QixLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLEtBQXVCO0lBQ2hELE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25CLElBQUksMkJBQTJCLElBQUksS0FBSyxFQUFFO1FBQ3hDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsa0NBQWtDO1lBQ2pDLEtBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4vZW5naW5lJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSZWN1cnNpdmVBcnJheSwgVGVuc29yTGlrZSwgVHlwZWRBcnJheX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2FycmF5c0VxdWFsLCBlbmNvZGVTdHJpbmcsIGZsYXR0ZW4sIGlzU3RyaW5nLCBpc1R5cGVkQXJyYXl9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IFRFU1RfRVBTSUxPTl9GTE9BVDMyID0gMWUtMztcbmV4cG9ydCBjb25zdCBURVNUX0VQU0lMT05fRkxPQVQxNiA9IDFlLTE7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheXNDbG9zZShcbiAgICBhY3R1YWw6IFR5cGVkQXJyYXl8bnVtYmVyfFJlY3Vyc2l2ZUFycmF5PG51bWJlcj4sXG4gICAgZXhwZWN0ZWQ6IFR5cGVkQXJyYXl8bnVtYmVyfFJlY3Vyc2l2ZUFycmF5PG51bWJlcj4sIGVwc2lsb24/OiBudW1iZXIpIHtcbiAgaWYgKGVwc2lsb24gPT0gbnVsbCkge1xuICAgIGVwc2lsb24gPSB0ZXN0RXBzaWxvbigpO1xuICB9XG4gIHJldHVybiBleHBlY3RBcnJheXNQcmVkaWNhdGUoXG4gICAgICBhY3R1YWwsIGV4cGVjdGVkLCAoYSwgYikgPT4gYXJlQ2xvc2UoYSBhcyBudW1iZXIsIGIgYXMgbnVtYmVyLCBlcHNpbG9uKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RXBzaWxvbigpIHtcbiAgcmV0dXJuIEVOR0lORS5iYWNrZW5kLmZsb2F0UHJlY2lzaW9uKCkgPT09IDMyID8gVEVTVF9FUFNJTE9OX0ZMT0FUMzIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0VQU0lMT05fRkxPQVQxNjtcbn1cblxuZnVuY3Rpb24gZXhwZWN0QXJyYXlzUHJlZGljYXRlKFxuICAgIGFjdHVhbDogVGVuc29yTGlrZSwgZXhwZWN0ZWQ6IFRlbnNvckxpa2UsXG4gICAgcHJlZGljYXRlOiAoYToge30sIGI6IHt9KSA9PiBib29sZWFuKSB7XG4gIGxldCBjaGVja0NsYXNzVHlwZSA9IHRydWU7XG4gIGlmIChpc1R5cGVkQXJyYXkoYWN0dWFsKSB8fCBpc1R5cGVkQXJyYXkoZXhwZWN0ZWQpKSB7XG4gICAgY2hlY2tDbGFzc1R5cGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNUeXBlZEFycmF5KGFjdHVhbCkgJiYgaXNUeXBlZEFycmF5KGV4cGVjdGVkKSkge1xuICAgIGNoZWNrQ2xhc3NUeXBlID0gdHJ1ZTtcbiAgfVxuICBpZiAoY2hlY2tDbGFzc1R5cGUpIHtcbiAgICBjb25zdCBhVHlwZSA9IGFjdHVhbC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGNvbnN0IGJUeXBlID0gZXhwZWN0ZWQuY29uc3RydWN0b3IubmFtZTtcblxuICAgIGlmIChhVHlwZSAhPT0gYlR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZS4gQWN0dWFsOiAke2FUeXBlfS4gYCArXG4gICAgICAgICAgYEV4cGVjdGVkOiAke2JUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGFjdHVhbCkgJiYgQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICBjb25zdCBhY3R1YWxTaGFwZSA9IGluZmVyU2hhcGUoYWN0dWFsKTtcbiAgICBjb25zdCBleHBlY3RlZFNoYXBlID0gaW5mZXJTaGFwZShleHBlY3RlZCk7XG4gICAgaWYgKCFhcnJheXNFcXVhbChhY3R1YWxTaGFwZSwgZXhwZWN0ZWRTaGFwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXJyYXlzIGhhdmUgZGlmZmVyZW50IHNoYXBlcy4gYCArXG4gICAgICAgICAgYEFjdHVhbDogWyR7YWN0dWFsU2hhcGV9XS4gRXhwZWN0ZWQ6IFske2V4cGVjdGVkU2hhcGV9XWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFjdHVhbEZsYXQgPVxuICAgICAgaXNUeXBlZEFycmF5KGFjdHVhbCkgPyBhY3R1YWwgOiBmbGF0dGVuKGFjdHVhbCBhcyBSZWN1cnNpdmVBcnJheTxudW1iZXI+KTtcbiAgY29uc3QgZXhwZWN0ZWRGbGF0ID0gaXNUeXBlZEFycmF5KGV4cGVjdGVkKSA/XG4gICAgICBleHBlY3RlZCA6XG4gICAgICBmbGF0dGVuKGV4cGVjdGVkIGFzIFJlY3Vyc2l2ZUFycmF5PG51bWJlcj4pO1xuXG4gIGlmIChhY3R1YWxGbGF0Lmxlbmd0aCAhPT0gZXhwZWN0ZWRGbGF0Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFycmF5cyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzIGFjdHVhbDogJHthY3R1YWxGbGF0Lmxlbmd0aH0gdnMgYCArXG4gICAgICAgIGBleHBlY3RlZDogJHtleHBlY3RlZEZsYXQubGVuZ3RofS5cXG5gICtcbiAgICAgICAgYEFjdHVhbDogICAke2FjdHVhbEZsYXR9LlxcbmAgK1xuICAgICAgICBgRXhwZWN0ZWQ6ICR7ZXhwZWN0ZWRGbGF0fS5gKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkRmxhdC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGEgPSBhY3R1YWxGbGF0W2ldO1xuICAgIGNvbnN0IGUgPSBleHBlY3RlZEZsYXRbaV07XG5cbiAgICBpZiAoIXByZWRpY2F0ZShhLCBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBcnJheXMgZGlmZmVyOiBhY3R1YWxbJHtpfV0gPSAke2F9LCBleHBlY3RlZFske2l9XSA9ICR7ZX0uXFxuYCArXG4gICAgICAgICAgYEFjdHVhbDogICAke2FjdHVhbEZsYXR9LlxcbmAgK1xuICAgICAgICAgIGBFeHBlY3RlZDogJHtleHBlY3RlZEZsYXR9LmApO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGV4cGVjdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBlY3QoKS5ub3RoaW5nKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lRm4ge1xuICAoKTogdm9pZDtcbiAgZmFpbDogKG1lc3NhZ2U/OiBFcnJvcnxzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RQcm9taXNlVG9GYWlsKGZuOiAoKSA9PiBQcm9taXNlPHt9PiwgZG9uZTogRG9uZUZuKTogdm9pZCB7XG4gIGZuKCkudGhlbigoKSA9PiBkb25lLmZhaWwoKSwgKCkgPT4gZG9uZSgpKTtcbiAgaWYgKHR5cGVvZiBleHBlY3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwZWN0KCkubm90aGluZygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheXNFcXVhbChhY3R1YWw6IFRlbnNvckxpa2UsIGV4cGVjdGVkOiBUZW5zb3JMaWtlKSB7XG4gIGNvbnN0IGV4cCA9IHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV4cGVjdGVkID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgIHR5cGVvZiBleHBlY3RlZCA9PT0gJ2Jvb2xlYW4nID9cbiAgICAgIFtleHBlY3RlZF0gYXMgbnVtYmVyW10gOlxuICAgICAgZXhwZWN0ZWQgYXMgbnVtYmVyW107XG4gIGlmIChpc1N0cmluZyhhY3R1YWwpIHx8IGlzU3RyaW5nKChhY3R1YWwgYXMgc3RyaW5nW10pWzBdKSB8fFxuICAgICAgaXNTdHJpbmcoZXhwZWN0ZWQpIHx8IGlzU3RyaW5nKChleHBlY3RlZCBhcyBzdHJpbmdbXSlbMF0pKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB0cmlwbGUtZXF1YWxzXG4gICAgcmV0dXJuIGV4cGVjdEFycmF5c1ByZWRpY2F0ZShhY3R1YWwsIGV4cCwgKGEsIGIpID0+IGEgPT0gYik7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdEFycmF5c1ByZWRpY2F0ZShcbiAgICAgIGFjdHVhbCwgZXhwZWN0ZWQsIChhLCBiKSA9PiBhcmVDbG9zZShhIGFzIG51bWJlciwgYiBhcyBudW1iZXIsIDApKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE51bWJlcnNDbG9zZShhOiBudW1iZXIsIGU6IG51bWJlciwgZXBzaWxvbj86IG51bWJlcikge1xuICBpZiAoZXBzaWxvbiA9PSBudWxsKSB7XG4gICAgZXBzaWxvbiA9IHRlc3RFcHNpbG9uKCk7XG4gIH1cbiAgaWYgKCFhcmVDbG9zZShhLCBlLCBlcHNpbG9uKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTnVtYmVycyBkaWZmZXI6IGFjdHVhbCA9PT0gJHthfSwgZXhwZWN0ZWQgPT09ICR7ZX1gKTtcbiAgfVxuICBpZiAodHlwZW9mIGV4cGVjdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBlY3QoKS5ub3RoaW5nKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlQ2xvc2UoYTogbnVtYmVyLCBlOiBudW1iZXIsIGVwc2lsb246IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAoIWlzRmluaXRlKGEpICYmICFpc0Zpbml0ZShlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc05hTihhKSB8fCBpc05hTihlKSB8fCBNYXRoLmFicyhhIC0gZSkgPiBlcHNpbG9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0VmFsdWVzSW5SYW5nZShcbiAgICBhY3R1YWw6IFR5cGVkQXJyYXl8bnVtYmVyW10sIGxvdzogbnVtYmVyLCBoaWdoOiBudW1iZXIpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIDwgbG93IHx8IGFjdHVhbFtpXSA+IGhpZ2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVmFsdWUgb3V0IG9mIHJhbmdlOiR7YWN0dWFsW2ldfSBsb3c6ICR7bG93fSwgaGlnaDogJHtoaWdofWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXlCdWZmZXJzRXF1YWwoXG4gICAgYWN0dWFsOiBBcnJheUJ1ZmZlciwgZXhwZWN0ZWQ6IEFycmF5QnVmZmVyKSB7XG4gIC8vIFNhZmFyaSBkb2VzIG5vdCBsaWtlIGNvbXBhcmluZyBBcnJheUJ1ZmZlcnMgZGlyZWN0bHkuIFdyYXBwaW5nIGluXG4gIC8vIGEgRmxvYXQzMkFycmF5IHNvbHZlcyB0aGlzIGlzc3VlLlxuICBjb25zdCBhY3R1YWxBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYWN0dWFsKTtcbiAgY29uc3QgZXhwZWN0ZWRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoZXhwZWN0ZWQpO1xuICBpZiAoYWN0dWFsQXJyYXkubGVuZ3RoICE9PSBleHBlY3RlZEFycmF5Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIEFycmF5QnVmZmVyIHRvIGJlIG9mIGxlbmd0aCAnICtcbiAgICAgICAgYCR7ZXhwZWN0ZWRBcnJheS5sZW5ndGh9LCBidXQgaXQgd2FzICR7YWN0dWFsQXJyYXkubGVuZ3RofWApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3RlZEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFjdHVhbEFycmF5W2ldICE9PSBleHBlY3RlZEFycmF5W2ldKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIEFycmF5QnVmZmVyIHZhbHVlIGF0ICR7aX0gdG8gYmUgYCArXG4gICAgICAgICAgYCR7ZXhwZWN0ZWRBcnJheVtpXX0gYnV0IGdvdCAke2FjdHVhbEFycmF5W2ldfSBpbnN0ZWFkYCk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBFbmNvZGVzIHN0cmluZ3MgaW50byB1dGYtOCBieXRlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVTdHJpbmdzKGE6IFJlY3Vyc2l2ZUFycmF5PHt9Pik6XG4gICAgUmVjdXJzaXZlQXJyYXk8VWludDhBcnJheT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IChhIGFzIEFycmF5PHt9PikubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2YWwgPSBhW2ldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGVuY29kZVN0cmluZ3ModmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtpXSA9IGVuY29kZVN0cmluZyh2YWwgYXMgc3RyaW5nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGEgYXMgUmVjdXJzaXZlQXJyYXk8VWludDhBcnJheT47XG59XG5cbi8qKiBDcmVhdGVzIGFuIEhUTUxWaWRlb0VsZW1lbnQgd2l0aCBhdXRvcGxheS1mcmllbmRseSBkZWZhdWx0IHNldHRpbmdzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZpZGVvRWxlbWVudChzb3VyY2U6IEhUTUxTb3VyY2VFbGVtZW50KTpcbiAgICBQcm9taXNlPEhUTUxWaWRlb0VsZW1lbnQ+IHtcbiAgY29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuICBpZiAoJ3BsYXlzSW5saW5lJyBpbiB2aWRlbykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAodmlkZW8gYXMgYW55KS5wbGF5c0lubGluZSA9IHRydWU7XG4gIH1cbiAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICB2aWRlby5sb29wID0gdHJ1ZTtcbiAgdmlkZW8uc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICB2aWRlby5zdHlsZS5sZWZ0ID0gJzBweCc7XG4gIHZpZGVvLnN0eWxlLnRvcCA9ICcwcHgnO1xuXG4gIHZpZGVvLnByZWxvYWQgPSAnYXV0byc7XG4gIHZpZGVvLmFwcGVuZENoaWxkKHNvdXJjZSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgXyA9PiByZXNvbHZlKHZpZGVvKSk7XG4gICAgdmlkZW8ubG9hZCgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXkodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgYXdhaXQgdmlkZW8ucGxheSgpO1xuICBpZiAoJ3JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2snIGluIHZpZGVvKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAodmlkZW8gYXMgYW55KS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","/** @license See the LICENSE file. */\n// This code is auto-generated, do not modify this file!\nconst version = '4.19.0';\nexport { version };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FBcUM7QUFFckMsd0RBQXdEO0FBQ3hELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUN6QixPQUFPLEVBQUMsT0FBTyxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGxpY2Vuc2UgU2VlIHRoZSBMSUNFTlNFIGZpbGUuICovXG5cbi8vIFRoaXMgY29kZSBpcyBhdXRvLWdlbmVyYXRlZCwgZG8gbm90IG1vZGlmeSB0aGlzIGZpbGUhXG5jb25zdCB2ZXJzaW9uID0gJzQuMTkuMCc7XG5leHBvcnQge3ZlcnNpb259O1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AdadeltaOptimizer } from './adadelta_optimizer';\nimport { AdagradOptimizer } from './adagrad_optimizer';\nimport { AdamOptimizer } from './adam_optimizer';\nimport { AdamaxOptimizer } from './adamax_optimizer';\nimport { MomentumOptimizer } from './momentum_optimizer';\nimport { RMSPropOptimizer } from './rmsprop_optimizer';\nimport { SGDOptimizer } from './sgd_optimizer';\nexport class OptimizerConstructors {\n /**\n * Constructs a `tf.SGDOptimizer` that uses stochastic gradient descent.\n *\n * ```js\n * // Fit a quadratic function by learning the coefficients a, b, c.\n * const xs = tf.tensor1d([0, 1, 2, 3]);\n * const ys = tf.tensor1d([1.1, 5.9, 16.8, 33.9]);\n *\n * const a = tf.scalar(Math.random()).variable();\n * const b = tf.scalar(Math.random()).variable();\n * const c = tf.scalar(Math.random()).variable();\n *\n * // y = a * x^2 + b * x + c.\n * const f = x => a.mul(x.square()).add(b.mul(x)).add(c);\n * const loss = (pred, label) => pred.sub(label).square().mean();\n *\n * const learningRate = 0.01;\n * const optimizer = tf.train.sgd(learningRate);\n *\n * // Train the model.\n * for (let i = 0; i < 10; i++) {\n * optimizer.minimize(() => loss(f(xs), ys));\n * }\n *\n * // Make predictions.\n * console.log(\n * `a: ${a.dataSync()}, b: ${b.dataSync()}, c: ${c.dataSync()}`);\n * const preds = f(xs).dataSync();\n * preds.forEach((pred, i) => {\n * console.log(`x: ${i}, pred: ${pred}`);\n * });\n * ```\n *\n * @param learningRate The learning rate to use for the SGD algorithm.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n */\n static sgd(learningRate) {\n return new SGDOptimizer(learningRate);\n }\n /**\n * Constructs a `tf.MomentumOptimizer` that uses momentum gradient\n * descent.\n *\n * See\n * [http://proceedings.mlr.press/v28/sutskever13.pdf](\n * http://proceedings.mlr.press/v28/sutskever13.pdf)\n *\n * @param learningRate The learning rate to use for the Momentum gradient\n * descent algorithm.\n * @param momentum The momentum to use for the momentum gradient descent\n * algorithm.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n */\n static momentum(learningRate, momentum, useNesterov = false) {\n return new MomentumOptimizer(learningRate, momentum, useNesterov);\n }\n /**\n * Constructs a `tf.RMSPropOptimizer` that uses RMSProp gradient\n * descent. This implementation uses plain momentum and is not centered\n * version of RMSProp.\n *\n * See\n * [http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf](\n * http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf)\n *\n * @param learningRate The learning rate to use for the RMSProp gradient\n * descent algorithm.\n * @param decay The discounting factor for the history/coming gradient.\n * @param momentum The momentum to use for the RMSProp gradient descent\n * algorithm.\n * @param epsilon Small value to avoid zero denominator.\n * @param centered If true, gradients are normalized by the estimated\n * variance of the gradient.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n */\n static rmsprop(learningRate, decay = .9, momentum = 0.0, epsilon = null, centered = false) {\n return new RMSPropOptimizer(learningRate, decay, momentum, epsilon, centered);\n }\n /**\n * Constructs a `tf.AdamOptimizer` that uses the Adam algorithm.\n * See [https://arxiv.org/abs/1412.6980](https://arxiv.org/abs/1412.6980)\n *\n * @param learningRate The learning rate to use for the Adam gradient\n * descent algorithm.\n * @param beta1 The exponential decay rate for the 1st moment estimates.\n * @param beta2 The exponential decay rate for the 2nd moment estimates.\n * @param epsilon A small constant for numerical stability.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n */\n static adam(learningRate = 0.001, beta1 = 0.9, beta2 = 0.999, epsilon = null) {\n return new AdamOptimizer(learningRate, beta1, beta2, epsilon);\n }\n /**\n * Constructs a `tf.AdadeltaOptimizer` that uses the Adadelta algorithm.\n * See [https://arxiv.org/abs/1212.5701](https://arxiv.org/abs/1212.5701)\n *\n * @param learningRate The learning rate to use for the Adadelta gradient\n * descent algorithm.\n * @param rho The learning rate decay over each update.\n * @param epsilon A constant epsilon used to better condition the grad\n * update.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n */\n static adadelta(learningRate = .001, rho = .95, epsilon = null) {\n return new AdadeltaOptimizer(learningRate, rho, epsilon);\n }\n /**\n * Constructs a `tf.AdamaxOptimizer` that uses the Adamax algorithm.\n * See [https://arxiv.org/abs/1412.6980](https://arxiv.org/abs/1412.6980)\n *\n * @param learningRate The learning rate to use for the Adamax gradient\n * descent algorithm.\n * @param beta1 The exponential decay rate for the 1st moment estimates.\n * @param beta2 The exponential decay rate for the 2nd moment estimates.\n * @param epsilon A small constant for numerical stability.\n * @param decay The learning rate decay over each update.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n */\n static adamax(learningRate = 0.002, beta1 = 0.9, beta2 = 0.999, epsilon = null, decay = 0.0) {\n return new AdamaxOptimizer(learningRate, beta1, beta2, epsilon, decay);\n }\n /**\n * Constructs a `tf.AdagradOptimizer` that uses the Adagrad algorithm.\n * See\n * [http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf](\n * http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf)\n * or\n * [http://ruder.io/optimizing-gradient-descent/index.html#adagrad](\n * http://ruder.io/optimizing-gradient-descent/index.html#adagrad)\n *\n * @param learningRate The learning rate to use for the Adagrad gradient\n * descent algorithm.\n * @param initialAccumulatorValue Starting value for the accumulators, must be\n * positive.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers', namespace: 'train'}\n */\n static adagrad(learningRate, initialAccumulatorValue = 0.1) {\n return new AdagradOptimizer(learningRate, initialAccumulatorValue);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyX2NvbnN0cnVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3B0aW1pemVycy9vcHRpbWl6ZXJfY29uc3RydWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9DRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBb0I7UUFDN0IsT0FBTyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQW9CLEVBQUUsUUFBZ0IsRUFBRSxXQUFXLEdBQUcsS0FBSztRQUV6RSxPQUFPLElBQUksaUJBQWlCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUNWLFlBQW9CLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsR0FBRyxFQUFFLFVBQWtCLElBQUksRUFDeEUsUUFBUSxHQUFHLEtBQUs7UUFDbEIsT0FBTyxJQUFJLGdCQUFnQixDQUN2QixZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FDUCxZQUFZLEdBQUcsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFDaEQsVUFBa0IsSUFBSTtRQUN4QixPQUFPLElBQUksYUFBYSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLFVBQWtCLElBQUk7UUFFcEUsT0FBTyxJQUFJLGlCQUFpQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQ1QsWUFBWSxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsVUFBa0IsSUFBSSxFQUN4RSxLQUFLLEdBQUcsR0FBRztRQUNiLE9BQU8sSUFBSSxlQUFlLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQW9CLEVBQUUsdUJBQXVCLEdBQUcsR0FBRztRQUVoRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDckUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FkYWRlbHRhT3B0aW1pemVyfSBmcm9tICcuL2FkYWRlbHRhX29wdGltaXplcic7XG5pbXBvcnQge0FkYWdyYWRPcHRpbWl6ZXJ9IGZyb20gJy4vYWRhZ3JhZF9vcHRpbWl6ZXInO1xuaW1wb3J0IHtBZGFtT3B0aW1pemVyfSBmcm9tICcuL2FkYW1fb3B0aW1pemVyJztcbmltcG9ydCB7QWRhbWF4T3B0aW1pemVyfSBmcm9tICcuL2FkYW1heF9vcHRpbWl6ZXInO1xuaW1wb3J0IHtNb21lbnR1bU9wdGltaXplcn0gZnJvbSAnLi9tb21lbnR1bV9vcHRpbWl6ZXInO1xuaW1wb3J0IHtSTVNQcm9wT3B0aW1pemVyfSBmcm9tICcuL3Jtc3Byb3Bfb3B0aW1pemVyJztcbmltcG9ydCB7U0dET3B0aW1pemVyfSBmcm9tICcuL3NnZF9vcHRpbWl6ZXInO1xuXG5leHBvcnQgY2xhc3MgT3B0aW1pemVyQ29uc3RydWN0b3JzIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBgdGYuU0dET3B0aW1pemVyYCB0aGF0IHVzZXMgc3RvY2hhc3RpYyBncmFkaWVudCBkZXNjZW50LlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyBGaXQgYSBxdWFkcmF0aWMgZnVuY3Rpb24gYnkgbGVhcm5pbmcgdGhlIGNvZWZmaWNpZW50cyBhLCBiLCBjLlxuICAgKiBjb25zdCB4cyA9IHRmLnRlbnNvcjFkKFswLCAxLCAyLCAzXSk7XG4gICAqIGNvbnN0IHlzID0gdGYudGVuc29yMWQoWzEuMSwgNS45LCAxNi44LCAzMy45XSk7XG4gICAqXG4gICAqIGNvbnN0IGEgPSB0Zi5zY2FsYXIoTWF0aC5yYW5kb20oKSkudmFyaWFibGUoKTtcbiAgICogY29uc3QgYiA9IHRmLnNjYWxhcihNYXRoLnJhbmRvbSgpKS52YXJpYWJsZSgpO1xuICAgKiBjb25zdCBjID0gdGYuc2NhbGFyKE1hdGgucmFuZG9tKCkpLnZhcmlhYmxlKCk7XG4gICAqXG4gICAqIC8vIHkgPSBhICogeF4yICsgYiAqIHggKyBjLlxuICAgKiBjb25zdCBmID0geCA9PiBhLm11bCh4LnNxdWFyZSgpKS5hZGQoYi5tdWwoeCkpLmFkZChjKTtcbiAgICogY29uc3QgbG9zcyA9IChwcmVkLCBsYWJlbCkgPT4gcHJlZC5zdWIobGFiZWwpLnNxdWFyZSgpLm1lYW4oKTtcbiAgICpcbiAgICogY29uc3QgbGVhcm5pbmdSYXRlID0gMC4wMTtcbiAgICogY29uc3Qgb3B0aW1pemVyID0gdGYudHJhaW4uc2dkKGxlYXJuaW5nUmF0ZSk7XG4gICAqXG4gICAqIC8vIFRyYWluIHRoZSBtb2RlbC5cbiAgICogZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAqICAgb3B0aW1pemVyLm1pbmltaXplKCgpID0+IGxvc3MoZih4cyksIHlzKSk7XG4gICAqIH1cbiAgICpcbiAgICogLy8gTWFrZSBwcmVkaWN0aW9ucy5cbiAgICogY29uc29sZS5sb2coXG4gICAqICAgICBgYTogJHthLmRhdGFTeW5jKCl9LCBiOiAke2IuZGF0YVN5bmMoKX0sIGM6ICR7Yy5kYXRhU3luYygpfWApO1xuICAgKiBjb25zdCBwcmVkcyA9IGYoeHMpLmRhdGFTeW5jKCk7XG4gICAqIHByZWRzLmZvckVhY2goKHByZWQsIGkpID0+IHtcbiAgICogICBjb25zb2xlLmxvZyhgeDogJHtpfSwgcHJlZDogJHtwcmVkfWApO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBsZWFybmluZ1JhdGUgVGhlIGxlYXJuaW5nIHJhdGUgdG8gdXNlIGZvciB0aGUgU0dEIGFsZ29yaXRobS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ09wdGltaXplcnMnLCBuYW1lc3BhY2U6ICd0cmFpbid9XG4gICAqL1xuICBzdGF0aWMgc2dkKGxlYXJuaW5nUmF0ZTogbnVtYmVyKTogU0dET3B0aW1pemVyIHtcbiAgICByZXR1cm4gbmV3IFNHRE9wdGltaXplcihsZWFybmluZ1JhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBgdGYuTW9tZW50dW1PcHRpbWl6ZXJgIHRoYXQgdXNlcyBtb21lbnR1bSBncmFkaWVudFxuICAgKiBkZXNjZW50LlxuICAgKlxuICAgKiBTZWVcbiAgICogW2h0dHA6Ly9wcm9jZWVkaW5ncy5tbHIucHJlc3MvdjI4L3N1dHNrZXZlcjEzLnBkZl0oXG4gICAqIGh0dHA6Ly9wcm9jZWVkaW5ncy5tbHIucHJlc3MvdjI4L3N1dHNrZXZlcjEzLnBkZilcbiAgICpcbiAgICogQHBhcmFtIGxlYXJuaW5nUmF0ZSBUaGUgbGVhcm5pbmcgcmF0ZSB0byB1c2UgZm9yIHRoZSBNb21lbnR1bSBncmFkaWVudFxuICAgKiBkZXNjZW50IGFsZ29yaXRobS5cbiAgICogQHBhcmFtIG1vbWVudHVtIFRoZSBtb21lbnR1bSB0byB1c2UgZm9yIHRoZSBtb21lbnR1bSBncmFkaWVudCBkZXNjZW50XG4gICAqIGFsZ29yaXRobS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ09wdGltaXplcnMnLCBuYW1lc3BhY2U6ICd0cmFpbid9XG4gICAqL1xuICBzdGF0aWMgbW9tZW50dW0obGVhcm5pbmdSYXRlOiBudW1iZXIsIG1vbWVudHVtOiBudW1iZXIsIHVzZU5lc3Rlcm92ID0gZmFsc2UpOlxuICAgICAgTW9tZW50dW1PcHRpbWl6ZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50dW1PcHRpbWl6ZXIobGVhcm5pbmdSYXRlLCBtb21lbnR1bSwgdXNlTmVzdGVyb3YpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBgdGYuUk1TUHJvcE9wdGltaXplcmAgdGhhdCB1c2VzIFJNU1Byb3AgZ3JhZGllbnRcbiAgICogZGVzY2VudC4gVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIHBsYWluIG1vbWVudHVtIGFuZCBpcyBub3QgY2VudGVyZWRcbiAgICogdmVyc2lvbiBvZiBSTVNQcm9wLlxuICAgKlxuICAgKiBTZWVcbiAgICogW2h0dHA6Ly93d3cuY3MudG9yb250by5lZHUvfnRpam1lbi9jc2MzMjEvc2xpZGVzL2xlY3R1cmVfc2xpZGVzX2xlYzYucGRmXShcbiAgICogaHR0cDovL3d3dy5jcy50b3JvbnRvLmVkdS9+dGlqbWVuL2NzYzMyMS9zbGlkZXMvbGVjdHVyZV9zbGlkZXNfbGVjNi5wZGYpXG4gICAqXG4gICAqIEBwYXJhbSBsZWFybmluZ1JhdGUgVGhlIGxlYXJuaW5nIHJhdGUgdG8gdXNlIGZvciB0aGUgUk1TUHJvcCBncmFkaWVudFxuICAgKiBkZXNjZW50IGFsZ29yaXRobS5cbiAgICogQHBhcmFtIGRlY2F5IFRoZSBkaXNjb3VudGluZyBmYWN0b3IgZm9yIHRoZSBoaXN0b3J5L2NvbWluZyBncmFkaWVudC5cbiAgICogQHBhcmFtIG1vbWVudHVtIFRoZSBtb21lbnR1bSB0byB1c2UgZm9yIHRoZSBSTVNQcm9wIGdyYWRpZW50IGRlc2NlbnRcbiAgICogYWxnb3JpdGhtLlxuICAgKiBAcGFyYW0gZXBzaWxvbiBTbWFsbCB2YWx1ZSB0byBhdm9pZCB6ZXJvIGRlbm9taW5hdG9yLlxuICAgKiBAcGFyYW0gY2VudGVyZWQgSWYgdHJ1ZSwgZ3JhZGllbnRzIGFyZSBub3JtYWxpemVkIGJ5IHRoZSBlc3RpbWF0ZWRcbiAgICogdmFyaWFuY2Ugb2YgdGhlIGdyYWRpZW50LlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnT3B0aW1pemVycycsIG5hbWVzcGFjZTogJ3RyYWluJ31cbiAgICovXG4gIHN0YXRpYyBybXNwcm9wKFxuICAgICAgbGVhcm5pbmdSYXRlOiBudW1iZXIsIGRlY2F5ID0gLjksIG1vbWVudHVtID0gMC4wLCBlcHNpbG9uOiBudW1iZXIgPSBudWxsLFxuICAgICAgY2VudGVyZWQgPSBmYWxzZSk6IFJNU1Byb3BPcHRpbWl6ZXIge1xuICAgIHJldHVybiBuZXcgUk1TUHJvcE9wdGltaXplcihcbiAgICAgICAgbGVhcm5pbmdSYXRlLCBkZWNheSwgbW9tZW50dW0sIGVwc2lsb24sIGNlbnRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgYHRmLkFkYW1PcHRpbWl6ZXJgIHRoYXQgdXNlcyB0aGUgQWRhbSBhbGdvcml0aG0uXG4gICAqIFNlZSBbaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzE0MTIuNjk4MF0oaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzE0MTIuNjk4MClcbiAgICpcbiAgICogQHBhcmFtIGxlYXJuaW5nUmF0ZSBUaGUgbGVhcm5pbmcgcmF0ZSB0byB1c2UgZm9yIHRoZSBBZGFtIGdyYWRpZW50XG4gICAqIGRlc2NlbnQgYWxnb3JpdGhtLlxuICAgKiBAcGFyYW0gYmV0YTEgVGhlIGV4cG9uZW50aWFsIGRlY2F5IHJhdGUgZm9yIHRoZSAxc3QgbW9tZW50IGVzdGltYXRlcy5cbiAgICogQHBhcmFtIGJldGEyIFRoZSBleHBvbmVudGlhbCBkZWNheSByYXRlIGZvciB0aGUgMm5kIG1vbWVudCBlc3RpbWF0ZXMuXG4gICAqIEBwYXJhbSBlcHNpbG9uIEEgc21hbGwgY29uc3RhbnQgZm9yIG51bWVyaWNhbCBzdGFiaWxpdHkuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdPcHRpbWl6ZXJzJywgbmFtZXNwYWNlOiAndHJhaW4nfVxuICAgKi9cbiAgc3RhdGljIGFkYW0oXG4gICAgICBsZWFybmluZ1JhdGUgPSAwLjAwMSwgYmV0YTEgPSAwLjksIGJldGEyID0gMC45OTksXG4gICAgICBlcHNpbG9uOiBudW1iZXIgPSBudWxsKTogQWRhbU9wdGltaXplciB7XG4gICAgcmV0dXJuIG5ldyBBZGFtT3B0aW1pemVyKGxlYXJuaW5nUmF0ZSwgYmV0YTEsIGJldGEyLCBlcHNpbG9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgYHRmLkFkYWRlbHRhT3B0aW1pemVyYCB0aGF0IHVzZXMgdGhlIEFkYWRlbHRhIGFsZ29yaXRobS5cbiAgICogU2VlIFtodHRwczovL2FyeGl2Lm9yZy9hYnMvMTIxMi41NzAxXShodHRwczovL2FyeGl2Lm9yZy9hYnMvMTIxMi41NzAxKVxuICAgKlxuICAgKiBAcGFyYW0gbGVhcm5pbmdSYXRlIFRoZSBsZWFybmluZyByYXRlIHRvIHVzZSBmb3IgdGhlIEFkYWRlbHRhIGdyYWRpZW50XG4gICAqIGRlc2NlbnQgYWxnb3JpdGhtLlxuICAgKiBAcGFyYW0gcmhvIFRoZSBsZWFybmluZyByYXRlIGRlY2F5IG92ZXIgZWFjaCB1cGRhdGUuXG4gICAqIEBwYXJhbSBlcHNpbG9uIEEgY29uc3RhbnQgZXBzaWxvbiB1c2VkIHRvIGJldHRlciBjb25kaXRpb24gdGhlIGdyYWRcbiAgICogdXBkYXRlLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnT3B0aW1pemVycycsIG5hbWVzcGFjZTogJ3RyYWluJ31cbiAgICovXG4gIHN0YXRpYyBhZGFkZWx0YShsZWFybmluZ1JhdGUgPSAuMDAxLCByaG8gPSAuOTUsIGVwc2lsb246IG51bWJlciA9IG51bGwpOlxuICAgICAgQWRhZGVsdGFPcHRpbWl6ZXIge1xuICAgIHJldHVybiBuZXcgQWRhZGVsdGFPcHRpbWl6ZXIobGVhcm5pbmdSYXRlLCByaG8sIGVwc2lsb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBgdGYuQWRhbWF4T3B0aW1pemVyYCB0aGF0IHVzZXMgdGhlIEFkYW1heCBhbGdvcml0aG0uXG4gICAqIFNlZSBbaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzE0MTIuNjk4MF0oaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzE0MTIuNjk4MClcbiAgICpcbiAgICogQHBhcmFtIGxlYXJuaW5nUmF0ZSBUaGUgbGVhcm5pbmcgcmF0ZSB0byB1c2UgZm9yIHRoZSBBZGFtYXggZ3JhZGllbnRcbiAgICogZGVzY2VudCBhbGdvcml0aG0uXG4gICAqIEBwYXJhbSBiZXRhMSBUaGUgZXhwb25lbnRpYWwgZGVjYXkgcmF0ZSBmb3IgdGhlIDFzdCBtb21lbnQgZXN0aW1hdGVzLlxuICAgKiBAcGFyYW0gYmV0YTIgVGhlIGV4cG9uZW50aWFsIGRlY2F5IHJhdGUgZm9yIHRoZSAybmQgbW9tZW50IGVzdGltYXRlcy5cbiAgICogQHBhcmFtIGVwc2lsb24gQSBzbWFsbCBjb25zdGFudCBmb3IgbnVtZXJpY2FsIHN0YWJpbGl0eS5cbiAgICogQHBhcmFtIGRlY2F5IFRoZSBsZWFybmluZyByYXRlIGRlY2F5IG92ZXIgZWFjaCB1cGRhdGUuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdPcHRpbWl6ZXJzJywgbmFtZXNwYWNlOiAndHJhaW4nfVxuICAgKi9cbiAgc3RhdGljIGFkYW1heChcbiAgICAgIGxlYXJuaW5nUmF0ZSA9IDAuMDAyLCBiZXRhMSA9IDAuOSwgYmV0YTIgPSAwLjk5OSwgZXBzaWxvbjogbnVtYmVyID0gbnVsbCxcbiAgICAgIGRlY2F5ID0gMC4wKTogQWRhbWF4T3B0aW1pemVyIHtcbiAgICByZXR1cm4gbmV3IEFkYW1heE9wdGltaXplcihsZWFybmluZ1JhdGUsIGJldGExLCBiZXRhMiwgZXBzaWxvbiwgZGVjYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBgdGYuQWRhZ3JhZE9wdGltaXplcmAgdGhhdCB1c2VzIHRoZSBBZGFncmFkIGFsZ29yaXRobS5cbiAgICogU2VlXG4gICAqIFtodHRwOi8vd3d3LmptbHIub3JnL3BhcGVycy92b2x1bWUxMi9kdWNoaTExYS9kdWNoaTExYS5wZGZdKFxuICAgKiBodHRwOi8vd3d3LmptbHIub3JnL3BhcGVycy92b2x1bWUxMi9kdWNoaTExYS9kdWNoaTExYS5wZGYpXG4gICAqIG9yXG4gICAqIFtodHRwOi8vcnVkZXIuaW8vb3B0aW1pemluZy1ncmFkaWVudC1kZXNjZW50L2luZGV4Lmh0bWwjYWRhZ3JhZF0oXG4gICAqIGh0dHA6Ly9ydWRlci5pby9vcHRpbWl6aW5nLWdyYWRpZW50LWRlc2NlbnQvaW5kZXguaHRtbCNhZGFncmFkKVxuICAgKlxuICAgKiBAcGFyYW0gbGVhcm5pbmdSYXRlIFRoZSBsZWFybmluZyByYXRlIHRvIHVzZSBmb3IgdGhlIEFkYWdyYWQgZ3JhZGllbnRcbiAgICogZGVzY2VudCBhbGdvcml0aG0uXG4gICAqIEBwYXJhbSBpbml0aWFsQWNjdW11bGF0b3JWYWx1ZSBTdGFydGluZyB2YWx1ZSBmb3IgdGhlIGFjY3VtdWxhdG9ycywgbXVzdCBiZVxuICAgKiBwb3NpdGl2ZS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ09wdGltaXplcnMnLCBuYW1lc3BhY2U6ICd0cmFpbid9XG4gICAqL1xuICBzdGF0aWMgYWRhZ3JhZChsZWFybmluZ1JhdGU6IG51bWJlciwgaW5pdGlhbEFjY3VtdWxhdG9yVmFsdWUgPSAwLjEpOlxuICAgICAgQWRhZ3JhZE9wdGltaXplciB7XG4gICAgcmV0dXJuIG5ldyBBZGFncmFkT3B0aW1pemVyKGxlYXJuaW5nUmF0ZSwgaW5pdGlhbEFjY3VtdWxhdG9yVmFsdWUpO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Acos } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes acos of the input `tf.Tensor` element-wise: `acos(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.acos().print(); // or tf.acos(x)\n * ```\n * @param x The input tensor.\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction acos_(x) {\n const $x = convertToTensor(x, 'x', 'acos');\n const inputs = { x: $x };\n return ENGINE.runKernel(Acos, inputs);\n}\nexport const acos = /* @__PURE__ */ op({ acos_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Fjb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsS0FBSyxDQUFtQixDQUFlO0lBQzlDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRW5DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QWNvcywgQWNvc0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBhY29zIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGBhY29zKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDEsIC0xLCAuN10pO1xuICpcbiAqIHguYWNvcygpLnByaW50KCk7ICAvLyBvciB0Zi5hY29zKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gYWNvc188VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2Fjb3MnKTtcbiAgY29uc3QgaW5wdXRzOiBBY29zSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChBY29zLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgYWNvcyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YWNvc199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Acosh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the inverse hyperbolic cos of the input `tf.Tensor` element-wise:\n * `acosh(x)`\n *\n * ```js\n * const x = tf.tensor1d([10, 1, 3, 5.7]);\n *\n * x.acosh().print(); // or tf.acosh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction acosh_(x) {\n const $x = convertToTensor(x, 'x', 'acosh');\n const inputs = { x: $x };\n return ENGINE.runKernel(Acosh, inputs);\n}\nexport const acosh = /* @__PURE__ */ op({ acosh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hY29zaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0Fjb3NoLCBBY29zaElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIGNvcyBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOlxuICogYGFjb3NoKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEwLCAxLCAzLCA1LjddKTtcbiAqXG4gKiB4LmFjb3NoKCkucHJpbnQoKTsgIC8vIG9yIHRmLmFjb3NoKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGFjb3NoXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYWNvc2gnKTtcbiAgY29uc3QgaW5wdXRzOiBBY29zaElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQWNvc2gsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBhY29zaCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YWNvc2hffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { AddN } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Adds a list of `tf.Tensor`s element-wise, each with the same shape and dtype.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n *\n * tf.addN([a, b, c]).print();\n * ```\n * @param tensors A list of tensors with the same shape and dtype.\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction addN_(tensors) {\n util.assert(Array.isArray(tensors), () => 'The argument passed to tf.addN() must be a list of tensors');\n util.assert(tensors.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ` +\n `${tensors.length}`);\n const $tensors = tensors.map((t, i) => convertToTensor(t, `tensors${i}`, 'addN'));\n const firstTensor = $tensors[0];\n $tensors.forEach(t => {\n if (t.dtype !== firstTensor.dtype) {\n throw new Error('All tensors passed to tf.addN() must have the same dtype');\n }\n });\n $tensors.forEach(t => {\n if (!util.arraysEqual(t.shape, firstTensor.shape)) {\n throw new Error('All tensors passed to tf.addN() must have the same shape');\n }\n });\n const inputs = $tensors;\n return ENGINE.runKernel(AddN, inputs);\n}\nexport const addN = /* @__PURE__ */ op({ addN_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkX24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hZGRfbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxJQUFJLEVBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLEtBQUssQ0FBbUIsT0FBNEI7SUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUN0QixHQUFHLEVBQUUsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO0lBQ3hFLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQ25CLEdBQUcsRUFBRSxDQUFDLHNEQUFzRDtRQUN4RCxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTdCLE1BQU0sUUFBUSxHQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVyRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLEtBQUssRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUNYLDBEQUEwRCxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDWCwwREFBMEQsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBZSxRQUFRLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtBZGROLCBBZGROSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBBZGRzIGEgbGlzdCBvZiBgdGYuVGVuc29yYHMgZWxlbWVudC13aXNlLCBlYWNoIHdpdGggdGhlIHNhbWUgc2hhcGUgYW5kIGR0eXBlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDJdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMywgNF0pO1xuICogY29uc3QgYyA9IHRmLnRlbnNvcjFkKFs1LCA2XSk7XG4gKlxuICogdGYuYWRkTihbYSwgYiwgY10pLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB0ZW5zb3JzIEEgbGlzdCBvZiB0ZW5zb3JzIHdpdGggdGhlIHNhbWUgc2hhcGUgYW5kIGR0eXBlLlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIGFkZE5fPFQgZXh0ZW5kcyBUZW5zb3I+KHRlbnNvcnM6IEFycmF5PFR8VGVuc29yTGlrZT4pOiBUIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBBcnJheS5pc0FycmF5KHRlbnNvcnMpLFxuICAgICAgKCkgPT4gJ1RoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGYuYWRkTigpIG11c3QgYmUgYSBsaXN0IG9mIHRlbnNvcnMnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB0ZW5zb3JzLmxlbmd0aCA+PSAxLFxuICAgICAgKCkgPT4gYE11c3QgcGFzcyBhdCBsZWFzdCBvbmUgdGVuc29yIHRvIHRmLmFkZE4oKSwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgJHt0ZW5zb3JzLmxlbmd0aH1gKTtcblxuICBjb25zdCAkdGVuc29ycyA9XG4gICAgICB0ZW5zb3JzLm1hcCgodCwgaSkgPT4gY29udmVydFRvVGVuc29yKHQsIGB0ZW5zb3JzJHtpfWAsICdhZGROJykpO1xuXG4gIGNvbnN0IGZpcnN0VGVuc29yID0gJHRlbnNvcnNbMF07XG4gICR0ZW5zb3JzLmZvckVhY2godCA9PiB7XG4gICAgaWYgKHQuZHR5cGUgIT09IGZpcnN0VGVuc29yLmR0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0FsbCB0ZW5zb3JzIHBhc3NlZCB0byB0Zi5hZGROKCkgbXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlJyk7XG4gICAgfVxuICB9KTtcblxuICAkdGVuc29ycy5mb3JFYWNoKHQgPT4ge1xuICAgIGlmICghdXRpbC5hcnJheXNFcXVhbCh0LnNoYXBlLCBmaXJzdFRlbnNvci5zaGFwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQWxsIHRlbnNvcnMgcGFzc2VkIHRvIHRmLmFkZE4oKSBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGlucHV0czogQWRkTklucHV0cyA9ICR0ZW5zb3JzO1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEFkZE4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZE4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2FkZE5ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { All } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the logical and of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 1, 1], 'bool');\n *\n * x.all().print(); // or tf.all(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 1, 0, 0], [2, 2], 'bool');\n *\n * const axis = 1;\n * x.all(axis).print(); // or tf.all(x, axis)\n * ```\n *\n * @param x The input tensor. Must be of dtype bool.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction all_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'all', 'bool');\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(All, inputs, attrs);\n}\nexport const all = /* @__PURE__ */ op({ all_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVsRCxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBYSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFBRSxNQUFtQyxFQUN4QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FsbCwgQWxsQXR0cnMsIEFsbElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBsb2dpY2FsIGFuZCBvZiBlbGVtZW50cyBhY3Jvc3MgZGltZW5zaW9ucyBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIFJlZHVjZXMgdGhlIGlucHV0IGFsb25nIHRoZSBkaW1lbnNpb25zIGdpdmVuIGluIGBheGVzYC4gVW5sZXNzIGBrZWVwRGltc2BcbiAqIGlzIHRydWUsIHRoZSByYW5rIG9mIHRoZSBgdGYuVGVuc29yYCBpcyByZWR1Y2VkIGJ5IDEgZm9yIGVhY2ggZW50cnkgaW5cbiAqIGBheGVzYC4gSWYgYGtlZXBEaW1zYCBpcyB0cnVlLCB0aGUgcmVkdWNlZCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZCB3aXRoXG4gKiBsZW5ndGggMS4gSWYgYGF4ZXNgIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGFcbiAqIGB0Zi5UZW5zb3JgIHdpdGggYSBzaW5nbGUgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAxLCAxXSwgJ2Jvb2wnKTtcbiAqXG4gKiB4LmFsbCgpLnByaW50KCk7ICAvLyBvciB0Zi5hbGwoeClcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoWzEsIDEsIDAsIDBdLCBbMiwgMl0sICdib29sJyk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmFsbChheGlzKS5wcmludCgpOyAgLy8gb3IgdGYuYWxsKHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLiBNdXN0IGJlIG9mIGR0eXBlIGJvb2wuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uKHMpIHRvIHJlZHVjZS4gQnkgZGVmYXVsdCBpdCByZWR1Y2VzXG4gKiAgICAgYWxsIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0ga2VlcERpbXMgSWYgdHJ1ZSwgcmV0YWlucyByZWR1Y2VkIGRpbWVuc2lvbnMgd2l0aCBzaXplIDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gYWxsXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhbGwnLCAnYm9vbCcpO1xuXG4gIGNvbnN0IGlucHV0czogQWxsSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IEFsbEF0dHJzID0ge2F4aXMsIGtlZXBEaW1zfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEFsbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBhbGwgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2FsbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Any } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the logical or of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 1, 1], 'bool');\n *\n * x.any().print(); // or tf.any(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 1, 0, 0], [2, 2], 'bool');\n *\n * const axis = 1;\n * x.any(axis).print(); // or tf.any(x, axis)\n * ```\n *\n * @param x The input tensor. Must be of dtype bool.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction any_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'any', 'bool');\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(Any, inputs, attrs);\n}\n// tslint:disable-next-line:variable-name\nexport const any = /* @__PURE__ */ op({ any_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW55LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYW55LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVsRCxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBYSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFBRSxNQUFtQyxFQUN4QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELHlDQUF5QztBQUN6QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtBbnksIEFueUF0dHJzLCBBbnlJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbG9naWNhbCBvciBvZiBlbGVtZW50cyBhY3Jvc3MgZGltZW5zaW9ucyBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIFJlZHVjZXMgdGhlIGlucHV0IGFsb25nIHRoZSBkaW1lbnNpb25zIGdpdmVuIGluIGBheGVzYC4gVW5sZXNzIGBrZWVwRGltc2BcbiAqIGlzIHRydWUsIHRoZSByYW5rIG9mIHRoZSBgdGYuVGVuc29yYCBpcyByZWR1Y2VkIGJ5IDEgZm9yIGVhY2ggZW50cnkgaW5cbiAqIGBheGVzYC4gSWYgYGtlZXBEaW1zYCBpcyB0cnVlLCB0aGUgcmVkdWNlZCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZCB3aXRoXG4gKiBsZW5ndGggMS4gSWYgYGF4ZXNgIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGFcbiAqIGB0Zi5UZW5zb3JgIHdpdGggYSBzaW5nbGUgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAxLCAxXSwgJ2Jvb2wnKTtcbiAqXG4gKiB4LmFueSgpLnByaW50KCk7ICAvLyBvciB0Zi5hbnkoeClcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoWzEsIDEsIDAsIDBdLCBbMiwgMl0sICdib29sJyk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmFueShheGlzKS5wcmludCgpOyAgLy8gb3IgdGYuYW55KHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLiBNdXN0IGJlIG9mIGR0eXBlIGJvb2wuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uKHMpIHRvIHJlZHVjZS4gQnkgZGVmYXVsdCBpdCByZWR1Y2VzXG4gKiAgICAgYWxsIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0ga2VlcERpbXMgSWYgdHJ1ZSwgcmV0YWlucyByZWR1Y2VkIGRpbWVuc2lvbnMgd2l0aCBzaXplIDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gYW55XzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhbnknLCAnYm9vbCcpO1xuXG4gIGNvbnN0IGlucHV0czogQW55SW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IEFueUF0dHJzID0ge2F4aXMsIGtlZXBEaW1zfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEFueSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG5leHBvcnQgY29uc3QgYW55ID0gLyogQF9fUFVSRV9fICovIG9wKHthbnlffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ArgMax } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the indices of the maximum values along an `axis`.\n *\n * The result has the same shape as `input` with the dimension along `axis`\n * removed.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.argMax().print(); // or tf.argMax(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 4, 3], [2, 2]);\n *\n * const axis = 1;\n * x.argMax(axis).print(); // or tf.argMax(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension to reduce. Defaults to 0 (outer-most dimension).\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction argMax_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'argMax');\n const inputs = { x: $x };\n const attrs = { axis };\n return ENGINE.runKernel(ArgMax, inputs, attrs);\n}\nexport const argMax = /* @__PURE__ */ op({ argMax_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJnX21heC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2FyZ19tYXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBSWxFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQVMsT0FBTyxDQUFtQixDQUFvQixFQUFFLElBQUksR0FBRyxDQUFDO0lBQy9ELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sTUFBTSxHQUFpQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBZ0IsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUVsQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FyZ01heCwgQXJnTWF4QXR0cnMsIEFyZ01heElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGljZXMgb2YgdGhlIG1heGltdW0gdmFsdWVzIGFsb25nIGFuIGBheGlzYC5cbiAqXG4gKiBUaGUgcmVzdWx0IGhhcyB0aGUgc2FtZSBzaGFwZSBhcyBgaW5wdXRgIHdpdGggdGhlIGRpbWVuc2lvbiBhbG9uZyBgYXhpc2BcbiAqIHJlbW92ZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIHguYXJnTWF4KCkucHJpbnQoKTsgIC8vIG9yIHRmLmFyZ01heCh4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgNCwgM10sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmFyZ01heChheGlzKS5wcmludCgpOyAgLy8gb3IgdGYuYXJnTWF4KHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbiB0byByZWR1Y2UuIERlZmF1bHRzIHRvIDAgKG91dGVyLW1vc3QgZGltZW5zaW9uKS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdSZWR1Y3Rpb24nfVxuICovXG5mdW5jdGlvbiBhcmdNYXhfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzID0gMCk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhcmdNYXgnKTtcblxuICBjb25zdCBpbnB1dHM6IEFyZ01heElucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBBcmdNYXhBdHRycyA9IHtheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEFyZ01heCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBhcmdNYXggPSAvKiBAX19QVVJFX18gKi8gb3Aoe2FyZ01heF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ArgMin } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the indices of the minimum values along an `axis`.\n *\n * The result has the same shape as `input` with the dimension along `axis`\n * removed.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.argMin().print(); // or tf.argMin(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 4, 3], [2, 2]);\n *\n * const axis = 1;\n * x.argMin(axis).print(); // or tf.argMin(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension to reduce. Defaults to 0 (outer-most dimension).\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction argMin_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'argMin');\n const inputs = { x: $x };\n const attrs = { axis };\n return ENGINE.runKernel(ArgMin, inputs, attrs);\n}\nexport const argMin = /* @__PURE__ */ op({ argMin_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJnX21pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2FyZ19taW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBSWxFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQVMsT0FBTyxDQUFtQixDQUFvQixFQUFFLElBQUksR0FBRyxDQUFDO0lBQy9ELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sTUFBTSxHQUFpQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBZ0IsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUVsQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FyZ01pbiwgQXJnTWluQXR0cnMsIEFyZ01pbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGljZXMgb2YgdGhlIG1pbmltdW0gdmFsdWVzIGFsb25nIGFuIGBheGlzYC5cbiAqXG4gKiBUaGUgcmVzdWx0IGhhcyB0aGUgc2FtZSBzaGFwZSBhcyBgaW5wdXRgIHdpdGggdGhlIGRpbWVuc2lvbiBhbG9uZyBgYXhpc2BcbiAqIHJlbW92ZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIHguYXJnTWluKCkucHJpbnQoKTsgIC8vIG9yIHRmLmFyZ01pbih4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgNCwgM10sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmFyZ01pbihheGlzKS5wcmludCgpOyAgLy8gb3IgdGYuYXJnTWluKHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbiB0byByZWR1Y2UuIERlZmF1bHRzIHRvIDAgKG91dGVyLW1vc3QgZGltZW5zaW9uKS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdSZWR1Y3Rpb24nfVxuICovXG5mdW5jdGlvbiBhcmdNaW5fPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzID0gMCk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhcmdNaW4nKTtcblxuICBjb25zdCBpbnB1dHM6IEFyZ01pbklucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBBcmdNaW5BdHRycyA9IHtheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEFyZ01pbiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBhcmdNaW4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2FyZ01pbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Asin } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes asin of the input `tf.Tensor` element-wise: `asin(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.asin().print(); // or tf.asin(x)\n * ```\n * @param x The input tensor.\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction asin_(x) {\n const $x = convertToTensor(x, 'x', 'asin');\n const inputs = { x: $x };\n return ENGINE.runKernel(Asin, inputs);\n}\nexport const asin = /* @__PURE__ */ op({ asin_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2FzaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsS0FBSyxDQUFtQixDQUFlO0lBQzlDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRW5DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtBc2luLCBBc2luSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIGFzaW4gb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYGFzaW4oeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgMSwgLTEsIC43XSk7XG4gKlxuICogeC5hc2luKCkucHJpbnQoKTsgIC8vIG9yIHRmLmFzaW4oeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBhc2luXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYXNpbicpO1xuICBjb25zdCBpbnB1dHM6IEFzaW5JbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEFzaW4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBhc2luID0gLyogQF9fUFVSRV9fICovIG9wKHthc2luX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Asinh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes inverse hyperbolic sin of the input `tf.Tensor` element-wise:\n * `asinh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.asinh().print(); // or tf.asinh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction asinh_(x) {\n const $x = convertToTensor(x, 'x', 'asinh');\n const inputs = { x: $x };\n return ENGINE.runKernel(Asinh, inputs);\n}\nexport const asinh = /* @__PURE__ */ op({ asinh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hc2luaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FzaW5oLCBBc2luaElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBpbnZlcnNlIGh5cGVyYm9saWMgc2luIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6XG4gKiBgYXNpbmgoeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgMSwgLTEsIC43XSk7XG4gKlxuICogeC5hc2luaCgpLnByaW50KCk7ICAvLyBvciB0Zi5hc2luaCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBhc2luaF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2FzaW5oJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBBc2luaElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQXNpbmgsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBhc2luaCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YXNpbmhffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Atan } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes atan of the input `tf.Tensor` element-wise: `atan(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.atan().print(); // or tf.atan(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction atan_(x) {\n const $x = convertToTensor(x, 'x', 'atan');\n const inputs = { x: $x };\n return ENGINE.runKernel(Atan, inputs);\n}\nexport const atan = /* @__PURE__ */ op({ atan_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2F0YW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzQyxNQUFNLE1BQU0sR0FBZSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUVuQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QXRhbiwgQXRhbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBhdGFuIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGBhdGFuKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDEsIC0xLCAuN10pO1xuICpcbiAqIHguYXRhbigpLnByaW50KCk7ICAvLyBvciB0Zi5hdGFuKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGF0YW5fPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhdGFuJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBBdGFuSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChBdGFuLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgYXRhbiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YXRhbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Atan2 } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes arctangent of `tf.Tensor`s a / b element-wise: `atan2(a, b)`.\n * Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1.0, 1.0, -1.0, .7]);\n * const b = tf.tensor1d([2.0, 13.0, 3.5, .21]);\n *\n * tf.atan2(a, b).print()\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction atan2_(a, b) {\n let $a = convertToTensor(a, 'a', 'atan2');\n let $b = convertToTensor(b, 'b', 'atan2');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Atan2, inputs);\n}\nexport const atan2 = /* @__PURE__ */ op({ atan2_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhbjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hdGFuMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxNQUFNLENBQ1gsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1QyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sTUFBTSxHQUFnQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRTNDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtBdGFuMiwgQXRhbjJJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgYXJjdGFuZ2VudCBvZiBgdGYuVGVuc29yYHMgYSAvIGIgZWxlbWVudC13aXNlOiBgYXRhbjIoYSwgYilgLlxuICogU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEuMCwgMS4wLCAtMS4wLCAuN10pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsyLjAsIDEzLjAsIDMuNSwgLjIxXSk7XG4gKlxuICogdGYuYXRhbjIoYSwgYikucHJpbnQoKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXMgYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBhdGFuMl88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdhdGFuMicpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnYXRhbjInKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGNvbnN0IGlucHV0czogQXRhbjJJbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChBdGFuMiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgYXRhbjIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2F0YW4yX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Atanh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes inverse hyperbolic tan of the input `tf.Tensor` element-wise:\n * `atanh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, .1, -.1, .7]);\n *\n * x.atanh().print(); // or tf.atanh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction atanh_(x) {\n const $x = convertToTensor(x, 'x', 'atanh');\n const inputs = { x: $x };\n return ENGINE.runKernel(Atanh, inputs);\n}\nexport const atanh = /* @__PURE__ */ op({ atanh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hdGFuaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0F0YW5oLCBBdGFuaElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBpbnZlcnNlIGh5cGVyYm9saWMgdGFuIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6XG4gKiBgYXRhbmgoeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgLjEsIC0uMSwgLjddKTtcbiAqXG4gKiB4LmF0YW5oKCkucHJpbnQoKTsgIC8vIG9yIHRmLmF0YW5oKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGF0YW5oXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYXRhbmgnKTtcblxuICBjb25zdCBpbnB1dHM6IEF0YW5oSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChBdGFuaCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IGF0YW5oID0gLyogQF9fUFVSRV9fICovIG9wKHthdGFuaF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\n/**\n *\n * @param inputShape Input tensor shape is of the following dimensions:\n * `[batch, height, width, inChannels]`.\n * @param filterShape The filter shape is of the following dimensions:\n * `[filterHeight, filterWidth, depth]`.\n * @param strides The strides of the sliding window for each dimension of the\n * input tensor: `[strideHeight, strideWidth]`.\n * If `strides` is a single number,\n * then `strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1*1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat The data format of the input and output data.\n * Defaults to 'NHWC'.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`.\n * Defaults to `[1, 1]`. If `dilations` is a single number, then\n * `dilationHeight == dilationWidth`.\n */\nexport function computeDilation2DInfo(inputShape, filterShape, strides, pad, dataFormat = 'NHWC', dilations) {\n // `computerConv2DInfo` require filterShape to be in the dimension of:\n // `[filterHeight, filterWidth, depth, outDepth]`, dilation2d doesn't have\n // outDepth, it should have the same depth as the input.\n // Input shape: [batch, height, width, inChannels]\n const inputChannels = inputShape[3];\n const $filterShape = [...filterShape, inputChannels];\n const $dataFormat = convertConv2DDataFormat(dataFormat);\n return computeConv2DInfo(inputShape, $filterShape, strides, dilations, pad, null /* roundingMode */, null /* depthWise */, $dataFormat);\n}\nexport function computePool2DInfo(inShape, filterSize, strides, dilations, pad, roundingMode, dataFormat = 'channelsLast') {\n const [filterHeight, filterWidth] = parseTupleParam(filterSize);\n let filterShape;\n if (dataFormat === 'channelsLast') {\n filterShape = [filterHeight, filterWidth, inShape[3], inShape[3]];\n }\n else if (dataFormat === 'channelsFirst') {\n filterShape = [filterHeight, filterWidth, inShape[1], inShape[1]];\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n return computeConv2DInfo(inShape, filterShape, strides, dilations, pad, roundingMode, false, dataFormat);\n}\n/**\n * Computes the information for a forward pass of a pooling3D operation.\n */\nexport function computePool3DInfo(inShape, filterSize, strides, dilations, pad, roundingMode, dataFormat = 'NDHWC') {\n const [filterDepth, filterHeight, filterWidth] = parse3TupleParam(filterSize);\n let filterShape;\n let $dataFormat;\n if (dataFormat === 'NDHWC') {\n $dataFormat = 'channelsLast';\n filterShape =\n [filterDepth, filterHeight, filterWidth, inShape[4], inShape[4]];\n }\n else if (dataFormat === 'NCDHW') {\n $dataFormat = 'channelsFirst';\n filterShape =\n [filterDepth, filterHeight, filterWidth, inShape[1], inShape[1]];\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n return computeConv3DInfo(inShape, filterShape, strides, dilations, pad, false, $dataFormat, roundingMode);\n}\n/**\n * Computes the information for a forward pass of a convolution/pooling\n * operation.\n */\nexport function computeConv2DInfo(inShape, filterShape, strides, dilations, pad, roundingMode, depthwise = false, dataFormat = 'channelsLast') {\n let [batchSize, inHeight, inWidth, inChannels] = [-1, -1, -1, -1];\n if (dataFormat === 'channelsLast') {\n [batchSize, inHeight, inWidth, inChannels] = inShape;\n }\n else if (dataFormat === 'channelsFirst') {\n [batchSize, inChannels, inHeight, inWidth] = inShape;\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n const [filterHeight, filterWidth, , filterChannels] = filterShape;\n const [strideHeight, strideWidth] = parseTupleParam(strides);\n const [dilationHeight, dilationWidth] = parseTupleParam(dilations);\n const effectiveFilterHeight = getEffectiveFilterSize(filterHeight, dilationHeight);\n const effectiveFilterWidth = getEffectiveFilterSize(filterWidth, dilationWidth);\n const { padInfo, outHeight, outWidth } = getPadAndOutInfo(pad, inHeight, inWidth, strideHeight, strideWidth, effectiveFilterHeight, effectiveFilterWidth, roundingMode, dataFormat);\n const outChannels = depthwise ? filterChannels * inChannels : filterChannels;\n let outShape;\n if (dataFormat === 'channelsFirst') {\n outShape = [batchSize, outChannels, outHeight, outWidth];\n }\n else if (dataFormat === 'channelsLast') {\n outShape = [batchSize, outHeight, outWidth, outChannels];\n }\n return {\n batchSize,\n dataFormat,\n inHeight,\n inWidth,\n inChannels,\n outHeight,\n outWidth,\n outChannels,\n padInfo,\n strideHeight,\n strideWidth,\n filterHeight,\n filterWidth,\n effectiveFilterHeight,\n effectiveFilterWidth,\n dilationHeight,\n dilationWidth,\n inShape,\n outShape,\n filterShape\n };\n}\n/**\n * Computes the information for a forward pass of a 3D convolution/pooling\n * operation.\n */\nexport function computeConv3DInfo(inShape, filterShape, strides, dilations, pad, depthwise = false, dataFormat = 'channelsLast', roundingMode) {\n let [batchSize, inDepth, inHeight, inWidth, inChannels] = [-1, -1, -1, -1, -1];\n if (dataFormat === 'channelsLast') {\n [batchSize, inDepth, inHeight, inWidth, inChannels] = inShape;\n }\n else if (dataFormat === 'channelsFirst') {\n [batchSize, inChannels, inDepth, inHeight, inWidth] = inShape;\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n const [filterDepth, filterHeight, filterWidth, , filterChannels] = filterShape;\n const [strideDepth, strideHeight, strideWidth] = parse3TupleParam(strides);\n const [dilationDepth, dilationHeight, dilationWidth] = parse3TupleParam(dilations);\n const effectiveFilterDepth = getEffectiveFilterSize(filterDepth, dilationDepth);\n const effectiveFilterHeight = getEffectiveFilterSize(filterHeight, dilationHeight);\n const effectiveFilterWidth = getEffectiveFilterSize(filterWidth, dilationWidth);\n const { padInfo, outDepth, outHeight, outWidth } = get3DPadAndOutInfo(pad, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth, effectiveFilterDepth, effectiveFilterHeight, effectiveFilterWidth, roundingMode);\n const outChannels = depthwise ? filterChannels * inChannels : filterChannels;\n let outShape;\n if (dataFormat === 'channelsFirst') {\n outShape = [batchSize, outChannels, outDepth, outHeight, outWidth];\n }\n else if (dataFormat === 'channelsLast') {\n outShape = [batchSize, outDepth, outHeight, outWidth, outChannels];\n }\n return {\n batchSize,\n dataFormat,\n inDepth,\n inHeight,\n inWidth,\n inChannels,\n outDepth,\n outHeight,\n outWidth,\n outChannels,\n padInfo,\n strideDepth,\n strideHeight,\n strideWidth,\n filterDepth,\n filterHeight,\n filterWidth,\n effectiveFilterDepth,\n effectiveFilterHeight,\n effectiveFilterWidth,\n dilationDepth,\n dilationHeight,\n dilationWidth,\n inShape,\n outShape,\n filterShape\n };\n}\nfunction computeOutputShape2D(inShape, fieldSize, stride, zeroPad, roundingMode) {\n if (zeroPad == null) {\n zeroPad = computeDefaultPad(inShape, fieldSize, stride);\n }\n const inputRows = inShape[0];\n const inputCols = inShape[1];\n const outputRows = round((inputRows - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n const outputCols = round((inputCols - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n return [outputRows, outputCols];\n}\nfunction computeOutputShape4D(inShape, filterShape, outChannels, strides, zeroPad, roundingMode) {\n if (zeroPad == null) {\n zeroPad = computeDefaultPad(inShape, filterShape[0], strides[0]);\n }\n const outShape = [0, 0, 0, outChannels];\n for (let index = 0; index < 3; index++) {\n if (inShape[index] + 2 * zeroPad >= filterShape[index]) {\n outShape[index] = round((inShape[index] - filterShape[index] + 2 * zeroPad) / strides[index] +\n 1, roundingMode);\n }\n }\n return outShape;\n}\nexport function computeDefaultPad(inputShape, fieldSize, stride, dilation = 1) {\n const effectiveFieldSize = getEffectiveFilterSize(fieldSize, dilation);\n return Math.floor((inputShape[0] * (stride - 1) - stride + effectiveFieldSize) / 2);\n}\nfunction parseTupleParam(param) {\n if (typeof param === 'number') {\n return [param, param, param];\n }\n if (param.length === 2) {\n return [param[0], param[1], 1];\n }\n return param;\n}\nfunction parse3TupleParam(param) {\n return typeof param === 'number' ? [param, param, param] : param;\n}\n/* See https://www.tensorflow.org/api_docs/python/tf/nn/atrous_conv2d\n * Atrous convolution is equivalent to standard convolution with upsampled\n * filters with effective_filter_height =\n * filter_height + (filter_height - 1) * (dilation - 1)\n * and effective_filter_width =\n * filter_width + (filter_width - 1) * (dilation - 1),\n * produced by inserting dilation - 1 zeros along consecutive elements across\n * the filters' spatial dimensions.\n * When there is a dilation, this converts a filter dimension to the\n * effective filter dimension, so it can be used in a standard convolution.\n */\nfunction getEffectiveFilterSize(filterSize, dilation) {\n if (dilation <= 1) {\n return filterSize;\n }\n return filterSize + (filterSize - 1) * (dilation - 1);\n}\nfunction getPadAndOutInfo(pad, inHeight, inWidth, strideHeight, strideWidth, filterHeight, filterWidth, roundingMode, dataFormat) {\n let padInfo;\n let outHeight;\n let outWidth;\n if (typeof pad === 'number') {\n const padType = (pad === 0) ? 'VALID' : 'NUMBER';\n padInfo = { top: pad, bottom: pad, left: pad, right: pad, type: padType };\n const outShape = computeOutputShape2D([inHeight, inWidth], filterHeight, strideHeight, pad, roundingMode);\n outHeight = outShape[0];\n outWidth = outShape[1];\n }\n else if (pad === 'same') {\n outHeight = Math.ceil(inHeight / strideHeight);\n outWidth = Math.ceil(inWidth / strideWidth);\n const padAlongHeight = Math.max(0, (outHeight - 1) * strideHeight + filterHeight - inHeight);\n const padAlongWidth = Math.max(0, (outWidth - 1) * strideWidth + filterWidth - inWidth);\n const top = Math.floor(padAlongHeight / 2);\n const bottom = padAlongHeight - top;\n const left = Math.floor(padAlongWidth / 2);\n const right = padAlongWidth - left;\n padInfo = { top, bottom, left, right, type: 'SAME' };\n }\n else if (pad === 'valid') {\n padInfo = { top: 0, bottom: 0, left: 0, right: 0, type: 'VALID' };\n outHeight = Math.ceil((inHeight - filterHeight + 1) / strideHeight);\n outWidth = Math.ceil((inWidth - filterWidth + 1) / strideWidth);\n }\n else if (typeof pad === 'object') {\n const top = dataFormat === 'channelsLast' ? pad[1][0] : pad[2][0];\n const bottom = dataFormat === 'channelsLast' ? pad[1][1] : pad[2][1];\n const left = dataFormat === 'channelsLast' ? pad[2][0] : pad[3][0];\n const right = dataFormat === 'channelsLast' ? pad[2][1] : pad[3][1];\n const padType = (top === 0 && bottom === 0 && left === 0 && right === 0) ?\n 'VALID' :\n 'EXPLICIT';\n padInfo = { top, bottom, left, right, type: padType };\n outHeight = round((inHeight - filterHeight + top + bottom) / strideHeight + 1, roundingMode);\n outWidth = round((inWidth - filterWidth + left + right) / strideWidth + 1, roundingMode);\n }\n else {\n throw Error(`Unknown padding parameter: ${pad}`);\n }\n return { padInfo, outHeight, outWidth };\n}\nfunction get3DPadAndOutInfo(pad, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth, filterDepth, filterHeight, filterWidth, roundingMode) {\n let padInfo;\n let outDepth;\n let outHeight;\n let outWidth;\n if (pad === 'valid') {\n pad = 0;\n }\n if (typeof pad === 'number') {\n const padType = (pad === 0) ? 'VALID' : 'NUMBER';\n padInfo = {\n top: pad,\n bottom: pad,\n left: pad,\n right: pad,\n front: pad,\n back: pad,\n type: padType\n };\n const outShape = computeOutputShape4D([inDepth, inHeight, inWidth, 1], [filterDepth, filterHeight, filterWidth], 1, [strideDepth, strideHeight, strideWidth], pad, roundingMode);\n outDepth = outShape[0];\n outHeight = outShape[1];\n outWidth = outShape[2];\n }\n else if (pad === 'same') {\n outDepth = Math.ceil(inDepth / strideDepth);\n outHeight = Math.ceil(inHeight / strideHeight);\n outWidth = Math.ceil(inWidth / strideWidth);\n const padAlongDepth = (outDepth - 1) * strideDepth + filterDepth - inDepth;\n const padAlongHeight = (outHeight - 1) * strideHeight + filterHeight - inHeight;\n const padAlongWidth = (outWidth - 1) * strideWidth + filterWidth - inWidth;\n const front = Math.floor(padAlongDepth / 2);\n const back = padAlongDepth - front;\n const top = Math.floor(padAlongHeight / 2);\n const bottom = padAlongHeight - top;\n const left = Math.floor(padAlongWidth / 2);\n const right = padAlongWidth - left;\n padInfo = { top, bottom, left, right, front, back, type: 'SAME' };\n }\n else {\n throw Error(`Unknown padding parameter: ${pad}`);\n }\n return { padInfo, outDepth, outHeight, outWidth };\n}\n/**\n * Rounds a value depending on the rounding mode\n * @param value\n * @param roundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n */\nfunction round(value, roundingMode) {\n if (!roundingMode) {\n return Math.trunc(value);\n }\n switch (roundingMode) {\n case 'round':\n // used for Caffe Conv\n return Math.round(value);\n case 'ceil':\n // used for Caffe Pool\n return Math.ceil(value);\n case 'floor':\n return Math.floor(value);\n default:\n throw new Error(`Unknown roundingMode ${roundingMode}`);\n }\n}\nexport function tupleValuesAreOne(param) {\n const [dimA, dimB, dimC] = parseTupleParam(param);\n return dimA === 1 && dimB === 1 && dimC === 1;\n}\nexport function eitherStridesOrDilationsAreOne(strides, dilations) {\n return tupleValuesAreOne(strides) || tupleValuesAreOne(dilations);\n}\nexport function stridesOrDilationsArePositive(values) {\n return parseTupleParam(values).every(value => value > 0);\n}\n/**\n * Convert Conv2D dataFormat from 'NHWC'|'NCHW' to\n * 'channelsLast'|'channelsFirst'\n * @param dataFormat in 'NHWC'|'NCHW' mode\n * @return dataFormat in 'channelsLast'|'channelsFirst' mode\n * @throws unknown dataFormat\n */\nexport function convertConv2DDataFormat(dataFormat) {\n if (dataFormat === 'NHWC') {\n return 'channelsLast';\n }\n else if (dataFormat === 'NCHW') {\n return 'channelsFirst';\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n}\n/**\n * Check validity of pad when using dimRoundingMode.\n * @param opDesc A string of op description\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid` output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @throws unknown padding parameter\n */\nexport function checkPadOnDimRoundingMode(opDesc, pad, dimRoundingMode) {\n if (dimRoundingMode != null) {\n if (typeof pad === 'string') {\n throw Error(`Error in ${opDesc}: pad must be an integer when using ` +\n `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n }\n else if (typeof pad === 'number') {\n util.assert(util.isInt(pad), () => `Error in ${opDesc}: pad must be an integer when using ` +\n `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n }\n else if (typeof pad === 'object') {\n pad.forEach(p => {\n p.forEach(v => {\n util.assert(util.isInt(v), () => `Error in ${opDesc}: pad must be an integer when using ` +\n `dimRoundingMode ${dimRoundingMode} but got pad ${v}.`);\n });\n });\n }\n else {\n throw Error(`Error in ${opDesc}: Unknown padding parameter: ${pad}`);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBMERoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFVBQTRDLEVBQzVDLFdBQXFDLEVBQUUsT0FBZ0MsRUFDdkUsR0FBMEIsRUFBRSxhQUFxQixNQUFNLEVBQ3ZELFNBQWtDO0lBQ3BDLHNFQUFzRTtJQUN0RSwwRUFBMEU7SUFDMUUsd0RBQXdEO0lBQ3hELGtEQUFrRDtJQUNsRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxZQUFZLEdBQ2QsQ0FBQyxHQUFHLFdBQVcsRUFBRSxhQUFhLENBQXFDLENBQUM7SUFDeEUsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEQsT0FBTyxpQkFBaUIsQ0FDcEIsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFDakQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsT0FBeUMsRUFDekMsVUFBbUMsRUFBRSxPQUFnQyxFQUNyRSxTQUFrQyxFQUNsQyxHQUEwQyxFQUMxQyxZQUFxQyxFQUNyQyxhQUE2QyxjQUFjO0lBQzdELE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWhFLElBQUksV0FBNkMsQ0FBQztJQUNsRCxJQUFJLFVBQVUsS0FBSyxjQUFjLEVB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LE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQztRQUNoRSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDcEUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0tBQ2pFO1NBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDbEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxNQUFNLEdBQUcsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxJQUFJLEdBQUcsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxH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O0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQ3JDLE1BQWMsRUFBRSxHQUEwQyxFQUMxRCxlQUF3QztJQUMxQyxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7UUFDM0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0IsTUFBTSxLQUFLLENBQ1AsWUFBWSxNQUFNLHNDQUFzQztnQkFDeEQsbUJBQW1CLGVBQWUsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDL0Q7YUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQ2YsR0FBRyxFQUFFLENBQUMsWUFBWSxNQUFNLHNDQUFzQztnQkFDMUQsbUJBQW1CLGVBQWUsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDbkU7YUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxHQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDWixJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQUMsWUFBWSxNQUFNLHNDQUFzQzt3QkFDMUQsbUJBQW1CLGVBQWUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsTUFBTSxLQUFLLENBQUMsWUFBWSxNQUFNLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG50eXBlIFBhZFR5cGUgPSAnU0FNRSd8J1ZBTElEJ3wnTlVNQkVSJ3wnRVhQTElDSVQnO1xuXG4vLyBGb3IgTkhXQyBzaG91bGQgYmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtOlxuLy8gIFtbMCwgMF0sIFtwYWRfdG9wLHBhZF9ib3R0b21dLCBbcGFkX2xlZnQsIHBhZF9yaWdodF0sIFswLCAwXV1cbi8vIEZvciBOQ0hXIHNob3VsZCBiZSBpbiB0aGUgZm9sbG93aW5nIGZvcm06XG4vLyAgW1swLCAwXSwgWzAsIDBdLCBbcGFkX3RvcCxwYWRfYm90dG9tXSwgW3BhZF9sZWZ0LCBwYWRfcmlnaHRdXVxuLy8gUmVmZXJlbmNlOiBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udjJkXG5leHBvcnQgdHlwZSBFeHBsaWNpdFBhZGRpbmcgPVxuICAgIFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXTtcblxuZXhwb3J0IHR5cGUgUGFkSW5mbyA9IHtcbiAgdG9wOiBudW1iZXIsXG4gIGxlZnQ6IG51bWJlcixcbiAgcmlnaHQ6IG51bWJlcixcbiAgYm90dG9tOiBudW1iZXIsXG4gIHR5cGU6IFBhZFR5cGVcbn07XG5cbmV4cG9ydCB0eXBlIFBhZEluZm8zRCA9IHtcbiAgdG9wOiBudW1iZXIsXG4gIGxlZnQ6IG51bWJlcixcbiAgcmlnaHQ6IG51bWJlcixcbiAgYm90dG9tOiBudW1iZXIsXG4gIGZyb250OiBudW1iZXIsXG4gIGJhY2s6IG51bWJlcixcbiAgdHlwZTogUGFkVHlwZVxufTtcblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9yd2FyZCBwYXNzIG9mIGEgY29udm9sdXRpb24vcG9vbGluZyBvcGVyYXRpb24uXG4gKiBJdCBpbmNsdWRlcyBpbnB1dCBhbmQgb3V0cHV0IHNoYXBlLCBzdHJpZGVzLCBmaWx0ZXIgc2l6ZSBhbmQgcGFkZGluZ1xuICogaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENvbnYyREluZm8gPSB7XG4gIGJhdGNoU2l6ZTogbnVtYmVyLFxuICBpbkhlaWdodDogbnVtYmVyLFxuICBpbldpZHRoOiBudW1iZXIsXG4gIGluQ2hhbm5lbHM6IG51bWJlcixcbiAgb3V0SGVpZ2h0OiBudW1iZXIsXG4gIG91dFdpZHRoOiBudW1iZXIsXG4gIG91dENoYW5uZWxzOiBudW1iZXIsXG4gIGRhdGFGb3JtYXQ6ICdjaGFubmVsc0ZpcnN0J3wnY2hhbm5lbHNMYXN0JyxcbiAgc3RyaWRlSGVpZ2h0OiBudW1iZXIsXG4gIHN0cmlkZVdpZHRoOiBudW1iZXIsXG4gIGRpbGF0aW9uSGVpZ2h0OiBudW1iZXIsXG4gIGRpbGF0aW9uV2lkdGg6IG51bWJlcixcbiAgZmlsdGVySGVpZ2h0OiBudW1iZXIsXG4gIGZpbHRlcldpZHRoOiBudW1iZXIsXG4gIGVmZmVjdGl2ZUZpbHRlckhlaWdodDogbnVtYmVyLFxuICBlZmZlY3RpdmVGaWx0ZXJXaWR0aDogbnVtYmVyLFxuICBwYWRJbmZvOiBQYWRJbmZvLFxuICBpblNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgb3V0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBpbnB1dFNoYXBlIElucHV0IHRlbnNvciBzaGFwZSBpcyBvZiB0aGUgZm9sbG93aW5nIGRpbWVuc2lvbnM6XG4gKiAgICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11gLlxuICogQHBhcmFtIGZpbHRlclNoYXBlIFRoZSBmaWx0ZXIgc2hhcGUgaXMgb2YgdGhlIGZvbGxvd2luZyBkaW1lbnNpb25zOlxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgZGVwdGhdYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBzbGlkaW5nIHdpbmRvdyBmb3IgZWFjaCBkaW1lbnNpb24gb2YgdGhlXG4gKiAgICAgaW5wdXQgdGVuc29yOiBgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC5cbiAqICAgICBJZiBgc3RyaWRlc2AgaXMgYSBzaW5nbGUgbnVtYmVyLFxuICogICAgIHRoZW4gYHN0cmlkZUhlaWdodCA9PSBzdHJpZGVXaWR0aGAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxKjF4MS5cbiAqICAgIC0gRm9yIG1vcmUgaW5mbywgc2VlIHRoaXMgZ3VpZGU6XG4gKiAgICAgW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbl0oXG4gKiAgICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb24pXG4gKiBAcGFyYW0gZGF0YUZvcm1hdCBUaGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS5cbiAqICAgICBEZWZhdWx0cyB0byAnTkhXQycuXG4gKiBAcGFyYW0gZGlsYXRpb25zIFRoZSBkaWxhdGlvbiByYXRlczogYFtkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aF1gLlxuICogICAgIERlZmF1bHRzIHRvIGBbMSwgMV1gLiBJZiBgZGlsYXRpb25zYCBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW5cbiAqICAgICBgZGlsYXRpb25IZWlnaHQgPT0gZGlsYXRpb25XaWR0aGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGlsYXRpb24yREluZm8oXG4gICAgaW5wdXRTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgZmlsdGVyU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlczogbnVtYmVyfFtudW1iZXIsIG51bWJlcl0sXG4gICAgcGFkOiAnc2FtZSd8J3ZhbGlkJ3xudW1iZXIsIGRhdGFGb3JtYXQ6ICdOSFdDJyA9ICdOSFdDJyxcbiAgICBkaWxhdGlvbnM6IG51bWJlcnxbbnVtYmVyLCBudW1iZXJdKSB7XG4gIC8vIGBjb21wdXRlckNvbnYyREluZm9gIHJlcXVpcmUgZmlsdGVyU2hhcGUgdG8gYmUgaW4gdGhlIGRpbWVuc2lvbiBvZjpcbiAgLy8gYFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBkZXB0aCwgb3V0RGVwdGhdYCwgZGlsYXRpb24yZCBkb2Vzbid0IGhhdmVcbiAgLy8gb3V0RGVwdGgsIGl0IHNob3VsZCBoYXZlIHRoZSBzYW1lIGRlcHRoIGFzIHRoZSBpbnB1dC5cbiAgLy8gSW5wdXQgc2hhcGU6IFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11cbiAgY29uc3QgaW5wdXRDaGFubmVscyA9IGlucHV0U2hhcGVbM107XG4gIGNvbnN0ICRmaWx0ZXJTaGFwZSA9XG4gICAgICBbLi4uZmlsdGVyU2hhcGUsIGlucHV0Q2hhbm5lbHNdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCAkZGF0YUZvcm1hdCA9IGNvbnZlcnRDb252MkREYXRhRm9ybWF0KGRhdGFGb3JtYXQpO1xuXG4gIHJldHVybiBjb21wdXRlQ29udjJESW5mbyhcbiAgICAgIGlucHV0U2hhcGUsICRmaWx0ZXJTaGFwZSwgc3RyaWRlcywgZGlsYXRpb25zLCBwYWQsXG4gICAgICBudWxsIC8qIHJvdW5kaW5nTW9kZSAqLywgbnVsbCAvKiBkZXB0aFdpc2UgKi8sICRkYXRhRm9ybWF0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQb29sMkRJbmZvKFxuICAgIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLCBzdHJpZGVzOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXSxcbiAgICBkaWxhdGlvbnM6IG51bWJlcnxbbnVtYmVyLCBudW1iZXJdLFxuICAgIHBhZDogJ3NhbWUnfCd2YWxpZCd8bnVtYmVyfEV4cGxpY2l0UGFkZGluZyxcbiAgICByb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnLFxuICAgIGRhdGFGb3JtYXQ6ICdjaGFubmVsc0ZpcnN0J3wnY2hhbm5lbHNMYXN0JyA9ICdjaGFubmVsc0xhc3QnKTogQ29udjJESW5mbyB7XG4gIGNvbnN0IFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoXSA9IHBhcnNlVHVwbGVQYXJhbShmaWx0ZXJTaXplKTtcblxuICBsZXQgZmlsdGVyU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCcpIHtcbiAgICBmaWx0ZXJTaGFwZSA9IFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBpblNoYXBlWzNdLCBpblNoYXBlWzNdXTtcbiAgfSBlbHNlIGlmIChkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNGaXJzdCcpIHtcbiAgICBmaWx0ZXJTaGFwZSA9IFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBpblNoYXBlWzFdLCBpblNoYXBlWzFdXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YUZvcm1hdCAke2RhdGFGb3JtYXR9YCk7XG4gIH1cblxuICByZXR1cm4gY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICBpblNoYXBlLCBmaWx0ZXJTaGFwZSwgc3RyaWRlcywgZGlsYXRpb25zLCBwYWQsIHJvdW5kaW5nTW9kZSwgZmFsc2UsXG4gICAgICBkYXRhRm9ybWF0KTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgaW5mb3JtYXRpb24gZm9yIGEgZm9yd2FyZCBwYXNzIG9mIGEgcG9vbGluZzNEIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQb29sM0RJbmZvKFxuICAgIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgZmlsdGVyU2l6ZTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBzdHJpZGVzOiBudW1iZXJ8W251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGRpbGF0aW9uczogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgcGFkOiAnc2FtZSd8J3ZhbGlkJ3xudW1iZXIsXG4gICAgcm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyxcbiAgICBkYXRhRm9ybWF0OiAnTkRIV0MnfCdOQ0RIVycgPSAnTkRIV0MnKTogQ29udjNESW5mbyB7XG4gIGNvbnN0IFtmaWx0ZXJEZXB0aCwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aF0gPSBwYXJzZTNUdXBsZVBhcmFtKGZpbHRlclNpemUpO1xuXG4gIGxldCBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgbGV0ICRkYXRhRm9ybWF0OiAnY2hhbm5lbHNGaXJzdCd8J2NoYW5uZWxzTGFzdCc7XG4gIGlmIChkYXRhRm9ybWF0ID09PSAnTkRIV0MnKSB7XG4gICAgJGRhdGFGb3JtYXQgPSAnY2hhbm5lbHNMYXN0JztcbiAgICBmaWx0ZXJTaGFwZSA9XG4gICAgICAgIFtmaWx0ZXJEZXB0aCwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5TaGFwZVs0XSwgaW5TaGFwZVs0XV07XG4gIH0gZWxzZSBpZiAoZGF0YUZvcm1hdCA9PT0gJ05DREhXJykge1xuICAgICRkYXRhRm9ybWF0ID0gJ2NoYW5uZWxzRmlyc3QnO1xuICAgIGZpbHRlclNoYXBlID1cbiAgICAgICAgW2ZpbHRlckRlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBpblNoYXBlWzFdLCBpblNoYXBlWzFdXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YUZvcm1hdCAke2RhdGFGb3JtYXR9YCk7XG4gIH1cblxuICByZXR1cm4gY29tcHV0ZUNvbnYzREluZm8oXG4gICAgICBpblNoYXBlLCBmaWx0ZXJTaGFwZSwgc3RyaWRlcywgZGlsYXRpb25zLCBwYWQsIGZhbHNlLCAkZGF0YUZvcm1hdCxcbiAgICAgIHJvdW5kaW5nTW9kZSk7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGluZm9ybWF0aW9uIGZvciBhIGZvcndhcmQgcGFzcyBvZiBhIGNvbnZvbHV0aW9uL3Bvb2xpbmdcbiAqIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDb252MkRJbmZvKFxuICAgIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGZpbHRlclNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBzdHJpZGVzOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXSwgZGlsYXRpb25zOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXSxcbiAgICBwYWQ6ICdzYW1lJ3wndmFsaWQnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmcsXG4gICAgcm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJywgZGVwdGh3aXNlID0gZmFsc2UsXG4gICAgZGF0YUZvcm1hdDogJ2NoYW5uZWxzRmlyc3QnfCdjaGFubmVsc0xhc3QnID0gJ2NoYW5uZWxzTGFzdCcpOiBDb252MkRJbmZvIHtcbiAgbGV0IFtiYXRjaFNpemUsIGluSGVpZ2h0LCBpbldpZHRoLCBpbkNoYW5uZWxzXSA9IFstMSwgLTEsIC0xLCAtMV07XG4gIGlmIChkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0Jykge1xuICAgIFtiYXRjaFNpemUsIGluSGVpZ2h0LCBpbldpZHRoLCBpbkNoYW5uZWxzXSA9IGluU2hhcGU7XG4gIH0gZWxzZSBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzRmlyc3QnKSB7XG4gICAgW2JhdGNoU2l6ZSwgaW5DaGFubmVscywgaW5IZWlnaHQsIGluV2lkdGhdID0gaW5TaGFwZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YUZvcm1hdCAke2RhdGFGb3JtYXR9YCk7XG4gIH1cblxuICBjb25zdCBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgLCBmaWx0ZXJDaGFubmVsc10gPSBmaWx0ZXJTaGFwZTtcbiAgY29uc3QgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdID0gcGFyc2VUdXBsZVBhcmFtKHN0cmlkZXMpO1xuICBjb25zdCBbZGlsYXRpb25IZWlnaHQsIGRpbGF0aW9uV2lkdGhdID0gcGFyc2VUdXBsZVBhcmFtKGRpbGF0aW9ucyk7XG5cbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID1cbiAgICAgIGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmlsdGVySGVpZ2h0LCBkaWxhdGlvbkhlaWdodCk7XG4gIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcldpZHRoID1cbiAgICAgIGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmlsdGVyV2lkdGgsIGRpbGF0aW9uV2lkdGgpO1xuICBjb25zdCB7cGFkSW5mbywgb3V0SGVpZ2h0LCBvdXRXaWR0aH0gPSBnZXRQYWRBbmRPdXRJbmZvKFxuICAgICAgcGFkLCBpbkhlaWdodCwgaW5XaWR0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCwgZWZmZWN0aXZlRmlsdGVySGVpZ2h0LFxuICAgICAgZWZmZWN0aXZlRmlsdGVyV2lkdGgsIHJvdW5kaW5nTW9kZSwgZGF0YUZvcm1hdCk7XG5cbiAgY29uc3Qgb3V0Q2hhbm5lbHMgPSBkZXB0aHdpc2UgPyBmaWx0ZXJDaGFubmVscyAqIGluQ2hhbm5lbHMgOiBmaWx0ZXJDaGFubmVscztcblxuICBsZXQgb3V0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzRmlyc3QnKSB7XG4gICAgb3V0U2hhcGUgPSBbYmF0Y2hTaXplLCBvdXRDaGFubmVscywgb3V0SGVpZ2h0LCBvdXRXaWR0aF07XG4gIH0gZWxzZSBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCcpIHtcbiAgICBvdXRTaGFwZSA9IFtiYXRjaFNpemUsIG91dEhlaWdodCwgb3V0V2lkdGgsIG91dENoYW5uZWxzXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmF0Y2hTaXplLFxuICAgIGRhdGFGb3JtYXQsXG4gICAgaW5IZWlnaHQsXG4gICAgaW5XaWR0aCxcbiAgICBpbkNoYW5uZWxzLFxuICAgIG91dEhlaWdodCxcbiAgICBvdXRXaWR0aCxcbiAgICBvdXRDaGFubmVscyxcbiAgICBwYWRJbmZvLFxuICAgIHN0cmlkZUhlaWdodCxcbiAgICBzdHJpZGVXaWR0aCxcbiAgICBmaWx0ZXJIZWlnaHQsXG4gICAgZmlsdGVyV2lkdGgsXG4gICAgZWZmZWN0aXZlRmlsdGVySGVpZ2h0LFxuICAgIGVmZmVjdGl2ZUZpbHRlcldpZHRoLFxuICAgIGRpbGF0aW9uSGVpZ2h0LFxuICAgIGRpbGF0aW9uV2lkdGgsXG4gICAgaW5TaGFwZSxcbiAgICBvdXRTaGFwZSxcbiAgICBmaWx0ZXJTaGFwZVxuICB9O1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3J3YXJkIHBhc3Mgb2YgYSAzRCBjb252b2x1dGlvbi9wb29saW5nIG9wZXJhdGlvbi5cbiAqIEl0IGluY2x1ZGVzIGlucHV0IGFuZCBvdXRwdXQgc2hhcGUsIHN0cmlkZXMsIGZpbHRlciBzaXplIGFuZCBwYWRkaW5nXG4gKiBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ29udjNESW5mbyA9IHtcbiAgYmF0Y2hTaXplOiBudW1iZXIsXG4gIGluRGVwdGg6IG51bWJlcixcbiAgaW5IZWlnaHQ6IG51bWJlcixcbiAgaW5XaWR0aDogbnVtYmVyLFxuICBpbkNoYW5uZWxzOiBudW1iZXIsXG4gIG91dERlcHRoOiBudW1iZXIsXG4gIG91dEhlaWdodDogbnVtYmVyLFxuICBvdXRXaWR0aDogbnVtYmVyLFxuICBvdXRDaGFubmVsczogbnVtYmVyLFxuICBkYXRhRm9ybWF0OiAnY2hhbm5lbHNGaXJzdCd8J2NoYW5uZWxzTGFzdCcsXG4gIHN0cmlkZURlcHRoOiBudW1iZXIsXG4gIHN0cmlkZUhlaWdodDogbnVtYmVyLFxuICBzdHJpZGVXaWR0aDogbnVtYmVyLFxuICBkaWxhdGlvbkRlcHRoOiBudW1iZXIsXG4gIGRpbGF0aW9uSGVpZ2h0OiBudW1iZXIsXG4gIGRpbGF0aW9uV2lkdGg6IG51bWJlcixcbiAgZmlsdGVyRGVwdGg6IG51bWJlcixcbiAgZmlsdGVySGVpZ2h0OiBudW1iZXIsXG4gIGZpbHRlcldpZHRoOiBudW1iZXIsXG4gIGVmZmVjdGl2ZUZpbHRlckRlcHRoOiBudW1iZXIsXG4gIGVmZmVjdGl2ZUZpbHRlckhlaWdodDogbnVtYmVyLFxuICBlZmZlY3RpdmVGaWx0ZXJXaWR0aDogbnVtYmVyLFxuICBwYWRJbmZvOiBQYWRJbmZvM0QsXG4gIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gIG91dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxufTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgaW5mb3JtYXRpb24gZm9yIGEgZm9yd2FyZCBwYXNzIG9mIGEgM0QgY29udm9sdXRpb24vcG9vbGluZ1xuICogb3BlcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNvbnYzREluZm8oXG4gICAgaW5TaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBzdHJpZGVzOiBudW1iZXJ8W251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGRpbGF0aW9uczogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgcGFkOiAnc2FtZSd8J3ZhbGlkJ3xudW1iZXIsXG4gICAgZGVwdGh3aXNlID0gZmFsc2UsXG4gICAgZGF0YUZvcm1hdDogJ2NoYW5uZWxzRmlyc3QnfCdjaGFubmVsc0xhc3QnID0gJ2NoYW5uZWxzTGFzdCcsXG4gICAgcm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IENvbnYzREluZm8ge1xuICBsZXQgW2JhdGNoU2l6ZSwgaW5EZXB0aCwgaW5IZWlnaHQsIGluV2lkdGgsIGluQ2hhbm5lbHNdID1cbiAgICAgIFstMSwgLTEsIC0xLCAtMSwgLTFdO1xuICBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCcpIHtcbiAgICBbYmF0Y2hTaXplLCBpbkRlcHRoLCBpbkhlaWdodCwgaW5XaWR0aCwgaW5DaGFubmVsc10gPSBpblNoYXBlO1xuICB9IGVsc2UgaWYgKGRhdGFGb3JtYXQgPT09ICdjaGFubmVsc0ZpcnN0Jykge1xuICAgIFtiYXRjaFNpemUsIGluQ2hhbm5lbHMsIGluRGVwdGgsIGluSGVpZ2h0LCBpbldpZHRoXSA9IGluU2hhcGU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRhdGFGb3JtYXQgJHtkYXRhRm9ybWF0fWApO1xuICB9XG5cbiAgY29uc3QgW2ZpbHRlckRlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCAsIGZpbHRlckNoYW5uZWxzXSA9XG4gICAgICBmaWx0ZXJTaGFwZTtcbiAgY29uc3QgW3N0cmlkZURlcHRoLCBzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoXSA9IHBhcnNlM1R1cGxlUGFyYW0oc3RyaWRlcyk7XG4gIGNvbnN0IFtkaWxhdGlvbkRlcHRoLCBkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aF0gPVxuICAgICAgcGFyc2UzVHVwbGVQYXJhbShkaWxhdGlvbnMpO1xuXG4gIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckRlcHRoID1cbiAgICAgIGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmlsdGVyRGVwdGgsIGRpbGF0aW9uRGVwdGgpO1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgPVxuICAgICAgZ2V0RWZmZWN0aXZlRmlsdGVyU2l6ZShmaWx0ZXJIZWlnaHQsIGRpbGF0aW9uSGVpZ2h0KTtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVyV2lkdGggPVxuICAgICAgZ2V0RWZmZWN0aXZlRmlsdGVyU2l6ZShmaWx0ZXJXaWR0aCwgZGlsYXRpb25XaWR0aCk7XG4gIGNvbnN0IHtwYWRJbmZvLCBvdXREZXB0aCwgb3V0SGVpZ2h0LCBvdXRXaWR0aH0gPSBnZXQzRFBhZEFuZE91dEluZm8oXG4gICAgICBwYWQsIGluRGVwdGgsIGluSGVpZ2h0LCBpbldpZHRoLCBzdHJpZGVEZXB0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCxcbiAgICAgIGVmZmVjdGl2ZUZpbHRlckRlcHRoLCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQsIGVmZmVjdGl2ZUZpbHRlcldpZHRoLFxuICAgICAgcm91bmRpbmdNb2RlKTtcblxuICBjb25zdCBvdXRDaGFubmVscyA9IGRlcHRod2lzZSA/IGZpbHRlckNoYW5uZWxzICogaW5DaGFubmVscyA6IGZpbHRlckNoYW5uZWxzO1xuXG4gIGxldCBvdXRTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgaWYgKGRhdGFGb3JtYXQgPT09ICdjaGFubmVsc0ZpcnN0Jykge1xuICAgIG91dFNoYXBlID0gW2JhdGNoU2l6ZSwgb3V0Q2hhbm5lbHMsIG91dERlcHRoLCBvdXRIZWlnaHQsIG91dFdpZHRoXTtcbiAgfSBlbHNlIGlmIChkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0Jykge1xuICAgIG91dFNoYXBlID0gW2JhdGNoU2l6ZSwgb3V0RGVwdGgsIG91dEhlaWdodCwgb3V0V2lkdGgsIG91dENoYW5uZWxzXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmF0Y2hTaXplLFxuICAgIGRhdGFGb3JtYXQsXG4gICAgaW5EZXB0aCxcbiAgICBpbkhlaWdodCxcbiAgICBpbldpZHRoLFxuICAgIGluQ2hhbm5lbHMsXG4gICAgb3V0RGVwdGgsXG4gICAgb3V0SGVpZ2h0LFxuICAgIG91dFdpZHRoLFxuICAgIG91dENoYW5uZWxzLFxuICAgIHBhZEluZm8sXG4gICAgc3RyaWRlRGVwdGgsXG4gICAgc3RyaWRlSGVpZ2h0LFxuICAgIHN0cmlkZVdpZHRoLFxuICAgIGZpbHRlckRlcHRoLFxuICAgIGZpbHRlckhlaWdodCxcbiAgICBmaWx0ZXJXaWR0aCxcbiAgICBlZmZlY3RpdmVGaWx0ZXJEZXB0aCxcbiAgICBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQsXG4gICAgZWZmZWN0aXZlRmlsdGVyV2lkdGgsXG4gICAgZGlsYXRpb25EZXB0aCxcbiAgICBkaWxhdGlvbkhlaWdodCxcbiAgICBkaWxhdGlvbldpZHRoLFxuICAgIGluU2hhcGUsXG4gICAgb3V0U2hhcGUsXG4gICAgZmlsdGVyU2hhcGVcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU91dHB1dFNoYXBlMkQoXG4gICAgaW5TaGFwZTogW251bWJlciwgbnVtYmVyXSwgZmllbGRTaXplOiBudW1iZXIsIHN0cmlkZTogbnVtYmVyLFxuICAgIHplcm9QYWQ/OiBudW1iZXIsIHJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgaWYgKHplcm9QYWQgPT0gbnVsbCkge1xuICAgIHplcm9QYWQgPSBjb21wdXRlRGVmYXVsdFBhZChpblNoYXBlLCBmaWVsZFNpemUsIHN0cmlkZSk7XG4gIH1cbiAgY29uc3QgaW5wdXRSb3dzID0gaW5TaGFwZVswXTtcbiAgY29uc3QgaW5wdXRDb2xzID0gaW5TaGFwZVsxXTtcblxuICBjb25zdCBvdXRwdXRSb3dzID1cbiAgICAgIHJvdW5kKChpbnB1dFJvd3MgLSBmaWVsZFNpemUgKyAyICogemVyb1BhZCkgLyBzdHJpZGUgKyAxLCByb3VuZGluZ01vZGUpO1xuICBjb25zdCBvdXRwdXRDb2xzID1cbiAgICAgIHJvdW5kKChpbnB1dENvbHMgLSBmaWVsZFNpemUgKyAyICogemVyb1BhZCkgLyBzdHJpZGUgKyAxLCByb3VuZGluZ01vZGUpO1xuXG4gIHJldHVybiBbb3V0cHV0Um93cywgb3V0cHV0Q29sc107XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVPdXRwdXRTaGFwZTREKFxuICAgIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGZpbHRlclNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG91dENoYW5uZWxzOiBudW1iZXIsXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCB6ZXJvUGFkPzogbnVtYmVyLFxuICAgIHJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGlmICh6ZXJvUGFkID09IG51bGwpIHtcbiAgICB6ZXJvUGFkID0gY29tcHV0ZURlZmF1bHRQYWQoaW5TaGFwZSwgZmlsdGVyU2hhcGVbMF0sIHN0cmlkZXNbMF0pO1xuICB9XG4gIGNvbnN0IG91dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFswLCAwLCAwLCBvdXRDaGFubmVsc107XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAzOyBpbmRleCsrKSB7XG4gICAgaWYgKGluU2hhcGVbaW5kZXhdICsgMiAqIHplcm9QYWQgPj0gZmlsdGVyU2hhcGVbaW5kZXhdKSB7XG4gICAgICBvdXRTaGFwZVtpbmRleF0gPSByb3VuZChcbiAgICAgICAgICAoaW5TaGFwZVtpbmRleF0gLSBmaWx0ZXJTaGFwZVtpbmRleF0gKyAyICogemVyb1BhZCkgLyBzdHJpZGVzW2luZGV4XSArXG4gICAgICAgICAgICAgIDEsXG4gICAgICAgICAgcm91bmRpbmdNb2RlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dFNoYXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlZmF1bHRQYWQoXG4gICAgaW5wdXRTaGFwZTogW251bWJlciwgbnVtYmVyXXxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBmaWVsZFNpemU6IG51bWJlciwgc3RyaWRlOiBudW1iZXIsIGRpbGF0aW9uID0gMSk6IG51bWJlciB7XG4gIGNvbnN0IGVmZmVjdGl2ZUZpZWxkU2l6ZSA9IGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmllbGRTaXplLCBkaWxhdGlvbik7XG4gIHJldHVybiBNYXRoLmZsb29yKFxuICAgICAgKGlucHV0U2hhcGVbMF0gKiAoc3RyaWRlIC0gMSkgLSBzdHJpZGUgKyBlZmZlY3RpdmVGaWVsZFNpemUpIC8gMik7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHVwbGVQYXJhbShwYXJhbTogbnVtYmVyfG51bWJlcltdKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW3BhcmFtLCBwYXJhbSwgcGFyYW1dO1xuICB9XG4gIGlmIChwYXJhbS5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gW3BhcmFtWzBdLCBwYXJhbVsxXSwgMV07XG4gIH1cbiAgcmV0dXJuIHBhcmFtIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuZnVuY3Rpb24gcGFyc2UzVHVwbGVQYXJhbShwYXJhbTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6XG4gICAgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgcmV0dXJuIHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicgPyBbcGFyYW0sIHBhcmFtLCBwYXJhbV0gOiBwYXJhbTtcbn1cblxuLyogU2VlIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9hdHJvdXNfY29udjJkXG4gKiBBdHJvdXMgY29udm9sdXRpb24gaXMgZXF1aXZhbGVudCB0byBzdGFuZGFyZCBjb252b2x1dGlvbiB3aXRoIHVwc2FtcGxlZFxuICogZmlsdGVycyB3aXRoIGVmZmVjdGl2ZV9maWx0ZXJfaGVpZ2h0ID1cbiAqIGZpbHRlcl9oZWlnaHQgKyAoZmlsdGVyX2hlaWdodCAtIDEpICogKGRpbGF0aW9uIC0gMSlcbiAqIGFuZCBlZmZlY3RpdmVfZmlsdGVyX3dpZHRoID1cbiAqIGZpbHRlcl93aWR0aCArIChmaWx0ZXJfd2lkdGggLSAxKSAqIChkaWxhdGlvbiAtIDEpLFxuICogcHJvZHVjZWQgYnkgaW5zZXJ0aW5nIGRpbGF0aW9uIC0gMSB6ZXJvcyBhbG9uZyBjb25zZWN1dGl2ZSBlbGVtZW50cyBhY3Jvc3NcbiAqIHRoZSBmaWx0ZXJzJyBzcGF0aWFsIGRpbWVuc2lvbnMuXG4gKiBXaGVuIHRoZXJlIGlzIGEgZGlsYXRpb24sIHRoaXMgY29udmVydHMgYSBmaWx0ZXIgZGltZW5zaW9uIHRvIHRoZVxuICogZWZmZWN0aXZlIGZpbHRlciBkaW1lbnNpb24sIHNvIGl0IGNhbiBiZSB1c2VkIGluIGEgc3RhbmRhcmQgY29udm9sdXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmlsdGVyU2l6ZTogbnVtYmVyLCBkaWxhdGlvbjogbnVtYmVyKSB7XG4gIGlmIChkaWxhdGlvbiA8PSAxKSB7XG4gICAgcmV0dXJuIGZpbHRlclNpemU7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyU2l6ZSArIChmaWx0ZXJTaXplIC0gMSkgKiAoZGlsYXRpb24gLSAxKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFkQW5kT3V0SW5mbyhcbiAgICBwYWQ6ICdzYW1lJ3wndmFsaWQnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmcsIGluSGVpZ2h0OiBudW1iZXIsXG4gICAgaW5XaWR0aDogbnVtYmVyLCBzdHJpZGVIZWlnaHQ6IG51bWJlciwgc3RyaWRlV2lkdGg6IG51bWJlcixcbiAgICBmaWx0ZXJIZWlnaHQ6IG51bWJlciwgZmlsdGVyV2lkdGg6IG51bWJlcixcbiAgICByb3VuZGluZ01vZGU6ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcsXG4gICAgZGF0YUZvcm1hdDogJ2NoYW5uZWxzRmlyc3QnfFxuICAgICdjaGFubmVsc0xhc3QnKToge3BhZEluZm86IFBhZEluZm8sIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyfSB7XG4gIGxldCBwYWRJbmZvOiBQYWRJbmZvO1xuICBsZXQgb3V0SGVpZ2h0OiBudW1iZXI7XG4gIGxldCBvdXRXaWR0aDogbnVtYmVyO1xuXG4gIGlmICh0eXBlb2YgcGFkID09PSAnbnVtYmVyJykge1xuICAgIGNvbnN0IHBhZFR5cGUgPSAocGFkID09PSAwKSA/ICdWQUxJRCcgOiAnTlVNQkVSJztcbiAgICBwYWRJbmZvID0ge3RvcDogcGFkLCBib3R0b206IHBhZCwgbGVmdDogcGFkLCByaWdodDogcGFkLCB0eXBlOiBwYWRUeXBlfTtcbiAgICBjb25zdCBvdXRTaGFwZSA9IGNvbXB1dGVPdXRwdXRTaGFwZTJEKFxuICAgICAgICBbaW5IZWlnaHQsIGluV2lkdGhdLCBmaWx0ZXJIZWlnaHQsIHN0cmlkZUhlaWdodCwgcGFkLCByb3VuZGluZ01vZGUpO1xuICAgIG91dEhlaWdodCA9IG91dFNoYXBlWzBdO1xuICAgIG91dFdpZHRoID0gb3V0U2hhcGVbMV07XG4gIH0gZWxzZSBpZiAocGFkID09PSAnc2FtZScpIHtcbiAgICBvdXRIZWlnaHQgPSBNYXRoLmNlaWwoaW5IZWlnaHQgLyBzdHJpZGVIZWlnaHQpO1xuICAgIG91dFdpZHRoID0gTWF0aC5jZWlsKGluV2lkdGggLyBzdHJpZGVXaWR0aCk7XG4gICAgY29uc3QgcGFkQWxvbmdIZWlnaHQgPVxuICAgICAgICBNYXRoLm1heCgwLCAob3V0SGVpZ2h0IC0gMSkgKiBzdHJpZGVIZWlnaHQgKyBmaWx0ZXJIZWlnaHQgLSBpbkhlaWdodCk7XG4gICAgY29uc3QgcGFkQWxvbmdXaWR0aCA9XG4gICAgICAgIE1hdGgubWF4KDAsIChvdXRXaWR0aCAtIDEpICogc3RyaWRlV2lkdGggKyBmaWx0ZXJXaWR0aCAtIGluV2lkdGgpO1xuICAgIGNvbnN0IHRvcCA9IE1hdGguZmxvb3IocGFkQWxvbmdIZWlnaHQgLyAyKTtcbiAgICBjb25zdCBib3R0b20gPSBwYWRBbG9uZ0hlaWdodCAtIHRvcDtcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5mbG9vcihwYWRBbG9uZ1dpZHRoIC8gMik7XG4gICAgY29uc3QgcmlnaHQgPSBwYWRBbG9uZ1dpZHRoIC0gbGVmdDtcbiAgICBwYWRJbmZvID0ge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgdHlwZTogJ1NBTUUnfTtcbiAgfSBlbHNlIGlmIChwYWQgPT09ICd2YWxpZCcpIHtcbiAgICBwYWRJbmZvID0ge3RvcDogMCwgYm90dG9tOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgdHlwZTogJ1ZBTElEJ307XG4gICAgb3V0SGVpZ2h0ID0gTWF0aC5jZWlsKChpbkhlaWdodCAtIGZpbHRlckhlaWdodCArIDEpIC8gc3RyaWRlSGVpZ2h0KTtcbiAgICBvdXRXaWR0aCA9IE1hdGguY2VpbCgoaW5XaWR0aCAtIGZpbHRlcldpZHRoICsgMSkgLyBzdHJpZGVXaWR0aCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHBhZCA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0b3AgPSBkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JyA/IHBhZFsxXVswXSA6IHBhZFsyXVswXTtcbiAgICBjb25zdCBib3R0b20gPSBkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JyA/IHBhZFsxXVsxXSA6IHBhZFsyXVsxXTtcbiAgICBjb25zdCBsZWZ0ID0gZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCcgPyBwYWRbMl1bMF0gOiBwYWRbM11bMF07XG4gICAgY29uc3QgcmlnaHQgPSBkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JyA/IHBhZFsyXVsxXSA6IHBhZFszXVsxXTtcbiAgICBjb25zdCBwYWRUeXBlID0gKHRvcCA9PT0gMCAmJiBib3R0b20gPT09IDAgJiYgbGVmdCA9PT0gMCAmJiByaWdodCA9PT0gMCkgP1xuICAgICAgICAnVkFMSUQnIDpcbiAgICAgICAgJ0VYUExJQ0lUJztcbiAgICBwYWRJbmZvID0ge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgdHlwZTogcGFkVHlwZX07XG4gICAgb3V0SGVpZ2h0ID0gcm91bmQoXG4gICAgICAgIChpbkhlaWdodCAtIGZpbHRlckhlaWdodCArIHRvcCArIGJvdHRvbSkgLyBzdHJpZGVIZWlnaHQgKyAxLFxuICAgICAgICByb3VuZGluZ01vZGUpO1xuICAgIG91dFdpZHRoID0gcm91bmQoXG4gICAgICAgIChpbldpZHRoIC0gZmlsdGVyV2lkdGggKyBsZWZ0ICsgcmlnaHQpIC8gc3RyaWRlV2lkdGggKyAxLCByb3VuZGluZ01vZGUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IEVycm9yKGBVbmtub3duIHBhZGRpbmcgcGFyYW1ldGVyOiAke3BhZH1gKTtcbiAgfVxuICByZXR1cm4ge3BhZEluZm8sIG91dEhlaWdodCwgb3V0V2lkdGh9O1xufVxuXG5mdW5jdGlvbiBnZXQzRFBhZEFuZE91dEluZm8oXG4gICAgcGFkOiAnc2FtZSd8J3ZhbGlkJ3xudW1iZXIsIGluRGVwdGg6IG51bWJlciwgaW5IZWlnaHQ6IG51bWJlcixcbiAgICBpbldpZHRoOiBudW1iZXIsIHN0cmlkZURlcHRoOiBudW1iZXIsIHN0cmlkZUhlaWdodDogbnVtYmVyLFxuICAgIHN0cmlkZVdpZHRoOiBudW1iZXIsIGZpbHRlckRlcHRoOiBudW1iZXIsIGZpbHRlckhlaWdodDogbnVtYmVyLFxuICAgIGZpbHRlcldpZHRoOiBudW1iZXIsIHJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiB7XG4gIHBhZEluZm86IFBhZEluZm8zRCxcbiAgb3V0RGVwdGg6IG51bWJlcixcbiAgb3V0SGVpZ2h0OiBudW1iZXIsXG4gIG91dFdpZHRoOiBudW1iZXJcbn0ge1xuICBsZXQgcGFkSW5mbzogUGFkSW5mbzNEO1xuICBsZXQgb3V0RGVwdGg6IG51bWJlcjtcbiAgbGV0IG91dEhlaWdodDogbnVtYmVyO1xuICBsZXQgb3V0V2lkdGg6IG51bWJlcjtcblxuICBpZiAocGFkID09PSAndmFsaWQnKSB7XG4gICAgcGFkID0gMDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFkID09PSAnbnVtYmVyJykge1xuICAgIGNvbnN0IHBhZFR5cGUgPSAocGFkID09PSAwKSA/ICdWQUxJRCcgOiAnTlVNQkVSJztcbiAgICBwYWRJbmZvID0ge1xuICAgICAgdG9wOiBwYWQsXG4gICAgICBib3R0b206IHBhZCxcbiAgICAgIGxlZnQ6IHBhZCxcbiAgICAgIHJpZ2h0OiBwYWQsXG4gICAgICBmcm9udDogcGFkLFxuICAgICAgYmFjazogcGFkLFxuICAgICAgdHlwZTogcGFkVHlwZVxuICAgIH07XG4gICAgY29uc3Qgb3V0U2hhcGUgPSBjb21wdXRlT3V0cHV0U2hhcGU0RChcbiAgICAgICAgW2luRGVwdGgsIGluSGVpZ2h0LCBpbldpZHRoLCAxXSxcbiAgICAgICAgW2ZpbHRlckRlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoXSwgMSxcbiAgICAgICAgW3N0cmlkZURlcHRoLCBzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoXSwgcGFkLCByb3VuZGluZ01vZGUpO1xuICAgIG91dERlcHRoID0gb3V0U2hhcGVbMF07XG4gICAgb3V0SGVpZ2h0ID0gb3V0U2hhcGVbMV07XG4gICAgb3V0V2lkdGggPSBvdXRTaGFwZVsyXTtcbiAgfSBlbHNlIGlmIChwYWQgPT09ICdzYW1lJykge1xuICAgIG91dERlcHRoID0gTWF0aC5jZWlsKGluRGVwdGggLyBzdHJpZGVEZXB0aCk7XG4gICAgb3V0SGVpZ2h0ID0gTWF0aC5jZWlsKGluSGVpZ2h0IC8gc3RyaWRlSGVpZ2h0KTtcbiAgICBvdXRXaWR0aCA9IE1hdGguY2VpbChpbldpZHRoIC8gc3RyaWRlV2lkdGgpO1xuICAgIGNvbnN0IHBhZEFsb25nRGVwdGggPSAob3V0RGVwdGggLSAxKSAqIHN0cmlkZURlcHRoICsgZmlsdGVyRGVwdGggLSBpbkRlcHRoO1xuICAgIGNvbnN0IHBhZEFsb25nSGVpZ2h0ID1cbiAgICAgICAgKG91dEhlaWdodCAtIDEpICogc3RyaWRlSGVpZ2h0ICsgZmlsdGVySGVpZ2h0IC0gaW5IZWlnaHQ7XG4gICAgY29uc3QgcGFkQWxvbmdXaWR0aCA9IChvdXRXaWR0aCAtIDEpICogc3RyaWRlV2lkdGggKyBmaWx0ZXJXaWR0aCAtIGluV2lkdGg7XG4gICAgY29uc3QgZnJvbnQgPSBNYXRoLmZsb29yKHBhZEFsb25nRGVwdGggLyAyKTtcbiAgICBjb25zdCBiYWNrID0gcGFkQWxvbmdEZXB0aCAtIGZyb250O1xuICAgIGNvbnN0IHRvcCA9IE1hdGguZmxvb3IocGFkQWxvbmdIZWlnaHQgLyAyKTtcbiAgICBjb25zdCBib3R0b20gPSBwYWRBbG9uZ0hlaWdodCAtIHRvcDtcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5mbG9vcihwYWRBbG9uZ1dpZHRoIC8gMik7XG4gICAgY29uc3QgcmlnaHQgPSBwYWRBbG9uZ1dpZHRoIC0gbGVmdDtcblxuICAgIHBhZEluZm8gPSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LCBmcm9udCwgYmFjaywgdHlwZTogJ1NBTUUnfTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcihgVW5rbm93biBwYWRkaW5nIHBhcmFtZXRlcjogJHtwYWR9YCk7XG4gIH1cbiAgcmV0dXJuIHtwYWRJbmZvLCBvdXREZXB0aCwgb3V0SGVpZ2h0LCBvdXRXaWR0aH07XG59XG5cbi8qKlxuICogUm91bmRzIGEgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSByb3VuZGluZyBtb2RlXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSByb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqL1xuZnVuY3Rpb24gcm91bmQodmFsdWU6IG51bWJlciwgcm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJykge1xuICBpZiAoIXJvdW5kaW5nTW9kZSkge1xuICAgIHJldHVybiBNYXRoLnRydW5jKHZhbHVlKTtcbiAgfVxuICBzd2l0Y2ggKHJvdW5kaW5nTW9kZSkge1xuICAgIGNhc2UgJ3JvdW5kJzpcbiAgICAgIC8vIHVzZWQgZm9yIENhZmZlIENvbnZcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBjYXNlICdjZWlsJzpcbiAgICAgIC8vIHVzZWQgZm9yIENhZmZlIFBvb2xcbiAgICAgIHJldHVybiBNYXRoLmNlaWwodmFsdWUpO1xuICAgIGNhc2UgJ2Zsb29yJzpcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJvdW5kaW5nTW9kZSAke3JvdW5kaW5nTW9kZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVwbGVWYWx1ZXNBcmVPbmUocGFyYW06IG51bWJlcnxudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBbZGltQSwgZGltQiwgZGltQ10gPSBwYXJzZVR1cGxlUGFyYW0ocGFyYW0pO1xuICByZXR1cm4gZGltQSA9PT0gMSAmJiBkaW1CID09PSAxICYmIGRpbUMgPT09IDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlaXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUoXG4gICAgc3RyaWRlczogbnVtYmVyfG51bWJlcltdLCBkaWxhdGlvbnM6IG51bWJlcnxudW1iZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHVwbGVWYWx1ZXNBcmVPbmUoc3RyaWRlcykgfHwgdHVwbGVWYWx1ZXNBcmVPbmUoZGlsYXRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlkZXNPckRpbGF0aW9uc0FyZVBvc2l0aXZlKHZhbHVlczogbnVtYmVyfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJzZVR1cGxlUGFyYW0odmFsdWVzKS5ldmVyeSh2YWx1ZSA9PiB2YWx1ZSA+IDApO1xufVxuXG4vKipcbiAqIENvbnZlcnQgQ29udjJEIGRhdGFGb3JtYXQgZnJvbSAnTkhXQyd8J05DSFcnIHRvXG4gKiAgICAnY2hhbm5lbHNMYXN0J3wnY2hhbm5lbHNGaXJzdCdcbiAqIEBwYXJhbSBkYXRhRm9ybWF0IGluICdOSFdDJ3wnTkNIVycgbW9kZVxuICogQHJldHVybiBkYXRhRm9ybWF0IGluICdjaGFubmVsc0xhc3QnfCdjaGFubmVsc0ZpcnN0JyBtb2RlXG4gKiBAdGhyb3dzIHVua25vd24gZGF0YUZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENvbnYyRERhdGFGb3JtYXQoZGF0YUZvcm1hdDogJ05IV0MnfCdOQ0hXJyk6XG4gICAgJ2NoYW5uZWxzTGFzdCd8J2NoYW5uZWxzRmlyc3QnIHtcbiAgaWYgKGRhdGFGb3JtYXQgPT09ICdOSFdDJykge1xuICAgIHJldHVybiAnY2hhbm5lbHNMYXN0JztcbiAgfSBlbHNlIGlmIChkYXRhRm9ybWF0ID09PSAnTkNIVycpIHtcbiAgICByZXR1cm4gJ2NoYW5uZWxzRmlyc3QnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhRm9ybWF0ICR7ZGF0YUZvcm1hdH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHZhbGlkaXR5IG9mIHBhZCB3aGVuIHVzaW5nIGRpbVJvdW5kaW5nTW9kZS5cbiAqIEBwYXJhbSBvcERlc2MgQSBzdHJpbmcgb2Ygb3AgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgLSBgdmFsaWRgIG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqIEB0aHJvd3MgdW5rbm93biBwYWRkaW5nIHBhcmFtZXRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQYWRPbkRpbVJvdW5kaW5nTW9kZShcbiAgICBvcERlc2M6IHN0cmluZywgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpIHtcbiAgaWYgKGRpbVJvdW5kaW5nTW9kZSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBwYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBgRXJyb3IgaW4gJHtvcERlc2N9OiBwYWQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdoZW4gdXNpbmcgYCArXG4gICAgICAgICAgYGRpbVJvdW5kaW5nTW9kZSAke2RpbVJvdW5kaW5nTW9kZX0gYnV0IGdvdCBwYWQgJHtwYWR9LmApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgIHV0aWwuaXNJbnQocGFkKSxcbiAgICAgICAgICAoKSA9PiBgRXJyb3IgaW4gJHtvcERlc2N9OiBwYWQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdoZW4gdXNpbmcgYCArXG4gICAgICAgICAgICAgIGBkaW1Sb3VuZGluZ01vZGUgJHtkaW1Sb3VuZGluZ01vZGV9IGJ1dCBnb3QgcGFkICR7cGFkfS5gKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAocGFkIGFzIEV4cGxpY2l0UGFkZGluZykuZm9yRWFjaChwID0+IHtcbiAgICAgICAgcC5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgICAgICB1dGlsLmlzSW50KHYpLFxuICAgICAgICAgICAgICAoKSA9PiBgRXJyb3IgaW4gJHtvcERlc2N9OiBwYWQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdoZW4gdXNpbmcgYCArXG4gICAgICAgICAgICAgICAgICBgZGltUm91bmRpbmdNb2RlICR7ZGltUm91bmRpbmdNb2RlfSBidXQgZ290IHBhZCAke3Z9LmApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihgRXJyb3IgaW4gJHtvcERlc2N9OiBVbmtub3duIHBhZGRpbmcgcGFyYW1ldGVyOiAke3BhZH1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Reshape } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Reshapes a `tf.Tensor` to a given shape.\n *\n * Given an input tensor, returns a new tensor with the same values as the\n * input tensor with shape `shape`.\n *\n * If one component of shape is the special value -1, the size of that\n * dimension is computed so that the total size remains constant. In\n * particular, a shape of [-1] flattens into 1-D. At most one component of\n * shape can be -1.\n *\n * If shape is 1-D or higher, then the operation returns a tensor with shape\n * shape filled with the values of tensor. In this case, the number of\n * elements implied by shape must be the same as the number of elements in\n * tensor.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * x.reshape([2, 2]).print();\n * ```\n *\n * @param x The input tensor to be reshaped.\n * @param shape An array of integers defining the output tensor shape.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction reshape_(x, shape) {\n const $x = convertToTensor(x, 'x', 'reshape', 'string_or_numeric');\n const inputs = { x: $x };\n const attrs = { shape };\n return ENGINE.runKernel(Reshape, inputs, attrs);\n}\nexport const reshape = /* @__PURE__ */ op({ reshape_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3Jlc2hhcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUE4QixNQUFNLGlCQUFpQixDQUFDO0FBSXJFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsU0FBUyxRQUFRLENBQ2IsQ0FBb0IsRUFBRSxLQUFrQjtJQUMxQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUVuRSxNQUFNLE1BQU0sR0FBa0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDdEMsTUFBTSxLQUFLLEdBQWlCLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixPQUFPLEVBQUUsTUFBbUMsRUFDNUMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtSZXNoYXBlLCBSZXNoYXBlQXR0cnMsIFJlc2hhcGVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rLCBTaGFwZU1hcCwgVGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmVzaGFwZXMgYSBgdGYuVGVuc29yYCB0byBhIGdpdmVuIHNoYXBlLlxuICpcbiAqIEdpdmVuIGFuIGlucHV0IHRlbnNvciwgcmV0dXJucyBhIG5ldyB0ZW5zb3Igd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gKiBpbnB1dCB0ZW5zb3Igd2l0aCBzaGFwZSBgc2hhcGVgLlxuICpcbiAqIElmIG9uZSBjb21wb25lbnQgb2Ygc2hhcGUgaXMgdGhlIHNwZWNpYWwgdmFsdWUgLTEsIHRoZSBzaXplIG9mIHRoYXRcbiAqIGRpbWVuc2lvbiBpcyBjb21wdXRlZCBzbyB0aGF0IHRoZSB0b3RhbCBzaXplIHJlbWFpbnMgY29uc3RhbnQuIEluXG4gKiBwYXJ0aWN1bGFyLCBhIHNoYXBlIG9mIFstMV0gZmxhdHRlbnMgaW50byAxLUQuIEF0IG1vc3Qgb25lIGNvbXBvbmVudCBvZlxuICogc2hhcGUgY2FuIGJlIC0xLlxuICpcbiAqIElmIHNoYXBlIGlzIDEtRCBvciBoaWdoZXIsIHRoZW4gdGhlIG9wZXJhdGlvbiByZXR1cm5zIGEgdGVuc29yIHdpdGggc2hhcGVcbiAqIHNoYXBlIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZXMgb2YgdGVuc29yLiBJbiB0aGlzIGNhc2UsIHRoZSBudW1iZXIgb2ZcbiAqIGVsZW1lbnRzIGltcGxpZWQgYnkgc2hhcGUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluXG4gKiB0ZW5zb3IuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICogeC5yZXNoYXBlKFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IgdG8gYmUgcmVzaGFwZWQuXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gcmVzaGFwZV88UiBleHRlbmRzIFJhbms+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBzaGFwZTogU2hhcGVNYXBbUl0pOiBUZW5zb3I8Uj4ge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZXNoYXBlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSZXNoYXBlSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFJlc2hhcGVBdHRycyA9IHtzaGFwZX07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgUmVzaGFwZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5leHBvcnQgY29uc3QgcmVzaGFwZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmVzaGFwZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { AvgPool } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { cast } from './cast';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the 2D average pooling of an image.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n * `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n * `strides` is a single number, then `strideHeight == strideWidth`.\n * @param pad The type of padding algorithm:\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction avgPool_(x, filterSize, strides, pad, dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'avgPool', 'float32');\n const dilations = 1;\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in avgPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${x4D.rank}.`);\n conv_util.checkPadOnDimRoundingMode('avgPool', pad, dimRoundingMode);\n const inputs = { x: x4D };\n const attrs = { filterSize, strides, pad, dimRoundingMode };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n let res = ENGINE.runKernel(AvgPool, inputs, attrs);\n res = cast(res, $x.dtype);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const avgPool = /* @__PURE__ */ op({ avgPool_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZnX3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hdmdfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxPQUFPLEVBQThCLE1BQU0saUJBQWlCLENBQUM7QUFJckUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFlLEVBQUUsVUFBbUMsRUFDcEQsT0FBZ0MsRUFDaEMsR0FBb0QsRUFDcEQsZUFBd0M7SUFDMUMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVwQixJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQzVELEdBQUcsRUFBRSxDQUFDLDJEQUEyRDtRQUM3RCxlQUFlLE9BQU8sbUJBQW1CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFL0QsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZCxHQUFHLEVBQUUsQ0FBQyxtREFBbUQsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDMUUsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckUsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFpQixFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxDQUFDO0lBRXhFLDBEQUEwRDtJQUMxRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLE9BQU8sRUFBRSxNQUFtQyxFQUM1QyxLQUFnQyxDQUFNLENBQUM7SUFFckQsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFCLElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sQ0FBQztLQUN0RTtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0F2Z1Bvb2wsIEF2Z1Bvb2xBdHRycywgQXZnUG9vbElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IzRCwgVGVuc29yNER9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCAqIGFzIGNvbnZfdXRpbCBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIDJEIGF2ZXJhZ2UgcG9vbGluZyBvZiBhbiBpbWFnZS5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDQgb3IgcmFuayAzIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXJTaXplIFRoZSBmaWx0ZXIgc2l6ZTogYFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoXWAuIElmXG4gKiAgICAgYGZpbHRlclNpemVgIGlzIGEgc2luZ2xlIG51bWJlciwgdGhlbiBgZmlsdGVySGVpZ2h0ID09IGZpbHRlcldpZHRoYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBwb29saW5nOiBgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC4gSWZcbiAqICAgICBgc3RyaWRlc2AgaXMgYSBzaW5nbGUgbnVtYmVyLCB0aGVuIGBzdHJpZGVIZWlnaHQgPT0gc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobTpcbiAqICAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMXgxLlxuICogICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGRpbVJvdW5kaW5nTW9kZSBBIHN0cmluZyBmcm9tOiAnY2VpbCcsICdyb3VuZCcsICdmbG9vcicuIElmIG5vbmUgaXNcbiAqICAgICBwcm92aWRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRydW5jYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gYXZnUG9vbF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICAgIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICAgIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfGNvbnZfdXRpbC5FeHBsaWNpdFBhZGRpbmcsXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhdmdQb29sJywgJ2Zsb2F0MzInKTtcbiAgY29uc3QgZGlsYXRpb25zID0gMTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5laXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUoc3RyaWRlcywgZGlsYXRpb25zKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBhdmdQb29sOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG5cbiAgbGV0IHg0RCA9ICR4IGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG4gIGlmICgkeC5yYW5rID09PSAzKSB7XG4gICAgcmVzaGFwZWRUbzREID0gdHJ1ZTtcbiAgICB4NEQgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdLCAkeC5zaGFwZVsyXV0pO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBhdmdQb29sOiB4IG11c3QgYmUgcmFuayA0IGJ1dCBnb3QgcmFuayAke3g0RC5yYW5rfS5gKTtcbiAgY29udl91dGlsLmNoZWNrUGFkT25EaW1Sb3VuZGluZ01vZGUoJ2F2Z1Bvb2wnLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IGlucHV0czogQXZnUG9vbElucHV0cyA9IHt4OiB4NER9O1xuICBjb25zdCBhdHRyczogQXZnUG9vbEF0dHJzID0ge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGxldCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgIEF2Z1Bvb2wsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUO1xuXG4gIHJlcyA9IGNhc3QocmVzLCAkeC5kdHlwZSk7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGF2Z1Bvb2wgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2F2Z1Bvb2xffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { AvgPool3D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { cast } from './cast';\nimport { checkPadOnDimRoundingMode } from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the 3D average pooling.\n *\n * ```js\n * const x = tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]);\n * const result = tf.avgPool3d(x, 2, 1, 'valid');\n * result.print();\n * ```\n *\n * @param x The input tensor, of rank 5 or rank 4 of shape\n * `[batch, depth, height, width, inChannels]`.\n * @param filterSize The filter size:\n * `[filterDepth, filterHeight, filterWidth]`.\n * If `filterSize` is a single number,\n * then `filterDepth == filterHeight == filterWidth`.\n * @param strides The strides of the pooling:\n * `[strideDepth, strideHeight, strideWidth]`.\n * If `strides` is a single number,\n * then `strideDepth == strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1*1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n * \"NDHWC\". Specify the data format of the input and output data. With the\n * default format \"NDHWC\", the data is stored in the order of: [batch,\n * depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction avgPool3d_(x, filterSize, strides, pad, dimRoundingMode, dataFormat = 'NDHWC') {\n const $x = convertToTensor(x, 'x', 'avgPool3d', 'float32');\n let x5D = $x;\n let reshapedTo5D = false;\n if ($x.rank === 4) {\n reshapedTo5D = true;\n x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]);\n }\n util.assert(x5D.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${x5D.rank}.`);\n util.assert(dataFormat === 'NDHWC', () => `Error in avgPool3d: Only NDHWC is currently supported, ` +\n `but got dataFormat of ${dataFormat}`);\n util.assert((typeof strides === 'number' && strides > 0) ||\n (Array.isArray(strides) && strides[0] > 0 && strides[1] > 0 &&\n strides[2] > 0), () => `Error in avgPool3d: Stride must be > 0, but got '${strides}'`);\n checkPadOnDimRoundingMode('avgPool3d', pad, dimRoundingMode);\n const inputs = { x: x5D };\n const attrs = { filterSize, strides, pad, dimRoundingMode, dataFormat };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n let res = ENGINE.runKernel(AvgPool3D, inputs, attrs);\n res = cast(res, x5D.dtype);\n if (reshapedTo5D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]);\n }\n return res;\n}\nexport const avgPool3d = /* @__PURE__ */ op({ avgPool3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZnX3Bvb2xfM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hdmdfcG9vbF8zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxTQUFTLEVBQWtDLE1BQU0saUJBQWlCLENBQUM7QUFJM0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFDSCxTQUFTLFVBQVUsQ0FDZixDQUFlLEVBQUUsVUFBMkMsRUFDNUQsT0FBd0MsRUFBRSxHQUEwQixFQUNwRSxlQUF3QyxFQUN4QyxhQUE4QixPQUFPO0lBQ3ZDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUUzRCxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTtJQUVELElBQUksQ0FBQyxNQUFNLENBQ1AsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMscURBQXFELEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxNQUFNLENBQ1AsVUFBVSxLQUFLLE9BQU8sRUFDdEIsR0FBRyxFQUFFLENBQUMseURBQXlEO1FBQzNELHlCQUF5QixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxNQUFNLENBQ1AsQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUN4QyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxRCxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ3BCLEdBQUcsRUFBRSxDQUFDLG9EQUFvRCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQzFFLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0QsTUFBTSxNQUFNLEdBQW9CLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUNVLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxDQUFDO0lBRTdFLDBEQUEwRDtJQUMxRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLFNBQVMsRUFBRSxNQUFtQyxFQUM5QyxLQUFnQyxDQUFNLENBQUM7SUFFckQsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNCLElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sT0FBTyxDQUNILEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkUsQ0FBQztLQUNQO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QXZnUG9vbDNELCBBdmdQb29sM0RBdHRycywgQXZnUG9vbDNESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjRELCBUZW5zb3I1RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtjYXN0fSBmcm9tICcuL2Nhc3QnO1xuaW1wb3J0IHtjaGVja1BhZE9uRGltUm91bmRpbmdNb2RlfSBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIDNEIGF2ZXJhZ2UgcG9vbGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjVkKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSwgWzEsIDIsIDIsIDIsIDFdKTtcbiAqIGNvbnN0IHJlc3VsdCA9IHRmLmF2Z1Bvb2wzZCh4LCAyLCAxLCAndmFsaWQnKTtcbiAqIHJlc3VsdC5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA1IG9yIHJhbmsgNCBvZiBzaGFwZVxuICogICAgIGBbYmF0Y2gsIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuXG4gKiBAcGFyYW0gZmlsdGVyU2l6ZSBUaGUgZmlsdGVyIHNpemU6XG4gKiAgICAgYFtmaWx0ZXJEZXB0aCwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aF1gLlxuICogICAgIElmIGBmaWx0ZXJTaXplYCBpcyBhIHNpbmdsZSBudW1iZXIsXG4gKiAgICAgdGhlbiBgZmlsdGVyRGVwdGggPT0gZmlsdGVySGVpZ2h0ID09IGZpbHRlcldpZHRoYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBwb29saW5nOlxuICogICAgIGBbc3RyaWRlRGVwdGgsIHN0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC5cbiAqICAgICBJZiBgc3RyaWRlc2AgaXMgYSBzaW5nbGUgbnVtYmVyLFxuICogICAgIHRoZW4gYHN0cmlkZURlcHRoID09IHN0cmlkZUhlaWdodCA9PSBzdHJpZGVXaWR0aGAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxKjF4MS5cbiAqICAgIC0gRm9yIG1vcmUgaW5mbywgc2VlIHRoaXMgZ3VpZGU6XG4gKiAgICAgW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbl0oXG4gKiAgICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb24pXG4gKiBAcGFyYW0gZGltUm91bmRpbmdNb2RlIEEgc3RyaW5nIGZyb206ICdjZWlsJywgJ3JvdW5kJywgJ2Zsb29yJy4gSWYgbm9uZSBpc1xuICogICAgIHByb3ZpZGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdHJ1bmNhdGUuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdCBBbiBvcHRpb25hbCBzdHJpbmcgZnJvbTogXCJOREhXQ1wiLCBcIk5DREhXXCIuIERlZmF1bHRzIHRvXG4gKiAgICAgXCJOREhXQ1wiLiBTcGVjaWZ5IHRoZSBkYXRhIGZvcm1hdCBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhLiBXaXRoIHRoZVxuICogICAgIGRlZmF1bHQgZm9ybWF0IFwiTkRIV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uIE9ubHkgXCJOREhXQ1wiIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBhdmdQb29sM2RfPFQgZXh0ZW5kcyBUZW5zb3I0RHxUZW5zb3I1RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXJTaXplOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICAgIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXIsIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcsXG4gICAgZGF0YUZvcm1hdDogJ05ESFdDJ3wnTkNESFcnID0gJ05ESFdDJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhdmdQb29sM2QnLCAnZmxvYXQzMicpO1xuXG4gIGxldCB4NUQgPSAkeCBhcyBUZW5zb3I1RDtcbiAgbGV0IHJlc2hhcGVkVG81RCA9IGZhbHNlO1xuICBpZiAoJHgucmFuayA9PT0gNCkge1xuICAgIHJlc2hhcGVkVG81RCA9IHRydWU7XG4gICAgeDVEID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl0sICR4LnNoYXBlWzNdXSk7XG4gIH1cblxuICB1dGlsLmFzc2VydChcbiAgICAgIHg1RC5yYW5rID09PSA1LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGF2Z1Bvb2wzZDogeCBtdXN0IGJlIHJhbmsgNSBidXQgZ290IHJhbmsgJHt4NUQucmFua30uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZGF0YUZvcm1hdCA9PT0gJ05ESFdDJyxcbiAgICAgICgpID0+IGBFcnJvciBpbiBhdmdQb29sM2Q6IE9ubHkgTkRIV0MgaXMgY3VycmVudGx5IHN1cHBvcnRlZCwgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgZGF0YUZvcm1hdCBvZiAke2RhdGFGb3JtYXR9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgKHR5cGVvZiBzdHJpZGVzID09PSAnbnVtYmVyJyAmJiBzdHJpZGVzID4gMCkgfHxcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShzdHJpZGVzKSAmJiBzdHJpZGVzWzBdID4gMCAmJiBzdHJpZGVzWzFdID4gMCAmJlxuICAgICAgICAgICBzdHJpZGVzWzJdID4gMCksXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYXZnUG9vbDNkOiBTdHJpZGUgbXVzdCBiZSA+IDAsIGJ1dCBnb3QgJyR7c3RyaWRlc30nYCk7XG4gIGNoZWNrUGFkT25EaW1Sb3VuZGluZ01vZGUoJ2F2Z1Bvb2wzZCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgaW5wdXRzOiBBdmdQb29sM0RJbnB1dHMgPSB7eDogeDVEfTtcbiAgY29uc3QgYXR0cnM6XG4gICAgICBBdmdQb29sM0RBdHRycyA9IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZGF0YUZvcm1hdH07XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBsZXQgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICBBdmdQb29sM0QsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUO1xuXG4gIHJlcyA9IGNhc3QocmVzLCB4NUQuZHR5cGUpO1xuXG4gIGlmIChyZXNoYXBlZFRvNUQpIHtcbiAgICByZXR1cm4gcmVzaGFwZShcbiAgICAgICAgICAgICAgIHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM10sIHJlcy5zaGFwZVs0XV0pIGFzXG4gICAgICAgIFQ7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgY29uc3QgYXZnUG9vbDNkID0gLyogQF9fUFVSRV9fICovIG9wKHthdmdQb29sM2RffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Concat } from '../kernel_names';\nimport { convertToTensorArray } from '../tensor_util_env';\nimport { assert } from '../util';\nimport { clone } from './clone';\nimport { op } from './operation';\n/**\n * Concatenates a list of `tf.Tensor`s along a given axis.\n *\n * The tensors ranks and types must match, and their sizes must match in all\n * dimensions except `axis`.\n *\n * Also available are stricter rank-specific methods that assert that\n * `tensors` are of the given rank:\n * - `tf.concat1d`\n * - `tf.concat2d`\n * - `tf.concat3d`\n * - `tf.concat4d`\n *\n * Except `tf.concat1d` (which does not have axis param), all methods have\n * same signature as this method.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * a.concat(b).print(); // or a.concat(b)\n * ```\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n * tf.concat([a, b, c]).print();\n * ```\n *\n * ```js\n * const a = tf.tensor2d([[1, 2], [10, 20]]);\n * const b = tf.tensor2d([[3, 4], [30, 40]]);\n * const axis = 1;\n * tf.concat([a, b], axis).print();\n * ```\n * @param tensors A list of tensors to concatenate.\n * @param axis The axis to concatenate along. Defaults to 0 (the first dim).\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction concat_(tensors, axis = 0) {\n assert(tensors.length >= 1, () => 'Pass at least one tensor to concat');\n const $tensors = convertToTensorArray(tensors, 'tensors', 'concat', 'string_or_numeric');\n if ($tensors[0].dtype === 'complex64') {\n $tensors.forEach(tensor => {\n if (tensor.dtype !== 'complex64') {\n throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${tensor.dtype}. `);\n }\n });\n }\n if ($tensors.length === 1) {\n return clone($tensors[0]);\n }\n const inputs = $tensors;\n const attr = { axis };\n return ENGINE.runKernel(Concat, inputs, attr);\n}\nexport const concat = /* @__PURE__ */ op({ concat_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRS9CLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBQ0gsU0FBUyxPQUFPLENBQW1CLE9BQTRCLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDdkUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFeEUsTUFBTSxRQUFRLEdBQ1Ysb0JBQW9CLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUU1RSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQ3JDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQzt1QkFDRCxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzNCO0lBRUQsTUFBTSxNQUFNLEdBQWlCLFFBQVEsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBZ0IsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUVqQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxJQUErQixDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtDb25jYXQsIENvbmNhdEF0dHJzLCBDb25jYXRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yQXJyYXl9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtjbG9uZX0gZnJvbSAnLi9jbG9uZSc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29uY2F0ZW5hdGVzIGEgbGlzdCBvZiBgdGYuVGVuc29yYHMgYWxvbmcgYSBnaXZlbiBheGlzLlxuICpcbiAqIFRoZSB0ZW5zb3JzIHJhbmtzIGFuZCB0eXBlcyBtdXN0IG1hdGNoLCBhbmQgdGhlaXIgc2l6ZXMgbXVzdCBtYXRjaCBpbiBhbGxcbiAqIGRpbWVuc2lvbnMgZXhjZXB0IGBheGlzYC5cbiAqXG4gKiBBbHNvIGF2YWlsYWJsZSBhcmUgc3RyaWN0ZXIgcmFuay1zcGVjaWZpYyBtZXRob2RzIHRoYXQgYXNzZXJ0IHRoYXRcbiAqIGB0ZW5zb3JzYCBhcmUgb2YgdGhlIGdpdmVuIHJhbms6XG4gKiAgIC0gYHRmLmNvbmNhdDFkYFxuICogICAtIGB0Zi5jb25jYXQyZGBcbiAqICAgLSBgdGYuY29uY2F0M2RgXG4gKiAgIC0gYHRmLmNvbmNhdDRkYFxuICpcbiAqIEV4Y2VwdCBgdGYuY29uY2F0MWRgICh3aGljaCBkb2VzIG5vdCBoYXZlIGF4aXMgcGFyYW0pLCBhbGwgbWV0aG9kcyBoYXZlXG4gKiBzYW1lIHNpZ25hdHVyZSBhcyB0aGlzIG1ldGhvZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzMsIDRdKTtcbiAqIGEuY29uY2F0KGIpLnByaW50KCk7ICAvLyBvciBhLmNvbmNhdChiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFszLCA0XSk7XG4gKiBjb25zdCBjID0gdGYudGVuc29yMWQoWzUsIDZdKTtcbiAqIHRmLmNvbmNhdChbYSwgYiwgY10pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjJkKFtbMSwgMl0sIFsxMCwgMjBdXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMmQoW1szLCA0XSwgWzMwLCA0MF1dKTtcbiAqIGNvbnN0IGF4aXMgPSAxO1xuICogdGYuY29uY2F0KFthLCBiXSwgYXhpcykucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIHRlbnNvcnMgQSBsaXN0IG9mIHRlbnNvcnMgdG8gY29uY2F0ZW5hdGUuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byBjb25jYXRlbmF0ZSBhbG9uZy4gRGVmYXVsdHMgdG8gMCAodGhlIGZpcnN0IGRpbSkuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdF88VCBleHRlbmRzIFRlbnNvcj4odGVuc29yczogQXJyYXk8VHxUZW5zb3JMaWtlPiwgYXhpcyA9IDApOiBUIHtcbiAgYXNzZXJ0KHRlbnNvcnMubGVuZ3RoID49IDEsICgpID0+ICdQYXNzIGF0IGxlYXN0IG9uZSB0ZW5zb3IgdG8gY29uY2F0Jyk7XG5cbiAgY29uc3QgJHRlbnNvcnMgPVxuICAgICAgY29udmVydFRvVGVuc29yQXJyYXkodGVuc29ycywgJ3RlbnNvcnMnLCAnY29uY2F0JywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG5cbiAgaWYgKCR0ZW5zb3JzWzBdLmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICR0ZW5zb3JzLmZvckVhY2godGVuc29yID0+IHtcbiAgICAgIGlmICh0ZW5zb3IuZHR5cGUgIT09ICdjb21wbGV4NjQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbmNhdGVuYXRlIGNvbXBsZXg2NCB0ZW5zb3JzIHdpdGggYSB0ZW5zb3JcbiAgICAgICAgICB3aXRoIGR0eXBlICR7dGVuc29yLmR0eXBlfS4gYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoJHRlbnNvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGNsb25lKCR0ZW5zb3JzWzBdKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogQ29uY2F0SW5wdXRzID0gJHRlbnNvcnM7XG4gIGNvbnN0IGF0dHI6IENvbmNhdEF0dHJzID0ge2F4aXN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgQ29uY2F0LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHIgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgY29uY2F0ID0gLyogQF9fUFVSRV9fICovIG9wKHtjb25jYXRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sigmoid } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes sigmoid element-wise, `1 / (1 + exp(-x))`\n *\n * ```js\n * const x = tf.tensor1d([0, -1, 2, -3]);\n *\n * x.sigmoid().print(); // or tf.sigmoid(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sigmoid_(x) {\n const $x = convertToTensor(x, 'x', 'sigmoid', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sigmoid, inputs);\n}\nexport const sigmoid = /* @__PURE__ */ op({ sigmoid_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbW9pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NpZ21vaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxRQUFRLENBQW1CLENBQWU7SUFDakQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXpELE1BQU0sTUFBTSxHQUFrQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV0QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2lnbW9pZCwgU2lnbW9pZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBzaWdtb2lkIGVsZW1lbnQtd2lzZSwgYDEgLyAoMSArIGV4cCgteCkpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIC0xLCAyLCAtM10pO1xuICpcbiAqIHguc2lnbW9pZCgpLnByaW50KCk7ICAvLyBvciB0Zi5zaWdtb2lkKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHNpZ21vaWRfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzaWdtb2lkJywgJ2Zsb2F0MzInKTtcblxuICBjb25zdCBpbnB1dHM6IFNpZ21vaWRJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNpZ21vaWQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBzaWdtb2lkID0gLyogQF9fUFVSRV9fICovIG9wKHtzaWdtb2lkX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Slice } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Extracts a slice from a `tf.Tensor` starting at coordinates `begin`\n * and is of size `size`.\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that `x` is of the given rank:\n * - `tf.slice1d`\n * - `tf.slice2d`\n * - `tf.slice3d`\n * - `tf.slice4d`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.slice([1], [2]).print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * x.slice([1, 0], [1, 2]).print();\n * ```\n * @param x The input `tf.Tensor` to slice from.\n * @param begin The coordinates to start the slice from. The length can be\n * less than the rank of x - the rest of the axes will have implicit 0 as\n * start. Can also be a single number, in which case it specifies the\n * first axis.\n * @param size The size of the slice. The length can be less than the rank of\n * x - the rest of the axes will have implicit -1. A value of -1 requests\n * the rest of the dimensions in the axis. Can also be a single number,\n * in which case it specifies the size of the first axis.\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction slice_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice', 'string_or_numeric');\n if ($x.rank === 0) {\n throw new Error('Slicing scalar is not possible');\n }\n const inputs = { x: $x };\n const attrs = { begin, size };\n return ENGINE.runKernel(Slice, inputs, attrs);\n}\nexport const slice = /* @__PURE__ */ op({ slice_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zbGljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFJL0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILFNBQVMsTUFBTSxDQUNYLENBQWUsRUFBRSxLQUFzQixFQUFFLElBQXNCO0lBQ2pFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBRWpFLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0tBQ25EO0lBRUQsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFlLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDO0lBRXhDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsS0FBSyxFQUFFLE1BQW1DLEVBQzFDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2xpY2UsIFNsaWNlQXR0cnMsIFNsaWNlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7UmFuaywgVGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogRXh0cmFjdHMgYSBzbGljZSBmcm9tIGEgYHRmLlRlbnNvcmAgc3RhcnRpbmcgYXQgY29vcmRpbmF0ZXMgYGJlZ2luYFxuICogYW5kIGlzIG9mIHNpemUgYHNpemVgLlxuICpcbiAqIEFsc28gYXZhaWxhYmxlIGFyZSBzdHJpY3RlciByYW5rLXNwZWNpZmljIG1ldGhvZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmVcbiAqIGFzIHRoaXMgbWV0aG9kIHRoYXQgYXNzZXJ0IHRoYXQgYHhgIGlzIG9mIHRoZSBnaXZlbiByYW5rOlxuICogICAtIGB0Zi5zbGljZTFkYFxuICogICAtIGB0Zi5zbGljZTJkYFxuICogICAtIGB0Zi5zbGljZTNkYFxuICogICAtIGB0Zi5zbGljZTRkYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqXG4gKiB4LnNsaWNlKFsxXSwgWzJdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogeC5zbGljZShbMSwgMF0sIFsxLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IGB0Zi5UZW5zb3JgIHRvIHNsaWNlIGZyb20uXG4gKiBAcGFyYW0gYmVnaW4gVGhlIGNvb3JkaW5hdGVzIHRvIHN0YXJ0IHRoZSBzbGljZSBmcm9tLiBUaGUgbGVuZ3RoIGNhbiBiZVxuICogICAgIGxlc3MgdGhhbiB0aGUgcmFuayBvZiB4IC0gdGhlIHJlc3Qgb2YgdGhlIGF4ZXMgd2lsbCBoYXZlIGltcGxpY2l0IDAgYXNcbiAqICAgICBzdGFydC4gQ2FuIGFsc28gYmUgYSBzaW5nbGUgbnVtYmVyLCBpbiB3aGljaCBjYXNlIGl0IHNwZWNpZmllcyB0aGVcbiAqICAgICBmaXJzdCBheGlzLlxuICogQHBhcmFtIHNpemUgVGhlIHNpemUgb2YgdGhlIHNsaWNlLiBUaGUgbGVuZ3RoIGNhbiBiZSBsZXNzIHRoYW4gdGhlIHJhbmsgb2ZcbiAqICAgICB4IC0gdGhlIHJlc3Qgb2YgdGhlIGF4ZXMgd2lsbCBoYXZlIGltcGxpY2l0IC0xLiBBIHZhbHVlIG9mIC0xIHJlcXVlc3RzXG4gKiAgICAgdGhlIHJlc3Qgb2YgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGF4aXMuIENhbiBhbHNvIGJlIGEgc2luZ2xlIG51bWJlcixcbiAqICAgICBpbiB3aGljaCBjYXNlIGl0IHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgYXhpcy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdTbGljaW5nIGFuZCBKb2luaW5nJ31cbiAqL1xuZnVuY3Rpb24gc2xpY2VfPFIgZXh0ZW5kcyBSYW5rLCBUIGV4dGVuZHMgVGVuc29yPFI+PihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGJlZ2luOiBudW1iZXJ8bnVtYmVyW10sIHNpemU/OiBudW1iZXJ8bnVtYmVyW10pOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2xpY2UnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcblxuICBpZiAoJHgucmFuayA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2xpY2luZyBzY2FsYXIgaXMgbm90IHBvc3NpYmxlJyk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFNsaWNlSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFNsaWNlQXR0cnMgPSB7YmVnaW4sIHNpemV9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgU2xpY2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc2xpY2UgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NsaWNlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Tanh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes hyperbolic tangent of the input `tf.Tensor` element-wise: `tanh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, 70]);\n *\n * x.tanh().print(); // or tf.tanh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction tanh_(x) {\n const $x = convertToTensor(x, 'x', 'tanh', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Tanh, inputs);\n}\nexport const tanh = /* @__PURE__ */ op({ tanh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3RhbmgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEQsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1RhbmgsIFRhbmhJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgaHlwZXJib2xpYyB0YW5nZW50IG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGB0YW5oKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDEsIC0xLCA3MF0pO1xuICpcbiAqIHgudGFuaCgpLnByaW50KCk7ICAvLyBvciB0Zi50YW5oKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHRhbmhfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICd0YW5oJywgJ2Zsb2F0MzInKTtcblxuICBjb25zdCBpbnB1dHM6IFRhbmhJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFRhbmgsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCB0YW5oID0gLyogQF9fUFVSRV9fICovIG9wKHt0YW5oX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { add } from './add';\nimport { concat } from './concat';\nimport { matMul } from './mat_mul';\nimport { mul } from './mul';\nimport { op } from './operation';\nimport { sigmoid } from './sigmoid';\nimport { slice } from './slice';\nimport { tanh } from './tanh';\n/**\n * Computes the next state and output of a BasicLSTMCell.\n *\n * Returns `[newC, newH]`.\n *\n * Derived from tf.contrib.rnn.BasicLSTMCell.\n *\n * @param forgetBias Forget bias for the cell.\n * @param lstmKernel The weights for the cell.\n * @param lstmBias The bias for the cell.\n * @param data The input to the cell.\n * @param c Previous cell state.\n * @param h Previous cell output.\n *\n * @doc {heading: 'Operations', subheading: 'RNN'}\n */\nfunction basicLSTMCell_(forgetBias, lstmKernel, lstmBias, data, c, h) {\n const $forgetBias = convertToTensor(forgetBias, 'forgetBias', 'basicLSTMCell');\n const $lstmKernel = convertToTensor(lstmKernel, 'lstmKernel', 'basicLSTMCell');\n const $lstmBias = convertToTensor(lstmBias, 'lstmBias', 'basicLSTMCell');\n const $data = convertToTensor(data, 'data', 'basicLSTMCell');\n const $c = convertToTensor(c, 'c', 'basicLSTMCell');\n const $h = convertToTensor(h, 'h', 'basicLSTMCell');\n const combined = concat([$data, $h], 1);\n const weighted = matMul(combined, $lstmKernel);\n const res = add(weighted, $lstmBias);\n // i = input_gate, j = new_input, f = forget_gate, o = output_gate\n const batchSize = res.shape[0];\n const sliceCols = res.shape[1] / 4;\n const sliceSize = [batchSize, sliceCols];\n const i = slice(res, [0, 0], sliceSize);\n const j = slice(res, [0, sliceCols], sliceSize);\n const f = slice(res, [0, sliceCols * 2], sliceSize);\n const o = slice(res, [0, sliceCols * 3], sliceSize);\n const newC = add(mul(sigmoid(i), tanh(j)), mul($c, sigmoid(add($forgetBias, f))));\n const newH = mul(tanh(newC), sigmoid(o));\n return [newC, newH];\n}\nexport const basicLSTMCell = /* @__PURE__ */ op({ basicLSTMCell_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNfbHN0bV9jZWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYmFzaWNfbHN0bV9jZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxjQUFjLENBQ25CLFVBQTZCLEVBQUUsVUFBK0IsRUFDOUQsUUFBNkIsRUFBRSxJQUF5QixFQUN4RCxDQUFzQixFQUFFLENBQXNCO0lBQ2hELE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXBELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFhLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFL0Msa0VBQWtFO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQXFCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVwRCxNQUFNLElBQUksR0FDTixHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEIsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBYSxDQUFDLENBQUMsQ0FBQztJQUMzRCxNQUFNLElBQUksR0FBYSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtTY2FsYXIsIFRlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YWRkfSBmcm9tICcuL2FkZCc7XG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi9jb25jYXQnO1xuaW1wb3J0IHttYXRNdWx9IGZyb20gJy4vbWF0X211bCc7XG5pbXBvcnQge211bH0gZnJvbSAnLi9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzaWdtb2lkfSBmcm9tICcuL3NpZ21vaWQnO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi9zbGljZSc7XG5pbXBvcnQge3Rhbmh9IGZyb20gJy4vdGFuaCc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG5leHQgc3RhdGUgYW5kIG91dHB1dCBvZiBhIEJhc2ljTFNUTUNlbGwuXG4gKlxuICogUmV0dXJucyBgW25ld0MsIG5ld0hdYC5cbiAqXG4gKiBEZXJpdmVkIGZyb20gdGYuY29udHJpYi5ybm4uQmFzaWNMU1RNQ2VsbC5cbiAqXG4gKiBAcGFyYW0gZm9yZ2V0QmlhcyBGb3JnZXQgYmlhcyBmb3IgdGhlIGNlbGwuXG4gKiBAcGFyYW0gbHN0bUtlcm5lbCBUaGUgd2VpZ2h0cyBmb3IgdGhlIGNlbGwuXG4gKiBAcGFyYW0gbHN0bUJpYXMgVGhlIGJpYXMgZm9yIHRoZSBjZWxsLlxuICogQHBhcmFtIGRhdGEgVGhlIGlucHV0IHRvIHRoZSBjZWxsLlxuICogQHBhcmFtIGMgUHJldmlvdXMgY2VsbCBzdGF0ZS5cbiAqIEBwYXJhbSBoIFByZXZpb3VzIGNlbGwgb3V0cHV0LlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JOTid9XG4gKi9cbmZ1bmN0aW9uIGJhc2ljTFNUTUNlbGxfKFxuICAgIGZvcmdldEJpYXM6IFNjYWxhcnxUZW5zb3JMaWtlLCBsc3RtS2VybmVsOiBUZW5zb3IyRHxUZW5zb3JMaWtlLFxuICAgIGxzdG1CaWFzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLCBkYXRhOiBUZW5zb3IyRHxUZW5zb3JMaWtlLFxuICAgIGM6IFRlbnNvcjJEfFRlbnNvckxpa2UsIGg6IFRlbnNvcjJEfFRlbnNvckxpa2UpOiBbVGVuc29yMkQsIFRlbnNvcjJEXSB7XG4gIGNvbnN0ICRmb3JnZXRCaWFzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihmb3JnZXRCaWFzLCAnZm9yZ2V0QmlhcycsICdiYXNpY0xTVE1DZWxsJyk7XG4gIGNvbnN0ICRsc3RtS2VybmVsID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihsc3RtS2VybmVsLCAnbHN0bUtlcm5lbCcsICdiYXNpY0xTVE1DZWxsJyk7XG4gIGNvbnN0ICRsc3RtQmlhcyA9IGNvbnZlcnRUb1RlbnNvcihsc3RtQmlhcywgJ2xzdG1CaWFzJywgJ2Jhc2ljTFNUTUNlbGwnKTtcbiAgY29uc3QgJGRhdGEgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YSwgJ2RhdGEnLCAnYmFzaWNMU1RNQ2VsbCcpO1xuICBjb25zdCAkYyA9IGNvbnZlcnRUb1RlbnNvcihjLCAnYycsICdiYXNpY0xTVE1DZWxsJyk7XG4gIGNvbnN0ICRoID0gY29udmVydFRvVGVuc29yKGgsICdoJywgJ2Jhc2ljTFNUTUNlbGwnKTtcblxuICBjb25zdCBjb21iaW5lZCA9IGNvbmNhdChbJGRhdGEsICRoXSwgMSk7XG4gIGNvbnN0IHdlaWdodGVkID0gbWF0TXVsKGNvbWJpbmVkLCAkbHN0bUtlcm5lbCk7XG4gIGNvbnN0IHJlczogVGVuc29yMkQgPSBhZGQod2VpZ2h0ZWQsICRsc3RtQmlhcyk7XG5cbiAgLy8gaSA9IGlucHV0X2dhdGUsIGogPSBuZXdfaW5wdXQsIGYgPSBmb3JnZXRfZ2F0ZSwgbyA9IG91dHB1dF9nYXRlXG4gIGNvbnN0IGJhdGNoU2l6ZSA9IHJlcy5zaGFwZVswXTtcbiAgY29uc3Qgc2xpY2VDb2xzID0gcmVzLnNoYXBlWzFdIC8gNDtcbiAgY29uc3Qgc2xpY2VTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW2JhdGNoU2l6ZSwgc2xpY2VDb2xzXTtcbiAgY29uc3QgaSA9IHNsaWNlKHJlcywgWzAsIDBdLCBzbGljZVNpemUpO1xuICBjb25zdCBqID0gc2xpY2UocmVzLCBbMCwgc2xpY2VDb2xzXSwgc2xpY2VTaXplKTtcbiAgY29uc3QgZiA9IHNsaWNlKHJlcywgWzAsIHNsaWNlQ29scyAqIDJdLCBzbGljZVNpemUpO1xuICBjb25zdCBvID0gc2xpY2UocmVzLCBbMCwgc2xpY2VDb2xzICogM10sIHNsaWNlU2l6ZSk7XG5cbiAgY29uc3QgbmV3QzogVGVuc29yMkQgPVxuICAgICAgYWRkKG11bChzaWdtb2lkKGkpLCB0YW5oKGopKSxcbiAgICAgICAgICBtdWwoJGMsIHNpZ21vaWQoYWRkKCRmb3JnZXRCaWFzLCBmKSkgYXMgVGVuc29yMkQpKTtcbiAgY29uc3QgbmV3SDogVGVuc29yMkQgPSBtdWwodGFuaChuZXdDKSwgc2lnbW9pZChvKSk7XG4gIHJldHVybiBbbmV3QywgbmV3SF07XG59XG5cbmV4cG9ydCBjb25zdCBiYXNpY0xTVE1DZWxsID0gLyogQF9fUFVSRV9fICovIG9wKHtiYXNpY0xTVE1DZWxsX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BatchToSpaceND } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * This operation reshapes the \"batch\" dimension 0 into `M + 1` dimensions of\n * shape `blockShape + [batch]`, interleaves these blocks back into the grid\n * defined by the spatial dimensions `[1, ..., M]`, to obtain a result with\n * the same rank as the input. The spatial dimensions of this intermediate\n * result are then optionally cropped according to `crops` to produce the\n * output. This is the reverse of `tf.spaceToBatchND`. See below for a precise\n * description.\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [4, 1, 1, 1]);\n * const blockShape = [2, 2];\n * const crops = [[0, 0], [0, 0]];\n *\n * x.batchToSpaceND(blockShape, crops).print();\n * ```\n *\n * @param x A `tf.Tensor`. N-D with `x.shape` = `[batch] + spatialShape +\n * remainingShape`, where spatialShape has `M` dimensions.\n * @param blockShape A 1-D array. Must have shape `[M]`, all values must\n * be >= 1.\n * @param crops A 2-D array. Must have shape `[M, 2]`, all values must be >= 0.\n * `crops[i] = [cropStart, cropEnd]` specifies the amount to crop from input\n * dimension `i + 1`, which corresponds to spatial dimension `i`. It is required\n * that `cropStart[i] + cropEnd[i] <= blockShape[i] * inputShape[i + 1]`\n *\n * This operation is equivalent to the following steps:\n *\n * 1. Reshape `x` to `reshaped` of shape: `[blockShape[0], ...,\n * blockShape[M-1], batch / prod(blockShape), x.shape[1], ...,\n * x.shape[N-1]]`\n *\n * 2. Permute dimensions of `reshaped` to produce `permuted` of shape `[batch /\n * prod(blockShape),x.shape[1], blockShape[0], ..., x.shape[M],\n * blockShape[M-1],x.shape[M+1], ..., x.shape[N-1]]`\n *\n * 3. Reshape `permuted` to produce `reshapedPermuted` of shape `[batch /\n * prod(blockShape),x.shape[1] * blockShape[0], ..., x.shape[M] *\n * blockShape[M-1],x.shape[M+1], ..., x.shape[N-1]]`\n *\n * 4. Crop the start and end of dimensions `[1, ..., M]` of `reshapedPermuted`\n * according to `crops` to produce the output of shape: `[batch /\n * prod(blockShape),x.shape[1] * blockShape[0] - crops[0,0] - crops[0,1],\n * ..., x.shape[M] * blockShape[M-1] - crops[M-1,0] -\n * crops[M-1,1],x.shape[M+1], ..., x.shape[N-1]]`\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction batchToSpaceND_(x, blockShape, crops) {\n const $x = convertToTensor(x, 'x', 'batchToSpaceND');\n const prod = blockShape.reduce((a, b) => a * b);\n util.assert($x.rank >= 1 + blockShape.length, () => `input rank is ${$x.rank} but should be > than blockShape.length ${blockShape.length}`);\n util.assert(crops.length === blockShape.length, () => `crops.length is ${crops.length} but should be equal to blockShape.length ${blockShape.length}`);\n util.assert($x.shape[0] % prod === 0, () => `input tensor batch is ${$x.shape[0]} but is not divisible by the product of ` +\n `the elements of blockShape ${blockShape.join(' * ')} === ${prod}`);\n const inputs = { x: $x };\n const attrs = { blockShape, crops };\n return ENGINE.runKernel(BatchToSpaceND, inputs, attrs);\n}\nexport const batchToSpaceND = /* @__PURE__ */ op({ batchToSpaceND_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfdG9fc3BhY2VfbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaF90b19zcGFjZV9uZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxjQUFjLEVBQTRDLE1BQU0saUJBQWlCLENBQUM7QUFJMUYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsU0FBUyxlQUFlLENBQ3BCLENBQWUsRUFBRSxVQUFvQixFQUFFLEtBQWlCO0lBQzFELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDckQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVoRCxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQ2hDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSwyQ0FDMUIsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFN0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQ2xDLEdBQUcsRUFBRSxDQUFDLG1CQUNGLEtBQUssQ0FBQyxNQUFNLDhDQUNaLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTdCLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUN4QixHQUFHLEVBQUUsQ0FBQyx5QkFDSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7UUFDM0QsOEJBQThCLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1RSxNQUFNLE1BQU0sR0FBeUIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQXdCLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBRXZELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsY0FBYyxFQUFFLE1BQW1DLEVBQ25ELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QmF0Y2hUb1NwYWNlTkQsIEJhdGNoVG9TcGFjZU5EQXR0cnMsIEJhdGNoVG9TcGFjZU5ESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFRoaXMgb3BlcmF0aW9uIHJlc2hhcGVzIHRoZSBcImJhdGNoXCIgZGltZW5zaW9uIDAgaW50byBgTSArIDFgIGRpbWVuc2lvbnMgb2ZcbiAqIHNoYXBlIGBibG9ja1NoYXBlICsgW2JhdGNoXWAsIGludGVybGVhdmVzIHRoZXNlIGJsb2NrcyBiYWNrIGludG8gdGhlIGdyaWRcbiAqIGRlZmluZWQgYnkgdGhlIHNwYXRpYWwgZGltZW5zaW9ucyBgWzEsIC4uLiwgTV1gLCB0byBvYnRhaW4gYSByZXN1bHQgd2l0aFxuICogdGhlIHNhbWUgcmFuayBhcyB0aGUgaW5wdXQuIFRoZSBzcGF0aWFsIGRpbWVuc2lvbnMgb2YgdGhpcyBpbnRlcm1lZGlhdGVcbiAqIHJlc3VsdCBhcmUgdGhlbiBvcHRpb25hbGx5IGNyb3BwZWQgYWNjb3JkaW5nIHRvIGBjcm9wc2AgdG8gcHJvZHVjZSB0aGVcbiAqIG91dHB1dC4gVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiBgdGYuc3BhY2VUb0JhdGNoTkRgLiBTZWUgYmVsb3cgZm9yIGEgcHJlY2lzZVxuICogZGVzY3JpcHRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3I0ZChbMSwgMiwgMywgNF0sIFs0LCAxLCAxLCAxXSk7XG4gKiBjb25zdCBibG9ja1NoYXBlID0gWzIsIDJdO1xuICogY29uc3QgY3JvcHMgPSBbWzAsIDBdLCBbMCwgMF1dO1xuICpcbiAqIHguYmF0Y2hUb1NwYWNlTkQoYmxvY2tTaGFwZSwgY3JvcHMpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBBIGB0Zi5UZW5zb3JgLiBOLUQgd2l0aCBgeC5zaGFwZWAgPSBgW2JhdGNoXSArIHNwYXRpYWxTaGFwZSArXG4gKiByZW1haW5pbmdTaGFwZWAsIHdoZXJlIHNwYXRpYWxTaGFwZSBoYXMgYE1gIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0gYmxvY2tTaGFwZSBBIDEtRCBhcnJheS4gTXVzdCBoYXZlIHNoYXBlIGBbTV1gLCBhbGwgdmFsdWVzIG11c3RcbiAqIGJlID49IDEuXG4gKiBAcGFyYW0gY3JvcHMgQSAyLUQgYXJyYXkuICBNdXN0IGhhdmUgc2hhcGUgYFtNLCAyXWAsIGFsbCB2YWx1ZXMgbXVzdCBiZSA+PSAwLlxuICogYGNyb3BzW2ldID0gW2Nyb3BTdGFydCwgY3JvcEVuZF1gIHNwZWNpZmllcyB0aGUgYW1vdW50IHRvIGNyb3AgZnJvbSBpbnB1dFxuICogZGltZW5zaW9uIGBpICsgMWAsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHNwYXRpYWwgZGltZW5zaW9uIGBpYC4gSXQgaXMgcmVxdWlyZWRcbiAqIHRoYXQgYGNyb3BTdGFydFtpXSArIGNyb3BFbmRbaV0gPD0gYmxvY2tTaGFwZVtpXSAqIGlucHV0U2hhcGVbaSArIDFdYFxuICpcbiAqIFRoaXMgb3BlcmF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAqXG4gKiAxLiBSZXNoYXBlIGB4YCB0byBgcmVzaGFwZWRgIG9mIHNoYXBlOiBgW2Jsb2NrU2hhcGVbMF0sIC4uLixcbiAqIGJsb2NrU2hhcGVbTS0xXSwgYmF0Y2ggLyBwcm9kKGJsb2NrU2hhcGUpLCB4LnNoYXBlWzFdLCAuLi4sXG4gKiB4LnNoYXBlW04tMV1dYFxuICpcbiAqIDIuIFBlcm11dGUgZGltZW5zaW9ucyBvZiBgcmVzaGFwZWRgIHRvIHByb2R1Y2UgYHBlcm11dGVkYCBvZiBzaGFwZSBgW2JhdGNoIC9cbiAqIHByb2QoYmxvY2tTaGFwZSkseC5zaGFwZVsxXSwgYmxvY2tTaGFwZVswXSwgLi4uLCB4LnNoYXBlW01dLFxuICogYmxvY2tTaGFwZVtNLTFdLHguc2hhcGVbTSsxXSwgLi4uLCB4LnNoYXBlW04tMV1dYFxuICpcbiAqIDMuIFJlc2hhcGUgYHBlcm11dGVkYCB0byBwcm9kdWNlIGByZXNoYXBlZFBlcm11dGVkYCBvZiBzaGFwZSBgW2JhdGNoIC9cbiAqIHByb2QoYmxvY2tTaGFwZSkseC5zaGFwZVsxXSAqIGJsb2NrU2hhcGVbMF0sIC4uLiwgeC5zaGFwZVtNXSAqXG4gKiBibG9ja1NoYXBlW00tMV0seC5zaGFwZVtNKzFdLCAuLi4sIHguc2hhcGVbTi0xXV1gXG4gKlxuICogNC4gQ3JvcCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBkaW1lbnNpb25zIGBbMSwgLi4uLCBNXWAgb2YgYHJlc2hhcGVkUGVybXV0ZWRgXG4gKiBhY2NvcmRpbmcgdG8gYGNyb3BzYCB0byBwcm9kdWNlIHRoZSBvdXRwdXQgb2Ygc2hhcGU6IGBbYmF0Y2ggL1xuICogcHJvZChibG9ja1NoYXBlKSx4LnNoYXBlWzFdICogYmxvY2tTaGFwZVswXSAtIGNyb3BzWzAsMF0gLSBjcm9wc1swLDFdLFxuICogLi4uLCB4LnNoYXBlW01dICogYmxvY2tTaGFwZVtNLTFdIC0gY3JvcHNbTS0xLDBdIC1cbiAqIGNyb3BzW00tMSwxXSx4LnNoYXBlW00rMV0sIC4uLiwgeC5zaGFwZVtOLTFdXWBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5mdW5jdGlvbiBiYXRjaFRvU3BhY2VORF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBibG9ja1NoYXBlOiBudW1iZXJbXSwgY3JvcHM6IG51bWJlcltdW10pOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYmF0Y2hUb1NwYWNlTkQnKTtcbiAgY29uc3QgcHJvZCA9IGJsb2NrU2hhcGUucmVkdWNlKChhLCBiKSA9PiBhICogYik7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID49IDEgKyBibG9ja1NoYXBlLmxlbmd0aCxcbiAgICAgICgpID0+IGBpbnB1dCByYW5rIGlzICR7JHgucmFua30gYnV0IHNob3VsZCBiZSA+IHRoYW4gYmxvY2tTaGFwZS5sZW5ndGggJHtcbiAgICAgICAgICBibG9ja1NoYXBlLmxlbmd0aH1gKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGNyb3BzLmxlbmd0aCA9PT0gYmxvY2tTaGFwZS5sZW5ndGgsXG4gICAgICAoKSA9PiBgY3JvcHMubGVuZ3RoIGlzICR7XG4gICAgICAgICAgY3JvcHMubGVuZ3RofSBidXQgc2hvdWxkIGJlIGVxdWFsIHRvIGJsb2NrU2hhcGUubGVuZ3RoICAke1xuICAgICAgICAgIGJsb2NrU2hhcGUubGVuZ3RofWApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHguc2hhcGVbMF0gJSBwcm9kID09PSAwLFxuICAgICAgKCkgPT4gYGlucHV0IHRlbnNvciBiYXRjaCBpcyAke1xuICAgICAgICAgICAgICAgICR4LnNoYXBlWzBdfSBidXQgaXMgbm90IGRpdmlzaWJsZSBieSB0aGUgcHJvZHVjdCBvZiBgICtcbiAgICAgICAgICBgdGhlIGVsZW1lbnRzIG9mIGJsb2NrU2hhcGUgJHtibG9ja1NoYXBlLmpvaW4oJyAqICcpfSA9PT0gJHtwcm9kfWApO1xuXG4gIGNvbnN0IGlucHV0czogQmF0Y2hUb1NwYWNlTkRJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogQmF0Y2hUb1NwYWNlTkRBdHRycyA9IHtibG9ja1NoYXBlLCBjcm9wc307XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBCYXRjaFRvU3BhY2VORCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBiYXRjaFRvU3BhY2VORCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YmF0Y2hUb1NwYWNlTkRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { FusedBatchNorm } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { xAs4D } from './batchnorm_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Batch normalization.\n *\n * As described in\n * [http://arxiv.org/abs/1502.03167](http://arxiv.org/abs/1502.03167).\n *\n * Mean, variance, scale, and offset can be of two shapes:\n * - The same shape as the input.\n * - In the common case, the depth dimension is the last dimension of x, so\n * the values would be a `tf.Tensor1D` of shape [depth].\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that parameters passed are of given rank\n * - `tf.batchNorm2d`\n * - `tf.batchNorm3d`\n * - `tf.batchNorm4d`\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction batchNorm_(x, mean, variance, offset, scale, varianceEpsilon) {\n if (varianceEpsilon == null) {\n varianceEpsilon = 0.001;\n }\n const $x = convertToTensor(x, 'x', 'batchNorm');\n const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n let $scale;\n if (scale != null) {\n $scale = convertToTensor(scale, 'scale', 'batchNorm');\n }\n let $offset;\n if (offset != null) {\n $offset = convertToTensor(offset, 'offset', 'batchNorm');\n }\n util.assert($mean.rank === $variance.rank, () => 'Batch normalization gradient requires mean and variance to have ' +\n 'equal ranks.');\n util.assert($offset == null || $mean.rank === $offset.rank, () => 'Batch normalization gradient requires mean and offset to have ' +\n 'equal ranks.');\n util.assert($scale == null || $mean.rank === $scale.rank, () => 'Batch normalization gradient requires mean and scale to have ' +\n 'equal ranks.');\n const x4D = xAs4D($x);\n const inputs = {\n x: x4D,\n scale: $scale,\n offset: $offset,\n mean: $mean,\n variance: $variance\n };\n const attrs = { varianceEpsilon };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(FusedBatchNorm, inputs, attrs);\n return reshape(res, $x.shape);\n}\nexport const batchNorm = /* @__PURE__ */ op({ batchNorm_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYmF0Y2hub3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGNBQWMsRUFBNEMsTUFBTSxpQkFBaUIsQ0FBQztBQUkxRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILFNBQVMsVUFBVSxDQUNmLENBQXVCLEVBQUUsSUFBbUMsRUFDNUQsUUFBdUMsRUFDdkMsTUFBc0MsRUFDdEMsS0FBcUMsRUFDckMsZUFBd0I7SUFDMUIsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO1FBQzNCLGVBQWUsR0FBRyxLQUFLLENBQUM7S0FDekI7SUFDRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxJQUFJLE1BQTBCLENBQUM7SUFDL0IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksT0FBMkIsQ0FBQztJQUNoQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDbEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQzdCLEdBQUcsRUFBRSxDQUFDLGtFQUFrRTtRQUNwRSxjQUFjLENBQUMsQ0FBQztJQUN4QixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxFQUM5QyxHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsY0FBYyxDQUFDLENBQUM7SUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksRUFDNUMsR0FBRyxFQUFFLENBQUMsK0RBQStEO1FBQ2pFLGNBQWMsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sR0FBRyxHQUFhLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLE1BQU0sR0FBeUI7UUFDbkMsQ0FBQyxFQUFFLEdBQUc7UUFDTixLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxPQUFPO1FBQ2YsSUFBSSxFQUFFLEtBQUs7UUFDWCxRQUFRLEVBQUUsU0FBUztLQUNwQixDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQXdCLEVBQUMsZUFBZSxFQUFDLENBQUM7SUFFckQsMERBQTBEO0lBQzFELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osY0FBYyxFQUFFLE1BQW1DLEVBQ25ELEtBQWdDLENBQWMsQ0FBQztJQUUvRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtGdXNlZEJhdGNoTm9ybSwgRnVzZWRCYXRjaE5vcm1BdHRycywgRnVzZWRCYXRjaE5vcm1JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRCwgVGVuc29yNER9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1JhbmssIFRlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7eEFzNER9IGZyb20gJy4vYmF0Y2hub3JtX3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG4vKipcbiAqIEJhdGNoIG5vcm1hbGl6YXRpb24uXG4gKlxuICogQXMgZGVzY3JpYmVkIGluXG4gKiBbaHR0cDovL2FyeGl2Lm9yZy9hYnMvMTUwMi4wMzE2N10oaHR0cDovL2FyeGl2Lm9yZy9hYnMvMTUwMi4wMzE2NykuXG4gKlxuICogTWVhbiwgdmFyaWFuY2UsIHNjYWxlLCBhbmQgb2Zmc2V0IGNhbiBiZSBvZiB0d28gc2hhcGVzOlxuICogICAtIFRoZSBzYW1lIHNoYXBlIGFzIHRoZSBpbnB1dC5cbiAqICAgLSBJbiB0aGUgY29tbW9uIGNhc2UsIHRoZSBkZXB0aCBkaW1lbnNpb24gaXMgdGhlIGxhc3QgZGltZW5zaW9uIG9mIHgsIHNvXG4gKiAgICAgdGhlIHZhbHVlcyB3b3VsZCBiZSBhIGB0Zi5UZW5zb3IxRGAgb2Ygc2hhcGUgW2RlcHRoXS5cbiAqXG4gKiBBbHNvIGF2YWlsYWJsZSBhcmUgc3RyaWN0ZXIgcmFuay1zcGVjaWZpYyBtZXRob2RzIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlXG4gKiBhcyB0aGlzIG1ldGhvZCB0aGF0IGFzc2VydCB0aGF0IHBhcmFtZXRlcnMgcGFzc2VkIGFyZSBvZiBnaXZlbiByYW5rXG4gKiAgIC0gYHRmLmJhdGNoTm9ybTJkYFxuICogICAtIGB0Zi5iYXRjaE5vcm0zZGBcbiAqICAgLSBgdGYuYmF0Y2hOb3JtNGRgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IFRlbnNvci5cbiAqIEBwYXJhbSBtZWFuIEEgbWVhbiBUZW5zb3IuXG4gKiBAcGFyYW0gdmFyaWFuY2UgQSB2YXJpYW5jZSBUZW5zb3IuXG4gKiBAcGFyYW0gb2Zmc2V0IEFuIG9mZnNldCBUZW5zb3IuXG4gKiBAcGFyYW0gc2NhbGUgQSBzY2FsZSBUZW5zb3IuXG4gKiBAcGFyYW0gdmFyaWFuY2VFcHNpbG9uIEEgc21hbGwgZmxvYXQgbnVtYmVyIHRvIGF2b2lkIGRpdmlkaW5nIGJ5IDAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTm9ybWFsaXphdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGJhdGNoTm9ybV88UiBleHRlbmRzIFJhbms+KFxuICAgIHg6IFRlbnNvcjxSPnxUZW5zb3JMaWtlLCBtZWFuOiBUZW5zb3I8Uj58VGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICB2YXJpYW5jZTogVGVuc29yPFI+fFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgb2Zmc2V0PzogVGVuc29yPFI+fFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgc2NhbGU/OiBUZW5zb3I8Uj58VGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICB2YXJpYW5jZUVwc2lsb24/OiBudW1iZXIpOiBUZW5zb3I8Uj4ge1xuICBpZiAodmFyaWFuY2VFcHNpbG9uID09IG51bGwpIHtcbiAgICB2YXJpYW5jZUVwc2lsb24gPSAwLjAwMTtcbiAgfVxuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdiYXRjaE5vcm0nKTtcbiAgY29uc3QgJG1lYW4gPSBjb252ZXJ0VG9UZW5zb3IobWVhbiwgJ21lYW4nLCAnYmF0Y2hOb3JtJyk7XG4gIGNvbnN0ICR2YXJpYW5jZSA9IGNvbnZlcnRUb1RlbnNvcih2YXJpYW5jZSwgJ3ZhcmlhbmNlJywgJ2JhdGNoTm9ybScpO1xuICBsZXQgJHNjYWxlOiBUZW5zb3I8Uj58VGVuc29yMUQ7XG4gIGlmIChzY2FsZSAhPSBudWxsKSB7XG4gICAgJHNjYWxlID0gY29udmVydFRvVGVuc29yKHNjYWxlLCAnc2NhbGUnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cbiAgbGV0ICRvZmZzZXQ6IFRlbnNvcjxSPnxUZW5zb3IxRDtcbiAgaWYgKG9mZnNldCAhPSBudWxsKSB7XG4gICAgJG9mZnNldCA9IGNvbnZlcnRUb1RlbnNvcihvZmZzZXQsICdvZmZzZXQnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cblxuICB1dGlsLmFzc2VydChcbiAgICAgICRtZWFuLnJhbmsgPT09ICR2YXJpYW5jZS5yYW5rLFxuICAgICAgKCkgPT4gJ0JhdGNoIG5vcm1hbGl6YXRpb24gZ3JhZGllbnQgcmVxdWlyZXMgbWVhbiBhbmQgdmFyaWFuY2UgdG8gaGF2ZSAnICtcbiAgICAgICAgICAnZXF1YWwgcmFua3MuJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJG9mZnNldCA9PSBudWxsIHx8ICRtZWFuLnJhbmsgPT09ICRvZmZzZXQucmFuayxcbiAgICAgICgpID0+ICdCYXRjaCBub3JtYWxpemF0aW9uIGdyYWRpZW50IHJlcXVpcmVzIG1lYW4gYW5kIG9mZnNldCB0byBoYXZlICcgK1xuICAgICAgICAgICdlcXVhbCByYW5rcy4nKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkc2NhbGUgPT0gbnVsbCB8fCAkbWVhbi5yYW5rID09PSAkc2NhbGUucmFuayxcbiAgICAgICgpID0+ICdCYXRjaCBub3JtYWxpemF0aW9uIGdyYWRpZW50IHJlcXVpcmVzIG1lYW4gYW5kIHNjYWxlIHRvIGhhdmUgJyArXG4gICAgICAgICAgJ2VxdWFsIHJhbmtzLicpO1xuXG4gIGNvbnN0IHg0RDogVGVuc29yNEQgPSB4QXM0RCgkeCk7XG5cbiAgY29uc3QgaW5wdXRzOiBGdXNlZEJhdGNoTm9ybUlucHV0cyA9IHtcbiAgICB4OiB4NEQsXG4gICAgc2NhbGU6ICRzY2FsZSxcbiAgICBvZmZzZXQ6ICRvZmZzZXQsXG4gICAgbWVhbjogJG1lYW4sXG4gICAgdmFyaWFuY2U6ICR2YXJpYW5jZVxuICB9O1xuXG4gIGNvbnN0IGF0dHJzOiBGdXNlZEJhdGNoTm9ybUF0dHJzID0ge3ZhcmlhbmNlRXBzaWxvbn07XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgRnVzZWRCYXRjaE5vcm0sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcjxSPjtcblxuICByZXR1cm4gcmVzaGFwZShyZXMsICR4LnNoYXBlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJhdGNoTm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YmF0Y2hOb3JtX30pO1xuIl19","import { reshape } from './reshape';\nexport function xAs4D(x) {\n let x4D;\n if (x.rank === 0 || x.rank === 1) {\n x4D = reshape(x, [1, 1, 1, x.size]);\n }\n else if (x.rank === 2) {\n x4D = reshape(x, [1, 1, x.shape[0], x.shape[1]]);\n }\n else if (x.rank === 3) {\n x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]);\n }\n else {\n x4D = x;\n }\n return x4D;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaG5vcm1fdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsS0FBSyxDQUFpQixDQUFZO0lBQ2hELElBQUksR0FBYSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDaEMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNyQztTQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDdkIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7U0FBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzRDtTQUFNO1FBQ0wsR0FBRyxHQUFHLENBQWEsQ0FBQztLQUNyQjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yLCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7UmFua30gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24geEFzNEQ8UiBleHRlbmRzIFJhbms+KHg6IFRlbnNvcjxSPikge1xuICBsZXQgeDREOiBUZW5zb3I0RDtcbiAgaWYgKHgucmFuayA9PT0gMCB8fCB4LnJhbmsgPT09IDEpIHtcbiAgICB4NEQgPSByZXNoYXBlKHgsIFsxLCAxLCAxLCB4LnNpemVdKTtcbiAgfSBlbHNlIGlmICh4LnJhbmsgPT09IDIpIHtcbiAgICB4NEQgPSByZXNoYXBlKHgsIFsxLCAxLCB4LnNoYXBlWzBdLCB4LnNoYXBlWzFdXSk7XG4gIH0gZWxzZSBpZiAoeC5yYW5rID09PSAzKSB7XG4gICAgeDREID0gcmVzaGFwZSh4LCBbMSwgeC5zaGFwZVswXSwgeC5zaGFwZVsxXSwgeC5zaGFwZVsyXV0pO1xuICB9IGVsc2Uge1xuICAgIHg0RCA9IHggYXMgVGVuc29yNEQ7XG4gIH1cblxuICByZXR1cm4geDREO1xufVxuIl19","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { batchNorm } from './batchnorm';\nimport { op } from './operation';\n/**\n * Batch normalization, strictly for 2D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm2d_(x, mean, variance, offset, scale, varianceEpsilon) {\n const $x = convertToTensor(x, 'x', 'batchNorm');\n const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n let $scale;\n if (scale != null) {\n $scale = convertToTensor(scale, 'scale', 'batchNorm');\n }\n let $offset;\n if (offset != null) {\n $offset = convertToTensor(offset, 'offset', 'batchNorm');\n }\n util.assert($x.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ` +\n `${$x.rank}.`);\n util.assert($mean.rank === 2 || $mean.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but ` +\n `got rank ${$mean.rank}.`);\n util.assert($variance.rank === 2 || $variance.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 ` +\n `but got rank ${$variance.rank}.`);\n if ($scale != null) {\n util.assert($scale.rank === 2 || $scale.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 ` +\n `but got rank ${$scale.rank}.`);\n }\n if ($offset != null) {\n util.assert($offset.rank === 2 || $offset.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 ` +\n `but got rank ${$offset.rank}.`);\n }\n return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\nexport const batchNorm2d = /* @__PURE__ */ op({ batchNorm2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtMmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaG5vcm0yZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxZQUFZLENBQ2pCLENBQXNCLEVBQUUsSUFBa0MsRUFDMUQsUUFBc0MsRUFDdEMsTUFBcUMsRUFBRSxLQUFvQyxFQUMzRSxlQUF3QjtJQUMxQixNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxJQUFJLE1BQXlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksT0FBMEIsQ0FBQztJQUMvQixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDbEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxzREFBc0Q7UUFDeEQsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNwQyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM1QyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUN0QyxHQUFHLEVBQUUsQ0FBQyx1REFBdUQ7WUFDekQsZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLHdEQUF3RDtZQUMxRCxnQkFBZ0IsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7S0FDMUM7SUFFRCxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2JhdGNoTm9ybX0gZnJvbSAnLi9iYXRjaG5vcm0nO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEJhdGNoIG5vcm1hbGl6YXRpb24sIHN0cmljdGx5IGZvciAyRC4gRm9yIHRoZSBtb3JlIHJlbGF4ZWQgdmVyc2lvbiwgc2VlXG4gKiBgdGYuYmF0Y2hOb3JtYC5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICogQHBhcmFtIG1lYW4gQSBtZWFuIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZSBBIHZhcmlhbmNlIFRlbnNvci5cbiAqIEBwYXJhbSBvZmZzZXQgQW4gb2Zmc2V0IFRlbnNvci5cbiAqIEBwYXJhbSBzY2FsZSBBIHNjYWxlIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZUVwc2lsb24gQSBzbWFsbCBmbG9hdCBudW1iZXIgdG8gYXZvaWQgZGl2aWRpbmcgYnkgMC5cbiAqL1xuZnVuY3Rpb24gYmF0Y2hOb3JtMmRfKFxuICAgIHg6IFRlbnNvcjJEfFRlbnNvckxpa2UsIG1lYW46IFRlbnNvcjJEfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgdmFyaWFuY2U6IFRlbnNvcjJEfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgb2Zmc2V0PzogVGVuc29yMkR8VGVuc29yMUR8VGVuc29yTGlrZSwgc2NhbGU/OiBUZW5zb3IyRHxUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIHZhcmlhbmNlRXBzaWxvbj86IG51bWJlcik6IFRlbnNvcjJEIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYmF0Y2hOb3JtJyk7XG4gIGNvbnN0ICRtZWFuID0gY29udmVydFRvVGVuc29yKG1lYW4sICdtZWFuJywgJ2JhdGNoTm9ybScpO1xuICBjb25zdCAkdmFyaWFuY2UgPSBjb252ZXJ0VG9UZW5zb3IodmFyaWFuY2UsICd2YXJpYW5jZScsICdiYXRjaE5vcm0nKTtcbiAgbGV0ICRzY2FsZTogVGVuc29yMkR8VGVuc29yMUQ7XG4gIGlmIChzY2FsZSAhPSBudWxsKSB7XG4gICAgJHNjYWxlID0gY29udmVydFRvVGVuc29yKHNjYWxlLCAnc2NhbGUnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cbiAgbGV0ICRvZmZzZXQ6IFRlbnNvcjJEfFRlbnNvcjFEO1xuICBpZiAob2Zmc2V0ICE9IG51bGwpIHtcbiAgICAkb2Zmc2V0ID0gY29udmVydFRvVGVuc29yKG9mZnNldCwgJ29mZnNldCcsICdiYXRjaE5vcm0nKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDIsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtMkQ6IHggbXVzdCBiZSByYW5rIDIgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyR4LnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRtZWFuLnJhbmsgPT09IDIgfHwgJG1lYW4ucmFuayA9PT0gMSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBiYXRjaE5vcm0yRDogbWVhbiBtdXN0IGJlIHJhbmsgMiBvciByYW5rIDEgYnV0IGAgK1xuICAgICAgICAgIGBnb3QgcmFuayAkeyRtZWFuLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR2YXJpYW5jZS5yYW5rID09PSAyIHx8ICR2YXJpYW5jZS5yYW5rID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGJhdGNoTm9ybTJEOiB2YXJpYW5jZSBtdXN0IGJlIHJhbmsgMiBvciByYW5rIDEgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgcmFuayAkeyR2YXJpYW5jZS5yYW5rfS5gKTtcbiAgaWYgKCRzY2FsZSAhPSBudWxsKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICRzY2FsZS5yYW5rID09PSAyIHx8ICRzY2FsZS5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtMkQ6IHNjYWxlIG11c3QgYmUgcmFuayAyIG9yIHJhbmsgMSBgICtcbiAgICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskc2NhbGUucmFua30uYCk7XG4gIH1cbiAgaWYgKCRvZmZzZXQgIT0gbnVsbCkge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAkb2Zmc2V0LnJhbmsgPT09IDIgfHwgJG9mZnNldC5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtMkQ6IG9mZnNldCBtdXN0IGJlIHJhbmsgMiBvciByYW5rIDEgYCArXG4gICAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JG9mZnNldC5yYW5rfS5gKTtcbiAgfVxuXG4gIHJldHVybiBiYXRjaE5vcm0oJHgsICRtZWFuLCAkdmFyaWFuY2UsICRvZmZzZXQsICRzY2FsZSwgdmFyaWFuY2VFcHNpbG9uKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJhdGNoTm9ybTJkID0gLyogQF9fUFVSRV9fICovIG9wKHtiYXRjaE5vcm0yZF99KTtcbiJdfQ==","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { batchNorm } from './batchnorm';\nimport { op } from './operation';\n/**\n * Batch normalization, strictly for 3D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm3d_(x, mean, variance, offset, scale, varianceEpsilon) {\n const $x = convertToTensor(x, 'x', 'batchNorm');\n const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n let $scale;\n if (scale != null) {\n $scale = convertToTensor(scale, 'scale', 'batchNorm');\n }\n let $offset;\n if (offset != null) {\n $offset = convertToTensor(offset, 'offset', 'batchNorm');\n }\n util.assert($x.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ` +\n `${$x.rank}.`);\n util.assert($mean.rank === 3 || $mean.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but ` +\n `got rank ${$mean.rank}.`);\n util.assert($variance.rank === 3 || $variance.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 ` +\n `but got rank ${$variance.rank}.`);\n if ($scale != null) {\n util.assert($scale.rank === 3 || $scale.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 ` +\n `but got rank ${$scale.rank}.`);\n }\n if ($offset != null) {\n util.assert($offset.rank === 3 || $offset.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 ` +\n `but got rank ${$offset.rank}.`);\n }\n return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\nexport const batchNorm3d = /* @__PURE__ */ op({ batchNorm3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaG5vcm0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxZQUFZLENBQ2pCLENBQXNCLEVBQUUsSUFBa0MsRUFDMUQsUUFBc0MsRUFDdEMsTUFBcUMsRUFBRSxLQUFvQyxFQUMzRSxlQUF3QjtJQUMxQixNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxJQUFJLE1BQXlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksT0FBMEIsQ0FBQztJQUMvQixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDbEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxzREFBc0Q7UUFDeEQsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNwQyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM1QyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUN0QyxHQUFHLEVBQUUsQ0FBQyx1REFBdUQ7WUFDekQsZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLHdEQUF3RDtZQUMxRCxnQkFBZ0IsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7S0FDMUM7SUFFRCxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IzRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2JhdGNoTm9ybX0gZnJvbSAnLi9iYXRjaG5vcm0nO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEJhdGNoIG5vcm1hbGl6YXRpb24sIHN0cmljdGx5IGZvciAzRC4gRm9yIHRoZSBtb3JlIHJlbGF4ZWQgdmVyc2lvbiwgc2VlXG4gKiBgdGYuYmF0Y2hOb3JtYC5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICogQHBhcmFtIG1lYW4gQSBtZWFuIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZSBBIHZhcmlhbmNlIFRlbnNvci5cbiAqIEBwYXJhbSBvZmZzZXQgQW4gb2Zmc2V0IFRlbnNvci5cbiAqIEBwYXJhbSBzY2FsZSBBIHNjYWxlIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZUVwc2lsb24gQSBzbWFsbCBmbG9hdCBudW1iZXIgdG8gYXZvaWQgZGl2aWRpbmcgYnkgMC5cbiAqL1xuZnVuY3Rpb24gYmF0Y2hOb3JtM2RfKFxuICAgIHg6IFRlbnNvcjNEfFRlbnNvckxpa2UsIG1lYW46IFRlbnNvcjNEfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgdmFyaWFuY2U6IFRlbnNvcjNEfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgb2Zmc2V0PzogVGVuc29yM0R8VGVuc29yMUR8VGVuc29yTGlrZSwgc2NhbGU/OiBUZW5zb3IzRHxUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIHZhcmlhbmNlRXBzaWxvbj86IG51bWJlcik6IFRlbnNvcjNEIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYmF0Y2hOb3JtJyk7XG4gIGNvbnN0ICRtZWFuID0gY29udmVydFRvVGVuc29yKG1lYW4sICdtZWFuJywgJ2JhdGNoTm9ybScpO1xuICBjb25zdCAkdmFyaWFuY2UgPSBjb252ZXJ0VG9UZW5zb3IodmFyaWFuY2UsICd2YXJpYW5jZScsICdiYXRjaE5vcm0nKTtcbiAgbGV0ICRzY2FsZTogVGVuc29yM0R8VGVuc29yMUQ7XG4gIGlmIChzY2FsZSAhPSBudWxsKSB7XG4gICAgJHNjYWxlID0gY29udmVydFRvVGVuc29yKHNjYWxlLCAnc2NhbGUnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cbiAgbGV0ICRvZmZzZXQ6IFRlbnNvcjNEfFRlbnNvcjFEO1xuICBpZiAob2Zmc2V0ICE9IG51bGwpIHtcbiAgICAkb2Zmc2V0ID0gY29udmVydFRvVGVuc29yKG9mZnNldCwgJ29mZnNldCcsICdiYXRjaE5vcm0nKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDMsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtM0Q6IHggbXVzdCBiZSByYW5rIDMgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyR4LnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRtZWFuLnJhbmsgPT09IDMgfHwgJG1lYW4ucmFuayA9PT0gMSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBiYXRjaE5vcm0zRDogbWVhbiBtdXN0IGJlIHJhbmsgMyBvciByYW5rIDEgYnV0IGAgK1xuICAgICAgICAgIGBnb3QgcmFuayAkeyRtZWFuLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR2YXJpYW5jZS5yYW5rID09PSAzIHx8ICR2YXJpYW5jZS5yYW5rID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGJhdGNoTm9ybTNEOiB2YXJpYW5jZSBtdXN0IGJlIHJhbmsgMyBvciByYW5rIDEgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgcmFuayAkeyR2YXJpYW5jZS5yYW5rfS5gKTtcbiAgaWYgKCRzY2FsZSAhPSBudWxsKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICRzY2FsZS5yYW5rID09PSAzIHx8ICRzY2FsZS5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtM0Q6IHNjYWxlIG11c3QgYmUgcmFuayAzIG9yIHJhbmsgMSBgICtcbiAgICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskc2NhbGUucmFua30uYCk7XG4gIH1cbiAgaWYgKCRvZmZzZXQgIT0gbnVsbCkge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAkb2Zmc2V0LnJhbmsgPT09IDMgfHwgJG9mZnNldC5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtM0Q6IG9mZnNldCBtdXN0IGJlIHJhbmsgMyBvciByYW5rIDEgYCArXG4gICAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JG9mZnNldC5yYW5rfS5gKTtcbiAgfVxuXG4gIHJldHVybiBiYXRjaE5vcm0oJHgsICRtZWFuLCAkdmFyaWFuY2UsICRvZmZzZXQsICRzY2FsZSwgdmFyaWFuY2VFcHNpbG9uKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJhdGNoTm9ybTNkID0gLyogQF9fUFVSRV9fICovIG9wKHtiYXRjaE5vcm0zZF99KTtcbiJdfQ==","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { batchNorm } from './batchnorm';\nimport { op } from './operation';\n/**\n * Batch normalization, strictly for 4D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm4d_(x, mean, variance, offset, scale, varianceEpsilon) {\n const $x = convertToTensor(x, 'x', 'batchNorm');\n const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n let $scale;\n if (scale != null) {\n $scale = convertToTensor(scale, 'scale', 'batchNorm');\n }\n let $offset;\n if (offset != null) {\n $offset = convertToTensor(offset, 'offset', 'batchNorm');\n }\n util.assert($x.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ` +\n `${$x.rank}.`);\n util.assert($mean.rank === 4 || $mean.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but ` +\n `got rank ${$mean.rank}.`);\n util.assert($variance.rank === 4 || $variance.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 ` +\n `but got rank ${$variance.rank}.`);\n if ($scale != null) {\n util.assert($scale.rank === 4 || $scale.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 ` +\n `but got rank ${$scale.rank}.`);\n }\n if ($offset != null) {\n util.assert($offset.rank === 4 || $offset.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 ` +\n `but got rank ${$offset.rank}.`);\n }\n return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\nexport const batchNorm4d = /* @__PURE__ */ op({ batchNorm4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtNGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaG5vcm00ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxZQUFZLENBQ2pCLENBQXNCLEVBQUUsSUFBa0MsRUFDMUQsUUFBc0MsRUFDdEMsTUFBcUMsRUFBRSxLQUFvQyxFQUMzRSxlQUF3QjtJQUMxQixNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxJQUFJLE1BQXlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksT0FBMEIsQ0FBQztJQUMvQixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDbEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxzREFBc0Q7UUFDeEQsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNwQyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM1QyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUN0QyxHQUFHLEVBQUUsQ0FBQyx1REFBdUQ7WUFDekQsZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLHdEQUF3RDtZQUMxRCxnQkFBZ0IsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2JhdGNoTm9ybX0gZnJvbSAnLi9iYXRjaG5vcm0nO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEJhdGNoIG5vcm1hbGl6YXRpb24sIHN0cmljdGx5IGZvciA0RC4gRm9yIHRoZSBtb3JlIHJlbGF4ZWQgdmVyc2lvbiwgc2VlXG4gKiBgdGYuYmF0Y2hOb3JtYC5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICogQHBhcmFtIG1lYW4gQSBtZWFuIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZSBBIHZhcmlhbmNlIFRlbnNvci5cbiAqIEBwYXJhbSBvZmZzZXQgQW4gb2Zmc2V0IFRlbnNvci5cbiAqIEBwYXJhbSBzY2FsZSBBIHNjYWxlIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZUVwc2lsb24gQSBzbWFsbCBmbG9hdCBudW1iZXIgdG8gYXZvaWQgZGl2aWRpbmcgYnkgMC5cbiAqL1xuZnVuY3Rpb24gYmF0Y2hOb3JtNGRfKFxuICAgIHg6IFRlbnNvcjREfFRlbnNvckxpa2UsIG1lYW46IFRlbnNvcjREfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgdmFyaWFuY2U6IFRlbnNvcjREfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgb2Zmc2V0PzogVGVuc29yNER8VGVuc29yMUR8VGVuc29yTGlrZSwgc2NhbGU/OiBUZW5zb3I0RHxUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIHZhcmlhbmNlRXBzaWxvbj86IG51bWJlcik6IFRlbnNvcjREIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYmF0Y2hOb3JtJyk7XG4gIGNvbnN0ICRtZWFuID0gY29udmVydFRvVGVuc29yKG1lYW4sICdtZWFuJywgJ2JhdGNoTm9ybScpO1xuICBjb25zdCAkdmFyaWFuY2UgPSBjb252ZXJ0VG9UZW5zb3IodmFyaWFuY2UsICd2YXJpYW5jZScsICdiYXRjaE5vcm0nKTtcbiAgbGV0ICRzY2FsZTogVGVuc29yNER8VGVuc29yMUQ7XG4gIGlmIChzY2FsZSAhPSBudWxsKSB7XG4gICAgJHNjYWxlID0gY29udmVydFRvVGVuc29yKHNjYWxlLCAnc2NhbGUnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cbiAgbGV0ICRvZmZzZXQ6IFRlbnNvcjREfFRlbnNvcjFEO1xuICBpZiAob2Zmc2V0ICE9IG51bGwpIHtcbiAgICAkb2Zmc2V0ID0gY29udmVydFRvVGVuc29yKG9mZnNldCwgJ29mZnNldCcsICdiYXRjaE5vcm0nKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtNEQ6IHggbXVzdCBiZSByYW5rIDQgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyR4LnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRtZWFuLnJhbmsgPT09IDQgfHwgJG1lYW4ucmFuayA9PT0gMSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBiYXRjaE5vcm00RDogbWVhbiBtdXN0IGJlIHJhbmsgNCBvciByYW5rIDEgYnV0IGAgK1xuICAgICAgICAgIGBnb3QgcmFuayAkeyRtZWFuLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR2YXJpYW5jZS5yYW5rID09PSA0IHx8ICR2YXJpYW5jZS5yYW5rID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGJhdGNoTm9ybTREOiB2YXJpYW5jZSBtdXN0IGJlIHJhbmsgNCBvciByYW5rIDEgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgcmFuayAkeyR2YXJpYW5jZS5yYW5rfS5gKTtcbiAgaWYgKCRzY2FsZSAhPSBudWxsKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICRzY2FsZS5yYW5rID09PSA0IHx8ICRzY2FsZS5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtNEQ6IHNjYWxlIG11c3QgYmUgcmFuayA0IG9yIHJhbmsgMSBgICtcbiAgICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskc2NhbGUucmFua30uYCk7XG4gIH1cbiAgaWYgKCRvZmZzZXQgIT0gbnVsbCkge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAkb2Zmc2V0LnJhbmsgPT09IDQgfHwgJG9mZnNldC5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtNEQ6IG9mZnNldCBtdXN0IGJlIHJhbmsgNCBvciByYW5rIDEgYCArXG4gICAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JG9mZnNldC5yYW5rfS5gKTtcbiAgfVxuICByZXR1cm4gYmF0Y2hOb3JtKCR4LCAkbWVhbiwgJHZhcmlhbmNlLCAkb2Zmc2V0LCAkc2NhbGUsIHZhcmlhbmNlRXBzaWxvbik7XG59XG5cbmV4cG9ydCBjb25zdCBiYXRjaE5vcm00ZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YmF0Y2hOb3JtNGRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Bincount } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Outputs a vector with length `size` and the same dtype as `weights`.\n *\n * If `weights` are empty, then index `i` stores the number of times the value\n * `i` is counted in `x`. If `weights` are non-empty, then index `i` stores the\n * sum of the value in `weights` at each index where the corresponding value in\n * `x` is `i`.\n *\n * Values in `x` outside of the range [0, size) are ignored.\n *\n * @param x The input int tensor, rank 1.\n * @param weights The weights tensor, must have the same shape as x, or a\n * length-0 Tensor, in which case it acts as all weights equal to 1.\n * @param size Non-negative integer.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction bincount_(x, weights, size) {\n const $x = convertToTensor(x, 'x', 'bincount');\n const $weights = convertToTensor(weights, 'weights', 'bincount');\n util.assert($x.dtype === 'int32', () => `Error in bincount: input ` +\n `dtype must be int32, but got ${$x.dtype}`);\n util.assert(size >= 0, () => `size must be non-negative, but got ${size}.`);\n util.assert($weights.size === $x.size || $weights.size === 0, () => `Error in bincount: weights must have the same size as input or` +\n `0-length, but got input shape: ${$x.shape}, weights shape: ` +\n `${$weights.shape}.`);\n const inputs = { x: $x, weights: $weights };\n const attrs = { size };\n return ENGINE.runKernel(Bincount, inputs, attrs);\n}\nexport const bincount = /* @__PURE__ */ op({ bincount_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iaW5jb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWdDLE1BQU0saUJBQWlCLENBQUM7QUFJeEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFTLFNBQVMsQ0FDZCxDQUFlLEVBQUUsT0FBcUIsRUFBRSxJQUFZO0lBQ3RELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQ3BCLEdBQUcsRUFBRSxDQUFDLDJCQUEyQjtRQUM3QixnQ0FBZ0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNDQUFzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxNQUFNLENBQ1AsUUFBUSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNoRCxHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsa0NBQWtDLEVBQUUsQ0FBQyxLQUFLLG1CQUFtQjtRQUM3RCxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRTlCLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFrQixFQUFDLElBQUksRUFBQyxDQUFDO0lBRXBDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsUUFBUSxFQUFFLE1BQW1DLEVBQzdDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QmluY291bnQsIEJpbmNvdW50QXR0cnMsIEJpbmNvdW50SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjFEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogT3V0cHV0cyBhIHZlY3RvciB3aXRoIGxlbmd0aCBgc2l6ZWAgYW5kIHRoZSBzYW1lIGR0eXBlIGFzIGB3ZWlnaHRzYC5cbiAqXG4gKiBJZiBgd2VpZ2h0c2AgYXJlIGVtcHR5LCB0aGVuIGluZGV4IGBpYCBzdG9yZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgdmFsdWVcbiAqIGBpYCBpcyBjb3VudGVkIGluIGB4YC4gSWYgYHdlaWdodHNgIGFyZSBub24tZW1wdHksIHRoZW4gaW5kZXggYGlgIHN0b3JlcyB0aGVcbiAqIHN1bSBvZiB0aGUgdmFsdWUgaW4gYHdlaWdodHNgIGF0IGVhY2ggaW5kZXggd2hlcmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW5cbiAqIGB4YCBpcyBgaWAuXG4gKlxuICogVmFsdWVzIGluIGB4YCBvdXRzaWRlIG9mIHRoZSByYW5nZSBbMCwgc2l6ZSkgYXJlIGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IGludCB0ZW5zb3IsIHJhbmsgMS5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRoZSB3ZWlnaHRzIHRlbnNvciwgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFzIHgsIG9yIGFcbiAqICAgICBsZW5ndGgtMCBUZW5zb3IsIGluIHdoaWNoIGNhc2UgaXQgYWN0cyBhcyBhbGwgd2VpZ2h0cyBlcXVhbCB0byAxLlxuICogQHBhcmFtIHNpemUgTm9uLW5lZ2F0aXZlIGludGVnZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gYmluY291bnRfPFQgZXh0ZW5kcyBUZW5zb3IxRD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCB3ZWlnaHRzOiBUfFRlbnNvckxpa2UsIHNpemU6IG51bWJlcik6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdiaW5jb3VudCcpO1xuICBjb25zdCAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdiaW5jb3VudCcpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHguZHR5cGUgPT09ICdpbnQzMicsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmluY291bnQ6IGlucHV0IGAgK1xuICAgICAgICAgIGBkdHlwZSBtdXN0IGJlIGludDMyLCBidXQgZ290ICR7JHguZHR5cGV9YCk7XG4gIHV0aWwuYXNzZXJ0KHNpemUgPj0gMCwgKCkgPT4gYHNpemUgbXVzdCBiZSBub24tbmVnYXRpdmUsIGJ1dCBnb3QgJHtzaXplfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkd2VpZ2h0cy5zaXplID09PSAkeC5zaXplIHx8ICR3ZWlnaHRzLnNpemUgPT09IDAsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmluY291bnQ6IHdlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUgYXMgaW5wdXQgb3JgICtcbiAgICAgICAgICBgMC1sZW5ndGgsIGJ1dCBnb3QgaW5wdXQgc2hhcGU6ICR7JHguc2hhcGV9LCB3ZWlnaHRzIHNoYXBlOiBgICtcbiAgICAgICAgICBgJHskd2VpZ2h0cy5zaGFwZX0uYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBCaW5jb3VudElucHV0cyA9IHt4OiAkeCwgd2VpZ2h0czogJHdlaWdodHN9O1xuICBjb25zdCBhdHRyczogQmluY291bnRBdHRycyA9IHtzaXplfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEJpbmNvdW50LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJpbmNvdW50ID0gLyogQF9fUFVSRV9fICovIG9wKHtiaW5jb3VudF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BitwiseAnd } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { arraysEqual } from '../util_base';\nimport { op } from './operation';\n/**\n * Bitwise `AND` operation for input tensors.\n *\n * Given two input tensors, returns a new tensor\n * with the `AND` calculated values.\n *\n * The method supports int32 values\n *\n *\n * ```js\n * const x = tf.tensor1d([0, 5, 3, 14], 'int32');\n * const y = tf.tensor1d([5, 0, 7, 11], 'int32');\n * tf.bitwiseAnd(x, y).print();\n * ```\n *\n * @param x The input tensor to be calculated.\n * @param y The input tensor to be calculated.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction bitwiseAnd_(x, y) {\n const $x = convertToTensor(x, 'x', 'bitwiseAnd');\n const $y = convertToTensor(y, 'y', 'bitwiseAnd');\n if (!arraysEqual($x.shape, $y.shape)) {\n throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${$x.shape}, y: ${$y.shape}`);\n }\n if ($x.dtype !== 'int32' || $y.dtype !== 'int32') {\n throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${$x.dtype} and type of y: ${$y.dtype}`);\n }\n const inputs = { a: $x, b: $y };\n return ENGINE.runKernel(BitwiseAnd, inputs);\n}\nexport const bitwiseAnd = /* @__PURE__ */ op({ bitwiseAnd_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0d2lzZV9hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iaXR3aXNlX2FuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFHN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFekMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsV0FBVyxDQUFpQixDQUFTLEVBQUUsQ0FBUztJQUN2RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVqRCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQ1osRUFBRSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNqQztJQUNELElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FDWCx3RUFDSSxFQUFFLENBQUMsS0FBSyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDaEQ7SUFFRCxNQUFNLE1BQU0sR0FBcUIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNoRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Qml0d2lzZUFuZCwgQml0d2lzZUFuZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2FycmF5c0VxdWFsfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQml0d2lzZSBgQU5EYCBvcGVyYXRpb24gZm9yIGlucHV0IHRlbnNvcnMuXG4gKlxuICogR2l2ZW4gdHdvIGlucHV0IHRlbnNvcnMsIHJldHVybnMgYSBuZXcgdGVuc29yXG4gKiB3aXRoIHRoZSBgQU5EYCBjYWxjdWxhdGVkIHZhbHVlcy5cbiAqXG4gKiBUaGUgbWV0aG9kIHN1cHBvcnRzIGludDMyIHZhbHVlc1xuICpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCA1LCAzLCAxNF0sICdpbnQzMicpO1xuICogY29uc3QgeSA9IHRmLnRlbnNvcjFkKFs1LCAwLCA3LCAxMV0sICdpbnQzMicpO1xuICogdGYuYml0d2lzZUFuZCh4LCB5KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciB0byBiZSBjYWxjdWxhdGVkLlxuICogQHBhcmFtIHkgVGhlIGlucHV0IHRlbnNvciB0byBiZSBjYWxjdWxhdGVkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0xvZ2ljYWwnfVxuICovXG5mdW5jdGlvbiBiaXR3aXNlQW5kXzxSIGV4dGVuZHMgUmFuaz4oeDogVGVuc29yLCB5OiBUZW5zb3IpOiBUZW5zb3I8Uj4ge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdiaXR3aXNlQW5kJyk7XG4gIGNvbnN0ICR5ID0gY29udmVydFRvVGVuc29yKHksICd5JywgJ2JpdHdpc2VBbmQnKTtcblxuICBpZiAoIWFycmF5c0VxdWFsKCR4LnNoYXBlLCAkeS5zaGFwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJpdHdpc2VBbmQ6IFRlbnNvcnMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlLiB4OiAke1xuICAgICAgICAkeC5zaGFwZX0sIHk6ICR7JHkuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKCR4LmR0eXBlICE9PSAnaW50MzInIHx8ICR5LmR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQml0d2lzZUFuZDogT25seSBzdXBwb3J0cyAnaW50MzInIHZhbHVlcyBpbiB0ZW5zb3IsIGZvdW5kIHR5cGUgb2YgeDogJHtcbiAgICAgICAgICAgICR4LmR0eXBlfSBhbmQgdHlwZSBvZiB5OiAkeyR5LmR0eXBlfWApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBCaXR3aXNlQW5kSW5wdXRzID0ge2E6ICR4LCBiOiAkeX07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEJpdHdpc2VBbmQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBiaXR3aXNlQW5kID0gLyogQF9fUFVSRV9fICovIG9wKHtiaXR3aXNlQW5kX30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BroadcastArgs } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Return the shape of s0 op s1 with broadcast.\n *\n * compute r0, the broadcasted shape as a tensor.\n * s0, s1 and r0 are all integer vectors.\n *\n * This function returns the shape of the result of an operation between\n * two tensors of size s0 and s1 performed with broadcast.\n *\n * @param s0 A tensor representing a shape\n * @param s1 A tensor representing a shape\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction broadcastArgs_(s0, s1) {\n const shape1Input = convertToTensor(s0, 's0', 'broadcastArgs', 'int32');\n const shape2Input = convertToTensor(s1, 's1', 'broadcastArgs', 'int32');\n if (shape1Input.rank !== 1) {\n throw new Error('broadcastArgs(): first input must be a vector (rank=1). ' +\n `Has rank ${shape1Input.rank}`);\n }\n if (shape2Input.rank !== 1) {\n throw new Error('broadcastArgs(): second input must be a vector (rank=1). ' +\n `Has rank ${shape2Input.rank}`);\n }\n const inputs = { s0: shape1Input, s1: shape2Input };\n return ENGINE.runKernel(BroadcastArgs, inputs);\n}\nexport const broadcastArgs = /* @__PURE__ */ op({ broadcastArgs_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0X2FyZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9icm9hZGNhc3RfYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUJBQWlCLENBQUM7QUFFckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsY0FBYyxDQUNyQixFQUF1QixFQUFFLEVBQXVCO0lBQ2hELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFeEUsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUNiLDBEQUEwRDtZQUMxRCxZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ25DO0lBRUQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRDtZQUMzRCxZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ25DO0lBRUQsTUFBTSxNQUFNLEdBQXdCLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDekUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHsgTmFtZWRUZW5zb3JNYXAgfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHsgRU5HSU5FIH0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7IEJyb2FkY2FzdEFyZ3MsIEJyb2FkY2FzdEFyZ3NJbnB1dHMgfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHsgVGVuc29yIH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7IGNvbnZlcnRUb1RlbnNvciB9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQgeyBSYW5rLCBUZW5zb3JMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBvcCB9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNoYXBlIG9mIHMwIG9wIHMxIHdpdGggYnJvYWRjYXN0LlxuICpcbiAqIGNvbXB1dGUgcjAsIHRoZSBicm9hZGNhc3RlZCBzaGFwZSBhcyBhIHRlbnNvci5cbiAqIHMwLCBzMSBhbmQgcjAgYXJlIGFsbCBpbnRlZ2VyIHZlY3RvcnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0IG9mIGFuIG9wZXJhdGlvbiBiZXR3ZWVuXG4gKiB0d28gdGVuc29ycyBvZiBzaXplIHMwIGFuZCBzMSBwZXJmb3JtZWQgd2l0aCBicm9hZGNhc3QuXG4gKlxuICogQHBhcmFtIHMwIEEgdGVuc29yIHJlcHJlc2VudGluZyBhIHNoYXBlXG4gKiBAcGFyYW0gczEgQSB0ZW5zb3IgcmVwcmVzZW50aW5nIGEgc2hhcGVcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5mdW5jdGlvbiBicm9hZGNhc3RBcmdzXzxSIGV4dGVuZHMgUmFuaz4oXG4gIHMwOiBUZW5zb3IgfCBUZW5zb3JMaWtlLCBzMTogVGVuc29yIHwgVGVuc29yTGlrZSk6IFRlbnNvcjxSPiB7XG4gIGNvbnN0IHNoYXBlMUlucHV0ID0gY29udmVydFRvVGVuc29yKHMwLCAnczAnLCAnYnJvYWRjYXN0QXJncycsICdpbnQzMicpO1xuICBjb25zdCBzaGFwZTJJbnB1dCA9IGNvbnZlcnRUb1RlbnNvcihzMSwgJ3MxJywgJ2Jyb2FkY2FzdEFyZ3MnLCAnaW50MzInKTtcblxuICBpZiAoc2hhcGUxSW5wdXQucmFuayAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdicm9hZGNhc3RBcmdzKCk6IGZpcnN0IGlucHV0IG11c3QgYmUgYSB2ZWN0b3IgKHJhbms9MSkuICcgK1xuICAgICAgYEhhcyByYW5rICR7c2hhcGUxSW5wdXQucmFua31gKTtcbiAgfVxuXG4gIGlmIChzaGFwZTJJbnB1dC5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2Jyb2FkY2FzdEFyZ3MoKTogc2Vjb25kIGlucHV0IG11c3QgYmUgYSB2ZWN0b3IgKHJhbms9MSkuICcgK1xuICAgICAgYEhhcyByYW5rICR7c2hhcGUySW5wdXQucmFua31gKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogQnJvYWRjYXN0QXJnc0lucHV0cyA9IHsgczA6IHNoYXBlMUlucHV0LCBzMTogc2hhcGUySW5wdXQgfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQnJvYWRjYXN0QXJncywgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgYnJvYWRjYXN0QXJncyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7IGJyb2FkY2FzdEFyZ3NfIH0pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Tile } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { clone } from './clone';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Broadcast an array to a compatible shape NumPy-style.\n *\n * The tensor's shape is compared to the broadcast shape from end to beginning.\n * Ones are prepended to the tensor's shape until it has the same length as\n * the broadcast shape. If input.shape[i]==shape[i], the (i+1)-th axis is\n * already broadcast-compatible. If input.shape[i]==1 and shape[i]==N, then\n * the input tensor is tiled N times along that axis (using tf.tile).\n *\n * @param input The tensor that is to be broadcasted.\n * @param shape The input is to be broadcast to this shape.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction broadcastTo_(x, shape) {\n let input = convertToTensor(x, 'broadcastTo', 'x');\n const xShape = input.shape;\n assertNonNegativeIntegerDimensions(shape);\n if (shape.length < input.rank) {\n throw new Error(`broadcastTo(): shape.length=${shape.length} < input.rank=${input.rank}.`);\n }\n if (shape.length > input.rank) {\n const newShape = input.shape.slice();\n while (newShape.length < shape.length) {\n newShape.unshift(1);\n }\n input = reshape(input, newShape);\n }\n const inputShape = input.shape;\n const reps = Array.from(shape);\n for (let i = shape.length - 1; i >= 0; i--) {\n if (inputShape[i] === shape[i]) {\n reps[i] = 1;\n }\n else if (input.shape[i] !== 1) {\n throw new Error(`broadcastTo(): [${xShape}] cannot be broadcast to [${shape}].`);\n }\n }\n const axes = reps.map((n, i) => n > 1 ? i : -1).filter(i => i >= 0);\n if (axes.length === 0) {\n return clone(input);\n }\n // TODO call broadcastTo kernel directly once backends implement broadcstTo\n const inputs = { x: input };\n const attrs = { reps };\n return ENGINE.runKernel(Tile, inputs, attrs);\n}\nexport const broadcastTo = /* @__PURE__ */ op({ broadcastTo_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0X3RvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYnJvYWRjYXN0X3RvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBd0IsTUFBTSxpQkFBaUIsQ0FBQztBQUk1RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLFlBQVksQ0FDakIsQ0FBb0IsRUFBRSxLQUFrQjtJQUMxQyxJQUFJLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBRTNCLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLEtBQUssQ0FBQyxNQUFNLGlCQUN2RCxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztLQUNwQjtJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDckMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQjtRQUNELEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMvQixNQUFNLElBQUksR0FBYSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNiO2FBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUNYLG1CQUFtQixNQUFNLDZCQUE2QixLQUFLLElBQUksQ0FBQyxDQUFDO1NBQ3RFO0tBQ0Y7SUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVwRSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBYyxDQUFDO0tBQ2xDO0lBRUQsMkVBQTJFO0lBQzNFLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3RDLE1BQU0sS0FBSyxHQUFjLEVBQUMsSUFBSSxFQUFDLENBQUM7SUFDaEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUaWxlLCBUaWxlQXR0cnMsIFRpbGVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rLCBTaGFwZU1hcCwgVGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5pbXBvcnQge2Nsb25lfSBmcm9tICcuL2Nsb25lJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiBCcm9hZGNhc3QgYW4gYXJyYXkgdG8gYSBjb21wYXRpYmxlIHNoYXBlIE51bVB5LXN0eWxlLlxuICpcbiAqIFRoZSB0ZW5zb3IncyBzaGFwZSBpcyBjb21wYXJlZCB0byB0aGUgYnJvYWRjYXN0IHNoYXBlIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cbiAqIE9uZXMgYXJlIHByZXBlbmRlZCB0byB0aGUgdGVuc29yJ3Mgc2hhcGUgdW50aWwgaXQgaGFzIHRoZSBzYW1lIGxlbmd0aCBhc1xuICogdGhlIGJyb2FkY2FzdCBzaGFwZS4gSWYgaW5wdXQuc2hhcGVbaV09PXNoYXBlW2ldLCB0aGUgKGkrMSktdGggYXhpcyBpc1xuICogYWxyZWFkeSBicm9hZGNhc3QtY29tcGF0aWJsZS4gSWYgaW5wdXQuc2hhcGVbaV09PTEgYW5kIHNoYXBlW2ldPT1OLCB0aGVuXG4gKiB0aGUgaW5wdXQgdGVuc29yIGlzIHRpbGVkIE4gdGltZXMgYWxvbmcgdGhhdCBheGlzICh1c2luZyB0Zi50aWxlKS5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgVGhlIHRlbnNvciB0aGF0IGlzIHRvIGJlIGJyb2FkY2FzdGVkLlxuICogQHBhcmFtIHNoYXBlIFRoZSBpbnB1dCBpcyB0byBiZSBicm9hZGNhc3QgdG8gdGhpcyBzaGFwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5mdW5jdGlvbiBicm9hZGNhc3RUb188UiBleHRlbmRzIFJhbms+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBzaGFwZTogU2hhcGVNYXBbUl0pOiBUZW5zb3I8Uj4ge1xuICBsZXQgaW5wdXQgPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ2Jyb2FkY2FzdFRvJywgJ3gnKTtcbiAgY29uc3QgeFNoYXBlID0gaW5wdXQuc2hhcGU7XG5cbiAgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG5cbiAgaWYgKHNoYXBlLmxlbmd0aCA8IGlucHV0LnJhbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJyb2FkY2FzdFRvKCk6IHNoYXBlLmxlbmd0aD0ke3NoYXBlLmxlbmd0aH0gPCBpbnB1dC5yYW5rPSR7XG4gICAgICAgIGlucHV0LnJhbmt9LmApO1xuICB9XG5cbiAgaWYgKHNoYXBlLmxlbmd0aCA+IGlucHV0LnJhbmspIHtcbiAgICBjb25zdCBuZXdTaGFwZSA9IGlucHV0LnNoYXBlLnNsaWNlKCk7XG4gICAgd2hpbGUgKG5ld1NoYXBlLmxlbmd0aCA8IHNoYXBlLmxlbmd0aCkge1xuICAgICAgbmV3U2hhcGUudW5zaGlmdCgxKTtcbiAgICB9XG4gICAgaW5wdXQgPSByZXNoYXBlKGlucHV0LCBuZXdTaGFwZSk7XG4gIH1cblxuICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXQuc2hhcGU7XG4gIGNvbnN0IHJlcHM6IG51bWJlcltdID0gQXJyYXkuZnJvbShzaGFwZSk7XG4gIGZvciAobGV0IGkgPSBzaGFwZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChpbnB1dFNoYXBlW2ldID09PSBzaGFwZVtpXSkge1xuICAgICAgcmVwc1tpXSA9IDE7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5zaGFwZVtpXSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBicm9hZGNhc3RUbygpOiBbJHt4U2hhcGV9XSBjYW5ub3QgYmUgYnJvYWRjYXN0IHRvIFske3NoYXBlfV0uYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGF4ZXMgPSByZXBzLm1hcCgobiwgaSkgPT4gbiA+IDEgPyBpIDogLTEpLmZpbHRlcihpID0+IGkgPj0gMCk7XG5cbiAgaWYgKGF4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNsb25lKGlucHV0KSBhcyBUZW5zb3I8Uj47XG4gIH1cblxuICAvLyBUT0RPIGNhbGwgYnJvYWRjYXN0VG8ga2VybmVsIGRpcmVjdGx5IG9uY2UgYmFja2VuZHMgaW1wbGVtZW50IGJyb2FkY3N0VG9cbiAgY29uc3QgaW5wdXRzOiBUaWxlSW5wdXRzID0ge3g6IGlucHV0fTtcbiAgY29uc3QgYXR0cnM6IFRpbGVBdHRycyA9IHtyZXBzfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBUaWxlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJyb2FkY2FzdFRvID0gLyogQF9fUFVSRV9fICovIG9wKHticm9hZGNhc3RUb199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Ceil } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes ceiling of input `tf.Tensor` element-wise: `ceil(x)`\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.ceil().print(); // or tf.ceil(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction ceil_(x) {\n const $x = convertToTensor(x, 'x', 'ceil', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Ceil, inputs);\n}\nexport const ceil = /* @__PURE__ */ op({ ceil_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NlaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEQsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0NlaWwsIENlaWxJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgY2VpbGluZyBvZiBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGBjZWlsKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy42LCAxLjEsIC0zLjNdKTtcbiAqXG4gKiB4LmNlaWwoKS5wcmludCgpOyAgLy8gb3IgdGYuY2VpbCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBjZWlsXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY2VpbCcsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBDZWlsSW5wdXRzID0ge3g6ICR4fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQ2VpbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IGNlaWwgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NlaWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ClipByValue } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { fill } from './fill';\nimport { op } from './operation';\n/**\n * Clips values element-wise. `max(min(x, clipValueMax), clipValueMin)`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.clipByValue(-2, 3).print(); // or tf.clipByValue(x, -2, 3)\n * ```\n * @param x The input tensor.\n * @param clipValueMin Lower bound of range to be clipped to.\n * @param clipValueMax Upper bound of range to be clipped to.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction clipByValue_(x, clipValueMin, clipValueMax) {\n const $x = convertToTensor(x, 'x', 'clipByValue');\n util.assert((clipValueMin <= clipValueMax), () => `Error in clip: min (${clipValueMin}) must be ` +\n `less than or equal to max (${clipValueMax}).`);\n if (clipValueMin === clipValueMax) {\n return fill($x.shape, clipValueMin, $x.dtype);\n }\n const inputs = { x: $x };\n const attrs = { clipValueMin, clipValueMax };\n return ENGINE.runKernel(ClipByValue, inputs, attrs);\n}\nexport const clipByValue = /* @__PURE__ */ op({ clipByValue_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcF9ieV92YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NsaXBfYnlfdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsV0FBVyxFQUFzQyxNQUFNLGlCQUFpQixDQUFDO0FBSWpGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsWUFBWSxDQUNqQixDQUFlLEVBQUUsWUFBb0IsRUFBRSxZQUFvQjtJQUM3RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUM5QixHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsWUFBWSxZQUFZO1FBQ2pELDhCQUE4QixZQUFZLElBQUksQ0FBQyxDQUFDO0lBRXhELElBQUksWUFBWSxLQUFLLFlBQVksRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFNLENBQUM7S0FDcEQ7SUFFRCxNQUFNLE1BQU0sR0FBc0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQXFCLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxDQUFDO0lBRTdELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsV0FBVyxFQUFFLE1BQW1DLEVBQ2hELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0NsaXBCeVZhbHVlLCBDbGlwQnlWYWx1ZUF0dHJzLCBDbGlwQnlWYWx1ZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge2ZpbGx9IGZyb20gJy4vZmlsbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDbGlwcyB2YWx1ZXMgZWxlbWVudC13aXNlLiBgbWF4KG1pbih4LCBjbGlwVmFsdWVNYXgpLCBjbGlwVmFsdWVNaW4pYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgNF0pO1xuICpcbiAqIHguY2xpcEJ5VmFsdWUoLTIsIDMpLnByaW50KCk7ICAvLyBvciB0Zi5jbGlwQnlWYWx1ZSh4LCAtMiwgMylcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBjbGlwVmFsdWVNaW4gTG93ZXIgYm91bmQgb2YgcmFuZ2UgdG8gYmUgY2xpcHBlZCB0by5cbiAqIEBwYXJhbSBjbGlwVmFsdWVNYXggVXBwZXIgYm91bmQgb2YgcmFuZ2UgdG8gYmUgY2xpcHBlZCB0by5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gY2xpcEJ5VmFsdWVfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgY2xpcFZhbHVlTWluOiBudW1iZXIsIGNsaXBWYWx1ZU1heDogbnVtYmVyKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2NsaXBCeVZhbHVlJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgKGNsaXBWYWx1ZU1pbiA8PSBjbGlwVmFsdWVNYXgpLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNsaXA6IG1pbiAoJHtjbGlwVmFsdWVNaW59KSBtdXN0IGJlIGAgK1xuICAgICAgICAgIGBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4ICgke2NsaXBWYWx1ZU1heH0pLmApO1xuXG4gIGlmIChjbGlwVmFsdWVNaW4gPT09IGNsaXBWYWx1ZU1heCkge1xuICAgIHJldHVybiBmaWxsKCR4LnNoYXBlLCBjbGlwVmFsdWVNaW4sICR4LmR0eXBlKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBDbGlwQnlWYWx1ZUlucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBDbGlwQnlWYWx1ZUF0dHJzID0ge2NsaXBWYWx1ZU1pbiwgY2xpcFZhbHVlTWF4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIENsaXBCeVZhbHVlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaXBCeVZhbHVlID0gLyogQF9fUFVSRV9fICovIG9wKHtjbGlwQnlWYWx1ZV99KTtcbiJdfQ==","import { concat } from './concat';\nimport { op } from './operation';\n/**\n * Concatenates a list of`tf.Tensor1D`s along an axis. See `concat` for details.\n *\n * For example, if:\n * A: shape(3) = |r1, g1, b1|\n * B: shape(2) = |r2, g2|\n * C = tf.concat1d([A, B]) == |r1, g1, b1, r2, g2|\n *\n * @param tensors A list of`tf.Tensor`s to concatenate.\n * @return The concatenated array.\n */\nfunction concat1d_(tensors) {\n return concat(tensors, 0 /* axis */);\n}\nexport const concat1d = /* @__PURE__ */ op({ concat1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0XzFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0XzFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsU0FBUyxDQUFDLE9BQW1DO0lBQ3BELE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4vY29uY2F0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb25jYXRlbmF0ZXMgYSBsaXN0IG9mYHRmLlRlbnNvcjFEYHMgYWxvbmcgYW4gYXhpcy4gU2VlIGBjb25jYXRgIGZvciBkZXRhaWxzLlxuICpcbiAqIEZvciBleGFtcGxlLCBpZjpcbiAqIEE6IHNoYXBlKDMpID0gfHIxLCBnMSwgYjF8XG4gKiBCOiBzaGFwZSgyKSA9IHxyMiwgZzJ8XG4gKiBDID0gdGYuY29uY2F0MWQoW0EsIEJdKSA9PSB8cjEsIGcxLCBiMSwgcjIsIGcyfFxuICpcbiAqIEBwYXJhbSB0ZW5zb3JzIEEgbGlzdCBvZmB0Zi5UZW5zb3JgcyB0byBjb25jYXRlbmF0ZS5cbiAqIEByZXR1cm4gVGhlIGNvbmNhdGVuYXRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY29uY2F0MWRfKHRlbnNvcnM6IEFycmF5PFRlbnNvcjFEfFRlbnNvckxpa2U+KTogVGVuc29yMUQge1xuICByZXR1cm4gY29uY2F0KHRlbnNvcnMsIDAgLyogYXhpcyAqLyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb25jYXQxZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29uY2F0MWRffSk7XG4iXX0=","import { concat } from './concat';\nimport { op } from './operation';\n/**\n * Concatenates a list of`tf.Tensor2D`s along an axis. See `concat` for details.\n *\n * For example, if:\n * A: shape(2, 3) = | r1, g1, b1 |\n * | r2, g2, b2 |\n *\n * B: shape(2, 3) = | r3, g3, b3 |\n * | r4, g4, b4 |\n *\n * C = tf.concat2d([A, B], axis)\n *\n * if axis = 0:\n * C: shape(4, 3) = | r1, g1, b1 |\n * | r2, g2, b2 |\n * | r3, g3, b3 |\n * | r4, g4, b4 |\n *\n * if axis = 1:\n * C = shape(2, 6) = | r1, g1, b1, r3, g3, b3 |\n * | r2, g2, b2, r4, g4, b4 |\n *\n *\n * @param tensors A list of `tf.Tensor`s to concatenate.\n * @param axis The axis to concatenate along.\n * @return The concatenated array.\n */\nfunction concat2d_(tensors, axis) {\n return concat(tensors, axis);\n}\nexport const concat2d = /* @__PURE__ */ op({ concat2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0XzJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0XzJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsU0FBUyxTQUFTLENBQ2QsT0FBbUMsRUFBRSxJQUFZO0lBQ25ELE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi9jb25jYXQnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbmNhdGVuYXRlcyBhIGxpc3Qgb2ZgdGYuVGVuc29yMkRgcyBhbG9uZyBhbiBheGlzLiBTZWUgYGNvbmNhdGAgZm9yIGRldGFpbHMuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmOlxuICogQTogc2hhcGUoMiwgMykgPSB8IHIxLCBnMSwgYjEgfFxuICogICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIgfFxuICpcbiAqIEI6IHNoYXBlKDIsIDMpID0gfCByMywgZzMsIGIzIHxcbiAqICAgICAgICAgICAgICAgICAgfCByNCwgZzQsIGI0IHxcbiAqXG4gKiBDID0gdGYuY29uY2F0MmQoW0EsIEJdLCBheGlzKVxuICpcbiAqIGlmIGF4aXMgPSAwOlxuICogQzogc2hhcGUoNCwgMykgPSB8IHIxLCBnMSwgYjEgfFxuICogICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIgfFxuICogICAgICAgICAgICAgICAgICB8IHIzLCBnMywgYjMgfFxuICogICAgICAgICAgICAgICAgICB8IHI0LCBnNCwgYjQgfFxuICpcbiAqIGlmIGF4aXMgPSAxOlxuICogQyA9IHNoYXBlKDIsIDYpID0gfCByMSwgZzEsIGIxLCByMywgZzMsIGIzIHxcbiAqICAgICAgICAgICAgICAgICAgIHwgcjIsIGcyLCBiMiwgcjQsIGc0LCBiNCB8XG4gKlxuICpcbiAqIEBwYXJhbSB0ZW5zb3JzIEEgbGlzdCBvZiBgdGYuVGVuc29yYHMgdG8gY29uY2F0ZW5hdGUuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byBjb25jYXRlbmF0ZSBhbG9uZy5cbiAqIEByZXR1cm4gVGhlIGNvbmNhdGVuYXRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY29uY2F0MmRfKFxuICAgIHRlbnNvcnM6IEFycmF5PFRlbnNvcjJEfFRlbnNvckxpa2U+LCBheGlzOiBudW1iZXIpOiBUZW5zb3IyRCB7XG4gIHJldHVybiBjb25jYXQodGVuc29ycywgYXhpcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb25jYXQyZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29uY2F0MmRffSk7XG4iXX0=","import { concat } from './concat';\nimport { op } from './operation';\n/**\n * Concatenates a list of `tf.Tensor3D`s along an axis.\n * See `concat` for details.\n *\n * For example, if:\n * A: shape(2, 1, 3) = | r1, g1, b1 |\n * | r2, g2, b2 |\n *\n * B: shape(2, 1, 3) = | r3, g3, b3 |\n * | r4, g4, b4 |\n *\n * C = tf.concat3d([A, B], axis)\n *\n * if axis = 0:\n * C: shape(4, 1, 3) = | r1, g1, b1 |\n * | r2, g2, b2 |\n * | r3, g3, b3 |\n * | r4, g4, b4 |\n *\n * if axis = 1:\n * C: shape(2, 2, 3) = | r1, g1, b1, r3, g3, b3 |\n * | r2, g2, b2, r4, g4, b4 |\n *\n * if axis = 2:\n * C = shape(2, 1, 6) = | r1, g1, b1, r3, g3, b3 |\n * | r2, g2, b2, r4, g4, b4 |\n *\n * @param tensors A list of`tf.Tensor`s to concatenate.\n * @param axis The axis to concate along.\n * @return The concatenated array.\n */\nfunction concat3d_(tensors, axis) {\n return concat(tensors, axis);\n}\nexport const concat3d = /* @__PURE__ */ op({ concat3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0XzNkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0XzNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILFNBQVMsU0FBUyxDQUNkLE9BQW1DLEVBQUUsSUFBWTtJQUNuRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yM0R9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4vY29uY2F0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb25jYXRlbmF0ZXMgYSBsaXN0IG9mIGB0Zi5UZW5zb3IzRGBzIGFsb25nIGFuIGF4aXMuXG4gKiBTZWUgYGNvbmNhdGAgZm9yIGRldGFpbHMuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmOlxuICogQTogc2hhcGUoMiwgMSwgMykgPSB8IHIxLCBnMSwgYjEgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIgfFxuICpcbiAqIEI6IHNoYXBlKDIsIDEsIDMpID0gfCByMywgZzMsIGIzIHxcbiAqICAgICAgICAgICAgICAgICAgICAgfCByNCwgZzQsIGI0IHxcbiAqXG4gKiBDID0gdGYuY29uY2F0M2QoW0EsIEJdLCBheGlzKVxuICpcbiAqIGlmIGF4aXMgPSAwOlxuICogQzogc2hhcGUoNCwgMSwgMykgPSB8IHIxLCBnMSwgYjEgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHIzLCBnMywgYjMgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHI0LCBnNCwgYjQgfFxuICpcbiAqIGlmIGF4aXMgPSAxOlxuICogQzogc2hhcGUoMiwgMiwgMykgPSB8IHIxLCBnMSwgYjEsIHIzLCBnMywgYjMgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIsIHI0LCBnNCwgYjQgfFxuICpcbiAqIGlmIGF4aXMgPSAyOlxuICogQyA9IHNoYXBlKDIsIDEsIDYpID0gfCByMSwgZzEsIGIxLCByMywgZzMsIGIzIHxcbiAqICAgICAgICAgICAgICAgICAgICAgIHwgcjIsIGcyLCBiMiwgcjQsIGc0LCBiNCB8XG4gKlxuICogQHBhcmFtIHRlbnNvcnMgQSBsaXN0IG9mYHRmLlRlbnNvcmBzIHRvIGNvbmNhdGVuYXRlLlxuICogQHBhcmFtIGF4aXMgVGhlIGF4aXMgdG8gY29uY2F0ZSBhbG9uZy5cbiAqIEByZXR1cm4gVGhlIGNvbmNhdGVuYXRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY29uY2F0M2RfKFxuICAgIHRlbnNvcnM6IEFycmF5PFRlbnNvcjNEfFRlbnNvckxpa2U+LCBheGlzOiBudW1iZXIpOiBUZW5zb3IzRCB7XG4gIHJldHVybiBjb25jYXQodGVuc29ycywgYXhpcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb25jYXQzZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29uY2F0M2RffSk7XG4iXX0=","import { concat } from './concat';\nimport { op } from './operation';\n/**\n * Concatenates a list of `tf.Tensor4D`s along an axis.\n * See `concat` for details.\n *\n * @param tensors A list of `tf.Tensor`s to concatenate.\n * @param axis The axis to concate along.\n * @return The concatenated array.\n */\nfunction concat4d_(tensors, axis) {\n return concat(tensors, axis);\n}\nexport const concat4d = /* @__PURE__ */ op({ concat4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0XzRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0XzRkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7R0FPRztBQUNILFNBQVMsU0FBUyxDQUNkLE9BQW1DLEVBQUUsSUFBWTtJQUNuRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yNER9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4vY29uY2F0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb25jYXRlbmF0ZXMgYSBsaXN0IG9mIGB0Zi5UZW5zb3I0RGBzIGFsb25nIGFuIGF4aXMuXG4gKiBTZWUgYGNvbmNhdGAgZm9yIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHRlbnNvcnMgQSBsaXN0IG9mIGB0Zi5UZW5zb3JgcyB0byBjb25jYXRlbmF0ZS5cbiAqIEBwYXJhbSBheGlzIFRoZSBheGlzIHRvIGNvbmNhdGUgYWxvbmcuXG4gKiBAcmV0dXJuIFRoZSBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdDRkXyhcbiAgICB0ZW5zb3JzOiBBcnJheTxUZW5zb3I0RHxUZW5zb3JMaWtlPiwgYXhpczogbnVtYmVyKTogVGVuc29yNEQge1xuICByZXR1cm4gY29uY2F0KHRlbnNvcnMsIGF4aXMpO1xufVxuXG5leHBvcnQgY29uc3QgY29uY2F0NGQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NvbmNhdDRkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv2D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes a 2D convolution over the input x.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n * `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels].\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `dilations` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv2d_(x, filter, strides, pad, dataFormat = 'NHWC', dilations = [1, 1], dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'conv2d', 'float32');\n const $filter = convertToTensor(filter, 'filter', 'conv2d', 'float32');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${x4D.rank}.`);\n util.assert($filter.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ` +\n `${$filter.rank}.`);\n conv_util.checkPadOnDimRoundingMode('conv2d', pad, dimRoundingMode);\n const inDepth = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n util.assert(inDepth === $filter.shape[2], () => `Error in conv2d: depth of input (${inDepth}) must match ` +\n `input depth for filter ${$filter.shape[2]}.`);\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in conv2D: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n util.assert(conv_util.stridesOrDilationsArePositive(dilations), () => 'Error in conv2D: Dilated rates should be larger than 0.');\n util.assert(conv_util.stridesOrDilationsArePositive(strides), () => 'Error in conv2D: Strides should be larger than 0.');\n const inputs = { x: x4D, filter: $filter };\n const attrs = { strides, pad, dataFormat, dilations, dimRoundingMode };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Conv2D, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const conv2d = /* @__PURE__ */ op({ conv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsU0FBUyxPQUFPLENBQ1osQ0FBZSxFQUFFLE1BQTJCLEVBQzVDLE9BQWdDLEVBQ2hDLEdBQW9ELEVBQ3BELGFBQTRCLE1BQU0sRUFDbEMsWUFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzNDLGVBQXdDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdkUsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUV6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZCxHQUFHLEVBQUUsQ0FBQyx1REFBdUQsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDbEIsR0FBRyxFQUFFLENBQUMsdURBQXVEO1FBQ3pELEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDNUIsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQUcsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUM1QixHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsT0FBTyxlQUFlO1FBQzVELDBCQUEwQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQzVELEdBQUcsRUFBRSxDQUFDLDBEQUEwRDtRQUM1RCxlQUFlLE9BQU8sbUJBQW1CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxTQUFTLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLEVBQ2xELEdBQUcsRUFBRSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxTQUFTLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLEVBQ2hELEdBQUcsRUFBRSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFFL0QsTUFBTSxNQUFNLEdBQWlCLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQ08sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFDLENBQUM7SUFFekUsMERBQTBEO0lBQzFELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osTUFBTSxFQUFFLE1BQW1DLEVBQzNDLEtBQWdDLENBQU0sQ0FBQztJQUV2RCxJQUFJLFlBQVksRUFBRTtRQUNoQixPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFNLENBQUM7S0FDdEU7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q29udjJELCBDb252MkRBdHRycywgQ29udjJESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiBDb21wdXRlcyBhIDJEIGNvbnZvbHV0aW9uIG92ZXIgdGhlIGlucHV0IHguXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpc1xuICogYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA0LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5EZXB0aCwgb3V0RGVwdGhdYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBjb252b2x1dGlvbjogYFtzdHJpZGVIZWlnaHQsXG4gKiBzdHJpZGVXaWR0aF1gLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobS5cbiAqICAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMXgxLlxuICogICAtIEZvciBtb3JlIGluZm8sIHNlZSB0aGlzIGd1aWRlOlxuICogICAgIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb25dKFxuICogICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGRhdGFGb3JtYXQ6IEFuIG9wdGlvbmFsIHN0cmluZyBmcm9tOiBcIk5IV0NcIiwgXCJOQ0hXXCIuIERlZmF1bHRzIHRvXG4gKiAgICAgXCJOSFdDXCIuIFNwZWNpZnkgdGhlIGRhdGEgZm9ybWF0IG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEuIFdpdGggdGhlXG4gKiAgICAgZGVmYXVsdCBmb3JtYXQgXCJOSFdDXCIsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgb3JkZXIgb2Y6IFtiYXRjaCxcbiAqICAgICBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uXG4gKiBAcGFyYW0gZGlsYXRpb25zIFRoZSBkaWxhdGlvbiByYXRlczogYFtkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aF1gXG4gKiAgICAgaW4gd2hpY2ggd2Ugc2FtcGxlIGlucHV0IHZhbHVlcyBhY3Jvc3MgdGhlIGhlaWdodCBhbmQgd2lkdGggZGltZW5zaW9uc1xuICogICAgIGluIGF0cm91cyBjb252b2x1dGlvbi4gRGVmYXVsdHMgdG8gYFsxLCAxXWAuIElmIGBkaWxhdGlvbnNgIGlzIGEgc2luZ2xlXG4gKiAgICAgbnVtYmVyLCB0aGVuIGBkaWxhdGlvbkhlaWdodCA9PSBkaWxhdGlvbldpZHRoYC4gSWYgaXQgaXMgZ3JlYXRlciB0aGFuXG4gKiAgICAgMSwgdGhlbiBhbGwgdmFsdWVzIG9mIGBzdHJpZGVzYCBtdXN0IGJlIDEuXG4gKiBAcGFyYW0gZGltUm91bmRpbmdNb2RlIEEgc3RyaW5nIGZyb206ICdjZWlsJywgJ3JvdW5kJywgJ2Zsb29yJy4gSWYgbm9uZSBpc1xuICogICAgIHByb3ZpZGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdHJ1bmNhdGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBjb252MmRfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXI6IFRlbnNvcjREfFRlbnNvckxpa2UsXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8Y29udl91dGlsLkV4cGxpY2l0UGFkZGluZyxcbiAgICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnID0gJ05IV0MnLFxuICAgIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXIgPSBbMSwgMV0sXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdjb252MmQnLCAnZmxvYXQzMicpO1xuICBjb25zdCAkZmlsdGVyID0gY29udmVydFRvVGVuc29yKGZpbHRlciwgJ2ZpbHRlcicsICdjb252MmQnLCAnZmxvYXQzMicpO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuXG4gIGlmICgkeC5yYW5rID09PSAzKSB7XG4gICAgcmVzaGFwZWRUbzREID0gdHJ1ZTtcbiAgICB4NEQgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdLCAkeC5zaGFwZVsyXV0pO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmQ6IGlucHV0IG11c3QgYmUgcmFuayA0LCBidXQgZ290IHJhbmsgJHt4NEQucmFua30uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGZpbHRlci5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYyZDogZmlsdGVyIG11c3QgYmUgcmFuayA0LCBidXQgZ290IHJhbmsgYCArXG4gICAgICAgICAgYCR7JGZpbHRlci5yYW5rfS5gKTtcbiAgY29udl91dGlsLmNoZWNrUGFkT25EaW1Sb3VuZGluZ01vZGUoJ2NvbnYyZCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgaW5EZXB0aCA9IGRhdGFGb3JtYXQgPT09ICdOSFdDJyA/IHg0RC5zaGFwZVszXSA6IHg0RC5zaGFwZVsxXTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBpbkRlcHRoID09PSAkZmlsdGVyLnNoYXBlWzJdLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYyZDogZGVwdGggb2YgaW5wdXQgKCR7aW5EZXB0aH0pIG11c3QgbWF0Y2ggYCArXG4gICAgICAgICAgYGlucHV0IGRlcHRoIGZvciBmaWx0ZXIgJHskZmlsdGVyLnNoYXBlWzJdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBjb252X3V0aWwuZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZXMsIGRpbGF0aW9ucyksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gY29udjJEOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY29udl91dGlsLnN0cmlkZXNPckRpbGF0aW9uc0FyZVBvc2l0aXZlKGRpbGF0aW9ucyksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gY29udjJEOiBEaWxhdGVkIHJhdGVzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiAwLicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5zdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShzdHJpZGVzKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBjb252MkQ6IFN0cmlkZXMgc2hvdWxkIGJlIGxhcmdlciB0aGFuIDAuJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBDb252MkRJbnB1dHMgPSB7eDogeDRELCBmaWx0ZXI6ICRmaWx0ZXJ9O1xuICBjb25zdCBhdHRyczpcbiAgICAgIENvbnYyREF0dHJzID0ge3N0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGV9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIENvbnYyRCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcblxuICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYyZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjJkX30pO1xuIl19","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { conv2d } from './conv2d';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes a 1D convolution over the input x.\n *\n * @param x The input tensor, of rank 3 or rank 2, of shape\n * `[batch, width, inChannels]`. If rank 2, batch of 1 is assumed.\n * @param filter The filter, rank 3, of shape\n * `[filterWidth, inDepth, outDepth]`.\n * @param stride The number of entries by which the filter is moved right at\n * each step.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat An optional string from \"NWC\", \"NCW\". Defaults to \"NWC\",\n * the data is stored in the order of [batch, in_width, in_channels]. Only\n * \"NWC\" is currently supported.\n * @param dilation The dilation rate in which we sample input values in\n * atrous convolution. Defaults to `1`. If it is greater than 1, then\n * stride must be `1`.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv1d_(x, filter, stride, pad, dataFormat = 'NWC', dilation = 1, dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'conv1d');\n const $filter = convertToTensor(filter, 'filter', 'conv1d');\n let x3D = $x;\n let reshapedTo3D = false;\n if ($x.rank === 2) {\n reshapedTo3D = true;\n x3D = reshape($x, [1, $x.shape[0], $x.shape[1]]);\n }\n util.assert(x3D.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${x3D.rank}.`);\n util.assert($filter.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ` +\n `${$filter.rank}.`);\n conv_util.checkPadOnDimRoundingMode('conv1d', pad, dimRoundingMode);\n util.assert(x3D.shape[2] === $filter.shape[1], () => `Error in conv1d: depth of input (${x3D.shape[2]}) must match ` +\n `input depth for filter ${$filter.shape[1]}.`);\n util.assert(conv_util.eitherStridesOrDilationsAreOne(stride, dilation), () => 'Error in conv1D: Either stride or dilation must be 1. ' +\n `Got stride ${stride} and dilation '${dilation}'`);\n util.assert(conv_util.stridesOrDilationsArePositive(dilation), () => 'Error in conv1D: Dilated rates should be larger than 0.');\n util.assert(conv_util.stridesOrDilationsArePositive(stride), () => 'Error in conv1D: Stride should be larger than 0.');\n util.assert(dataFormat === 'NWC', () => `Error in conv1d: got dataFormat of ${dataFormat} but only NWC is currently supported.`);\n const filter4D = reshape($filter, [1, $filter.shape[0], $filter.shape[1], $filter.shape[2]]);\n const input4D = reshape(x3D, [x3D.shape[0], 1, x3D.shape[1], x3D.shape[2]]);\n const strides = [1, stride];\n const dilations = [1, dilation];\n const conv2dDataFormat = 'NHWC';\n const res = conv2d(input4D, filter4D, strides, pad, conv2dDataFormat, dilations, dimRoundingMode);\n if (reshapedTo3D) {\n return reshape(res, [res.shape[2], res.shape[3]]);\n }\n return reshape(res, [res.shape[0], res.shape[2], res.shape[3]]);\n}\nexport const conv1d = /* @__PURE__ */ op({ conv1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEtBQUssU0FBUyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILFNBQVMsT0FBTyxDQUNaLENBQWUsRUFBRSxNQUEyQixFQUFFLE1BQWMsRUFDNUQsR0FBb0QsRUFDcEQsYUFBMEIsS0FBSyxFQUFFLFFBQVEsR0FBRyxDQUFDLEVBQzdDLGVBQXdDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVELElBQUksR0FBRyxHQUFHLEVBQWMsQ0FBQztJQUN6QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNqQixZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLEdBQUcsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFD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QUFDLENBQUMsQ0FBTSxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjJELCBUZW5zb3IzRCwgVGVuc29yNER9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtjb252MmR9IGZyb20gJy4vY29udjJkJztcbmltcG9ydCAqIGFzIGNvbnZfdXRpbCBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYSAxRCBjb252b2x1dGlvbiBvdmVyIHRoZSBpbnB1dCB4LlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIG9mIHJhbmsgMyBvciByYW5rIDIsIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgd2lkdGgsIGluQ2hhbm5lbHNdYC4gSWYgcmFuayAyLCBiYXRjaCBvZiAxIGlzIGFzc3VtZWQuXG4gKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIsIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2ZpbHRlcldpZHRoLCBpbkRlcHRoLCBvdXREZXB0aF1gLlxuICogQHBhcmFtIHN0cmlkZSBUaGUgbnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggdGhlIGZpbHRlciBpcyBtb3ZlZCByaWdodCBhdFxuICogICAgIGVhY2ggc3RlcC5cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkYXRhRm9ybWF0IEFuIG9wdGlvbmFsIHN0cmluZyBmcm9tIFwiTldDXCIsIFwiTkNXXCIuIERlZmF1bHRzIHRvIFwiTldDXCIsXG4gKiAgICAgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZiBbYmF0Y2gsIGluX3dpZHRoLCBpbl9jaGFubmVsc10uIE9ubHlcbiAqICAgICBcIk5XQ1wiIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gZGlsYXRpb24gVGhlIGRpbGF0aW9uIHJhdGUgaW4gd2hpY2ggd2Ugc2FtcGxlIGlucHV0IHZhbHVlcyBpblxuICogICAgIGF0cm91cyBjb252b2x1dGlvbi4gRGVmYXVsdHMgdG8gYDFgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW4gMSwgdGhlblxuICogICAgIHN0cmlkZSBtdXN0IGJlIGAxYC5cbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdDb252b2x1dGlvbid9XG4gKi9cbmZ1bmN0aW9uIGNvbnYxZF88VCBleHRlbmRzIFRlbnNvcjJEfFRlbnNvcjNEPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGZpbHRlcjogVGVuc29yM0R8VGVuc29yTGlrZSwgc3RyaWRlOiBudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8Y29udl91dGlsLkV4cGxpY2l0UGFkZGluZyxcbiAgICBkYXRhRm9ybWF0OiAnTldDJ3wnTkNXJyA9ICdOV0MnLCBkaWxhdGlvbiA9IDEsXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdjb252MWQnKTtcbiAgY29uc3QgJGZpbHRlciA9IGNvbnZlcnRUb1RlbnNvcihmaWx0ZXIsICdmaWx0ZXInLCAnY29udjFkJyk7XG5cbiAgbGV0IHgzRCA9ICR4IGFzIFRlbnNvcjNEO1xuICBsZXQgcmVzaGFwZWRUbzNEID0gZmFsc2U7XG4gIGlmICgkeC5yYW5rID09PSAyKSB7XG4gICAgcmVzaGFwZWRUbzNEID0gdHJ1ZTtcbiAgICB4M0QgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdXSk7XG4gIH1cblxuICB1dGlsLmFzc2VydChcbiAgICAgIHgzRC5yYW5rID09PSAzLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYxZDogaW5wdXQgbXVzdCBiZSByYW5rIDMsIGJ1dCBnb3QgcmFuayAke3gzRC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkZmlsdGVyLnJhbmsgPT09IDMsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjFkOiBmaWx0ZXIgbXVzdCBiZSByYW5rIDMsIGJ1dCBnb3QgcmFuayBgICtcbiAgICAgICAgICBgJHskZmlsdGVyLnJhbmt9LmApO1xuICBjb252X3V0aWwuY2hlY2tQYWRPbkRpbVJvdW5kaW5nTW9kZSgnY29udjFkJywgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHgzRC5zaGFwZVsyXSA9PT0gJGZpbHRlci5zaGFwZVsxXSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MWQ6IGRlcHRoIG9mIGlucHV0ICgke3gzRC5zaGFwZVsyXX0pIG11c3QgbWF0Y2ggYCArXG4gICAgICAgICAgYGlucHV0IGRlcHRoIGZvciBmaWx0ZXIgJHskZmlsdGVyLnNoYXBlWzFdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBjb252X3V0aWwuZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZSwgZGlsYXRpb24pLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGNvbnYxRDogRWl0aGVyIHN0cmlkZSBvciBkaWxhdGlvbiBtdXN0IGJlIDEuICcgK1xuICAgICAgICAgIGBHb3Qgc3RyaWRlICR7c3RyaWRlfSBhbmQgZGlsYXRpb24gJyR7ZGlsYXRpb259J2ApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5zdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShkaWxhdGlvbiksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gY29udjFEOiBEaWxhdGVkIHJhdGVzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiAwLicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5zdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShzdHJpZGUpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGNvbnYxRDogU3RyaWRlIHNob3VsZCBiZSBsYXJnZXIgdGhhbiAwLicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGRhdGFGb3JtYXQgPT09ICdOV0MnLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYxZDogZ290IGRhdGFGb3JtYXQgb2YgJHtcbiAgICAgICAgICBkYXRhRm9ybWF0fSBidXQgb25seSBOV0MgaXMgY3VycmVudGx5IHN1cHBvcnRlZC5gKTtcblxuICBjb25zdCBmaWx0ZXI0RCA9IHJlc2hhcGUoXG4gICAgICAkZmlsdGVyLCBbMSwgJGZpbHRlci5zaGFwZVswXSwgJGZpbHRlci5zaGFwZVsxXSwgJGZpbHRlci5zaGFwZVsyXV0pO1xuICBjb25zdCBpbnB1dDREID0gcmVzaGFwZSh4M0QsIFt4M0Quc2hhcGVbMF0sIDEsIHgzRC5zaGFwZVsxXSwgeDNELnNoYXBlWzJdXSk7XG4gIGNvbnN0IHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl0gPSBbMSwgc3RyaWRlXTtcbiAgY29uc3QgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdID0gWzEsIGRpbGF0aW9uXTtcblxuICBjb25zdCBjb252MmREYXRhRm9ybWF0ID0gJ05IV0MnO1xuXG4gIGNvbnN0IHJlcyA9IGNvbnYyZChcbiAgICAgIChpbnB1dDREIGFzIFRlbnNvcjREKSwgKGZpbHRlcjREIGFzIFRlbnNvcjREKSwgc3RyaWRlcywgcGFkLFxuICAgICAgY29udjJkRGF0YUZvcm1hdCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGUpO1xuXG4gIGlmIChyZXNoYXBlZFRvM0QpIHtcbiAgICByZXR1cm4gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cblxuICByZXR1cm4gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMF0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdXSkgYXMgVDtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYxZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjFkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv2DBackpropInput } from '../kernel_names';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the derivative of the input of a 2D convolution.\n *\n * @param xShape The shape of the input: [batch, height, width, inDepth].\n * If length of 3, batch of 1 is assumed.\n * @param dy The derivative of the output, of rank 4 or rank 3 of shape\n * `[batch, outHeight, outWidth, outDepth]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n * `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm used:\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels].\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n */\nfunction conv2DBackpropInput_(xShape, dy, filter, strides, pad, dataFormat = 'NHWC', dimRoundingMode) {\n util.assert(xShape.length === dy.rank, () => `Length of inShape ` +\n `(${xShape.length}) and rank of dy (${dy.rank}) must match`);\n let xShape4D = xShape;\n let dy4D = dy;\n let reshapedTo4D = false;\n if (dy.rank === 3) {\n reshapedTo4D = true;\n dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]);\n xShape4D = [1, xShape[0], xShape[1], xShape[2]];\n }\n util.assert(xShape4D.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ` +\n `${xShape4D.length}.`);\n util.assert(dy4D.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got ` +\n `rank ${dy4D.rank}`);\n util.assert(filter.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got ` +\n `rank ${filter.rank}`);\n const inDepth = dataFormat === 'NHWC' ? xShape4D[3] : xShape4D[1];\n const outDepth = dataFormat === 'NHWC' ? dy4D.shape[3] : dy4D.shape[1];\n util.assert(inDepth === filter.shape[2], () => `Error in conv2dDerInput: depth of input (${inDepth}) must ` +\n `match input depth for filter ${filter.shape[2]}.`);\n util.assert(outDepth === filter.shape[3], () => `Error in conv2dDerInput: depth of output (${outDepth}) must ` +\n `match output depth for filter ${filter.shape[3]}.`);\n conv_util.checkPadOnDimRoundingMode('conv2dDerInput', pad, dimRoundingMode);\n const inputs = { dy: dy4D, filter };\n const attrs = { strides, pad, dataFormat, dimRoundingMode, inputShape: xShape4D };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Conv2DBackpropInput, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const conv2DBackpropInput = /* @__PURE__ */ op({ conv2DBackpropInput_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkX2JhY2twcm9wX2lucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjJkX2JhY2twcm9wX2lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLG1CQUFtQixFQUFzRCxNQUFNLGlCQUFpQixDQUFDO0FBSXpHLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sS0FBSyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxTQUFTLG9CQUFvQixDQUN6QixNQUFpRSxFQUFFLEVBQUssRUFDeEUsTUFBZ0IsRUFBRSxPQUFnQyxFQUNsRCxHQUFvRCxFQUNwRCxhQUE0QixNQUFNLEVBQ2xDLGVBQXdDO0lBQzFDLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxFQUN6QixHQUFHLEVBQUUsQ0FBQyxvQkFBb0I7UUFDdEIsSUFBSSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7SUFFckUsSUFBSSxRQUFRLEdBQUcsTUFBMEMsQ0FBQztJQUMxRCxJQUFJLElBQUksR0FBRyxFQUFjLENBQUM7SUFDMUIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLEdBQUcsT0FBTyxDQUFD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Ii8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtDb252MkRCYWNrcHJvcElucHV0LCBDb252MkRCYWNrcHJvcElucHV0QXR0cnMsIENvbnYyREJhY2twcm9wSW5wdXRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCAqIGFzIGNvbnZfdXRpbCBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRlcml2YXRpdmUgb2YgdGhlIGlucHV0IG9mIGEgMkQgY29udm9sdXRpb24uXG4gKlxuICogQHBhcmFtIHhTaGFwZSBUaGUgc2hhcGUgb2YgdGhlIGlucHV0OiBbYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGluRGVwdGhdLlxuICogSWYgbGVuZ3RoIG9mIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBkeSBUaGUgZGVyaXZhdGl2ZSBvZiB0aGUgb3V0cHV0LCBvZiByYW5rIDQgb3IgcmFuayAzIG9mIHNoYXBlXG4gKiAgIGBbYmF0Y2gsIG91dEhlaWdodCwgb3V0V2lkdGgsIG91dERlcHRoXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpc1xuICogYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA0LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5EZXB0aCwgb3V0RGVwdGhdYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBjb252b2x1dGlvbjogYFtzdHJpZGVIZWlnaHQsXG4gKiBzdHJpZGVXaWR0aF1gLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobSB1c2VkOlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxeDEuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkhXQ1wiLCBcIk5DSFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5IV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS5cbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqL1xuZnVuY3Rpb24gY29udjJEQmFja3Byb3BJbnB1dF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICB4U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZHk6IFQsXG4gICAgZmlsdGVyOiBUZW5zb3I0RCwgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8Y29udl91dGlsLkV4cGxpY2l0UGFkZGluZyxcbiAgICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnID0gJ05IV0MnLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBUIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4U2hhcGUubGVuZ3RoID09PSBkeS5yYW5rLFxuICAgICAgKCkgPT4gYExlbmd0aCBvZiBpblNoYXBlIGAgK1xuICAgICAgICAgIGAoJHt4U2hhcGUubGVuZ3RofSkgYW5kIHJhbmsgb2YgZHkgKCR7ZHkucmFua30pIG11c3QgbWF0Y2hgKTtcblxuICBsZXQgeFNoYXBlNEQgPSB4U2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIGxldCBkeTREID0gZHkgYXMgVGVuc29yNEQ7XG4gIGxldCByZXNoYXBlZFRvNEQgPSBmYWxzZTtcbiAgaWYgKGR5LnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIGR5NEQgPSByZXNoYXBlKGR5LCBbMSwgZHkuc2hhcGVbMF0sIGR5LnNoYXBlWzFdLCBkeS5zaGFwZVsyXV0pO1xuICAgIHhTaGFwZTREID0gWzEsIHhTaGFwZVswXSwgeFNoYXBlWzFdLCB4U2hhcGVbMl1dO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4U2hhcGU0RC5sZW5ndGggPT09IDQsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBFcnJvciBpbiBjb252MmREZXJJbnB1dDogaW5TaGFwZSBtdXN0IGJlIGxlbmd0aCA0LCBidXQgZ290IGxlbmd0aCBgICtcbiAgICAgICAgICBgJHt4U2hhcGU0RC5sZW5ndGh9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGR5NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmREZXJJbnB1dDogZHkgbXVzdCBiZSByYW5rIDQsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHtkeTRELnJhbmt9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZmlsdGVyLnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjJkRGVySW5wdXQ6IGZpbHRlciBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgcmFuayAke2ZpbHRlci5yYW5rfWApO1xuICBjb25zdCBpbkRlcHRoID0gZGF0YUZvcm1hdCA9PT0gJ05IV0MnID8geFNoYXBlNERbM10gOiB4U2hhcGU0RFsxXTtcbiAgY29uc3Qgb3V0RGVwdGggPSBkYXRhRm9ybWF0ID09PSAnTkhXQycgPyBkeTRELnNoYXBlWzNdIDogZHk0RC5zaGFwZVsxXTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBpbkRlcHRoID09PSBmaWx0ZXIuc2hhcGVbMl0sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjJkRGVySW5wdXQ6IGRlcHRoIG9mIGlucHV0ICgke2luRGVwdGh9KSBtdXN0IGAgK1xuICAgICAgICAgIGBtYXRjaCBpbnB1dCBkZXB0aCBmb3IgZmlsdGVyICR7ZmlsdGVyLnNoYXBlWzJdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBvdXREZXB0aCA9PT0gZmlsdGVyLnNoYXBlWzNdLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYyZERlcklucHV0OiBkZXB0aCBvZiBvdXRwdXQgKCR7b3V0RGVwdGh9KSBtdXN0IGAgK1xuICAgICAgICAgIGBtYXRjaCBvdXRwdXQgZGVwdGggZm9yIGZpbHRlciAke2ZpbHRlci5zaGFwZVszXX0uYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKCdjb252MmREZXJJbnB1dCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgaW5wdXRzOiBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzID0ge2R5OiBkeTRELCBmaWx0ZXJ9O1xuICBjb25zdCBhdHRyczogQ29udjJEQmFja3Byb3BJbnB1dEF0dHJzID1cbiAgICAgIHtzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbVJvdW5kaW5nTW9kZSwgaW5wdXRTaGFwZTogeFNoYXBlNER9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIENvbnYyREJhY2twcm9wSW5wdXQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBjb252MkRCYWNrcHJvcElucHV0ID0gLyogQF9fUFVSRV9fICovIG9wKHtjb252MkRCYWNrcHJvcElucHV0X30pO1xuIl19","import { convertToTensor } from '../tensor_util_env';\nimport { conv2DBackpropInput } from './conv2d_backprop_input';\nimport { op } from './operation';\n/**\n * Computes the transposed 2D convolution of an image, also known as a\n * deconvolution.\n *\n * @param x The input image, of rank 4 or rank 3, of shape\n * `[batch, height, width, inDepth]`. If rank 3, batch of 1 is assumed.\n * @param filter The filter, rank 4, of shape\n * `[filterHeight, filterWidth, outDepth, inDepth]`.\n * `inDepth` must match `inDepth` in `x`.\n * @param outputShape Output shape, of rank 4 or rank 3:\n * `[batch, height, width, outDepth]`. If rank 3, batch of 1 is assumed.\n * @param strides The strides of the original convolution:\n * `[strideHeight, strideWidth]`.\n * @param pad The type of padding algorithm used in the non-transpose version\n * of the op.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv2dTranspose_(x, filter, outputShape, strides, pad, dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'conv2dTranspose');\n const $filter = convertToTensor(filter, 'filter', 'conv2dTranspose');\n return conv2DBackpropInput(outputShape, $x, $filter, strides, pad, 'NHWC', dimRoundingMode);\n}\nexport const conv2dTranspose = /* @__PURE__ */ op({ conv2dTranspose_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkX3RyYW5zcG9zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbnYyZF90cmFuc3Bvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDckIsQ0FBZSxFQUFFLE1BQTJCLEVBQzVDLFdBQXNFLEVBQ3RFLE9BQWdDLEVBQ2hDLEdBQTBDLEVBQzFDLGVBQXdDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUVyRSxPQUFPLG1CQUFtQixDQUN0QixXQUFXLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y29udjJEQmFja3Byb3BJbnB1dH0gZnJvbSAnLi9jb252MmRfYmFja3Byb3BfaW5wdXQnO1xuaW1wb3J0IHtFeHBsaWNpdFBhZGRpbmd9IGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgdHJhbnNwb3NlZCAyRCBjb252b2x1dGlvbiBvZiBhbiBpbWFnZSwgYWxzbyBrbm93biBhcyBhXG4gKiBkZWNvbnZvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCBpbWFnZSwgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5EZXB0aF1gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA0LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgb3V0RGVwdGgsIGluRGVwdGhdYC5cbiAqICAgICBgaW5EZXB0aGAgbXVzdCBtYXRjaCBgaW5EZXB0aGAgaW4gYHhgLlxuICogQHBhcmFtIG91dHB1dFNoYXBlIE91dHB1dCBzaGFwZSwgb2YgcmFuayA0IG9yIHJhbmsgMzpcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBvdXREZXB0aF1gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBvcmlnaW5hbCBjb252b2x1dGlvbjpcbiAqICAgICBgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC5cbiAqIEBwYXJhbSBwYWQgIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtIHVzZWQgaW4gdGhlIG5vbi10cmFuc3Bvc2UgdmVyc2lvblxuICogICAgb2YgdGhlIG9wLlxuICogQHBhcmFtIGRpbVJvdW5kaW5nTW9kZSBBIHN0cmluZyBmcm9tOiAnY2VpbCcsICdyb3VuZCcsICdmbG9vcicuIElmIG5vbmUgaXNcbiAqICAgICBwcm92aWRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRydW5jYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gY29udjJkVHJhbnNwb3NlXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZmlsdGVyOiBUZW5zb3I0RHxUZW5zb3JMaWtlLFxuICAgIG91dHB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXXxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY29udjJkVHJhbnNwb3NlJyk7XG4gIGNvbnN0ICRmaWx0ZXIgPSBjb252ZXJ0VG9UZW5zb3IoZmlsdGVyLCAnZmlsdGVyJywgJ2NvbnYyZFRyYW5zcG9zZScpO1xuXG4gIHJldHVybiBjb252MkRCYWNrcHJvcElucHV0KFxuICAgICAgb3V0cHV0U2hhcGUsICR4LCAkZmlsdGVyLCBzdHJpZGVzLCBwYWQsICdOSFdDJywgZGltUm91bmRpbmdNb2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYyZFRyYW5zcG9zZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjJkVHJhbnNwb3NlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv3D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { eitherStridesOrDilationsAreOne, stridesOrDilationsArePositive } from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes a 3D convolution over the input x.\n *\n * @param x The input tensor, of rank 5 or rank 4, of shape\n * `[batch, depth, height, width, channels]`. If rank 4,\n * batch of 1 is assumed.\n * @param filter The filter, rank 5, of shape\n * `[filterDepth, filterHeight, filterWidth, inChannels, outChannels]`.\n * inChannels must match between input and filter.\n * @param strides The strides of the convolution: `[strideDepth, strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat: An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n * \"NDHWC\". Specify the data format of the input and output data. With the\n * default format \"NDHWC\", the data is stored in the order of: [batch,\n * depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @param dilations The dilation rates: `[dilationDepth, dilationHeight,\n * dilationWidth]` in which we sample input values across the height\n * and width dimensions in atrous convolution. Defaults to `[1, 1, 1]`.\n * If `dilations` is a single number, then\n * `dilationDepth == dilationHeight == dilationWidth`. If it is greater\n * than 1, then all values of `strides` must be 1.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv3d_(x, filter, strides, pad, dataFormat = 'NDHWC', dilations = [1, 1, 1]) {\n const $x = convertToTensor(x, 'x', 'conv3d');\n const $filter = convertToTensor(filter, 'filter', 'conv3d');\n let x5D = $x;\n let reshapedTo5D = false;\n if ($x.rank === 4) {\n reshapedTo5D = true;\n x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]);\n }\n util.assert(x5D.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${x5D.rank}.`);\n util.assert($filter.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ` +\n `${$filter.rank}.`);\n util.assert(x5D.shape[4] === $filter.shape[3], () => `Error in conv3d: depth of input (${x5D.shape[4]}) must match ` +\n `input depth for filter ${$filter.shape[3]}.`);\n util.assert(eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in conv3D: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n util.assert(dataFormat === 'NDHWC', () => `Error in conv3d: got dataFormat of ${dataFormat} but only NDHWC is currently supported.`);\n util.assert(stridesOrDilationsArePositive(dilations), () => 'Error in conv3D: Dilated rates should be larger than 0.');\n util.assert(stridesOrDilationsArePositive(strides), () => 'Error in conv3D: Strides should be larger than 0.');\n const inputs = { x: x5D, filter: $filter };\n const attrs = { strides, pad, dataFormat, dilations };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Conv3D, inputs, attrs);\n if (reshapedTo5D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]);\n }\n return res;\n}\nexport const conv3d = /* @__PURE__ */ op({ conv3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjNkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLDhCQUE4QixFQUFFLDZCQUE2QixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUNILFNBQVMsT0FBTyxDQUNaLENBQWUsRUFBRSxNQUEyQixFQUM1QyxPQUF3QyxFQUFFLEdBQW1CLEVBQzdELGFBQThCLE9BQU8sRUFDckMsWUFBNkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUU1RCxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXpCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTtJQUNELElBQUksQ0FBQyxNQUFNLENBQ1AsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMsdURBQXVELEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzlFLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2xCLEdBQUcsRUFBRSxDQUFDLHVEQUF1RDtRQUN6RCxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLElBQUksQ0FBQyxNQUFNLENBQ1AsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNqQyxHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZTtRQUNqRSwwQkFBMEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FDUCw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQ2xELEdBQUcsRUFBRSxDQUFDLDBEQUEwRDtRQUM1RCxlQUFlLE9BQU8sbUJBQW1CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxVQUFVLEtBQUssT0FBTyxFQUN0QixHQUFHLEVBQUUsQ0FBQyxzQ0FDRixVQUFVLHlDQUF5QyxDQUFDLENBQUM7SUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsRUFDeEMsR0FBRyxFQUFFLENBQUMseURBQXlELENBQUMsQ0FBQztJQUNyRSxJQUFJLENBQUMsTUFBTSxDQUNQLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxFQUN0QyxHQUFHLEVBQUUsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sTUFBTSxHQUFpQixFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBRXZELE1BQU0sS0FBSyxHQUFnQixFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBRWpFLDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQ0gsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUFDO0tBQ1A7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q29udjNELCBDb252M0RBdHRycywgQ29udjNESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjRELCBUZW5zb3I1RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtlaXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUsIHN0cmlkZXNPckRpbGF0aW9uc0FyZVBvc2l0aXZlfSBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYSAzRCBjb252b2x1dGlvbiBvdmVyIHRoZSBpbnB1dCB4LlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIG9mIHJhbmsgNSBvciByYW5rIDQsIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXWAuIElmIHJhbmsgNCxcbiAqIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA1LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVyRGVwdGgsIGZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluQ2hhbm5lbHMsIG91dENoYW5uZWxzXWAuXG4gKiAgICAgIGluQ2hhbm5lbHMgbXVzdCBtYXRjaCBiZXR3ZWVuIGlucHV0IGFuZCBmaWx0ZXIuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlRGVwdGgsIHN0cmlkZUhlaWdodCxcbiAqIHN0cmlkZVdpZHRoXWAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxeDEuXG4gKiAgIC0gRm9yIG1vcmUgaW5mbywgc2VlIHRoaXMgZ3VpZGU6XG4gKiAgICAgW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbl0oXG4gKiAgICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb24pXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkRIV0NcIiwgXCJOQ0RIV1wiLiBEZWZhdWx0cyB0b1xuICogICAgIFwiTkRIV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5ESFdDXCIsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgb3JkZXIgb2Y6IFtiYXRjaCxcbiAqICAgICBkZXB0aCwgaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbHNdLiBPbmx5IFwiTkRIV0NcIiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICogQHBhcmFtIGRpbGF0aW9ucyBUaGUgZGlsYXRpb24gcmF0ZXM6IGBbZGlsYXRpb25EZXB0aCwgZGlsYXRpb25IZWlnaHQsXG4gKiAgICAgZGlsYXRpb25XaWR0aF1gIGluIHdoaWNoIHdlIHNhbXBsZSBpbnB1dCB2YWx1ZXMgYWNyb3NzIHRoZSBoZWlnaHRcbiAqICAgICBhbmQgd2lkdGggZGltZW5zaW9ucyBpbiBhdHJvdXMgY29udm9sdXRpb24uIERlZmF1bHRzIHRvIGBbMSwgMSwgMV1gLlxuICogICAgIElmIGBkaWxhdGlvbnNgIGlzIGEgc2luZ2xlIG51bWJlciwgdGhlblxuICogICAgIGBkaWxhdGlvbkRlcHRoID09IGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyXG4gKiAgICAgdGhhbiAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdDb252b2x1dGlvbid9XG4gKi9cbmZ1bmN0aW9uIGNvbnYzZF88VCBleHRlbmRzIFRlbnNvcjREfFRlbnNvcjVEPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGZpbHRlcjogVGVuc29yNUR8VGVuc29yTGlrZSxcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyLCBwYWQ6ICd2YWxpZCd8J3NhbWUnLFxuICAgIGRhdGFGb3JtYXQ6ICdOREhXQyd8J05DREhXJyA9ICdOREhXQycsXG4gICAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyID0gWzEsIDEsIDFdKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2NvbnYzZCcpO1xuICBjb25zdCAkZmlsdGVyID0gY29udmVydFRvVGVuc29yKGZpbHRlciwgJ2ZpbHRlcicsICdjb252M2QnKTtcblxuICBsZXQgeDVEID0gJHggYXMgVGVuc29yNUQ7XG4gIGxldCByZXNoYXBlZFRvNUQgPSBmYWxzZTtcblxuICBpZiAoJHgucmFuayA9PT0gNCkge1xuICAgIHJlc2hhcGVkVG81RCA9IHRydWU7XG4gICAgeDVEID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl0sICR4LnNoYXBlWzNdXSk7XG4gIH1cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NUQucmFuayA9PT0gNSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252M2Q6IGlucHV0IG11c3QgYmUgcmFuayA1LCBidXQgZ290IHJhbmsgJHt4NUQucmFua30uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGZpbHRlci5yYW5rID09PSA1LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYzZDogZmlsdGVyIG11c3QgYmUgcmFuayA1LCBidXQgZ290IHJhbmsgYCArXG4gICAgICAgICAgYCR7JGZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NUQuc2hhcGVbNF0gPT09ICRmaWx0ZXIuc2hhcGVbM10sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjNkOiBkZXB0aCBvZiBpbnB1dCAoJHt4NUQuc2hhcGVbNF19KSBtdXN0IG1hdGNoIGAgK1xuICAgICAgICAgIGBpbnB1dCBkZXB0aCBmb3IgZmlsdGVyICR7JGZpbHRlci5zaGFwZVszXX0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZXMsIGRpbGF0aW9ucyksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gY29udjNEOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZGF0YUZvcm1hdCA9PT0gJ05ESFdDJyxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252M2Q6IGdvdCBkYXRhRm9ybWF0IG9mICR7XG4gICAgICAgICAgZGF0YUZvcm1hdH0gYnV0IG9ubHkgTkRIV0MgaXMgY3VycmVudGx5IHN1cHBvcnRlZC5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBzdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGNvbnYzRDogRGlsYXRlZCByYXRlcyBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gMC4nKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBzdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShzdHJpZGVzKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBjb252M0Q6IFN0cmlkZXMgc2hvdWxkIGJlIGxhcmdlciB0aGFuIDAuJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBDb252M0RJbnB1dHMgPSB7eDogeDVELCBmaWx0ZXI6ICRmaWx0ZXJ9O1xuXG4gIGNvbnN0IGF0dHJzOiBDb252M0RBdHRycyA9IHtzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9uc307XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgQ29udjNELCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUO1xuXG4gIGlmIChyZXNoYXBlZFRvNUQpIHtcbiAgICByZXR1cm4gcmVzaGFwZShcbiAgICAgICAgICAgICAgIHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM10sIHJlcy5zaGFwZVs0XV0pIGFzXG4gICAgICAgIFQ7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYzZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjNkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv3DBackpropInputV2 } from '../kernel_names';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the derivative of the input of a 3D convolution.\n *\n * @param xShape The shape of the input: [batch, depth, height, width,\n * in_channels]. If length of 4, batch of 1 is assumed.\n * @param dy The derivative of the output, of rank 5 or rank 4 of shape\n * `[batch, outDepth, outHeight, outWidth, in_channels]`.\n * If rank 4, batch of 1 is assumed.\n * @param filter The filter, rank 5, of shape\n * `[filterDepth, filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideDepth, strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm used:\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n */\nfunction conv3DBackpropInput_(xShape, dy, filter, strides, pad) {\n util.assert(xShape.length === dy.rank, () => `Length of inShape ` +\n `(${xShape.length}) and rank of dy (${dy.rank}) must match`);\n let xShape5D = xShape;\n let dy5D = dy;\n let reshapedTo5D = false;\n if (dy.rank === 4) {\n reshapedTo5D = true;\n dy5D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2], dy.shape[3]]);\n xShape5D = [1, xShape[0], xShape[1], xShape[2], xShape[3]];\n }\n const inDepth = xShape5D[4];\n const outDepth = dy5D.shape[4];\n util.assert(xShape5D.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ` +\n `${xShape5D.length}.`);\n util.assert(dy5D.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got ` +\n `rank ${dy5D.rank}`);\n util.assert(filter.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got ` +\n `rank ${filter.rank}`);\n util.assert(inDepth === filter.shape[3], () => `Error in conv3dDerInput: depth of input (${inDepth}) must ` +\n `match input depth for filter ${filter.shape[3]}.`);\n util.assert(outDepth === filter.shape[4], () => `Error in conv3dDerInput: depth of output (${outDepth}) must ` +\n `match output depth for filter ${filter.shape[4]}.`);\n const inputs = { dy: dy5D, filter };\n const attrs = { pad, strides, inputShape: xShape5D };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Conv3DBackpropInputV2, inputs, attrs);\n if (reshapedTo5D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]);\n }\n return res;\n}\nexport const conv3DBackpropInput = /* @__PURE__ */ op({ conv3DBackpropInput_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjNkX2JhY2twcm9wX2lucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjNkX2JhY2twcm9wX2lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLHFCQUFxQixFQUEwRCxNQUFNLGlCQUFpQixDQUFDO0FBSS9HLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFTLG9CQUFvQixDQUN6QixNQUU2QyxFQUM3QyxFQUFLLEVBQUUsTUFBZ0IsRUFBRSxPQUF3QyxFQUNqRSxHQUFtQjtJQUNyQixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksRUFDekIsR0FBRyxFQUFFLENBQUMsb0JBQW9CO1FBQ3RCLElBQUksTUFBTSxDQUFDLE1BQU0scUJBQXFCLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0lBRXJFLElBQUksUUFBUSxHQUFHLE1BQWtELENBQUM7SUFDbEUsSUFBSSxJQUFJLEdBQUcsRUFBYyxDQUFDO0lBQzFCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQ0Qsb0VBQW9FO1FBQ3BFLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZixHQUFHLEVBQUUsQ0FBQyxzREFBc0Q7UUFDeEQsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNqQixHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUMzQixHQUFHLEVBQUUsQ0FBQyw0Q0FBNEMsT0FBTyxTQUFTO1FBQzlELGdDQUFnQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RCxJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUM1QixHQUFHLEVBQUUsQ0FBQyw2Q0FBNkMsUUFBUSxTQUFTO1FBQ2hFLGlDQUFpQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU3RCxNQUFNLE1BQU0sR0FBZ0MsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBRS9ELE1BQU0sS0FBSyxHQUNzQixFQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBRXRFLDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLHFCQUFxQixFQUFFLE1BQW1DLEVBQzFELEtBQWdDLENBQU0sQ0FBQztJQUV2RCxJQUFJLFlBQVksRUFBRTtRQUNoQixPQUFPLE9BQU8sQ0FDSCxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25FLENBQUM7S0FDUDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxvQkFBb0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q29udjNEQmFja3Byb3BJbnB1dFYyLCBDb252M0RCYWNrcHJvcElucHV0VjJBdHRycywgQ29udjNEQmFja3Byb3BJbnB1dFYySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjRELCBUZW5zb3I1RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRlcml2YXRpdmUgb2YgdGhlIGlucHV0IG9mIGEgM0QgY29udm9sdXRpb24uXG4gKlxuICogQHBhcmFtIHhTaGFwZSBUaGUgc2hhcGUgb2YgdGhlIGlucHV0OiBbYmF0Y2gsIGRlcHRoLCBoZWlnaHQsIHdpZHRoLFxuICogaW5fY2hhbm5lbHNdLiBJZiBsZW5ndGggb2YgNCwgYmF0Y2ggb2YgMSBpcyBhc3N1bWVkLlxuICogQHBhcmFtIGR5IFRoZSBkZXJpdmF0aXZlIG9mIHRoZSBvdXRwdXQsIG9mIHJhbmsgNSBvciByYW5rIDQgb2Ygc2hhcGVcbiAqICAgYFtiYXRjaCwgb3V0RGVwdGgsIG91dEhlaWdodCwgb3V0V2lkdGgsIGluX2NoYW5uZWxzXWAuXG4gKiBJZiByYW5rIDQsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA1LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVyRGVwdGgsIGZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluRGVwdGgsIG91dERlcHRoXWAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlRGVwdGgsIHN0cmlkZUhlaWdodCxcbiAqIHN0cmlkZVdpZHRoXWAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtIHVzZWQ6XG4gKiAgICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqL1xuZnVuY3Rpb24gY29udjNEQmFja3Byb3BJbnB1dF88VCBleHRlbmRzIFRlbnNvcjREfFRlbnNvcjVEPihcbiAgICB4U2hhcGU6XG4gICAgICAgIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsXG4gICAgICAgICBudW1iZXJdfFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGR5OiBULCBmaWx0ZXI6IFRlbnNvcjVELCBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICAgIHBhZDogJ3ZhbGlkJ3wnc2FtZScpOiBUIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4U2hhcGUubGVuZ3RoID09PSBkeS5yYW5rLFxuICAgICAgKCkgPT4gYExlbmd0aCBvZiBpblNoYXBlIGAgK1xuICAgICAgICAgIGAoJHt4U2hhcGUubGVuZ3RofSkgYW5kIHJhbmsgb2YgZHkgKCR7ZHkucmFua30pIG11c3QgbWF0Y2hgKTtcblxuICBsZXQgeFNoYXBlNUQgPSB4U2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgbGV0IGR5NUQgPSBkeSBhcyBUZW5zb3I1RDtcbiAgbGV0IHJlc2hhcGVkVG81RCA9IGZhbHNlO1xuICBpZiAoZHkucmFuayA9PT0gNCkge1xuICAgIHJlc2hhcGVkVG81RCA9IHRydWU7XG4gICAgZHk1RCA9IHJlc2hhcGUoZHksIFsxLCBkeS5zaGFwZVswXSwgZHkuc2hhcGVbMV0sIGR5LnNoYXBlWzJdLCBkeS5zaGFwZVszXV0pO1xuICAgIHhTaGFwZTVEID0gWzEsIHhTaGFwZVswXSwgeFNoYXBlWzFdLCB4U2hhcGVbMl0sIHhTaGFwZVszXV07XG4gIH1cblxuICBjb25zdCBpbkRlcHRoID0geFNoYXBlNURbNF07XG4gIGNvbnN0IG91dERlcHRoID0gZHk1RC5zaGFwZVs0XTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4U2hhcGU1RC5sZW5ndGggPT09IDUsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBFcnJvciBpbiBjb252M2REZXJJbnB1dDogaW5TaGFwZSBtdXN0IGJlIGxlbmd0aCA1LCBidXQgZ290IGxlbmd0aCBgICtcbiAgICAgICAgICBgJHt4U2hhcGU1RC5sZW5ndGh9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGR5NUQucmFuayA9PT0gNSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252M2REZXJJbnB1dDogZHkgbXVzdCBiZSByYW5rIDUsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHtkeTVELnJhbmt9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZmlsdGVyLnJhbmsgPT09IDUsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjNkRGVySW5wdXQ6IGZpbHRlciBtdXN0IGJlIHJhbmsgNSwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgcmFuayAke2ZpbHRlci5yYW5rfWApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGluRGVwdGggPT09IGZpbHRlci5zaGFwZVszXSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252M2REZXJJbnB1dDogZGVwdGggb2YgaW5wdXQgKCR7aW5EZXB0aH0pIG11c3QgYCArXG4gICAgICAgICAgYG1hdGNoIGlucHV0IGRlcHRoIGZvciBmaWx0ZXIgJHtmaWx0ZXIuc2hhcGVbM119LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIG91dERlcHRoID09PSBmaWx0ZXIuc2hhcGVbNF0sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjNkRGVySW5wdXQ6IGRlcHRoIG9mIG91dHB1dCAoJHtvdXREZXB0aH0pIG11c3QgYCArXG4gICAgICAgICAgYG1hdGNoIG91dHB1dCBkZXB0aCBmb3IgZmlsdGVyICR7ZmlsdGVyLnNoYXBlWzRdfS5gKTtcblxuICBjb25zdCBpbnB1dHM6IENvbnYzREJhY2twcm9wSW5wdXRWMklucHV0cyA9IHtkeTogZHk1RCwgZmlsdGVyfTtcblxuICBjb25zdCBhdHRyczpcbiAgICAgIENvbnYzREJhY2twcm9wSW5wdXRWMkF0dHJzID0ge3BhZCwgc3RyaWRlcywgaW5wdXRTaGFwZTogeFNoYXBlNUR9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIENvbnYzREJhY2twcm9wSW5wdXRWMiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcblxuICBpZiAocmVzaGFwZWRUbzVEKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUoXG4gICAgICAgICAgICAgICByZXMsIFtyZXMuc2hhcGVbMV0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdLCByZXMuc2hhcGVbNF1dKSBhc1xuICAgICAgICBUO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBjb252M0RCYWNrcHJvcElucHV0ID0gLyogQF9fUFVSRV9fICovIG9wKHtjb252M0RCYWNrcHJvcElucHV0X30pO1xuIl19","import { convertToTensor } from '../tensor_util_env';\nimport { conv3DBackpropInput } from './conv3d_backprop_input';\nimport { op } from './operation';\n/**\n * Computes the transposed 3D convolution of a volume, also known as a\n * deconvolution.\n *\n * @param x The input image, of rank 5 or rank 4, of shape\n * `[batch, depth, height, width, inDepth]`. If rank 4, batch of 1 is assumed.\n * @param filter The filter, rank 4, of shape\n * `[depth, filterHeight, filterWidth, outDepth, inDepth]`.\n * `inDepth` must match `inDepth` in `x`.\n * @param outputShape Output shape, of rank 5 or rank 4:\n * `[batch, depth, height, width, outDepth]`. If rank 3, batch of 1 is\n * assumed.\n * @param strides The strides of the original convolution:\n * `[strideDepth, strideHeight, strideWidth]`.\n * @param pad The type of padding algorithm used in the non-transpose version\n * of the op.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv3dTranspose_(x, filter, outputShape, strides, pad) {\n const $x = convertToTensor(x, 'x', 'conv3dTranspose');\n const $filter = convertToTensor(filter, 'filter', 'conv3dTranspose');\n return conv3DBackpropInput(outputShape, $x, $filter, strides, pad);\n}\nexport const conv3dTranspose = /* @__PURE__ */ op({ conv3dTranspose_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjNkX3RyYW5zcG9zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbnYzZF90cmFuc3Bvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxTQUFTLGdCQUFnQixDQUNyQixDQUFlLEVBQUUsTUFBMkIsRUFDNUMsV0FFNkMsRUFDN0MsT0FBd0MsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFckUsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3I0RCwgVGVuc29yNUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NvbnYzREJhY2twcm9wSW5wdXR9IGZyb20gJy4vY29udjNkX2JhY2twcm9wX2lucHV0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgdHJhbnNwb3NlZCAzRCBjb252b2x1dGlvbiBvZiBhIHZvbHVtZSwgYWxzbyBrbm93biBhcyBhXG4gKiBkZWNvbnZvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCBpbWFnZSwgb2YgcmFuayA1IG9yIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgYFtiYXRjaCwgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGluRGVwdGhdYC4gSWYgcmFuayA0LCBiYXRjaCBvZiAxIGlzIGFzc3VtZWQuXG4gKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIsIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgICBgW2RlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBvdXREZXB0aCwgaW5EZXB0aF1gLlxuICogICAgIGBpbkRlcHRoYCBtdXN0IG1hdGNoIGBpbkRlcHRoYCBpbiBgeGAuXG4gKiBAcGFyYW0gb3V0cHV0U2hhcGUgT3V0cHV0IHNoYXBlLCBvZiByYW5rIDUgb3IgcmFuayA0OlxuICogICAgIGBbYmF0Y2gsIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBvdXREZXB0aF1gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXNcbiAqICAgIGFzc3VtZWQuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgb3JpZ2luYWwgY29udm9sdXRpb246XG4gKiAgICAgYFtzdHJpZGVEZXB0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aF1gLlxuICogQHBhcmFtIHBhZCAgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0gdXNlZCBpbiB0aGUgbm9uLXRyYW5zcG9zZSB2ZXJzaW9uXG4gKiAgICBvZiB0aGUgb3AuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBjb252M2RUcmFuc3Bvc2VfPFQgZXh0ZW5kcyBUZW5zb3I0RHxUZW5zb3I1RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXI6IFRlbnNvcjVEfFRlbnNvckxpa2UsXG4gICAgb3V0cHV0U2hhcGU6XG4gICAgICAgIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsXG4gICAgICAgICBudW1iZXJdfFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXIsIHBhZDogJ3ZhbGlkJ3wnc2FtZScpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY29udjNkVHJhbnNwb3NlJyk7XG4gIGNvbnN0ICRmaWx0ZXIgPSBjb252ZXJ0VG9UZW5zb3IoZmlsdGVyLCAnZmlsdGVyJywgJ2NvbnYzZFRyYW5zcG9zZScpO1xuXG4gIHJldHVybiBjb252M0RCYWNrcHJvcElucHV0KG91dHB1dFNoYXBlLCAkeCwgJGZpbHRlciwgc3RyaWRlcywgcGFkKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYzZFRyYW5zcG9zZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjNkVHJhbnNwb3NlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cos } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes cos of the input `tf.Tensor` element-wise: `cos(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.cos().print(); // or tf.cos(x)\n * ```\n * @param x The input tensor. Must be float32 type.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction cos_(x) {\n const $x = convertToTensor(x, 'x', 'cos', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Cos, inputs);\n}\nexport const cos = /* @__PURE__ */ op({ cos_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtDb3MsIENvc0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBjb3Mgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYGNvcyh4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCBNYXRoLlBJIC8gMiwgTWF0aC5QSSAqIDMgLyA0XSk7XG4gKlxuICogeC5jb3MoKS5wcmludCgpOyAgLy8gb3IgdGYuY29zKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuIE11c3QgYmUgZmxvYXQzMiB0eXBlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBjb3NfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdjb3MnLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogQ29zSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChDb3MsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBjb3MgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2Nvc199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cosh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes hyperbolic cos of the input `tf.Tensor` element-wise: `cosh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.cosh().print(); // or tf.cosh(x)\n * ```\n * @param x The input tensor. Must be float32 type.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction cosh_(x) {\n const $x = convertToTensor(x, 'x', 'cosh', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Cosh, inputs);\n}\nexport const cosh = /* @__PURE__ */ op({ cosh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Nvc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0Nvc2gsIENvc2hJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgaHlwZXJib2xpYyBjb3Mgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYGNvc2goeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgMSwgLTEsIC43XSk7XG4gKlxuICogeC5jb3NoKCkucHJpbnQoKTsgIC8vIG9yIHRmLmNvc2goeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci4gTXVzdCBiZSBmbG9hdDMyIHR5cGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGNvc2hfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdjb3NoJywgJ2Zsb2F0MzInKTtcbiAgY29uc3QgaW5wdXRzOiBDb3NoSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChDb3NoLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgY29zaCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29zaF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cumprod } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the cumulative product of a `tf.Tensor` along `axis`.\n *\n * ```js\n * const x = tf.tensor([1, 2, 3, 4]);\n * x.cumprod().print();\n * ```\n * ```js\n * const x = tf.tensor([[1, 2], [3, 4]]);\n * x.cumprod().print();\n * ```\n *\n * @param x The input tensor to cumulatively multiply.\n * @param axis The axis along which to multiply. Optional. Defaults to 0.\n * @param exclusive Whether to perform exclusive cumulative product. Optional.\n * Defaults to false. If set to true then the product of each tensor entry\n * does not include its own value, but only the values previous to it\n * along the specified axis.\n * @param reverse Whether to multiply in the opposite direction. Optional.\n * Defaults to false.\n *\n * @doc {heading: 'Operations', subheading: 'Scan'}\n */\nfunction cumprod_(x, axis = 0, exclusive = false, reverse = false) {\n const $x = convertToTensor(x, 'x', 'cumprod');\n const inputs = { x: $x };\n const attrs = { axis, exclusive, reverse };\n return ENGINE.runKernel(Cumprod, inputs, attrs);\n}\nexport const cumprod = /* @__PURE__ */ op({ cumprod_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VtcHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2N1bXByb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUErQixNQUFNLGlCQUFpQixDQUFDO0FBSXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsU0FBUyxRQUFRLENBQ2YsQ0FBc0IsRUFDdEIsSUFBSSxHQUFHLENBQUMsRUFDUixTQUFTLEdBQUcsS0FBSyxFQUNqQixPQUFPLEdBQUcsS0FBSztJQUVmLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QyxNQUFNLEtBQUssR0FBaUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXpELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDckIsT0FBTyxFQUNQLE1BQW1DLEVBQ25DLEtBQWdDLENBQ2pDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7IEVOR0lORSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDdW1wcm9kLCBDdW1wcm9kQXR0cnMsIEN1bXByb2RJbnB1dHMgfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHsgTmFtZWRBdHRyTWFwIH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7IFRlbnNvciB9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQgeyBOYW1lZFRlbnNvck1hcCB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQgeyBjb252ZXJ0VG9UZW5zb3IgfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHsgVGVuc29yTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgb3AgfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGN1bXVsYXRpdmUgcHJvZHVjdCBvZiBhIGB0Zi5UZW5zb3JgIGFsb25nIGBheGlzYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcihbMSwgMiwgMywgNF0pO1xuICogeC5jdW1wcm9kKCkucHJpbnQoKTtcbiAqIGBgYFxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IoW1sxLCAyXSwgWzMsIDRdXSk7XG4gKiB4LmN1bXByb2QoKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciB0byBjdW11bGF0aXZlbHkgbXVsdGlwbHkuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyBhbG9uZyB3aGljaCB0byBtdWx0aXBseS4gT3B0aW9uYWwuIERlZmF1bHRzIHRvIDAuXG4gKiBAcGFyYW0gZXhjbHVzaXZlIFdoZXRoZXIgdG8gcGVyZm9ybSBleGNsdXNpdmUgY3VtdWxhdGl2ZSBwcm9kdWN0LiBPcHRpb25hbC5cbiAqICAgICBEZWZhdWx0cyB0byBmYWxzZS4gSWYgc2V0IHRvIHRydWUgdGhlbiB0aGUgcHJvZHVjdCBvZiBlYWNoIHRlbnNvciBlbnRyeVxuICogICAgIGRvZXMgbm90IGluY2x1ZGUgaXRzIG93biB2YWx1ZSwgYnV0IG9ubHkgdGhlIHZhbHVlcyBwcmV2aW91cyB0byBpdFxuICogICAgIGFsb25nIHRoZSBzcGVjaWZpZWQgYXhpcy5cbiAqIEBwYXJhbSByZXZlcnNlIFdoZXRoZXIgdG8gbXVsdGlwbHkgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gT3B0aW9uYWwuXG4gKiAgICAgRGVmYXVsdHMgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2Nhbid9XG4gKi9cbmZ1bmN0aW9uIGN1bXByb2RfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICB4OiBUZW5zb3IgfCBUZW5zb3JMaWtlLFxuICBheGlzID0gMCxcbiAgZXhjbHVzaXZlID0gZmFsc2UsXG4gIHJldmVyc2UgPSBmYWxzZVxuKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2N1bXByb2QnKTtcblxuICBjb25zdCBpbnB1dHM6IEN1bXByb2RJbnB1dHMgPSB7IHg6ICR4IH07XG4gIGNvbnN0IGF0dHJzOiBDdW1wcm9kQXR0cnMgPSB7IGF4aXMsIGV4Y2x1c2l2ZSwgcmV2ZXJzZSB9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgIEN1bXByb2QsXG4gICAgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXBcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGN1bXByb2QgPSAvKiBAX19QVVJFX18gKi8gb3AoeyBjdW1wcm9kXyB9KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cumsum } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the cumulative sum of a `tf.Tensor` along `axis`.\n *\n * ```js\n * const x = tf.tensor([1, 2, 3, 4]);\n * x.cumsum().print();\n * ```\n * ```js\n * const x = tf.tensor([[1, 2], [3, 4]]);\n * x.cumsum().print();\n * ```\n *\n * @param x The input tensor to be summed.\n * @param axis The axis along which to sum. Optional. Defaults to 0.\n * @param exclusive Whether to perform exclusive cumulative sum. Optional.\n * Defaults to false. If set to true then the sum of each tensor entry\n * does not include its own value, but only the values previous to it\n * along the specified axis.\n * @param reverse Whether to sum in the opposite direction. Optional.\n * Defaults to false.\n *\n * @doc {heading: 'Operations', subheading: 'Scan'}\n */\nfunction cumsum_(x, axis = 0, exclusive = false, reverse = false) {\n const $x = convertToTensor(x, 'x', 'cumsum');\n const inputs = { x: $x };\n const attrs = { axis, exclusive, reverse };\n return ENGINE.runKernel(Cumsum, inputs, attrs);\n}\nexport const cumsum = /* @__PURE__ */ op({ cumsum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vtc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY3Vtc3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsT0FBTyxDQUNaLENBQW9CLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLO0lBQ3BFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sTUFBTSxHQUFpQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBZ0IsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBRXRELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsTUFBTSxFQUFFLE1BQW1DLEVBQzNDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q3Vtc3VtLCBDdW1zdW1BdHRycywgQ3Vtc3VtSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGN1bXVsYXRpdmUgc3VtIG9mIGEgYHRmLlRlbnNvcmAgYWxvbmcgYGF4aXNgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yKFsxLCAyLCAzLCA0XSk7XG4gKiB4LmN1bXN1bSgpLnByaW50KCk7XG4gKiBgYGBcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yKFtbMSwgMl0sIFszLCA0XV0pO1xuICogeC5jdW1zdW0oKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciB0byBiZSBzdW1tZWQuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyBhbG9uZyB3aGljaCB0byBzdW0uIE9wdGlvbmFsLiBEZWZhdWx0cyB0byAwLlxuICogQHBhcmFtIGV4Y2x1c2l2ZSBXaGV0aGVyIHRvIHBlcmZvcm0gZXhjbHVzaXZlIGN1bXVsYXRpdmUgc3VtLiBPcHRpb25hbC5cbiAqICAgICBEZWZhdWx0cyB0byBmYWxzZS4gSWYgc2V0IHRvIHRydWUgdGhlbiB0aGUgc3VtIG9mIGVhY2ggdGVuc29yIGVudHJ5XG4gKiAgICAgZG9lcyBub3QgaW5jbHVkZSBpdHMgb3duIHZhbHVlLCBidXQgb25seSB0aGUgdmFsdWVzIHByZXZpb3VzIHRvIGl0XG4gKiAgICAgYWxvbmcgdGhlIHNwZWNpZmllZCBheGlzLlxuICogQHBhcmFtIHJldmVyc2UgV2hldGhlciB0byBzdW0gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gT3B0aW9uYWwuXG4gKiAgICAgRGVmYXVsdHMgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2Nhbid9XG4gKi9cbmZ1bmN0aW9uIGN1bXN1bV88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXMgPSAwLCBleGNsdXNpdmUgPSBmYWxzZSwgcmV2ZXJzZSA9IGZhbHNlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2N1bXN1bScpO1xuXG4gIGNvbnN0IGlucHV0czogQ3Vtc3VtSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IEN1bXN1bUF0dHJzID0ge2F4aXMsIGV4Y2x1c2l2ZSwgcmV2ZXJzZX07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBDdW1zdW0sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgY3Vtc3VtID0gLyogQF9fUFVSRV9fICovIG9wKHtjdW1zdW1ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DenseBincount } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Outputs a vector with length `size` and the same dtype as `weights`.\n *\n * If `weights` are empty, then index `i` stores the number of times the value\n * `i` is counted in `x`. If `weights` are non-empty, then index `i` stores the\n * sum of the value in `weights` at each index where the corresponding value in\n * `x` is `i`.\n *\n * Values in `x` outside of the range [0, size) are ignored.\n *\n * @param x The input int tensor, rank 1 or rank 2.\n * @param weights The weights tensor, must have the same shape as x, or a\n * length-0 Tensor, in which case it acts as all weights equal to 1.\n * @param size Non-negative integer.\n * @param binaryOutput Optional. Whether the kernel should count the appearance\n * or number of occurrences. Defaults to False.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction denseBincount_(x, weights, size, binaryOutput = false) {\n const $x = convertToTensor(x, 'x', 'denseBincount');\n const $weights = convertToTensor(weights, 'weights', 'denseBincount');\n util.assert($x.dtype === 'int32', () => `Error in denseBincount: input ` +\n `dtype must be int32, but got ${$x.dtype}`);\n util.assert($x.rank <= 2, () => `Error in denseBincount: input must be at most rank 2, but got ` +\n `rank ${$x.rank}.`);\n util.assert(size >= 0, () => `size must be non-negative, but got ${size}.`);\n util.assert($weights.size === $x.size || $weights.size === 0, () => `Error in denseBincount: weights must have the same shape as x or ` +\n `0-length, but got x shape: ${$x.shape}, weights shape: ` +\n `${$weights.shape}.`);\n const inputs = { x: $x, weights: $weights };\n const attrs = { size, binaryOutput };\n return ENGINE.runKernel(DenseBincount, inputs, attrs);\n}\nexport const denseBincount = /* @__PURE__ */ op({ denseBincount_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVuc2VfYmluY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9kZW5zZV9iaW5jb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxhQUFhLEVBQTBDLE1BQU0saUJBQWlCLENBQUM7QUFJdkYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQVMsY0FBYyxDQUNuQixDQUFlLEVBQUUsT0FBcUIsRUFBRSxJQUFZLEVBQ3BELFlBQVksR0FBRyxLQUFLO0lBQ3RCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXRFLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQ3BCLEdBQUcsRUFBRSxDQUFDLGdDQUFnQztRQUNsQyxnQ0FBZ0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsRUFDWixHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsc0NBQXNDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2hELEdBQUcsRUFBRSxDQUNELG1FQUFtRTtRQUNuRSw4QkFBOEIsRUFBRSxDQUFDLEtBQUssbUJBQW1CO1FBQ3pELEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFOUIsTUFBTSxNQUFNLEdBQXdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFDL0QsTUFBTSxLQUFLLEdBQXVCLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxDQUFDO0lBRXZELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsYUFBYSxFQUFFLE1BQW1DLEVBQ2xELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7RGVuc2VCaW5jb3VudCwgRGVuc2VCaW5jb3VudEF0dHJzLCBEZW5zZUJpbmNvdW50SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIE91dHB1dHMgYSB2ZWN0b3Igd2l0aCBsZW5ndGggYHNpemVgIGFuZCB0aGUgc2FtZSBkdHlwZSBhcyBgd2VpZ2h0c2AuXG4gKlxuICogSWYgYHdlaWdodHNgIGFyZSBlbXB0eSwgdGhlbiBpbmRleCBgaWAgc3RvcmVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHZhbHVlXG4gKiBgaWAgaXMgY291bnRlZCBpbiBgeGAuIElmIGB3ZWlnaHRzYCBhcmUgbm9uLWVtcHR5LCB0aGVuIGluZGV4IGBpYCBzdG9yZXMgdGhlXG4gKiBzdW0gb2YgdGhlIHZhbHVlIGluIGB3ZWlnaHRzYCBhdCBlYWNoIGluZGV4IHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluXG4gKiBgeGAgaXMgYGlgLlxuICpcbiAqIFZhbHVlcyBpbiBgeGAgb3V0c2lkZSBvZiB0aGUgcmFuZ2UgWzAsIHNpemUpIGFyZSBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCBpbnQgdGVuc29yLCByYW5rIDEgb3IgcmFuayAyLlxuICogQHBhcmFtIHdlaWdodHMgVGhlIHdlaWdodHMgdGVuc29yLCBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUgYXMgeCwgb3IgYVxuICogICAgIGxlbmd0aC0wIFRlbnNvciwgaW4gd2hpY2ggY2FzZSBpdCBhY3RzIGFzIGFsbCB3ZWlnaHRzIGVxdWFsIHRvIDEuXG4gKiBAcGFyYW0gc2l6ZSBOb24tbmVnYXRpdmUgaW50ZWdlci5cbiAqIEBwYXJhbSBiaW5hcnlPdXRwdXQgT3B0aW9uYWwuIFdoZXRoZXIgdGhlIGtlcm5lbCBzaG91bGQgY291bnQgdGhlIGFwcGVhcmFuY2VcbiAqICAgICBvciBudW1iZXIgb2Ygb2NjdXJyZW5jZXMuIERlZmF1bHRzIHRvIEZhbHNlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGRlbnNlQmluY291bnRfPFQgZXh0ZW5kcyBUZW5zb3IxRHxUZW5zb3IyRD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCB3ZWlnaHRzOiBUfFRlbnNvckxpa2UsIHNpemU6IG51bWJlcixcbiAgICBiaW5hcnlPdXRwdXQgPSBmYWxzZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdkZW5zZUJpbmNvdW50Jyk7XG4gIGNvbnN0ICR3ZWlnaHRzID0gY29udmVydFRvVGVuc29yKHdlaWdodHMsICd3ZWlnaHRzJywgJ2RlbnNlQmluY291bnQnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LmR0eXBlID09PSAnaW50MzInLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGRlbnNlQmluY291bnQ6IGlucHV0IGAgK1xuICAgICAgICAgIGBkdHlwZSBtdXN0IGJlIGludDMyLCBidXQgZ290ICR7JHguZHR5cGV9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA8PSAyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGRlbnNlQmluY291bnQ6IGlucHV0IG11c3QgYmUgYXQgbW9zdCByYW5rIDIsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHskeC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoc2l6ZSA+PSAwLCAoKSA9PiBgc2l6ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSwgYnV0IGdvdCAke3NpemV9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR3ZWlnaHRzLnNpemUgPT09ICR4LnNpemUgfHwgJHdlaWdodHMuc2l6ZSA9PT0gMCxcbiAgICAgICgpID0+XG4gICAgICAgICAgYEVycm9yIGluIGRlbnNlQmluY291bnQ6IHdlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFzIHggb3IgYCArXG4gICAgICAgICAgYDAtbGVuZ3RoLCBidXQgZ290IHggc2hhcGU6ICR7JHguc2hhcGV9LCB3ZWlnaHRzIHNoYXBlOiBgICtcbiAgICAgICAgICBgJHskd2VpZ2h0cy5zaGFwZX0uYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBEZW5zZUJpbmNvdW50SW5wdXRzID0ge3g6ICR4LCB3ZWlnaHRzOiAkd2VpZ2h0c307XG4gIGNvbnN0IGF0dHJzOiBEZW5zZUJpbmNvdW50QXR0cnMgPSB7c2l6ZSwgYmluYXJ5T3V0cHV0fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIERlbnNlQmluY291bnQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgZGVuc2VCaW5jb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZGVuc2VCaW5jb3VudF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DepthToSpace } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Rearranges data from depth into blocks of spatial data. More specifically,\n * this op outputs a copy of the input tensor where values from the `depth`\n * dimension are moved in spatial blocks to the `height` and `width` dimensions.\n * The attr `blockSize` indicates the input block size and how the data is\n * moved.\n *\n * - Chunks of data of size `blockSize * blockSize` from depth are rearranged\n * into non-overlapping blocks of size `blockSize x blockSize`\n *\n * - The width the output tensor is `inputWidth * blockSize`, whereas the\n * height is `inputHeight * blockSize`\n *\n * - The Y, X coordinates within each block of the output image are determined\n * by the high order component of the input channel index\n *\n * - The depth of the input tensor must be divisible by `blockSize *\n * blockSize`\n *\n * The `dataFormat` attr specifies the layout of the input and output tensors\n * with the following options: \"NHWC\": [ `batch, height, width, channels` ]\n * \"NCHW\": [ `batch, channels, height, width` ]\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [1, 1, 1, 4]);\n * const blockSize = 2;\n * const dataFormat = \"NHWC\";\n *\n * tf.depthToSpace(x, blockSize, dataFormat).print();\n * ```\n *\n * @param x The input tensor of rank 4\n * @param blockSIze An `int` that is `>= 2`. The size of the spatial block\n * @param dataFormat An optional string from: \"NHWC\", \"NCHW\". Defaults to \"NHWC\"\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction depthToSpace_(x, blockSize, dataFormat = 'NHWC') {\n const $x = convertToTensor(x, 'x', 'depthToSpace', 'float32');\n const inputHeight = (dataFormat === 'NHWC') ? $x.shape[1] : $x.shape[2];\n const inputWidth = (dataFormat === 'NHWC') ? $x.shape[2] : $x.shape[3];\n const inputDepth = (dataFormat === 'NHWC') ? $x.shape[3] : $x.shape[1];\n util.assert(blockSize > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${blockSize}`);\n util.assert(inputHeight * blockSize >= 0, () => `Negative dimension size caused by overflow when multiplying\n ${inputHeight} and ${blockSize} for depthToSpace with input shape\n ${$x.shape}`);\n util.assert(inputWidth * blockSize >= 0, () => `Negative dimension size caused by overflow when multiplying\n ${inputWidth} and ${blockSize} for depthToSpace with input shape\n ${$x.shape}`);\n util.assert((inputDepth % (blockSize * blockSize) === 0), () => `Dimension size must be evenly divisible by ${blockSize * blockSize} but is ${inputDepth} for depthToSpace with input shape ${$x.shape}`);\n const inputs = { x: $x };\n const attrs = { blockSize, dataFormat };\n return ENGINE.runKernel(DepthToSpace, inputs, attrs);\n}\nexport const depthToSpace = /* @__PURE__ */ op({ depthToSpace_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGhfdG9fc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9kZXB0aF90b19zcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxZQUFZLEVBQXdDLE1BQU0saUJBQWlCLENBQUM7QUFJcEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DRztBQUNILFNBQVMsYUFBYSxDQUNsQixDQUF3QixFQUFFLFNBQWlCLEVBQzNDLGFBQTRCLE1BQU07SUFDcEMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFNBQVMsQ0FBYSxDQUFDO0lBRTFFLE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZFLElBQUksQ0FBQyxNQUFNLENBQ1AsU0FBUyxHQUFHLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxzREFBc0QsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUU3RSxJQUFJLENBQUMsTUFBTSxDQUNQLFdBQVcsR0FBRyxTQUFTLElBQUksQ0FBQyxFQUM1QixHQUFHLEVBQUUsQ0FBQztNQUNOLFdBQVcsUUFBUSxTQUFTO01BQzVCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRWhCLElBQUksQ0FBQyxNQUFNLENBQ1AsVUFBVSxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQzNCLEdBQUcsRUFBRSxDQUFDO01BQ04sVUFBVSxRQUFRLFNBQVM7VUFDdkIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLFVBQVUsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDNUMsR0FBRyxFQUFFLENBQUMsOENBQ0YsU0FBUyxHQUFHLFNBQVMsV0FDckIsVUFBVSxzQ0FBc0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFcEUsTUFBTSxNQUFNLEdBQXVCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFzQixFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQztJQUV6RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFlBQVksRUFBRSxNQUFtQyxFQUNqRCxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0RlcHRoVG9TcGFjZSwgRGVwdGhUb1NwYWNlQXR0cnMsIERlcHRoVG9TcGFjZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTREfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmVhcnJhbmdlcyBkYXRhIGZyb20gZGVwdGggaW50byBibG9ja3Mgb2Ygc3BhdGlhbCBkYXRhLiBNb3JlIHNwZWNpZmljYWxseSxcbiAqIHRoaXMgb3Agb3V0cHV0cyBhIGNvcHkgb2YgdGhlIGlucHV0IHRlbnNvciB3aGVyZSB2YWx1ZXMgZnJvbSB0aGUgYGRlcHRoYFxuICogZGltZW5zaW9uIGFyZSBtb3ZlZCBpbiBzcGF0aWFsIGJsb2NrcyB0byB0aGUgYGhlaWdodGAgYW5kIGB3aWR0aGAgZGltZW5zaW9ucy5cbiAqIFRoZSBhdHRyIGBibG9ja1NpemVgIGluZGljYXRlcyB0aGUgaW5wdXQgYmxvY2sgc2l6ZSBhbmQgaG93IHRoZSBkYXRhIGlzXG4gKiBtb3ZlZC5cbiAqXG4gKiAgLSBDaHVua3Mgb2YgZGF0YSBvZiBzaXplIGBibG9ja1NpemUgKiBibG9ja1NpemVgIGZyb20gZGVwdGggYXJlIHJlYXJyYW5nZWRcbiAqIGludG8gbm9uLW92ZXJsYXBwaW5nIGJsb2NrcyBvZiBzaXplIGBibG9ja1NpemUgeCBibG9ja1NpemVgXG4gKlxuICogIC0gVGhlIHdpZHRoIHRoZSBvdXRwdXQgdGVuc29yIGlzIGBpbnB1dFdpZHRoICogYmxvY2tTaXplYCwgd2hlcmVhcyB0aGVcbiAqIGhlaWdodCBpcyBgaW5wdXRIZWlnaHQgKiBibG9ja1NpemVgXG4gKlxuICogIC0gVGhlIFksIFggY29vcmRpbmF0ZXMgd2l0aGluIGVhY2ggYmxvY2sgb2YgdGhlIG91dHB1dCBpbWFnZSBhcmUgZGV0ZXJtaW5lZFxuICogYnkgdGhlIGhpZ2ggb3JkZXIgY29tcG9uZW50IG9mIHRoZSBpbnB1dCBjaGFubmVsIGluZGV4XG4gKlxuICogIC0gVGhlIGRlcHRoIG9mIHRoZSBpbnB1dCB0ZW5zb3IgbXVzdCBiZSBkaXZpc2libGUgYnkgYGJsb2NrU2l6ZSAqXG4gKiBibG9ja1NpemVgXG4gKlxuICogVGhlIGBkYXRhRm9ybWF0YCBhdHRyIHNwZWNpZmllcyB0aGUgbGF5b3V0IG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHRlbnNvcnNcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOiBcIk5IV0NcIjogWyBgYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzYCBdXG4gKiBcIk5DSFdcIjogWyBgYmF0Y2gsIGNoYW5uZWxzLCBoZWlnaHQsIHdpZHRoYCBdXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3I0ZChbMSwgMiwgMywgNF0sIFsxLCAxLCAxLCA0XSk7XG4gKiBjb25zdCBibG9ja1NpemUgPSAyO1xuICogY29uc3QgZGF0YUZvcm1hdCA9IFwiTkhXQ1wiO1xuICpcbiAqIHRmLmRlcHRoVG9TcGFjZSh4LCBibG9ja1NpemUsIGRhdGFGb3JtYXQpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIG9mIHJhbmsgNFxuICogQHBhcmFtIGJsb2NrU0l6ZSAgQW4gYGludGAgdGhhdCBpcyBgPj0gMmAuIFRoZSBzaXplIG9mIHRoZSBzcGF0aWFsIGJsb2NrXG4gKiBAcGFyYW0gZGF0YUZvcm1hdCBBbiBvcHRpb25hbCBzdHJpbmcgZnJvbTogXCJOSFdDXCIsIFwiTkNIV1wiLiBEZWZhdWx0cyB0byBcIk5IV0NcIlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1RyYW5zZm9ybWF0aW9ucyd9XG4gKi9cbmZ1bmN0aW9uIGRlcHRoVG9TcGFjZV8oXG4gICAgeDogVGVuc29yNER8VGVuc29yTGlrZTRELCBibG9ja1NpemU6IG51bWJlcixcbiAgICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnID0gJ05IV0MnKTogVGVuc29yNEQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdkZXB0aFRvU3BhY2UnLCAnZmxvYXQzMicpIGFzIFRlbnNvcjREO1xuXG4gIGNvbnN0IGlucHV0SGVpZ2h0ID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgPyAkeC5zaGFwZVsxXSA6ICR4LnNoYXBlWzJdO1xuICBjb25zdCBpbnB1dFdpZHRoID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgPyAkeC5zaGFwZVsyXSA6ICR4LnNoYXBlWzNdO1xuICBjb25zdCBpbnB1dERlcHRoID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgPyAkeC5zaGFwZVszXSA6ICR4LnNoYXBlWzFdO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYmxvY2tTaXplID4gMSxcbiAgICAgICgpID0+IGBibG9ja1NpemUgc2hvdWxkIGJlID4gMSBmb3IgZGVwdGhUb1NwYWNlLCBidXQgd2FzOiAke2Jsb2NrU2l6ZX1gKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGlucHV0SGVpZ2h0ICogYmxvY2tTaXplID49IDAsXG4gICAgICAoKSA9PiBgTmVnYXRpdmUgZGltZW5zaW9uIHNpemUgY2F1c2VkIGJ5IG92ZXJmbG93IHdoZW4gbXVsdGlwbHlpbmdcbiAgICAke2lucHV0SGVpZ2h0fSBhbmQgJHtibG9ja1NpemV9ICBmb3IgZGVwdGhUb1NwYWNlIHdpdGggaW5wdXQgc2hhcGVcbiAgICAkeyR4LnNoYXBlfWApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaW5wdXRXaWR0aCAqIGJsb2NrU2l6ZSA+PSAwLFxuICAgICAgKCkgPT4gYE5lZ2F0aXZlIGRpbWVuc2lvbiBzaXplIGNhdXNlZCBieSBvdmVyZmxvdyB3aGVuIG11bHRpcGx5aW5nXG4gICAgJHtpbnB1dFdpZHRofSBhbmQgJHtibG9ja1NpemV9IGZvciBkZXB0aFRvU3BhY2Ugd2l0aCBpbnB1dCBzaGFwZVxuICAgICAgICAkeyR4LnNoYXBlfWApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgKGlucHV0RGVwdGggJSAoYmxvY2tTaXplICogYmxvY2tTaXplKSA9PT0gMCksXG4gICAgICAoKSA9PiBgRGltZW5zaW9uIHNpemUgbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5ICR7XG4gICAgICAgICAgYmxvY2tTaXplICogYmxvY2tTaXplfSBidXQgaXMgJHtcbiAgICAgICAgICBpbnB1dERlcHRofSBmb3IgZGVwdGhUb1NwYWNlIHdpdGggaW5wdXQgc2hhcGUgJHskeC5zaGFwZX1gKTtcblxuICBjb25zdCBpbnB1dHM6IERlcHRoVG9TcGFjZUlucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBEZXB0aFRvU3BhY2VBdHRycyA9IHtibG9ja1NpemUsIGRhdGFGb3JtYXR9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgRGVwdGhUb1NwYWNlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlcHRoVG9TcGFjZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZGVwdGhUb1NwYWNlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DepthwiseConv2dNative } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Depthwise 2D convolution.\n *\n * Given a 4D `input` array and a `filter` array of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]` containing\n * `inChannels` convolutional filters of depth 1, this op applies a\n * different filter to each input channel (expanding from 1 channel to\n * `channelMultiplier` channels for each), then concatenates the results\n * together. The output has `inChannels * channelMultiplier` channels.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d](\n * https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d)\n * for more details.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter tensor, rank 4, of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction depthwiseConv2d_(x, filter, strides, pad, dataFormat = 'NHWC', dilations = [1, 1], dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'depthwiseConv2d', 'float32');\n const $filter = convertToTensor(filter, 'filter', 'depthwiseConv2d', 'float32');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got ` +\n `rank ${x4D.rank}.`);\n util.assert($filter.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ` +\n `${$filter.rank}.`);\n const inChannels = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n util.assert(inChannels === $filter.shape[2], () => `Error in depthwiseConv2d: number of input channels ` +\n `(${inChannels}) must match the inChannels dimension in ` +\n `filter ${$filter.shape[2]}.`);\n conv_util.checkPadOnDimRoundingMode('depthwiseConv2d', pad, dimRoundingMode);\n const inputs = { x: x4D, filter: $filter };\n const attrs = { strides, pad, dataFormat, dilations, dimRoundingMode };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(DepthwiseConv2dNative, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const depthwiseConv2d = /* @__PURE__ */ op({ depthwiseConv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGh3aXNlX2NvbnYyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2RlcHRod2lzZV9jb252MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMscUJBQXFCLEVBQTBELE1BQU0saUJBQWlCLENBQUM7QUFJL0csT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sS0FBSyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFDSCxTQUFTLGdCQUFnQixDQUNyQixDQUFlLEVBQUUsTUFBMkIsRUFDNUMsT0FBZ0MsRUFDaEMsR0FBb0QsRUFDcEQsYUFBNEIsTUFBTSxFQUNsQyxZQUFxQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDM0MsZUFBd0M7SUFDMUMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFcEUsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZCxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNsQixHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QixNQUFNLFVBQVUsR0FBRyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQ1AsVUFBVSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQy9CLEdBQUcsRUFBRSxDQUFDLHFEQUFxRDtRQUN2RCxJQUFJLFVBQVUsMkNBQTJDO1FBQ3pELFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM3RSxNQUFNLE1BQU0sR0FBZ0MsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztJQUN0RSxNQUFNLEtBQUssR0FDUCxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUMsQ0FBQztJQUUzRCwwREFBMEQ7SUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDWixxQkFBcUIsRUFBRSxNQUFtQyxFQUMxRCxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7RGVwdGh3aXNlQ29udjJkTmF0aXZlLCBEZXB0aHdpc2VDb252MmROYXRpdmVBdHRycywgRGVwdGh3aXNlQ29udjJkTmF0aXZlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiBEZXB0aHdpc2UgMkQgY29udm9sdXRpb24uXG4gKlxuICogR2l2ZW4gYSA0RCBgaW5wdXRgIGFycmF5IGFuZCBhIGBmaWx0ZXJgIGFycmF5IG9mIHNoYXBlXG4gKiBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluQ2hhbm5lbHMsIGNoYW5uZWxNdWx0aXBsaWVyXWAgY29udGFpbmluZ1xuICogYGluQ2hhbm5lbHNgIGNvbnZvbHV0aW9uYWwgZmlsdGVycyBvZiBkZXB0aCAxLCB0aGlzIG9wIGFwcGxpZXMgYVxuICogZGlmZmVyZW50IGZpbHRlciB0byBlYWNoIGlucHV0IGNoYW5uZWwgKGV4cGFuZGluZyBmcm9tIDEgY2hhbm5lbCB0b1xuICogYGNoYW5uZWxNdWx0aXBsaWVyYCBjaGFubmVscyBmb3IgZWFjaCksIHRoZW4gY29uY2F0ZW5hdGVzIHRoZSByZXN1bHRzXG4gKiB0b2dldGhlci4gVGhlIG91dHB1dCBoYXMgYGluQ2hhbm5lbHMgKiBjaGFubmVsTXVsdGlwbGllcmAgY2hhbm5lbHMuXG4gKlxuICogU2VlXG4gKiBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2RlcHRod2lzZV9jb252MmRdKFxuICogICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9kZXB0aHdpc2VfY29udjJkKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDQgb3IgcmFuayAzLCBvZiBzaGFwZVxuICogICAgIGBbYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGluQ2hhbm5lbHNdYC4gSWYgcmFuayAzLCBiYXRjaCBvZiAxIGlzXG4gKiBhc3N1bWVkLlxuICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRlbnNvciwgcmFuayA0LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5DaGFubmVscywgY2hhbm5lbE11bHRpcGxpZXJdYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBjb252b2x1dGlvbjogYFtzdHJpZGVIZWlnaHQsXG4gKiBzdHJpZGVXaWR0aF1gLiBJZiBzdHJpZGVzIGlzIGEgc2luZ2xlIG51bWJlciwgdGhlbiBgc3RyaWRlSGVpZ2h0ID09XG4gKiBzdHJpZGVXaWR0aGAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMXgxLlxuICogICAtIEZvciBtb3JlIGluZm8sIHNlZSB0aGlzIGd1aWRlOlxuICogICAgIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb25dKFxuICogICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGRpbGF0aW9ucyBUaGUgZGlsYXRpb24gcmF0ZXM6IGBbZGlsYXRpb25IZWlnaHQsIGRpbGF0aW9uV2lkdGhdYFxuICogICAgIGluIHdoaWNoIHdlIHNhbXBsZSBpbnB1dCB2YWx1ZXMgYWNyb3NzIHRoZSBoZWlnaHQgYW5kIHdpZHRoIGRpbWVuc2lvbnNcbiAqICAgICBpbiBhdHJvdXMgY29udm9sdXRpb24uIERlZmF1bHRzIHRvIGBbMSwgMV1gLiBJZiBgcmF0ZWAgaXMgYSBzaW5nbGVcbiAqICAgICBudW1iZXIsIHRoZW4gYGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW5cbiAqICAgICAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqIEBwYXJhbSBkYXRhRm9ybWF0OiBBbiBvcHRpb25hbCBzdHJpbmcgZnJvbTogXCJOSFdDXCIsIFwiTkNIV1wiLiBEZWZhdWx0cyB0b1xuICogICAgIFwiTkhXQ1wiLiBTcGVjaWZ5IHRoZSBkYXRhIGZvcm1hdCBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhLiBXaXRoIHRoZVxuICogICAgIGRlZmF1bHQgZm9ybWF0IFwiTkhXQ1wiLCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gdGhlIG9yZGVyIG9mOiBbYmF0Y2gsXG4gKiAgICAgaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbHNdLiBPbmx5IFwiTkhXQ1wiIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gZGltUm91bmRpbmdNb2RlIEEgc3RyaW5nIGZyb206ICdjZWlsJywgJ3JvdW5kJywgJ2Zsb29yJy4gSWYgbm9uZSBpc1xuICogICAgIHByb3ZpZGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdHJ1bmNhdGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBkZXB0aHdpc2VDb252MmRfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXI6IFRlbnNvcjREfFRlbnNvckxpa2UsXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8Y29udl91dGlsLkV4cGxpY2l0UGFkZGluZyxcbiAgICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnID0gJ05IV0MnLFxuICAgIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXIgPSBbMSwgMV0sXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdkZXB0aHdpc2VDb252MmQnLCAnZmxvYXQzMicpO1xuICBjb25zdCAkZmlsdGVyID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihmaWx0ZXIsICdmaWx0ZXInLCAnZGVwdGh3aXNlQ29udjJkJywgJ2Zsb2F0MzInKTtcblxuICBsZXQgeDREID0gJHggYXMgVGVuc29yNEQ7XG4gIGxldCByZXNoYXBlZFRvNEQgPSBmYWxzZTtcbiAgaWYgKCR4LnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIHg0RCA9IHJlc2hhcGUoJHgsIFsxLCAkeC5zaGFwZVswXSwgJHguc2hhcGVbMV0sICR4LnNoYXBlWzJdXSk7XG4gIH1cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBkZXB0aHdpc2VDb252MmQ6IGlucHV0IG11c3QgYmUgcmFuayA0LCBidXQgZ290IGAgK1xuICAgICAgICAgIGByYW5rICR7eDRELnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRmaWx0ZXIucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBkZXB0aHdpc2VDb252MmQ6IGZpbHRlciBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyRmaWx0ZXIucmFua30uYCk7XG4gIGNvbnN0IGluQ2hhbm5lbHMgPSBkYXRhRm9ybWF0ID09PSAnTkhXQycgPyB4NEQuc2hhcGVbM10gOiB4NEQuc2hhcGVbMV07XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaW5DaGFubmVscyA9PT0gJGZpbHRlci5zaGFwZVsyXSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBkZXB0aHdpc2VDb252MmQ6IG51bWJlciBvZiBpbnB1dCBjaGFubmVscyBgICtcbiAgICAgICAgICBgKCR7aW5DaGFubmVsc30pIG11c3QgbWF0Y2ggdGhlIGluQ2hhbm5lbHMgZGltZW5zaW9uIGluIGAgK1xuICAgICAgICAgIGBmaWx0ZXIgJHskZmlsdGVyLnNoYXBlWzJdfS5gKTtcbiAgY29udl91dGlsLmNoZWNrUGFkT25EaW1Sb3VuZGluZ01vZGUoJ2RlcHRod2lzZUNvbnYyZCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVJbnB1dHMgPSB7eDogeDRELCBmaWx0ZXI6ICRmaWx0ZXJ9O1xuICBjb25zdCBhdHRyczogRGVwdGh3aXNlQ29udjJkTmF0aXZlQXR0cnMgPVxuICAgICAge3N0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGV9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIERlcHRod2lzZUNvbnYyZE5hdGl2ZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcblxuICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGRlcHRod2lzZUNvbnYyZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZGVwdGh3aXNlQ29udjJkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Diag } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns a diagonal tensor with given diagonal values.\n *\n * Given a diagonal, this operation returns a tensor with the diagonal and\n * everything else padded with zeros.\n *\n * Assume the input has dimensions `[D1,..., Dk]`, then the output is a tensor\n * of rank 2k with dimensions `[D1,..., Dk, D1,..., Dk]`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * tf.diag(x).print()\n * ```\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4, 5, 6, 7, 8], [4, 2])\n *\n * tf.diag(x).print()\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction diag_(x) {\n const $x = convertToTensor(x, 'x', 'diag');\n const inputs = { x: $x };\n return ENGINE.runKernel(Diag, inputs);\n}\nexport const diag = /* @__PURE__ */ op({ diag_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2RpYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFTLEtBQUssQ0FBQyxDQUFTO0lBQ3RCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRW5DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtEaWFnLCBEaWFnSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGlhZ29uYWwgdGVuc29yIHdpdGggZ2l2ZW4gZGlhZ29uYWwgdmFsdWVzLlxuICpcbiAqIEdpdmVuIGEgZGlhZ29uYWwsIHRoaXMgb3BlcmF0aW9uIHJldHVybnMgYSB0ZW5zb3Igd2l0aCB0aGUgZGlhZ29uYWwgYW5kXG4gKiBldmVyeXRoaW5nIGVsc2UgcGFkZGVkIHdpdGggemVyb3MuXG4gKlxuICogQXNzdW1lIHRoZSBpbnB1dCBoYXMgZGltZW5zaW9ucyBgW0QxLC4uLiwgRGtdYCwgdGhlbiB0aGUgb3V0cHV0IGlzIGEgdGVuc29yXG4gKiBvZiByYW5rIDJrIHdpdGggZGltZW5zaW9ucyBgW0QxLC4uLiwgRGssIEQxLC4uLiwgRGtdYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqXG4gKiB0Zi5kaWFnKHgpLnByaW50KClcbiAqIGBgYFxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0sIFs0LCAyXSlcbiAqXG4gKiB0Zi5kaWFnKHgpLnByaW50KClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGRpYWdfKHg6IFRlbnNvcik6IFRlbnNvciB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2RpYWcnKTtcblxuICBjb25zdCBpbnB1dHM6IERpYWdJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKERpYWcsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRpYWcgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2RpYWdffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Dilation2D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the grayscale dilation over the input `x`.\n *\n * @param x The input tensor, rank 3 or rank 4 of shape\n * `[batch, height, width, depth]`. If rank 3, batch of 1 is assumed.\n * @param filter The filter tensor, rank 3, of shape\n * `[filterHeight, filterWidth, depth]`.\n * @param strides The strides of the sliding window for each dimension of the\n * input tensor: `[strideHeight, strideWidth]`.\n * If `strides` is a single number,\n * then `strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1*1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat Specify the data format of the input and output data.\n * Defaults to 'NHWC'. Only 'NHWC' is currently supported. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels].\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * for atrous morphological dilation. Defaults to `[1, 1]`. If `dilations`\n * is a single number, then `dilationHeight == dilationWidth`. If it is\n * greater than 1, then all values of `strides` must be 1.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction dilation2d_(x, filter, strides, pad, dilations = [1, 1], dataFormat = 'NHWC') {\n const $x = convertToTensor(x, 'x', 'dilation2d');\n const $filter = convertToTensor(filter, 'filter', 'dilation2d');\n util.assert($x.rank === 3 || $x.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ` +\n `${$x.rank}.`);\n util.assert($filter.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ` +\n `${$filter.rank}.`);\n util.assert(dataFormat === 'NHWC', () => `Error in dilation2d: Only NHWC is currently supported, ` +\n `but got dataFormat of ${dataFormat}`);\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n reshapedTo4D = true;\n }\n util.assert(x4D.shape[3] === $filter.shape[2], () => `Error in dilation2d: input and filter must have the same depth: ${x4D.shape[3]} vs ${$filter.shape[2]}`);\n const inputs = { x: x4D, filter: $filter };\n const attrs = { strides, pad, dilations };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Dilation2D, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const dilation2d = /* @__PURE__ */ op({ dilation2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlsYXRpb24yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2RpbGF0aW9uMmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsVUFBVSxFQUFvQyxNQUFNLGlCQUFpQixDQUFDO0FBSTlFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILFNBQVMsV0FBVyxDQUNoQixDQUFlLEVBQUUsTUFBMkIsRUFDNUMsT0FBZ0MsRUFBRSxHQUFtQixFQUNyRCxZQUFxQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDM0MsYUFBcUIsTUFBTTtJQUM3QixNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVoRSxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM5QixHQUFHLEVBQUUsQ0FBQywrREFBK0Q7UUFDakUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNsQixHQUFHLEVBQUUsQ0FBQywyREFBMkQ7UUFDN0QsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsTUFBTSxDQUNQLFVBQVUsS0FBSyxNQUFNLEVBQ3JCLEdBQUcsRUFBRSxDQUFDLHlEQUF5RDtRQUMzRCx5QkFBeUIsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUUvQyxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXpCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELFlBQVksR0FBRyxJQUFJLENBQUM7S0FDckI7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUNQLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDakMsR0FBRyxFQUFFLENBQUMsb0VBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBcUIsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztJQUMzRCxNQUFNLEtBQUssR0FBb0IsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBRXpELDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLFVBQVUsRUFBRSxNQUFtQyxFQUMvQyxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7RGlsYXRpb24yRCwgRGlsYXRpb24yREF0dHJzLCBEaWxhdGlvbjJESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBncmF5c2NhbGUgZGlsYXRpb24gb3ZlciB0aGUgaW5wdXQgYHhgLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIHJhbmsgMyBvciByYW5rIDQgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBkZXB0aF1gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0ZW5zb3IsIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGRlcHRoXWAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgc2xpZGluZyB3aW5kb3cgZm9yIGVhY2ggZGltZW5zaW9uIG9mIHRoZVxuICogICAgIGlucHV0IHRlbnNvcjogYFtzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoXWAuXG4gKiAgICAgSWYgYHN0cmlkZXNgIGlzIGEgc2luZ2xlIG51bWJlcixcbiAqICAgICB0aGVuIGBzdHJpZGVIZWlnaHQgPT0gc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobS5cbiAqICAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMSoxeDEuXG4gKiAgICAtIEZvciBtb3JlIGluZm8sIHNlZSB0aGlzIGd1aWRlOlxuICogICAgIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb25dKFxuICogICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGRhdGFGb3JtYXQgU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS5cbiAqICAgICAgRGVmYXVsdHMgdG8gJ05IV0MnLiBPbmx5ICdOSFdDJyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLiBXaXRoIHRoZVxuICogICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgICBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uXG4gKiBAcGFyYW0gZGlsYXRpb25zIFRoZSBkaWxhdGlvbiByYXRlczogYFtkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aF1gXG4gKiAgICAgaW4gd2hpY2ggd2Ugc2FtcGxlIGlucHV0IHZhbHVlcyBhY3Jvc3MgdGhlIGhlaWdodCBhbmQgd2lkdGggZGltZW5zaW9uc1xuICogICAgIGZvciBhdHJvdXMgbW9ycGhvbG9naWNhbCBkaWxhdGlvbi4gRGVmYXVsdHMgdG8gYFsxLCAxXWAuIElmIGBkaWxhdGlvbnNgXG4gKiAgICAgaXMgYSBzaW5nbGUgbnVtYmVyLCB0aGVuIGBkaWxhdGlvbkhlaWdodCA9PSBkaWxhdGlvbldpZHRoYC4gSWYgaXQgaXNcbiAqICAgICBncmVhdGVyIHRoYW4gMSwgdGhlbiBhbGwgdmFsdWVzIG9mIGBzdHJpZGVzYCBtdXN0IGJlIDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBkaWxhdGlvbjJkXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZmlsdGVyOiBUZW5zb3IzRHxUZW5zb3JMaWtlLFxuICAgIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLCBwYWQ6ICd2YWxpZCd8J3NhbWUnLFxuICAgIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXIgPSBbMSwgMV0sXG4gICAgZGF0YUZvcm1hdDogJ05IV0MnID0gJ05IV0MnKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2RpbGF0aW9uMmQnKTtcbiAgY29uc3QgJGZpbHRlciA9IGNvbnZlcnRUb1RlbnNvcihmaWx0ZXIsICdmaWx0ZXInLCAnZGlsYXRpb24yZCcpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gMyB8fCAkeC5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGRpbGF0aW9uMmQ6IGlucHV0IG11c3QgYmUgcmFuayAzIG9yIDQsIGJ1dCBnb3QgcmFuayBgICtcbiAgICAgICAgICBgJHskeC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkZmlsdGVyLnJhbmsgPT09IDMsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gZGlsYXRpb24yZDogZmlsdGVyIG11c3QgYmUgcmFuayAzLCBidXQgZ290IHJhbmsgYCArXG4gICAgICAgICAgYCR7JGZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBkYXRhRm9ybWF0ID09PSAnTkhXQycsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gZGlsYXRpb24yZDogT25seSBOSFdDIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQsIGAgK1xuICAgICAgICAgIGBidXQgZ290IGRhdGFGb3JtYXQgb2YgJHtkYXRhRm9ybWF0fWApO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuXG4gIGlmICgkeC5yYW5rID09PSAzKSB7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQuc2hhcGVbM10gPT09ICRmaWx0ZXIuc2hhcGVbMl0sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gZGlsYXRpb24yZDogIGlucHV0IGFuZCBmaWx0ZXIgbXVzdCBoYXZlIHRoZSBzYW1lIGRlcHRoOiAke1xuICAgICAgICAgIHg0RC5zaGFwZVszXX0gdnMgJHskZmlsdGVyLnNoYXBlWzJdfWApO1xuXG4gIGNvbnN0IGlucHV0czogRGlsYXRpb24yRElucHV0cyA9IHt4OiB4NEQsIGZpbHRlcjogJGZpbHRlcn07XG4gIGNvbnN0IGF0dHJzOiBEaWxhdGlvbjJEQXR0cnMgPSB7c3RyaWRlcywgcGFkLCBkaWxhdGlvbnN9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIERpbGF0aW9uMkQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGRpbGF0aW9uMmQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2RpbGF0aW9uMmRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Equal } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a == b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.equal(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction equal_(a, b) {\n let $a = convertToTensor(a, 'a', 'equal', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'equal', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Equal, inputs);\n}\nexport const equal = /* @__PURE__ */ op({ equal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9lcXVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFvQixFQUFFLENBQW9CO0lBQzVDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9ELElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9ELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFM0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtFcXVhbCwgRXF1YWxJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cnV0aCB2YWx1ZSBvZiAoYSA9PSBiKSBlbGVtZW50LXdpc2UuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzIsIDIsIDJdKTtcbiAqXG4gKiBhLmVxdWFsKGIpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTG9naWNhbCd9XG4gKi9cbmZ1bmN0aW9uIGVxdWFsXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2VxdWFsJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIGxldCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdlcXVhbCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IEVxdWFsSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRXF1YWwsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGVxdWFsID0gLyogQF9fUFVSRV9fICovIG9wKHtlcXVhbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Select } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { broadcastTo } from './broadcast_to';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the elements, either `a` or `b` depending on the `condition`.\n *\n * If the condition is true, select from `a`, otherwise select from `b`.\n *\n * ```js\n * const cond = tf.tensor1d([false, false, true], 'bool');\n * const a = tf.tensor1d([1 , 2, 3]);\n * const b = tf.tensor1d([-1, -2, -3]);\n *\n * a.where(cond, b).print();\n * ```\n *\n * @param condition The input condition. Must be of dtype bool.\n * @param a If `condition` is rank 1, `a` may have a higher rank but\n * its first dimension must match the size of `condition`.\n * @param b A tensor with the same dtype as `a` and with shape that is\n * compatible with `a`.\n * @return A tensor with same dtype as `a` and `b`, and shape that is\n * broadcastable from `a` and `b`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction where_(condition, a, b) {\n const $a = convertToTensor(a, 'a', 'where');\n const $b = convertToTensor(b, 'b', 'where');\n const $condition = convertToTensor(condition, 'condition', 'where', 'bool');\n // TODO: move this logic to forward function when the broadcastTo op is\n // implemented in WASM.\n // Find the broadcastable shape for $condition, $a, and $b.\n const broadcastShape = assertAndGetBroadcastShape(assertAndGetBroadcastShape($condition.shape, $a.shape), $b.shape);\n const $broadcastedCondition = broadcastTo($condition, broadcastShape);\n const $broadcastedA = broadcastTo($a, broadcastShape);\n const $broadcastedB = broadcastTo($b, broadcastShape);\n const inputs = {\n condition: $broadcastedCondition,\n t: $broadcastedA,\n e: $broadcastedB\n };\n return ENGINE.runKernel(Select, inputs);\n}\nexport const where = /* @__PURE__ */ op({ where_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy93aGVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxNQUFNLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxTQUE0QixFQUFFLENBQWUsRUFBRSxDQUFlO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RSx1RUFBdUU7SUFDdkUsdUJBQXVCO0lBQ3ZCLDJEQUEyRDtJQUMzRCxNQUFNLGNBQWMsR0FBRywwQkFBMEIsQ0FDN0MsMEJBQTBCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN0RSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFdEQsTUFBTSxNQUFNLEdBQWlCO1FBQzNCLFNBQVMsRUFBRSxxQkFBcUI7UUFDaEMsQ0FBQyxFQUFFLGFBQWE7UUFDaEIsQ0FBQyxFQUFFLGFBQWE7S0FDakIsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTZWxlY3QsIFNlbGVjdElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YnJvYWRjYXN0VG99IGZyb20gJy4vYnJvYWRjYXN0X3RvJztcbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGVsZW1lbnRzLCBlaXRoZXIgYGFgIG9yIGBiYCBkZXBlbmRpbmcgb24gdGhlIGBjb25kaXRpb25gLlxuICpcbiAqIElmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgc2VsZWN0IGZyb20gYGFgLCBvdGhlcndpc2Ugc2VsZWN0IGZyb20gYGJgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBjb25kID0gdGYudGVuc29yMWQoW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdib29sJyk7XG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEgLCAyLCAzXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWy0xLCAtMiwgLTNdKTtcbiAqXG4gKiBhLndoZXJlKGNvbmQsIGIpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBpbnB1dCBjb25kaXRpb24uIE11c3QgYmUgb2YgZHR5cGUgYm9vbC5cbiAqIEBwYXJhbSBhIElmIGBjb25kaXRpb25gIGlzIHJhbmsgMSwgYGFgIG1heSBoYXZlIGEgaGlnaGVyIHJhbmsgYnV0XG4gKiAgICAgaXRzIGZpcnN0IGRpbWVuc2lvbiBtdXN0IG1hdGNoIHRoZSBzaXplIG9mIGBjb25kaXRpb25gLlxuICogQHBhcmFtIGIgQSB0ZW5zb3Igd2l0aCB0aGUgc2FtZSBkdHlwZSBhcyBgYWAgYW5kIHdpdGggc2hhcGUgdGhhdCBpc1xuICogICAgIGNvbXBhdGlibGUgd2l0aCBgYWAuXG4gKiBAcmV0dXJuIEEgdGVuc29yIHdpdGggc2FtZSBkdHlwZSBhcyBgYWAgYW5kIGBiYCwgYW5kIHNoYXBlIHRoYXQgaXNcbiAqICAgICBicm9hZGNhc3RhYmxlIGZyb20gYGFgIGFuZCBgYmAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTG9naWNhbCd9XG4gKi9cbmZ1bmN0aW9uIHdoZXJlXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBjb25kaXRpb246IFRlbnNvcnxUZW5zb3JMaWtlLCBhOiBUfFRlbnNvckxpa2UsIGI6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICd3aGVyZScpO1xuICBjb25zdCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICd3aGVyZScpO1xuICBjb25zdCAkY29uZGl0aW9uID0gY29udmVydFRvVGVuc29yKGNvbmRpdGlvbiwgJ2NvbmRpdGlvbicsICd3aGVyZScsICdib29sJyk7XG4gIC8vIFRPRE86IG1vdmUgdGhpcyBsb2dpYyB0byBmb3J3YXJkIGZ1bmN0aW9uIHdoZW4gdGhlIGJyb2FkY2FzdFRvIG9wIGlzXG4gIC8vIGltcGxlbWVudGVkIGluIFdBU00uXG4gIC8vIEZpbmQgdGhlIGJyb2FkY2FzdGFibGUgc2hhcGUgZm9yICRjb25kaXRpb24sICRhLCBhbmQgJGIuXG4gIGNvbnN0IGJyb2FkY2FzdFNoYXBlID0gYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoXG4gICAgICBhc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZSgkY29uZGl0aW9uLnNoYXBlLCAkYS5zaGFwZSksICRiLnNoYXBlKTtcbiAgY29uc3QgJGJyb2FkY2FzdGVkQ29uZGl0aW9uID0gYnJvYWRjYXN0VG8oJGNvbmRpdGlvbiwgYnJvYWRjYXN0U2hhcGUpO1xuICBjb25zdCAkYnJvYWRjYXN0ZWRBID0gYnJvYWRjYXN0VG8oJGEsIGJyb2FkY2FzdFNoYXBlKTtcbiAgY29uc3QgJGJyb2FkY2FzdGVkQiA9IGJyb2FkY2FzdFRvKCRiLCBicm9hZGNhc3RTaGFwZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBTZWxlY3RJbnB1dHMgPSB7XG4gICAgY29uZGl0aW9uOiAkYnJvYWRjYXN0ZWRDb25kaXRpb24sXG4gICAgdDogJGJyb2FkY2FzdGVkQSxcbiAgICBlOiAkYnJvYWRjYXN0ZWRCXG4gIH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNlbGVjdCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgd2hlcmUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3doZXJlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { div } from './div';\nimport { equal } from './equal';\nimport { op } from './operation';\nimport { where } from './where';\nimport { zerosLike } from './zeros_like';\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting. Return 0\n * if denominator is 0.\n *\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n * const c = tf.tensor1d([0, 0, 0, 0]);\n *\n * a.divNoNan(b).print(); // or tf.divNoNan(a, b)\n * a.divNoNan(c).print(); // or tf.divNoNan(a, c)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n * const c = tf.scalar(0);\n *\n * a.divNoNan(b).print(); // or tf.divNoNan(a, b)\n * a.divNoNan(c).print(); // or tf.divNoNan(a, c)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction divNoNan_(a, b) {\n // TODO: Make this into its own kernel.\n let $a = convertToTensor(a, 'a', 'div');\n let $b = convertToTensor(b, 'b', 'div');\n [$a, $b] = makeTypesMatch($a, $b);\n const divResult = div($a, $b);\n const zeros = zerosLike(divResult);\n const bEqualsZero = equal($b, zeros);\n return where(bEqualsZero, zeros, divResult);\n}\nexport const divNoNan = /* @__PURE__ */ op({ divNoNan_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl2X25vX25hbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Rpdl9ub19uYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsU0FBUyxTQUFTLENBQ2QsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1Qyx1Q0FBdUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFNLENBQUM7QUFDbkQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Rpdn0gZnJvbSAnLi9kaXYnO1xuaW1wb3J0IHtlcXVhbH0gZnJvbSAnLi9lcXVhbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3doZXJlfSBmcm9tICcuL3doZXJlJztcbmltcG9ydCB7emVyb3NMaWtlfSBmcm9tICcuL3plcm9zX2xpa2UnO1xuXG4vKipcbiAqIERpdmlkZXMgdHdvIGB0Zi5UZW5zb3JgcyBlbGVtZW50LXdpc2UsIEEgLyBCLiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuIFJldHVybiAwXG4gKiBpZiBkZW5vbWluYXRvciBpcyAwLlxuICpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCA0LCA5LCAxNl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKiBjb25zdCBjID0gdGYudGVuc29yMWQoWzAsIDAsIDAsIDBdKTtcbiAqXG4gKiBhLmRpdk5vTmFuKGIpLnByaW50KCk7ICAvLyBvciB0Zi5kaXZOb05hbihhLCBiKVxuICogYS5kaXZOb05hbihjKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2Tm9OYW4oYSwgYylcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBCcm9hZGNhc3QgZGl2IGEgd2l0aCBiLlxuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2LCA4XSk7XG4gKiBjb25zdCBiID0gdGYuc2NhbGFyKDIpO1xuICogY29uc3QgYyA9IHRmLnNjYWxhcigwKTtcbiAqXG4gKiBhLmRpdk5vTmFuKGIpLnByaW50KCk7ICAvLyBvciB0Zi5kaXZOb05hbihhLCBiKVxuICogYS5kaXZOb05hbihjKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2Tm9OYW4oYSwgYylcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBhIFRoZSBmaXJzdCB0ZW5zb3IgYXMgdGhlIG51bWVyYXRvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yIGFzIHRoZSBkZW5vbWluYXRvci4gTXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlIGFzXG4gKiBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIGRpdk5vTmFuXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgLy8gVE9ETzogTWFrZSB0aGlzIGludG8gaXRzIG93biBrZXJuZWwuXG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdkaXYnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2RpdicpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgY29uc3QgZGl2UmVzdWx0ID0gZGl2KCRhLCAkYik7XG4gIGNvbnN0IHplcm9zID0gemVyb3NMaWtlKGRpdlJlc3VsdCk7XG4gIGNvbnN0IGJFcXVhbHNaZXJvID0gZXF1YWwoJGIsIHplcm9zKTtcbiAgcmV0dXJuIHdoZXJlKGJFcXVhbHNaZXJvLCB6ZXJvcywgZGl2UmVzdWx0KSBhcyBUO1xufVxuXG5leHBvcnQgY29uc3QgZGl2Tm9OYW4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2Rpdk5vTmFuX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { matMul } from './mat_mul';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the dot product of two matrices and/or vectors, `t1` and `t2`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor2d([[1, 2], [3, 4]]);\n * const c = tf.tensor2d([[1, 2, 3], [4, 5, 6]]);\n *\n * a.dot(b).print(); // or tf.dot(a, b)\n * b.dot(a).print();\n * b.dot(c).print();\n * ```\n * @param t1 The first tensor in the dot operation.\n * @param t2 The second tensor in the dot operation.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction dot_(t1, t2) {\n const $t1 = convertToTensor(t1, 't1', 'dot');\n const $t2 = convertToTensor(t2, 't2', 'dot');\n util.assert(($t1.rank === 1 || $t1.rank === 2) && ($t2.rank === 1 || $t2.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ` +\n `${$t1.rank} and ${$t2.rank}.`);\n const t1Inner = ($t1.rank === 1 ? $t1.size : $t1.shape[1]);\n const t2Inner = ($t2.rank === 1 ? $t2.size : $t2.shape[0]);\n util.assert(t1Inner === t2Inner, () => `Error in dot: inner dimensions of inputs must match, but got ` +\n `${t1Inner} and ${t2Inner}.`);\n if ($t1.rank === 1 && $t2.rank === 1) {\n const t12D = reshape($t1, [1, -1]);\n const t22D = reshape($t2, [-1, 1]);\n const t1t2 = matMul(t12D, t22D);\n return reshape(t1t2, []);\n }\n else if ($t1.rank === 1 && $t2.rank === 2) {\n const t12D = reshape($t1, [1, -1]);\n const t22D = reshape($t2, [$t2.shape[0], $t2.shape[1]]);\n const t1t2 = matMul(t12D, t22D);\n return reshape(t1t2, [t1t2.size]);\n }\n else if ($t1.rank === 2 && $t2.rank === 1) {\n const t22D = reshape($t2, [-1, 1]);\n const t1t2 = matMul($t1, t22D);\n return reshape(t1t2, [t1t2.size]);\n }\n else {\n const t22D = reshape($t2, [$t2.shape[0], $t2.shape[1]]);\n const t1t2 = matMul($t1, t22D);\n return t1t2;\n }\n}\nexport const dot = /* @__PURE__ */ op({ dot_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQVMsSUFBSSxDQUFDLEVBQXFCLEVBQUUsRUFBcUI7SUFDeEQsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0MsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFN0MsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUN4RSxHQUFHLEVBQUUsQ0FBQyw4REFBOEQ7UUFDaEUsR0FBRyxHQUFHLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLEtBQUssT0FBTyxFQUNuQixHQUFHLEVBQUUsQ0FBQywrREFBK0Q7UUFDakUsR0FBRyxPQUFPLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUV0QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzFCO1NBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMzQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMzQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDTCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcix9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHttYXRNdWx9IGZyb20gJy4vbWF0X211bCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBtYXRyaWNlcyBhbmQvb3IgdmVjdG9ycywgYHQxYCBhbmQgYHQyYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMmQoW1sxLCAyXSwgWzMsIDRdXSk7XG4gKiBjb25zdCBjID0gdGYudGVuc29yMmQoW1sxLCAyLCAzXSwgWzQsIDUsIDZdXSk7XG4gKlxuICogYS5kb3QoYikucHJpbnQoKTsgIC8vIG9yIHRmLmRvdChhLCBiKVxuICogYi5kb3QoYSkucHJpbnQoKTtcbiAqIGIuZG90KGMpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB0MSBUaGUgZmlyc3QgdGVuc29yIGluIHRoZSBkb3Qgb3BlcmF0aW9uLlxuICogQHBhcmFtIHQyIFRoZSBzZWNvbmQgdGVuc29yIGluIHRoZSBkb3Qgb3BlcmF0aW9uLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gZG90Xyh0MTogVGVuc29yfFRlbnNvckxpa2UsIHQyOiBUZW5zb3J8VGVuc29yTGlrZSk6IFRlbnNvciB7XG4gIGNvbnN0ICR0MSA9IGNvbnZlcnRUb1RlbnNvcih0MSwgJ3QxJywgJ2RvdCcpO1xuICBjb25zdCAkdDIgPSBjb252ZXJ0VG9UZW5zb3IodDIsICd0MicsICdkb3QnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICgkdDEucmFuayA9PT0gMSB8fCAkdDEucmFuayA9PT0gMikgJiYgKCR0Mi5yYW5rID09PSAxIHx8ICR0Mi5yYW5rID09PSAyKSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBkb3Q6IGlucHV0cyBtdXN0IGFsbCBiZSByYW5rIDEgb3IgMiwgYnV0IGdvdCByYW5rcyBgICtcbiAgICAgICAgICBgJHskdDEucmFua30gYW5kICR7JHQyLnJhbmt9LmApO1xuXG4gIGNvbnN0IHQxSW5uZXIgPSAoJHQxLnJhbmsgPT09IDEgPyAkdDEuc2l6ZSA6ICR0MS5zaGFwZVsxXSk7XG4gIGNvbnN0IHQySW5uZXIgPSAoJHQyLnJhbmsgPT09IDEgPyAkdDIuc2l6ZSA6ICR0Mi5zaGFwZVswXSk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB0MUlubmVyID09PSB0MklubmVyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGRvdDogaW5uZXIgZGltZW5zaW9ucyBvZiBpbnB1dHMgbXVzdCBtYXRjaCwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgJHt0MUlubmVyfSBhbmQgJHt0MklubmVyfS5gKTtcblxuICBpZiAoJHQxLnJhbmsgPT09IDEgJiYgJHQyLnJhbmsgPT09IDEpIHtcbiAgICBjb25zdCB0MTJEID0gcmVzaGFwZSgkdDEsIFsxLCAtMV0pO1xuICAgIGNvbnN0IHQyMkQgPSByZXNoYXBlKCR0MiwgWy0xLCAxXSk7XG4gICAgY29uc3QgdDF0MiA9IG1hdE11bCh0MTJELCB0MjJEKTtcbiAgICByZXR1cm4gcmVzaGFwZSh0MXQyLCBbXSk7XG4gIH0gZWxzZSBpZiAoJHQxLnJhbmsgPT09IDEgJiYgJHQyLnJhbmsgPT09IDIpIHtcbiAgICBjb25zdCB0MTJEID0gcmVzaGFwZSgkdDEsIFsxLCAtMV0pO1xuICAgIGNvbnN0IHQyMkQgPSByZXNoYXBlKCR0MiwgWyR0Mi5zaGFwZVswXSwgJHQyLnNoYXBlWzFdXSk7XG4gICAgY29uc3QgdDF0MiA9IG1hdE11bCh0MTJELCB0MjJEKTtcbiAgICByZXR1cm4gcmVzaGFwZSh0MXQyLCBbdDF0Mi5zaXplXSk7XG4gIH0gZWxzZSBpZiAoJHQxLnJhbmsgPT09IDIgJiYgJHQyLnJhbmsgPT09IDEpIHtcbiAgICBjb25zdCB0MjJEID0gcmVzaGFwZSgkdDIsIFstMSwgMV0pO1xuICAgIGNvbnN0IHQxdDIgPSBtYXRNdWwoJHQxLCB0MjJEKTtcbiAgICByZXR1cm4gcmVzaGFwZSh0MXQyLCBbdDF0Mi5zaXplXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdDIyRCA9IHJlc2hhcGUoJHQyLCBbJHQyLnNoYXBlWzBdLCAkdDIuc2hhcGVbMV1dKTtcbiAgICBjb25zdCB0MXQyID0gbWF0TXVsKCR0MSwgdDIyRCk7XG4gICAgcmV0dXJuIHQxdDI7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRvdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZG90X30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Einsum } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Tensor contraction over specified indices and outer product.\n *\n * `einsum` allows defining Tensors by defining their element-wise computation.\n * This computation is based on\n * [Einstein summation](https://en.wikipedia.org/wiki/Einstein_notation).\n *\n * Some special cases include:\n *\n * Matrix multiplication:\n * ```js\n * const x = tf.tensor2d([[1, 2, 3], [4, 5, 6]]);\n * const y = tf.tensor2d([[0, 1], [2, 3], [4, 5]]);\n * x.print();\n * y.print();\n * tf.einsum('ij,jk->ik', x, y).print();\n * ```\n *\n * Dot product:\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n * const y = tf.tensor1d([0, 1, 2]);\n * x.print();\n * y.print();\n * tf.einsum('i,i->', x, y).print();\n * ```\n *\n * Batch dot product:\n * ```js\n * const x = tf.tensor2d([[1, 2, 3], [4, 5, 6]]);\n * const y = tf.tensor2d([[0, 1, 2], [3, 4, 5]]);\n * x.print();\n * y.print();\n * tf.einsum('bi,bi->b', x, y).print();\n * ```\n *\n * Outer prouduct:\n * ```js\n * const x = tf.tensor1d([1, 3, 5]);\n * const y = tf.tensor1d([2, 4, 6]);\n * x.print();\n * y.print();\n * tf.einsum('i,j->ij', x, y).print();\n * ```\n *\n * Matrix transpose:\n * ```js\n * const x = tf.tensor2d([[1, 2], [3, 4]]);\n * x.print();\n * tf.einsum('ij->ji', x).print();\n * ```\n *\n * Batch matrix transpose:\n * ```js\n * const x = tf.tensor3d([[[1, 2], [3, 4]], [[-1, -2], [-3, -4]]]);\n * x.print();\n * tf.einsum('bij->bji', x).print();\n * ```\n *\n * Limitations:\n *\n * This implementation of einsum has the following limitations:\n *\n * - Does not support >2 input tensors.\n * - Does not support duplicate axes for any given input tensor. E.g., equation\n * 'ii->' is not supported.\n * - The `...` notation is not supported.\n *\n * @param equation a string describing the contraction, in the same format as\n * [numpy.einsum](https://numpy.org/doc/stable/reference/generated/numpy.einsum.html).\n * @param tensors the input(s) to contract (each one a Tensor), whose shapes\n * should be consistent with equation.\n * @returns The output tensor.\n *\n * @doc {heading: 'Tensors', subheading: 'Matrices'}\n */\nexport function einsum_(equation, ...tensors) {\n const $tensors = tensors.map((t, i) => convertToTensor(t, `tensors${i}`, 'einsum'));\n const attrs = { equation };\n return ENGINE.runKernel(Einsum, $tensors, attrs);\n}\nexport const einsum = /* @__PURE__ */ op({ einsum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWluc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZWluc3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBSXBELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLFFBQWdCLEVBQUUsR0FBRyxPQUFpQjtJQUM1RCxNQUFNLFFBQVEsR0FDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdkUsTUFBTSxLQUFLLEdBQWdCLEVBQUMsUUFBUSxFQUFDLENBQUM7SUFDdEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixNQUFNLEVBQUUsUUFBcUMsRUFDN0MsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtFaW5zdW0sIEVpbnN1bUF0dHJzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFRlbnNvciBjb250cmFjdGlvbiBvdmVyIHNwZWNpZmllZCBpbmRpY2VzIGFuZCBvdXRlciBwcm9kdWN0LlxuICpcbiAqIGBlaW5zdW1gIGFsbG93cyBkZWZpbmluZyBUZW5zb3JzIGJ5IGRlZmluaW5nIHRoZWlyIGVsZW1lbnQtd2lzZSBjb21wdXRhdGlvbi5cbiAqIFRoaXMgY29tcHV0YXRpb24gaXMgYmFzZWQgb25cbiAqIFtFaW5zdGVpbiBzdW1tYXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VpbnN0ZWluX25vdGF0aW9uKS5cbiAqXG4gKiBTb21lIHNwZWNpYWwgY2FzZXMgaW5jbHVkZTpcbiAqXG4gKiBNYXRyaXggbXVsdGlwbGljYXRpb246XG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjJkKFtbMSwgMiwgM10sIFs0LCA1LCA2XV0pO1xuICogY29uc3QgeSA9IHRmLnRlbnNvcjJkKFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVdXSk7XG4gKiB4LnByaW50KCk7XG4gKiB5LnByaW50KCk7XG4gKiB0Zi5laW5zdW0oJ2lqLGprLT5paycsIHgsIHkpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBEb3QgcHJvZHVjdDpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IHkgPSB0Zi50ZW5zb3IxZChbMCwgMSwgMl0pO1xuICogeC5wcmludCgpO1xuICogeS5wcmludCgpO1xuICogdGYuZWluc3VtKCdpLGktPicsIHgsIHkpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBCYXRjaCBkb3QgcHJvZHVjdDpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoW1sxLCAyLCAzXSwgWzQsIDUsIDZdXSk7XG4gKiBjb25zdCB5ID0gdGYudGVuc29yMmQoW1swLCAxLCAyXSwgWzMsIDQsIDVdXSk7XG4gKiB4LnByaW50KCk7XG4gKiB5LnByaW50KCk7XG4gKiB0Zi5laW5zdW0oJ2JpLGJpLT5iJywgeCwgeSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIE91dGVyIHByb3VkdWN0OlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMywgNV0pO1xuICogY29uc3QgeSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2XSk7XG4gKiB4LnByaW50KCk7XG4gKiB5LnByaW50KCk7XG4gKiB0Zi5laW5zdW0oJ2ksai0+aWonLCB4LCB5KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogTWF0cml4IHRyYW5zcG9zZTpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoW1sxLCAyXSwgWzMsIDRdXSk7XG4gKiB4LnByaW50KCk7XG4gKiB0Zi5laW5zdW0oJ2lqLT5qaScsIHgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBCYXRjaCBtYXRyaXggdHJhbnNwb3NlOlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IzZChbW1sxLCAyXSwgWzMsIDRdXSwgW1stMSwgLTJdLCBbLTMsIC00XV1dKTtcbiAqIHgucHJpbnQoKTtcbiAqIHRmLmVpbnN1bSgnYmlqLT5iamknLCB4KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogTGltaXRhdGlvbnM6XG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBlaW5zdW0gaGFzIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6XG4gKlxuICogLSBEb2VzIG5vdCBzdXBwb3J0ID4yIGlucHV0IHRlbnNvcnMuXG4gKiAtIERvZXMgbm90IHN1cHBvcnQgZHVwbGljYXRlIGF4ZXMgZm9yIGFueSBnaXZlbiBpbnB1dCB0ZW5zb3IuIEUuZy4sIGVxdWF0aW9uXG4gKiAgICdpaS0+JyBpcyBub3Qgc3VwcG9ydGVkLlxuICogLSBUaGUgYC4uLmAgbm90YXRpb24gaXMgbm90IHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gZXF1YXRpb24gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY29udHJhY3Rpb24sIGluIHRoZSBzYW1lIGZvcm1hdCBhc1xuICogW251bXB5LmVpbnN1bV0oaHR0cHM6Ly9udW1weS5vcmcvZG9jL3N0YWJsZS9yZWZlcmVuY2UvZ2VuZXJhdGVkL251bXB5LmVpbnN1bS5odG1sKS5cbiAqIEBwYXJhbSB0ZW5zb3JzIHRoZSBpbnB1dChzKSB0byBjb250cmFjdCAoZWFjaCBvbmUgYSBUZW5zb3IpLCB3aG9zZSBzaGFwZXNcbiAqICAgICBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGVxdWF0aW9uLlxuICogQHJldHVybnMgVGhlIG91dHB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnTWF0cmljZXMnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZWluc3VtXyhlcXVhdGlvbjogc3RyaW5nLCAuLi50ZW5zb3JzOiBUZW5zb3JbXSk6IFRlbnNvciB7XG4gIGNvbnN0ICR0ZW5zb3JzID1cbiAgICAgIHRlbnNvcnMubWFwKCh0LCBpKSA9PiBjb252ZXJ0VG9UZW5zb3IodCwgYHRlbnNvcnMke2l9YCwgJ2VpbnN1bScpKTtcbiAgY29uc3QgYXR0cnM6IEVpbnN1bUF0dHJzID0ge2VxdWF0aW9ufTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBFaW5zdW0sICR0ZW5zb3JzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBlaW5zdW0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2VpbnN1bV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Elu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes exponential linear element-wise: `x > 0 ? x : (e ^ x) - 1`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 1, -3, 2]);\n *\n * x.elu().print(); // or tf.elu(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction elu_(x) {\n const $x = convertToTensor(x, 'x', 'elu', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Elu, inputs);\n}\nexport const elu = /* @__PURE__ */ op({ elu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWx1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZWx1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtFbHUsIEVsdUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBleHBvbmVudGlhbCBsaW5lYXIgZWxlbWVudC13aXNlOiBgeCA+IDAgPyB4IDogKGUgXiB4KSAtIDFgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAxLCAtMywgMl0pO1xuICpcbiAqIHguZWx1KCkucHJpbnQoKTsgIC8vIG9yIHRmLmVsdSh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBlbHVfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdlbHUnLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogRWx1SW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChFbHUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGVsdSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZWx1X30pO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { arraysEqualWithNull } from '../util_base';\nimport { op } from './operation';\n/**\n * Checks the input tensor mathes the given shape.\n *\n * Given an input tensor, returns a new tensor with the same values as the\n * input tensor with shape `shape`.\n *\n * The method supports the null value in tensor. It will still check the shapes,\n * and null is a placeholder.\n *\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const y = tf.tensor1d([1, null, 3, 4]);\n * const z = tf.tensor2d([1, 2, 3, 4], [2,2]);\n * tf.ensureShape(x, [4]).print();\n * tf.ensureShape(y, [4]).print();\n * tf.ensureShape(z, [null, 2]).print();\n * ```\n *\n * @param x The input tensor to be ensured.\n * @param shape A TensorShape representing the shape of this tensor, an array\n * or null.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction ensureShape_(x, shape) {\n const $x = convertToTensor(x, 'x', 'ensureShape', 'string_or_numeric');\n if (!arraysEqualWithNull($x.shape, shape)) {\n throw new Error(`EnsureShape: Shape of tensor ${$x.shape} is not compatible with expected shape ${shape}`);\n }\n return x;\n}\nexport const ensureShape = /* @__PURE__ */ op({ ensureShape_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5zdXJlX3NoYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZW5zdXJlX3NoYXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFakQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsU0FBUyxZQUFZLENBQWlCLENBQVMsRUFBRSxLQUFrQjtJQUNqRSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtRQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUNaLEVBQUUsQ0FBQyxLQUFLLDBDQUEwQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2hFO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rLCBTaGFwZU1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthcnJheXNFcXVhbFdpdGhOdWxsfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBpbnB1dCB0ZW5zb3IgbWF0aGVzIHRoZSBnaXZlbiBzaGFwZS5cbiAqXG4gKiBHaXZlbiBhbiBpbnB1dCB0ZW5zb3IsIHJldHVybnMgYSBuZXcgdGVuc29yIHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICogaW5wdXQgdGVuc29yIHdpdGggc2hhcGUgYHNoYXBlYC5cbiAqXG4gKiBUaGUgbWV0aG9kIHN1cHBvcnRzIHRoZSBudWxsIHZhbHVlIGluIHRlbnNvci4gSXQgd2lsbCBzdGlsbCBjaGVjayB0aGUgc2hhcGVzLFxuICogYW5kIG51bGwgaXMgYSBwbGFjZWhvbGRlci5cbiAqXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICogY29uc3QgeSA9IHRmLnRlbnNvcjFkKFsxLCBudWxsLCAzLCA0XSk7XG4gKiBjb25zdCB6ID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwyXSk7XG4gKiB0Zi5lbnN1cmVTaGFwZSh4LCBbNF0pLnByaW50KCk7XG4gKiB0Zi5lbnN1cmVTaGFwZSh5LCBbNF0pLnByaW50KCk7XG4gKiB0Zi5lbnN1cmVTaGFwZSh6LCBbbnVsbCwgMl0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIHRvIGJlIGVuc3VyZWQuXG4gKiBAcGFyYW0gc2hhcGUgQSBUZW5zb3JTaGFwZSByZXByZXNlbnRpbmcgdGhlIHNoYXBlIG9mIHRoaXMgdGVuc29yLCBhbiBhcnJheVxuICogICAgIG9yIG51bGwuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gZW5zdXJlU2hhcGVfPFIgZXh0ZW5kcyBSYW5rPih4OiBUZW5zb3IsIHNoYXBlOiBTaGFwZU1hcFtSXSk6IFRlbnNvciB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2Vuc3VyZVNoYXBlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIGlmICghYXJyYXlzRXF1YWxXaXRoTnVsbCgkeC5zaGFwZSwgc2hhcGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFbnN1cmVTaGFwZTogU2hhcGUgb2YgdGVuc29yICR7XG4gICAgICAgICR4LnNoYXBlfSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGV4cGVjdGVkIHNoYXBlICR7c2hhcGV9YCk7XG4gIH1cblxuICByZXR1cm4geDtcbn1cbmV4cG9ydCBjb25zdCBlbnN1cmVTaGFwZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZW5zdXJlU2hhcGVffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Erf } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Computes Gauss error function of the input `tf.Tensor` element-wise:\n * `erf(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, .1, -.1, .7]);\n *\n * x.erf().print(); // or tf.erf(x);\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction erf_(x) {\n let $x = convertToTensor(x, 'x', 'erf');\n util.assert($x.dtype === 'int32' || $x.dtype === 'float32', () => 'Input dtype must be `int32` or `float32`.');\n if ($x.dtype === 'int32') {\n $x = cast($x, 'float32');\n }\n const inputs = { x: $x };\n return ENGINE.runKernel(Erf, inputs);\n}\nexport const erf = /* @__PURE__ */ op({ erf_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZXJmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFDOUMsR0FBRyxFQUFFLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUV2RCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUFFO1FBQ3hCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzFCO0lBRUQsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0VyZiwgRXJmSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBHYXVzcyBlcnJvciBmdW5jdGlvbiBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOlxuICogYGVyZih4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCAuMSwgLS4xLCAuN10pO1xuICpcbiAqIHguZXJmKCkucHJpbnQoKTsgLy8gb3IgdGYuZXJmKHgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBlcmZfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnZXJmJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHguZHR5cGUgPT09ICdpbnQzMicgfHwgJHguZHR5cGUgPT09ICdmbG9hdDMyJyxcbiAgICAgICgpID0+ICdJbnB1dCBkdHlwZSBtdXN0IGJlIGBpbnQzMmAgb3IgYGZsb2F0MzJgLicpO1xuXG4gIGlmICgkeC5kdHlwZSA9PT0gJ2ludDMyJykge1xuICAgICR4ID0gY2FzdCgkeCwgJ2Zsb2F0MzInKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogRXJmSW5wdXRzID0ge3g6ICR4fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRXJmLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgZXJmID0gLyogQF9fUFVSRV9fICovIG9wKHtlcmZffSk7XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\n/**\n * Returns true if the axis specifies the inner most dimensions of the\n * array.\n */\nexport function axesAreInnerMostDims(axes, rank) {\n for (let i = 0; i < axes.length; ++i) {\n if (axes[axes.length - i - 1] !== rank - 1 - i) {\n return false;\n }\n }\n return true;\n}\nexport function combineLocations(outputLoc, reduceLoc, axes) {\n const rank = outputLoc.length + reduceLoc.length;\n const loc = [];\n let outIdx = 0;\n let reduceIdx = 0;\n for (let dim = 0; dim < rank; dim++) {\n if (axes.indexOf(dim) === -1) {\n loc.push(outputLoc[outIdx++]);\n }\n else {\n loc.push(reduceLoc[reduceIdx++]);\n }\n }\n return loc;\n}\nexport function computeOutAndReduceShapes(aShape, axes) {\n const outShape = [];\n const rank = aShape.length;\n for (let dim = 0; dim < rank; dim++) {\n if (axes.indexOf(dim) === -1) {\n outShape.push(aShape[dim]);\n }\n }\n const reduceShape = axes.map(dim => aShape[dim]);\n return [outShape, reduceShape];\n}\nexport function expandShapeToKeepDim(shape, axes) {\n const reduceSubShape = axes.map(x => 1);\n return combineLocations(shape, reduceSubShape, axes);\n}\nexport function assertAxesAreInnerMostDims(msg, axes, rank) {\n util.assert(axesAreInnerMostDims(axes, rank), () => `${msg} supports only inner-most axes for now. ` +\n `Got axes ${axes} and rank-${rank} input.`);\n}\n/**\n * Returns the axes permutation to be used with `tf.transpose`, if such\n * permutation is necessary. Otherwise it returns null. This method is used by\n * operations that operate only on inner-most axes.\n */\nexport function getAxesPermutation(axes, rank) {\n if (axesAreInnerMostDims(axes, rank)) {\n return null;\n }\n const result = [];\n for (let i = 0; i < rank; ++i) {\n if (axes.indexOf(i) === -1) {\n result.push(i);\n }\n }\n axes.forEach(axis => result.push(axis));\n return result;\n}\n/** Returns the axes permutation that undoes the original permutation. */\nexport function getUndoAxesPermutation(axes) {\n return axes.map((axis, i) => [i, axis])\n .sort((a, b) => a[1] - b[1])\n .map(x => x[0]);\n}\nexport function getInnerMostAxes(numAxes, rank) {\n const res = [];\n for (let i = rank - numAxes; i < rank; ++i) {\n res.push(i);\n }\n return res;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpc191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYXhpc191dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUFjLEVBQUUsSUFBWTtJQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNwQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QyxPQUFPLEtBQUssQ0FBQztTQUNkO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLFNBQW1CLEVBQUUsU0FBbUIsRUFBRSxJQUFjO0lBQzFELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDZixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDaEIsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNyQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9CO2FBQU07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QUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMxQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2I7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBheGlzIHNwZWNpZmllcyB0aGUgaW5uZXIgbW9zdCBkaW1lbnNpb25zIG9mIHRoZVxuICogYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBheGVzQXJlSW5uZXJNb3N0RGltcyhheGVzOiBudW1iZXJbXSwgcmFuazogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXhlcy5sZW5ndGg7ICsraSkge1xuICAgIGlmIChheGVzW2F4ZXMubGVuZ3RoIC0gaSAtIDFdICE9PSByYW5rIC0gMSAtIGkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTG9jYXRpb25zKFxuICAgIG91dHB1dExvYzogbnVtYmVyW10sIHJlZHVjZUxvYzogbnVtYmVyW10sIGF4ZXM6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCByYW5rID0gb3V0cHV0TG9jLmxlbmd0aCArIHJlZHVjZUxvYy5sZW5ndGg7XG4gIGNvbnN0IGxvYyA9IFtdO1xuICBsZXQgb3V0SWR4ID0gMDtcbiAgbGV0IHJlZHVjZUlkeCA9IDA7XG4gIMKgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IHJhbms7IGRpbSsrKSB7XG4gICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgbG9jLnB1c2gob3V0cHV0TG9jW291dElkeCsrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYy5wdXNoKHJlZHVjZUxvY1tyZWR1Y2VJZHgrK10pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbG9jO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU91dEFuZFJlZHVjZVNoYXBlcyhcbiAgICBhU2hhcGU6IG51bWJlcltdLCBheGVzOiBudW1iZXJbXSk6IFtudW1iZXJbXSwgbnVtYmVyW11dIHtcbiAgY29uc3Qgb3V0U2hhcGUgPSBbXTtcbiAgY29uc3QgcmFuayA9IGFTaGFwZS5sZW5ndGg7XG4gIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IHJhbms7IGRpbSsrKSB7XG4gICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgb3V0U2hhcGUucHVzaChhU2hhcGVbZGltXSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlZHVjZVNoYXBlID0gYXhlcy5tYXAoZGltID0+IGFTaGFwZVtkaW1dKTtcbiAgcmV0dXJuIFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kU2hhcGVUb0tlZXBEaW0oXG4gICAgc2hhcGU6IG51bWJlcltdLCBheGVzOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgcmVkdWNlU3ViU2hhcGUgPSBheGVzLm1hcCh4ID0+IDEpO1xuICByZXR1cm4gY29tYmluZUxvY2F0aW9ucyhzaGFwZSwgcmVkdWNlU3ViU2hhcGUsIGF4ZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoXG4gICAgbXNnOiBzdHJpbmcsIGF4ZXM6IG51bWJlcltdLCByYW5rOiBudW1iZXIpOiB2b2lkIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBheGVzQXJlSW5uZXJNb3N0RGltcyhheGVzLCByYW5rKSxcbiAgICAgICgpID0+IGAke21zZ30gc3VwcG9ydHMgb25seSBpbm5lci1tb3N0IGF4ZXMgZm9yIG5vdy4gYCArXG4gICAgICAgICAgYEdvdCBheGVzICR7YXhlc30gYW5kIHJhbmstJHtyYW5rfSBpbnB1dC5gKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBheGVzIHBlcm11dGF0aW9uIHRvIGJlIHVzZWQgd2l0aCBgdGYudHJhbnNwb3NlYCwgaWYgc3VjaFxuICogcGVybXV0YXRpb24gaXMgbmVjZXNzYXJ5LiBPdGhlcndpc2UgaXQgcmV0dXJucyBudWxsLiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5XG4gKiBvcGVyYXRpb25zIHRoYXQgb3BlcmF0ZSBvbmx5IG9uIGlubmVyLW1vc3QgYXhlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF4ZXNQZXJtdXRhdGlvbihheGVzOiBudW1iZXJbXSwgcmFuazogbnVtYmVyKTogbnVtYmVyW118XG4gICAgbnVsbCB7XG4gIGlmIChheGVzQXJlSW5uZXJNb3N0RGltcyhheGVzLCByYW5rKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rOyArK2kpIHtcbiAgICBpZiAoYXhlcy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgfVxuICB9XG4gIGF4ZXMuZm9yRWFjaChheGlzID0+IHJlc3VsdC5wdXNoKGF4aXMpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFJldHVybnMgdGhlIGF4ZXMgcGVybXV0YXRpb24gdGhhdCB1bmRvZXMgdGhlIG9yaWdpbmFsIHBlcm11dGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuZG9BeGVzUGVybXV0YXRpb24oYXhlczogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIHJldHVybiBheGVzLm1hcCgoYXhpcywgaSkgPT4gW2ksIGF4aXNdKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVxuICAgICAgLm1hcCh4ID0+IHhbMF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5uZXJNb3N0QXhlcyhudW1BeGVzOiBudW1iZXIsIHJhbms6IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3QgcmVzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gcmFuayAtIG51bUF4ZXM7IGkgPCByYW5rOyArK2kpIHtcbiAgICByZXMucHVzaChpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Max } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the maximum of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.max().print(); // or tf.max(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.max(axis).print(); // or tf.max(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction max_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'max');\n const inputs = { x: $x };\n const attrs = { reductionIndices: axis, keepDims };\n return ENGINE.runKernel(Max, inputs, attrs);\n}\nexport const max = /* @__PURE__ */ op({ max_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbWF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFhLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBRTNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsR0FBRyxFQUFFLE1BQW1DLEVBQ3hDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TWF4LCBNYXhBdHRycywgTWF4SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1heGltdW0gb2YgZWxlbWVudHMgYWNyb3NzIGRpbWVuc2lvbnMgb2YgYSBgdGYuVGVuc29yYC5cbiAqXG4gKiBSZWR1Y2VzIHRoZSBpbnB1dCBhbG9uZyB0aGUgZGltZW5zaW9ucyBnaXZlbiBpbiBgYXhlc2AuIFVubGVzcyBga2VlcERpbXNgXG4gKiBpcyB0cnVlLCB0aGUgcmFuayBvZiB0aGUgYHRmLlRlbnNvcmAgaXMgcmVkdWNlZCBieSAxIGZvciBlYWNoIGVudHJ5IGluXG4gKiBgYXhlc2AuIElmIGBrZWVwRGltc2AgaXMgdHJ1ZSwgdGhlIHJlZHVjZWQgZGltZW5zaW9ucyBhcmUgcmV0YWluZWQgd2l0aFxuICogbGVuZ3RoIDEuIElmIGBheGVzYCBoYXMgbm8gZW50cmllcywgYWxsIGRpbWVuc2lvbnMgYXJlIHJlZHVjZWQsIGFuZCBhXG4gKiBgdGYuVGVuc29yYCB3aXRoIGEgc2luZ2xlIGVsZW1lbnQgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIHgubWF4KCkucHJpbnQoKTsgIC8vIG9yIHRmLm1heCh4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4Lm1heChheGlzKS5wcmludCgpOyAgLy8gb3IgdGYubWF4KHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlc1xuICogICAgIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggc2l6ZSAxLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIG1heF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXM6IG51bWJlcnxudW1iZXJbXSA9IG51bGwsIGtlZXBEaW1zID0gZmFsc2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbWF4Jyk7XG5cbiAgY29uc3QgaW5wdXRzOiBNYXhJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogTWF4QXR0cnMgPSB7cmVkdWN0aW9uSW5kaWNlczogYXhpcywga2VlcERpbXN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgTWF4LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IG1heCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bWF4X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Min } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the minimum value from the input.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the array is reduced by 1 for each entry in `axes`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axes` has no entries, all dimensions are reduced, and an array with a\n * single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.min().print(); // or tf.min(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.min(axis).print(); // or tf.min(x, axis)\n * ```\n *\n * @param x The input Tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction min_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'min');\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(Min, inputs, attrs);\n}\nexport const min = /* @__PURE__ */ op({ min_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFhLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBRXpDLDBEQUEwRDtJQUMxRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ1osR0FBRyxFQUFFLE1BQW1DLEVBQ3hDLEtBQWdDLENBQU0sQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01pbiwgTWluQXR0cnMsIE1pbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBtaW5pbXVtIHZhbHVlIGZyb20gdGhlIGlucHV0LlxuICpcbiAqIFJlZHVjZXMgdGhlIGlucHV0IGFsb25nIHRoZSBkaW1lbnNpb25zIGdpdmVuIGluIGBheGVzYC4gVW5sZXNzIGBrZWVwRGltc2BcbiAqIGlzIHRydWUsIHRoZSByYW5rIG9mIHRoZSBhcnJheSBpcyByZWR1Y2VkIGJ5IDEgZm9yIGVhY2ggZW50cnkgaW4gYGF4ZXNgLlxuICogSWYgYGtlZXBEaW1zYCBpcyB0cnVlLCB0aGUgcmVkdWNlZCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZCB3aXRoIGxlbmd0aCAxLlxuICogSWYgYGF4ZXNgIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGFuIGFycmF5IHdpdGggYVxuICogc2luZ2xlIGVsZW1lbnQgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIHgubWluKCkucHJpbnQoKTsgIC8vIG9yIHRmLm1pbih4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4Lm1pbihheGlzKS5wcmludCgpOyAgLy8gb3IgdGYubWluKHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlc1xuICogICAgIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggc2l6ZSAxLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIG1pbl88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXM6IG51bWJlcnxudW1iZXJbXSA9IG51bGwsIGtlZXBEaW1zID0gZmFsc2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbWluJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBNaW5JbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogTWluQXR0cnMgPSB7YXhpcywga2VlcERpbXN9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgTWluLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcbn1cblxuZXhwb3J0IGNvbnN0IG1pbiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bWluX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sum } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Computes the sum of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If axes has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.sum().print(); // or tf.sum(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.sum(axis).print(); // or tf.sum(x, axis)\n * ```\n *\n * @param x The input tensor to compute the sum over. If the dtype is `bool`\n * it will be converted to `int32` and the output dtype will be `int32`.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction sum_(x, axis = null, keepDims = false) {\n let $x = convertToTensor(x, 'x', 'sum');\n if ($x.dtype === 'bool') {\n $x = cast($x, 'int32');\n }\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(Sum, inputs, attrs);\n}\nexport const sum = /* @__PURE__ */ op({ sum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7UUFDdkIsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDeEI7SUFFRCxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBYSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFBRSxNQUFtQyxFQUN4QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTdW0sIFN1bUF0dHJzLCBTdW1JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgc3VtIG9mIGVsZW1lbnRzIGFjcm9zcyBkaW1lbnNpb25zIG9mIGEgYHRmLlRlbnNvcmAuXG4gKlxuICogUmVkdWNlcyB0aGUgaW5wdXQgYWxvbmcgdGhlIGRpbWVuc2lvbnMgZ2l2ZW4gaW4gYGF4ZXNgLiBVbmxlc3MgYGtlZXBEaW1zYFxuICogaXMgdHJ1ZSwgdGhlIHJhbmsgb2YgdGhlIGB0Zi5UZW5zb3JgIGlzIHJlZHVjZWQgYnkgMSBmb3IgZWFjaCBlbnRyeSBpblxuICogYGF4ZXNgLiBJZiBga2VlcERpbXNgIGlzIHRydWUsIHRoZSByZWR1Y2VkIGRpbWVuc2lvbnMgYXJlIHJldGFpbmVkIHdpdGhcbiAqIGxlbmd0aCAxLiBJZiBheGVzIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGFcbiAqIGB0Zi5UZW5zb3JgIHdpdGggYSBzaW5nbGUgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKlxuICogeC5zdW0oKS5wcmludCgpOyAgLy8gb3IgdGYuc3VtKHgpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjJkKFsxLCAyLCAzLCA0XSwgWzIsIDJdKTtcbiAqXG4gKiBjb25zdCBheGlzID0gMTtcbiAqIHguc3VtKGF4aXMpLnByaW50KCk7ICAvLyBvciB0Zi5zdW0oeCwgYXhpcylcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IgdG8gY29tcHV0ZSB0aGUgc3VtIG92ZXIuIElmIHRoZSBkdHlwZSBpcyBgYm9vbGBcbiAqICAgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYGludDMyYCBhbmQgdGhlIG91dHB1dCBkdHlwZSB3aWxsIGJlIGBpbnQzMmAuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uKHMpIHRvIHJlZHVjZS4gQnkgZGVmYXVsdCBpdCByZWR1Y2VzXG4gKiAgICAgYWxsIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0ga2VlcERpbXMgSWYgdHJ1ZSwgcmV0YWlucyByZWR1Y2VkIGRpbWVuc2lvbnMgd2l0aCBzaXplIDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gc3VtXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFQge1xuICBsZXQgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3VtJyk7XG4gIGlmICgkeC5kdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgJHggPSBjYXN0KCR4LCAnaW50MzInKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogU3VtSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFN1bUF0dHJzID0ge2F4aXMsIGtlZXBEaW1zfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFN1bSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBzdW0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe3N1bV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { parseAxisParam } from '../util';\nimport { abs } from './abs';\nimport * as axis_util from './axis_util';\nimport { max } from './max';\nimport { min } from './min';\nimport { op } from './operation';\nimport { pow } from './pow';\nimport { reshape } from './reshape';\nimport { scalar } from './scalar';\nimport { sqrt } from './sqrt';\nimport { square } from './square';\nimport { sum } from './sum';\n/**\n * Computes the norm of scalar, vectors, and matrices.\n * This function can compute several different vector norms (the 1-norm, the\n * Euclidean or 2-norm, the inf-norm, and in general the p-norm for p > 0)\n * and matrix norms (Frobenius, 1-norm, and inf-norm).\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.norm().print(); // or tf.norm(x)\n * ```\n *\n * @param x The input array.\n * @param ord Optional. Order of the norm. Supported norm types are\n * following:\n *\n * | ord | norm for matrices | norm for vectors\n * |------------|---------------------------|---------------------\n * |'euclidean' |Frobenius norm |2-norm\n * |'fro' |Frobenius norm\t |\n * |Infinity |max(sum(abs(x), axis=1)) |max(abs(x))\n * |-Infinity |min(sum(abs(x), axis=1)) |min(abs(x))\n * |1 |max(sum(abs(x), axis=0)) |sum(abs(x))\n * |2 | |sum(abs(x)^2)^(1/2)\n *\n * @param axis Optional. If axis is null (the default), the input is\n * considered a vector and a single vector norm is computed over the entire\n * set of values in the Tensor, i.e. norm(x, ord) is equivalent\n * to norm(x.reshape([-1]), ord). If axis is an integer, the input\n * is considered a batch of vectors, and axis determines the axis in x\n * over which to compute vector norms. If axis is a 2-tuple of integer it is\n * considered a batch of matrices and axis determines the axes in NDArray\n * over which to compute a matrix norm.\n * @param keepDims Optional. If true, the norm has the same dimensionality\n * as the input.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction norm_(x, ord = 'euclidean', axis = null, keepDims = false) {\n x = convertToTensor(x, 'x', 'norm');\n const norm = normImpl(x, ord, axis);\n let keepDimsShape = norm.shape;\n if (keepDims) {\n const axes = parseAxisParam(axis, x.shape);\n keepDimsShape = axis_util.expandShapeToKeepDim(norm.shape, axes);\n }\n return reshape(norm, keepDimsShape);\n}\nfunction normImpl(x, p, axis = null) {\n if (x.rank === 0) {\n return abs(x);\n }\n // consider vector when no axis is specified\n if (x.rank !== 1 && axis === null) {\n return normImpl(reshape(x, [-1]), p, axis);\n }\n // vector\n if (x.rank === 1 || typeof axis === 'number' ||\n Array.isArray(axis) && axis.length === 1) {\n if (p === 1) {\n return sum(abs(x), axis);\n }\n if (p === Infinity) {\n return max(abs(x), axis);\n }\n if (p === -Infinity) {\n return min(abs(x), axis);\n }\n if (p === 'euclidean' || p === 2) {\n // norm(x, 2) = sum(abs(xi) ^ 2) ^ 1/2\n return sqrt(sum(pow(abs(x), scalar(2, 'int32')), axis));\n }\n throw new Error(`Error in norm: invalid ord value: ${p}`);\n }\n // matrix (assumption axis[0] < axis[1])\n if (Array.isArray(axis) && axis.length === 2) {\n if (p === 1) {\n return max(sum(abs(x), axis[0]), axis[1] - 1);\n }\n if (p === Infinity) {\n return max(sum(abs(x), axis[1]), axis[0]);\n }\n if (p === -Infinity) {\n return min(sum(abs(x), axis[1]), axis[0]);\n }\n if (p === 'fro' || p === 'euclidean') {\n // norm(x) = sqrt(sum(pow(x, 2)))\n return sqrt(sum(square(x), axis));\n }\n throw new Error(`Error in norm: invalid ord value: ${p}`);\n }\n throw new Error(`Error in norm: invalid axis: ${axis}`);\n}\nexport const norm = /* @__PURE__ */ op({ norm_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL25vcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdkMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssU0FBUyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUUxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILFNBQVMsS0FBSyxDQUNWLENBQW9CLEVBQUUsTUFBZ0MsV0FBVyxFQUNqRSxPQUF3QixJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDaEQsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXBDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxD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QUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUNwQyxpQ0FBaUM7WUFDakMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMzRDtJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtwYXJzZUF4aXNQYXJhbX0gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7YWJzfSBmcm9tICcuL2Ficyc7XG5pbXBvcnQgKiBhcyBheGlzX3V0aWwgZnJvbSAnLi9heGlzX3V0aWwnO1xuaW1wb3J0IHttYXh9IGZyb20gJy4vbWF4JztcbmltcG9ydCB7bWlufSBmcm9tICcuL21pbic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Bvd30gZnJvbSAnLi9wb3cnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4vc2NhbGFyJztcbmltcG9ydCB7c3FydH0gZnJvbSAnLi9zcXJ0JztcbmltcG9ydCB7c3F1YXJlfSBmcm9tICcuL3NxdWFyZSc7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi9zdW0nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBub3JtIG9mIHNjYWxhciwgdmVjdG9ycywgYW5kIG1hdHJpY2VzLlxuICogVGhpcyBmdW5jdGlvbiBjYW4gY29tcHV0ZSBzZXZlcmFsIGRpZmZlcmVudCB2ZWN0b3Igbm9ybXMgKHRoZSAxLW5vcm0sIHRoZVxuICogRXVjbGlkZWFuIG9yIDItbm9ybSwgdGhlIGluZi1ub3JtLCBhbmQgaW4gZ2VuZXJhbCB0aGUgcC1ub3JtIGZvciBwID4gMClcbiAqIGFuZCBtYXRyaXggbm9ybXMgKEZyb2Jlbml1cywgMS1ub3JtLCBhbmQgaW5mLW5vcm0pLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqXG4gKiB4Lm5vcm0oKS5wcmludCgpOyAgLy8gb3IgdGYubm9ybSh4KVxuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIG9yZCBPcHRpb25hbC4gT3JkZXIgb2YgdGhlIG5vcm0uIFN1cHBvcnRlZCBub3JtIHR5cGVzIGFyZVxuICogZm9sbG93aW5nOlxuICpcbiAqICB8IG9yZCAgICAgICAgfCBub3JtIGZvciBtYXRyaWNlcyAgICAgICAgIHwgbm9ybSBmb3IgdmVjdG9yc1xuICogIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIHwnZXVjbGlkZWFuJyB8RnJvYmVuaXVzIG5vcm0gICAgICAgICAgICAgfDItbm9ybVxuICogIHwnZnJvJyAgICAgICB8RnJvYmVuaXVzIG5vcm1cdCAgICAgICAgICAgfFxuICogIHxJbmZpbml0eSAgICB8bWF4KHN1bShhYnMoeCksIGF4aXM9MSkpICAgfG1heChhYnMoeCkpXG4gKiAgfC1JbmZpbml0eSAgIHxtaW4oc3VtKGFicyh4KSwgYXhpcz0xKSkgICB8bWluKGFicyh4KSlcbiAqICB8MSAgICAgICAgICAgfG1heChzdW0oYWJzKHgpLCBheGlzPTApKSAgIHxzdW0oYWJzKHgpKVxuICogIHwyICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHN1bShhYnMoeCleMileKDEvMilcbiAqXG4gKiBAcGFyYW0gYXhpcyBPcHRpb25hbC4gSWYgYXhpcyBpcyBudWxsICh0aGUgZGVmYXVsdCksIHRoZSBpbnB1dCBpc1xuICogY29uc2lkZXJlZCBhIHZlY3RvciBhbmQgYSBzaW5nbGUgdmVjdG9yIG5vcm0gaXMgY29tcHV0ZWQgb3ZlciB0aGUgZW50aXJlXG4gKiBzZXQgb2YgdmFsdWVzIGluIHRoZSBUZW5zb3IsIGkuZS4gbm9ybSh4LCBvcmQpIGlzIGVxdWl2YWxlbnRcbiAqIHRvIG5vcm0oeC5yZXNoYXBlKFstMV0pLCBvcmQpLiBJZiBheGlzIGlzIGFuIGludGVnZXIsIHRoZSBpbnB1dFxuICogaXMgY29uc2lkZXJlZCBhIGJhdGNoIG9mIHZlY3RvcnMsIGFuZCBheGlzIGRldGVybWluZXMgdGhlIGF4aXMgaW4geFxuICogb3ZlciB3aGljaCB0byBjb21wdXRlIHZlY3RvciBub3Jtcy4gSWYgYXhpcyBpcyBhIDItdHVwbGUgb2YgaW50ZWdlciBpdCBpc1xuICogY29uc2lkZXJlZCBhIGJhdGNoIG9mIG1hdHJpY2VzIGFuZCBheGlzIGRldGVybWluZXMgdGhlIGF4ZXMgaW4gTkRBcnJheVxuICogb3ZlciB3aGljaCB0byBjb21wdXRlIGEgbWF0cml4IG5vcm0uXG4gKiBAcGFyYW0ga2VlcERpbXMgT3B0aW9uYWwuIElmIHRydWUsIHRoZSBub3JtIGhhcyB0aGUgc2FtZSBkaW1lbnNpb25hbGl0eVxuICogYXMgdGhlIGlucHV0LlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gbm9ybV8oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIG9yZDogbnVtYmVyfCdldWNsaWRlYW4nfCdmcm8nID0gJ2V1Y2xpZGVhbicsXG4gICAgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFRlbnNvciB7XG4gIHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbm9ybScpO1xuXG4gIGNvbnN0IG5vcm0gPSBub3JtSW1wbCh4LCBvcmQsIGF4aXMpO1xuICBsZXQga2VlcERpbXNTaGFwZSA9IG5vcm0uc2hhcGU7XG4gIGlmIChrZWVwRGltcykge1xuICAgIGNvbnN0IGF4ZXMgPSBwYXJzZUF4aXNQYXJhbShheGlzLCB4LnNoYXBlKTtcbiAgICBrZWVwRGltc1NoYXBlID0gYXhpc191dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG5vcm0uc2hhcGUsIGF4ZXMpO1xuICB9XG4gIHJldHVybiByZXNoYXBlKG5vcm0sIGtlZXBEaW1zU2hhcGUpO1xufVxuXG5mdW5jdGlvbiBub3JtSW1wbChcbiAgICB4OiBUZW5zb3IsIHA6IG51bWJlcnxzdHJpbmcsIGF4aXM6IG51bWJlcnxudW1iZXJbXSA9IG51bGwpOiBUZW5zb3Ige1xuICBpZiAoeC5yYW5rID09PSAwKSB7XG4gICAgcmV0dXJuIGFicyh4KTtcbiAgfVxuXG4gIC8vIGNvbnNpZGVyIHZlY3RvciB3aGVuIG5vIGF4aXMgaXMgc3BlY2lmaWVkXG4gIGlmICh4LnJhbmsgIT09IDEgJiYgYXhpcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBub3JtSW1wbChyZXNoYXBlKHgsIFstMV0pLCBwLCBheGlzKTtcbiAgfVxuXG4gIC8vIHZlY3RvclxuICBpZiAoeC5yYW5rID09PSAxIHx8IHR5cGVvZiBheGlzID09PSAnbnVtYmVyJyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShheGlzKSAmJiBheGlzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmIChwID09PSAxKSB7XG4gICAgICByZXR1cm4gc3VtKGFicyh4KSwgYXhpcyk7XG4gICAgfVxuICAgIGlmIChwID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIG1heChhYnMoeCksIGF4aXMpO1xuICAgIH1cbiAgICBpZiAocCA9PT0gLUluZmluaXR5KSB7XG4gICAgICByZXR1cm4gbWluKGFicyh4KSwgYXhpcyk7XG4gICAgfVxuICAgIGlmIChwID09PSAnZXVjbGlkZWFuJyB8fCBwID09PSAyKSB7XG4gICAgICAvLyBub3JtKHgsIDIpID0gc3VtKGFicyh4aSkgXiAyKSBeIDEvMlxuICAgICAgcmV0dXJuIHNxcnQoc3VtKHBvdyhhYnMoeCksIHNjYWxhcigyLCAnaW50MzInKSksIGF4aXMpKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIG5vcm06IGludmFsaWQgb3JkIHZhbHVlOiAke3B9YCk7XG4gIH1cblxuICAvLyBtYXRyaXggKGFzc3VtcHRpb24gYXhpc1swXSA8IGF4aXNbMV0pXG4gIGlmIChBcnJheS5pc0FycmF5KGF4aXMpICYmIGF4aXMubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHAgPT09IDEpIHtcbiAgICAgIHJldHVybiBtYXgoc3VtKGFicyh4KSwgYXhpc1swXSksIGF4aXNbMV0gLSAxKTtcbiAgICB9XG4gICAgaWYgKHAgPT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gbWF4KHN1bShhYnMoeCksIGF4aXNbMV0pLCBheGlzWzBdKTtcbiAgICB9XG4gICAgaWYgKHAgPT09IC1JbmZpbml0eSkge1xuICAgICAgcmV0dXJuIG1pbihzdW0oYWJzKHgpLCBheGlzWzFdKSwgYXhpc1swXSk7XG4gICAgfVxuICAgIGlmIChwID09PSAnZnJvJyB8fCBwID09PSAnZXVjbGlkZWFuJykge1xuICAgICAgLy8gbm9ybSh4KSA9IHNxcnQoc3VtKHBvdyh4LCAyKSkpXG4gICAgICByZXR1cm4gc3FydChzdW0oc3F1YXJlKHgpLCBheGlzKSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbiBub3JtOiBpbnZhbGlkIG9yZCB2YWx1ZTogJHtwfWApO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbiBub3JtOiBpbnZhbGlkIGF4aXM6ICR7YXhpc31gKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vcm0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe25vcm1ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { norm } from './norm';\nimport { op } from './operation';\n/**\n * Computes the Euclidean norm of scalar, vectors, and matrices.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.euclideanNorm().print(); // or tf.euclideanNorm(x)\n * ```\n *\n * @param x The input array.\n * @param axis Optional. If axis is null (the default), the input is\n * considered a vector and a single vector norm is computed over the entire\n * set of values in the Tensor, i.e. euclideanNorm(x) is equivalent\n * to euclideanNorm(x.reshape([-1])). If axis is an integer, the input\n * is considered a batch of vectors, and axis determines the axis in x\n * over which to compute vector norms. If axis is a 2-tuple of integer it is\n * considered a batch of matrices and axis determines the axes in NDArray\n * over which to compute a matrix norm.\n * @param keepDims Optional. If true, the norm has the same dimensionality\n * as the input.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction euclideanNorm_(x, axis = null, keepDims = false) {\n return norm(x, 'euclidean', axis, keepDims);\n}\nexport const euclideanNorm = /* @__PURE__ */ op({ euclideanNorm_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVjbGlkZWFuX25vcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9ldWNsaWRlYW5fbm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFTLGNBQWMsQ0FDbkIsQ0FBb0IsRUFBRSxPQUF3QixJQUFJLEVBQ2xELFFBQVEsR0FBRyxLQUFLO0lBQ2xCLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7bm9ybX0gZnJvbSAnLi9ub3JtJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgRXVjbGlkZWFuIG5vcm0gb2Ygc2NhbGFyLCB2ZWN0b3JzLCBhbmQgbWF0cmljZXMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICpcbiAqIHguZXVjbGlkZWFuTm9ybSgpLnByaW50KCk7ICAvLyBvciB0Zi5ldWNsaWRlYW5Ob3JtKHgpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXhpcyBPcHRpb25hbC4gSWYgYXhpcyBpcyBudWxsICh0aGUgZGVmYXVsdCksIHRoZSBpbnB1dCBpc1xuICogY29uc2lkZXJlZCBhIHZlY3RvciBhbmQgYSBzaW5nbGUgdmVjdG9yIG5vcm0gaXMgY29tcHV0ZWQgb3ZlciB0aGUgZW50aXJlXG4gKiBzZXQgb2YgdmFsdWVzIGluIHRoZSBUZW5zb3IsIGkuZS4gZXVjbGlkZWFuTm9ybSh4KSBpcyBlcXVpdmFsZW50XG4gKiB0byBldWNsaWRlYW5Ob3JtKHgucmVzaGFwZShbLTFdKSkuIElmIGF4aXMgaXMgYW4gaW50ZWdlciwgdGhlIGlucHV0XG4gKiBpcyBjb25zaWRlcmVkIGEgYmF0Y2ggb2YgdmVjdG9ycywgYW5kIGF4aXMgZGV0ZXJtaW5lcyB0aGUgYXhpcyBpbiB4XG4gKiBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgdmVjdG9yIG5vcm1zLiBJZiBheGlzIGlzIGEgMi10dXBsZSBvZiBpbnRlZ2VyIGl0IGlzXG4gKiBjb25zaWRlcmVkIGEgYmF0Y2ggb2YgbWF0cmljZXMgYW5kIGF4aXMgZGV0ZXJtaW5lcyB0aGUgYXhlcyBpbiBOREFycmF5XG4gKiBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgYSBtYXRyaXggbm9ybS5cbiAqIEBwYXJhbSBrZWVwRGltcyBPcHRpb25hbC4gSWYgdHJ1ZSwgdGhlIG5vcm0gaGFzIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5XG4gKiBhcyB0aGUgaW5wdXQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTWF0cmljZXMnfVxuICovXG5mdW5jdGlvbiBldWNsaWRlYW5Ob3JtXyhcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCxcbiAgICBrZWVwRGltcyA9IGZhbHNlKTogVGVuc29yIHtcbiAgcmV0dXJuIG5vcm0oeCwgJ2V1Y2xpZGVhbicsIGF4aXMsIGtlZXBEaW1zKTtcbn1cblxuZXhwb3J0IGNvbnN0IGV1Y2xpZGVhbk5vcm0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2V1Y2xpZGVhbk5vcm1ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Exp } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes exponential of the input `tf.Tensor` element-wise. `e ^ x`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, -3]);\n *\n * x.exp().print(); // or tf.exp(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction exp_(x) {\n const $x = convertToTensor(x, 'x', 'exp');\n const inputs = { x: $x };\n return ENGINE.runKernel(Exp, inputs);\n}\nexport const exp = /* @__PURE__ */ op({ exp_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZXhwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFMUMsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0V4cCwgRXhwSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIGV4cG9uZW50aWFsIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2UuIGBlIF4geGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAtM10pO1xuICpcbiAqIHguZXhwKCkucHJpbnQoKTsgIC8vIG9yIHRmLmV4cCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBleHBfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdleHAnKTtcblxuICBjb25zdCBpbnB1dHM6IEV4cElucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEV4cCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IGV4cCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZXhwX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ExpandDims } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Returns a `tf.Tensor` that has expanded rank, by inserting a dimension\n * into the tensor's shape.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const axis = 1;\n * x.expandDims(axis).print();\n * ```\n *\n * @param x The input tensor whose dimensions are to be expanded.\n * @param axis The dimension index at which to insert shape of `1`. Defaults\n * to 0 (the first dimension).\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction expandDims_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'expandDims', 'string_or_numeric');\n util.assert(axis <= $x.rank, () => 'Axis must be <= rank of the tensor');\n const inputs = { input: $x };\n const attrs = { dim: axis };\n return ENGINE.runKernel(ExpandDims, inputs, attrs);\n}\nexport const expandDims = /* @__PURE__ */ op({ expandDims_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kX2RpbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9leHBhbmRfZGltcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQW9DLE1BQU0saUJBQWlCLENBQUM7QUFJOUUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLENBQW9CLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDbkUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sTUFBTSxHQUFxQixFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUM3QyxNQUFNLEtBQUssR0FBb0IsRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFFM0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixVQUFVLEVBQUUsTUFBbUMsRUFDL0MsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtFeHBhbmREaW1zLCBFeHBhbmREaW1zQXR0cnMsIEV4cGFuZERpbXNJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyBhIGB0Zi5UZW5zb3JgIHRoYXQgaGFzIGV4cGFuZGVkIHJhbmssIGJ5IGluc2VydGluZyBhIGRpbWVuc2lvblxuICogaW50byB0aGUgdGVuc29yJ3Mgc2hhcGUuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmV4cGFuZERpbXMoYXhpcykucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3Igd2hvc2UgZGltZW5zaW9ucyBhcmUgdG8gYmUgZXhwYW5kZWQuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uIGluZGV4IGF0IHdoaWNoIHRvIGluc2VydCBzaGFwZSBvZiBgMWAuIERlZmF1bHRzXG4gKiAgICAgdG8gMCAodGhlIGZpcnN0IGRpbWVuc2lvbikuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gZXhwYW5kRGltc188VCBleHRlbmRzIFRlbnNvcj4oeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXMgPSAwKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2V4cGFuZERpbXMnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcblxuICB1dGlsLmFzc2VydChheGlzIDw9ICR4LnJhbmssICgpID0+ICdBeGlzIG11c3QgYmUgPD0gcmFuayBvZiB0aGUgdGVuc29yJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBFeHBhbmREaW1zSW5wdXRzID0ge2lucHV0OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBFeHBhbmREaW1zQXR0cnMgPSB7ZGltOiBheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEV4cGFuZERpbXMsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgZXhwYW5kRGltcyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZXhwYW5kRGltc199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Expm1 } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes exponential of the input `tf.Tensor` minus one element-wise.\n * `e ^ x - 1`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, -3]);\n *\n * x.expm1().print(); // or tf.expm1(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction expm1_(x) {\n const $x = convertToTensor(x, 'x', 'expm1');\n const inputs = { x: $x };\n return ENGINE.runKernel(Expm1, inputs);\n}\nexport const expm1 = /* @__PURE__ */ op({ expm1_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbTEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9leHBtMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0V4cG0xLCBFeHBtMUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBleHBvbmVudGlhbCBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgbWludXMgb25lIGVsZW1lbnQtd2lzZS5cbiAqIGBlIF4geCAtIDFgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgLTNdKTtcbiAqXG4gKiB4LmV4cG0xKCkucHJpbnQoKTsgIC8vIG9yIHRmLmV4cG0xKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGV4cG0xXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnZXhwbTEnKTtcblxuICBjb25zdCBpbnB1dHM6IEV4cG0xSW5wdXRzID0ge3g6ICR4fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRXhwbTEsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBleHBtMSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZXhwbTFffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Tile } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Construct a tensor by repeating it the number of times given by reps.\n *\n * This operation creates a new tensor by replicating `input` `reps`\n * times. The output tensor's `i`th dimension has `input.shape[i] *\n * reps[i]` elements, and the values of `input` are replicated\n * `reps[i]` times along the `i`th dimension. For example, tiling\n * `[a, b, c, d]` by `[2]` produces `[a, b, c, d, a, b, c, d]`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n *\n * a.tile([2]).print(); // or tf.tile(a, [2])\n * ```\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * a.tile([1, 2]).print(); // or tf.tile(a, [1,2])\n * ```\n * @param x The tensor to tile.\n * @param reps Determines the number of replications per dimension.\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction tile_(x, reps) {\n const $x = convertToTensor(x, 'x', 'tile', 'string_or_numeric');\n util.assert($x.rank === reps.length, () => `Error in transpose: rank of input ${$x.rank} ` +\n `must match length of reps ${reps}.`);\n const inputs = { x: $x };\n const attrs = { reps };\n return ENGINE.runKernel(Tile, inputs, attrs);\n}\nexport const tile = /* @__PURE__ */ op({ tile_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3RpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZSxFQUFFLElBQWM7SUFDOUQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQ3ZCLEdBQUcsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLENBQUMsSUFBSSxHQUFHO1FBQ2pELDZCQUE2QixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFjLEVBQUMsSUFBSSxFQUFDLENBQUM7SUFFaEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUaWxlLCBUaWxlQXR0cnMsIFRpbGVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29uc3RydWN0IGEgdGVuc29yIGJ5IHJlcGVhdGluZyBpdCB0aGUgbnVtYmVyIG9mIHRpbWVzIGdpdmVuIGJ5IHJlcHMuXG4gKlxuICogVGhpcyBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyB0ZW5zb3IgYnkgcmVwbGljYXRpbmcgYGlucHV0YCBgcmVwc2BcbiAqIHRpbWVzLiBUaGUgb3V0cHV0IHRlbnNvcidzIGBpYHRoIGRpbWVuc2lvbiBoYXMgYGlucHV0LnNoYXBlW2ldICpcbiAqIHJlcHNbaV1gIGVsZW1lbnRzLCBhbmQgdGhlIHZhbHVlcyBvZiBgaW5wdXRgIGFyZSByZXBsaWNhdGVkXG4gKiBgcmVwc1tpXWAgdGltZXMgYWxvbmcgdGhlIGBpYHRoIGRpbWVuc2lvbi4gRm9yIGV4YW1wbGUsIHRpbGluZ1xuICogYFthLCBiLCBjLCBkXWAgYnkgYFsyXWAgcHJvZHVjZXMgYFthLCBiLCBjLCBkLCBhLCBiLCBjLCBkXWAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMl0pO1xuICpcbiAqIGEudGlsZShbMl0pLnByaW50KCk7ICAgIC8vIG9yIHRmLnRpbGUoYSwgWzJdKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogYS50aWxlKFsxLCAyXSkucHJpbnQoKTsgIC8vIG9yIHRmLnRpbGUoYSwgWzEsMl0pXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSB0ZW5zb3IgdG8gdGlsZS5cbiAqIEBwYXJhbSByZXBzIERldGVybWluZXMgdGhlIG51bWJlciBvZiByZXBsaWNhdGlvbnMgcGVyIGRpbWVuc2lvbi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdTbGljaW5nIGFuZCBKb2luaW5nJ31cbiAqL1xuZnVuY3Rpb24gdGlsZV88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlLCByZXBzOiBudW1iZXJbXSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICd0aWxlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gcmVwcy5sZW5ndGgsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gdHJhbnNwb3NlOiByYW5rIG9mIGlucHV0ICR7JHgucmFua30gYCArXG4gICAgICAgICAgYG11c3QgbWF0Y2ggbGVuZ3RoIG9mIHJlcHMgJHtyZXBzfS5gKTtcblxuICBjb25zdCBpbnB1dHM6IFRpbGVJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogVGlsZUF0dHJzID0ge3JlcHN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgVGlsZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCB0aWxlID0gLyogQF9fUFVSRV9fICovIG9wKHt0aWxlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from './buffer';\nimport { expandDims } from './expand_dims';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nimport { tile } from './tile';\n/**\n * Create an identity matrix.\n *\n * @param numRows Number of rows.\n * @param numColumns Number of columns. Defaults to `numRows`.\n * @param batchShape If provided, will add the batch shape to the beginning\n * of the shape of the returned `tf.Tensor` by repeating the identity\n * matrix.\n * @param dtype Data type.\n * @returns Identity matrix of the specified size and data type, possibly\n * with batch repetition if `batchShape` is specified.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction eye_(numRows, numColumns, batchShape, dtype = 'float32') {\n if (numColumns == null) {\n numColumns = numRows;\n }\n const buff = buffer([numRows, numColumns], dtype);\n const n = numRows <= numColumns ? numRows : numColumns;\n for (let i = 0; i < n; ++i) {\n buff.set(1, i, i);\n }\n const out = reshape(buff.toTensor(), [numRows, numColumns]);\n if (batchShape == null) {\n return out;\n }\n else {\n if (batchShape.length === 1) {\n return tile(expandDims(out, 0), [batchShape[0], 1, 1]);\n }\n else if (batchShape.length === 2) {\n // tslint:disable-next-line:no-unnecessary-type-assertion\n return tile(expandDims(expandDims(out, 0), 0), [batchShape[0], batchShape[1], 1, 1]);\n }\n else if (batchShape.length === 3) {\n // tslint:disable-next-line:no-unnecessary-type-assertion\n return tile(expandDims(expandDims(expandDims(out, 0), 0), 0), [\n batchShape[0], batchShape[1], batchShape[2], 1, 1\n ]);\n }\n else {\n throw new Error(`eye() currently supports only 1D and 2D ` +\n // tslint:disable-next-line:no-any\n `batchShapes, but received ${batchShape.length}D.`);\n }\n }\n}\nexport const eye = /* @__PURE__ */ op({ eye_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXllLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZXllLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1Qjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBUyxJQUFJLENBQ1QsT0FBZSxFQUFFLFVBQW1CLEVBQ3BDLFVBSXdFLEVBQ3hFLFFBQWtCLFNBQVM7SUFDN0IsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLFVBQVUsR0FBRyxPQUFPLENBQUM7S0FDdEI7SUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEQsTUFBTSxDQUFDLEdBQUcsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbkI7SUFDRCxNQUFNLEdBQUcsR0FBYSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7U0FBTTtRQUNMLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQWEsQ0FBQztTQUNwRTthQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEMseURBQXlEO1lBQ3pELE9BQU8sSUFBSSxDQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNqQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFhLENBQUM7U0FDOUQ7YUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLHlEQUF5RDtZQUN6RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JELFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2xELENBQWEsQ0FBQztTQUN2QjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FDWCwwQ0FBMEM7Z0JBQzFDLGtDQUFrQztnQkFDbEMsNkJBQThCLFVBQWtCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztTQUNsRTtLQUNGO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtidWZmZXJ9IGZyb20gJy4vYnVmZmVyJztcbmltcG9ydCB7ZXhwYW5kRGltc30gZnJvbSAnLi9leHBhbmRfZGltcyc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5pbXBvcnQge3RpbGV9IGZyb20gJy4vdGlsZSc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGlkZW50aXR5IG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0gbnVtUm93cyBOdW1iZXIgb2Ygcm93cy5cbiAqIEBwYXJhbSBudW1Db2x1bW5zIE51bWJlciBvZiBjb2x1bW5zLiBEZWZhdWx0cyB0byBgbnVtUm93c2AuXG4gKiBAcGFyYW0gYmF0Y2hTaGFwZSBJZiBwcm92aWRlZCwgd2lsbCBhZGQgdGhlIGJhdGNoIHNoYXBlIHRvIHRoZSBiZWdpbm5pbmdcbiAqICAgb2YgdGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBgdGYuVGVuc29yYCBieSByZXBlYXRpbmcgdGhlIGlkZW50aXR5XG4gKiAgIG1hdHJpeC5cbiAqIEBwYXJhbSBkdHlwZSBEYXRhIHR5cGUuXG4gKiBAcmV0dXJucyBJZGVudGl0eSBtYXRyaXggb2YgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBkYXRhIHR5cGUsIHBvc3NpYmx5XG4gKiAgIHdpdGggYmF0Y2ggcmVwZXRpdGlvbiBpZiBgYmF0Y2hTaGFwZWAgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gZXllXyhcbiAgICBudW1Sb3dzOiBudW1iZXIsIG51bUNvbHVtbnM/OiBudW1iZXIsXG4gICAgYmF0Y2hTaGFwZT86XG4gICAgICAgIFtcbiAgICAgICAgICBudW1iZXJcbiAgICAgICAgXXxbbnVtYmVyLFxuICAgICAgICAgICBudW1iZXJdfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBkdHlwZTogRGF0YVR5cGUgPSAnZmxvYXQzMicpOiBUZW5zb3IyRCB7XG4gIGlmIChudW1Db2x1bW5zID09IG51bGwpIHtcbiAgICBudW1Db2x1bW5zID0gbnVtUm93cztcbiAgfVxuICBjb25zdCBidWZmID0gYnVmZmVyKFtudW1Sb3dzLCBudW1Db2x1bW5zXSwgZHR5cGUpO1xuICBjb25zdCBuID0gbnVtUm93cyA8PSBudW1Db2x1bW5zID8gbnVtUm93cyA6IG51bUNvbHVtbnM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgYnVmZi5zZXQoMSwgaSwgaSk7XG4gIH1cbiAgY29uc3Qgb3V0OiBUZW5zb3IyRCA9IHJlc2hhcGUoYnVmZi50b1RlbnNvcigpLCBbbnVtUm93cywgbnVtQ29sdW1uc10pO1xuICBpZiAoYmF0Y2hTaGFwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG91dDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmF0Y2hTaGFwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aWxlKGV4cGFuZERpbXMob3V0LCAwKSwgW2JhdGNoU2hhcGVbMF0sIDEsIDFdKSBhcyBUZW5zb3IyRDtcbiAgICB9IGVsc2UgaWYgKGJhdGNoU2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgIHJldHVybiB0aWxlKFxuICAgICAgICAgICAgICAgICBleHBhbmREaW1zKGV4cGFuZERpbXMob3V0LCAwKSwgMCksXG4gICAgICAgICAgICAgICAgIFtiYXRjaFNoYXBlWzBdLCBiYXRjaFNoYXBlWzFdLCAxLCAxXSkgYXMgVGVuc29yMkQ7XG4gICAgfSBlbHNlIGlmIChiYXRjaFNoYXBlLmxlbmd0aCA9PT0gMykge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICByZXR1cm4gdGlsZShleHBhbmREaW1zKGV4cGFuZERpbXMoZXhwYW5kRGltcyhvdXQsIDApLCAwKSwgMCksIFtcbiAgICAgICAgICAgICAgIGJhdGNoU2hhcGVbMF0sIGJhdGNoU2hhcGVbMV0sIGJhdGNoU2hhcGVbMl0sIDEsIDFcbiAgICAgICAgICAgICBdKSBhcyBUZW5zb3IyRDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBleWUoKSBjdXJyZW50bHkgc3VwcG9ydHMgb25seSAxRCBhbmQgMkQgYCArXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgIGBiYXRjaFNoYXBlcywgYnV0IHJlY2VpdmVkICR7KGJhdGNoU2hhcGUgYXMgYW55KS5sZW5ndGh9RC5gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGV5ZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZXllX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Floor } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes floor of input `tf.Tensor` element-wise: `floor(x)`.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.floor().print(); // or tf.floor(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction floor_(x) {\n const $x = convertToTensor(x, 'x', 'floor', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Floor, inputs);\n}\nexport const floor = /* @__PURE__ */ op({ floor_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9mbG9vci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsTUFBTSxDQUFtQixDQUFlO0lBQy9DLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV2RCxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtGbG9vciwgRmxvb3JJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgZmxvb3Igb2YgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOiBgZmxvb3IoeClgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy42LCAxLjEsIC0zLjNdKTtcbiAqXG4gKiB4LmZsb29yKCkucHJpbnQoKTsgIC8vIG9yIHRmLmZsb29yKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGZsb29yXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnZmxvb3InLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogRmxvb3JJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChGbG9vciwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IGZsb29yID0gLyogQF9fUFVSRV9fICovIG9wKHtmbG9vcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { GatherV2 } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Gather slices from tensor `x`'s axis `axis` according to `indices`.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const indices = tf.tensor1d([1, 3, 3], 'int32');\n *\n * x.gather(indices).print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const indices = tf.tensor1d([1, 1, 0], 'int32');\n *\n * x.gather(indices).print();\n * ```\n * @param x The input tensor whose slices are to be gathered.\n * @param indices The indices of the values to extract.\n * @param axis The axis over which to select values. Defaults to 0.\n * @param batchDims Optional. The number of batch dimensions. It must be less\n * than or equal to rank(indices). Defaults to 0.\n * The output tensor will have shape of\n * `x.shape[:axis] + indices.shape[batchDims:] + x.shape[axis + 1:]`\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction gather_(x, indices, axis = 0, batchDims = 0) {\n const $x = convertToTensor(x, 'x', 'gather');\n const $indices = convertToTensor(indices, 'indices', 'gather', 'int32');\n const inputs = { x: $x, indices: $indices };\n const attrs = { axis, batchDims };\n return ENGINE.runKernel(GatherV2, inputs, attrs);\n}\nexport const gather = /* @__PURE__ */ op({ gather_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0aGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZ2F0aGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBZ0MsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILFNBQVMsT0FBTyxDQUNaLENBQWUsRUFBRSxPQUEwQixFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDdEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhFLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFrQixFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQztJQUUvQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFFBQVEsRUFBRSxNQUFtQyxFQUM3QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0dhdGhlclYyLCBHYXRoZXJWMkF0dHJzLCBHYXRoZXJWMklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEdhdGhlciBzbGljZXMgZnJvbSB0ZW5zb3IgYHhgJ3MgYXhpcyBgYXhpc2AgYWNjb3JkaW5nIHRvIGBpbmRpY2VzYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKiBjb25zdCBpbmRpY2VzID0gdGYudGVuc29yMWQoWzEsIDMsIDNdLCAnaW50MzInKTtcbiAqXG4gKiB4LmdhdGhlcihpbmRpY2VzKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKiBjb25zdCBpbmRpY2VzID0gdGYudGVuc29yMWQoWzEsIDEsIDBdLCAnaW50MzInKTtcbiAqXG4gKiB4LmdhdGhlcihpbmRpY2VzKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIHdob3NlIHNsaWNlcyBhcmUgdG8gYmUgZ2F0aGVyZWQuXG4gKiBAcGFyYW0gaW5kaWNlcyBUaGUgaW5kaWNlcyBvZiB0aGUgdmFsdWVzIHRvIGV4dHJhY3QuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyBvdmVyIHdoaWNoIHRvIHNlbGVjdCB2YWx1ZXMuIERlZmF1bHRzIHRvIDAuXG4gKiBAcGFyYW0gYmF0Y2hEaW1zIE9wdGlvbmFsLiBUaGUgbnVtYmVyIG9mIGJhdGNoIGRpbWVuc2lvbnMuIEl0IG11c3QgYmUgbGVzc1xuICogICAgIHRoYW4gb3IgZXF1YWwgdG8gcmFuayhpbmRpY2VzKS4gRGVmYXVsdHMgdG8gMC5cbiAqICAgICBUaGUgb3V0cHV0IHRlbnNvciB3aWxsIGhhdmUgc2hhcGUgb2ZcbiAqICAgICBgeC5zaGFwZVs6YXhpc10gKyBpbmRpY2VzLnNoYXBlW2JhdGNoRGltczpdICsgeC5zaGFwZVtheGlzICsgMTpdYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5mdW5jdGlvbiBnYXRoZXJfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yfFRlbnNvckxpa2UsIGF4aXMgPSAwLCBiYXRjaERpbXMgPSAwKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2dhdGhlcicpO1xuICBjb25zdCAkaW5kaWNlcyA9IGNvbnZlcnRUb1RlbnNvcihpbmRpY2VzLCAnaW5kaWNlcycsICdnYXRoZXInLCAnaW50MzInKTtcblxuICBjb25zdCBpbnB1dHM6IEdhdGhlclYySW5wdXRzID0ge3g6ICR4LCBpbmRpY2VzOiAkaW5kaWNlc307XG4gIGNvbnN0IGF0dHJzOiBHYXRoZXJWMkF0dHJzID0ge2F4aXMsIGJhdGNoRGltc307XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBHYXRoZXJWMiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBnYXRoZXIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2dhdGhlcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Greater } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a > b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.greater(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction greater_(a, b) {\n let $a = convertToTensor(a, 'a', 'greater', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'greater', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Greater, inputs);\n}\nexport const greater = /* @__PURE__ */ op({ greater_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JlYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2dyZWF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsUUFBUSxDQUNiLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDakUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDakUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBa0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUU3QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0dyZWF0ZXIsIEdyZWF0ZXJJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cnV0aCB2YWx1ZSBvZiAoYSA+IGIpIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMiwgMiwgMl0pO1xuICpcbiAqIGEuZ3JlYXRlcihiKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgaW5wdXQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXMgYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0xvZ2ljYWwnfVxuICovXG5mdW5jdGlvbiBncmVhdGVyXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2dyZWF0ZXInLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2dyZWF0ZXInLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKCRhLnNoYXBlLCAkYi5zaGFwZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBHcmVhdGVySW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoR3JlYXRlciwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgZ3JlYXRlciA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Z3JlYXRlcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { GreaterEqual } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a >= b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.greaterEqual(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction greaterEqual_(a, b) {\n let $a = convertToTensor(a, 'a', 'greaterEqual', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'greaterEqual', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(GreaterEqual, inputs);\n}\nexport const greaterEqual = /* @__PURE__ */ op({ greaterEqual_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JlYXRlcl9lcXVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2dyZWF0ZXJfZXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUFxQixNQUFNLGlCQUFpQixDQUFDO0FBR2pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsYUFBYSxDQUNsQixDQUFvQixFQUFFLENBQW9CO0lBQzVDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQXVCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbEQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtHcmVhdGVyRXF1YWwsIEdyZWF0ZXJFcXVhbElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIChhID49IGIpIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMiwgMiwgMl0pO1xuICpcbiAqIGEuZ3JlYXRlckVxdWFsKGIpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTG9naWNhbCd9XG4gKi9cbmZ1bmN0aW9uIGdyZWF0ZXJFcXVhbF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdncmVhdGVyRXF1YWwnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2dyZWF0ZXJFcXVhbCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IEdyZWF0ZXJFcXVhbElucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEdyZWF0ZXJFcXVhbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgZ3JlYXRlckVxdWFsID0gLyogQF9fUFVSRV9fICovIG9wKHtncmVhdGVyRXF1YWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { IsFinite } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns which elements of x are finite.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isFinite().print(); // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction isFinite_(x) {\n const $x = convertToTensor(x, 'x', 'isFinite');\n const inputs = { x: $x };\n return ENGINE.runKernel(IsFinite, inputs);\n}\nexport const isFinite = /* @__PURE__ */ op({ isFinite_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNfZmluaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaXNfZmluaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsU0FBUyxDQUFtQixDQUFlO0lBQ2xELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV2QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7SXNGaW5pdGUsIElzRmluaXRlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgd2hpY2ggZWxlbWVudHMgb2YgeCBhcmUgZmluaXRlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoW05hTiwgSW5maW5pdHksIC1JbmZpbml0eSwgMCwgMV0pO1xuICpcbiAqIHguaXNGaW5pdGUoKS5wcmludCgpOyAgLy8gb3IgdGYuaXNOYU4oeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IFRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gaXNGaW5pdGVfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdpc0Zpbml0ZScpO1xuXG4gIGNvbnN0IGlucHV0czogSXNGaW5pdGVJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKElzRmluaXRlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgaXNGaW5pdGUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2lzRmluaXRlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { IsInf } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns which elements of x are Infinity or -Infinity.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isInf().print(); // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction isInf_(x) {\n const $x = convertToTensor(x, 'x', 'isInf');\n const inputs = { x: $x };\n return ENGINE.runKernel(IsInf, inputs);\n}\nexport const isInf = /* @__PURE__ */ op({ isInf_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNfaW5mLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaXNfaW5mLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEtBQUssRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBR25ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxNQUFNLENBQW1CLENBQWU7SUFDL0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFNUMsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXBDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtJc0luZiwgSXNJbmZJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyB3aGljaCBlbGVtZW50cyBvZiB4IGFyZSBJbmZpbml0eSBvciAtSW5maW5pdHkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbTmFOLCBJbmZpbml0eSwgLUluZmluaXR5LCAwLCAxXSk7XG4gKlxuICogeC5pc0luZigpLnByaW50KCk7ICAvLyBvciB0Zi5pc05hTih4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBpc0luZl88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2lzSW5mJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBJc0luZklucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoSXNJbmYsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBpc0luZiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aXNJbmZffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { IsNan } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns which elements of x are NaN.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isNaN().print(); // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction isNaN_(x) {\n const $x = convertToTensor(x, 'x', 'isNaN');\n const inputs = { x: $x };\n return ENGINE.runKernel(IsNan, inputs);\n}\nexport const isNaN = /* @__PURE__ */ op({ isNaN_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNfbmFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaXNfbmFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEtBQUssRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBR25ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxNQUFNLENBQW1CLENBQWU7SUFDL0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXBDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtJc05hbiwgSXNOYW5JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyB3aGljaCBlbGVtZW50cyBvZiB4IGFyZSBOYU4uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbTmFOLCBJbmZpbml0eSwgLUluZmluaXR5LCAwLCAxXSk7XG4gKlxuICogeC5pc05hTigpLnByaW50KCk7ICAvLyBvciB0Zi5pc05hTih4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBpc05hTl88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2lzTmFOJyk7XG4gIGNvbnN0IGlucHV0czogSXNOYW5JbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKElzTmFuLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgaXNOYU4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2lzTmFOX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LeakyRelu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes leaky rectified linear element-wise.\n *\n * See\n * [http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf](\n * http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf)\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.leakyRelu(0.1).print(); // or tf.leakyRelu(x, 0.1)\n * ```\n * @param x The input tensor.\n * @param alpha The scaling factor for negative values, defaults to 0.2.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction leakyRelu_(x, alpha = 0.2) {\n const $x = convertToTensor(x, 'x', 'leakyRelu');\n const inputs = { x: $x };\n const attrs = { alpha };\n return ENGINE.runKernel(LeakyRelu, inputs, attrs);\n}\nexport const leakyRelu = /* @__PURE__ */ op({ leakyRelu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVha3lfcmVsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xlYWt5X3JlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDO0FBSTNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxVQUFVLENBQW1CLENBQWUsRUFBRSxLQUFLLEdBQUcsR0FBRztJQUNoRSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVoRCxNQUFNLE1BQU0sR0FBb0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQW1CLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFFdEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixTQUFTLEVBQUUsTUFBbUMsRUFDOUMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtMZWFreVJlbHUsIExlYWt5UmVsdUF0dHJzLCBMZWFreVJlbHVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBsZWFreSByZWN0aWZpZWQgbGluZWFyIGVsZW1lbnQtd2lzZS5cbiAqXG4gKiBTZWVcbiAqIFtodHRwOi8vd2ViLnN0YW5mb3JkLmVkdS9+YXduaS9wYXBlcnMvcmVsdV9oeWJyaWRfaWNtbDIwMTNfZmluYWwucGRmXShcbiAqICAgICBodHRwOi8vd2ViLnN0YW5mb3JkLmVkdS9+YXduaS9wYXBlcnMvcmVsdV9oeWJyaWRfaWNtbDIwMTNfZmluYWwucGRmKVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgNF0pO1xuICpcbiAqIHgubGVha3lSZWx1KDAuMSkucHJpbnQoKTsgIC8vIG9yIHRmLmxlYWt5UmVsdSh4LCAwLjEpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKiBAcGFyYW0gYWxwaGEgVGhlIHNjYWxpbmcgZmFjdG9yIGZvciBuZWdhdGl2ZSB2YWx1ZXMsIGRlZmF1bHRzIHRvIDAuMi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gbGVha3lSZWx1XzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UsIGFscGhhID0gMC4yKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xlYWt5UmVsdScpO1xuXG4gIGNvbnN0IGlucHV0czogTGVha3lSZWx1SW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IExlYWt5UmVsdUF0dHJzID0ge2FscGhhfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIExlYWt5UmVsdSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsZWFreVJlbHUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xlYWt5UmVsdV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Less } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a < b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.less(b).print();\n * ```\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction less_(a, b) {\n let $a = convertToTensor(a, 'a', 'less', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'less', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Less, inputs);\n}\nexport const less = /* @__PURE__ */ op({ less_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLEtBQUssQ0FDVixDQUFvQixFQUFFLENBQW9CO0lBQzVDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlELElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUUxQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0xlc3MsIExlc3NJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cnV0aCB2YWx1ZSBvZiAoYSA8IGIpIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMiwgMiwgMl0pO1xuICpcbiAqIGEubGVzcyhiKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTG9naWNhbCd9XG4gKi9cbmZ1bmN0aW9uIGxlc3NfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbGVzcycsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbGVzcycsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IExlc3NJbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMZXNzLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsZXNzID0gLyogQF9fUFVSRV9fICovIG9wKHtsZXNzX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LessEqual } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a <= b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.lessEqual(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction lessEqual_(a, b) {\n let $a = convertToTensor(a, 'a', 'lessEqual', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'lessEqual', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(LessEqual, inputs);\n}\nexport const lessEqual = /* @__PURE__ */ op({ lessEqual_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVzc19lcXVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xlc3NfZXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBRzNELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsVUFBVSxDQUNmLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbkUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbkUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBb0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUUvQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0xlc3NFcXVhbCwgTGVzc0VxdWFsSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHttYWtlVHlwZXNNYXRjaH0gZnJvbSAnLi4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHthc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZX0gZnJvbSAnLi9icm9hZGNhc3RfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJ1dGggdmFsdWUgb2YgKGEgPD0gYikgZWxlbWVudC13aXNlLiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsyLCAyLCAyXSk7XG4gKlxuICogYS5sZXNzRXF1YWwoYikucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBhIFRoZSBmaXJzdCBpbnB1dCB0ZW5zb3IuXG4gKiBAcGFyYW0gYiBUaGUgc2Vjb25kIGlucHV0IHRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlIGFzIGBhYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbGVzc0VxdWFsXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2xlc3NFcXVhbCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbGVzc0VxdWFsJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICBhc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZSgkYS5zaGFwZSwgJGIuc2hhcGUpO1xuXG4gIGNvbnN0IGlucHV0czogTGVzc0VxdWFsSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoTGVzc0VxdWFsLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsZXNzRXF1YWwgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xlc3NFcXVhbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LinSpace } from '../kernel_names';\n/**\n * Return an evenly spaced sequence of numbers over the given interval.\n *\n * ```js\n * tf.linspace(0, 9, 10).print();\n * ```\n * @param start The start value of the sequence.\n * @param stop The end value of the sequence.\n * @param num The number of values to generate.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function linspace(start, stop, num) {\n if (num <= 0) {\n throw new Error('The number of values should be positive.');\n }\n const attrs = { start, stop, num };\n return ENGINE.runKernel(LinSpace, {}, attrs);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9saW5zcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFJeEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWEsRUFBRSxJQUFZLEVBQUUsR0FBVztJQUMvRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7S0FDN0Q7SUFFRCxNQUFNLEtBQUssR0FBa0IsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ2hELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQWdDLENBQUMsQ0FBQztBQUMxRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TGluU3BhY2UsIExpblNwYWNlQXR0cnN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5cbi8qKlxuICogUmV0dXJuIGFuIGV2ZW5seSBzcGFjZWQgc2VxdWVuY2Ugb2YgbnVtYmVycyBvdmVyIHRoZSBnaXZlbiBpbnRlcnZhbC5cbiAqXG4gKiBgYGBqc1xuICogdGYubGluc3BhY2UoMCwgOSwgMTApLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlLlxuICogQHBhcmFtIHN0b3AgVGhlIGVuZCB2YWx1ZSBvZiB0aGUgc2VxdWVuY2UuXG4gKiBAcGFyYW0gbnVtIFRoZSBudW1iZXIgb2YgdmFsdWVzIHRvIGdlbmVyYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpbnNwYWNlKHN0YXJ0OiBudW1iZXIsIHN0b3A6IG51bWJlciwgbnVtOiBudW1iZXIpOiBUZW5zb3IxRCB7XG4gIGlmIChudW0gPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG51bWJlciBvZiB2YWx1ZXMgc2hvdWxkIGJlIHBvc2l0aXZlLicpO1xuICB9XG5cbiAgY29uc3QgYXR0cnM6IExpblNwYWNlQXR0cnMgPSB7c3RhcnQsIHN0b3AsIG51bX07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKExpblNwYWNlLCB7fSwgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LRN } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Normalizes the activation of a local neighborhood across or within\n * channels.\n *\n * @param x The input tensor. The 4-D input tensor is treated as a 3-D array\n * of 1D vectors (along the last dimension), and each vector is\n * normalized independently.\n * @param depthRadius The number of adjacent channels in the 1D normalization\n * window.\n * @param bias A constant bias term for the basis.\n * @param alpha A scale factor, usually positive.\n * @param beta An exponent.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction localResponseNormalization_(x, depthRadius = 5, bias = 1, alpha = 1, beta = 0.5) {\n const $x = convertToTensor(x, 'x', 'localResponseNormalization');\n util.assert($x.rank === 4 || $x.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${$x.rank}.`);\n util.assert(util.isInt(depthRadius), () => `Error in localResponseNormalization: depthRadius must be an ` +\n `integer but got depthRadius ${depthRadius}.`);\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n const inputs = { x: x4D };\n const attrs = { depthRadius, bias, alpha, beta };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(LRN, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n else {\n return res;\n }\n}\nexport const localResponseNormalization = /* @__PURE__ */ op({ localResponseNormalization_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxfcmVzcG9uc2Vfbm9ybWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvY2FsX3Jlc3BvbnNlX25vcm1hbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFzQixNQUFNLGlCQUFpQixDQUFDO0FBSXpELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLDJCQUEyQixDQUNoQyxDQUFlLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUc7SUFDbkUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM5QixHQUFHLEVBQUUsQ0FBQztzQkFDVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQ3ZCLEdBQUcsRUFBRSxDQUFDLDhEQUE4RDtRQUNoRSwrQkFBK0IsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUV2RCxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0Q7SUFFRCxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUVuQyxNQUFNLEtBQUssR0FBYSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDO0lBRXpELDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLEdBQUcsRUFBRSxNQUFtQyxFQUN4QyxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO1NBQU07UUFDTCxPQUFPLEdBQUcsQ0FBQztLQUNaO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQywyQkFBMkIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtMUk4sIExSTkF0dHJzLCBMUk5JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogTm9ybWFsaXplcyB0aGUgYWN0aXZhdGlvbiBvZiBhIGxvY2FsIG5laWdoYm9yaG9vZCBhY3Jvc3Mgb3Igd2l0aGluXG4gKiBjaGFubmVscy5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLiBUaGUgNC1EIGlucHV0IHRlbnNvciBpcyB0cmVhdGVkIGFzIGEgMy1EIGFycmF5XG4gKiAgICAgb2YgMUQgdmVjdG9ycyAoYWxvbmcgdGhlIGxhc3QgZGltZW5zaW9uKSwgYW5kIGVhY2ggdmVjdG9yIGlzXG4gKiAgICAgbm9ybWFsaXplZCBpbmRlcGVuZGVudGx5LlxuICogQHBhcmFtIGRlcHRoUmFkaXVzIFRoZSBudW1iZXIgb2YgYWRqYWNlbnQgY2hhbm5lbHMgaW4gdGhlIDFEIG5vcm1hbGl6YXRpb25cbiAqICAgICB3aW5kb3cuXG4gKiBAcGFyYW0gYmlhcyBBIGNvbnN0YW50IGJpYXMgdGVybSBmb3IgdGhlIGJhc2lzLlxuICogQHBhcmFtIGFscGhhIEEgc2NhbGUgZmFjdG9yLCB1c3VhbGx5IHBvc2l0aXZlLlxuICogQHBhcmFtIGJldGEgQW4gZXhwb25lbnQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTm9ybWFsaXphdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZGVwdGhSYWRpdXMgPSA1LCBiaWFzID0gMSwgYWxwaGEgPSAxLCBiZXRhID0gMC41KTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gNCB8fCAkeC5yYW5rID09PSAzLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uOiB4IG11c3QgYmUgcmFuayAzIG9yIDQgYnV0IGdvdFxuICAgICAgICAgICAgICAgcmFuayAkeyR4LnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHV0aWwuaXNJbnQoZGVwdGhSYWRpdXMpLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uOiBkZXB0aFJhZGl1cyBtdXN0IGJlIGFuIGAgK1xuICAgICAgICAgIGBpbnRlZ2VyIGJ1dCBnb3QgZGVwdGhSYWRpdXMgJHtkZXB0aFJhZGl1c30uYCk7XG5cbiAgbGV0IHg0RCA9ICR4IGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG4gIGlmICgkeC5yYW5rID09PSAzKSB7XG4gICAgcmVzaGFwZWRUbzREID0gdHJ1ZTtcbiAgICB4NEQgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdLCAkeC5zaGFwZVsyXV0pO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBMUk5JbnB1dHMgPSB7eDogeDREfTtcblxuICBjb25zdCBhdHRyczogTFJOQXR0cnMgPSB7ZGVwdGhSYWRpdXMsIGJpYXMsIGFscGhhLCBiZXRhfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlcyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICBMUk4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uID0gLyogQF9fUFVSRV9fICovIG9wKHtsb2NhbFJlc3BvbnNlTm9ybWFsaXphdGlvbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Log } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes natural logarithm of the input `tf.Tensor` element-wise: `ln(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.E]);\n *\n * x.log().print(); // or tf.log(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction log_(x) {\n const $x = convertToTensor(x, 'x', 'log', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Log, inputs);\n}\nexport const log = /* @__PURE__ */ op({ log_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtMb2csIExvZ0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOiBgbG4oeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgTWF0aC5FXSk7XG4gKlxuICogeC5sb2coKS5wcmludCgpOyAgLy8gb3IgdGYubG9nKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGxvZ188VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvZycsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBMb2dJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMb2csIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBsb2cgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xvZ199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Log1p } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes natural logarithm of the input `tf.Tensor` plus one\n * element-wise: `ln(1 + x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.E - 1]);\n *\n * x.log1p().print(); // or tf.log1p(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction log1p_(x) {\n const $x = convertToTensor(x, 'x', 'log1p');\n const inputs = { x: $x };\n return ENGINE.runKernel(Log1p, inputs);\n}\nexport const log1p = /* @__PURE__ */ op({ log1p_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nMXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2cxcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0xvZzFwLCBMb2cxcElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgcGx1cyBvbmVcbiAqIGVsZW1lbnQtd2lzZTogYGxuKDEgKyB4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCBNYXRoLkUgLSAxXSk7XG4gKlxuICogeC5sb2cxcCgpLnByaW50KCk7ICAvLyBvciB0Zi5sb2cxcCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBsb2cxcF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvZzFwJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBMb2cxcElucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKExvZzFwLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgbG9nMXAgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xvZzFwX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Softplus } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes softplus of the input `tf.Tensor` element-wise: `log(exp(x) + 1)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.softplus().print(); // or tf.softplus(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction softplus_(x) {\n const $x = convertToTensor(x, 'x', 'softplus');\n const inputs = { x: $x };\n return ENGINE.runKernel(Softplus, inputs);\n}\nexport const softplus = /* @__PURE__ */ op({ softplus_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHBsdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zb2Z0cGx1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFHekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLFNBQVMsQ0FBbUIsQ0FBZTtJQUNsRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBbUIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDdkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1NvZnRwbHVzLCBTb2Z0cGx1c0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBzb2Z0cGx1cyBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOiBgbG9nKGV4cCh4KSArIDEpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDEsIC0xLCAuN10pO1xuICpcbiAqIHguc29mdHBsdXMoKS5wcmludCgpOyAgLy8gb3IgdGYuc29mdHBsdXMoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gc29mdHBsdXNfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzb2Z0cGx1cycpO1xuXG4gIGNvbnN0IGlucHV0czogU29mdHBsdXNJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTb2Z0cGx1cywgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IHNvZnRwbHVzID0gLyogQF9fUFVSRV9fICovIG9wKHtzb2Z0cGx1c199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { customGrad } from '../gradients';\nimport { convertToTensor } from '../tensor_util_env';\nimport { mul } from './mul';\nimport { neg } from './neg';\nimport { op } from './operation';\nimport { sigmoid } from './sigmoid';\nimport { softplus } from './softplus';\n/**\n * Computes log sigmoid of the input `tf.Tensor` element-wise:\n * `logSigmoid(x)`. For numerical stability, we use `-tf.softplus(-x)`.\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.logSigmoid().print(); // or tf.logSigmoid(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction logSigmoid_(x) {\n const $x = convertToTensor(x, 'x', 'logSigmoid');\n // Use a custom gradient to maintain previous implementation.\n // There is no LogSigmoid kernel in TF so we can't use engine.runKernel\n // directly\n const customOp = customGrad((x) => {\n // TODO(yassogba) we can remove the chained softplus call here only\n // after backends have modualrized softplus at which point we can call\n // engine runKernel(..., Sotfplus, ...) directly.\n const value = neg(softplus(neg(x)));\n const gradFunc = (dy) => {\n const derX = mul(dy, sigmoid(neg(x)));\n return derX;\n };\n return { value, gradFunc };\n });\n return customOp($x);\n}\nexport const logSigmoid = /* @__PURE__ */ op({ logSigmoid_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3NpZ21vaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dfc2lnbW9pZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLENBQWU7SUFDcEQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFakQsNkRBQTZEO0lBQzdELHVFQUF1RTtJQUN2RSxXQUFXO0lBQ1gsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDeEMsbUVBQW1FO1FBQ25FLHNFQUFzRTtRQUN0RSxpREFBaUQ7UUFDakQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBSyxFQUFFLEVBQUU7WUFDekIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUNGLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQU0sQ0FBQztBQUMzQixDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2N1c3RvbUdyYWR9IGZyb20gJy4uL2dyYWRpZW50cyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7bXVsfSBmcm9tICcuL211bCc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi9uZWcnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzaWdtb2lkfSBmcm9tICcuL3NpZ21vaWQnO1xuaW1wb3J0IHtzb2Z0cGx1c30gZnJvbSAnLi9zb2Z0cGx1cyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgbG9nIHNpZ21vaWQgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTpcbiAqIGBsb2dTaWdtb2lkKHgpYC4gRm9yIG51bWVyaWNhbCBzdGFiaWxpdHksIHdlIHVzZSBgLXRmLnNvZnRwbHVzKC14KWAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgMSwgLTEsIC43XSk7XG4gKlxuICogeC5sb2dTaWdtb2lkKCkucHJpbnQoKTsgIC8vIG9yIHRmLmxvZ1NpZ21vaWQoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gbG9nU2lnbW9pZF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvZ1NpZ21vaWQnKTtcblxuICAvLyBVc2UgYSBjdXN0b20gZ3JhZGllbnQgdG8gbWFpbnRhaW4gcHJldmlvdXMgaW1wbGVtZW50YXRpb24uXG4gIC8vIFRoZXJlIGlzIG5vIExvZ1NpZ21vaWQga2VybmVsIGluIFRGIHNvIHdlIGNhbid0IHVzZSBlbmdpbmUucnVuS2VybmVsXG4gIC8vIGRpcmVjdGx5XG4gIGNvbnN0IGN1c3RvbU9wID0gY3VzdG9tR3JhZCgoeDogVGVuc29yKSA9PiB7XG4gICAgLy8gVE9ETyh5YXNzb2diYSkgd2UgY2FuIHJlbW92ZSB0aGUgY2hhaW5lZCBzb2Z0cGx1cyBjYWxsIGhlcmUgb25seVxuICAgIC8vIGFmdGVyIGJhY2tlbmRzIGhhdmUgbW9kdWFscml6ZWQgc29mdHBsdXMgYXQgd2hpY2ggcG9pbnQgd2UgY2FuIGNhbGxcbiAgICAvLyBlbmdpbmUgcnVuS2VybmVsKC4uLiwgU290ZnBsdXMsIC4uLikgZGlyZWN0bHkuXG4gICAgY29uc3QgdmFsdWUgPSBuZWcoc29mdHBsdXMobmVnKHgpKSk7XG5cbiAgICBjb25zdCBncmFkRnVuYyA9IChkeTogVCkgPT4ge1xuICAgICAgY29uc3QgZGVyWCA9IG11bChkeSwgc2lnbW9pZChuZWcoeCkpKTtcbiAgICAgIHJldHVybiBkZXJYO1xuICAgIH07XG4gICAgcmV0dXJuIHt2YWx1ZSwgZ3JhZEZ1bmN9O1xuICB9KTtcblxuICByZXR1cm4gY3VzdG9tT3AoJHgpIGFzIFQ7XG59XG5leHBvcnQgY29uc3QgbG9nU2lnbW9pZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bG9nU2lnbW9pZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { customGrad } from '../gradients';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { exp } from './exp';\nimport { log } from './log';\nimport { max } from './max';\nimport { mul } from './mul';\nimport { op } from './operation';\nimport { sub } from './sub';\nimport { sum } from './sum';\n/**\n * Computes the log softmax.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n *\n * a.logSoftmax().print(); // or tf.logSoftmax(a)\n * ```\n *\n * ```js\n * const a = tf.tensor2d([2, 4, 6, 1, 2, 3], [2, 3]);\n *\n * a.logSoftmax().print(); // or tf.logSoftmax(a)\n * ```\n *\n * @param logits The logits array.\n * @param axis The dimension softmax would be performed on. Defaults to `-1`\n * which indicates the last dimension.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction logSoftmax_(logits, axis = -1) {\n const $logits = convertToTensor(logits, 'logits', 'logSoftmax');\n if (axis === -1) {\n axis = $logits.rank - 1;\n }\n if (axis !== $logits.rank - 1) {\n throw Error('Log Softmax along a non-last dimension is not yet supported. ' +\n `Logits was rank ${$logits.rank} and axis was ${axis}`);\n }\n // const forward: ForwardFunc = (backend, save) => {\n // const keepDims = true;\n // const xMax = max(logits, axis, true);\n // const shifted = sub(logits, xMax);\n // const value =\n // sub(cast(shifted, 'float32'), log(sum(exp(shifted), axis,\n // keepDims)));\n // save([value]);\n // return value;\n // };\n // Use a custom gradient for numerical stability.\n const customOp = customGrad((logits, save) => {\n const keepDims = true;\n const xMax = max(logits, axis, true);\n const shifted = sub(logits, xMax);\n const value = sub(cast(shifted, 'float32'), log(sum(exp(shifted), axis, keepDims)));\n save([value]);\n const gradFunc = (dy, saved) => {\n const [value] = saved;\n const keepDims = true;\n const softmax = exp(value);\n return sub(dy, mul(sum(dy, axis, keepDims), softmax));\n };\n return { value, gradFunc };\n });\n return customOp($logits);\n // TODO Use Engine.runKernel when CPU/WebGL/WASM backends implement this.\n // const inputs: LogSoftmaxInputs = {logits: $logits};\n // const attrs: LogSoftmaxAttrs = {axis};\n // return ENGINE.runKernel(\n // LogSoftmax, inputs as unknown as NamedTensorMap,\n // attrs as unknown as NamedAttrMap);\n}\nexport const logSoftmax = /* @__PURE__ */ op({ logSoftmax_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3NvZnRtYXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dfc29mdG1heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBSXhDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLE1BQW9CLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVoRSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNmLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztLQUN6QjtJQUNELElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQzdCLE1BQU0sS0FBSyxDQUNQLCtEQUErRDtZQUMvRCxtQkFBbUIsT0FBTyxDQUFDLElBQUksaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7S0FDN0Q7SUFFRCw0REFBNEQ7SUFDNUQsMkJBQTJCO0lBQzNCLDBDQUEwQztJQUMxQyx1Q0FBdUM7SUFDdkMsa0JBQWtCO0lBQ2xCLGtFQUFrRTtJQUNsRSxxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixLQUFLO0lBRUwsaURBQWlEO0lBQ2pELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLE1BQWMsRUFBRSxJQUFrQixFQUFFLEVBQUU7UUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQ1AsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFVLEVBQUUsS0FBZSxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7UUFDRixPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFNLENBQUM7SUFFOUIseUVBQXlFO0lBQ3pFLHNEQUFzRDtJQUN0RCx5Q0FBeUM7SUFDekMsMkJBQTJCO0lBQzNCLDhEQUE4RDtJQUM5RCxnREFBZ0Q7QUFDbEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtjdXN0b21HcmFkfSBmcm9tICcuLi9ncmFkaWVudHMnO1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7R3JhZFNhdmVGdW5jfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjYXN0fSBmcm9tICcuL2Nhc3QnO1xuaW1wb3J0IHtleHB9IGZyb20gJy4vZXhwJztcbmltcG9ydCB7bG9nfSBmcm9tICcuL2xvZyc7XG5pbXBvcnQge21heH0gZnJvbSAnLi9tYXgnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4vbXVsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7c3VifSBmcm9tICcuL3N1Yic7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi9zdW0nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBsb2cgc29mdG1heC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKlxuICogYS5sb2dTb2Z0bWF4KCkucHJpbnQoKTsgIC8vIG9yIHRmLmxvZ1NvZnRtYXgoYSlcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoWzIsIDQsIDYsIDEsIDIsIDNdLCBbMiwgM10pO1xuICpcbiAqIGEubG9nU29mdG1heCgpLnByaW50KCk7ICAvLyBvciB0Zi5sb2dTb2Z0bWF4KGEpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbG9naXRzIFRoZSBsb2dpdHMgYXJyYXkuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uIHNvZnRtYXggd291bGQgYmUgcGVyZm9ybWVkIG9uLiBEZWZhdWx0cyB0byBgLTFgXG4gKiAgICAgd2hpY2ggaW5kaWNhdGVzIHRoZSBsYXN0IGRpbWVuc2lvbi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdOb3JtYWxpemF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gbG9nU29mdG1heF88VCBleHRlbmRzIFRlbnNvcj4obG9naXRzOiBUfFRlbnNvckxpa2UsIGF4aXMgPSAtMSk6IFQge1xuICBjb25zdCAkbG9naXRzID0gY29udmVydFRvVGVuc29yKGxvZ2l0cywgJ2xvZ2l0cycsICdsb2dTb2Z0bWF4Jyk7XG5cbiAgaWYgKGF4aXMgPT09IC0xKSB7XG4gICAgYXhpcyA9ICRsb2dpdHMucmFuayAtIDE7XG4gIH1cbiAgaWYgKGF4aXMgIT09ICRsb2dpdHMucmFuayAtIDEpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0xvZyBTb2Z0bWF4IGFsb25nIGEgbm9uLWxhc3QgZGltZW5zaW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiAnICtcbiAgICAgICAgYExvZ2l0cyB3YXMgcmFuayAkeyRsb2dpdHMucmFua30gYW5kIGF4aXMgd2FzICR7YXhpc31gKTtcbiAgfVxuXG4gIC8vIGNvbnN0IGZvcndhcmQ6IEZvcndhcmRGdW5jPFRlbnNvcj4gPSAoYmFja2VuZCwgc2F2ZSkgPT4ge1xuICAvLyAgIGNvbnN0IGtlZXBEaW1zID0gdHJ1ZTtcbiAgLy8gICBjb25zdCB4TWF4ID0gbWF4KGxvZ2l0cywgYXhpcywgdHJ1ZSk7XG4gIC8vICAgY29uc3Qgc2hpZnRlZCA9IHN1Yihsb2dpdHMsIHhNYXgpO1xuICAvLyAgIGNvbnN0IHZhbHVlID1cbiAgLy8gICAgICAgc3ViKGNhc3Qoc2hpZnRlZCwgJ2Zsb2F0MzInKSwgbG9nKHN1bShleHAoc2hpZnRlZCksIGF4aXMsXG4gIC8vICAgICAgIGtlZXBEaW1zKSkpO1xuICAvLyAgIHNhdmUoW3ZhbHVlXSk7XG4gIC8vICAgcmV0dXJuIHZhbHVlO1xuICAvLyB9O1xuXG4gIC8vIFVzZSBhIGN1c3RvbSBncmFkaWVudCBmb3IgbnVtZXJpY2FsIHN0YWJpbGl0eS5cbiAgY29uc3QgY3VzdG9tT3AgPSBjdXN0b21HcmFkKChsb2dpdHM6IFRlbnNvciwgc2F2ZTogR3JhZFNhdmVGdW5jKSA9PiB7XG4gICAgY29uc3Qga2VlcERpbXMgPSB0cnVlO1xuICAgIGNvbnN0IHhNYXggPSBtYXgobG9naXRzLCBheGlzLCB0cnVlKTtcbiAgICBjb25zdCBzaGlmdGVkID0gc3ViKGxvZ2l0cywgeE1heCk7XG4gICAgY29uc3QgdmFsdWUgPVxuICAgICAgICBzdWIoY2FzdChzaGlmdGVkLCAnZmxvYXQzMicpLCBsb2coc3VtKGV4cChzaGlmdGVkKSwgYXhpcywga2VlcERpbXMpKSk7XG4gICAgc2F2ZShbdmFsdWVdKTtcblxuICAgIGNvbnN0IGdyYWRGdW5jID0gKGR5OiBUZW5zb3IsIHNhdmVkOiBUZW5zb3JbXSkgPT4ge1xuICAgICAgY29uc3QgW3ZhbHVlXSA9IHNhdmVkO1xuICAgICAgY29uc3Qga2VlcERpbXMgPSB0cnVlO1xuICAgICAgY29uc3Qgc29mdG1heCA9IGV4cCh2YWx1ZSk7XG4gICAgICByZXR1cm4gc3ViKGR5LCBtdWwoc3VtKGR5LCBheGlzLCBrZWVwRGltcyksIHNvZnRtYXgpKTtcbiAgICB9O1xuICAgIHJldHVybiB7dmFsdWUsIGdyYWRGdW5jfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGN1c3RvbU9wKCRsb2dpdHMpIGFzIFQ7XG5cbiAgLy8gVE9ETyBVc2UgRW5naW5lLnJ1bktlcm5lbCB3aGVuIENQVS9XZWJHTC9XQVNNIGJhY2tlbmRzIGltcGxlbWVudCB0aGlzLlxuICAvLyBjb25zdCBpbnB1dHM6IExvZ1NvZnRtYXhJbnB1dHMgPSB7bG9naXRzOiAkbG9naXRzfTtcbiAgLy8gY29uc3QgYXR0cnM6IExvZ1NvZnRtYXhBdHRycyA9IHtheGlzfTtcbiAgLy8gcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gIC8vICAgICAgICAgICAgTG9nU29mdG1heCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gIC8vICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgbG9nU29mdG1heCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bG9nU29mdG1heF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { parseAxisParam } from '../util';\nimport { add } from './add';\nimport { expandShapeToKeepDim } from './axis_util';\nimport { exp } from './exp';\nimport { log } from './log';\nimport { max } from './max';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nimport { sub } from './sub';\nimport { sum } from './sum';\n/**\n * Computes the log(sum(exp(elements across the reduction dimensions))).\n *\n * Reduces the input along the dimensions given in `axis`. Unless `keepDims`\n * is true, the rank of the array is reduced by 1 for each entry in `axis`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axis` has no entries, all dimensions are reduced, and an array with a\n * single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.logSumExp().print(); // or tf.logSumExp(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.logSumExp(axis).print(); // or tf.logSumExp(a, axis)\n * ```\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. If null (the default),\n * reduces all dimensions.\n * @param keepDims If true, retains reduced dimensions with length\n * of 1. Defaults to false.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction logSumExp_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'logSumExp');\n const axes = parseAxisParam(axis, $x.shape);\n const xMax = max($x, axes, true /* keepDims */);\n const a = sub($x, xMax);\n const b = exp(a);\n const c = sum(b, axes);\n const d = log(c);\n const res = add(reshape(xMax, d.shape), d);\n if (keepDims) {\n const newShape = expandShapeToKeepDim(res.shape, axes);\n return reshape(res, newShape);\n }\n return res;\n}\nexport const logSumExp = /* @__PURE__ */ op({ logSumExp_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3N1bV9leHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dfc3VtX2V4cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV2QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsU0FBUyxVQUFVLENBQ2YsQ0FBb0IsRUFBRSxPQUF3QixJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDdEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFaEQsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzQyxJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBTSxDQUFDO0tBQ3BDO0lBQ0QsT0FBTyxHQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtwYXJzZUF4aXNQYXJhbX0gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7YWRkfSBmcm9tICcuL2FkZCc7XG5pbXBvcnQge2V4cGFuZFNoYXBlVG9LZWVwRGltfSBmcm9tICcuL2F4aXNfdXRpbCc7XG5pbXBvcnQge2V4cH0gZnJvbSAnLi9leHAnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vbG9nJztcbmltcG9ydCB7bWF4fSBmcm9tICcuL21heCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi9zdWInO1xuaW1wb3J0IHtzdW19IGZyb20gJy4vc3VtJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbG9nKHN1bShleHAoZWxlbWVudHMgYWNyb3NzIHRoZSByZWR1Y3Rpb24gZGltZW5zaW9ucykpKS5cbiAqXG4gKiBSZWR1Y2VzIHRoZSBpbnB1dCBhbG9uZyB0aGUgZGltZW5zaW9ucyBnaXZlbiBpbiBgYXhpc2AuIFVubGVzcyBga2VlcERpbXNgXG4gKiBpcyB0cnVlLCB0aGUgcmFuayBvZiB0aGUgYXJyYXkgaXMgcmVkdWNlZCBieSAxIGZvciBlYWNoIGVudHJ5IGluIGBheGlzYC5cbiAqIElmIGBrZWVwRGltc2AgaXMgdHJ1ZSwgdGhlIHJlZHVjZWQgZGltZW5zaW9ucyBhcmUgcmV0YWluZWQgd2l0aCBsZW5ndGggMS5cbiAqIElmIGBheGlzYCBoYXMgbm8gZW50cmllcywgYWxsIGRpbWVuc2lvbnMgYXJlIHJlZHVjZWQsIGFuZCBhbiBhcnJheSB3aXRoIGFcbiAqIHNpbmdsZSBlbGVtZW50IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqXG4gKiB4LmxvZ1N1bUV4cCgpLnByaW50KCk7ICAvLyBvciB0Zi5sb2dTdW1FeHAoeClcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pO1xuICpcbiAqIGNvbnN0IGF4aXMgPSAxO1xuICogeC5sb2dTdW1FeHAoYXhpcykucHJpbnQoKTsgIC8vIG9yIHRmLmxvZ1N1bUV4cChhLCBheGlzKVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIElmIG51bGwgKHRoZSBkZWZhdWx0KSxcbiAqICAgICByZWR1Y2VzIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggbGVuZ3RoXG4gKiAgICAgb2YgMS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gbG9nU3VtRXhwXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdsb2dTdW1FeHAnKTtcblxuICBjb25zdCBheGVzID0gcGFyc2VBeGlzUGFyYW0oYXhpcywgJHguc2hhcGUpO1xuICBjb25zdCB4TWF4ID0gbWF4KCR4LCBheGVzLCB0cnVlIC8qIGtlZXBEaW1zICovKTtcbiAgY29uc3QgYSA9IHN1YigkeCwgeE1heCk7XG4gIGNvbnN0IGIgPSBleHAoYSk7XG4gIGNvbnN0IGMgPSBzdW0oYiwgYXhlcyk7XG4gIGNvbnN0IGQgPSBsb2coYyk7XG4gIGNvbnN0IHJlcyA9IGFkZChyZXNoYXBlKHhNYXgsIGQuc2hhcGUpLCBkKTtcblxuICBpZiAoa2VlcERpbXMpIHtcbiAgICBjb25zdCBuZXdTaGFwZSA9IGV4cGFuZFNoYXBlVG9LZWVwRGltKHJlcy5zaGFwZSwgYXhlcyk7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBuZXdTaGFwZSkgYXMgVDtcbiAgfVxuICByZXR1cm4gcmVzIGFzIFQ7XG59XG5cbmV4cG9ydCBjb25zdCBsb2dTdW1FeHAgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xvZ1N1bUV4cF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LogicalAnd } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of `a AND b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalAnd(b).print();\n * ```\n *\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction logicalAnd_(a, b) {\n const $a = convertToTensor(a, 'a', 'logicalAnd', 'bool');\n const $b = convertToTensor(b, 'b', 'logicalAnd', 'bool');\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(LogicalAnd, inputs);\n}\nexport const logicalAnd = /* @__PURE__ */ op({ logicalAnd_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF9hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dpY2FsX2FuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFHN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLFdBQVcsQ0FDaEIsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUFxQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWhELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TG9naWNhbEFuZCwgTG9naWNhbEFuZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIGBhIEFORCBiYCBlbGVtZW50LXdpc2UuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFtmYWxzZSwgZmFsc2UsIHRydWUsIHRydWVdLCAnYm9vbCcpO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWVdLCAnYm9vbCcpO1xuICpcbiAqIGEubG9naWNhbEFuZChiKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci4gTXVzdCBiZSBvZiBkdHlwZSBib29sLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgYmUgb2YgZHR5cGUgYm9vbC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbG9naWNhbEFuZF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2xvZ2ljYWxBbmQnLCAnYm9vbCcpO1xuICBjb25zdCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdsb2dpY2FsQW5kJywgJ2Jvb2wnKTtcbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IExvZ2ljYWxBbmRJbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMb2dpY2FsQW5kLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsb2dpY2FsQW5kID0gLyogQF9fUFVSRV9fICovIG9wKHtsb2dpY2FsQW5kX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LogicalNot } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the truth value of `NOT x` element-wise.\n *\n * ```js\n * const a = tf.tensor1d([false, true], 'bool');\n *\n * a.logicalNot().print();\n * ```\n *\n * @param x The input tensor. Must be of dtype 'bool'.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction logicalNot_(x) {\n const $x = convertToTensor(x, 'x', 'logicalNot', 'bool');\n const inputs = { x: $x };\n return ENGINE.runKernel(LogicalNot, inputs);\n}\nexport const logicalNot = /* @__PURE__ */ op({ logicalNot_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF9ub3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dpY2FsX25vdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFHN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLENBQWU7SUFDcEQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxHQUFxQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUN6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TG9naWNhbE5vdCwgTG9naWNhbE5vdElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJ1dGggdmFsdWUgb2YgYE5PVCB4YCBlbGVtZW50LXdpc2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbZmFsc2UsIHRydWVdLCAnYm9vbCcpO1xuICpcbiAqIGEubG9naWNhbE5vdCgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLiBNdXN0IGJlIG9mIGR0eXBlICdib29sJy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbG9naWNhbE5vdF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvZ2ljYWxOb3QnLCAnYm9vbCcpO1xuICBjb25zdCBpbnB1dHM6IExvZ2ljYWxOb3RJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMb2dpY2FsTm90LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsb2dpY2FsTm90ID0gLyogQF9fUFVSRV9fICovIG9wKHtsb2dpY2FsTm90X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LogicalOr } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of `a OR b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalOr(b).print();\n * ```\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction logicalOr_(a, b) {\n const $a = convertToTensor(a, 'a', 'logicalOr', 'bool');\n const $b = convertToTensor(b, 'b', 'logicalOr', 'bool');\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(LogicalOr, inputs);\n}\nexport const logicalOr = /* @__PURE__ */ op({ logicalOr_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF9vci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvZ2ljYWxfb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBRzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLFVBQVUsQ0FDZixDQUFvQixFQUFFLENBQW9CO0lBQzVDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQW9CLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDL0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0xvZ2ljYWxPciwgTG9naWNhbE9ySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIGBhIE9SIGJgIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZV0sICdib29sJyk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV0sICdib29sJyk7XG4gKlxuICogYS5sb2dpY2FsT3IoYikucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci4gTXVzdCBiZSBvZiBkdHlwZSBib29sLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgYmUgb2YgZHR5cGUgYm9vbC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbG9naWNhbE9yXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbG9naWNhbE9yJywgJ2Jvb2wnKTtcbiAgY29uc3QgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbG9naWNhbE9yJywgJ2Jvb2wnKTtcbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IExvZ2ljYWxPcklucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMb2dpY2FsT3IsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBsb2dpY2FsT3IgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xvZ2ljYWxPcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { logicalAnd } from './logical_and';\nimport { logicalNot } from './logical_not';\nimport { logicalOr } from './logical_or';\nimport { op } from './operation';\n/**\n * Returns the truth value of `a XOR b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalXor(b).print();\n * ```\n *\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction logicalXor_(a, b) {\n const $a = convertToTensor(a, 'a', 'logicalXor', 'bool');\n const $b = convertToTensor(b, 'b', 'logicalXor', 'bool');\n assertAndGetBroadcastShape($a.shape, $b.shape);\n // x ^ y = (x | y) & ~(x & y)\n return logicalAnd(logicalOr(a, b), logicalNot(logicalAnd(a, b)));\n}\nexport const logicalXor = /* @__PURE__ */ op({ logicalXor_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF94b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dpY2FsX3hvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsV0FBVyxDQUNoQixDQUFvQixFQUFFLENBQW9CO0lBQzVDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsNkJBQTZCO0lBQzdCLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHthc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZX0gZnJvbSAnLi9icm9hZGNhc3RfdXRpbCc7XG5pbXBvcnQge2xvZ2ljYWxBbmR9IGZyb20gJy4vbG9naWNhbF9hbmQnO1xuaW1wb3J0IHtsb2dpY2FsTm90fSBmcm9tICcuL2xvZ2ljYWxfbm90JztcbmltcG9ydCB7bG9naWNhbE9yfSBmcm9tICcuL2xvZ2ljYWxfb3InO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIGBhIFhPUiBiYCBlbGVtZW50LXdpc2UuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFtmYWxzZSwgZmFsc2UsIHRydWUsIHRydWVdLCAnYm9vbCcpO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWVdLCAnYm9vbCcpO1xuICpcbiAqIGEubG9naWNhbFhvcihiKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci4gTXVzdCBiZSBvZiBkdHlwZSBib29sLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgYmUgb2YgZHR5cGUgYm9vbC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbG9naWNhbFhvcl88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2xvZ2ljYWxYb3InLCAnYm9vbCcpO1xuICBjb25zdCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdsb2dpY2FsWG9yJywgJ2Jvb2wnKTtcbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICAvLyB4IF4geSA9ICh4IHwgeSkgJiB+KHggJiB5KVxuICByZXR1cm4gbG9naWNhbEFuZChsb2dpY2FsT3IoYSwgYiksIGxvZ2ljYWxOb3QobG9naWNhbEFuZChhLCBiKSkpO1xufVxuXG5leHBvcnQgY29uc3QgbG9naWNhbFhvciA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bG9naWNhbFhvcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SearchSorted } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { sizeFromShape } from '../util_base';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nconst INT32_MAX = 2147483648;\n/**\n * Searches for where a value would go in a sorted sequence.\n *\n * This is not a method for checking containment (like javascript in).\n *\n * The typical use case for this operation is \"binning\", \"bucketing\", or\n * \"discretizing\". The values are assigned to bucket-indices based on the edges\n * listed in 'sortedSequence'. This operation returns the bucket-index for each\n * value.\n *\n * The side argument controls which index is returned if a value lands exactly\n * on an edge.\n *\n * The axis is not settable for this operation. It always operates on the\n * innermost dimension (axis=-1). The operation will accept any number of outer\n * dimensions.\n *\n * Note: This operation assumes that 'sortedSequence' is sorted along the\n * innermost axis, maybe using 'sort(..., axis=-1)'. If the sequence is not\n * sorted no error is raised and the content of the returned tensor is not well\n * defined.\n *\n * ```js\n * const edges = tf.tensor1d([-1, 3.3, 9.1, 10.0]);\n * let values = tf.tensor1d([0.0, 4.1, 12.0]);\n * const result1 = tf.searchSorted(edges, values, 'left');\n * result1.print(); // [1, 2, 4]\n *\n * const seq = tf.tensor1d([0, 3, 9, 10, 10]);\n * values = tf.tensor1d([0, 4, 10]);\n * const result2 = tf.searchSorted(seq, values, 'left');\n * result2.print(); // [0, 2, 3]\n * const result3 = tf.searchSorted(seq, values, 'right');\n * result3.print(); // [1, 2, 5]\n *\n * const sortedSequence = tf.tensor2d([[0., 3., 8., 9., 10.],\n * [1., 2., 3., 4., 5.]]);\n * values = tf.tensor2d([[9.8, 2.1, 4.3],\n * [0.1, 6.6, 4.5, ]]);\n * const result4 = tf.searchSorted(sortedSequence, values, 'left');\n * result4.print(); // [[4, 1, 2], [0, 5, 4]]\n * ```\n * @param sortedSequence: N-D. Sorted sequence.\n * @param values: N-D. Search values.\n * @param side: 'left'|'right'. Defaults to 'left'. 'left' corresponds to lower\n * bound and 'right' to upper bound.\n * @return An N-D int32 tensor the size of values containing the result of\n * applying either lower bound or upper bound (depending on side) to each\n * value. The result is not a global index to the entire Tensor, but the\n * index in the last dimension.\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nfunction searchSorted_(sortedSequence, values, side = 'left') {\n const $sortedSequence = convertToTensor(sortedSequence, 'sortedSequence', 'searchSorted');\n const $values = convertToTensor(values, 'values', 'searchSorted');\n const sequenceSize = $sortedSequence.shape[$sortedSequence.shape.length - 1];\n const valuesSize = $values.shape[$values.shape.length - 1];\n const $sortedSequence2D = reshape($sortedSequence, [-1, sequenceSize]);\n const $values2D = reshape($values, [-1, valuesSize]);\n if ($sortedSequence2D.rank < 2) {\n throw new Error(`Sorted input argument must be at least 2-dimensional`);\n }\n if ($sortedSequence2D.shape[0] !== $values2D.shape[0]) {\n throw new Error(`Leading dimension of 'sortedSequence' and 'values' must match.`);\n }\n if (sizeFromShape($values2D.shape) >= INT32_MAX) {\n throw new Error(`values tensor size must less than ${INT32_MAX}`);\n }\n if ($sortedSequence2D.shape[1] >= INT32_MAX) {\n throw new Error(`trailing dim_size must less than ${INT32_MAX} for int32 output type, was ${$sortedSequence2D.shape[1]}`);\n }\n const inputs = {\n sortedSequence: $sortedSequence2D,\n values: $values2D,\n };\n const attrs = { side };\n return ENGINE.runKernel(SearchSorted, inputs, attrs);\n}\nexport const searchSorted = /* @__PURE__ */ op({ searchSorted_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoX3NvcnRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NlYXJjaF9zb3J0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUF3QyxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFDN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUNILFNBQVMsYUFBYSxDQUNsQixjQUFpQyxFQUFFLE1BQXlCLEVBQzVELE9BQXVCLE1BQU07SUFDL0IsTUFBTSxlQUFlLEdBQ2pCLGVBQWUsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFbEUsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFckQsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztLQUN6RTtJQUNELElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDckQsTUFBTSxJQUFJLEtBQUssQ0FDWCxnRUFBZ0UsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsRUFBRTtRQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ25FO0lBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQ1osU0FBUywrQkFBK0IsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMzRTtJQUVELE1BQU0sTUFBTSxHQUF1QjtRQUNqQyxjQUFjLEVBQUUsaUJBQWlCO1FBQ2pDLE1BQU0sRUFBRSxTQUFTO0tBQ2xCLENBQUM7SUFDRixNQUFNLEtBQUssR0FBc0IsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUV4QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQVksRUFBRSxLQUFXLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2VhcmNoU29ydGVkLCBTZWFyY2hTb3J0ZWRBdHRycywgU2VhcmNoU29ydGVkSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG5jb25zdCBJTlQzMl9NQVggPSAyMTQ3NDgzNjQ4O1xuLyoqXG4gKiBTZWFyY2hlcyBmb3Igd2hlcmUgYSB2YWx1ZSB3b3VsZCBnbyBpbiBhIHNvcnRlZCBzZXF1ZW5jZS5cbiAqXG4gKiBUaGlzIGlzIG5vdCBhIG1ldGhvZCBmb3IgY2hlY2tpbmcgY29udGFpbm1lbnQgKGxpa2UgamF2YXNjcmlwdCBpbikuXG4gKlxuICogVGhlIHR5cGljYWwgdXNlIGNhc2UgZm9yIHRoaXMgb3BlcmF0aW9uIGlzIFwiYmlubmluZ1wiLCBcImJ1Y2tldGluZ1wiLCBvclxuICogXCJkaXNjcmV0aXppbmdcIi4gVGhlIHZhbHVlcyBhcmUgYXNzaWduZWQgdG8gYnVja2V0LWluZGljZXMgYmFzZWQgb24gdGhlIGVkZ2VzXG4gKiBsaXN0ZWQgaW4gJ3NvcnRlZFNlcXVlbmNlJy4gVGhpcyBvcGVyYXRpb24gcmV0dXJucyB0aGUgYnVja2V0LWluZGV4IGZvciBlYWNoXG4gKiB2YWx1ZS5cbiAqXG4gKiBUaGUgc2lkZSBhcmd1bWVudCBjb250cm9scyB3aGljaCBpbmRleCBpcyByZXR1cm5lZCBpZiBhIHZhbHVlIGxhbmRzIGV4YWN0bHlcbiAqIG9uIGFuIGVkZ2UuXG4gKlxuICogVGhlIGF4aXMgaXMgbm90IHNldHRhYmxlIGZvciB0aGlzIG9wZXJhdGlvbi4gSXQgYWx3YXlzIG9wZXJhdGVzIG9uIHRoZVxuICogaW5uZXJtb3N0IGRpbWVuc2lvbiAoYXhpcz0tMSkuIFRoZSBvcGVyYXRpb24gd2lsbCBhY2NlcHQgYW55IG51bWJlciBvZiBvdXRlclxuICogZGltZW5zaW9ucy5cbiAqXG4gKiBOb3RlOiBUaGlzIG9wZXJhdGlvbiBhc3N1bWVzIHRoYXQgJ3NvcnRlZFNlcXVlbmNlJyBpcyBzb3J0ZWQgYWxvbmcgdGhlXG4gKiBpbm5lcm1vc3QgYXhpcywgbWF5YmUgdXNpbmcgJ3NvcnQoLi4uLCBheGlzPS0xKScuIElmIHRoZSBzZXF1ZW5jZSBpcyBub3RcbiAqIHNvcnRlZCBubyBlcnJvciBpcyByYWlzZWQgYW5kIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB0ZW5zb3IgaXMgbm90IHdlbGxcbiAqIGRlZmluZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGVkZ2VzID0gdGYudGVuc29yMWQoWy0xLCAzLjMsIDkuMSwgMTAuMF0pO1xuICogbGV0IHZhbHVlcyA9IHRmLnRlbnNvcjFkKFswLjAsIDQuMSwgMTIuMF0pO1xuICogY29uc3QgcmVzdWx0MSA9IHRmLnNlYXJjaFNvcnRlZChlZGdlcywgdmFsdWVzLCAnbGVmdCcpO1xuICogcmVzdWx0MS5wcmludCgpOyAvLyBbMSwgMiwgNF1cbiAqXG4gKiBjb25zdCBzZXEgPSB0Zi50ZW5zb3IxZChbMCwgMywgOSwgMTAsIDEwXSk7XG4gKiB2YWx1ZXMgPSB0Zi50ZW5zb3IxZChbMCwgNCwgMTBdKTtcbiAqIGNvbnN0IHJlc3VsdDIgPSB0Zi5zZWFyY2hTb3J0ZWQoc2VxLCB2YWx1ZXMsICdsZWZ0Jyk7XG4gKiByZXN1bHQyLnByaW50KCk7IC8vIFswLCAyLCAzXVxuICogY29uc3QgcmVzdWx0MyA9IHRmLnNlYXJjaFNvcnRlZChzZXEsIHZhbHVlcywgJ3JpZ2h0Jyk7XG4gKiByZXN1bHQzLnByaW50KCk7IC8vIFsxLCAyLCA1XVxuICpcbiAqIGNvbnN0IHNvcnRlZFNlcXVlbmNlID0gdGYudGVuc29yMmQoW1swLiwgMy4sIDguLCA5LiwgMTAuXSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLiwgMi4sIDMuLCA0LiwgNS5dXSk7XG4gKiB2YWx1ZXMgPSB0Zi50ZW5zb3IyZChbWzkuOCwgMi4xLCA0LjNdLFxuICogICAgICAgICAgICAgICAgICAgICAgIFswLjEsIDYuNiwgNC41LCBdXSk7XG4gKiBjb25zdCByZXN1bHQ0ID0gdGYuc2VhcmNoU29ydGVkKHNvcnRlZFNlcXVlbmNlLCB2YWx1ZXMsICdsZWZ0Jyk7XG4gKiByZXN1bHQ0LnByaW50KCk7IC8vIFtbNCwgMSwgMl0sIFswLCA1LCA0XV1cbiAqIGBgYFxuICogQHBhcmFtIHNvcnRlZFNlcXVlbmNlOiBOLUQuIFNvcnRlZCBzZXF1ZW5jZS5cbiAqIEBwYXJhbSB2YWx1ZXM6IE4tRC4gU2VhcmNoIHZhbHVlcy5cbiAqIEBwYXJhbSBzaWRlOiAnbGVmdCd8J3JpZ2h0Jy4gRGVmYXVsdHMgdG8gJ2xlZnQnLiAnbGVmdCcgY29ycmVzcG9uZHMgdG8gbG93ZXJcbiAqICAgICBib3VuZCBhbmQgJ3JpZ2h0JyB0byB1cHBlciBib3VuZC5cbiAqIEByZXR1cm4gQW4gTi1EIGludDMyIHRlbnNvciB0aGUgc2l6ZSBvZiB2YWx1ZXMgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mXG4gKiAgICAgYXBwbHlpbmcgZWl0aGVyIGxvd2VyIGJvdW5kIG9yIHVwcGVyIGJvdW5kIChkZXBlbmRpbmcgb24gc2lkZSkgdG8gZWFjaFxuICogICAgIHZhbHVlLiBUaGUgcmVzdWx0IGlzIG5vdCBhIGdsb2JhbCBpbmRleCB0byB0aGUgZW50aXJlIFRlbnNvciwgYnV0IHRoZVxuICogICAgIGluZGV4IGluIHRoZSBsYXN0IGRpbWVuc2lvbi5cbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0V2YWx1YXRpb24nfVxuICovXG5mdW5jdGlvbiBzZWFyY2hTb3J0ZWRfKFxuICAgIHNvcnRlZFNlcXVlbmNlOiBUZW5zb3J8VGVuc29yTGlrZSwgdmFsdWVzOiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgICBzaWRlOiAnbGVmdCd8J3JpZ2h0JyA9ICdsZWZ0Jyk6IFRlbnNvciB7XG4gIGNvbnN0ICRzb3J0ZWRTZXF1ZW5jZSA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3Ioc29ydGVkU2VxdWVuY2UsICdzb3J0ZWRTZXF1ZW5jZScsICdzZWFyY2hTb3J0ZWQnKTtcbiAgY29uc3QgJHZhbHVlcyA9IGNvbnZlcnRUb1RlbnNvcih2YWx1ZXMsICd2YWx1ZXMnLCAnc2VhcmNoU29ydGVkJyk7XG5cbiAgY29uc3Qgc2VxdWVuY2VTaXplID0gJHNvcnRlZFNlcXVlbmNlLnNoYXBlWyRzb3J0ZWRTZXF1ZW5jZS5zaGFwZS5sZW5ndGggLSAxXTtcbiAgY29uc3QgdmFsdWVzU2l6ZSA9ICR2YWx1ZXMuc2hhcGVbJHZhbHVlcy5zaGFwZS5sZW5ndGggLSAxXTtcbiAgY29uc3QgJHNvcnRlZFNlcXVlbmNlMkQgPSByZXNoYXBlKCRzb3J0ZWRTZXF1ZW5jZSwgWy0xLCBzZXF1ZW5jZVNpemVdKTtcbiAgY29uc3QgJHZhbHVlczJEID0gcmVzaGFwZSgkdmFsdWVzLCBbLTEsIHZhbHVlc1NpemVdKTtcblxuICBpZiAoJHNvcnRlZFNlcXVlbmNlMkQucmFuayA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvcnRlZCBpbnB1dCBhcmd1bWVudCBtdXN0IGJlIGF0IGxlYXN0IDItZGltZW5zaW9uYWxgKTtcbiAgfVxuICBpZiAoJHNvcnRlZFNlcXVlbmNlMkQuc2hhcGVbMF0gIT09ICR2YWx1ZXMyRC5zaGFwZVswXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYExlYWRpbmcgZGltZW5zaW9uIG9mICdzb3J0ZWRTZXF1ZW5jZScgYW5kICd2YWx1ZXMnIG11c3QgbWF0Y2guYCk7XG4gIH1cbiAgaWYgKHNpemVGcm9tU2hhcGUoJHZhbHVlczJELnNoYXBlKSA+PSBJTlQzMl9NQVgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbHVlcyB0ZW5zb3Igc2l6ZSBtdXN0IGxlc3MgdGhhbiAke0lOVDMyX01BWH1gKTtcbiAgfVxuICBpZiAoJHNvcnRlZFNlcXVlbmNlMkQuc2hhcGVbMV0gPj0gSU5UMzJfTUFYKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB0cmFpbGluZyBkaW1fc2l6ZSBtdXN0IGxlc3MgdGhhbiAke1xuICAgICAgICBJTlQzMl9NQVh9IGZvciBpbnQzMiBvdXRwdXQgdHlwZSwgd2FzICR7JHNvcnRlZFNlcXVlbmNlMkQuc2hhcGVbMV19YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFNlYXJjaFNvcnRlZElucHV0cyA9IHtcbiAgICBzb3J0ZWRTZXF1ZW5jZTogJHNvcnRlZFNlcXVlbmNlMkQsXG4gICAgdmFsdWVzOiAkdmFsdWVzMkQsXG4gIH07XG4gIGNvbnN0IGF0dHJzOiBTZWFyY2hTb3J0ZWRBdHRycyA9IHtzaWRlfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTZWFyY2hTb3J0ZWQsIGlucHV0cyBhcyB7fSwgYXR0cnMgYXMge30pO1xufVxuXG5leHBvcnQgY29uc3Qgc2VhcmNoU29ydGVkID0gLyogQF9fUFVSRV9fICovIG9wKHtzZWFyY2hTb3J0ZWRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { searchSorted } from './search_sorted';\n/**\n * Searches for where a value would go in a sorted sequence.\n *\n * This is not a method for checking containment (like javascript in).\n *\n * The typical use case for this operation is \"binning\", \"bucketing\", or\n * \"discretizing\". The values are assigned to bucket-indices based on the edges\n * listed in 'sortedSequence'. This operation returns the bucket-index for each\n * value.\n *\n * The index returned corresponds to the first edge greater than or equal to the\n * value.\n *\n * The axis is not settable for this operation. It always operates on the\n * innermost dimension (axis=-1). The operation will accept any number of outer\n * dimensions.\n *\n * Note: This operation assumes that 'lowerBound' is sorted along the\n * innermost axis, maybe using 'sort(..., axis=-1)'. If the sequence is not\n * sorted no error is raised and the content of the returned tensor is not well\n * defined.\n *\n * ```js\n * const edges = tf.tensor1d([-1, 3.3, 9.1, 10.0]);\n * let values = tf.tensor1d([0.0, 4.1, 12.0]);\n * const result1 = tf.lowerBound(edges, values);\n * result1.print(); // [1, 2, 4]\n *\n * const seq = tf.tensor1d([0, 3, 9, 10, 10]);\n * values = tf.tensor1d([0, 4, 10]);\n * const result2 = tf.lowerBound(seq, values);\n * result2.print(); // [0, 2, 3]\n *\n * const sortedSequence = tf.tensor2d([[0., 3., 8., 9., 10.],\n * [1., 2., 3., 4., 5.]]);\n * values = tf.tensor2d([[9.8, 2.1, 4.3],\n * [0.1, 6.6, 4.5, ]]);\n * const result3 = tf.lowerBound(sortedSequence, values);\n * result3.print(); // [[4, 1, 2], [0, 5, 4]]\n * ```\n * @param sortedSequence: N-D. Sorted sequence.\n * @param values: N-D. Search values.\n * @return An N-D int32 tensor the size of values containing the result of\n * applying lower bound to each value. The result is not a global index to\n * the entire Tensor, but the index in the last dimension.\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nexport function lowerBound(sortedSequence, values) {\n return searchSorted(sortedSequence, values, 'left');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG93ZXJfYm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb3dlcl9ib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN0QixjQUFpQyxFQUFFLE1BQXlCO0lBQzlELE9BQU8sWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7c2VhcmNoU29ydGVkfSBmcm9tICcuL3NlYXJjaF9zb3J0ZWQnO1xuXG4vKipcbiAqIFNlYXJjaGVzIGZvciB3aGVyZSBhIHZhbHVlIHdvdWxkIGdvIGluIGEgc29ydGVkIHNlcXVlbmNlLlxuICpcbiAqIFRoaXMgaXMgbm90IGEgbWV0aG9kIGZvciBjaGVja2luZyBjb250YWlubWVudCAobGlrZSBqYXZhc2NyaXB0IGluKS5cbiAqXG4gKiBUaGUgdHlwaWNhbCB1c2UgY2FzZSBmb3IgdGhpcyBvcGVyYXRpb24gaXMgXCJiaW5uaW5nXCIsIFwiYnVja2V0aW5nXCIsIG9yXG4gKiBcImRpc2NyZXRpemluZ1wiLiBUaGUgdmFsdWVzIGFyZSBhc3NpZ25lZCB0byBidWNrZXQtaW5kaWNlcyBiYXNlZCBvbiB0aGUgZWRnZXNcbiAqIGxpc3RlZCBpbiAnc29ydGVkU2VxdWVuY2UnLiBUaGlzIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBidWNrZXQtaW5kZXggZm9yIGVhY2hcbiAqIHZhbHVlLlxuICpcbiAqIFRoZSBpbmRleCByZXR1cm5lZCBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgZWRnZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlXG4gKiB2YWx1ZS5cbiAqXG4gKiBUaGUgYXhpcyBpcyBub3Qgc2V0dGFibGUgZm9yIHRoaXMgb3BlcmF0aW9uLiBJdCBhbHdheXMgb3BlcmF0ZXMgb24gdGhlXG4gKiBpbm5lcm1vc3QgZGltZW5zaW9uIChheGlzPS0xKS4gVGhlIG9wZXJhdGlvbiB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9mIG91dGVyXG4gKiBkaW1lbnNpb25zLlxuICpcbiAqIE5vdGU6IFRoaXMgb3BlcmF0aW9uIGFzc3VtZXMgdGhhdCAnbG93ZXJCb3VuZCcgaXMgc29ydGVkIGFsb25nIHRoZVxuICogaW5uZXJtb3N0IGF4aXMsIG1heWJlIHVzaW5nICdzb3J0KC4uLiwgYXhpcz0tMSknLiBJZiB0aGUgc2VxdWVuY2UgaXMgbm90XG4gKiBzb3J0ZWQgbm8gZXJyb3IgaXMgcmFpc2VkIGFuZCB0aGUgY29udGVudCBvZiB0aGUgcmV0dXJuZWQgdGVuc29yIGlzIG5vdCB3ZWxsXG4gKiBkZWZpbmVkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBlZGdlcyA9IHRmLnRlbnNvcjFkKFstMSwgMy4zLCA5LjEsIDEwLjBdKTtcbiAqIGxldCB2YWx1ZXMgPSB0Zi50ZW5zb3IxZChbMC4wLCA0LjEsIDEyLjBdKTtcbiAqIGNvbnN0IHJlc3VsdDEgPSB0Zi5sb3dlckJvdW5kKGVkZ2VzLCB2YWx1ZXMpO1xuICogcmVzdWx0MS5wcmludCgpOyAvLyBbMSwgMiwgNF1cbiAqXG4gKiBjb25zdCBzZXEgPSB0Zi50ZW5zb3IxZChbMCwgMywgOSwgMTAsIDEwXSk7XG4gKiB2YWx1ZXMgPSB0Zi50ZW5zb3IxZChbMCwgNCwgMTBdKTtcbiAqIGNvbnN0IHJlc3VsdDIgPSB0Zi5sb3dlckJvdW5kKHNlcSwgdmFsdWVzKTtcbiAqIHJlc3VsdDIucHJpbnQoKTsgLy8gWzAsIDIsIDNdXG4gKlxuICogY29uc3Qgc29ydGVkU2VxdWVuY2UgPSB0Zi50ZW5zb3IyZChbWzAuLCAzLiwgOC4sIDkuLCAxMC5dLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuLCAyLiwgMy4sIDQuLCA1Ll1dKTtcbiAqIHZhbHVlcyA9IHRmLnRlbnNvcjJkKFtbOS44LCAyLjEsIDQuM10sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgWzAuMSwgNi42LCA0LjUsIF1dKTtcbiAqIGNvbnN0IHJlc3VsdDMgPSB0Zi5sb3dlckJvdW5kKHNvcnRlZFNlcXVlbmNlLCB2YWx1ZXMpO1xuICogcmVzdWx0My5wcmludCgpOyAvLyBbWzQsIDEsIDJdLCBbMCwgNSwgNF1dXG4gKiBgYGBcbiAqIEBwYXJhbSBzb3J0ZWRTZXF1ZW5jZTogTi1ELiBTb3J0ZWQgc2VxdWVuY2UuXG4gKiBAcGFyYW0gdmFsdWVzOiBOLUQuIFNlYXJjaCB2YWx1ZXMuXG4gKiBAcmV0dXJuIEFuIE4tRCBpbnQzMiB0ZW5zb3IgdGhlIHNpemUgb2YgdmFsdWVzIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZlxuICogICAgIGFwcGx5aW5nIGxvd2VyIGJvdW5kIHRvIGVhY2ggdmFsdWUuIFRoZSByZXN1bHQgaXMgbm90IGEgZ2xvYmFsIGluZGV4IHRvXG4gKiAgICAgdGhlIGVudGlyZSBUZW5zb3IsIGJ1dCB0aGUgaW5kZXggaW4gdGhlIGxhc3QgZGltZW5zaW9uLlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnRXZhbHVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb3dlckJvdW5kKFxuICAgIHNvcnRlZFNlcXVlbmNlOiBUZW5zb3J8VGVuc29yTGlrZSwgdmFsdWVzOiBUZW5zb3J8VGVuc29yTGlrZSk6IFRlbnNvciB7XG4gIHJldHVybiBzZWFyY2hTb3J0ZWQoc29ydGVkU2VxdWVuY2UsIHZhbHVlcywgJ2xlZnQnKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { MaxPool } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the 2D max pooling of an image.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n * `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n * `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in dilated pooling. Defaults to `[1, 1]`. If `dilations` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n */\nfunction maxPool_(x, filterSize, strides, pad, dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'maxPool');\n const dilations = 1;\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${x4D.rank}.`);\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in maxPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n conv_util.checkPadOnDimRoundingMode('maxPool', pad, dimRoundingMode);\n const inputs = { x: x4D };\n const attrs = { filterSize, strides, pad, dimRoundingMode };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(MaxPool, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const maxPool = /* @__PURE__ */ op({ maxPool_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4X3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tYXhfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxPQUFPLEVBQThCLE1BQU0saUJBQWlCLENBQUM7QUFJckUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sS0FBSyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsU0FBUyxRQUFRLENBQ2IsQ0FBZSxFQUFFLFVBQW1DLEVBQ3BELE9BQWdDLEVBQ2hDLEdBQW9ELEVBQ3BELGVBQXdDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVwQixJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0Q7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUNQLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNkLEdBQUcsRUFBRSxDQUFDLHVEQUF1RCxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM5RSxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQzVELEdBQUcsRUFBRSxDQUFDLDJEQUEyRDtRQUM3RCxlQUFlLE9BQU8sbUJBQW1CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDL0QsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckUsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFpQixFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxDQUFDO0lBRXhFLDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLE9BQU8sRUFBRSxNQUFtQyxFQUM1QyxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TWF4UG9vbCwgTWF4UG9vbEF0dHJzLCBNYXhQb29sSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgMkQgbWF4IHBvb2xpbmcgb2YgYW4gaW1hZ2UuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA0IG9yIHJhbmsgMyBvZiBzaGFwZVxuICogICAgIGBbYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGluQ2hhbm5lbHNdYC4gSWYgcmFuayAzLCBiYXRjaCBvZiAxIGlzIGFzc3VtZWQuXG4gKiBAcGFyYW0gZmlsdGVyU2l6ZSBUaGUgZmlsdGVyIHNpemU6IGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aF1gLiBJZlxuICogICAgIGBmaWx0ZXJTaXplYCBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYGZpbHRlckhlaWdodCA9PSBmaWx0ZXJXaWR0aGAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgcG9vbGluZzogYFtzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoXWAuIElmXG4gKiAgICAgYHN0cmlkZXNgIGlzIGEgc2luZ2xlIG51bWJlciwgdGhlbiBgc3RyaWRlSGVpZ2h0ID09IHN0cmlkZVdpZHRoYC5cbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gZGlsYXRlZCBwb29saW5nLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYGRpbGF0aW9uc2AgaXMgYSBzaW5nbGVcbiAqICAgICBudW1iZXIsIHRoZW4gYGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW5cbiAqICAgICAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgIC0gRm9yIG1vcmUgaW5mbywgc2VlIHRoaXMgZ3VpZGU6XG4gKiAgICAgW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbl0oXG4gKiAgICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb24pXG4gKiBAcGFyYW0gZGltUm91bmRpbmdNb2RlIEEgc3RyaW5nIGZyb206ICdjZWlsJywgJ3JvdW5kJywgJ2Zsb29yJy4gSWYgbm9uZSBpc1xuICogICAgIHByb3ZpZGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdHJ1bmNhdGUuXG4gKi9cbmZ1bmN0aW9uIG1heFBvb2xfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxjb252X3V0aWwuRXhwbGljaXRQYWRkaW5nLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbWF4UG9vbCcpO1xuICBjb25zdCBkaWxhdGlvbnMgPSAxO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuICBpZiAoJHgucmFuayA9PT0gMykge1xuICAgIHJlc2hhcGVkVG80RCA9IHRydWU7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeDRELnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gbWF4UG9vbDogaW5wdXQgbXVzdCBiZSByYW5rIDQgYnV0IGdvdCByYW5rICR7eDRELnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5laXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUoc3RyaWRlcywgZGlsYXRpb25zKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBtYXhQb29sOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKCdtYXhQb29sJywgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICBjb25zdCBpbnB1dHM6IE1heFBvb2xJbnB1dHMgPSB7eDogeDREfTtcbiAgY29uc3QgYXR0cnM6IE1heFBvb2xBdHRycyA9IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZX07XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgTWF4UG9vbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcblxuICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2wgPSAvKiBAX19QVVJFX18gKi8gb3Aoe21heFBvb2xffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { MaxPool3D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { checkPadOnDimRoundingMode } from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the 3D max pooling.\n *\n * ```js\n * const x = tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]);\n * const result = tf.maxPool3d(x, 2, 1, 'valid');\n * result.print();\n * ```\n *\n * @param x The input tensor, of rank 5 or rank 4 of shape\n * `[batch, depth, height, width, inChannels]`.\n * @param filterSize The filter size:\n * `[filterDepth, filterHeight, filterWidth]`.\n * If `filterSize` is a single number,\n * then `filterDepth == filterHeight == filterWidth`.\n * @param strides The strides of the pooling:\n * `[strideDepth, strideHeight, strideWidth]`.\n * If `strides` is a single number,\n * then `strideDepth == strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1*1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n * \"NDHWC\". Specify the data format of the input and output data. With the\n * default format \"NDHWC\", the data is stored in the order of: [batch,\n * depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction maxPool3d_(x, filterSize = [1, 1, 1], strides, pad, dimRoundingMode, dataFormat = 'NDHWC') {\n const $x = convertToTensor(x, 'x', 'maxPool3d');\n let x5D = $x;\n let reshapedTo5D = false;\n if ($x.rank === 4) {\n reshapedTo5D = true;\n x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]);\n }\n util.assert(x5D.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${x5D.rank}.`);\n util.assert(dataFormat === 'NDHWC', () => `Error in maxPool3d: Only NDHWC is currently supported, ` +\n `but got dataFormat of ${dataFormat}`);\n checkPadOnDimRoundingMode('maxPool3d', pad, dimRoundingMode);\n const inputs = { x: x5D };\n const attrs = { filterSize, strides, pad, dimRoundingMode, dataFormat };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(MaxPool3D, inputs, attrs);\n if (reshapedTo5D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]);\n }\n return res;\n}\nexport const maxPool3d = /* @__PURE__ */ op({ maxPool3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4X3Bvb2xfM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tYXhfcG9vbF8zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxTQUFTLEVBQWtDLE1BQU0saUJBQWlCLENBQUM7QUFJM0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxTQUFTLFVBQVUsQ0FDZixDQUFlLEVBQUUsYUFBOEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN4RSxPQUF3QyxFQUFFLEdBQTBCLEVBQ3BFLGVBQXdDLEVBQ3hDLGFBQThCLE9BQU87SUFDdkMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFaEQsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDNUU7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUNQLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNkLEdBQUcsRUFBRSxDQUFDLHFEQUFxRCxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1RSxJQUFJLENBQUMsTUFBTSxDQUNQLFVBQVUsS0FBSyxPQUFPLEVBQ3RCLEdBQUcsRUFBRSxDQUFDLHlEQUF5RDtRQUMzRCx5QkFBeUIsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvQyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFvQixFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FDVSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsQ0FBQztJQUU3RSwwREFBMEQ7SUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDWixTQUFTLEVBQUUsTUFBbUMsRUFDOUMsS0FBZ0MsQ0FBTSxDQUFDO0lBRXZELElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sT0FBTyxDQUNILEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkUsQ0FBQztLQUNQO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TWF4UG9vbDNELCBNYXhQb29sM0RBdHRycywgTWF4UG9vbDNESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjRELCBUZW5zb3I1RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtjaGVja1BhZE9uRGltUm91bmRpbmdNb2RlfSBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIDNEIG1heCBwb29saW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yNWQoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdLCBbMSwgMiwgMiwgMiwgMV0pO1xuICogY29uc3QgcmVzdWx0ID0gdGYubWF4UG9vbDNkKHgsIDIsIDEsICd2YWxpZCcpO1xuICogcmVzdWx0LnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDUgb3IgcmFuayA0IG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGluQ2hhbm5lbHNdYC5cbiAqIEBwYXJhbSBmaWx0ZXJTaXplIFRoZSBmaWx0ZXIgc2l6ZTpcbiAqICAgICBgW2ZpbHRlckRlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoXWAuXG4gKiAgICAgSWYgYGZpbHRlclNpemVgIGlzIGEgc2luZ2xlIG51bWJlcixcbiAqICAgICB0aGVuIGBmaWx0ZXJEZXB0aCA9PSBmaWx0ZXJIZWlnaHQgPT0gZmlsdGVyV2lkdGhgLlxuICogQHBhcmFtIHN0cmlkZXMgVGhlIHN0cmlkZXMgb2YgdGhlIHBvb2xpbmc6XG4gKiAgICAgYFtzdHJpZGVEZXB0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aF1gLlxuICogICAgIElmIGBzdHJpZGVzYCBpcyBhIHNpbmdsZSBudW1iZXIsXG4gKiAgICAgdGhlbiBgc3RyaWRlRGVwdGggPT0gc3RyaWRlSGVpZ2h0ID09IHN0cmlkZVdpZHRoYC5cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDEqMXgxLlxuICogICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqIEBwYXJhbSBkYXRhRm9ybWF0IEFuIG9wdGlvbmFsIHN0cmluZyBmcm9tOiBcIk5ESFdDXCIsIFwiTkNESFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5ESFdDXCIuIFNwZWNpZnkgdGhlIGRhdGEgZm9ybWF0IG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEuIFdpdGggdGhlXG4gKiAgICAgZGVmYXVsdCBmb3JtYXQgXCJOREhXQ1wiLCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gdGhlIG9yZGVyIG9mOiBbYmF0Y2gsXG4gKiAgICAgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS4gT25seSBcIk5ESFdDXCIgaXMgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gbWF4UG9vbDNkXzxUIGV4dGVuZHMgVGVuc29yNER8VGVuc29yNUQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZmlsdGVyU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlciA9IFsxLCAxLCAxXSxcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyLCBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcixcbiAgICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnLFxuICAgIGRhdGFGb3JtYXQ6ICdOREhXQyd8J05DREhXJyA9ICdOREhXQycpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbWF4UG9vbDNkJyk7XG5cbiAgbGV0IHg1RCA9ICR4IGFzIFRlbnNvcjVEO1xuICBsZXQgcmVzaGFwZWRUbzVEID0gZmFsc2U7XG4gIGlmICgkeC5yYW5rID09PSA0KSB7XG4gICAgcmVzaGFwZWRUbzVEID0gdHJ1ZTtcbiAgICB4NUQgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdLCAkeC5zaGFwZVsyXSwgJHguc2hhcGVbM11dKTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeDVELnJhbmsgPT09IDUsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gbWF4UG9vbDNkOiB4IG11c3QgYmUgcmFuayA1IGJ1dCBnb3QgcmFuayAke3g1RC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBkYXRhRm9ybWF0ID09PSAnTkRIV0MnLFxuICAgICAgKCkgPT4gYEVycm9yIGluIG1heFBvb2wzZDogT25seSBOREhXQyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLCBgICtcbiAgICAgICAgICBgYnV0IGdvdCBkYXRhRm9ybWF0IG9mICR7ZGF0YUZvcm1hdH1gKTtcbiAgY2hlY2tQYWRPbkRpbVJvdW5kaW5nTW9kZSgnbWF4UG9vbDNkJywgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICBjb25zdCBpbnB1dHM6IE1heFBvb2wzRElucHV0cyA9IHt4OiB4NUR9O1xuICBjb25zdCBhdHRyczpcbiAgICAgIE1heFBvb2wzREF0dHJzID0ge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlLCBkYXRhRm9ybWF0fTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlcyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICBNYXhQb29sM0QsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG81RCkge1xuICAgIHJldHVybiByZXNoYXBlKFxuICAgICAgICAgICAgICAgcmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXSwgcmVzLnNoYXBlWzRdXSkgYXNcbiAgICAgICAgVDtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhQb29sM2QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe21heFBvb2wzZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { MaxPoolWithArgmax } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the 2D max pooling of an image with Argmax index.\n * The indices in argmax are flattened, so that a maximum value at position `[b,\n * y, x, c]` becomes flattened index: `(y * width + x) * channels + c` if\n * include_batch_in_index is False; `((b * height + y) * width + x) * channels\n * +c` if include_batch_in_index is True.\n *\n * The indices returned are always in `[0, height) x [0, width)` before\n * flattening.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n * `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n * `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n * \"NDHWC\". Specify the data format of the input and output data. With the\n * default format \"NDHWC\", the data is stored in the order of: [batch,\n * depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param includeBatchIndex Defaults to False. Whether to include batch\n * dimension in flattened index of argmax.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction maxPoolWithArgmax_(x, filterSize, strides, pad, includeBatchInIndex = false) {\n const $x = convertToTensor(x, 'x', 'maxPoolWithArgmax');\n const inputs = { x: $x };\n const attrs = { filterSize, strides, pad, includeBatchInIndex };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const result = ENGINE.runKernel(MaxPoolWithArgmax, inputs, attrs);\n return { result: result[0], indexes: result[1] };\n}\nexport const maxPoolWithArgmax = /* @__PURE__ */ op({ maxPoolWithArgmax_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4X3Bvb2xfd2l0aF9hcmdtYXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tYXhfcG9vbF93aXRoX2FyZ21heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0QsTUFBTSxpQkFBaUIsQ0FBQztBQUluRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixDQUFlLEVBQUUsVUFBbUMsRUFDcEQsT0FBZ0MsRUFBRSxHQUEwQixFQUM1RCxtQkFBbUIsR0FBRyxLQUFLO0lBQzdCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFeEQsTUFBTSxNQUFNLEdBQTRCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2hELE1BQU0sS0FBSyxHQUNrQixFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFDLENBQUM7SUFFN0UsMERBQTBEO0lBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osaUJBQWlCLEVBQUUsTUFBbUMsRUFDdEQsS0FBZ0MsQ0FBYSxDQUFDO0lBRWpFLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGtCQUFrQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01heFBvb2xXaXRoQXJnbWF4LCBNYXhQb29sV2l0aEFyZ21heEF0dHJzLCBNYXhQb29sV2l0aEFyZ21heElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgMkQgbWF4IHBvb2xpbmcgb2YgYW4gaW1hZ2Ugd2l0aCBBcmdtYXggaW5kZXguXG4gKiBUaGUgaW5kaWNlcyBpbiBhcmdtYXggYXJlIGZsYXR0ZW5lZCwgc28gdGhhdCBhIG1heGltdW0gdmFsdWUgYXQgcG9zaXRpb24gYFtiLFxuICogeSwgeCwgY11gIGJlY29tZXMgZmxhdHRlbmVkIGluZGV4OiBgKHkgKiB3aWR0aCArIHgpICogY2hhbm5lbHMgKyBjYCBpZlxuICogaW5jbHVkZV9iYXRjaF9pbl9pbmRleCBpcyBGYWxzZTsgYCgoYiAqIGhlaWdodCArIHkpICogd2lkdGggKyB4KSAqIGNoYW5uZWxzXG4gKiArY2AgaWYgaW5jbHVkZV9iYXRjaF9pbl9pbmRleCBpcyBUcnVlLlxuICpcbiAqIFRoZSBpbmRpY2VzIHJldHVybmVkIGFyZSBhbHdheXMgaW4gYFswLCBoZWlnaHQpIHggWzAsIHdpZHRoKWAgYmVmb3JlXG4gKiBmbGF0dGVuaW5nLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIG9mIHJhbmsgNCBvciByYW5rIDMgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpcyBhc3N1bWVkLlxuICogQHBhcmFtIGZpbHRlclNpemUgVGhlIGZpbHRlciBzaXplOiBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGhdYC4gSWZcbiAqICAgICBgZmlsdGVyU2l6ZWAgaXMgYSBzaW5nbGUgbnVtYmVyLCB0aGVuIGBmaWx0ZXJIZWlnaHQgPT0gZmlsdGVyV2lkdGhgLlxuICogQHBhcmFtIHN0cmlkZXMgVGhlIHN0cmlkZXMgb2YgdGhlIHBvb2xpbmc6IGBbc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aF1gLiBJZlxuICogICAgIGBzdHJpZGVzYCBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYHN0cmlkZUhlaWdodCA9PSBzdHJpZGVXaWR0aGAuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdCBBbiBvcHRpb25hbCBzdHJpbmcgZnJvbTogXCJOREhXQ1wiLCBcIk5DREhXXCIuIERlZmF1bHRzIHRvXG4gKiAgICAgXCJOREhXQ1wiLiBTcGVjaWZ5IHRoZSBkYXRhIGZvcm1hdCBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhLiBXaXRoIHRoZVxuICogICAgIGRlZmF1bHQgZm9ybWF0IFwiTkRIV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uIE9ubHkgXCJOREhXQ1wiIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxeDEuXG4gKiAgICAtIEZvciBtb3JlIGluZm8sIHNlZSB0aGlzIGd1aWRlOlxuICogICAgIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb25dKFxuICogICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGluY2x1ZGVCYXRjaEluZGV4IERlZmF1bHRzIHRvIEZhbHNlLiBXaGV0aGVyIHRvIGluY2x1ZGUgYmF0Y2hcbiAqICAgIGRpbWVuc2lvbiBpbiBmbGF0dGVuZWQgaW5kZXggb2YgYXJnbWF4LlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gbWF4UG9vbFdpdGhBcmdtYXhfPFQgZXh0ZW5kcyBUZW5zb3I0RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlciwgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXIsXG4gICAgaW5jbHVkZUJhdGNoSW5JbmRleCA9IGZhbHNlKTogTmFtZWRUZW5zb3JNYXAge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdtYXhQb29sV2l0aEFyZ21heCcpO1xuXG4gIGNvbnN0IGlucHV0czogTWF4UG9vbFdpdGhBcmdtYXhJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczpcbiAgICAgIE1heFBvb2xXaXRoQXJnbWF4QXR0cnMgPSB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkLCBpbmNsdWRlQmF0Y2hJbkluZGV4fTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlc3VsdCA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICAgICBNYXhQb29sV2l0aEFyZ21heCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVGVuc29yW107XG5cbiAgcmV0dXJuIHtyZXN1bHQ6IHJlc3VsdFswXSwgaW5kZXhlczogcmVzdWx0WzFdfTtcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2xXaXRoQXJnbWF4ID0gLyogQF9fUFVSRV9fICovIG9wKHttYXhQb29sV2l0aEFyZ21heF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Mean } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the mean of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces `x` along the dimensions given in `axis`. Unless `keepDims` is\n * true, the rank of the `tf.Tensor` is reduced by 1 for each entry in `axis`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axis` has no entries, all dimensions are reduced, and a `tf.Tensor` with\n * a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.mean().print(); // or tf.mean(a)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.mean(axis).print(); // or tf.mean(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction mean_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'mean');\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(Mean, inputs, attrs);\n}\nexport const mean = /* @__PURE__ */ op({ mean_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21lYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsU0FBUyxLQUFLLENBQ1YsQ0FBb0IsRUFBRSxPQUF3QixJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDdEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQWMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFFMUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtNZWFuLCBNZWFuQXR0cnMsIE1lYW5JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbWVhbiBvZiBlbGVtZW50cyBhY3Jvc3MgZGltZW5zaW9ucyBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIFJlZHVjZXMgYHhgIGFsb25nIHRoZSBkaW1lbnNpb25zIGdpdmVuIGluIGBheGlzYC4gVW5sZXNzIGBrZWVwRGltc2AgaXNcbiAqIHRydWUsIHRoZSByYW5rIG9mIHRoZSBgdGYuVGVuc29yYCBpcyByZWR1Y2VkIGJ5IDEgZm9yIGVhY2ggZW50cnkgaW4gYGF4aXNgLlxuICogSWYgYGtlZXBEaW1zYCBpcyB0cnVlLCB0aGUgcmVkdWNlZCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZCB3aXRoIGxlbmd0aCAxLlxuICogSWYgYGF4aXNgIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGEgYHRmLlRlbnNvcmAgd2l0aFxuICogYSBzaW5nbGUgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKlxuICogeC5tZWFuKCkucHJpbnQoKTsgIC8vIG9yIHRmLm1lYW4oYSlcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pO1xuICpcbiAqIGNvbnN0IGF4aXMgPSAxO1xuICogeC5tZWFuKGF4aXMpLnByaW50KCk7ICAvLyBvciB0Zi5tZWFuKHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlc1xuICogICAgIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggc2l6ZSAxLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIG1lYW5fPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzOiBudW1iZXJ8bnVtYmVyW10gPSBudWxsLCBrZWVwRGltcyA9IGZhbHNlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ21lYW4nKTtcblxuICBjb25zdCBpbnB1dHM6IE1lYW5JbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogTWVhbkF0dHJzID0ge2F4aXMsIGtlZXBEaW1zfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIE1lYW4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgbWVhbiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bWVhbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { assertNonNegativeIntegerDimensions, makeZerosTypedArray, sizeFromShape } from '../util';\nimport { complex } from './complex';\n/**\n * Creates a `tf.Tensor` with all elements set to 0.\n *\n * ```js\n * tf.zeros([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The type of an element in the resulting tensor. Can\n * be 'float32', 'int32' or 'bool'. Defaults to 'float'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function zeros(shape, dtype = 'float32') {\n assertNonNegativeIntegerDimensions(shape);\n if (dtype === 'complex64') {\n const real = zeros(shape, 'float32');\n const imag = zeros(shape, 'float32');\n return complex(real, imag);\n }\n const values = makeZerosTypedArray(sizeFromShape(shape), dtype);\n return ENGINE.makeTensor(values, shape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVyb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy96ZXJvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR2pDLE9BQU8sRUFBQyxrQ0FBa0MsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFL0YsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUNqQixLQUFrQixFQUFFLFFBQWtCLFNBQVM7SUFDakQsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDNUI7SUFDRCxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFjLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGUsIFJhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMsIG1ha2VaZXJvc1R5cGVkQXJyYXksIHNpemVGcm9tU2hhcGV9IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4vY29tcGxleCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggYWxsIGVsZW1lbnRzIHNldCB0byAwLlxuICpcbiAqIGBgYGpzXG4gKiB0Zi56ZXJvcyhbMiwgMl0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIHR5cGUgb2YgYW4gZWxlbWVudCBpbiB0aGUgcmVzdWx0aW5nIHRlbnNvci4gQ2FuXG4gKiAgICAgYmUgJ2Zsb2F0MzInLCAnaW50MzInIG9yICdib29sJy4gRGVmYXVsdHMgdG8gJ2Zsb2F0Jy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvczxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdLCBkdHlwZTogRGF0YVR5cGUgPSAnZmxvYXQzMicpOiBUZW5zb3I8Uj4ge1xuICBhc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zKHNoYXBlKTtcbiAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWwgPSB6ZXJvcyhzaGFwZSwgJ2Zsb2F0MzInKTtcbiAgICBjb25zdCBpbWFnID0gemVyb3Moc2hhcGUsICdmbG9hdDMyJyk7XG4gICAgcmV0dXJuIGNvbXBsZXgocmVhbCwgaW1hZyk7XG4gIH1cbiAgY29uc3QgdmFsdWVzID0gbWFrZVplcm9zVHlwZWRBcnJheShzaXplRnJvbVNoYXBlKHNoYXBlKSwgZHR5cGUpO1xuICByZXR1cm4gRU5HSU5FLm1ha2VUZW5zb3IodmFsdWVzLCBzaGFwZSwgZHR5cGUpIGFzIFRlbnNvcjxSPjtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { makeOnesTypedArray, sizeFromShape } from '../util';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { complex } from './complex';\nimport { zeros } from './zeros';\n/**\n * Creates a `tf.Tensor` with all elements set to 1.\n *\n * ```js\n * tf.ones([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The type of an element in the resulting tensor. Defaults to\n * 'float'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function ones(shape, dtype = 'float32') {\n assertNonNegativeIntegerDimensions(shape);\n if (dtype === 'complex64') {\n const real = ones(shape, 'float32');\n const imag = zeros(shape, 'float32');\n return complex(real, imag);\n }\n const values = makeOnesTypedArray(sizeFromShape(shape), dtype);\n return ENGINE.makeTensor(values, shape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL29uZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUdqQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzFELE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FDaEIsS0FBa0IsRUFBRSxRQUFrQixTQUFTO0lBQ2pELGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckMsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9ELE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBYyxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBSYW5rLCBTaGFwZU1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHttYWtlT25lc1R5cGVkQXJyYXksIHNpemVGcm9tU2hhcGV9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHthc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuL2NvbXBsZXgnO1xuaW1wb3J0IHt6ZXJvc30gZnJvbSAnLi96ZXJvcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggYWxsIGVsZW1lbnRzIHNldCB0byAxLlxuICpcbiAqIGBgYGpzXG4gKiB0Zi5vbmVzKFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSBkdHlwZSBUaGUgdHlwZSBvZiBhbiBlbGVtZW50IGluIHRoZSByZXN1bHRpbmcgdGVuc29yLiBEZWZhdWx0cyB0b1xuICogICAgICdmbG9hdCcuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25lczxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdLCBkdHlwZTogRGF0YVR5cGUgPSAnZmxvYXQzMicpOiBUZW5zb3I8Uj4ge1xuICBhc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zKHNoYXBlKTtcbiAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWwgPSBvbmVzKHNoYXBlLCAnZmxvYXQzMicpO1xuICAgIGNvbnN0IGltYWcgPSB6ZXJvcyhzaGFwZSwgJ2Zsb2F0MzInKTtcbiAgICByZXR1cm4gY29tcGxleChyZWFsLCBpbWFnKTtcbiAgfVxuICBjb25zdCB2YWx1ZXMgPSBtYWtlT25lc1R5cGVkQXJyYXkoc2l6ZUZyb21TaGFwZShzaGFwZSksIGR0eXBlKTtcbiAgcmV0dXJuIEVOR0lORS5tYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGR0eXBlKSBhcyBUZW5zb3I8Uj47XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { matMul } from './mat_mul';\nimport { ones } from './ones';\nimport { reshape } from './reshape';\nimport { Tensor } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport { sizeFromShape } from '../util_base';\n/**\n * Broadcasts parameters for evaluation on an N-D grid.\n *\n * Given N one-dimensional coordinate arrays `*args`, returns a list `outputs`\n * of N-D coordinate arrays for evaluating expressions on an N-D grid.\n *\n * Notes:\n * `meshgrid` supports cartesian ('xy') and matrix ('ij') indexing conventions.\n * When the `indexing` argument is set to 'xy' (the default), the broadcasting\n * instructions for the first two dimensions are swapped.\n * Examples:\n * Calling `const [X, Y] = meshgrid(x, y)` with the tensors\n *\n * ```javascript\n * const x = [1, 2, 3];\n * const y = [4, 5, 6];\n * const [X, Y] = tf.meshgrid(x, y);\n * // X = [[1, 2, 3],\n * // [1, 2, 3],\n * // [1, 2, 3]]\n * // Y = [[4, 4, 4],\n * // [5, 5, 5],\n * // [6, 6, 6]]\n * ```\n *\n * @param x Tensor with rank geq 1.\n * @param y Tensor with rank geq 1.\n * @param indexing\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nexport function meshgrid(x, y, { indexing = 'xy' } = {}) {\n if (indexing !== 'xy' && indexing !== 'ij') {\n throw new TypeError(`${indexing} is not a valid third argument to meshgrid`);\n }\n if (x === undefined) {\n return [];\n }\n let $x = convertToTensor(x, 'x', 'meshgrid', x instanceof Tensor ? x.dtype : 'float32');\n if (y === undefined) {\n return [$x];\n }\n let $y = convertToTensor(y, 'y', 'meshgrid', y instanceof Tensor ? y.dtype : 'float32');\n const w = sizeFromShape($x.shape);\n const h = sizeFromShape($y.shape);\n if (indexing === 'xy') {\n $x = reshape($x, [1, -1]);\n $y = reshape($y, [-1, 1]);\n return [\n matMul(ones([h, 1], $x.dtype), $x),\n matMul($y, ones([1, w], $y.dtype)),\n ];\n }\n $x = reshape($x, [-1, 1]);\n $y = reshape($y, [1, -1]);\n return [\n matMul($x, ones([1, h], $x.dtype)),\n matMul(ones([w, 1], $y.dtype), $y),\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaGdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tZXNoZ3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixDQUFnQixFQUFFLENBQWdCLEVBQUUsRUFBQyxRQUFRLEdBQUcsSUFBSSxFQUFDLEdBQUcsRUFBRTtJQUM1RCxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUMxQyxNQUFNLElBQUksU0FBUyxDQUNmLEdBQUcsUUFBUSw0Q0FBNEMsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1FBQ25CLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFDRCxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQ3BCLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsWUFBWSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRW5FLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtRQUNuQixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDYjtJQUNELElBQUksRUFBRSxHQUFHLGVBQWUsQ0FDcEIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFbkUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxDLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUNyQixFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFNLENBQUM7UUFDL0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBTSxDQUFDO1FBQy9CLE9BQU87WUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25DLENBQUM7S0FDSDtJQUVELEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQU0sQ0FBQztJQUMvQixFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFNLENBQUM7SUFDL0IsT0FBTztRQUNMLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7S0FDbkMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7bWF0TXVsfSBmcm9tICcuL21hdF9tdWwnO1xuaW1wb3J0IHtvbmVzfSBmcm9tICcuL29uZXMnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG4vKipcbiAqIEJyb2FkY2FzdHMgcGFyYW1ldGVycyBmb3IgZXZhbHVhdGlvbiBvbiBhbiBOLUQgZ3JpZC5cbiAqXG4gKiBHaXZlbiBOIG9uZS1kaW1lbnNpb25hbCBjb29yZGluYXRlIGFycmF5cyBgKmFyZ3NgLCByZXR1cm5zIGEgbGlzdCBgb3V0cHV0c2BcbiAqIG9mIE4tRCBjb29yZGluYXRlIGFycmF5cyBmb3IgZXZhbHVhdGluZyBleHByZXNzaW9ucyBvbiBhbiBOLUQgZ3JpZC5cbiAqXG4gKiBOb3RlczpcbiAqIGBtZXNoZ3JpZGAgc3VwcG9ydHMgY2FydGVzaWFuICgneHknKSBhbmQgbWF0cml4ICgnaWonKSBpbmRleGluZyBjb252ZW50aW9ucy5cbiAqIFdoZW4gdGhlIGBpbmRleGluZ2AgYXJndW1lbnQgaXMgc2V0IHRvICd4eScgKHRoZSBkZWZhdWx0KSwgdGhlIGJyb2FkY2FzdGluZ1xuICogaW5zdHJ1Y3Rpb25zIGZvciB0aGUgZmlyc3QgdHdvIGRpbWVuc2lvbnMgYXJlIHN3YXBwZWQuXG4gKiBFeGFtcGxlczpcbiAqIENhbGxpbmcgYGNvbnN0IFtYLCBZXSA9IG1lc2hncmlkKHgsIHkpYCB3aXRoIHRoZSB0ZW5zb3JzXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgeCA9IFsxLCAyLCAzXTtcbiAqIGNvbnN0IHkgPSBbNCwgNSwgNl07XG4gKiBjb25zdCBbWCwgWV0gPSB0Zi5tZXNoZ3JpZCh4LCB5KTtcbiAqIC8vIFggPSBbWzEsIDIsIDNdLFxuICogLy8gICAgICBbMSwgMiwgM10sXG4gKiAvLyAgICAgIFsxLCAyLCAzXV1cbiAqIC8vIFkgPSBbWzQsIDQsIDRdLFxuICogLy8gICAgICBbNSwgNSwgNV0sXG4gKiAvLyAgICAgIFs2LCA2LCA2XV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRlbnNvciB3aXRoIHJhbmsgZ2VxIDEuXG4gKiBAcGFyYW0geSBUZW5zb3Igd2l0aCByYW5rIGdlcSAxLlxuICogQHBhcmFtIGluZGV4aW5nXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXNoZ3JpZDxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4PzogVHxUZW5zb3JMaWtlLCB5PzogVHxUZW5zb3JMaWtlLCB7aW5kZXhpbmcgPSAneHknfSA9IHt9KTogVFtdIHtcbiAgaWYgKGluZGV4aW5nICE9PSAneHknICYmIGluZGV4aW5nICE9PSAnaWonKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYCR7aW5kZXhpbmd9IGlzIG5vdCBhIHZhbGlkIHRoaXJkIGFyZ3VtZW50IHRvIG1lc2hncmlkYCk7XG4gIH1cbiAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgJHggPSBjb252ZXJ0VG9UZW5zb3IoXG4gICAgICB4LCAneCcsICdtZXNoZ3JpZCcsIHggaW5zdGFuY2VvZiBUZW5zb3IgPyB4LmR0eXBlIDogJ2Zsb2F0MzInKTtcblxuICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFskeF07XG4gIH1cbiAgbGV0ICR5ID0gY29udmVydFRvVGVuc29yKFxuICAgICAgeSwgJ3knLCAnbWVzaGdyaWQnLCB5IGluc3RhbmNlb2YgVGVuc29yID8geS5kdHlwZSA6ICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgdyA9IHNpemVGcm9tU2hhcGUoJHguc2hhcGUpO1xuICBjb25zdCBoID0gc2l6ZUZyb21TaGFwZSgkeS5zaGFwZSk7XG5cbiAgaWYgKGluZGV4aW5nID09PSAneHknKSB7XG4gICAgJHggPSByZXNoYXBlKCR4LCBbMSwgLTFdKSBhcyBUO1xuICAgICR5ID0gcmVzaGFwZSgkeSwgWy0xLCAxXSkgYXMgVDtcbiAgICByZXR1cm4gW1xuICAgICAgbWF0TXVsKG9uZXMoW2gsIDFdLCAkeC5kdHlwZSksICR4KSxcbiAgICAgIG1hdE11bCgkeSwgb25lcyhbMSwgd10sICR5LmR0eXBlKSksXG4gICAgXTtcbiAgfVxuXG4gICR4ID0gcmVzaGFwZSgkeCwgWy0xLCAxXSkgYXMgVDtcbiAgJHkgPSByZXNoYXBlKCR5LCBbMSwgLTFdKSBhcyBUO1xuICByZXR1cm4gW1xuICAgIG1hdE11bCgkeCwgb25lcyhbMSwgaF0sICR4LmR0eXBlKSksXG4gICAgbWF0TXVsKG9uZXMoW3csIDFdLCAkeS5kdHlwZSksICR5KSxcbiAgXTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Minimum } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Returns the min of a and b (`a < b ? a : b`) element-wise.\n * Supports broadcasting.\n *\n * We also expose `minimumStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.minimum(b).print(); // or tf.minimum(a, b)\n * ```\n *\n * ```js\n * // Broadcast minimum a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.minimum(b).print(); // or tf.minimum(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction minimum_(a, b) {\n let $a = convertToTensor(a, 'a', 'minimum');\n let $b = convertToTensor(b, 'b', 'minimum');\n [$a, $b] = makeTypesMatch($a, $b);\n if ($a.dtype === 'bool') {\n $a = cast($a, 'int32');\n $b = cast($b, 'int32');\n }\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Minimum, inputs);\n}\nexport const minimum = /* @__PURE__ */ op({ minimum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21pbmltdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILFNBQVMsUUFBUSxDQUNiLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFN0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01pbmltdW0sIE1pbmltdW1JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtaW4gb2YgYSBhbmQgYiAoYGEgPCBiID8gYSA6IGJgKSBlbGVtZW50LXdpc2UuXG4gKiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICogV2UgYWxzbyBleHBvc2UgYG1pbmltdW1TdHJpY3RgIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBvcCBhbmRcbiAqIGFzc2VydHMgdGhhdCBgYWAgYW5kIGBiYCBhcmUgdGhlIHNhbWUgc2hhcGUgKGRvZXMgbm90IGJyb2FkY2FzdCkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgNCwgMywgMTZdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMSwgMiwgOSwgNF0pO1xuICpcbiAqIGEubWluaW11bShiKS5wcmludCgpOyAgLy8gb3IgdGYubWluaW11bShhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBtaW5pbXVtIGEgd2l0aCBiLlxuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2LCA4XSk7XG4gKiBjb25zdCBiID0gdGYuc2NhbGFyKDUpO1xuICpcbiAqIGEubWluaW11bShiKS5wcmludCgpOyAgLy8gb3IgdGYubWluaW11bShhLCBiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIG1pbmltdW1fPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbWluaW11bScpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbWluaW11bScpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgaWYgKCRhLmR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAkYSA9IGNhc3QoJGEsICdpbnQzMicpO1xuICAgICRiID0gY2FzdCgkYiwgJ2ludDMyJyk7XG4gIH1cblxuICBhc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZSgkYS5zaGFwZSwgJGIuc2hhcGUpO1xuXG4gIGNvbnN0IGlucHV0czogTWluaW11bUlucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKE1pbmltdW0sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IG1pbmltdW0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe21pbmltdW1ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { MirrorPad } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Pads a `tf.Tensor` using mirror padding.\n *\n * This operation implements the `REFLECT` and `SYMMETRIC` modes of pad.\n *\n * ```js\n * const x = tf.range(0, 9).reshape([1, 1, 3, 3]);\n * x.mirrorPad([[0, 0], [0, 0], [2, 2], [2, 2]], 'reflect').print();\n * ```\n * @param x The tensor to pad.\n * @param paddings An array of length `R` (the rank of the tensor), where\n * each element is a length-2 tuple of ints `[padBefore, padAfter]`,\n * specifying how much to pad along each dimension of the tensor.\n * In \"reflect\" mode, the padded regions do not include the borders,\n * while in \"symmetric\" mode the padded regions do include the borders.\n * For example, if the input is `[1, 2, 3]` and paddings is `[0, 2]`,\n * then the output is `[1, 2, 3, 2, 1]` in \"reflect\" mode, and\n * `[1, 2, 3, 3, 2]` in \"symmetric\" mode.\n * If `mode` is \"reflect\" then both `paddings[D, 0]` and `paddings[D, 1]`\n * must be no greater than `x.shape[D] - 1`. If mode is \"symmetric\"\n * then both `paddings[D, 0]` and `paddings[D, 1]` must be no greater than\n * `x.shape[D]`\n * @param mode String to specify padding mode. Can be `'reflect' | 'symmetric'`\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction mirrorPad_(x, paddings, mode) {\n util.assert(mode === 'reflect' || mode === 'symmetric', () => `Invalid mode. Mode must be either reflect or symmetric. ` +\n `Got ${mode}.`);\n const $x = convertToTensor(x, 'x', 'mirrorPad');\n if ($x.rank === 0) {\n throw new Error('mirrorPad(scalar) is not defined. ' +\n 'Pass non-scalar to mirrorPad');\n }\n util.assert(paddings.length === $x.rank, () => `Padding doesn't match input. Must be ${$x.rank}. ` +\n `Got ${paddings.length}.`);\n const shapeOffset = mode === 'reflect' ? 1 : 0;\n for (let i = 0; i < $x.rank; i++) {\n util.assert(paddings[i].length === 2, () => `Invalid number of paddings. Must be length of 2 each.`);\n util.assert(paddings[i][0] >= 0 && paddings[i][0] <= $x.shape[i] - shapeOffset &&\n paddings[i][1] >= 0 && paddings[i][1] <= $x.shape[i] - shapeOffset, () => `Padding in dimension ${i} cannot be greater than or equal ` +\n `to ${$x.shape[i] - shapeOffset} or less than 0 for input of ` +\n `shape ${$x.shape}`);\n }\n const attrs = { paddings, mode };\n const inputs = { x: $x };\n return ENGINE.runKernel(MirrorPad, inputs, attrs);\n}\nexport const mirrorPad = /* @__PURE__ */ op({ mirrorPad_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlycm9yX3BhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21pcnJvcl9wYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDO0FBSTNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILCtEQUErRDtBQUMvRCxTQUFTLFVBQVUsQ0FDZixDQUFlLEVBQUUsUUFBaUMsRUFDbEQsSUFBMkI7SUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxXQUFXLEVBQzFDLEdBQUcsRUFBRSxDQUFDLDBEQUEwRDtRQUM1RCxPQUFPLElBQUksR0FBRyxDQUFDLENBQUM7SUFFeEIsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEQsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNqQixNQUFNLElBQUksS0FBSyxDQUNYLG9DQUFvQztZQUNwQyw4QkFBOEIsQ0FBQyxDQUFDO0tBQ3JDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQzNCLEdBQUcsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLENBQUMsSUFBSSxJQUFJO1FBQ3JELE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDeEIsR0FBRyxFQUFFLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVztZQUM5RCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFDdEUsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsbUNBQW1DO1lBQzlELE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLCtCQUErQjtZQUM5RCxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsTUFBTSxLQUFLLEdBQW1CLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFvQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUN4QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFNBQVMsRUFBRSxNQUFtQyxFQUM5QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01pcnJvclBhZCwgTWlycm9yUGFkQXR0cnMsIE1pcnJvclBhZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcmAgdXNpbmcgbWlycm9yIHBhZGRpbmcuXG4gKlxuICogVGhpcyBvcGVyYXRpb24gaW1wbGVtZW50cyB0aGUgYFJFRkxFQ1RgIGFuZCBgU1lNTUVUUklDYCBtb2RlcyBvZiBwYWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi5yYW5nZSgwLCA5KS5yZXNoYXBlKFsxLCAxLCAzLCAzXSk7XG4gKiB4Lm1pcnJvclBhZChbWzAsIDBdLCBbMCwgMF0sIFsyLCAyXSwgWzIsIDJdXSwgJ3JlZmxlY3QnKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgdGVuc29yIHRvIHBhZC5cbiAqIEBwYXJhbSBwYWRkaW5ncyBBbiBhcnJheSBvZiBsZW5ndGggYFJgICh0aGUgcmFuayBvZiB0aGUgdGVuc29yKSwgd2hlcmVcbiAqIGVhY2ggZWxlbWVudCBpcyBhIGxlbmd0aC0yIHR1cGxlIG9mIGludHMgYFtwYWRCZWZvcmUsIHBhZEFmdGVyXWAsXG4gKiBzcGVjaWZ5aW5nIGhvdyBtdWNoIHRvIHBhZCBhbG9uZyBlYWNoIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLlxuICogSW4gXCJyZWZsZWN0XCIgbW9kZSwgdGhlIHBhZGRlZCByZWdpb25zIGRvIG5vdCBpbmNsdWRlIHRoZSBib3JkZXJzLFxuICogd2hpbGUgaW4gXCJzeW1tZXRyaWNcIiBtb2RlIHRoZSBwYWRkZWQgcmVnaW9ucyBkbyBpbmNsdWRlIHRoZSBib3JkZXJzLlxuICogRm9yIGV4YW1wbGUsIGlmIHRoZSBpbnB1dCBpcyBgWzEsIDIsIDNdYCBhbmQgcGFkZGluZ3MgaXMgYFswLCAyXWAsXG4gKiB0aGVuIHRoZSBvdXRwdXQgaXMgYFsxLCAyLCAzLCAyLCAxXWAgaW4gXCJyZWZsZWN0XCIgbW9kZSwgYW5kXG4gKiBgWzEsIDIsIDMsIDMsIDJdYCBpbiBcInN5bW1ldHJpY1wiIG1vZGUuXG4gKiBJZiBgbW9kZWAgaXMgXCJyZWZsZWN0XCIgdGhlbiBib3RoIGBwYWRkaW5nc1tELCAwXWAgYW5kIGBwYWRkaW5nc1tELCAxXWBcbiAqIG11c3QgYmUgbm8gZ3JlYXRlciB0aGFuIGB4LnNoYXBlW0RdIC0gMWAuIElmIG1vZGUgaXMgXCJzeW1tZXRyaWNcIlxuICogdGhlbiBib3RoIGBwYWRkaW5nc1tELCAwXWAgYW5kIGBwYWRkaW5nc1tELCAxXWAgbXVzdCBiZSBubyBncmVhdGVyIHRoYW5cbiAqIGB4LnNoYXBlW0RdYFxuICogQHBhcmFtIG1vZGUgU3RyaW5nIHRvIHNwZWNpZnkgcGFkZGluZyBtb2RlLiBDYW4gYmUgYCdyZWZsZWN0JyB8ICdzeW1tZXRyaWMnYFxuICovXG4vKiogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ30gKi9cbmZ1bmN0aW9uIG1pcnJvclBhZF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBwYWRkaW5nczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgbW9kZTogJ3JlZmxlY3QnfCdzeW1tZXRyaWMnKTogVCB7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgbW9kZSA9PT0gJ3JlZmxlY3QnIHx8IG1vZGUgPT09ICdzeW1tZXRyaWMnLFxuICAgICAgKCkgPT4gYEludmFsaWQgbW9kZS4gTW9kZSBtdXN0IGJlIGVpdGhlciByZWZsZWN0IG9yIHN5bW1ldHJpYy4gYCArXG4gICAgICAgICAgYEdvdCAke21vZGV9LmApO1xuXG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ21pcnJvclBhZCcpO1xuICBpZiAoJHgucmFuayA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ21pcnJvclBhZChzY2FsYXIpIGlzIG5vdCBkZWZpbmVkLiAnICtcbiAgICAgICAgJ1Bhc3Mgbm9uLXNjYWxhciB0byBtaXJyb3JQYWQnKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgIHBhZGRpbmdzLmxlbmd0aCA9PT0gJHgucmFuayxcbiAgICAgICgpID0+IGBQYWRkaW5nIGRvZXNuJ3QgbWF0Y2ggaW5wdXQuIE11c3QgYmUgJHskeC5yYW5rfS4gYCArXG4gICAgICAgICAgYEdvdCAke3BhZGRpbmdzLmxlbmd0aH0uYCk7XG4gIGNvbnN0IHNoYXBlT2Zmc2V0ID0gbW9kZSA9PT0gJ3JlZmxlY3QnID8gMSA6IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgJHgucmFuazsgaSsrKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHBhZGRpbmdzW2ldLmxlbmd0aCA9PT0gMixcbiAgICAgICAgKCkgPT4gYEludmFsaWQgbnVtYmVyIG9mIHBhZGRpbmdzLiBNdXN0IGJlIGxlbmd0aCBvZiAyIGVhY2guYCk7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHBhZGRpbmdzW2ldWzBdID49IDAgJiYgcGFkZGluZ3NbaV1bMF0gPD0gJHguc2hhcGVbaV0gLSBzaGFwZU9mZnNldCAmJlxuICAgICAgICAgICAgcGFkZGluZ3NbaV1bMV0gPj0gMCAmJiBwYWRkaW5nc1tpXVsxXSA8PSAkeC5zaGFwZVtpXSAtIHNoYXBlT2Zmc2V0LFxuICAgICAgICAoKSA9PiBgUGFkZGluZyBpbiBkaW1lbnNpb24gJHtpfSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIGAgK1xuICAgICAgICAgICAgYHRvICR7JHguc2hhcGVbaV0gLSBzaGFwZU9mZnNldH0gb3IgbGVzcyB0aGFuIDAgZm9yIGlucHV0IG9mIGAgK1xuICAgICAgICAgICAgYHNoYXBlICR7JHguc2hhcGV9YCk7XG4gIH1cblxuICBjb25zdCBhdHRyczogTWlycm9yUGFkQXR0cnMgPSB7cGFkZGluZ3MsIG1vZGV9O1xuICBjb25zdCBpbnB1dHM6IE1pcnJvclBhZElucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgTWlycm9yUGFkLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IG1pcnJvclBhZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bWlycm9yUGFkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Mod } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the mod of a and b element-wise.\n * `floor(x / y) * y + mod(x, y) = x`\n * Supports broadcasting.\n *\n * We also expose `tf.modStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.mod(b).print(); // or tf.mod(a, b)\n * ```\n *\n * ```js\n * // Broadcast a mod b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.mod(b).print(); // or tf.mod(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction mod_(a, b) {\n let $a = convertToTensor(a, 'a', 'mod');\n let $b = convertToTensor(b, 'b', 'mod');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Mod, inputs);\n}\nexport const mod = /* @__PURE__ */ op({ mod_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbW9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQW9CLEVBQUUsQ0FBb0I7SUFDeEUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXpDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtNb2QsIE1vZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtb2Qgb2YgYSBhbmQgYiBlbGVtZW50LXdpc2UuXG4gKiBgZmxvb3IoeCAvIHkpICogeSArIG1vZCh4LCB5KSA9IHhgXG4gKiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICogV2UgYWxzbyBleHBvc2UgYHRmLm1vZFN0cmljdGAgd2hpY2ggaGFzIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGlzIG9wIGFuZFxuICogYXNzZXJ0cyB0aGF0IGBhYCBhbmQgYGJgIGFyZSB0aGUgc2FtZSBzaGFwZSAoZG9lcyBub3QgYnJvYWRjYXN0KS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCA0LCAzLCAxNl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCA5LCA0XSk7XG4gKlxuICogYS5tb2QoYikucHJpbnQoKTsgIC8vIG9yIHRmLm1vZChhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBhIG1vZCBiLlxuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2LCA4XSk7XG4gKiBjb25zdCBiID0gdGYuc2NhbGFyKDUpO1xuICpcbiAqIGEubW9kKGIpLnByaW50KCk7ICAvLyBvciB0Zi5tb2QoYSwgYilcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBhIFRoZSBmaXJzdCB0ZW5zb3IuXG4gKiBAcGFyYW0gYiBUaGUgc2Vjb25kIHRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0FyaXRobWV0aWMnfVxuICovXG5mdW5jdGlvbiBtb2RfPFQgZXh0ZW5kcyBUZW5zb3I+KGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbW9kJyk7XG4gIGxldCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdtb2QnKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGNvbnN0IGlucHV0czogTW9kSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoTW9kLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBtb2QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe21vZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { parseAxisParam } from '../util';\nimport { expandShapeToKeepDim } from './axis_util';\nimport { cast } from './cast';\nimport { mean } from './mean';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nimport { square } from './square';\nimport { sub } from './sub';\n/**\n * Calculates the mean and variance of `x`. The mean and variance are\n * calculated by aggregating the contents of `x` across `axes`. If `x` is\n * 1-D and `axes = [0]` this is just the mean and variance of a vector.\n *\n * @param x The input tensor.\n * @param axis The dimension(s) along with to compute mean and\n * variance. By default it reduces all dimensions.\n * @param keepDims If true, the moments have the same dimensionality as the\n * input.\n * @return An object with two keys: `mean` and `variance`.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction moments_(x, axis = null, keepDims = false) {\n x = convertToTensor(x, 'x', 'moments');\n const axes = parseAxisParam(axis, x.shape);\n const xMean = mean(x, axes, keepDims);\n let keepDimsShape = xMean.shape;\n if (!keepDims) {\n keepDimsShape = expandShapeToKeepDim(xMean.shape, axes);\n }\n const devSquared = square(sub(cast(x, 'float32'), reshape(xMean, keepDimsShape)));\n const variance = mean(devSquared, axes, keepDims);\n return { mean: xMean, variance };\n}\nexport const moments = /* @__PURE__ */ op({ moments_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9tZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21vbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdkMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFvQixFQUFFLE9BQXdCLElBQUksRUFDbEQsUUFBUSxHQUFHLEtBQUs7SUFDbEIsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDaEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3pEO0lBQ0QsTUFBTSxVQUFVLEdBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7cGFyc2VBeGlzUGFyYW19IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2V4cGFuZFNoYXBlVG9LZWVwRGltfSBmcm9tICcuL2F4aXNfdXRpbCc7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vY2FzdCc7XG5pbXBvcnQge21lYW59IGZyb20gJy4vbWVhbic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5pbXBvcnQge3NxdWFyZX0gZnJvbSAnLi9zcXVhcmUnO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4vc3ViJztcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBtZWFuIGFuZCB2YXJpYW5jZSBvZiBgeGAuIFRoZSBtZWFuIGFuZCB2YXJpYW5jZSBhcmVcbiAqIGNhbGN1bGF0ZWQgYnkgYWdncmVnYXRpbmcgdGhlIGNvbnRlbnRzIG9mIGB4YCBhY3Jvc3MgYGF4ZXNgLiBJZiBgeGAgaXNcbiAqIDEtRCBhbmQgYGF4ZXMgPSBbMF1gIHRoaXMgaXMganVzdCB0aGUgbWVhbiBhbmQgdmFyaWFuY2Ugb2YgYSB2ZWN0b3IuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBheGlzIFRoZSBkaW1lbnNpb24ocykgYWxvbmcgd2l0aCB0byBjb21wdXRlIG1lYW4gYW5kXG4gKiAgICAgdmFyaWFuY2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlcyBhbGwgZGltZW5zaW9ucy5cbiAqIEBwYXJhbSBrZWVwRGltcyBJZiB0cnVlLCB0aGUgbW9tZW50cyBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IGFzIHRoZVxuICogICAgIGlucHV0LlxuICogQHJldHVybiBBbiBvYmplY3Qgd2l0aCB0d28ga2V5czogYG1lYW5gIGFuZCBgdmFyaWFuY2VgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ05vcm1hbGl6YXRpb24nfVxuICovXG5mdW5jdGlvbiBtb21lbnRzXyhcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCxcbiAgICBrZWVwRGltcyA9IGZhbHNlKToge21lYW46IFRlbnNvciwgdmFyaWFuY2U6IFRlbnNvcn0ge1xuICB4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ21vbWVudHMnKTtcbiAgY29uc3QgYXhlcyA9IHBhcnNlQXhpc1BhcmFtKGF4aXMsIHguc2hhcGUpO1xuICBjb25zdCB4TWVhbiA9IG1lYW4oeCwgYXhlcywga2VlcERpbXMpO1xuICBsZXQga2VlcERpbXNTaGFwZSA9IHhNZWFuLnNoYXBlO1xuICBpZiAoIWtlZXBEaW1zKSB7XG4gICAga2VlcERpbXNTaGFwZSA9IGV4cGFuZFNoYXBlVG9LZWVwRGltKHhNZWFuLnNoYXBlLCBheGVzKTtcbiAgfVxuICBjb25zdCBkZXZTcXVhcmVkID1cbiAgICAgIHNxdWFyZShzdWIoY2FzdCh4LCAnZmxvYXQzMicpLCByZXNoYXBlKHhNZWFuLCBrZWVwRGltc1NoYXBlKSkpO1xuICBjb25zdCB2YXJpYW5jZSA9IG1lYW4oZGV2U3F1YXJlZCwgYXhlcywga2VlcERpbXMpO1xuICByZXR1cm4ge21lYW46IHhNZWFuLCB2YXJpYW5jZX07XG59XG5cbmV4cG9ydCBjb25zdCBtb21lbnRzID0gLyogQF9fUFVSRV9fICovIG9wKHttb21lbnRzX30pO1xuIl19","import { convertToTensor, convertToTensorArray } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the next states and outputs of a stack of LSTMCells.\n *\n * Each cell output is used as input to the next cell.\n *\n * Returns `[cellState, cellOutput]`.\n *\n * Derived from tf.contrib.rn.MultiRNNCell.\n *\n * @param lstmCells Array of LSTMCell functions.\n * @param data The input to the cell.\n * @param c Array of previous cell states.\n * @param h Array of previous cell outputs.\n *\n * @doc {heading: 'Operations', subheading: 'RNN'}\n */\nfunction multiRNNCell_(lstmCells, data, c, h) {\n const $data = convertToTensor(data, 'data', 'multiRNNCell');\n const $c = convertToTensorArray(c, 'c', 'multiRNNCell');\n const $h = convertToTensorArray(h, 'h', 'multiRNNCell');\n let input = $data;\n const newStates = [];\n for (let i = 0; i < lstmCells.length; i++) {\n const output = lstmCells[i](input, $c[i], $h[i]);\n newStates.push(output[0]);\n newStates.push(output[1]);\n input = output[1];\n }\n const newC = [];\n const newH = [];\n for (let i = 0; i < newStates.length; i += 2) {\n newC.push(newStates[i]);\n newH.push(newStates[i + 1]);\n }\n return [newC, newH];\n}\nexport const multiRNNCell = /* @__PURE__ */ op({ multiRNNCell_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfcm5uX2NlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tdWx0aV9ybm5fY2VsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRXpFLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFTL0I7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLFNBQXlCLEVBQUUsSUFBeUIsRUFDcEQsQ0FBNkIsRUFDN0IsQ0FBNkI7SUFDL0IsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUQsTUFBTSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRXhELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkI7SUFDRCxNQUFNLElBQUksR0FBZSxFQUFFLENBQUM7SUFDNUIsTUFBTSxJQUFJLEdBQWUsRUFBRSxDQUFDO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3QjtJQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yMkR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvciwgY29udmVydFRvVGVuc29yQXJyYXl9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBAZG9jYWxpYXMgKGRhdGE6IFRlbnNvcjJELCBjOiBUZW5zb3IyRCwgaDogVGVuc29yMkQpOiBbVGVuc29yMkQsIFRlbnNvcjJEXVxuICovXG5leHBvcnQgdHlwZSBMU1RNQ2VsbEZ1bmMgPSB7XG4gIChkYXRhOiBUZW5zb3IyRCwgYzogVGVuc29yMkQsIGg6IFRlbnNvcjJEKTogW1RlbnNvcjJELCBUZW5zb3IyRF07XG59O1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBuZXh0IHN0YXRlcyBhbmQgb3V0cHV0cyBvZiBhIHN0YWNrIG9mIExTVE1DZWxscy5cbiAqXG4gKiBFYWNoIGNlbGwgb3V0cHV0IGlzIHVzZWQgYXMgaW5wdXQgdG8gdGhlIG5leHQgY2VsbC5cbiAqXG4gKiBSZXR1cm5zIGBbY2VsbFN0YXRlLCBjZWxsT3V0cHV0XWAuXG4gKlxuICogRGVyaXZlZCBmcm9tIHRmLmNvbnRyaWIucm4uTXVsdGlSTk5DZWxsLlxuICpcbiAqIEBwYXJhbSBsc3RtQ2VsbHMgQXJyYXkgb2YgTFNUTUNlbGwgZnVuY3Rpb25zLlxuICogQHBhcmFtIGRhdGEgVGhlIGlucHV0IHRvIHRoZSBjZWxsLlxuICogQHBhcmFtIGMgQXJyYXkgb2YgcHJldmlvdXMgY2VsbCBzdGF0ZXMuXG4gKiBAcGFyYW0gaCBBcnJheSBvZiBwcmV2aW91cyBjZWxsIG91dHB1dHMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUk5OJ31cbiAqL1xuZnVuY3Rpb24gbXVsdGlSTk5DZWxsXyhcbiAgICBsc3RtQ2VsbHM6IExTVE1DZWxsRnVuY1tdLCBkYXRhOiBUZW5zb3IyRHxUZW5zb3JMaWtlLFxuICAgIGM6IEFycmF5PFRlbnNvcjJEfFRlbnNvckxpa2U+LFxuICAgIGg6IEFycmF5PFRlbnNvcjJEfFRlbnNvckxpa2U+KTogW1RlbnNvcjJEW10sIFRlbnNvcjJEW11dIHtcbiAgY29uc3QgJGRhdGEgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YSwgJ2RhdGEnLCAnbXVsdGlSTk5DZWxsJyk7XG4gIGNvbnN0ICRjID0gY29udmVydFRvVGVuc29yQXJyYXkoYywgJ2MnLCAnbXVsdGlSTk5DZWxsJyk7XG4gIGNvbnN0ICRoID0gY29udmVydFRvVGVuc29yQXJyYXkoaCwgJ2gnLCAnbXVsdGlSTk5DZWxsJyk7XG5cbiAgbGV0IGlucHV0ID0gJGRhdGE7XG4gIGNvbnN0IG5ld1N0YXRlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxzdG1DZWxscy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG91dHB1dCA9IGxzdG1DZWxsc1tpXShpbnB1dCwgJGNbaV0sICRoW2ldKTtcbiAgICBuZXdTdGF0ZXMucHVzaChvdXRwdXRbMF0pO1xuICAgIG5ld1N0YXRlcy5wdXNoKG91dHB1dFsxXSk7XG4gICAgaW5wdXQgPSBvdXRwdXRbMV07XG4gIH1cbiAgY29uc3QgbmV3QzogVGVuc29yMkRbXSA9IFtdO1xuICBjb25zdCBuZXdIOiBUZW5zb3IyRFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3U3RhdGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgbmV3Qy5wdXNoKG5ld1N0YXRlc1tpXSk7XG4gICAgbmV3SC5wdXNoKG5ld1N0YXRlc1tpICsgMV0pO1xuICB9XG4gIHJldHVybiBbbmV3QywgbmV3SF07XG59XG5leHBvcnQgY29uc3QgbXVsdGlSTk5DZWxsID0gLyogQF9fUFVSRV9fICovIG9wKHttdWx0aVJOTkNlbGxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Multinomial } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Creates a `tf.Tensor` with values drawn from a multinomial distribution.\n *\n * ```js\n * const probs = tf.tensor([.75, .25]);\n * tf.multinomial(probs, 3).print();\n * ```\n *\n * @param logits 1D array with unnormalized log-probabilities, or\n * 2D array of shape `[batchSize, numOutcomes]`. See the `normalized`\n * parameter.\n * @param numSamples Number of samples to draw for each row slice.\n * @param seed The seed number.\n * @param normalized Whether the provided `logits` are normalized true\n * probabilities (sum to 1). Defaults to false.\n * @return 1D array of shape `[numSamples]`, or 2D array of shape\n * `[batchSize, numSamples]`, depending on the rank of the input.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction multinomial_(logits, numSamples, seed, normalized = false) {\n const $logits = convertToTensor(logits, 'logits', 'multinomial');\n const numOutcomes = $logits.size;\n const origRank = $logits.rank;\n if (numOutcomes < 2) {\n throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ` +\n `${numOutcomes}.`);\n }\n if (origRank > 2) {\n throw new Error(`Rank of probabilities must be 1 or 2, but is ${origRank}`);\n }\n // TODO(lina128): Investigate correct seed behavior. The code seems not allow\n // setting see to 0.\n seed = seed || Math.random();\n // The kernel only accepts (and returns) rank 2 tensors.\n const logits2D = origRank === 1 ? reshape($logits, [1, -1]) : $logits;\n const inputs = { logits: logits2D };\n const attrs = { numSamples, seed, normalized };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Multinomial, inputs, attrs);\n // tslint:disable-next-line:no-unnecessary-type-assertion\n return origRank === 1 ? reshape(res, [res.size]) : res;\n}\nexport const multinomial = /* @__PURE__ */ op({ multinomial_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlub21pYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tdWx0aW5vbWlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxXQUFXLEVBQXNDLE1BQU0saUJBQWlCLENBQUM7QUFJakYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsWUFBWSxDQUNqQixNQUFvQyxFQUFFLFVBQWtCLEVBQUUsSUFBYSxFQUN2RSxVQUFVLEdBQUcsS0FBSztJQUNwQixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDOUIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gsOERBQThEO1lBQzlELEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztLQUN4QjtJQUNELElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQzdFO0lBQ0QsNkVBQTZFO0lBQzdFLG9CQUFvQjtJQUNwQixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUU3Qix3REFBd0Q7SUFDeEQsTUFBTSxRQUFRLEdBQ1YsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQW1CLENBQUM7SUFFckUsTUFBTSxNQUFNLEdBQXNCLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQ3JELE1BQU0sS0FBSyxHQUFxQixFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUM7SUFFL0QsMERBQTBEO0lBQzFELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osV0FBVyxFQUFFLE1BQW1DLEVBQ2hELEtBQWdDLENBQWEsQ0FBQztJQUU5RCx5REFBeUQ7SUFDekQsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TXVsdGlub21pYWwsIE11bHRpbm9taWFsQXR0cnMsIE11bHRpbm9taWFsSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggdmFsdWVzIGRyYXduIGZyb20gYSBtdWx0aW5vbWlhbCBkaXN0cmlidXRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHByb2JzID0gdGYudGVuc29yKFsuNzUsIC4yNV0pO1xuICogdGYubXVsdGlub21pYWwocHJvYnMsIDMpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbG9naXRzIDFEIGFycmF5IHdpdGggdW5ub3JtYWxpemVkIGxvZy1wcm9iYWJpbGl0aWVzLCBvclxuICogICAgIDJEIGFycmF5IG9mIHNoYXBlIGBbYmF0Y2hTaXplLCBudW1PdXRjb21lc11gLiBTZWUgdGhlIGBub3JtYWxpemVkYFxuICogICAgIHBhcmFtZXRlci5cbiAqIEBwYXJhbSBudW1TYW1wbGVzIE51bWJlciBvZiBzYW1wbGVzIHRvIGRyYXcgZm9yIGVhY2ggcm93IHNsaWNlLlxuICogQHBhcmFtIHNlZWQgVGhlIHNlZWQgbnVtYmVyLlxuICogQHBhcmFtIG5vcm1hbGl6ZWQgV2hldGhlciB0aGUgcHJvdmlkZWQgYGxvZ2l0c2AgYXJlIG5vcm1hbGl6ZWQgdHJ1ZVxuICogICAgIHByb2JhYmlsaXRpZXMgKHN1bSB0byAxKS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcmV0dXJuIDFEIGFycmF5IG9mIHNoYXBlIGBbbnVtU2FtcGxlc11gLCBvciAyRCBhcnJheSBvZiBzaGFwZVxuICogICAgIGBbYmF0Y2hTaXplLCBudW1TYW1wbGVzXWAsIGRlcGVuZGluZyBvbiB0aGUgcmFuayBvZiB0aGUgaW5wdXQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnUmFuZG9tJ31cbiAqL1xuZnVuY3Rpb24gbXVsdGlub21pYWxfKFxuICAgIGxvZ2l0czogVGVuc29yMUR8VGVuc29yMkR8VGVuc29yTGlrZSwgbnVtU2FtcGxlczogbnVtYmVyLCBzZWVkPzogbnVtYmVyLFxuICAgIG5vcm1hbGl6ZWQgPSBmYWxzZSk6IFRlbnNvcjFEfFRlbnNvcjJEIHtcbiAgY29uc3QgJGxvZ2l0cyA9IGNvbnZlcnRUb1RlbnNvcihsb2dpdHMsICdsb2dpdHMnLCAnbXVsdGlub21pYWwnKTtcbiAgY29uc3QgbnVtT3V0Y29tZXMgPSAkbG9naXRzLnNpemU7XG4gIGNvbnN0IG9yaWdSYW5rID0gJGxvZ2l0cy5yYW5rO1xuICBpZiAobnVtT3V0Y29tZXMgPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXJyb3IgaW4gbXVsdGlub21pYWw6IHlvdSBuZWVkIGF0IGxlYXN0IDIgb3V0Y29tZXMsIGJ1dCBnb3QgYCArXG4gICAgICAgIGAke251bU91dGNvbWVzfS5gKTtcbiAgfVxuICBpZiAob3JpZ1JhbmsgPiAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSYW5rIG9mIHByb2JhYmlsaXRpZXMgbXVzdCBiZSAxIG9yIDIsIGJ1dCBpcyAke29yaWdSYW5rfWApO1xuICB9XG4gIC8vIFRPRE8obGluYTEyOCk6IEludmVzdGlnYXRlIGNvcnJlY3Qgc2VlZCBiZWhhdmlvci4gVGhlIGNvZGUgc2VlbXMgbm90IGFsbG93XG4gIC8vIHNldHRpbmcgc2VlIHRvIDAuXG4gIHNlZWQgPSBzZWVkIHx8IE1hdGgucmFuZG9tKCk7XG5cbiAgLy8gVGhlIGtlcm5lbCBvbmx5IGFjY2VwdHMgKGFuZCByZXR1cm5zKSByYW5rIDIgdGVuc29ycy5cbiAgY29uc3QgbG9naXRzMkQ6IFRlbnNvcjJEID1cbiAgICAgIG9yaWdSYW5rID09PSAxID8gcmVzaGFwZSgkbG9naXRzLCBbMSwgLTFdKSA6ICRsb2dpdHMgYXMgVGVuc29yMkQ7XG5cbiAgY29uc3QgaW5wdXRzOiBNdWx0aW5vbWlhbElucHV0cyA9IHtsb2dpdHM6IGxvZ2l0czJEfTtcbiAgY29uc3QgYXR0cnM6IE11bHRpbm9taWFsQXR0cnMgPSB7bnVtU2FtcGxlcywgc2VlZCwgbm9ybWFsaXplZH07XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgTXVsdGlub21pYWwsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcjJEO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICByZXR1cm4gb3JpZ1JhbmsgPT09IDEgPyByZXNoYXBlKHJlcywgW3Jlcy5zaXplXSkgYXMgVGVuc29yMUQgOiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBtdWx0aW5vbWlhbCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bXVsdGlub21pYWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { NotEqual } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a != b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([0, 2, 3]);\n *\n * a.notEqual(b).print();\n * ```\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction notEqual_(a, b) {\n let $a = convertToTensor(a, 'a', 'notEqual', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'notEqual', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(NotEqual, inputs);\n}\nexport const notEqual = /* @__PURE__ */ op({ notEqual_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90X2VxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbm90X2VxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsU0FBUyxDQUNkLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbEUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbEUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBbUIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUU5QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge05vdEVxdWFsLCBOb3RFcXVhbElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIChhICE9IGIpIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMCwgMiwgM10pO1xuICpcbiAqIGEubm90RXF1YWwoYikucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgaW5wdXQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXMgYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0xvZ2ljYWwnfVxuICovXG5mdW5jdGlvbiBub3RFcXVhbF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdub3RFcXVhbCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbm90RXF1YWwnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKCRhLnNoYXBlLCAkYi5zaGFwZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBOb3RFcXVhbElucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKE5vdEVxdWFsLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBub3RFcXVhbCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bm90RXF1YWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { OnesLike } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a `tf.Tensor` with all elements set to 1 with the same shape as the\n * given tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n * tf.onesLike(x).print();\n * ```\n * @param x A tensor.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction onesLike_(x) {\n const $x = convertToTensor(x, 'x', 'onesLike');\n const inputs = { x: $x };\n return ENGINE.runKernel(OnesLike, inputs);\n}\nexport const onesLike = /* @__PURE__ */ op({ onesLike_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lc19saWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvb25lc19saWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsU0FBUyxDQUFtQixDQUFlO0lBQ2xELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUN2QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7T25lc0xpa2UsIE9uZXNMaWtlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgdGYuVGVuc29yYCB3aXRoIGFsbCBlbGVtZW50cyBzZXQgdG8gMSB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIHRoZVxuICogZ2l2ZW4gdGVuc29yLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yKFsxLCAyXSk7XG4gKiB0Zi5vbmVzTGlrZSh4KS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBBIHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIG9uZXNMaWtlXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnb25lc0xpa2UnKTtcblxuICBjb25zdCBpbnB1dHM6IE9uZXNMaWtlSW5wdXRzID0ge3g6ICR4fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoT25lc0xpa2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IG9uZXNMaWtlID0gLyogQF9fUFVSRV9fICovIG9wKHtvbmVzTGlrZV99KTtcbiJdfQ==","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { matMul } from './mat_mul';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the outer product of two vectors, `v1` and `v2`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([3, 4, 5]);\n *\n * tf.outerProduct(a, b).print();\n * ```\n * @param v1 The first vector in the outer product operation.\n * @param v2 The second vector in the outer product operation.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction outerProduct_(v1, v2) {\n const $v1 = convertToTensor(v1, 'v1', 'outerProduct');\n const $v2 = convertToTensor(v2, 'v2', 'outerProduct');\n util.assert($v1.rank === 1 && $v2.rank === 1, () => `Error in outerProduct: inputs must be rank 1, but got ranks ` +\n `${$v1.rank} and ${$v2.rank}.`);\n const v12D = reshape($v1, [-1, 1]);\n const v22D = reshape($v2, [1, -1]);\n return matMul(v12D, v22D);\n}\nexport const outerProduct = /* @__PURE__ */ op({ outerProduct_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0ZXJfcHJvZHVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL291dGVyX3Byb2R1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLEVBQXVCLEVBQUUsRUFBdUI7SUFDbEQsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdEQsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFdEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDaEMsR0FBRyxFQUFFLENBQUMsOERBQThEO1FBQ2hFLEdBQUcsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7bWF0TXVsfSBmcm9tICcuL21hdF9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBvdXRlciBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzLCBgdjFgIGFuZCBgdjJgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMywgNCwgNV0pO1xuICpcbiAqIHRmLm91dGVyUHJvZHVjdChhLCBiKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0gdjEgVGhlIGZpcnN0IHZlY3RvciBpbiB0aGUgb3V0ZXIgcHJvZHVjdCBvcGVyYXRpb24uXG4gKiBAcGFyYW0gdjIgVGhlIHNlY29uZCB2ZWN0b3IgaW4gdGhlIG91dGVyIHByb2R1Y3Qgb3BlcmF0aW9uLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gb3V0ZXJQcm9kdWN0XyhcbiAgICB2MTogVGVuc29yMUR8VGVuc29yTGlrZSwgdjI6IFRlbnNvcjFEfFRlbnNvckxpa2UpOiBUZW5zb3IyRCB7XG4gIGNvbnN0ICR2MSA9IGNvbnZlcnRUb1RlbnNvcih2MSwgJ3YxJywgJ291dGVyUHJvZHVjdCcpO1xuICBjb25zdCAkdjIgPSBjb252ZXJ0VG9UZW5zb3IodjIsICd2MicsICdvdXRlclByb2R1Y3QnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR2MS5yYW5rID09PSAxICYmICR2Mi5yYW5rID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIG91dGVyUHJvZHVjdDogaW5wdXRzIG11c3QgYmUgcmFuayAxLCBidXQgZ290IHJhbmtzIGAgK1xuICAgICAgICAgIGAkeyR2MS5yYW5rfSBhbmQgJHskdjIucmFua30uYCk7XG5cbiAgY29uc3QgdjEyRCA9IHJlc2hhcGUoJHYxLCBbLTEsIDFdKTtcbiAgY29uc3QgdjIyRCA9IHJlc2hhcGUoJHYyLCBbMSwgLTFdKTtcbiAgcmV0dXJuIG1hdE11bCh2MTJELCB2MjJEKTtcbn1cblxuZXhwb3J0IGNvbnN0IG91dGVyUHJvZHVjdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7b3V0ZXJQcm9kdWN0X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { PadV2 } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Pads a `tf.Tensor` with a given value and paddings.\n *\n * This operation implements `CONSTANT` mode. For `REFLECT` and `SYMMETRIC`,\n * refer to `tf.mirrorPad`.\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that `paddings` is of given length.\n * - `tf.pad1d`\n * - `tf.pad2d`\n * - `tf.pad3d`\n * - `tf.pad4d`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * x.pad([[1, 2]]).print();\n * ```\n * @param x The tensor to pad.\n * @param paddings An array of length `R` (the rank of the tensor), where\n * each element is a length-2 tuple of ints `[padBefore, padAfter]`,\n * specifying how much to pad along each dimension of the tensor.\n * @param constantValue The pad value to use. Defaults to 0.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction pad_(x, paddings, constantValue = 0) {\n const $x = convertToTensor(x, 'x', 'pad');\n if ($x.rank === 0) {\n throw new Error('pad(scalar) is not defined. Pass non-scalar to pad');\n }\n const attrs = { paddings, constantValue };\n const inputs = { x: $x };\n return ENGINE.runKernel(PadV2, inputs, attrs);\n}\nexport const pad = /* @__PURE__ */ op({ pad_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcGFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEtBQUssRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUkvRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsU0FBUyxJQUFJLENBQ1QsQ0FBZSxFQUFFLFFBQWlDLEVBQUUsYUFBYSxHQUFHLENBQUM7SUFDdkUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7S0FDdkU7SUFFRCxNQUFNLEtBQUssR0FBZSxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixLQUFLLEVBQUUsTUFBbUMsRUFDMUMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtQYWRWMiwgUGFkVjJBdHRycywgUGFkVjJJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcmAgd2l0aCBhIGdpdmVuIHZhbHVlIGFuZCBwYWRkaW5ncy5cbiAqXG4gKiBUaGlzIG9wZXJhdGlvbiBpbXBsZW1lbnRzIGBDT05TVEFOVGAgbW9kZS4gRm9yIGBSRUZMRUNUYCBhbmQgYFNZTU1FVFJJQ2AsXG4gKiByZWZlciB0byBgdGYubWlycm9yUGFkYC5cbiAqXG4gKiBBbHNvIGF2YWlsYWJsZSBhcmUgc3RyaWN0ZXIgcmFuay1zcGVjaWZpYyBtZXRob2RzIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlXG4gKiBhcyB0aGlzIG1ldGhvZCB0aGF0IGFzc2VydCB0aGF0IGBwYWRkaW5nc2AgaXMgb2YgZ2l2ZW4gbGVuZ3RoLlxuICogICAtIGB0Zi5wYWQxZGBcbiAqICAgLSBgdGYucGFkMmRgXG4gKiAgIC0gYHRmLnBhZDNkYFxuICogICAtIGB0Zi5wYWQ0ZGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKiB4LnBhZChbWzEsIDJdXSkucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIHRlbnNvciB0byBwYWQuXG4gKiBAcGFyYW0gcGFkZGluZ3MgQW4gYXJyYXkgb2YgbGVuZ3RoIGBSYCAodGhlIHJhbmsgb2YgdGhlIHRlbnNvciksIHdoZXJlXG4gKiBlYWNoIGVsZW1lbnQgaXMgYSBsZW5ndGgtMiB0dXBsZSBvZiBpbnRzIGBbcGFkQmVmb3JlLCBwYWRBZnRlcl1gLFxuICogc3BlY2lmeWluZyBob3cgbXVjaCB0byBwYWQgYWxvbmcgZWFjaCBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci5cbiAqIEBwYXJhbSBjb25zdGFudFZhbHVlIFRoZSBwYWQgdmFsdWUgdG8gdXNlLiBEZWZhdWx0cyB0byAwLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1RyYW5zZm9ybWF0aW9ucyd9XG4gKi9cbmZ1bmN0aW9uIHBhZF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBwYWRkaW5nczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIGNvbnN0YW50VmFsdWUgPSAwKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3BhZCcpO1xuICBpZiAoJHgucmFuayA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFkKHNjYWxhcikgaXMgbm90IGRlZmluZWQuIFBhc3Mgbm9uLXNjYWxhciB0byBwYWQnKTtcbiAgfVxuXG4gIGNvbnN0IGF0dHJzOiBQYWRWMkF0dHJzID0ge3BhZGRpbmdzLCBjb25zdGFudFZhbHVlfTtcbiAgY29uc3QgaW5wdXRzOiBQYWRWMklucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgUGFkVjIsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgcGFkID0gLyogQF9fUFVSRV9fICovIG9wKHtwYWRffSk7XG4iXX0=","import { assert } from '../util';\nimport { op } from './operation';\nimport { pad } from './pad';\n/**\n * Pads a `tf.Tensor1D` with a given value and paddings. See `pad` for details.\n */\nfunction pad1d_(x, paddings, constantValue = 0) {\n assert(paddings.length === 2, () => 'Invalid number of paddings. Must be length of 2.');\n return pad(x, [paddings], constantValue);\n}\nexport const pad1d = /* @__PURE__ */ op({ pad1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkMWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wYWQxZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFzQixFQUFFLFFBQTBCLEVBQ2xELGFBQWEsR0FBRyxDQUFDO0lBQ25CLE1BQU0sQ0FDRixRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUM5RCxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3IxRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtwYWR9IGZyb20gJy4vcGFkJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcjFEYCB3aXRoIGEgZ2l2ZW4gdmFsdWUgYW5kIHBhZGRpbmdzLiBTZWUgYHBhZGAgZm9yIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHBhZDFkXyhcbiAgICB4OiBUZW5zb3IxRHxUZW5zb3JMaWtlLCBwYWRkaW5nczogW251bWJlciwgbnVtYmVyXSxcbiAgICBjb25zdGFudFZhbHVlID0gMCk6IFRlbnNvcjFEIHtcbiAgYXNzZXJ0KFxuICAgICAgcGFkZGluZ3MubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT4gJ0ludmFsaWQgbnVtYmVyIG9mIHBhZGRpbmdzLiBNdXN0IGJlIGxlbmd0aCBvZiAyLicpO1xuICByZXR1cm4gcGFkKHgsIFtwYWRkaW5nc10sIGNvbnN0YW50VmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgcGFkMWQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3BhZDFkX30pO1xuIl19","import { assert } from '../util';\nimport { op } from './operation';\nimport { pad } from './pad';\n/**\n * Pads a `tf.Tensor2D` with a given value and paddings. See `pad` for details.\n */\nfunction pad2d_(x, paddings, constantValue = 0) {\n assert(paddings.length === 2 && paddings[0].length === 2 &&\n paddings[1].length === 2, () => 'Invalid number of paddings. Must be length of 2 each.');\n return pad(x, paddings, constantValue);\n}\nexport const pad2d = /* @__PURE__ */ op({ pad2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkMmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wYWQyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFzQixFQUFFLFFBQThDLEVBQ3RFLGFBQWEsR0FBRyxDQUFDO0lBQ25CLE1BQU0sQ0FDRixRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDN0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQzVCLEdBQUcsRUFBRSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtwYWR9IGZyb20gJy4vcGFkJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcjJEYCB3aXRoIGEgZ2l2ZW4gdmFsdWUgYW5kIHBhZGRpbmdzLiBTZWUgYHBhZGAgZm9yIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHBhZDJkXyhcbiAgICB4OiBUZW5zb3IyRHxUZW5zb3JMaWtlLCBwYWRkaW5nczogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dLFxuICAgIGNvbnN0YW50VmFsdWUgPSAwKTogVGVuc29yMkQge1xuICBhc3NlcnQoXG4gICAgICBwYWRkaW5ncy5sZW5ndGggPT09IDIgJiYgcGFkZGluZ3NbMF0ubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgcGFkZGluZ3NbMV0ubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT4gJ0ludmFsaWQgbnVtYmVyIG9mIHBhZGRpbmdzLiBNdXN0IGJlIGxlbmd0aCBvZiAyIGVhY2guJyk7XG4gIHJldHVybiBwYWQoeCwgcGFkZGluZ3MsIGNvbnN0YW50VmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgcGFkMmQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3BhZDJkX30pO1xuIl19","import { assert } from '../util';\nimport { op } from './operation';\nimport { pad } from './pad';\n/**\n * Pads a `tf.Tensor3D` with a given value and paddings. See `pad` for details.\n */\nfunction pad3d_(x, paddings, constantValue = 0) {\n assert(paddings.length === 3 && paddings[0].length === 2 &&\n paddings[1].length === 2 && paddings[2].length === 2, () => 'Invalid number of paddings. Must be length of 2 each.');\n return pad(x, paddings, constantValue);\n}\nexport const pad3d = /* @__PURE__ */ op({ pad3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wYWQzZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFzQixFQUN0QixRQUFnRSxFQUNoRSxhQUFhLEdBQUcsQ0FBQztJQUNuQixNQUFNLENBQ0YsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQzdDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUN4RCxHQUFHLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yM0R9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cGFkfSBmcm9tICcuL3BhZCc7XG5cbi8qKlxuICogUGFkcyBhIGB0Zi5UZW5zb3IzRGAgd2l0aCBhIGdpdmVuIHZhbHVlIGFuZCBwYWRkaW5ncy4gU2VlIGBwYWRgIGZvciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBwYWQzZF8oXG4gICAgeDogVGVuc29yM0R8VGVuc29yTGlrZSxcbiAgICBwYWRkaW5nczogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dLFxuICAgIGNvbnN0YW50VmFsdWUgPSAwKTogVGVuc29yM0Qge1xuICBhc3NlcnQoXG4gICAgICBwYWRkaW5ncy5sZW5ndGggPT09IDMgJiYgcGFkZGluZ3NbMF0ubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgcGFkZGluZ3NbMV0ubGVuZ3RoID09PSAyICYmIHBhZGRpbmdzWzJdLmxlbmd0aCA9PT0gMixcbiAgICAgICgpID0+ICdJbnZhbGlkIG51bWJlciBvZiBwYWRkaW5ncy4gTXVzdCBiZSBsZW5ndGggb2YgMiBlYWNoLicpO1xuICByZXR1cm4gcGFkKHgsIHBhZGRpbmdzLCBjb25zdGFudFZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHBhZDNkID0gLyogQF9fUFVSRV9fICovIG9wKHtwYWQzZF99KTtcbiJdfQ==","import { assert } from '../util';\nimport { op } from './operation';\nimport { pad } from './pad';\n/**\n * Pads a `tf.Tensor4D` with a given value and paddings. See `pad` for details.\n */\nfunction pad4d_(x, paddings, constantValue = 0) {\n assert(paddings.length === 4 && paddings[0].length === 2 &&\n paddings[1].length === 2 && paddings[2].length === 2 &&\n paddings[3].length === 2, () => 'Invalid number of paddings. Must be length of 2 each.');\n return pad(x, paddings, constantValue);\n}\nexport const pad4d = /* @__PURE__ */ op({ pad4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkNGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wYWQ0ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFzQixFQUN0QixRQUdLLEVBQ0wsYUFBYSxHQUFHLENBQUM7SUFDbkIsTUFBTSxDQUNGLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUM3QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDcEQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQzVCLEdBQUcsRUFBRSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtwYWR9IGZyb20gJy4vcGFkJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcjREYCB3aXRoIGEgZ2l2ZW4gdmFsdWUgYW5kIHBhZGRpbmdzLiBTZWUgYHBhZGAgZm9yIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHBhZDRkXyhcbiAgICB4OiBUZW5zb3I0RHxUZW5zb3JMaWtlLFxuICAgIHBhZGRpbmdzOlxuICAgICAgICBbXG4gICAgICAgICAgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXVxuICAgICAgICBdLFxuICAgIGNvbnN0YW50VmFsdWUgPSAwKTogVGVuc29yNEQge1xuICBhc3NlcnQoXG4gICAgICBwYWRkaW5ncy5sZW5ndGggPT09IDQgJiYgcGFkZGluZ3NbMF0ubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgcGFkZGluZ3NbMV0ubGVuZ3RoID09PSAyICYmIHBhZGRpbmdzWzJdLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgIHBhZGRpbmdzWzNdLmxlbmd0aCA9PT0gMixcbiAgICAgICgpID0+ICdJbnZhbGlkIG51bWJlciBvZiBwYWRkaW5ncy4gTXVzdCBiZSBsZW5ndGggb2YgMiBlYWNoLicpO1xuICByZXR1cm4gcGFkKHgsIHBhZGRpbmdzLCBjb25zdGFudFZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHBhZDRkID0gLyogQF9fUFVSRV9fICovIG9wKHtwYWQ0ZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SpaceToBatchND } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * This operation divides \"spatial\" dimensions `[1, ..., M]` of the input into\n * a grid of blocks of shape `blockShape`, and interleaves these blocks with\n * the \"batch\" dimension (0) such that in the output, the spatial\n * dimensions `[1, ..., M]` correspond to the position within the grid,\n * and the batch dimension combines both the position within a spatial block\n * and the original batch position. Prior to division into blocks,\n * the spatial dimensions of the input are optionally zero padded\n * according to `paddings`. See below for a precise description.\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [1, 2, 2, 1]);\n * const blockShape = [2, 2];\n * const paddings = [[0, 0], [0, 0]];\n *\n * x.spaceToBatchND(blockShape, paddings).print();\n * ```\n *\n * @param x A `tf.Tensor`. N-D with `x.shape` = `[batch] + spatialShape +\n * remainingShape`, where spatialShape has `M` dimensions.\n * @param blockShape A 1-D array. Must have shape `[M]`, all values must\n * be >= 1.\n * @param paddings A 2-D array. Must have shape `[M, 2]`, all values must be >=\n * 0. `paddings[i] = [padStart, padEnd]` specifies the amount to zero-pad\n * from input dimension `i + 1`, which corresponds to spatial dimension `i`. It\n * is required that\n * `(inputShape[i + 1] + padStart + padEnd) % blockShape[i] === 0`\n *\n * This operation is equivalent to the following steps:\n *\n * 1. Zero-pad the start and end of dimensions `[1, ..., M]` of the input\n * according to `paddings` to produce `padded` of shape paddedShape.\n *\n * 2. Reshape `padded` to `reshapedPadded` of shape:\n * `[batch] + [paddedShape[1] / blockShape[0], blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1], blockShape[M-1]] + remainingShape`\n *\n * 3. Permute dimensions of `reshapedPadded` to produce `permutedReshapedPadded`\n * of shape: `blockShape + [batch] + [paddedShape[1] / blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1]] + remainingShape`\n *\n * 4. Reshape `permutedReshapedPadded` to flatten `blockShape` into the\n * batch dimension, producing an output tensor of shape:\n * `[batch * prod(blockShape)] + [paddedShape[1] / blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1]] + remainingShape`\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction spaceToBatchND_(x, blockShape, paddings) {\n const $x = convertToTensor(x, 'x', 'spaceToBatchND');\n util.assert($x.rank >= 1 + blockShape.length, () => `input rank ${$x.rank} should be > than [blockShape] ${blockShape.length}`);\n util.assert(paddings.length === blockShape.length, () => `paddings.shape[0] ${paddings.length} must be equal to [blockShape] ${blockShape.length}`);\n util.assert($x.shape.reduce((a, b, i) => {\n if (i > 0 && i <= blockShape.length) {\n return a &&\n ((b + paddings[i - 1][0] + paddings[i - 1][1]) %\n blockShape[i - 1] ===\n 0);\n }\n return a;\n }, true), () => `input spatial dimensions ${$x.shape.slice(1)} with paddings ${paddings.toString()} must be divisible by blockShapes ${blockShape.toString()}`);\n const inputs = { x: $x };\n const attrs = { blockShape, paddings };\n return ENGINE.runKernel(SpaceToBatchND, inputs, attrs);\n}\nexport const spaceToBatchND = /* @__PURE__ */ op({ spaceToBatchND_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2VfdG9fYmF0Y2hfbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGFjZV90b19iYXRjaF9uZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxjQUFjLEVBQTRDLE1BQU0saUJBQWlCLENBQUM7QUFJMUYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsU0FBUyxlQUFlLENBQ3BCLENBQWUsRUFBRSxVQUFvQixFQUFFLFFBQW9CO0lBQzdELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFckQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUNoQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLGtDQUN2QixVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU3QixJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU0sRUFDckMsR0FBRyxFQUFFLENBQUMscUJBQ0YsUUFBUSxDQUFDLE1BQU0sa0NBQWtDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTlFLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ25DLE9BQU8sQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxDQUFDO1NBQ1Q7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsRUFDRCxJQUFJLENBQUMsRUFDVCxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtCQUMvQyxRQUFRLENBQUMsUUFBUSxFQUFFLHFDQUNuQixVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWpDLE1BQU0sTUFBTSxHQUF5QixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUM3QyxNQUFNLEtBQUssR0FBd0IsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFFMUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixjQUFjLEVBQUUsTUFBbUMsRUFDbkQsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGVBQWUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTcGFjZVRvQmF0Y2hORCwgU3BhY2VUb0JhdGNoTkRBdHRycywgU3BhY2VUb0JhdGNoTkRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogVGhpcyBvcGVyYXRpb24gZGl2aWRlcyBcInNwYXRpYWxcIiBkaW1lbnNpb25zIGBbMSwgLi4uLCBNXWAgb2YgdGhlIGlucHV0IGludG9cbiAqIGEgZ3JpZCBvZiBibG9ja3Mgb2Ygc2hhcGUgYGJsb2NrU2hhcGVgLCBhbmQgaW50ZXJsZWF2ZXMgdGhlc2UgYmxvY2tzIHdpdGhcbiAqIHRoZSBcImJhdGNoXCIgZGltZW5zaW9uICgwKSBzdWNoIHRoYXQgaW4gdGhlIG91dHB1dCwgdGhlIHNwYXRpYWxcbiAqIGRpbWVuc2lvbnMgYFsxLCAuLi4sIE1dYCBjb3JyZXNwb25kIHRvIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIGdyaWQsXG4gKiBhbmQgdGhlIGJhdGNoIGRpbWVuc2lvbiBjb21iaW5lcyBib3RoIHRoZSBwb3NpdGlvbiB3aXRoaW4gYSBzcGF0aWFsIGJsb2NrXG4gKiBhbmQgdGhlIG9yaWdpbmFsIGJhdGNoIHBvc2l0aW9uLiBQcmlvciB0byBkaXZpc2lvbiBpbnRvIGJsb2NrcyxcbiAqIHRoZSBzcGF0aWFsIGRpbWVuc2lvbnMgb2YgdGhlIGlucHV0IGFyZSBvcHRpb25hbGx5IHplcm8gcGFkZGVkXG4gKiBhY2NvcmRpbmcgdG8gYHBhZGRpbmdzYC4gU2VlIGJlbG93IGZvciBhIHByZWNpc2UgZGVzY3JpcHRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3I0ZChbMSwgMiwgMywgNF0sIFsxLCAyLCAyLCAxXSk7XG4gKiBjb25zdCBibG9ja1NoYXBlID0gWzIsIDJdO1xuICogY29uc3QgcGFkZGluZ3MgPSBbWzAsIDBdLCBbMCwgMF1dO1xuICpcbiAqIHguc3BhY2VUb0JhdGNoTkQoYmxvY2tTaGFwZSwgcGFkZGluZ3MpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBBIGB0Zi5UZW5zb3JgLiBOLUQgd2l0aCBgeC5zaGFwZWAgPSBgW2JhdGNoXSArIHNwYXRpYWxTaGFwZSArXG4gKiByZW1haW5pbmdTaGFwZWAsIHdoZXJlIHNwYXRpYWxTaGFwZSBoYXMgYE1gIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0gYmxvY2tTaGFwZSBBIDEtRCBhcnJheS4gTXVzdCBoYXZlIHNoYXBlIGBbTV1gLCBhbGwgdmFsdWVzIG11c3RcbiAqIGJlID49IDEuXG4gKiBAcGFyYW0gcGFkZGluZ3MgQSAyLUQgYXJyYXkuIE11c3QgaGF2ZSBzaGFwZSBgW00sIDJdYCwgYWxsIHZhbHVlcyBtdXN0IGJlID49XG4gKiAgICAgMC4gYHBhZGRpbmdzW2ldID0gW3BhZFN0YXJ0LCBwYWRFbmRdYCBzcGVjaWZpZXMgdGhlIGFtb3VudCB0byB6ZXJvLXBhZFxuICogZnJvbSBpbnB1dCBkaW1lbnNpb24gYGkgKyAxYCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gc3BhdGlhbCBkaW1lbnNpb24gYGlgLiBJdFxuICogaXMgcmVxdWlyZWQgdGhhdFxuICogYChpbnB1dFNoYXBlW2kgKyAxXSArIHBhZFN0YXJ0ICsgcGFkRW5kKSAlIGJsb2NrU2hhcGVbaV0gPT09IDBgXG4gKlxuICogVGhpcyBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICpcbiAqIDEuIFplcm8tcGFkIHRoZSBzdGFydCBhbmQgZW5kIG9mIGRpbWVuc2lvbnMgYFsxLCAuLi4sIE1dYCBvZiB0aGUgaW5wdXRcbiAqIGFjY29yZGluZyB0byBgcGFkZGluZ3NgIHRvIHByb2R1Y2UgYHBhZGRlZGAgb2Ygc2hhcGUgcGFkZGVkU2hhcGUuXG4gKlxuICogMi4gUmVzaGFwZSBgcGFkZGVkYCB0byBgcmVzaGFwZWRQYWRkZWRgIG9mIHNoYXBlOlxuICogYFtiYXRjaF0gKyBbcGFkZGVkU2hhcGVbMV0gLyBibG9ja1NoYXBlWzBdLCBibG9ja1NoYXBlWzBdLCAuLi4sXG4gKiBwYWRkZWRTaGFwZVtNXSAvIGJsb2NrU2hhcGVbTS0xXSwgYmxvY2tTaGFwZVtNLTFdXSArIHJlbWFpbmluZ1NoYXBlYFxuICpcbiAqIDMuIFBlcm11dGUgZGltZW5zaW9ucyBvZiBgcmVzaGFwZWRQYWRkZWRgIHRvIHByb2R1Y2UgYHBlcm11dGVkUmVzaGFwZWRQYWRkZWRgXG4gKiBvZiBzaGFwZTogYGJsb2NrU2hhcGUgKyBbYmF0Y2hdICsgW3BhZGRlZFNoYXBlWzFdIC8gYmxvY2tTaGFwZVswXSwgLi4uLFxuICogcGFkZGVkU2hhcGVbTV0gLyBibG9ja1NoYXBlW00tMV1dICsgcmVtYWluaW5nU2hhcGVgXG4gKlxuICogNC4gUmVzaGFwZSBgcGVybXV0ZWRSZXNoYXBlZFBhZGRlZGAgdG8gZmxhdHRlbiBgYmxvY2tTaGFwZWAgaW50byB0aGVcbiAqIGJhdGNoIGRpbWVuc2lvbiwgcHJvZHVjaW5nIGFuIG91dHB1dCB0ZW5zb3Igb2Ygc2hhcGU6XG4gKiBgW2JhdGNoICogcHJvZChibG9ja1NoYXBlKV0gKyBbcGFkZGVkU2hhcGVbMV0gLyBibG9ja1NoYXBlWzBdLCAuLi4sXG4gKiBwYWRkZWRTaGFwZVtNXSAvIGJsb2NrU2hhcGVbTS0xXV0gKyByZW1haW5pbmdTaGFwZWBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5mdW5jdGlvbiBzcGFjZVRvQmF0Y2hORF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBibG9ja1NoYXBlOiBudW1iZXJbXSwgcGFkZGluZ3M6IG51bWJlcltdW10pOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3BhY2VUb0JhdGNoTkQnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPj0gMSArIGJsb2NrU2hhcGUubGVuZ3RoLFxuICAgICAgKCkgPT4gYGlucHV0IHJhbmsgJHskeC5yYW5rfSBzaG91bGQgYmUgPiB0aGFuIFtibG9ja1NoYXBlXSAke1xuICAgICAgICAgIGJsb2NrU2hhcGUubGVuZ3RofWApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgcGFkZGluZ3MubGVuZ3RoID09PSBibG9ja1NoYXBlLmxlbmd0aCxcbiAgICAgICgpID0+IGBwYWRkaW5ncy5zaGFwZVswXSAke1xuICAgICAgICAgIHBhZGRpbmdzLmxlbmd0aH0gbXVzdCBiZSBlcXVhbCB0byBbYmxvY2tTaGFwZV0gJHtibG9ja1NoYXBlLmxlbmd0aH1gKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnNoYXBlLnJlZHVjZShcbiAgICAgICAgICAoYSwgYiwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGkgPiAwICYmIGkgPD0gYmxvY2tTaGFwZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGEgJiZcbiAgICAgICAgICAgICAgICAgICgoYiArIHBhZGRpbmdzW2kgLSAxXVswXSArIHBhZGRpbmdzW2kgLSAxXVsxXSkgJVxuICAgICAgICAgICAgICAgICAgICAgICBibG9ja1NoYXBlW2kgLSAxXSA9PT1cbiAgICAgICAgICAgICAgICAgICAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZSksXG4gICAgICAoKSA9PiBgaW5wdXQgc3BhdGlhbCBkaW1lbnNpb25zICR7JHguc2hhcGUuc2xpY2UoMSl9IHdpdGggcGFkZGluZ3MgJHtcbiAgICAgICAgICBwYWRkaW5ncy50b1N0cmluZygpfSBtdXN0IGJlIGRpdmlzaWJsZSBieSBibG9ja1NoYXBlcyAke1xuICAgICAgICAgIGJsb2NrU2hhcGUudG9TdHJpbmcoKX1gKTtcblxuICBjb25zdCBpbnB1dHM6IFNwYWNlVG9CYXRjaE5ESW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFNwYWNlVG9CYXRjaE5EQXR0cnMgPSB7YmxvY2tTaGFwZSwgcGFkZGluZ3N9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgU3BhY2VUb0JhdGNoTkQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhY2VUb0JhdGNoTkQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NwYWNlVG9CYXRjaE5EX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { avgPool } from './avg_pool';\nimport { batchToSpaceND } from './batch_to_space_nd';\nimport * as conv_util from './conv_util';\nimport { maxPool } from './max_pool';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nimport { spaceToBatchND } from './space_to_batch_nd';\n/**\n * Performs an N-D pooling operation\n *\n * @param input The input tensor, of rank 4 or rank 3 of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param windowShape The filter size: `[filterHeight, filterWidth]`. If\n * `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param poolingType The type of pooling, either 'max' or 'avg'.\n * @param pad The type of padding algorithm:\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n * https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in dilated pooling. Defaults to `[1, 1]`. If `dilationRate` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n * `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction pool_(input, windowShape, poolingType, pad, dilations, strides, dimRoundingMode) {\n if (dilations == null) {\n dilations = [1, 1];\n }\n if (strides == null) {\n strides = 1;\n }\n if (pad === 0) {\n pad = 'valid';\n }\n const $x = convertToTensor(input, 'x', 'maxPool');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in pool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = conv_util.computePool2DInfo(x4D.shape, windowShape, strides, dilations, pad);\n const dilation = [convInfo.dilationHeight, convInfo.dilationWidth];\n // The following implementation does batchToSpace(pool(spaceToBatch(x)))\n // whenever dilation > 1 since the TF kernels do not support dilation > 1.\n // tslint:disable-next-line:max-line-length\n // https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/nn_ops.py#L1037\n let basePadding;\n if (pad === 'same') {\n basePadding = withSpaceToBatchBasePaddings([convInfo.filterHeight, convInfo.filterWidth], dilation);\n }\n else {\n basePadding = [[0, 0], [0, 0]];\n }\n const isDilationOne = dilation[0] === 1 && dilation[1] === 1;\n const [adjustedPadding, adjustedCrops] = requiredSpaceToBatchPaddings([convInfo.inHeight, convInfo.inWidth], dilation, basePadding);\n const convertedPad = isDilationOne ? pad : 'valid';\n const convertedX = isDilationOne ? x4D : spaceToBatchND(x4D, dilation, adjustedPadding);\n const forwardOp = poolingType === 'avg' ?\n () => avgPool(convertedX, windowShape, strides, convertedPad, dimRoundingMode) :\n () => maxPool(convertedX, windowShape, strides, convertedPad, dimRoundingMode);\n const y = forwardOp();\n const res = isDilationOne ? y : batchToSpaceND(y, dilation, adjustedCrops);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\n// Helper function to compute crops and paddings for pool with dilation > 1.\n// tslint:disable-next-line:max-line-length\n// https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/array_ops.py#L2184\nfunction requiredSpaceToBatchPaddings(inputShape, blockShape, basePadding) {\n const padStart = basePadding.map(b => b[0]);\n const origPadEnd = basePadding.map(b => b[1]);\n const fullInputShape = inputShape.concat(padStart, origPadEnd);\n const padEndExtra = blockShape.map((b, i) => (b - fullInputShape[i] % b) % b);\n const padEnd = origPadEnd.map((s, i) => s + padEndExtra[i]);\n const paddings = blockShape.map((_, i) => [padStart[i], padEnd[i]]);\n const crops = blockShape.map((_, i) => [0, padEndExtra[i]]);\n return [paddings, crops];\n}\n// Helper function to compute base paddings for pool with dilation > 1.\n// tslint:disable-next-line:max-line-length\n// https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/nn_ops.py#L524\nfunction withSpaceToBatchBasePaddings(filterShape, dilation) {\n // Spatial dimensions of the filters and the upsampled filters in which we\n // introduce (rate - 1) zeros between consecutive filter values.\n const dilatedFilterShape = filterShape.map((s, i) => {\n return s + (s - 1) * (dilation[i] - 1);\n });\n const padExtraShape = dilatedFilterShape.map(s => s - 1);\n // When padding is odd, we pad more at end, following the same\n // convention as conv2d.\n const padExtraStart = padExtraShape.map(s => Math.floor(s / 2));\n const padExtraEnd = padExtraShape.map((s, i) => s - padExtraStart[i]);\n return padExtraShape.map((_, i) => {\n return [padExtraStart[i], padExtraEnd[i]];\n });\n}\nexport const pool = /* @__PURE__ */ op({ pool_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBUyxLQUFLLENBQ1YsS0FBbUIsRUFBRSxXQUFvQyxFQUN6RCxXQUF3QixFQUN4QixHQUFvRCxFQUNwRCxTQUFtQyxFQUFFLE9BQWlDLEVBQ3RFLGVBQXdDO0lBQzFDLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDcEI7SUFDRCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7UUFDbkIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ2IsR0FBRyxHQUFHLE9BQU8sQ0FBQztLQUNmO0lBRUQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLEVB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NUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2F2Z1Bvb2x9IGZyb20gJy4vYXZnX3Bvb2wnO1xuaW1wb3J0IHtiYXRjaFRvU3BhY2VORH0gZnJvbSAnLi9iYXRjaF90b19zcGFjZV9uZCc7XG5pbXBvcnQgKiBhcyBjb252X3V0aWwgZnJvbSAnLi9jb252X3V0aWwnO1xuaW1wb3J0IHttYXhQb29sfSBmcm9tICcuL21heF9wb29sJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcbmltcG9ydCB7c3BhY2VUb0JhdGNoTkR9IGZyb20gJy4vc3BhY2VfdG9fYmF0Y2hfbmQnO1xuXG4vKipcbiAqIFBlcmZvcm1zIGFuIE4tRCBwb29saW5nIG9wZXJhdGlvblxuICpcbiAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDQgb3IgcmFuayAzIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSB3aW5kb3dTaGFwZSBUaGUgZmlsdGVyIHNpemU6IGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aF1gLiBJZlxuICogICAgIGBmaWx0ZXJTaXplYCBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYGZpbHRlckhlaWdodCA9PSBmaWx0ZXJXaWR0aGAuXG4gKiBAcGFyYW0gcG9vbGluZ1R5cGUgVGhlIHR5cGUgb2YgcG9vbGluZywgZWl0aGVyICdtYXgnIG9yICdhdmcnLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobTpcbiAqICAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMXgxLlxuICogICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2d1aWRlcy9weXRob24vbm4jQ29udm9sdXRpb25dKFxuICogICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZ3VpZGVzL3B5dGhvbi9ubiNDb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gZGlsYXRlZCBwb29saW5nLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYGRpbGF0aW9uUmF0ZWAgaXMgYSBzaW5nbGVcbiAqICAgICBudW1iZXIsIHRoZW4gYGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW5cbiAqICAgICAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBwb29saW5nOiBgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC4gSWZcbiAqICAgICBgc3RyaWRlc2AgaXMgYSBzaW5nbGUgbnVtYmVyLCB0aGVuIGBzdHJpZGVIZWlnaHQgPT0gc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIGRpbVJvdW5kaW5nTW9kZSBBIHN0cmluZyBmcm9tOiAnY2VpbCcsICdyb3VuZCcsICdmbG9vcicuIElmIG5vbmUgaXNcbiAqICAgICBwcm92aWRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRydW5jYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gcG9vbF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICBpbnB1dDogVHxUZW5zb3JMaWtlLCB3aW5kb3dTaGFwZTogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcG9vbGluZ1R5cGU6ICdhdmcnfCdtYXgnLFxuICAgIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfGNvbnZfdXRpbC5FeHBsaWNpdFBhZGRpbmcsXG4gICAgZGlsYXRpb25zPzogW251bWJlciwgbnVtYmVyXXxudW1iZXIsIHN0cmlkZXM/OiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnKSB7XG4gIGlmIChkaWxhdGlvbnMgPT0gbnVsbCkge1xuICAgIGRpbGF0aW9ucyA9IFsxLCAxXTtcbiAgfVxuICBpZiAoc3RyaWRlcyA9PSBudWxsKSB7XG4gICAgc3RyaWRlcyA9IDE7XG4gIH1cbiAgaWYgKHBhZCA9PT0gMCkge1xuICAgIHBhZCA9ICd2YWxpZCc7XG4gIH1cblxuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcihpbnB1dCwgJ3gnLCAnbWF4UG9vbCcpO1xuICBsZXQgeDREID0gJHggYXMgVGVuc29yNEQ7XG4gIGxldCByZXNoYXBlZFRvNEQgPSBmYWxzZTtcblxuICBpZiAoJHgucmFuayA9PT0gMykge1xuICAgIHJlc2hhcGVkVG80RCA9IHRydWU7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY29udl91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIHBvb2w6IEVpdGhlciBzdHJpZGVzIG9yIGRpbGF0aW9ucyBtdXN0IGJlIDEuICcgK1xuICAgICAgICAgIGBHb3Qgc3RyaWRlcyAke3N0cmlkZXN9IGFuZCBkaWxhdGlvbnMgJyR7ZGlsYXRpb25zfSdgKTtcblxuICBjb25zdCBjb252SW5mbyA9IGNvbnZfdXRpbC5jb21wdXRlUG9vbDJESW5mbyhcbiAgICAgIHg0RC5zaGFwZSwgd2luZG93U2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucywgcGFkKTtcbiAgY29uc3QgZGlsYXRpb246IFtudW1iZXIsIG51bWJlcl0gPVxuICAgICAgW2NvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LCBjb252SW5mby5kaWxhdGlvbldpZHRoXTtcblxuICAvLyBUaGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIGRvZXMgYmF0Y2hUb1NwYWNlKHBvb2woc3BhY2VUb0JhdGNoKHgpKSlcbiAgLy8gd2hlbmV2ZXIgZGlsYXRpb24gPiAxIHNpbmNlIHRoZSBURiBrZXJuZWxzIGRvIG5vdCBzdXBwb3J0IGRpbGF0aW9uID4gMS5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3JmbG93L2Jsb2IvNTBmNmJiNjdkYzk4YzliNzQ2MzBiNjA0N2FhZTdhNGY4YTQwZmQwMi90ZW5zb3JmbG93L3B5dGhvbi9vcHMvbm5fb3BzLnB5I0wxMDM3XG5cbiAgbGV0IGJhc2VQYWRkaW5nOiBudW1iZXJbXVtdO1xuICBpZiAocGFkID09PSAnc2FtZScpIHtcbiAgICBiYXNlUGFkZGluZyA9IHdpdGhTcGFjZVRvQmF0Y2hCYXNlUGFkZGluZ3MoXG4gICAgICAgIFtjb252SW5mby5maWx0ZXJIZWlnaHQsIGNvbnZJbmZvLmZpbHRlcldpZHRoXSwgZGlsYXRpb24pO1xuICB9IGVsc2Uge1xuICAgIGJhc2VQYWRkaW5nID0gW1swLCAwXSwgWzAsIDBdXTtcbiAgfVxuXG4gIGNvbnN0IGlzRGlsYXRpb25PbmUgPSBkaWxhdGlvblswXSA9PT0gMSAmJiBkaWxhdGlvblsxXSA9PT0gMTtcbiAgY29uc3QgW2FkanVzdGVkUGFkZGluZywgYWRqdXN0ZWRDcm9wc10gPSByZXF1aXJlZFNwYWNlVG9CYXRjaFBhZGRpbmdzKFxuICAgICAgW2NvbnZJbmZvLmluSGVpZ2h0LCBjb252SW5mby5pbldpZHRoXSwgZGlsYXRpb24sIGJhc2VQYWRkaW5nKTtcbiAgY29uc3QgY29udmVydGVkUGFkID0gaXNEaWxhdGlvbk9uZSA/IHBhZCA6ICd2YWxpZCc7XG4gIGNvbnN0IGNvbnZlcnRlZFggPVxuICAgICAgaXNEaWxhdGlvbk9uZSA/IHg0RCA6IHNwYWNlVG9CYXRjaE5EKHg0RCwgZGlsYXRpb24sIGFkanVzdGVkUGFkZGluZyk7XG5cbiAgY29uc3QgZm9yd2FyZE9wID0gcG9vbGluZ1R5cGUgPT09ICdhdmcnID9cbiAgICAgICgpID0+IGF2Z1Bvb2woY29udmVydGVkWCwgd2luZG93U2hhcGUsIHN0cmlkZXMsIGNvbnZlcnRlZFBhZCxcbiAgICAgICAgICAgICAgICAgICAgZGltUm91bmRpbmdNb2RlKSA6XG4gICAgICAoKSA9PiBtYXhQb29sKGNvbnZlcnRlZFgsIHdpbmRvd1NoYXBlLCBzdHJpZGVzLCBjb252ZXJ0ZWRQYWQsXG4gICAgICAgICAgICAgICAgICAgIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IHkgPSBmb3J3YXJkT3AoKTtcblxuICBjb25zdCByZXMgPSBpc0RpbGF0aW9uT25lID8geSA6IGJhdGNoVG9TcGFjZU5EKHksIGRpbGF0aW9uLCBhZGp1c3RlZENyb3BzKTtcblxuICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cblxuICByZXR1cm4gcmVzIGFzIFQ7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjb21wdXRlIGNyb3BzIGFuZCBwYWRkaW5ncyBmb3IgcG9vbCB3aXRoIGRpbGF0aW9uID4gMS5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvYmxvYi81MGY2YmI2N2RjOThjOWI3NDYzMGI2MDQ3YWFlN2E0ZjhhNDBmZDAyL3RlbnNvcmZsb3cvcHl0aG9uL29wcy9hcnJheV9vcHMucHkjTDIxODRcbmZ1bmN0aW9uIHJlcXVpcmVkU3BhY2VUb0JhdGNoUGFkZGluZ3MoXG4gICAgaW5wdXRTaGFwZTogW251bWJlciwgbnVtYmVyXSwgYmxvY2tTaGFwZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBiYXNlUGFkZGluZzogbnVtYmVyW11bXSkge1xuICBjb25zdCBwYWRTdGFydCA9IGJhc2VQYWRkaW5nLm1hcChiID0+IGJbMF0pO1xuICBjb25zdCBvcmlnUGFkRW5kID0gYmFzZVBhZGRpbmcubWFwKGIgPT4gYlsxXSk7XG4gIGNvbnN0IGZ1bGxJbnB1dFNoYXBlID0gaW5wdXRTaGFwZS5jb25jYXQocGFkU3RhcnQsIG9yaWdQYWRFbmQpO1xuICBjb25zdCBwYWRFbmRFeHRyYSA9IGJsb2NrU2hhcGUubWFwKChiLCBpKSA9PiAoYiAtIGZ1bGxJbnB1dFNoYXBlW2ldICUgYikgJSBiKTtcbiAgY29uc3QgcGFkRW5kID0gb3JpZ1BhZEVuZC5tYXAoKHMsIGkpID0+IHMgKyBwYWRFbmRFeHRyYVtpXSk7XG4gIGNvbnN0IHBhZGRpbmdzID0gYmxvY2tTaGFwZS5tYXAoKF8sIGkpID0+IFtwYWRTdGFydFtpXSwgcGFkRW5kW2ldXSk7XG4gIGNvbnN0IGNyb3BzID0gYmxvY2tTaGFwZS5tYXAoKF8sIGkpID0+IFswLCBwYWRFbmRFeHRyYVtpXV0pO1xuICByZXR1cm4gW3BhZGRpbmdzLCBjcm9wc107XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjb21wdXRlIGJhc2UgcGFkZGluZ3MgZm9yIHBvb2wgd2l0aCBkaWxhdGlvbiA+IDEuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3JmbG93L2Jsb2IvNTBmNmJiNjdkYzk4YzliNzQ2MzBiNjA0N2FhZTdhNGY4YTQwZmQwMi90ZW5zb3JmbG93L3B5dGhvbi9vcHMvbm5fb3BzLnB5I0w1MjRcbmZ1bmN0aW9uIHdpdGhTcGFjZVRvQmF0Y2hCYXNlUGFkZGluZ3MoXG4gICAgZmlsdGVyU2hhcGU6IFtudW1iZXIsIG51bWJlcl0sIGRpbGF0aW9uOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gIC8vIFNwYXRpYWwgZGltZW5zaW9ucyBvZiB0aGUgZmlsdGVycyBhbmQgdGhlIHVwc2FtcGxlZCBmaWx0ZXJzIGluIHdoaWNoIHdlXG4gIC8vIGludHJvZHVjZSAocmF0ZSAtIDEpIHplcm9zIGJldHdlZW4gY29uc2VjdXRpdmUgZmlsdGVyIHZhbHVlcy5cbiAgY29uc3QgZGlsYXRlZEZpbHRlclNoYXBlID0gZmlsdGVyU2hhcGUubWFwKChzLCBpKSA9PiB7XG4gICAgcmV0dXJuIHMgKyAocyAtIDEpICogKGRpbGF0aW9uW2ldIC0gMSk7XG4gIH0pO1xuICBjb25zdCBwYWRFeHRyYVNoYXBlID0gZGlsYXRlZEZpbHRlclNoYXBlLm1hcChzID0+IHMgLSAxKTtcblxuICAvLyBXaGVuIHBhZGRpbmcgaXMgb2RkLCB3ZSBwYWQgbW9yZSBhdCBlbmQsIGZvbGxvd2luZyB0aGUgc2FtZVxuICAvLyBjb252ZW50aW9uIGFzIGNvbnYyZC5cbiAgY29uc3QgcGFkRXh0cmFTdGFydCA9IHBhZEV4dHJhU2hhcGUubWFwKHMgPT4gTWF0aC5mbG9vcihzIC8gMikpO1xuICBjb25zdCBwYWRFeHRyYUVuZCA9IHBhZEV4dHJhU2hhcGUubWFwKChzLCBpKSA9PiBzIC0gcGFkRXh0cmFTdGFydFtpXSk7XG4gIHJldHVybiBwYWRFeHRyYVNoYXBlLm1hcCgoXywgaSkgPT4ge1xuICAgIHJldHVybiBbcGFkRXh0cmFTdGFydFtpXSwgcGFkRXh0cmFFbmRbaV1dO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHBvb2wgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Bvb2xffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Prelu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes leaky rectified linear element-wise with parametric alphas.\n *\n * `x < 0 ? alpha * x : f(x) = x`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n * const alpha = tf.scalar(0.1);\n *\n * x.prelu(alpha).print(); // or tf.prelu(x, alpha)\n * ```\n * @param x The input tensor.\n * @param alpha Scaling factor for negative values.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction prelu_(x, alpha) {\n const $x = convertToTensor(x, 'x', 'prelu');\n const $alpha = convertToTensor(alpha, 'alpha', 'prelu');\n const inputs = { x: $x, alpha: $alpha };\n return ENGINE.runKernel(Prelu, inputs);\n}\nexport const prelu = /* @__PURE__ */ op({ prelu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wcmVsdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZSxFQUFFLEtBQW1CO0lBQ3BFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhELE1BQU0sTUFBTSxHQUFnQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBQ25ELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtQcmVsdSwgUHJlbHVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgbGVha3kgcmVjdGlmaWVkIGxpbmVhciBlbGVtZW50LXdpc2Ugd2l0aCBwYXJhbWV0cmljIGFscGhhcy5cbiAqXG4gKiBgeCA8IDAgPyBhbHBoYSAqIHggOiBmKHgpID0geGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFstMSwgMiwgLTMsIDRdKTtcbiAqIGNvbnN0IGFscGhhID0gdGYuc2NhbGFyKDAuMSk7XG4gKlxuICogeC5wcmVsdShhbHBoYSkucHJpbnQoKTsgIC8vIG9yIHRmLnByZWx1KHgsIGFscGhhKVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGFscGhhIFNjYWxpbmcgZmFjdG9yIGZvciBuZWdhdGl2ZSB2YWx1ZXMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHByZWx1XzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UsIGFscGhhOiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAncHJlbHUnKTtcbiAgY29uc3QgJGFscGhhID0gY29udmVydFRvVGVuc29yKGFscGhhLCAnYWxwaGEnLCAncHJlbHUnKTtcblxuICBjb25zdCBpbnB1dHM6IFByZWx1SW5wdXRzID0ge3g6ICR4LCBhbHBoYTogJGFscGhhfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUHJlbHUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByZWx1ID0gLyogQF9fUFVSRV9fICovIG9wKHtwcmVsdV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Prod } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Computes the product of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.prod().print(); // or tf.prod(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.prod(axis).print(); // or tf.prod(x, axis)\n * ```\n *\n * @param x The input tensor to compute the product over. If the dtype is `bool`\n * it will be converted to `int32` and the output dtype will be `int32`.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction prod_(x, axis = null, keepDims = false) {\n let $x = convertToTensor(x, 'x', 'prod');\n if ($x.dtype === 'bool') {\n // bool is not an allowed type for the underlying kernel.\n $x = cast($x, 'int32');\n }\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(Prod, inputs, attrs);\n}\nexport const prod = /* @__PURE__ */ op({ prod_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3Byb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsU0FBUyxLQUFLLENBQ1YsQ0FBb0IsRUFBRSxPQUF3QixJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDdEUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFekMsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRTtRQUN2Qix5REFBeUQ7UUFDekQsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDeEI7SUFFRCxNQUFNLE1BQU0sR0FBZSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBYyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUUxQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLElBQUksRUFBRSxNQUFtQyxFQUN6QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1Byb2QsIFByb2RBdHRycywgUHJvZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjYXN0fSBmcm9tICcuL2Nhc3QnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBwcm9kdWN0IG9mIGVsZW1lbnRzIGFjcm9zcyBkaW1lbnNpb25zIG9mIGEgYHRmLlRlbnNvcmAuXG4gKlxuICogUmVkdWNlcyB0aGUgaW5wdXQgYWxvbmcgdGhlIGRpbWVuc2lvbnMgZ2l2ZW4gaW4gYGF4ZXNgLiBVbmxlc3MgYGtlZXBEaW1zYFxuICogaXMgdHJ1ZSwgdGhlIHJhbmsgb2YgdGhlIGB0Zi5UZW5zb3JgIGlzIHJlZHVjZWQgYnkgMSBmb3IgZWFjaCBlbnRyeSBpblxuICogYGF4ZXNgLiBJZiBga2VlcERpbXNgIGlzIHRydWUsIHRoZSByZWR1Y2VkIGRpbWVuc2lvbnMgYXJlIHJldGFpbmVkIHdpdGhcbiAqIGxlbmd0aCAxLiBJZiBgYXhlc2AgaGFzIG5vIGVudHJpZXMsIGFsbCBkaW1lbnNpb25zIGFyZSByZWR1Y2VkLCBhbmQgYVxuICogYHRmLlRlbnNvcmAgd2l0aCBhIHNpbmdsZSBlbGVtZW50IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqXG4gKiB4LnByb2QoKS5wcmludCgpOyAgLy8gb3IgdGYucHJvZCh4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LnByb2QoYXhpcykucHJpbnQoKTsgIC8vIG9yIHRmLnByb2QoeCwgYXhpcylcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IgdG8gY29tcHV0ZSB0aGUgcHJvZHVjdCBvdmVyLiBJZiB0aGUgZHR5cGUgaXMgYGJvb2xgXG4gKiAgIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGBpbnQzMmAgYW5kIHRoZSBvdXRwdXQgZHR5cGUgd2lsbCBiZSBgaW50MzJgLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlc1xuICogICAgIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggc2l6ZSAxLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIHByb2RfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzOiBudW1iZXJ8bnVtYmVyW10gPSBudWxsLCBrZWVwRGltcyA9IGZhbHNlKTogVCB7XG4gIGxldCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdwcm9kJyk7XG5cbiAgaWYgKCR4LmR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAvLyBib29sIGlzIG5vdCBhbiBhbGxvd2VkIHR5cGUgZm9yIHRoZSB1bmRlcmx5aW5nIGtlcm5lbC5cbiAgICAkeCA9IGNhc3QoJHgsICdpbnQzMicpO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBQcm9kSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFByb2RBdHRycyA9IHtheGlzLCBrZWVwRGltc307XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBQcm9kLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Byb2RffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { RaggedGather } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\nfunction raggedGather_(paramsNestedSplits, paramsDenseValues, indices, outputRaggedRank) {\n const $paramsNestedSplits = paramsNestedSplits.map((t, i) => convertToTensor(t, `tensors${i}`, 'raggedGather', 'int32'));\n const $paramsDenseValues = convertToTensor(paramsDenseValues, 'paramsDenseValues', 'raggedGather');\n const $indices = convertToTensor(indices, 'indices', 'raggedGather', 'int32');\n const inputs = {\n paramsNestedSplits: $paramsNestedSplits,\n paramsDenseValues: $paramsDenseValues,\n indices: $indices,\n };\n const attrs = { outputRaggedRank };\n const result = ENGINE.runKernel(RaggedGather, inputs, attrs);\n return {\n outputNestedSplits: result.slice(0, result.length - 1),\n outputDenseValues: result[result.length - 1],\n };\n}\nexport const raggedGather = /* @__PURE__ */ op({ raggedGather_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX2dhdGhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JhZ2dlZF9nYXRoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUF3QyxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBNEIvQixTQUFTLGFBQWEsQ0FDbEIsa0JBQTRCLEVBQUUsaUJBQW9DLEVBQ2xFLE9BQTBCLEVBQUUsZ0JBQXdCO0lBQ3RELE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUM5QyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLGtCQUFrQixHQUNwQixlQUFlLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTlFLE1BQU0sTUFBTSxHQUF1QjtRQUNqQyxrQkFBa0IsRUFBRSxtQkFBbUI7UUFDdkMsaUJBQWlCLEVBQUUsa0JBQWtCO1FBQ3JDLE9BQU8sRUFBRSxRQUFRO0tBQ2xCLENBQUM7SUFDRixNQUFNLEtBQUssR0FBc0IsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDO0lBRXBELE1BQU0sTUFBTSxHQUNSLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQVksRUFBRSxLQUFXLENBQUMsQ0FBQztJQUM5RCxPQUFPO1FBQ0wsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdEQsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQzdDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7UmFnZ2VkR2F0aGVyLCBSYWdnZWRHYXRoZXJBdHRycywgUmFnZ2VkR2F0aGVySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEdhdGhlciByYWdnZWQgc2xpY2VzIGZyb20gcGFyYW1zIGF4aXMgMCBhY2NvcmRpbmcgdG8gaW5kaWNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zTmVzdGVkU3BsaXRzOiBBIGxpc3Qgb2YgYXQgbGVhc3QgMSBUZW5zb3Igd2l0aCB0eXBlICdpbnQzMicgVGhlXG4gKiAgICAgbmVzdGVkUm93U3BsaXRzIHRlbnNvcnMgdGhhdCBkZWZpbmUgdGhlIHJvdy1wYXJ0aXRpb25pbmcgZm9yIHRoZSBwYXJhbXNcbiAqICAgICBSYWdnZWRUZW5zb3IgaW5wdXQuXG4gKiBAcGFyYW0gcGFyYW1zRGVuc2VWYWx1ZXM6IEEgVGVuc29yLiBUaGUgZmxhdFZhbHVlcyBmb3IgdGhlIHBhcmFtc1xuICogICAgIFJhZ2dlZFRlbnNvci5cbiAqIEBwYXJhbSBpbmRpY2VzOiBBIFRlbnNvci4gTXVzdCBiZSBvbmUgb2YgdHlwZTogaW50MzIuIEluZGljZXMgaW4gdGhlXG4gKiAgICAgb3V0ZXJtb3N0IGRpbWVuc2lvbiBvZiBwYXJhbXMgb2YgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBnYXRoZXJlZC5cbiAqIEBwYXJhbSBvdXRwdXRSYWdnZWRSYW5rOiBBbiBpbnQgdGhhdCBpcyA+PSAwLiBUaGUgcmFnZ2VkIHJhbmsgb2YgdGhlIG91dHB1dFxuICogICAgIFJhZ2dlZFRlbnNvci4gb3V0cHV0TmVzdGVkU3BsaXRzIHdpbGwgY29udGFpbiB0aGlzIG51bWJlciBvZiByb3dTcGxpdHNcbiAqICAgICB0ZW5zb3JzLiBUaGlzIHZhbHVlIHNob3VsZCBlcXVhbCBpbmRpY2VzLnNoYXBlLm5kaW1zICsgcGFyYW1zLnJhZ2dlZFJhbmtcbiAqICAgICAtIDEuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gb3V0cHV0TmVzdGVkU3BsaXRzOiBBIGxpc3Qgb2Ygb3V0cHV0UmFnZ2VkUmFuayBUZW5zb3Igb2JqZWN0cyB3aXRoIHRoZVxuICogc2FtZSB0eXBlIGFzIHBhcmFtc05lc3RlZFNwbGl0cy5cbiAqICAgICAtIG91dHB1dERlbnNlVmFsdWVzOiBBIFRlbnNvci4gSGFzIHRoZSBzYW1lIHR5cGUgYXMgcGFyYW1zRGVuc2VWYWx1ZXMuXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdSYWdnZWQnfVxuICovXG5cbmludGVyZmFjZSBSYWdnZWRHYXRoZXJNYXAge1xuICBvdXRwdXROZXN0ZWRTcGxpdHM6IFRlbnNvcltdO1xuICBvdXRwdXREZW5zZVZhbHVlczogVGVuc29yO1xufVxuXG5mdW5jdGlvbiByYWdnZWRHYXRoZXJfKFxuICAgIHBhcmFtc05lc3RlZFNwbGl0czogVGVuc29yW10sIHBhcmFtc0RlbnNlVmFsdWVzOiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgICBpbmRpY2VzOiBUZW5zb3J8VGVuc29yTGlrZSwgb3V0cHV0UmFnZ2VkUmFuazogbnVtYmVyKTogUmFnZ2VkR2F0aGVyTWFwIHtcbiAgY29uc3QgJHBhcmFtc05lc3RlZFNwbGl0cyA9IHBhcmFtc05lc3RlZFNwbGl0cy5tYXAoXG4gICAgICAodCwgaSkgPT4gY29udmVydFRvVGVuc29yKHQsIGB0ZW5zb3JzJHtpfWAsICdyYWdnZWRHYXRoZXInLCAnaW50MzInKSk7XG4gIGNvbnN0ICRwYXJhbXNEZW5zZVZhbHVlcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IocGFyYW1zRGVuc2VWYWx1ZXMsICdwYXJhbXNEZW5zZVZhbHVlcycsICdyYWdnZWRHYXRoZXInKTtcbiAgY29uc3QgJGluZGljZXMgPSBjb252ZXJ0VG9UZW5zb3IoaW5kaWNlcywgJ2luZGljZXMnLCAncmFnZ2VkR2F0aGVyJywgJ2ludDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSYWdnZWRHYXRoZXJJbnB1dHMgPSB7XG4gICAgcGFyYW1zTmVzdGVkU3BsaXRzOiAkcGFyYW1zTmVzdGVkU3BsaXRzLFxuICAgIHBhcmFtc0RlbnNlVmFsdWVzOiAkcGFyYW1zRGVuc2VWYWx1ZXMsXG4gICAgaW5kaWNlczogJGluZGljZXMsXG4gIH07XG4gIGNvbnN0IGF0dHJzOiBSYWdnZWRHYXRoZXJBdHRycyA9IHtvdXRwdXRSYWdnZWRSYW5rfTtcblxuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID1cbiAgICAgIEVOR0lORS5ydW5LZXJuZWwoUmFnZ2VkR2F0aGVyLCBpbnB1dHMgYXMge30sIGF0dHJzIGFzIHt9KTtcbiAgcmV0dXJuIHtcbiAgICBvdXRwdXROZXN0ZWRTcGxpdHM6IHJlc3VsdC5zbGljZSgwLCByZXN1bHQubGVuZ3RoIC0gMSksXG4gICAgb3V0cHV0RGVuc2VWYWx1ZXM6IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCByYWdnZWRHYXRoZXIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3JhZ2dlZEdhdGhlcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { RaggedRange } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns a RaggedTensor result composed from rtDenseValues and rtNestedSplits,\n * such that result[i] = [starts[i], starts[i] + deltas[i], ..., limits[i]]).\n *\n * @param starts: A Tensor. Must be one of the following types:\n * 'float32', 'int32'. The starts of each range.\n * @param limits: A Tensor. Must have the same type as starts. The limits of\n * each range.\n * @param deltas: A Tensor. Must have the same type as starts. The deltas of\n * each range.\n * @return A map with the following properties:\n * - rtNestedSplits: A Tensor of type 'int32'.\n * - rtDenseValues: A Tensor. Has the same type as starts.\n */\nfunction raggedRange_(starts, limits, deltas) {\n const $starts = convertToTensor(starts, 'starts', 'raggedRange');\n const $limits = convertToTensor(limits, 'limits', 'raggedRange', $starts.dtype);\n const $deltas = convertToTensor(deltas, 'deltas', 'raggedRange', $starts.dtype);\n const inputs = {\n starts: $starts,\n limits: $limits,\n deltas: $deltas,\n };\n const result = ENGINE.runKernel(RaggedRange, inputs);\n return {\n rtNestedSplits: result[0],\n rtDenseValues: result[1],\n };\n}\nexport const raggedRange = /* @__PURE__ */ op({ raggedRange_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX3JhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcmFnZ2VkX3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFdBQVcsRUFBb0IsTUFBTSxpQkFBaUIsQ0FBQztBQUcvRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsU0FBUyxZQUFZLENBQ2pCLE1BQXlCLEVBQUUsTUFBeUIsRUFDcEQsTUFBeUI7SUFDM0IsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sR0FDVCxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBFLE1BQU0sTUFBTSxHQUFzQjtRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFLE9BQU87S0FDaEIsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQVksQ0FBQyxDQUFDO0lBQ3JFLE9BQU87UUFDTCxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JhZ2dlZFJhbmdlLCBSYWdnZWRSYW5nZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyBhIFJhZ2dlZFRlbnNvciByZXN1bHQgY29tcG9zZWQgZnJvbSBydERlbnNlVmFsdWVzIGFuZCBydE5lc3RlZFNwbGl0cyxcbiAqIHN1Y2ggdGhhdCByZXN1bHRbaV0gPSBbc3RhcnRzW2ldLCBzdGFydHNbaV0gKyBkZWx0YXNbaV0sIC4uLiwgbGltaXRzW2ldXSkuXG4gKlxuICogQHBhcmFtIHN0YXJ0czogQSBUZW5zb3IuIE11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXM6XG4gKiAgICAgJ2Zsb2F0MzInLCAnaW50MzInLiBUaGUgc3RhcnRzIG9mIGVhY2ggcmFuZ2UuXG4gKiBAcGFyYW0gbGltaXRzOiBBIFRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgc3RhcnRzLiBUaGUgbGltaXRzIG9mXG4gKiAgICAgZWFjaCByYW5nZS5cbiAqIEBwYXJhbSBkZWx0YXM6IEEgVGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBzdGFydHMuIFRoZSBkZWx0YXMgb2ZcbiAqICAgICBlYWNoIHJhbmdlLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIHJ0TmVzdGVkU3BsaXRzOiBBIFRlbnNvciBvZiB0eXBlICdpbnQzMicuXG4gKiAgICAgLSBydERlbnNlVmFsdWVzOiBBIFRlbnNvci4gSGFzIHRoZSBzYW1lIHR5cGUgYXMgc3RhcnRzLlxuICovXG5cbmZ1bmN0aW9uIHJhZ2dlZFJhbmdlXyhcbiAgICBzdGFydHM6IFRlbnNvcnxUZW5zb3JMaWtlLCBsaW1pdHM6IFRlbnNvcnxUZW5zb3JMaWtlLFxuICAgIGRlbHRhczogVGVuc29yfFRlbnNvckxpa2UpOiBOYW1lZFRlbnNvck1hcCB7XG4gIGNvbnN0ICRzdGFydHMgPSBjb252ZXJ0VG9UZW5zb3Ioc3RhcnRzLCAnc3RhcnRzJywgJ3JhZ2dlZFJhbmdlJyk7XG4gIGNvbnN0ICRsaW1pdHMgPVxuICAgICAgY29udmVydFRvVGVuc29yKGxpbWl0cywgJ2xpbWl0cycsICdyYWdnZWRSYW5nZScsICRzdGFydHMuZHR5cGUpO1xuICBjb25zdCAkZGVsdGFzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihkZWx0YXMsICdkZWx0YXMnLCAncmFnZ2VkUmFuZ2UnLCAkc3RhcnRzLmR0eXBlKTtcblxuICBjb25zdCBpbnB1dHM6IFJhZ2dlZFJhbmdlSW5wdXRzID0ge1xuICAgIHN0YXJ0czogJHN0YXJ0cyxcbiAgICBsaW1pdHM6ICRsaW1pdHMsXG4gICAgZGVsdGFzOiAkZGVsdGFzLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdDogVGVuc29yW10gPSBFTkdJTkUucnVuS2VybmVsKFJhZ2dlZFJhbmdlLCBpbnB1dHMgYXMge30pO1xuICByZXR1cm4ge1xuICAgIHJ0TmVzdGVkU3BsaXRzOiByZXN1bHRbMF0sXG4gICAgcnREZW5zZVZhbHVlczogcmVzdWx0WzFdLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgcmFnZ2VkUmFuZ2UgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3JhZ2dlZFJhbmdlX30pO1xuIl19","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { RaggedTensorToTensor } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Create a dense tensor from a ragged tensor, possibly altering its shape.\n *\n * The raggedTensorToTensor op creates a dense tensor from am array of row\n * partition tensors, a value vector, and default values. If the shape is\n * unspecified, the minimal shape required to contain all the elements in the\n * ragged tensor (the natural shape) will be used. If some dimensions are left\n * unspecified, then the size of the natural shape is used in that dimension.\n *\n * The defaultValue will be broadcast to the output shape. After that, the\n * values from the ragged tensor overwrite the default values. Note that the\n * defaultValue must have less dimensions than the value.\n *\n * The row partition tensors are in the order of the dimensions. At present, the\n * types can be: \"ROW_SPLITS\": the row_splits tensor from the ragged tensor.\n * \"VALUE_ROWIDS\": the value_rowids tensor from the ragged tensor.\n * \"FIRST_DIM_SIZE\": if value_rowids is used for the first dimension, then it\n * is preceded by \"FIRST_DIM_SIZE\".\n * ```\n * @param shape: A Tensor. Must be one of the following types: 'int32'. The\n * desired shape of the output tensor. If left unspecified (empty), the\n * minimal shape required to contain all the elements in the ragged tensor\n * (the natural shape) will be used. If some dimensions are left\n * unspecified, then the size of the natural shape is used in that\n * dimension.\n *\n * Note that dense dimensions cannot be modified by the shape argument.\n * Trying to change the size of a dense dimension will cause the op to fail.\n * Examples: natural shape: [4, 5, 6] shape: -1 output shape: [4, 5, 6]\n *\n * natural shape: [4, 5, 6] shape: [3, -1, 2] output shape: [3, 5, 2]\n *\n * natural shape: [4, 5, 6] shape: [3, 7, 2] output shape: [3, 7, 2]\n * @param values: A Tensor. A 1D tensor representing the values of the ragged\n * tensor.\n * @param defaultValue: A Tensor. Must have the same type as values. The\n * defaultValue when the shape is larger than the ragged tensor. The\n * defaultValue is broadcast until it is the shape of the output tensor,\n * and then overwritten by values in the ragged tensor. The default value\n * must be compatible with this broadcast operation, and must have fewer\n * dimensions than the value tensor.\n * @param rowPartitionTensors: A list of at least 1 Tensor objects with the same\n * type in: 'int32'.\n * @param rowPartitionTypes: A list of strings. The types of the row partition\n * tensors. At present, these can be:\n * \"ROW_SPLITS\": the row_splits tensor from the ragged tensor.\n * \"VALUE_ROWIDS\": the value_rowids tensor from the ragged tensor.\n * \"FIRST_DIM_SIZE\": if value_rowids is used for the first dimension, then\n * it is preceeded by \"FIRST_DIM_SIZE\". The tensors are in the order of\n * the dimensions.\n * @return A Tensor. Has the same type as values.\n * @doc {heading: 'Operations', subheading: 'Ragged'}\n */\nfunction raggedTensorToTensor_(shape, values, defaultValue, rowPartitionTensors, rowPartitionTypes) {\n const $shape = convertToTensor(shape, 'shape', 'raggedTensorToTensor', 'int32');\n const $values = convertToTensor(values, 'values', 'raggedTensorToTensor');\n const $defaultValue = convertToTensor(defaultValue, 'defaultValue', 'raggedTensorToTensor', $values.dtype);\n const $rowPartitionTensors = rowPartitionTensors.map((t, i) => convertToTensor(t, `tensors${i}`, 'raggedTensorToTensor', 'int32'));\n const inputs = {\n shape: $shape,\n values: $values,\n defaultValue: $defaultValue,\n rowPartitionTensors: $rowPartitionTensors\n };\n const attrs = { rowPartitionTypes };\n return ENGINE.runKernel(RaggedTensorToTensor, inputs, attrs);\n}\nexport const raggedTensorToTensor = /* @__PURE__ */ op({ raggedTensorToTensor_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX3RlbnNvcl90b190ZW5zb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yYWdnZWRfdGVuc29yX3RvX3RlbnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxvQkFBb0IsRUFBd0QsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9ERztBQUNILFNBQVMscUJBQXFCLENBQzFCLEtBQXdCLEVBQUUsTUFBeUIsRUFDbkQsWUFBK0IsRUFBRSxtQkFBNkIsRUFDOUQsaUJBQTJCO0lBQzdCLE1BQU0sTUFBTSxHQUNSLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDMUUsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUNqQyxZQUFZLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RSxNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FDaEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDTCxlQUFlLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU1RSxNQUFNLE1BQU0sR0FBK0I7UUFDekMsS0FBSyxFQUFFLE1BQU07UUFDYixNQUFNLEVBQUUsT0FBTztRQUNmLFlBQVksRUFBRSxhQUFhO1FBQzNCLG1CQUFtQixFQUFFLG9CQUFvQjtLQUMxQyxDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQThCLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQztJQUU3RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsTUFBWSxFQUFFLEtBQVcsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7UmFnZ2VkVGVuc29yVG9UZW5zb3IsIFJhZ2dlZFRlbnNvclRvVGVuc29yQXR0cnMsIFJhZ2dlZFRlbnNvclRvVGVuc29ySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZSBhIGRlbnNlIHRlbnNvciBmcm9tIGEgcmFnZ2VkIHRlbnNvciwgcG9zc2libHkgYWx0ZXJpbmcgaXRzIHNoYXBlLlxuICpcbiAqIFRoZSByYWdnZWRUZW5zb3JUb1RlbnNvciBvcCBjcmVhdGVzIGEgZGVuc2UgdGVuc29yIGZyb20gYW0gYXJyYXkgb2Ygcm93XG4gKiBwYXJ0aXRpb24gdGVuc29ycywgYSB2YWx1ZSB2ZWN0b3IsIGFuZCBkZWZhdWx0IHZhbHVlcy4gSWYgdGhlIHNoYXBlIGlzXG4gKiB1bnNwZWNpZmllZCwgdGhlIG1pbmltYWwgc2hhcGUgcmVxdWlyZWQgdG8gY29udGFpbiBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZVxuICogcmFnZ2VkIHRlbnNvciAodGhlIG5hdHVyYWwgc2hhcGUpIHdpbGwgYmUgdXNlZC4gSWYgc29tZSBkaW1lbnNpb25zIGFyZSBsZWZ0XG4gKiB1bnNwZWNpZmllZCwgdGhlbiB0aGUgc2l6ZSBvZiB0aGUgbmF0dXJhbCBzaGFwZSBpcyB1c2VkIGluIHRoYXQgZGltZW5zaW9uLlxuICpcbiAqIFRoZSBkZWZhdWx0VmFsdWUgd2lsbCBiZSBicm9hZGNhc3QgdG8gdGhlIG91dHB1dCBzaGFwZS4gQWZ0ZXIgdGhhdCwgdGhlXG4gKiB2YWx1ZXMgZnJvbSB0aGUgcmFnZ2VkIHRlbnNvciBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgdmFsdWVzLiBOb3RlIHRoYXQgdGhlXG4gKiBkZWZhdWx0VmFsdWUgbXVzdCBoYXZlIGxlc3MgZGltZW5zaW9ucyB0aGFuIHRoZSB2YWx1ZS5cbiAqXG4gKiBUaGUgcm93IHBhcnRpdGlvbiB0ZW5zb3JzIGFyZSBpbiB0aGUgb3JkZXIgb2YgdGhlIGRpbWVuc2lvbnMuIEF0IHByZXNlbnQsIHRoZVxuICogdHlwZXMgY2FuIGJlOiBcIlJPV19TUExJVFNcIjogdGhlIHJvd19zcGxpdHMgdGVuc29yIGZyb20gdGhlIHJhZ2dlZCB0ZW5zb3IuXG4gKiAgIFwiVkFMVUVfUk9XSURTXCI6IHRoZSB2YWx1ZV9yb3dpZHMgdGVuc29yIGZyb20gdGhlIHJhZ2dlZCB0ZW5zb3IuXG4gKiAgIFwiRklSU1RfRElNX1NJWkVcIjogaWYgdmFsdWVfcm93aWRzIGlzIHVzZWQgZm9yIHRoZSBmaXJzdCBkaW1lbnNpb24sIHRoZW4gaXRcbiAqIGlzIHByZWNlZGVkIGJ5IFwiRklSU1RfRElNX1NJWkVcIi5cbiAqIGBgYFxuICogQHBhcmFtIHNoYXBlOiBBIFRlbnNvci4gTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczogJ2ludDMyJy4gVGhlXG4gKiAgICAgZGVzaXJlZCBzaGFwZSBvZiB0aGUgb3V0cHV0IHRlbnNvci4gSWYgbGVmdCB1bnNwZWNpZmllZCAoZW1wdHkpLCB0aGVcbiAqICAgICBtaW5pbWFsIHNoYXBlIHJlcXVpcmVkIHRvIGNvbnRhaW4gYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFnZ2VkIHRlbnNvclxuICogICAgICh0aGUgbmF0dXJhbCBzaGFwZSkgd2lsbCBiZSB1c2VkLiBJZiBzb21lIGRpbWVuc2lvbnMgYXJlIGxlZnRcbiAqICAgICB1bnNwZWNpZmllZCwgdGhlbiB0aGUgc2l6ZSBvZiB0aGUgbmF0dXJhbCBzaGFwZSBpcyB1c2VkIGluIHRoYXRcbiAqICAgICBkaW1lbnNpb24uXG4gKlxuICogICAgIE5vdGUgdGhhdCBkZW5zZSBkaW1lbnNpb25zIGNhbm5vdCBiZSBtb2RpZmllZCBieSB0aGUgc2hhcGUgYXJndW1lbnQuXG4gKiAgICAgVHJ5aW5nIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiBhIGRlbnNlIGRpbWVuc2lvbiB3aWxsIGNhdXNlIHRoZSBvcCB0byBmYWlsLlxuICogICAgIEV4YW1wbGVzOiBuYXR1cmFsIHNoYXBlOiBbNCwgNSwgNl0gc2hhcGU6IC0xIG91dHB1dCBzaGFwZTogWzQsIDUsIDZdXG4gKlxuICogICAgIG5hdHVyYWwgc2hhcGU6IFs0LCA1LCA2XSBzaGFwZTogWzMsIC0xLCAyXSBvdXRwdXQgc2hhcGU6IFszLCA1LCAyXVxuICpcbiAqICAgICBuYXR1cmFsIHNoYXBlOiBbNCwgNSwgNl0gc2hhcGU6IFszLCA3LCAyXSBvdXRwdXQgc2hhcGU6IFszLCA3LCAyXVxuICogQHBhcmFtIHZhbHVlczogQSBUZW5zb3IuIEEgMUQgdGVuc29yIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzIG9mIHRoZSByYWdnZWRcbiAqICAgICB0ZW5zb3IuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlOiBBIFRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdmFsdWVzLiBUaGVcbiAqICAgICBkZWZhdWx0VmFsdWUgd2hlbiB0aGUgc2hhcGUgaXMgbGFyZ2VyIHRoYW4gdGhlIHJhZ2dlZCB0ZW5zb3IuIFRoZVxuICogICAgIGRlZmF1bHRWYWx1ZSBpcyBicm9hZGNhc3QgdW50aWwgaXQgaXMgdGhlIHNoYXBlIG9mIHRoZSBvdXRwdXQgdGVuc29yLFxuICogICAgIGFuZCB0aGVuIG92ZXJ3cml0dGVuIGJ5IHZhbHVlcyBpbiB0aGUgcmFnZ2VkIHRlbnNvci4gVGhlIGRlZmF1bHQgdmFsdWVcbiAqICAgICBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGlzIGJyb2FkY2FzdCBvcGVyYXRpb24sIGFuZCBtdXN0IGhhdmUgZmV3ZXJcbiAqICAgICBkaW1lbnNpb25zIHRoYW4gdGhlIHZhbHVlIHRlbnNvci5cbiAqIEBwYXJhbSByb3dQYXJ0aXRpb25UZW5zb3JzOiBBIGxpc3Qgb2YgYXQgbGVhc3QgMSBUZW5zb3Igb2JqZWN0cyB3aXRoIHRoZSBzYW1lXG4gKiAgICAgdHlwZSBpbjogJ2ludDMyJy5cbiAqIEBwYXJhbSByb3dQYXJ0aXRpb25UeXBlczogQSBsaXN0IG9mIHN0cmluZ3MuIFRoZSB0eXBlcyBvZiB0aGUgcm93IHBhcnRpdGlvblxuICogICAgIHRlbnNvcnMuIEF0IHByZXNlbnQsIHRoZXNlIGNhbiBiZTpcbiAqICAgICBcIlJPV19TUExJVFNcIjogdGhlIHJvd19zcGxpdHMgdGVuc29yIGZyb20gdGhlIHJhZ2dlZCB0ZW5zb3IuXG4gKiAgICAgXCJWQUxVRV9ST1dJRFNcIjogdGhlIHZhbHVlX3Jvd2lkcyB0ZW5zb3IgZnJvbSB0aGUgcmFnZ2VkIHRlbnNvci5cbiAqICAgICBcIkZJUlNUX0RJTV9TSVpFXCI6IGlmIHZhbHVlX3Jvd2lkcyBpcyB1c2VkIGZvciB0aGUgZmlyc3QgZGltZW5zaW9uLCB0aGVuXG4gKiAgICAgICAgIGl0IGlzIHByZWNlZWRlZCBieSBcIkZJUlNUX0RJTV9TSVpFXCIuIFRoZSB0ZW5zb3JzIGFyZSBpbiB0aGUgb3JkZXIgb2ZcbiAqICAgICAgICAgdGhlIGRpbWVuc2lvbnMuXG4gKiBAcmV0dXJuIEEgVGVuc29yLiBIYXMgdGhlIHNhbWUgdHlwZSBhcyB2YWx1ZXMuXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdSYWdnZWQnfVxuICovXG5mdW5jdGlvbiByYWdnZWRUZW5zb3JUb1RlbnNvcl8oXG4gICAgc2hhcGU6IFRlbnNvcnxUZW5zb3JMaWtlLCB2YWx1ZXM6IFRlbnNvcnxUZW5zb3JMaWtlLFxuICAgIGRlZmF1bHRWYWx1ZTogVGVuc29yfFRlbnNvckxpa2UsIHJvd1BhcnRpdGlvblRlbnNvcnM6IFRlbnNvcltdLFxuICAgIHJvd1BhcnRpdGlvblR5cGVzOiBzdHJpbmdbXSk6IFRlbnNvciB7XG4gIGNvbnN0ICRzaGFwZSA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3Ioc2hhcGUsICdzaGFwZScsICdyYWdnZWRUZW5zb3JUb1RlbnNvcicsICdpbnQzMicpO1xuICBjb25zdCAkdmFsdWVzID0gY29udmVydFRvVGVuc29yKHZhbHVlcywgJ3ZhbHVlcycsICdyYWdnZWRUZW5zb3JUb1RlbnNvcicpO1xuICBjb25zdCAkZGVmYXVsdFZhbHVlID0gY29udmVydFRvVGVuc29yKFxuICAgICAgZGVmYXVsdFZhbHVlLCAnZGVmYXVsdFZhbHVlJywgJ3JhZ2dlZFRlbnNvclRvVGVuc29yJywgJHZhbHVlcy5kdHlwZSk7XG4gIGNvbnN0ICRyb3dQYXJ0aXRpb25UZW5zb3JzID0gcm93UGFydGl0aW9uVGVuc29ycy5tYXAoXG4gICAgICAodCwgaSkgPT5cbiAgICAgICAgICBjb252ZXJ0VG9UZW5zb3IodCwgYHRlbnNvcnMke2l9YCwgJ3JhZ2dlZFRlbnNvclRvVGVuc29yJywgJ2ludDMyJykpO1xuXG4gIGNvbnN0IGlucHV0czogUmFnZ2VkVGVuc29yVG9UZW5zb3JJbnB1dHMgPSB7XG4gICAgc2hhcGU6ICRzaGFwZSxcbiAgICB2YWx1ZXM6ICR2YWx1ZXMsXG4gICAgZGVmYXVsdFZhbHVlOiAkZGVmYXVsdFZhbHVlLFxuICAgIHJvd1BhcnRpdGlvblRlbnNvcnM6ICRyb3dQYXJ0aXRpb25UZW5zb3JzXG4gIH07XG4gIGNvbnN0IGF0dHJzOiBSYWdnZWRUZW5zb3JUb1RlbnNvckF0dHJzID0ge3Jvd1BhcnRpdGlvblR5cGVzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChSYWdnZWRUZW5zb3JUb1RlbnNvciwgaW5wdXRzIGFzIHt9LCBhdHRycyBhcyB7fSk7XG59XG5cbmV4cG9ydCBjb25zdCByYWdnZWRUZW5zb3JUb1RlbnNvciA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmFnZ2VkVGVuc29yVG9UZW5zb3JffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { sizeFromShape } from '../util';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { op } from './operation';\n/**\n * Creates a `tf.Tensor` with values sampled from a random number generator\n * function defined by the user.\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param randFunction A random number generator function which is called\n * for each element in the output tensor.\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction rand_(shape, randFunction, dtype) {\n assertNonNegativeIntegerDimensions(shape);\n const size = sizeFromShape(shape);\n let values = null;\n if (dtype == null || dtype === 'float32') {\n values = new Float32Array(size);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(size);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n for (let i = 0; i < size; i++) {\n values[i] = randFunction();\n }\n return ENGINE.makeTensor(values, shape, dtype);\n}\nexport const rand = /* @__PURE__ */ op({ rand_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUdqQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLEtBQUssQ0FDVixLQUFrQixFQUFFLFlBQTBCLEVBQzlDLEtBQWdCO0lBQ2xCLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDeEMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDO1NBQU0sSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFO1FBQzVCLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMvQjtTQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtRQUMzQixNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0I7U0FBTTtRQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDL0M7SUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQztLQUM1QjtJQUNELE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBYyxDQUFDO0FBQzlELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBSYW5rLCBTaGFwZU1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7YXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9uc30gZnJvbSAnLi4vdXRpbF9iYXNlJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgdGYuVGVuc29yYCB3aXRoIHZhbHVlcyBzYW1wbGVkIGZyb20gYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICogZnVuY3Rpb24gZGVmaW5lZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKiBAcGFyYW0gcmFuZEZ1bmN0aW9uIEEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkXG4gKiBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBvdXRwdXQgdGVuc29yLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIERlZmF1bHRzIHRvICdmbG9hdDMyJy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdSYW5kb20nfVxuICovXG5mdW5jdGlvbiByYW5kXzxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdLCByYW5kRnVuY3Rpb246ICgpID0+IG51bWJlcixcbiAgICBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yPFI+IHtcbiAgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG4gIGNvbnN0IHNpemUgPSBzaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgbGV0IHZhbHVlcyA9IG51bGw7XG4gIGlmIChkdHlwZSA9PSBudWxsIHx8IGR0eXBlID09PSAnZmxvYXQzMicpIHtcbiAgICB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUpO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgdmFsdWVzID0gbmV3IEludDMyQXJyYXkoc2l6ZSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdib29sJykge1xuICAgIHZhbHVlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIHZhbHVlc1tpXSA9IHJhbmRGdW5jdGlvbigpO1xuICB9XG4gIHJldHVybiBFTkdJTkUubWFrZVRlbnNvcih2YWx1ZXMsIHNoYXBlLCBkdHlwZSkgYXMgVGVuc29yPFI+O1xufVxuXG5leHBvcnQgY29uc3QgcmFuZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmFuZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as seedrandom from 'seedrandom';\nimport { expectNumbersClose, testEpsilon } from '../test_util';\n// https://en.wikipedia.org/wiki/Marsaglia_polar_method\nexport class MPRandGauss {\n constructor(mean, stdDeviation, dtype, truncated, seed) {\n this.mean = mean;\n this.stdDev = stdDeviation;\n this.dtype = dtype;\n this.nextVal = NaN;\n this.truncated = truncated;\n if (this.truncated) {\n this.upper = this.mean + this.stdDev * 2;\n this.lower = this.mean - this.stdDev * 2;\n }\n const seedValue = seed ? seed : Math.random();\n this.random = seedrandom.alea(seedValue.toString());\n }\n /** Returns next sample from a Gaussian distribution. */\n nextValue() {\n if (!isNaN(this.nextVal)) {\n const value = this.nextVal;\n this.nextVal = NaN;\n return value;\n }\n let resultX, resultY;\n let isValid = false;\n while (!isValid) {\n let v1, v2, s;\n do {\n v1 = 2 * this.random() - 1;\n v2 = 2 * this.random() - 1;\n s = v1 * v1 + v2 * v2;\n } while (s >= 1 || s === 0);\n const mul = Math.sqrt(-2.0 * Math.log(s) / s);\n resultX = this.mean + this.stdDev * v1 * mul;\n resultY = this.mean + this.stdDev * v2 * mul;\n if (!this.truncated || this.isValidTruncated(resultX)) {\n isValid = true;\n }\n }\n if (!this.truncated || this.isValidTruncated(resultY)) {\n this.nextVal = this.convertValue(resultY);\n }\n return this.convertValue(resultX);\n }\n /** Handles proper rounding for non-floating-point numbers. */\n convertValue(value) {\n if (this.dtype == null || this.dtype === 'float32') {\n return value;\n }\n return Math.round(value);\n }\n /** Returns true if less than 2-standard-deviations from the mean. */\n isValidTruncated(value) {\n return value <= this.upper && value >= this.lower;\n }\n}\n// Marsaglia, George, and Wai Wan Tsang. 2000. \"A Simple Method for Generating\n// Gamma Variables.\"\nexport class RandGamma {\n constructor(alpha, beta, dtype, seed) {\n this.alpha = alpha;\n this.beta = 1 / beta; // convert rate to scale parameter\n this.dtype = dtype;\n const seedValue = seed ? seed : Math.random();\n this.randu = seedrandom.alea(seedValue.toString());\n this.randn = new MPRandGauss(0, 1, dtype, false, this.randu());\n if (alpha < 1) {\n this.d = alpha + (2 / 3);\n }\n else {\n this.d = alpha - (1 / 3);\n }\n this.c = 1 / Math.sqrt(9 * this.d);\n }\n /** Returns next sample from a gamma distribution. */\n nextValue() {\n let x2, v0, v1, x, u, v;\n while (true) {\n do {\n x = this.randn.nextValue();\n v = 1 + (this.c * x);\n } while (v <= 0);\n v *= v * v;\n x2 = x * x;\n v0 = 1 - (0.331 * x2 * x2);\n v1 = (0.5 * x2) + (this.d * (1 - v + Math.log(v)));\n u = this.randu();\n if (u < v0 || Math.log(u) < v1) {\n break;\n }\n }\n v = (1 / this.beta) * this.d * v;\n if (this.alpha < 1) {\n v *= Math.pow(this.randu(), 1 / this.alpha);\n }\n return this.convertValue(v);\n }\n /** Handles proper rounding for non-floating-point numbers. */\n convertValue(value) {\n if (this.dtype === 'float32') {\n return value;\n }\n return Math.round(value);\n }\n}\nexport class UniformRandom {\n constructor(min = 0, max = 1, dtype, seed) {\n /** Handles proper rounding for non floating point numbers. */\n this.canReturnFloat = () => (this.dtype == null || this.dtype === 'float32');\n this.min = min;\n this.range = max - min;\n this.dtype = dtype;\n if (seed == null) {\n seed = Math.random();\n }\n if (typeof seed === 'number') {\n seed = seed.toString();\n }\n if (!this.canReturnFloat() && this.range <= 1) {\n throw new Error(`The difference between ${min} - ${max} <= 1 and dtype is not float`);\n }\n this.random = seedrandom.alea(seed);\n }\n convertValue(value) {\n if (this.canReturnFloat()) {\n return value;\n }\n return Math.round(value);\n }\n nextValue() {\n return this.convertValue(this.min + this.range * this.random());\n }\n}\nexport function jarqueBeraNormalityTest(values) {\n // https://en.wikipedia.org/wiki/Jarque%E2%80%93Bera_test\n const n = values.length;\n const s = skewness(values);\n const k = kurtosis(values);\n const jb = n / 6 * (Math.pow(s, 2) + 0.25 * Math.pow(k - 3, 2));\n // JB test requires 2-degress of freedom from Chi-Square @ 0.95:\n // http://www.itl.nist.gov/div898/handbook/eda/section3/eda3674.htm\n const CHI_SQUARE_2DEG = 5.991;\n if (jb > CHI_SQUARE_2DEG) {\n throw new Error(`Invalid p-value for JB: ${jb}`);\n }\n}\nexport function expectArrayInMeanStdRange(actual, expectedMean, expectedStdDev, epsilon) {\n if (epsilon == null) {\n epsilon = testEpsilon();\n }\n const actualMean = mean(actual);\n expectNumbersClose(actualMean, expectedMean, epsilon);\n expectNumbersClose(standardDeviation(actual, actualMean), expectedStdDev, epsilon);\n}\nfunction mean(values) {\n let sum = 0;\n for (let i = 0; i < values.length; i++) {\n sum += values[i];\n }\n return sum / values.length;\n}\nfunction standardDeviation(values, mean) {\n let squareDiffSum = 0;\n for (let i = 0; i < values.length; i++) {\n const diff = values[i] - mean;\n squareDiffSum += diff * diff;\n }\n return Math.sqrt(squareDiffSum / values.length);\n}\nfunction kurtosis(values) {\n // https://en.wikipedia.org/wiki/Kurtosis\n const valuesMean = mean(values);\n const n = values.length;\n let sum2 = 0;\n let sum4 = 0;\n for (let i = 0; i < n; i++) {\n const v = values[i] - valuesMean;\n sum2 += Math.pow(v, 2);\n sum4 += Math.pow(v, 4);\n }\n return (1 / n) * sum4 / Math.pow((1 / n) * sum2, 2);\n}\nfunction skewness(values) {\n // https://en.wikipedia.org/wiki/Skewness\n const valuesMean = mean(values);\n const n = values.length;\n let sum2 = 0;\n let sum3 = 0;\n for (let i = 0; i < n; i++) {\n const v = values[i] - valuesMean;\n sum2 += Math.pow(v, 2);\n sum3 += Math.pow(v, 3);\n }\n return (1 / n) * sum3 / Math.pow((1 / (n - 1)) * sum2, 3 / 2);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcmFuZF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFxQjdELHVEQUF1RDtBQUN2RCxNQUFNLE9BQU8sV0FBVztJQVV0QixZQUNJLElBQVksRUFBRSxZQUFvQixFQUFFLEtBQWlDLEVBQ3JFLFNBQW1CLEVBQUUsSUFBYTtRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUMxQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCx3REFBd0Q7SUFD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QUFNLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUNqQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0ICogYXMgc2VlZHJhbmRvbSBmcm9tICdzZWVkcmFuZG9tJztcblxuaW1wb3J0IHtleHBlY3ROdW1iZXJzQ2xvc2UsIHRlc3RFcHNpbG9ufSBmcm9tICcuLi90ZXN0X3V0aWwnO1xuaW1wb3J0IHtUeXBlZEFycmF5fSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZG9tQmFzZSB7XG4gIG5leHRWYWx1ZSgpOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZG9tR2FtbWEge1xuICBuZXh0VmFsdWUoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhbmROb3JtYWxEYXRhVHlwZXMge1xuICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG4gIGludDMyOiBJbnQzMkFycmF5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhbmRHYW1tYURhdGFUeXBlcyB7XG4gIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcbiAgaW50MzI6IEludDMyQXJyYXk7XG59XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01hcnNhZ2xpYV9wb2xhcl9tZXRob2RcbmV4cG9ydCBjbGFzcyBNUFJhbmRHYXVzcyBpbXBsZW1lbnRzIFJhbmRvbUJhc2Uge1xuICBwcml2YXRlIG1lYW46IG51bWJlcjtcbiAgcHJpdmF0ZSBzdGREZXY6IG51bWJlcjtcbiAgcHJpdmF0ZSBuZXh0VmFsOiBudW1iZXI7XG4gIHByaXZhdGUgZHR5cGU/OiBrZXlvZiBSYW5kTm9ybWFsRGF0YVR5cGVzO1xuICBwcml2YXRlIHRydW5jYXRlZD86IGJvb2xlYW47XG4gIHByaXZhdGUgdXBwZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgbG93ZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgcmFuZG9tOiBzZWVkcmFuZG9tLnBybmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBtZWFuOiBudW1iZXIsIHN0ZERldmlhdGlvbjogbnVtYmVyLCBkdHlwZT86IGtleW9mIFJhbmROb3JtYWxEYXRhVHlwZXMsXG4gICAgICB0cnVuY2F0ZWQ/OiBib29sZWFuLCBzZWVkPzogbnVtYmVyKSB7XG4gICAgdGhpcy5tZWFuID0gbWVhbjtcbiAgICB0aGlzLnN0ZERldiA9IHN0ZERldmlhdGlvbjtcbiAgICB0aGlzLmR0eXBlID0gZHR5cGU7XG4gICAgdGhpcy5uZXh0VmFsID0gTmFOO1xuICAgIHRoaXMudHJ1bmNhdGVkID0gdHJ1bmNhdGVkO1xuICAgIGlmICh0aGlzLnRydW5jYXRlZCkge1xuICAgICAgdGhpcy51cHBlciA9IHRoaXMubWVhbiArIHRoaXMuc3RkRGV2ICogMjtcbiAgICAgIHRoaXMubG93ZXIgPSB0aGlzLm1lYW4gLSB0aGlzLnN0ZERldiAqIDI7XG4gICAgfVxuICAgIGNvbnN0IHNlZWRWYWx1ZSA9IHNlZWQgPyBzZWVkIDogTWF0aC5yYW5kb20oKTtcbiAgICB0aGlzLnJhbmRvbSA9IHNlZWRyYW5kb20uYWxlYShzZWVkVmFsdWUudG9TdHJpbmcoKSk7XG4gIH1cblxuICAvKiogUmV0dXJucyBuZXh0IHNhbXBsZSBmcm9tIGEgR2F1c3NpYW4gZGlzdHJpYnV0aW9uLiAqL1xuICBwdWJsaWMgbmV4dFZhbHVlKCk6IG51bWJlciB7XG4gICAgaWYgKCFpc05hTih0aGlzLm5leHRWYWwpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubmV4dFZhbDtcbiAgICAgIHRoaXMubmV4dFZhbCA9IE5hTjtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0WDogbnVtYmVyLCByZXN1bHRZOiBudW1iZXI7XG4gICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoIWlzVmFsaWQpIHtcbiAgICAgIGxldCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCBzOiBudW1iZXI7XG4gICAgICBkbyB7XG4gICAgICAgIHYxID0gMiAqIHRoaXMucmFuZG9tKCkgLSAxO1xuICAgICAgICB2MiA9IDIgKiB0aGlzLnJhbmRvbSgpIC0gMTtcbiAgICAgICAgcyA9IHYxICogdjEgKyB2MiAqIHYyO1xuICAgICAgfSB3aGlsZSAocyA+PSAxIHx8IHMgPT09IDApO1xuXG4gICAgICBjb25zdCBtdWwgPSBNYXRoLnNxcnQoLTIuMCAqIE1hdGgubG9nKHMpIC8gcyk7XG4gICAgICByZXN1bHRYID0gdGhpcy5tZWFuICsgdGhpcy5zdGREZXYgKiB2MSAqIG11bDtcbiAgICAgIHJlc3VsdFkgPSB0aGlzLm1lYW4gKyB0aGlzLnN0ZERldiAqIHYyICogbXVsO1xuXG4gICAgICBpZiAoIXRoaXMudHJ1bmNhdGVkIHx8IHRoaXMuaXNWYWxpZFRydW5jYXRlZChyZXN1bHRYKSkge1xuICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudHJ1bmNhdGVkIHx8IHRoaXMuaXNWYWxpZFRydW5jYXRlZChyZXN1bHRZKSkge1xuICAgICAgdGhpcy5uZXh0VmFsID0gdGhpcy5jb252ZXJ0VmFsdWUocmVzdWx0WSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWx1ZShyZXN1bHRYKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIHByb3BlciByb3VuZGluZyBmb3Igbm9uLWZsb2F0aW5nLXBvaW50IG51bWJlcnMuICovXG4gIHByaXZhdGUgY29udmVydFZhbHVlKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmR0eXBlID09IG51bGwgfHwgdGhpcy5kdHlwZSA9PT0gJ2Zsb2F0MzInKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgbGVzcyB0aGFuIDItc3RhbmRhcmQtZGV2aWF0aW9ucyBmcm9tIHRoZSBtZWFuLiAqL1xuICBwcml2YXRlIGlzVmFsaWRUcnVuY2F0ZWQodmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA8PSB0aGlzLnVwcGVyICYmIHZhbHVlID49IHRoaXMubG93ZXI7XG4gIH1cbn1cblxuLy8gTWFyc2FnbGlhLCBHZW9yZ2UsIGFuZCBXYWkgV2FuIFRzYW5nLiAyMDAwLiBcIkEgU2ltcGxlIE1ldGhvZCBmb3IgR2VuZXJhdGluZ1xuLy8gR2FtbWEgVmFyaWFibGVzLlwiXG5leHBvcnQgY2xhc3MgUmFuZEdhbW1hIGltcGxlbWVudHMgUmFuZG9tR2FtbWEge1xuICBwcml2YXRlIGFscGhhOiBudW1iZXI7XG4gIHByaXZhdGUgYmV0YTogbnVtYmVyO1xuICBwcml2YXRlIGQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBjOiBudW1iZXI7XG4gIHByaXZhdGUgZHR5cGU/OiBrZXlvZiBSYW5kR2FtbWFEYXRhVHlwZXM7XG4gIHByaXZhdGUgcmFuZHU6IHNlZWRyYW5kb20ucHJuZztcbiAgcHJpdmF0ZSByYW5kbjogTVBSYW5kR2F1c3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBhbHBoYTogbnVtYmVyLCBiZXRhOiBudW1iZXIsIGR0eXBlOiBrZXlvZiBSYW5kR2FtbWFEYXRhVHlwZXMsXG4gICAgICBzZWVkPzogbnVtYmVyKSB7XG4gICAgdGhpcy5hbHBoYSA9IGFscGhhO1xuICAgIHRoaXMuYmV0YSA9IDEgLyBiZXRhOyAgLy8gY29udmVydCByYXRlIHRvIHNjYWxlIHBhcmFtZXRlclxuICAgIHRoaXMuZHR5cGUgPSBkdHlwZTtcblxuICAgIGNvbnN0IHNlZWRWYWx1ZSA9IHNlZWQgPyBzZWVkIDogTWF0aC5yYW5kb20oKTtcbiAgICB0aGlzLnJhbmR1ID0gc2VlZHJhbmRvbS5hbGVhKHNlZWRWYWx1ZS50b1N0cmluZygpKTtcbiAgICB0aGlzLnJhbmRuID0gbmV3IE1QUmFuZEdhdXNzKDAsIDEsIGR0eXBlLCBmYWxzZSwgdGhpcy5yYW5kdSgpKTtcblxuICAgIGlmIChhbHBoYSA8IDEpIHtcbiAgICAgIHRoaXMuZCA9IGFscGhhICsgKDIgLyAzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kID0gYWxwaGEgLSAoMSAvIDMpO1xuICAgIH1cbiAgICB0aGlzLmMgPSAxIC8gTWF0aC5zcXJ0KDkgKiB0aGlzLmQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgbmV4dCBzYW1wbGUgZnJvbSBhIGdhbW1hIGRpc3RyaWJ1dGlvbi4gKi9cbiAgcHVibGljIG5leHRWYWx1ZSgpOiBudW1iZXIge1xuICAgIGxldCB4MjogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB4OiBudW1iZXIsIHU6IG51bWJlciwgdjogbnVtYmVyO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBkbyB7XG4gICAgICAgIHggPSB0aGlzLnJhbmRuLm5leHRWYWx1ZSgpO1xuICAgICAgICB2ID0gMSArICh0aGlzLmMgKiB4KTtcbiAgICAgIH0gd2hpbGUgKHYgPD0gMCk7XG4gICAgICB2ICo9IHYgKiB2O1xuICAgICAgeDIgPSB4ICogeDtcbiAgICAgIHYwID0gMSAtICgwLjMzMSAqIHgyICogeDIpO1xuICAgICAgdjEgPSAoMC41ICogeDIpICsgKHRoaXMuZCAqICgxIC0gdiArIE1hdGgubG9nKHYpKSk7XG4gICAgICB1ID0gdGhpcy5yYW5kdSgpO1xuICAgICAgaWYgKHUgPCB2MCB8fCBNYXRoLmxvZyh1KSA8IHYxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB2ID0gKDEgLyB0aGlzLmJldGEpICogdGhpcy5kICogdjtcbiAgICBpZiAodGhpcy5hbHBoYSA8IDEpIHtcbiAgICAgIHYgKj0gTWF0aC5wb3codGhpcy5yYW5kdSgpLCAxIC8gdGhpcy5hbHBoYSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWx1ZSh2KTtcbiAgfVxuICAvKiogSGFuZGxlcyBwcm9wZXIgcm91bmRpbmcgZm9yIG5vbi1mbG9hdGluZy1wb2ludCBudW1iZXJzLiAqL1xuICBwcml2YXRlIGNvbnZlcnRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5kdHlwZSA9PT0gJ2Zsb2F0MzInKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5pZm9ybVJhbmRvbSBpbXBsZW1lbnRzIFJhbmRvbUJhc2Uge1xuICBwcml2YXRlIG1pbjogbnVtYmVyO1xuICBwcml2YXRlIHJhbmdlOiBudW1iZXI7XG4gIHByaXZhdGUgcmFuZG9tOiBzZWVkcmFuZG9tLnBybmc7XG4gIHByaXZhdGUgZHR5cGU/OiBrZXlvZiBSYW5kTm9ybWFsRGF0YVR5cGVzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgbWluID0gMCwgbWF4ID0gMSwgZHR5cGU/OiBrZXlvZiBSYW5kTm9ybWFsRGF0YVR5cGVzLFxuICAgICAgc2VlZD86IHN0cmluZ3xudW1iZXIpIHtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLnJhbmdlID0gbWF4IC0gbWluO1xuICAgIHRoaXMuZHR5cGUgPSBkdHlwZTtcbiAgICBpZiAoc2VlZCA9PSBudWxsKSB7XG4gICAgICBzZWVkID0gTWF0aC5yYW5kb20oKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzZWVkID09PSAnbnVtYmVyJykge1xuICAgICAgc2VlZCA9IHNlZWQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FuUmV0dXJuRmxvYXQoKSAmJiB0aGlzLnJhbmdlIDw9IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAke21pbn0gLSAke21heH0gPD0gMSBhbmQgZHR5cGUgaXMgbm90IGZsb2F0YCk7XG4gICAgfVxuICAgIHRoaXMucmFuZG9tID0gc2VlZHJhbmRvbS5hbGVhKHNlZWQpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgcHJvcGVyIHJvdW5kaW5nIGZvciBub24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gKi9cbiAgcHJpdmF0ZSBjYW5SZXR1cm5GbG9hdCA9ICgpID0+XG4gICAgICAodGhpcy5kdHlwZSA9PSBudWxsIHx8IHRoaXMuZHR5cGUgPT09ICdmbG9hdDMyJyk7XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VmFsdWUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY2FuUmV0dXJuRmxvYXQoKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gIH1cblxuICBuZXh0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydFZhbHVlKHRoaXMubWluICsgdGhpcy5yYW5nZSAqIHRoaXMucmFuZG9tKCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqYXJxdWVCZXJhTm9ybWFsaXR5VGVzdCh2YWx1ZXM6IFR5cGVkQXJyYXl8bnVtYmVyW10pIHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmFycXVlJUUyJTgwJTkzQmVyYV90ZXN0XG4gIGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xuICBjb25zdCBzID0gc2tld25lc3ModmFsdWVzKTtcbiAgY29uc3QgayA9IGt1cnRvc2lzKHZhbHVlcyk7XG4gIGNvbnN0IGpiID0gbiAvIDYgKiAoTWF0aC5wb3cocywgMikgKyAwLjI1ICogTWF0aC5wb3coayAtIDMsIDIpKTtcbiAgLy8gSkIgdGVzdCByZXF1aXJlcyAyLWRlZ3Jlc3Mgb2YgZnJlZWRvbSBmcm9tIENoaS1TcXVhcmUgQCAwLjk1OlxuICAvLyBodHRwOi8vd3d3Lml0bC5uaXN0Lmdvdi9kaXY4OTgvaGFuZGJvb2svZWRhL3NlY3Rpb24zL2VkYTM2NzQuaHRtXG4gIGNvbnN0IENISV9TUVVBUkVfMkRFRyA9IDUuOTkxO1xuICBpZiAoamIgPiBDSElfU1FVQVJFXzJERUcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcC12YWx1ZSBmb3IgSkI6ICR7amJ9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5SW5NZWFuU3RkUmFuZ2UoXG4gICAgYWN0dWFsOiBUeXBlZEFycmF5fG51bWJlcltdLCBleHBlY3RlZE1lYW46IG51bWJlciwgZXhwZWN0ZWRTdGREZXY6IG51bWJlcixcbiAgICBlcHNpbG9uPzogbnVtYmVyKSB7XG4gIGlmIChlcHNpbG9uID09IG51bGwpIHtcbiAgICBlcHNpbG9uID0gdGVzdEVwc2lsb24oKTtcbiAgfVxuICBjb25zdCBhY3R1YWxNZWFuID0gbWVhbihhY3R1YWwpO1xuICBleHBlY3ROdW1iZXJzQ2xvc2UoYWN0dWFsTWVhbiwgZXhwZWN0ZWRNZWFuLCBlcHNpbG9uKTtcbiAgZXhwZWN0TnVtYmVyc0Nsb3NlKFxuICAgICAgc3RhbmRhcmREZXZpYXRpb24oYWN0dWFsLCBhY3R1YWxNZWFuKSwgZXhwZWN0ZWRTdGREZXYsIGVwc2lsb24pO1xufVxuXG5mdW5jdGlvbiBtZWFuKHZhbHVlczogVHlwZWRBcnJheXxudW1iZXJbXSkge1xuICBsZXQgc3VtID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBzdW0gKz0gdmFsdWVzW2ldO1xuICB9XG4gIHJldHVybiBzdW0gLyB2YWx1ZXMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBzdGFuZGFyZERldmlhdGlvbih2YWx1ZXM6IFR5cGVkQXJyYXl8bnVtYmVyW10sIG1lYW46IG51bWJlcikge1xuICBsZXQgc3F1YXJlRGlmZlN1bSA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGlmZiA9IHZhbHVlc1tpXSAtIG1lYW47XG4gICAgc3F1YXJlRGlmZlN1bSArPSBkaWZmICogZGlmZjtcbiAgfVxuICByZXR1cm4gTWF0aC5zcXJ0KHNxdWFyZURpZmZTdW0gLyB2YWx1ZXMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24ga3VydG9zaXModmFsdWVzOiBUeXBlZEFycmF5fG51bWJlcltdKSB7XG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0t1cnRvc2lzXG4gIGNvbnN0IHZhbHVlc01lYW4gPSBtZWFuKHZhbHVlcyk7XG4gIGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xuICBsZXQgc3VtMiA9IDA7XG4gIGxldCBzdW00ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBjb25zdCB2ID0gdmFsdWVzW2ldIC0gdmFsdWVzTWVhbjtcbiAgICBzdW0yICs9IE1hdGgucG93KHYsIDIpO1xuICAgIHN1bTQgKz0gTWF0aC5wb3codiwgNCk7XG4gIH1cbiAgcmV0dXJuICgxIC8gbikgKiBzdW00IC8gTWF0aC5wb3coKDEgLyBuKSAqIHN1bTIsIDIpO1xufVxuXG5mdW5jdGlvbiBza2V3bmVzcyh2YWx1ZXM6IFR5cGVkQXJyYXl8bnVtYmVyW10pIHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2tld25lc3NcbiAgY29uc3QgdmFsdWVzTWVhbiA9IG1lYW4odmFsdWVzKTtcbiAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIGxldCBzdW0yID0gMDtcbiAgbGV0IHN1bTMgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIGNvbnN0IHYgPSB2YWx1ZXNbaV0gLSB2YWx1ZXNNZWFuO1xuICAgIHN1bTIgKz0gTWF0aC5wb3codiwgMik7XG4gICAgc3VtMyArPSBNYXRoLnBvdyh2LCAzKTtcbiAgfVxuICByZXR1cm4gKDEgLyBuKSAqIHN1bTMgLyBNYXRoLnBvdygoMSAvIChuIC0gMSkpICogc3VtMiwgMyAvIDIpO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { buffer } from './buffer';\nimport { op } from './operation';\nimport { RandGamma } from './rand_util';\n/**\n * Creates a `tf.Tensor` with values sampled from a gamma distribution.\n *\n * ```js\n * tf.randomGamma([2, 2], 1).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param alpha The shape parameter of the gamma distribution.\n * @param beta The inverse scale parameter of the gamma distribution. Defaults\n * to 1.\n * @param dtype The data type of the output. Defaults to float32.\n * @param seed The seed for the random number generator.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomGamma_(shape, alpha, beta = 1, dtype = 'float32', seed) {\n assertNonNegativeIntegerDimensions(shape);\n if (beta == null) {\n beta = 1;\n }\n if (dtype == null) {\n dtype = 'float32';\n }\n if (dtype !== 'float32' && dtype !== 'int32') {\n throw new Error(`Unsupported data type ${dtype}`);\n }\n const rgamma = new RandGamma(alpha, beta, dtype, seed);\n const res = buffer(shape, dtype);\n for (let i = 0; i < res.values.length; i++) {\n res.values[i] = rgamma.nextValue();\n }\n return res.toTensor();\n}\nexport const randomGamma = /* @__PURE__ */ op({ randomGamma_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX2dhbW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcmFuZG9tX2dhbW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLFlBQVksQ0FDakIsS0FBa0IsRUFBRSxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFDM0MsUUFBMkIsU0FBUyxFQUFFLElBQWE7SUFDckQsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1FBQ2hCLElBQUksR0FBRyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixLQUFLLEdBQUcsU0FBUyxDQUFDO0tBQ25CO0lBQ0QsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNuRDtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQ3BDO0lBQ0QsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1JhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbmltcG9ydCB7YnVmZmVyfSBmcm9tICcuL2J1ZmZlcic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge1JhbmRHYW1tYX0gZnJvbSAnLi9yYW5kX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgdGYuVGVuc29yYCB3aXRoIHZhbHVlcyBzYW1wbGVkIGZyb20gYSBnYW1tYSBkaXN0cmlidXRpb24uXG4gKlxuICogYGBganNcbiAqIHRmLnJhbmRvbUdhbW1hKFsyLCAyXSwgMSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSBhbHBoYSBUaGUgc2hhcGUgcGFyYW1ldGVyIG9mIHRoZSBnYW1tYSBkaXN0cmlidXRpb24uXG4gKiBAcGFyYW0gYmV0YSBUaGUgaW52ZXJzZSBzY2FsZSBwYXJhbWV0ZXIgb2YgdGhlIGdhbW1hIGRpc3RyaWJ1dGlvbi4gRGVmYXVsdHNcbiAqICAgICB0byAxLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dC4gRGVmYXVsdHMgdG8gZmxvYXQzMi5cbiAqIEBwYXJhbSBzZWVkIFRoZSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnUmFuZG9tJ31cbiAqL1xuZnVuY3Rpb24gcmFuZG9tR2FtbWFfPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBzaGFwZTogU2hhcGVNYXBbUl0sIGFscGhhOiBudW1iZXIsIGJldGEgPSAxLFxuICAgIGR0eXBlOiAnZmxvYXQzMid8J2ludDMyJyA9ICdmbG9hdDMyJywgc2VlZD86IG51bWJlcik6IFRlbnNvcjxSPiB7XG4gIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMoc2hhcGUpO1xuICBpZiAoYmV0YSA9PSBudWxsKSB7XG4gICAgYmV0YSA9IDE7XG4gIH1cbiAgaWYgKGR0eXBlID09IG51bGwpIHtcbiAgICBkdHlwZSA9ICdmbG9hdDMyJztcbiAgfVxuICBpZiAoZHR5cGUgIT09ICdmbG9hdDMyJyAmJiBkdHlwZSAhPT0gJ2ludDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlICR7ZHR5cGV9YCk7XG4gIH1cbiAgY29uc3QgcmdhbW1hID0gbmV3IFJhbmRHYW1tYShhbHBoYSwgYmV0YSwgZHR5cGUsIHNlZWQpO1xuICBjb25zdCByZXMgPSBidWZmZXIoc2hhcGUsIGR0eXBlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzLnZhbHVlc1tpXSA9IHJnYW1tYS5uZXh0VmFsdWUoKTtcbiAgfVxuICByZXR1cm4gcmVzLnRvVGVuc29yKCk7XG59XG5cbmV4cG9ydCBjb25zdCByYW5kb21HYW1tYSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmFuZG9tR2FtbWFffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { buffer } from './buffer';\nimport { op } from './operation';\nimport { MPRandGauss } from './rand_util';\n/**\n * Creates a `tf.Tensor` with values sampled from a normal distribution.\n *\n * ```js\n * tf.randomNormal([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param mean The mean of the normal distribution.\n * @param stdDev The standard deviation of the normal distribution.\n * @param dtype The data type of the output.\n * @param seed The seed for the random number generator.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomNormal_(shape, mean = 0, stdDev = 1, dtype, seed) {\n assertNonNegativeIntegerDimensions(shape);\n if (dtype != null && dtype === 'bool') {\n throw new Error(`Unsupported data type ${dtype}`);\n }\n const randGauss = new MPRandGauss(mean, stdDev, dtype, false /* truncated */, seed);\n const res = buffer(shape, dtype);\n for (let i = 0; i < res.values.length; i++) {\n res.values[i] = randGauss.nextValue();\n }\n return res.toTensor();\n}\nexport const randomNormal = /* @__PURE__ */ op({ randomNormal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX25vcm1hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JhbmRvbV9ub3JtYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLEtBQWtCLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQXlCLEVBQ25FLElBQWE7SUFDZixrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUssS0FBa0IsS0FBSyxNQUFNLEVBQUU7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNuRDtJQUNELE1BQU0sU0FBUyxHQUNYLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDdkM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGUsIFJhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbmltcG9ydCB7YnVmZmVyfSBmcm9tICcuL2J1ZmZlcic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge01QUmFuZEdhdXNzfSBmcm9tICcuL3JhbmRfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggdmFsdWVzIHNhbXBsZWQgZnJvbSBhIG5vcm1hbCBkaXN0cmlidXRpb24uXG4gKlxuICogYGBganNcbiAqIHRmLnJhbmRvbU5vcm1hbChbMiwgMl0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKiBAcGFyYW0gbWVhbiBUaGUgbWVhbiBvZiB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbi5cbiAqIEBwYXJhbSBzdGREZXYgVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbi5cbiAqIEBwYXJhbSBkdHlwZSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBvdXRwdXQuXG4gKiBAcGFyYW0gc2VlZCBUaGUgc2VlZCBmb3IgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1JhbmRvbSd9XG4gKi9cbmZ1bmN0aW9uIHJhbmRvbU5vcm1hbF88UiBleHRlbmRzIFJhbms+KFxuICAgIHNoYXBlOiBTaGFwZU1hcFtSXSwgbWVhbiA9IDAsIHN0ZERldiA9IDEsIGR0eXBlPzogJ2Zsb2F0MzInfCdpbnQzMicsXG4gICAgc2VlZD86IG51bWJlcik6IFRlbnNvcjxSPiB7XG4gIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMoc2hhcGUpO1xuICBpZiAoZHR5cGUgIT0gbnVsbCAmJiAoZHR5cGUgYXMgRGF0YVR5cGUpID09PSAnYm9vbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAke2R0eXBlfWApO1xuICB9XG4gIGNvbnN0IHJhbmRHYXVzcyA9XG4gICAgICBuZXcgTVBSYW5kR2F1c3MobWVhbiwgc3RkRGV2LCBkdHlwZSwgZmFsc2UgLyogdHJ1bmNhdGVkICovLCBzZWVkKTtcbiAgY29uc3QgcmVzID0gYnVmZmVyKHNoYXBlLCBkdHlwZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy52YWx1ZXNbaV0gPSByYW5kR2F1c3MubmV4dFZhbHVlKCk7XG4gIH1cbiAgcmV0dXJuIHJlcy50b1RlbnNvcigpO1xufVxuXG5leHBvcnQgY29uc3QgcmFuZG9tTm9ybWFsID0gLyogQF9fUFVSRV9fICovIG9wKHtyYW5kb21Ob3JtYWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { op } from './operation';\nimport { randomNormal } from './random_normal';\n/**\n * Creates a `tf.Tensor` with values sampled from a normal distribution.\n *\n * The generated values will have mean 0 and standard deviation 1.\n *\n * ```js\n * tf.randomStandardNormal([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The data type of the output.\n * @param seed The seed for the random number generator.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomStandardNormal_(shape, dtype, seed) {\n if (dtype != null && dtype === 'bool') {\n throw new Error(`Unsupported data type ${dtype}`);\n }\n return randomNormal(shape, 0, 1, dtype, seed);\n}\nexport const randomStandardNormal = /* @__PURE__ */ op({ randomStandardNormal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX3N0YW5kYXJkX25vcm1hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JhbmRvbV9zdGFuZGFyZF9ub3JtYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLHFCQUFxQixDQUMxQixLQUFrQixFQUFFLEtBQXlCLEVBQUUsSUFBYTtJQUM5RCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUssS0FBa0IsS0FBSyxNQUFNLEVBQUU7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNuRDtJQUNELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLHFCQUFxQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBSYW5rLCBTaGFwZU1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3JhbmRvbU5vcm1hbH0gZnJvbSAnLi9yYW5kb21fbm9ybWFsJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgYHRmLlRlbnNvcmAgd2l0aCB2YWx1ZXMgc2FtcGxlZCBmcm9tIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIHZhbHVlcyB3aWxsIGhhdmUgbWVhbiAwIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gMS5cbiAqXG4gKiBgYGBqc1xuICogdGYucmFuZG9tU3RhbmRhcmROb3JtYWwoWzIsIDJdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNoYXBlIEFuIGFycmF5IG9mIGludGVnZXJzIGRlZmluaW5nIHRoZSBvdXRwdXQgdGVuc29yIHNoYXBlLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dC5cbiAqIEBwYXJhbSBzZWVkIFRoZSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnUmFuZG9tJ31cbiAqL1xuZnVuY3Rpb24gcmFuZG9tU3RhbmRhcmROb3JtYWxfPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBzaGFwZTogU2hhcGVNYXBbUl0sIGR0eXBlPzogJ2Zsb2F0MzInfCdpbnQzMicsIHNlZWQ/OiBudW1iZXIpOiBUZW5zb3I8Uj4ge1xuICBpZiAoZHR5cGUgIT0gbnVsbCAmJiAoZHR5cGUgYXMgRGF0YVR5cGUpID09PSAnYm9vbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAke2R0eXBlfWApO1xuICB9XG4gIHJldHVybiByYW5kb21Ob3JtYWwoc2hhcGUsIDAsIDEsIGR0eXBlLCBzZWVkKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmRvbVN0YW5kYXJkTm9ybWFsID0gLyogQF9fUFVSRV9fICovIG9wKHtyYW5kb21TdGFuZGFyZE5vcm1hbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { buffer } from './buffer';\nimport { op } from './operation';\nimport { UniformRandom } from './rand_util';\n/**\n * Creates a `tf.Tensor` with values sampled from a uniform distribution.\n *\n * The generated values follow a uniform distribution in the range [minval,\n * maxval). The lower bound minval is included in the range, while the upper\n * bound maxval is excluded.\n *\n * ```js\n * tf.randomUniform([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param minval The lower bound on the range of random values to generate.\n * Defaults to 0.\n * @param maxval The upper bound on the range of random values to generate.\n * Defaults to 1.\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n * @param seed An optional int. Defaults to 0. If seed is set to be non-zero,\n * the random number generator is seeded by the given seed. Otherwise, it is\n * seeded by a random seed.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomUniform_(shape, minval = 0, maxval = 1, dtype = 'float32', seed) {\n assertNonNegativeIntegerDimensions(shape);\n const res = buffer(shape, dtype);\n const random = new UniformRandom(minval, maxval, null, seed);\n for (let i = 0; i < res.values.length; i++) {\n res.values[i] = random.nextValue();\n }\n return res.toTensor();\n}\nexport const randomUniform = /* @__PURE__ */ op({ randomUniform_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX3VuaWZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yYW5kb21fdW5pZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFTLGNBQWMsQ0FDbkIsS0FBa0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBa0IsU0FBUyxFQUN2RSxJQUFvQjtJQUN0QixrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUNwQztJQUNELE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtEYXRhVHlwZSwgUmFuaywgU2hhcGVNYXB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9uc30gZnJvbSAnLi4vdXRpbF9iYXNlJztcblxuaW1wb3J0IHtidWZmZXJ9IGZyb20gJy4vYnVmZmVyJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7VW5pZm9ybVJhbmRvbX0gZnJvbSAnLi9yYW5kX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgdGYuVGVuc29yYCB3aXRoIHZhbHVlcyBzYW1wbGVkIGZyb20gYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIHZhbHVlcyBmb2xsb3cgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBpbiB0aGUgcmFuZ2UgW21pbnZhbCxcbiAqIG1heHZhbCkuIFRoZSBsb3dlciBib3VuZCBtaW52YWwgaXMgaW5jbHVkZWQgaW4gdGhlIHJhbmdlLCB3aGlsZSB0aGUgdXBwZXJcbiAqIGJvdW5kIG1heHZhbCBpcyBleGNsdWRlZC5cbiAqXG4gKiBgYGBqc1xuICogdGYucmFuZG9tVW5pZm9ybShbMiwgMl0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKiBAcGFyYW0gbWludmFsIFRoZSBsb3dlciBib3VuZCBvbiB0aGUgcmFuZ2Ugb2YgcmFuZG9tIHZhbHVlcyB0byBnZW5lcmF0ZS5cbiAqICAgRGVmYXVsdHMgdG8gMC5cbiAqIEBwYXJhbSBtYXh2YWwgVGhlIHVwcGVyIGJvdW5kIG9uIHRoZSByYW5nZSBvZiByYW5kb20gdmFsdWVzIHRvIGdlbmVyYXRlLlxuICogICBEZWZhdWx0cyB0byAxLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIERlZmF1bHRzIHRvICdmbG9hdDMyJy5cbiAqIEBwYXJhbSBzZWVkIEFuIG9wdGlvbmFsIGludC4gRGVmYXVsdHMgdG8gMC4gSWYgc2VlZCBpcyBzZXQgdG8gYmUgbm9uLXplcm8sXG4gKiAgIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBpcyBzZWVkZWQgYnkgdGhlIGdpdmVuIHNlZWQuIE90aGVyd2lzZSwgaXQgaXNcbiAqICAgc2VlZGVkIGJ5IGEgcmFuZG9tIHNlZWQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnUmFuZG9tJ31cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVW5pZm9ybV88UiBleHRlbmRzIFJhbms+KFxuICAgIHNoYXBlOiBTaGFwZU1hcFtSXSwgbWludmFsID0gMCwgbWF4dmFsID0gMSwgZHR5cGU6IERhdGFUeXBlID0gJ2Zsb2F0MzInLFxuICAgIHNlZWQ/OiBudW1iZXJ8c3RyaW5nKTogVGVuc29yPFI+IHtcbiAgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG4gIGNvbnN0IHJlcyA9IGJ1ZmZlcihzaGFwZSwgZHR5cGUpO1xuICBjb25zdCByYW5kb20gPSBuZXcgVW5pZm9ybVJhbmRvbShtaW52YWwsIG1heHZhbCwgbnVsbCwgc2VlZCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy52YWx1ZXNbaV0gPSByYW5kb20ubmV4dFZhbHVlKCk7XG4gIH1cbiAgcmV0dXJuIHJlcy50b1RlbnNvcigpO1xufVxuXG5leHBvcnQgY29uc3QgcmFuZG9tVW5pZm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmFuZG9tVW5pZm9ybV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { op } from './operation';\nimport { randomUniform } from './random_uniform';\n/**\n * Creates a `tf.Tensor` with integers sampled from a uniform distribution.\n *\n * The generated values are uniform integers in the range [minval, maxval). The\n * lower bound minval is included in the range, while the upper bound maxval is\n * excluded.\n *\n * ```js\n * tf.randomUniformInt([2, 2], 0, 10).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param minval Inclusive lower bound on the generated integers.\n * @param maxval Exclusive upper bound on the generated integers.\n * @param seed An optional int. Defaults to 0. If seed is set to be non-zero,\n * the random number generator is seeded by the given seed. Otherwise, it is\n * seeded by a random seed.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomUniformInt_(shape, minval, maxval, seed) {\n // TODO(mattsoulanille): Handle optional seed2 input.\n return randomUniform(shape, minval, maxval, 'int32', seed);\n}\nexport const randomUniformInt = /* @__PURE__ */ op({ randomUniformInt_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX3VuaWZvcm1faW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcmFuZG9tX3VuaWZvcm1faW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRS9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDeEIsS0FBa0IsRUFBRSxNQUFjLEVBQUUsTUFBYyxFQUNoRCxJQUFvQjtJQUN0QixxREFBcUQ7SUFDckQsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7UmFuaywgU2hhcGVNYXB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmFuZG9tVW5pZm9ybX0gZnJvbSAnLi9yYW5kb21fdW5pZm9ybSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggaW50ZWdlcnMgc2FtcGxlZCBmcm9tIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uXG4gKlxuICogVGhlIGdlbmVyYXRlZCB2YWx1ZXMgYXJlIHVuaWZvcm0gaW50ZWdlcnMgaW4gdGhlIHJhbmdlIFttaW52YWwsIG1heHZhbCkuIFRoZVxuICogbG93ZXIgYm91bmQgbWludmFsIGlzIGluY2x1ZGVkIGluIHRoZSByYW5nZSwgd2hpbGUgdGhlIHVwcGVyIGJvdW5kIG1heHZhbCBpc1xuICogZXhjbHVkZWQuXG4gKlxuICogYGBganNcbiAqIHRmLnJhbmRvbVVuaWZvcm1JbnQoWzIsIDJdLCAwLCAxMCkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSBtaW52YWwgSW5jbHVzaXZlIGxvd2VyIGJvdW5kIG9uIHRoZSBnZW5lcmF0ZWQgaW50ZWdlcnMuXG4gKiBAcGFyYW0gbWF4dmFsIEV4Y2x1c2l2ZSB1cHBlciBib3VuZCBvbiB0aGUgZ2VuZXJhdGVkIGludGVnZXJzLlxuICogQHBhcmFtIHNlZWQgQW4gb3B0aW9uYWwgaW50LiBEZWZhdWx0cyB0byAwLiBJZiBzZWVkIGlzIHNldCB0byBiZSBub24temVybyxcbiAqICAgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGlzIHNlZWRlZCBieSB0aGUgZ2l2ZW4gc2VlZC4gT3RoZXJ3aXNlLCBpdCBpc1xuICogICBzZWVkZWQgYnkgYSByYW5kb20gc2VlZC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdSYW5kb20nfVxuICovXG5mdW5jdGlvbiByYW5kb21Vbmlmb3JtSW50XzxSIGV4dGVuZHMgUmFuaz4oXG4gIHNoYXBlOiBTaGFwZU1hcFtSXSwgbWludmFsOiBudW1iZXIsIG1heHZhbDogbnVtYmVyLFxuICAgIHNlZWQ/OiBudW1iZXJ8c3RyaW5nKTogVGVuc29yPFI+IHtcbiAgLy8gVE9ETyhtYXR0c291bGFuaWxsZSk6IEhhbmRsZSBvcHRpb25hbCBzZWVkMiBpbnB1dC5cbiAgcmV0dXJuIHJhbmRvbVVuaWZvcm0oc2hhcGUsIG1pbnZhbCwgbWF4dmFsLCAnaW50MzInLCBzZWVkKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmRvbVVuaWZvcm1JbnQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3JhbmRvbVVuaWZvcm1JbnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Range } from '../kernel_names';\n/**\n * Creates a new `tf.Tensor1D` filled with the numbers in the range provided.\n *\n * The tensor is a half-open interval meaning it includes start, but\n * excludes stop. Decrementing ranges and negative step values are also\n * supported.\n *\n *\n * ```js\n * tf.range(0, 9, 2).print();\n * ```\n *\n * @param start An integer start value\n * @param stop An integer stop value\n * @param step An integer increment (will default to 1 or -1)\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function range(start, stop, step = 1, dtype = 'float32') {\n if (step === 0) {\n throw new Error('Cannot have a step of zero');\n }\n const attrs = { start, stop, step, dtype };\n return ENGINE.runKernel(Range, {} /* inputs */, attrs);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FDakIsS0FBYSxFQUFFLElBQVksRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUNyQyxRQUEyQixTQUFTO0lBQ3RDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztLQUMvQztJQUVELE1BQU0sS0FBSyxHQUFlLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFFckQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxFQUMxQyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JhbmdlLCBSYW5nZUF0dHJzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjFEfSBmcm9tICcuLi90ZW5zb3InO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYHRmLlRlbnNvcjFEYCBmaWxsZWQgd2l0aCB0aGUgbnVtYmVycyBpbiB0aGUgcmFuZ2UgcHJvdmlkZWQuXG4gKlxuICogVGhlIHRlbnNvciBpcyBhIGhhbGYtb3BlbiBpbnRlcnZhbCBtZWFuaW5nIGl0IGluY2x1ZGVzIHN0YXJ0LCBidXRcbiAqIGV4Y2x1ZGVzIHN0b3AuIERlY3JlbWVudGluZyByYW5nZXMgYW5kIG5lZ2F0aXZlIHN0ZXAgdmFsdWVzIGFyZSBhbHNvXG4gKiBzdXBwb3J0ZWQuXG4gKlxuICpcbiAqIGBgYGpzXG4gKiB0Zi5yYW5nZSgwLCA5LCAyKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0YXJ0IEFuIGludGVnZXIgc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBzdG9wIEFuIGludGVnZXIgc3RvcCB2YWx1ZVxuICogQHBhcmFtIHN0ZXAgQW4gaW50ZWdlciBpbmNyZW1lbnQgKHdpbGwgZGVmYXVsdCB0byAxIG9yIC0xKVxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIERlZmF1bHRzIHRvICdmbG9hdDMyJy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5nZShcbiAgICBzdGFydDogbnVtYmVyLCBzdG9wOiBudW1iZXIsIHN0ZXAgPSAxLFxuICAgIGR0eXBlOiAnZmxvYXQzMid8J2ludDMyJyA9ICdmbG9hdDMyJyk6IFRlbnNvcjFEIHtcbiAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBoYXZlIGEgc3RlcCBvZiB6ZXJvJyk7XG4gIH1cblxuICBjb25zdCBhdHRyczogUmFuZ2VBdHRycyA9IHtzdGFydCwgc3RvcCwgc3RlcCwgZHR5cGV9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFJhbmdlLCB7fSAvKiBpbnB1dHMgKi8sXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Reciprocal } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes reciprocal of x element-wise: `1 / x`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, 2]);\n *\n * x.reciprocal().print(); // or tf.reciprocal(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction reciprocal_(x) {\n const $x = convertToTensor(x, 'x', 'reciprocal');\n const inputs = { x: $x };\n return ENGINE.runKernel(Reciprocal, inputs);\n}\nexport const reciprocal = /* @__PURE__ */ op({ reciprocal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXByb2NhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JlY2lwcm9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsVUFBVSxFQUFtQixNQUFNLGlCQUFpQixDQUFDO0FBRzdELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLENBQWU7SUFDcEQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFakQsTUFBTSxNQUFNLEdBQXFCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtSZWNpcHJvY2FsLCBSZWNpcHJvY2FsSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHJlY2lwcm9jYWwgb2YgeCBlbGVtZW50LXdpc2U6IGAxIC8geGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCAxLCAyXSk7XG4gKlxuICogeC5yZWNpcHJvY2FsKCkucHJpbnQoKTsgIC8vIG9yIHRmLnJlY2lwcm9jYWwoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gcmVjaXByb2NhbF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3JlY2lwcm9jYWwnKTtcblxuICBjb25zdCBpbnB1dHM6IFJlY2lwcm9jYWxJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChSZWNpcHJvY2FsLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgcmVjaXByb2NhbCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmVjaXByb2NhbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Relu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes rectified linear element-wise: `max(x, 0)`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.relu().print(); // or tf.relu(x)\n * ```\n * @param x The input tensor. If the dtype is `bool`, the output dtype will be\n * `int32`.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction relu_(x) {\n const $x = convertToTensor(x, 'x', 'relu');\n const inputs = { x: $x };\n return ENGINE.runKernel(Relu, inputs);\n}\nexport const relu = /* @__PURE__ */ op({ relu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxLQUFLLENBQW1CLENBQWU7SUFDOUMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JlbHUsIFJlbHVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgcmVjdGlmaWVkIGxpbmVhciBlbGVtZW50LXdpc2U6IGBtYXgoeCwgMClgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgNF0pO1xuICpcbiAqIHgucmVsdSgpLnByaW50KCk7ICAvLyBvciB0Zi5yZWx1KHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuIElmIHRoZSBkdHlwZSBpcyBgYm9vbGAsIHRoZSBvdXRwdXQgZHR5cGUgd2lsbCBiZVxuICogICAgIGBpbnQzMmAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHJlbHVfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZWx1Jyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSZWx1SW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChSZWx1LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCByZWx1ID0gLyogQF9fUFVSRV9fICovIG9wKHtyZWx1X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Relu6 } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes rectified linear 6 element-wise: `min(max(x, 0), 6)`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 8]);\n *\n * x.relu6().print(); // or tf.relu6(x)\n * ```\n * @param x The input tensor. If the dtype is `bool`, the output dtype will be\n * `int32`.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction relu6_(x) {\n const $x = convertToTensor(x, 'x', 'relu6');\n const inputs = { x: $x };\n return ENGINE.runKernel(Relu6, inputs);\n}\nexport const relu6 = /* @__PURE__ */ op({ relu6_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsdTYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yZWx1Ni50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JlbHU2LCBSZWx1NklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyByZWN0aWZpZWQgbGluZWFyIDYgZWxlbWVudC13aXNlOiBgbWluKG1heCh4LCAwKSwgNilgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgOF0pO1xuICpcbiAqIHgucmVsdTYoKS5wcmludCgpOyAgLy8gb3IgdGYucmVsdTYoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci4gSWYgdGhlIGR0eXBlIGlzIGBib29sYCwgdGhlIG91dHB1dCBkdHlwZSB3aWxsIGJlXG4gKiAgICAgYGludDMyYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gcmVsdTZfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZWx1NicpO1xuXG4gIGNvbnN0IGlucHV0czogUmVsdTZJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFJlbHU2LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCByZWx1NiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmVsdTZffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Reverse } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Reverses a `tf.Tensor` along a specified axis.\n *\n * Also available are stricter rank-specific methods that assert that `x` is\n * of the given rank:\n * - `tf.reverse1d`\n * - `tf.reverse2d`\n * - `tf.reverse3d`\n * - `tf.reverse4d`\n *\n * Except `tf.reverse1d` (which does not have axis param), all methods have\n * same signature as this method.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.reverse().print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.reverse(axis).print();\n * ```\n * @param x The input tensor to be reversed.\n * @param axis The set of dimensions to reverse. Must be in the\n * range [-rank(x), rank(x)). Defaults to all axes.\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction reverse_(x, axis) {\n const $x = convertToTensor(x, 'x', 'reverse');\n const inputs = { x: $x };\n const attrs = { dims: axis };\n return ENGINE.runKernel(Reverse, inputs, attrs);\n}\nexport const reverse = /* @__PURE__ */ op({ reverse_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUE4QixNQUFNLGlCQUFpQixDQUFDO0FBSXJFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFlLEVBQUUsSUFBc0I7SUFDekMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3RDLE1BQU0sS0FBSyxHQUFpQixFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE9BQU8sRUFBRSxNQUFtQyxFQUM1QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JldmVyc2UsIFJldmVyc2VBdHRycywgUmV2ZXJzZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldmVyc2VzIGEgYHRmLlRlbnNvcmAgYWxvbmcgYSBzcGVjaWZpZWQgYXhpcy5cbiAqXG4gKiBBbHNvIGF2YWlsYWJsZSBhcmUgc3RyaWN0ZXIgcmFuay1zcGVjaWZpYyBtZXRob2RzIHRoYXQgYXNzZXJ0IHRoYXQgYHhgIGlzXG4gKiBvZiB0aGUgZ2l2ZW4gcmFuazpcbiAqICAgLSBgdGYucmV2ZXJzZTFkYFxuICogICAtIGB0Zi5yZXZlcnNlMmRgXG4gKiAgIC0gYHRmLnJldmVyc2UzZGBcbiAqICAgLSBgdGYucmV2ZXJzZTRkYFxuICpcbiAqIEV4Y2VwdCBgdGYucmV2ZXJzZTFkYCAod2hpY2ggZG9lcyBub3QgaGF2ZSBheGlzIHBhcmFtKSwgYWxsIG1ldGhvZHMgaGF2ZVxuICogc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICpcbiAqIHgucmV2ZXJzZSgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjJkKFsxLCAyLCAzLCA0XSwgWzIsIDJdKTtcbiAqXG4gKiBjb25zdCBheGlzID0gMTtcbiAqIHgucmV2ZXJzZShheGlzKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIHRvIGJlIHJldmVyc2VkLlxuICogQHBhcmFtIGF4aXMgVGhlIHNldCBvZiBkaW1lbnNpb25zIHRvIHJldmVyc2UuIE11c3QgYmUgaW4gdGhlXG4gKiAgICAgcmFuZ2UgWy1yYW5rKHgpLCByYW5rKHgpKS4gRGVmYXVsdHMgdG8gYWxsIGF4ZXMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIHJldmVyc2VfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgYXhpcz86IG51bWJlcnxudW1iZXJbXSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZXZlcnNlJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSZXZlcnNlSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFJldmVyc2VBdHRycyA9IHtkaW1zOiBheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFJldmVyc2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmV2ZXJzZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reverse } from './reverse';\n/**\n * Reverses a `tf.Tensor1D`.\n *\n * @param x The input tensor.\n */\nfunction reverse1d_(x) {\n const $x = convertToTensor(x, 'x', 'reverse');\n util.assert($x.rank === 1, () => `Error in reverse1D: x must be rank 1 but got rank ${$x.rank}.`);\n return reverse($x, 0);\n}\nexport const reverse1d = /* @__PURE__ */ op({ reverse1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV8xZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2VfMWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsQ0FBc0I7SUFDeEMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDM0UsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmV2ZXJzZX0gZnJvbSAnLi9yZXZlcnNlJztcblxuLyoqXG4gKiBSZXZlcnNlcyBhIGB0Zi5UZW5zb3IxRGAuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqL1xuZnVuY3Rpb24gcmV2ZXJzZTFkXyh4OiBUZW5zb3IxRHxUZW5zb3JMaWtlKTogVGVuc29yMUQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZXZlcnNlJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gMSxcbiAgICAgICgpID0+IGBFcnJvciBpbiByZXZlcnNlMUQ6IHggbXVzdCBiZSByYW5rIDEgYnV0IGdvdCByYW5rICR7JHgucmFua30uYCk7XG4gIHJldHVybiByZXZlcnNlKCR4LCAwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJldmVyc2UxZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmV2ZXJzZTFkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reverse } from './reverse';\n/**\n * Reverses a `tf.Tensor2D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n * range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse2d_(x, axis) {\n const $x = convertToTensor(x, 'x', 'reverse');\n util.assert($x.rank === 2, () => `Error in reverse2D: x must be rank 2 but got rank ${$x.rank}.`);\n return reverse($x, axis);\n}\nexport const reverse2d = /* @__PURE__ */ op({ reverse2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV8yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2VfMmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxDQUFzQixFQUFFLElBQXNCO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQUMscURBQXFELEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjJEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3JldmVyc2V9IGZyb20gJy4vcmV2ZXJzZSc7XG5cbi8qKlxuICogUmV2ZXJzZXMgYSBgdGYuVGVuc29yMkRgIGFsb25nIGEgc3BlY2lmaWVkIGF4aXMuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBheGlzIFRoZSBzZXQgb2YgZGltZW5zaW9ucyB0byByZXZlcnNlLiBNdXN0IGJlIGluIHRoZVxuICogICAgIHJhbmdlIFstcmFuayh4KSwgcmFuayh4KSkuIERlZmF1bHRzIHRvIGFsbCBheGVzLlxuICovXG5mdW5jdGlvbiByZXZlcnNlMmRfKHg6IFRlbnNvcjJEfFRlbnNvckxpa2UsIGF4aXM/OiBudW1iZXJ8bnVtYmVyW10pOiBUZW5zb3IyRCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3JldmVyc2UnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID09PSAyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJldmVyc2UyRDogeCBtdXN0IGJlIHJhbmsgMiBidXQgZ290IHJhbmsgJHskeC5yYW5rfS5gKTtcbiAgcmV0dXJuIHJldmVyc2UoJHgsIGF4aXMpO1xufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZTJkID0gLyogQF9fUFVSRV9fICovIG9wKHtyZXZlcnNlMmRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reverse } from './reverse';\n/**\n * Reverses a `tf.Tensor3D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n * range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse3d_(x, axis) {\n const $x = convertToTensor(x, 'x', 'reverse');\n util.assert($x.rank === 3, () => `Error in reverse3D: x must be rank 3 but got rank ${$x.rank}.`);\n return reverse($x, axis);\n}\nexport const reverse3d = /* @__PURE__ */ op({ reverse3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV8zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2VfM2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxDQUFzQixFQUFFLElBQXNCO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQUMscURBQXFELEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjNEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3JldmVyc2V9IGZyb20gJy4vcmV2ZXJzZSc7XG5cbi8qKlxuICogUmV2ZXJzZXMgYSBgdGYuVGVuc29yM0RgIGFsb25nIGEgc3BlY2lmaWVkIGF4aXMuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBheGlzIFRoZSBzZXQgb2YgZGltZW5zaW9ucyB0byByZXZlcnNlLiBNdXN0IGJlIGluIHRoZVxuICogICAgIHJhbmdlIFstcmFuayh4KSwgcmFuayh4KSkuIERlZmF1bHRzIHRvIGFsbCBheGVzLlxuICovXG5mdW5jdGlvbiByZXZlcnNlM2RfKHg6IFRlbnNvcjNEfFRlbnNvckxpa2UsIGF4aXM/OiBudW1iZXJ8bnVtYmVyW10pOiBUZW5zb3IzRCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3JldmVyc2UnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID09PSAzLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJldmVyc2UzRDogeCBtdXN0IGJlIHJhbmsgMyBidXQgZ290IHJhbmsgJHskeC5yYW5rfS5gKTtcbiAgcmV0dXJuIHJldmVyc2UoJHgsIGF4aXMpO1xufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZTNkID0gLyogQF9fUFVSRV9fICovIG9wKHtyZXZlcnNlM2RffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reverse } from './reverse';\n/**\n * Reverses a `tf.Tensor4D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n * range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse4d_(x, axis) {\n const $x = convertToTensor(x, 'x', 'reverse');\n util.assert($x.rank === 4, () => `Error in reverse4D: x must be rank 4 but got rank ${$x.rank}.`);\n return reverse($x, axis);\n}\nexport const reverse4d = /* @__PURE__ */ op({ reverse4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV80ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2VfNGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxDQUFzQixFQUFFLElBQXNCO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQUMscURBQXFELEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3JldmVyc2V9IGZyb20gJy4vcmV2ZXJzZSc7XG5cbi8qKlxuICogUmV2ZXJzZXMgYSBgdGYuVGVuc29yNERgIGFsb25nIGEgc3BlY2lmaWVkIGF4aXMuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBheGlzIFRoZSBzZXQgb2YgZGltZW5zaW9ucyB0byByZXZlcnNlLiBNdXN0IGJlIGluIHRoZVxuICogICAgIHJhbmdlIFstcmFuayh4KSwgcmFuayh4KSkuIERlZmF1bHRzIHRvIGFsbCBheGVzLlxuICovXG5mdW5jdGlvbiByZXZlcnNlNGRfKHg6IFRlbnNvcjREfFRlbnNvckxpa2UsIGF4aXM/OiBudW1iZXJ8bnVtYmVyW10pOiBUZW5zb3I0RCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3JldmVyc2UnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJldmVyc2U0RDogeCBtdXN0IGJlIHJhbmsgNCBidXQgZ290IHJhbmsgJHskeC5yYW5rfS5gKTtcbiAgcmV0dXJuIHJldmVyc2UoJHgsIGF4aXMpO1xufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZTRkID0gLyogQF9fUFVSRV9fICovIG9wKHtyZXZlcnNlNGRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Round } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes round of input `tf.Tensor` element-wise: `round(x)`.\n * It implements banker's rounding.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.round().print(); // or tf.round(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction round_(x) {\n const $x = convertToTensor(x, 'x', 'round');\n const inputs = { x: $x };\n return ENGINE.runKernel(Round, inputs);\n}\nexport const round = /* @__PURE__ */ op({ round_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JvdW5kLCBSb3VuZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyByb3VuZCBvZiBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGByb3VuZCh4KWAuXG4gKiBJdCBpbXBsZW1lbnRzIGJhbmtlcidzIHJvdW5kaW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy42LCAxLjEsIC0zLjNdKTtcbiAqXG4gKiB4LnJvdW5kKCkucHJpbnQoKTsgIC8vIG9yIHRmLnJvdW5kKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHJvdW5kXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAncm91bmQnKTtcbiAgY29uc3QgaW5wdXRzOiBSb3VuZElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUm91bmQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJvdW5kID0gLyogQF9fUFVSRV9fICovIG9wKHtyb3VuZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Rsqrt } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes reciprocal of square root of the input `tf.Tensor` element-wise:\n * `y = 1 / sqrt(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 4, -1]);\n *\n * x.rsqrt().print(); // or tf.rsqrt(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction rsqrt_(x) {\n const $x = convertToTensor(x, 'x', 'rsqrt', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Rsqrt, inputs);\n}\nexport const rsqrt = /* @__PURE__ */ op({ rsqrt_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnNxcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yc3FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdkQsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXBDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtSc3FydCwgUnNxcnRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgcmVjaXByb2NhbCBvZiBzcXVhcmUgcm9vdCBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOlxuICogYHkgPSAxIC8gc3FydCh4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCA0LCAtMV0pO1xuICpcbiAqIHgucnNxcnQoKS5wcmludCgpOyAgLy8gb3IgdGYucnNxcnQoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gcnNxcnRfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyc3FydCcsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSc3FydElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUnNxcnQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCByc3FydCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cnNxcnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Selu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes scaled exponential linear element-wise.\n *\n * `x < 0 ? scale * alpha * (exp(x) - 1) : scale * x`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.selu().print(); // or tf.selu(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction selu_(x) {\n const $x = convertToTensor(x, 'x', 'selu');\n const inputs = { x: $x };\n return ENGINE.runKernel(Selu, inputs);\n}\nexport const selu = /* @__PURE__ */ op({ selu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsS0FBSyxDQUFtQixDQUFlO0lBQzlDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRW5DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTZWx1LCBTZWx1SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHNjYWxlZCBleHBvbmVudGlhbCBsaW5lYXIgZWxlbWVudC13aXNlLlxuICpcbiAqIGB4IDwgMCA/IHNjYWxlICogYWxwaGEgKiAoZXhwKHgpIC0gMSkgOiBzY2FsZSAqIHhgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbLTEsIDIsIC0zLCA0XSk7XG4gKlxuICogeC5zZWx1KCkucHJpbnQoKTsgIC8vIG9yIHRmLnNlbHUoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gc2VsdV88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3NlbHUnKTtcblxuICBjb25zdCBpbnB1dHM6IFNlbHVJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNlbHUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNlbHUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NlbHVffSk7XG4iXX0=","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { conv2d } from './conv2d';\nimport { depthwiseConv2d } from './depthwise_conv2d';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * 2-D convolution with separable filters.\n *\n * Performs a depthwise convolution that acts separately on channels followed\n * by a pointwise convolution that mixes channels. Note that this is\n * separability between dimensions [1, 2] and 3, not spatial separability\n * between dimensions 1 and 2.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/separable_conv2d](\n * https://www.tensorflow.org/api_docs/python/tf/nn/separable_conv2d)\n * for more details.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param depthwiseFilter The depthwise filter tensor, rank 4, of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]`. This is\n * the filter used in the first step.\n * @param pointwiseFilter The pointwise filter tensor, rank 4, of shape\n * `[1, 1, inChannels * channelMultiplier, outChannels]`. This is\n * the filter used in the second step.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels]. Only \"NHWC\" is currently supported.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction separableConv2d_(x, depthwiseFilter, pointwiseFilter, strides, pad, dilation = [1, 1], dataFormat = 'NHWC') {\n const $x = convertToTensor(x, 'x', 'separableConv2d');\n const $depthwiseFilter = convertToTensor(depthwiseFilter, 'depthwiseFilter', 'separableConv2d');\n const $pointwiseFilter = convertToTensor(pointwiseFilter, 'pointwiseFilter', 'separableConv2d');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n if (dataFormat === 'NCHW') {\n throw new Error('separableConv2d currently does not support dataFormat NCHW; only ' +\n 'NHWC is supported');\n }\n util.assert(x4D.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got ` +\n `rank ${x4D.rank}.`);\n util.assert($depthwiseFilter.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but ` +\n `got rank ${$depthwiseFilter.rank}.`);\n util.assert($pointwiseFilter.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but ` +\n `got rank ${$depthwiseFilter.rank}.`);\n util.assert($pointwiseFilter.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter ` +\n ` must be 1, but got ${$pointwiseFilter.shape[0]}.`);\n util.assert($pointwiseFilter.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise ` +\n `filter must be 1, but got ${$pointwiseFilter.shape[1]}.`);\n const inChannels = $depthwiseFilter.shape[2];\n const channelMultiplier = $depthwiseFilter.shape[3];\n util.assert($pointwiseFilter.shape[2] === inChannels * channelMultiplier, () => `Error in separableConv2d: the third dimension of pointwise filter ` +\n `must be ${inChannels * channelMultiplier}, ` +\n `but got ${$pointwiseFilter.shape[2]}.`);\n const depthwise = depthwiseConv2d(x4D, $depthwiseFilter, strides, pad, dataFormat, dilation);\n const pointwiseStride = 1;\n const res = conv2d(depthwise, $pointwiseFilter, pointwiseStride, 'valid', dataFormat);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const separableConv2d = /* @__PURE__ */ op({ separableConv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VwYXJhYmxlX2NvbnYyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NlcGFyYWJsZV9jb252MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDckIsQ0FBZSxFQUFFLGVBQW9DLEVBQ3JELGVBQW9DLEVBQUUsT0FBZ0MsRUFDdEUsR0FBbUIsRUFBRSxXQUFvQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDL0QsYUFBNEIsTUFBTTtJQUNwQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sZ0JBQWdCLEdBQ2xCLGVBQWUsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMzRSxNQUFNLGdCQUFnQixHQUNsQixlQUFlLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFM0UsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pC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IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7Y29udjJkfSBmcm9tICcuL2NvbnYyZCc7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZH0gZnJvbSAnLi9kZXB0aHdpc2VfY29udjJkJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiAyLUQgY29udm9sdXRpb24gd2l0aCBzZXBhcmFibGUgZmlsdGVycy5cbiAqXG4gKiBQZXJmb3JtcyBhIGRlcHRod2lzZSBjb252b2x1dGlvbiB0aGF0IGFjdHMgc2VwYXJhdGVseSBvbiBjaGFubmVscyBmb2xsb3dlZFxuICogYnkgYSBwb2ludHdpc2UgY29udm9sdXRpb24gdGhhdCBtaXhlcyBjaGFubmVscy4gTm90ZSB0aGF0IHRoaXMgaXNcbiAqIHNlcGFyYWJpbGl0eSBiZXR3ZWVuIGRpbWVuc2lvbnMgWzEsIDJdIGFuZCAzLCBub3Qgc3BhdGlhbCBzZXBhcmFiaWxpdHlcbiAqIGJldHdlZW4gZGltZW5zaW9ucyAxIGFuZCAyLlxuICpcbiAqIFNlZVxuICogW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9zZXBhcmFibGVfY29udjJkXShcbiAqICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vc2VwYXJhYmxlX2NvbnYyZClcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpc1xuICogYXNzdW1lZC5cbiAqIEBwYXJhbSBkZXB0aHdpc2VGaWx0ZXIgVGhlIGRlcHRod2lzZSBmaWx0ZXIgdGVuc29yLCByYW5rIDQsIG9mIHNoYXBlXG4gKiAgICAgYFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBpbkNoYW5uZWxzLCBjaGFubmVsTXVsdGlwbGllcl1gLiBUaGlzIGlzXG4gKiAgICAgdGhlIGZpbHRlciB1c2VkIGluIHRoZSBmaXJzdCBzdGVwLlxuICogQHBhcmFtIHBvaW50d2lzZUZpbHRlciBUaGUgcG9pbnR3aXNlIGZpbHRlciB0ZW5zb3IsIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgICBgWzEsIDEsIGluQ2hhbm5lbHMgKiBjaGFubmVsTXVsdGlwbGllciwgb3V0Q2hhbm5lbHNdYC4gVGhpcyBpc1xuICogICAgIHRoZSBmaWx0ZXIgdXNlZCBpbiB0aGUgc2Vjb25kIHN0ZXAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlSGVpZ2h0LFxuICogc3RyaWRlV2lkdGhdYC4gSWYgc3RyaWRlcyBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYHN0cmlkZUhlaWdodCA9PVxuICogc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobS5cbiAqICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gYXRyb3VzIGNvbnZvbHV0aW9uLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYHJhdGVgIGlzIGEgc2luZ2xlXG4gKiAgICAgbnVtYmVyLCB0aGVuIGBkaWxhdGlvbkhlaWdodCA9PSBkaWxhdGlvbldpZHRoYC4gSWYgaXQgaXMgZ3JlYXRlciB0aGFuXG4gKiAgICAgMSwgdGhlbiBhbGwgdmFsdWVzIG9mIGBzdHJpZGVzYCBtdXN0IGJlIDEuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkhXQ1wiLCBcIk5DSFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5IV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS4gT25seSBcIk5IV0NcIiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gc2VwYXJhYmxlQ29udjJkXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZGVwdGh3aXNlRmlsdGVyOiBUZW5zb3I0RHxUZW5zb3JMaWtlLFxuICAgIHBvaW50d2lzZUZpbHRlcjogVGVuc29yNER8VGVuc29yTGlrZSwgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJywgZGlsYXRpb246IFtudW1iZXIsIG51bWJlcl18bnVtYmVyID0gWzEsIDFdLFxuICAgIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVycgPSAnTkhXQycpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2VwYXJhYmxlQ29udjJkJyk7XG4gIGNvbnN0ICRkZXB0aHdpc2VGaWx0ZXIgPVxuICAgICAgY29udmVydFRvVGVuc29yKGRlcHRod2lzZUZpbHRlciwgJ2RlcHRod2lzZUZpbHRlcicsICdzZXBhcmFibGVDb252MmQnKTtcbiAgY29uc3QgJHBvaW50d2lzZUZpbHRlciA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IocG9pbnR3aXNlRmlsdGVyLCAncG9pbnR3aXNlRmlsdGVyJywgJ3NlcGFyYWJsZUNvbnYyZCcpO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuICBpZiAoJHgucmFuayA9PT0gMykge1xuICAgIHJlc2hhcGVkVG80RCA9IHRydWU7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgfVxuXG4gIGlmIChkYXRhRm9ybWF0ID09PSAnTkNIVycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdzZXBhcmFibGVDb252MmQgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgZGF0YUZvcm1hdCBOQ0hXOyBvbmx5ICcgK1xuICAgICAgICAnTkhXQyBpcyBzdXBwb3J0ZWQnKTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeDRELnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2VwYXJhYmxlQ29udjJkOiBpbnB1dCBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgcmFuayAke3g0RC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkZGVwdGh3aXNlRmlsdGVyLnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2VwYXJhYmxlQ29udjJkOiBkZXB0aHdpc2UgZmlsdGVyIG11c3QgYmUgcmFuayA0LCBidXQgYCArXG4gICAgICAgICAgYGdvdCByYW5rICR7JGRlcHRod2lzZUZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkcG9pbnR3aXNlRmlsdGVyLnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2VwYXJhYmxlQ29udjJkOiBwb2ludHdpc2UgZmlsdGVyIG11c3QgYmUgcmFuayA0LCBidXQgYCArXG4gICAgICAgICAgYGdvdCByYW5rICR7JGRlcHRod2lzZUZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkcG9pbnR3aXNlRmlsdGVyLnNoYXBlWzBdID09PSAxLFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgRXJyb3IgaW4gc2VwYXJhYmxlQ29udjJkOiB0aGUgZmlyc3QgZGltZW5zaW9uIG9mIHBvaW50d2lzZSBmaWx0ZXIgYCArXG4gICAgICAgICAgYCBtdXN0IGJlIDEsIGJ1dCBnb3QgJHskcG9pbnR3aXNlRmlsdGVyLnNoYXBlWzBdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkcG9pbnR3aXNlRmlsdGVyLnNoYXBlWzFdID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHNlcGFyYWJsZUNvbnYyZDogdGhlIHNlY29uZCBkaW1lbnNpb24gb2YgcG9pbnR3aXNlIGAgK1xuICAgICAgICAgIGBmaWx0ZXIgbXVzdCBiZSAxLCBidXQgZ290ICR7JHBvaW50d2lzZUZpbHRlci5zaGFwZVsxXX0uYCk7XG5cbiAgY29uc3QgaW5DaGFubmVscyA9ICRkZXB0aHdpc2VGaWx0ZXIuc2hhcGVbMl07XG4gIGNvbnN0IGNoYW5uZWxNdWx0aXBsaWVyID0gJGRlcHRod2lzZUZpbHRlci5zaGFwZVszXTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkcG9pbnR3aXNlRmlsdGVyLnNoYXBlWzJdID09PSBpbkNoYW5uZWxzICogY2hhbm5lbE11bHRpcGxpZXIsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBFcnJvciBpbiBzZXBhcmFibGVDb252MmQ6IHRoZSB0aGlyZCBkaW1lbnNpb24gb2YgcG9pbnR3aXNlIGZpbHRlciBgICtcbiAgICAgICAgICBgbXVzdCBiZSAke2luQ2hhbm5lbHMgKiBjaGFubmVsTXVsdGlwbGllcn0sIGAgK1xuICAgICAgICAgIGBidXQgZ290ICR7JHBvaW50d2lzZUZpbHRlci5zaGFwZVsyXX0uYCk7XG5cbiAgY29uc3QgZGVwdGh3aXNlID0gZGVwdGh3aXNlQ29udjJkKFxuICAgICAgeDRELCAkZGVwdGh3aXNlRmlsdGVyLCBzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9uKTtcbiAgY29uc3QgcG9pbnR3aXNlU3RyaWRlID0gMTtcbiAgY29uc3QgcmVzID1cbiAgICAgIGNvbnYyZChkZXB0aHdpc2UsICRwb2ludHdpc2VGaWx0ZXIsIHBvaW50d2lzZVN0cmlkZSwgJ3ZhbGlkJywgZGF0YUZvcm1hdCk7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG4gIHJldHVybiByZXMgYXMgVDtcbn1cblxuZXhwb3J0IGNvbnN0IHNlcGFyYWJsZUNvbnYyZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2VwYXJhYmxlQ29udjJkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TensorBuffer } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\n/**\n * Computes the difference between two lists of numbers.\n *\n * Given a Tensor `x` and a Tensor `y`, this operation returns a Tensor `out`\n * that represents all values that are in `x` but not in `y`. The returned\n * Tensor `out` is sorted in the same order that the numbers appear in `x`\n * (duplicates are preserved). This operation also returns a Tensor indices that\n * represents the position of each out element in `x`. In other words:\n *\n * `out[i] = x[idx[i]] for i in [0, 1, ..., out.length - 1]`\n *\n * ```js\n * const x = [1, 2, 3, 4, 5, 6];\n * const y = [1, 3, 5];\n *\n * const [out, indices] = await tf.setdiff1dAsync(x, y);\n * out.print(); // [2, 4, 6]\n * indices.print(); // [1, 3, 5]\n * ```\n *\n * @param x 1-D Tensor. Values to keep.\n * @param y 1-D Tensor. Must have the same type as x. Values to exclude in the\n * output.\n * @returns Promise of Tensor tuple [out, indices].\n * out: Tensor with the same type as x.\n * indices: A Tensor of type int32.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nasync function setdiff1dAsync_(x, y) {\n const $x = convertToTensor(x, 'x', 'setdiff1d');\n const $y = convertToTensor(y, 'y', 'setdiff1d');\n util.assert($x.dtype === $y.dtype, () => `x and y should have the same dtype, but got x (${$x.dtype}) and y (${$y.dtype}).`);\n util.assert($x.rank === 1, () => `x should be 1D tensor, but got x (${$x.shape}).`);\n util.assert($y.rank === 1, () => `y should be 1D tensor, but got y (${$y.shape}).`);\n const xVals = await $x.data();\n const yVals = await $y.data();\n const ySet = new Set(yVals);\n let outputSize = 0;\n for (let i = 0; i < xVals.length; i++) {\n if (!ySet.has(xVals[i])) {\n outputSize++;\n }\n }\n const buffer = new TensorBuffer([outputSize], $x.dtype);\n const indices = new TensorBuffer([outputSize], 'int32');\n for (let i = 0, p = 0; i < xVals.length; i++) {\n if (!ySet.has(xVals[i])) {\n buffer.values[p] = xVals[i];\n indices.values[p] = i;\n p++;\n }\n }\n return [buffer.toTensor(), indices.toTensor()];\n}\nexport const setdiff1dAsync = setdiff1dAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0ZGlmZjFkX2FzeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2V0ZGlmZjFkX2FzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBUyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsS0FBSyxVQUFVLGVBQWUsQ0FDMUIsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVoRCxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEtBQUssRUFDckIsR0FBRyxFQUFFLENBQUMsa0RBQ0YsRUFBRSxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUUxQyxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUU1RSxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUU1RSxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUM7U0FDZDtLQUNGO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsRUFBRSxDQUFDO1NBQ0w7S0FDRjtJQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvciwgVGVuc29yQnVmZmVyfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gbGlzdHMgb2YgbnVtYmVycy5cbiAqXG4gKiBHaXZlbiBhIFRlbnNvciBgeGAgYW5kIGEgVGVuc29yIGB5YCwgdGhpcyBvcGVyYXRpb24gcmV0dXJucyBhIFRlbnNvciBgb3V0YFxuICogdGhhdCByZXByZXNlbnRzIGFsbCB2YWx1ZXMgdGhhdCBhcmUgaW4gYHhgIGJ1dCBub3QgaW4gYHlgLiBUaGUgcmV0dXJuZWRcbiAqIFRlbnNvciBgb3V0YCBpcyBzb3J0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGUgbnVtYmVycyBhcHBlYXIgaW4gYHhgXG4gKiAoZHVwbGljYXRlcyBhcmUgcHJlc2VydmVkKS4gVGhpcyBvcGVyYXRpb24gYWxzbyByZXR1cm5zIGEgVGVuc29yIGluZGljZXMgdGhhdFxuICogcmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb2YgZWFjaCBvdXQgZWxlbWVudCBpbiBgeGAuIEluIG90aGVyIHdvcmRzOlxuICpcbiAqIGBvdXRbaV0gPSB4W2lkeFtpXV0gZm9yIGkgaW4gWzAsIDEsIC4uLiwgb3V0Lmxlbmd0aCAtIDFdYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gWzEsIDIsIDMsIDQsIDUsIDZdO1xuICogY29uc3QgeSA9IFsxLCAzLCA1XTtcbiAqXG4gKiBjb25zdCBbb3V0LCBpbmRpY2VzXSA9IGF3YWl0IHRmLnNldGRpZmYxZEFzeW5jKHgsIHkpO1xuICogb3V0LnByaW50KCk7IC8vIFsyLCA0LCA2XVxuICogaW5kaWNlcy5wcmludCgpOyAvLyBbMSwgMywgNV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IDEtRCBUZW5zb3IuIFZhbHVlcyB0byBrZWVwLlxuICogQHBhcmFtIHkgMS1EIFRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgeC4gVmFsdWVzIHRvIGV4Y2x1ZGUgaW4gdGhlXG4gKiAgICAgb3V0cHV0LlxuICogQHJldHVybnMgUHJvbWlzZSBvZiBUZW5zb3IgdHVwbGUgW291dCwgaW5kaWNlc10uXG4gKiAgb3V0OiBUZW5zb3Igd2l0aCB0aGUgc2FtZSB0eXBlIGFzIHguXG4gKiAgaW5kaWNlczogQSBUZW5zb3Igb2YgdHlwZSBpbnQzMi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRkaWZmMWRBc3luY18oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIHk6IFRlbnNvcnxUZW5zb3JMaWtlKTogUHJvbWlzZTxbVGVuc29yLCBUZW5zb3JdPiB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3NldGRpZmYxZCcpO1xuICBjb25zdCAkeSA9IGNvbnZlcnRUb1RlbnNvcih5LCAneScsICdzZXRkaWZmMWQnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LmR0eXBlID09PSAkeS5kdHlwZSxcbiAgICAgICgpID0+IGB4IGFuZCB5IHNob3VsZCBoYXZlIHRoZSBzYW1lIGR0eXBlLCBidXQgZ290IHggKCR7XG4gICAgICAgICAgJHguZHR5cGV9KSBhbmQgeSAoJHskeS5kdHlwZX0pLmApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gMSwgKCkgPT4gYHggc2hvdWxkIGJlIDFEIHRlbnNvciwgYnV0IGdvdCB4ICgkeyR4LnNoYXBlfSkuYCk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeS5yYW5rID09PSAxLCAoKSA9PiBgeSBzaG91bGQgYmUgMUQgdGVuc29yLCBidXQgZ290IHkgKCR7JHkuc2hhcGV9KS5gKTtcblxuICBjb25zdCB4VmFscyA9IGF3YWl0ICR4LmRhdGEoKTtcbiAgY29uc3QgeVZhbHMgPSBhd2FpdCAkeS5kYXRhKCk7XG4gIGNvbnN0IHlTZXQgPSBuZXcgU2V0KHlWYWxzKTtcblxuICBsZXQgb3V0cHV0U2l6ZSA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXlTZXQuaGFzKHhWYWxzW2ldKSkge1xuICAgICAgb3V0cHV0U2l6ZSsrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBUZW5zb3JCdWZmZXIoW291dHB1dFNpemVdLCAkeC5kdHlwZSk7XG4gIGNvbnN0IGluZGljZXMgPSBuZXcgVGVuc29yQnVmZmVyKFtvdXRwdXRTaXplXSwgJ2ludDMyJyk7XG4gIGZvciAobGV0IGkgPSAwLCBwID0gMDsgaSA8IHhWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCF5U2V0Lmhhcyh4VmFsc1tpXSkpIHtcbiAgICAgIGJ1ZmZlci52YWx1ZXNbcF0gPSB4VmFsc1tpXTtcbiAgICAgIGluZGljZXMudmFsdWVzW3BdID0gaTtcbiAgICAgIHArKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtidWZmZXIudG9UZW5zb3IoKSwgaW5kaWNlcy50b1RlbnNvcigpXTtcbn1cbmV4cG9ydCBjb25zdCBzZXRkaWZmMWRBc3luYyA9IHNldGRpZmYxZEFzeW5jXztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sign } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns an element-wise indication of the sign of a number.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3, NaN, 0]);\n *\n * x.sign().print(); // or tf.sign(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sign_(x) {\n const $x = convertToTensor(x, 'x', 'sign');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sign, inputs);\n}\nexport const sign = /* @__PURE__ */ op({ sign_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBZSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNuQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2lnbiwgU2lnbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGVsZW1lbnQtd2lzZSBpbmRpY2F0aW9uIG9mIHRoZSBzaWduIG9mIGEgbnVtYmVyLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy42LCAxLjEsIC0zLjMsIE5hTiwgMF0pO1xuICpcbiAqIHguc2lnbigpLnByaW50KCk7ICAvLyBvciB0Zi5zaWduKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCBUZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHNpZ25fPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzaWduJyk7XG4gIGNvbnN0IGlucHV0czogU2lnbklucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNpZ24sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBzaWduID0gLyogQF9fUFVSRV9fICovIG9wKHtzaWduX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sin } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes sin of the input Tensor element-wise: `sin(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.sin().print(); // or tf.sin(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sin_(x) {\n const $x = convertToTensor(x, 'x', 'sin', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sin, inputs);\n}\nexport const sin = /* @__PURE__ */ op({ sin_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTaW4sIFNpbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBzaW4gb2YgdGhlIGlucHV0IFRlbnNvciBlbGVtZW50LXdpc2U6IGBzaW4oeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgTWF0aC5QSSAvIDIsIE1hdGguUEkgKiAzIC8gNF0pO1xuICpcbiAqIHguc2luKCkucHJpbnQoKTsgIC8vIG9yIHRmLnNpbih4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBzaW5fPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzaW4nLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogU2luSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTaW4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBzaW4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Npbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sinh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes hyperbolic sin of the input `tf.Tensor` element-wise: `sinh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.sinh().print(); // or tf.sinh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sinh_(x) {\n const $x = convertToTensor(x, 'x', 'sinh');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sinh, inputs);\n}\nexport const sinh = /* @__PURE__ */ op({ sinh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NpbmgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBZSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUVuQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2luaCwgU2luaElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBoeXBlcmJvbGljIHNpbiBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOiBgc2luaCh4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCAxLCAtMSwgLjddKTtcbiAqXG4gKiB4LnNpbmgoKS5wcmludCgpOyAgLy8gb3IgdGYuc2luaCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBzaW5oXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2luaCcpO1xuICBjb25zdCBpbnB1dHM6IFNpbmhJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNpbmgsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBzaW5oID0gLyogQF9fUFVSRV9fICovIG9wKHtzaW5oX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { slice } from './slice';\n/**\n * Extracts a 1D slice from 1D array starting at coordinates `begin` and is\n * of length `size`. See `slice` for details.\n */\nfunction slice1d_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice1d');\n util.assert($x.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${$x.rank} tensor`);\n return slice($x, [begin], [size]);\n}\nexport const slice1d = /* @__PURE__ */ op({ slice1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UxZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlMWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFzQixFQUFFLEtBQWEsRUFBRSxJQUFZO0lBQ3JELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQ0QsbURBQW1ELEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjFEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4vc2xpY2UnO1xuXG4vKipcbiAqIEV4dHJhY3RzIGEgMUQgc2xpY2UgZnJvbSAxRCBhcnJheSBzdGFydGluZyBhdCBjb29yZGluYXRlcyBgYmVnaW5gIGFuZCBpc1xuICogb2YgbGVuZ3RoIGBzaXplYC4gU2VlIGBzbGljZWAgZm9yIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHNsaWNlMWRfKFxuICAgIHg6IFRlbnNvcjFEfFRlbnNvckxpa2UsIGJlZ2luOiBudW1iZXIsIHNpemU6IG51bWJlcik6IFRlbnNvcjFEIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2xpY2UxZCcpO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDEsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBzbGljZTFkIGV4cGVjdHMgYSByYW5rLTEgdGVuc29yLCBidXQgZ290IGEgcmFuay0keyR4LnJhbmt9IHRlbnNvcmApO1xuICByZXR1cm4gc2xpY2UoJHgsIFtiZWdpbl0sIFtzaXplXSk7XG59XG5leHBvcnQgY29uc3Qgc2xpY2UxZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2xpY2UxZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { slice } from './slice';\n/**\n * Extracts a 2D slice from a 2D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice2d_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice2d');\n util.assert($x.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${$x.rank} tensor`);\n return slice($x, begin, size);\n}\nexport const slice2d = /* @__PURE__ */ op({ slice2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlMmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFzQixFQUFFLEtBQXVCLEVBQy9DLElBQXNCO0lBQ3hCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQ0QsbURBQW1ELEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL3NsaWNlJztcblxuLyoqXG4gKiBFeHRyYWN0cyBhIDJEIHNsaWNlIGZyb20gYSAyRCBhcnJheSBzdGFydGluZyBhdCBjb29yZGluYXRlcyBgYmVnaW5gIGFuZFxuICogaXMgb2Ygc2l6ZSBgc2l6ZWAuIFNlZSBgc2xpY2VgIGZvciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBzbGljZTJkXyhcbiAgICB4OiBUZW5zb3IyRHxUZW5zb3JMaWtlLCBiZWdpbjogW251bWJlciwgbnVtYmVyXSxcbiAgICBzaXplOiBbbnVtYmVyLCBudW1iZXJdKTogVGVuc29yMkQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzbGljZTJkJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gMixcbiAgICAgICgpID0+XG4gICAgICAgICAgYHNsaWNlMmQgZXhwZWN0cyBhIHJhbmstMiB0ZW5zb3IsIGJ1dCBnb3QgYSByYW5rLSR7JHgucmFua30gdGVuc29yYCk7XG4gIHJldHVybiBzbGljZSgkeCwgYmVnaW4sIHNpemUpO1xufVxuZXhwb3J0IGNvbnN0IHNsaWNlMmQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NsaWNlMmRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { slice } from './slice';\n/**\n * Extracts a 3D slice from a 3D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice3d_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice3d');\n util.assert($x.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${$x.rank} tensor`);\n return slice($x, begin, size);\n}\nexport const slice3d = /* @__PURE__ */ op({ slice3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UzZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlM2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFzQixFQUFFLEtBQStCLEVBQ3ZELElBQThCO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQ0QsbURBQW1ELEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IzRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL3NsaWNlJztcblxuLyoqXG4gKiBFeHRyYWN0cyBhIDNEIHNsaWNlIGZyb20gYSAzRCBhcnJheSBzdGFydGluZyBhdCBjb29yZGluYXRlcyBgYmVnaW5gIGFuZFxuICogaXMgb2Ygc2l6ZSBgc2l6ZWAuIFNlZSBgc2xpY2VgIGZvciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBzbGljZTNkXyhcbiAgICB4OiBUZW5zb3IzRHxUZW5zb3JMaWtlLCBiZWdpbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIHNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IFRlbnNvcjNEIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2xpY2UzZCcpO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDMsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBzbGljZTNkIGV4cGVjdHMgYSByYW5rLTMgdGVuc29yLCBidXQgZ290IGEgcmFuay0keyR4LnJhbmt9IHRlbnNvcmApO1xuICByZXR1cm4gc2xpY2UoJHgsIGJlZ2luLCBzaXplKTtcbn1cbmV4cG9ydCBjb25zdCBzbGljZTNkID0gLyogQF9fUFVSRV9fICovIG9wKHtzbGljZTNkX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { slice } from './slice';\n/**\n * Extracts a 4D slice from a 4D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice4d_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice4d');\n util.assert($x.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${$x.rank} tensor`);\n return slice($x, begin, size);\n}\nexport const slice4d = /* @__PURE__ */ op({ slice4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2U0ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlNGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFzQixFQUFFLEtBQXVDLEVBQy9ELElBQXNDO0lBQ3hDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQ0QsbURBQW1ELEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL3NsaWNlJztcblxuLyoqXG4gKiBFeHRyYWN0cyBhIDREIHNsaWNlIGZyb20gYSA0RCBhcnJheSBzdGFydGluZyBhdCBjb29yZGluYXRlcyBgYmVnaW5gIGFuZFxuICogaXMgb2Ygc2l6ZSBgc2l6ZWAuIFNlZSBgc2xpY2VgIGZvciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBzbGljZTRkXyhcbiAgICB4OiBUZW5zb3I0RHxUZW5zb3JMaWtlLCBiZWdpbjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgc2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiBUZW5zb3I0RCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3NsaWNlNGQnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID09PSA0LFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgc2xpY2U0ZCBleHBlY3RzIGEgcmFuay00IHRlbnNvciwgYnV0IGdvdCBhIHJhbmstJHskeC5yYW5rfSB0ZW5zb3JgKTtcbiAgcmV0dXJuIHNsaWNlKCR4LCBiZWdpbiwgc2l6ZSk7XG59XG5leHBvcnQgY29uc3Qgc2xpY2U0ZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2xpY2U0ZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Softmax } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the softmax normalized vector given the logits.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n *\n * a.softmax().print(); // or tf.softmax(a)\n * ```\n *\n * ```js\n * const a = tf.tensor2d([2, 4, 6, 1, 2, 3], [2, 3]);\n *\n * a.softmax().print(); // or tf.softmax(a)\n * ```\n *\n * @param logits The logits array.\n * @param dim The dimension softmax would be performed on. Defaults to `-1`\n * which indicates the last dimension.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction softmax_(logits, dim = -1) {\n const $logits = convertToTensor(logits, 'logits', 'softmax', 'float32');\n if (dim === -1) {\n dim = $logits.rank - 1;\n }\n if (dim !== $logits.rank - 1) {\n throw Error('Softmax along a non-last dimension is not yet supported. ' +\n `Logits was rank ${$logits.rank} and dim was ${dim}`);\n }\n const inputs = { logits: $logits };\n const attrs = { dim };\n return ENGINE.runKernel(Softmax, inputs, attrs);\n}\nexport const softmax = /* @__PURE__ */ op({ softmax_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdG1heC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NvZnRtYXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUE4QixNQUFNLGlCQUFpQixDQUFDO0FBSXJFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILFNBQVMsUUFBUSxDQUFtQixNQUFvQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDaEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXhFLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2QsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDNUIsTUFBTSxLQUFLLENBQ1AsMkRBQTJEO1lBQzNELG1CQUFtQixPQUFPLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUMzRDtJQUVELE1BQU0sTUFBTSxHQUFrQixFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBaUIsRUFBQyxHQUFHLEVBQUMsQ0FBQztJQUVsQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE9BQU8sRUFBRSxNQUFtQyxFQUM1QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1NvZnRtYXgsIFNvZnRtYXhBdHRycywgU29mdG1heElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBzb2Z0bWF4IG5vcm1hbGl6ZWQgdmVjdG9yIGdpdmVuIHRoZSBsb2dpdHMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIGEuc29mdG1heCgpLnByaW50KCk7ICAvLyBvciB0Zi5zb2Z0bWF4KGEpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjJkKFsyLCA0LCA2LCAxLCAyLCAzXSwgWzIsIDNdKTtcbiAqXG4gKiBhLnNvZnRtYXgoKS5wcmludCgpOyAgLy8gb3IgdGYuc29mdG1heChhKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGxvZ2l0cyBUaGUgbG9naXRzIGFycmF5LlxuICogQHBhcmFtIGRpbSBUaGUgZGltZW5zaW9uIHNvZnRtYXggd291bGQgYmUgcGVyZm9ybWVkIG9uLiBEZWZhdWx0cyB0byBgLTFgXG4gKiAgICAgd2hpY2ggaW5kaWNhdGVzIHRoZSBsYXN0IGRpbWVuc2lvbi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdOb3JtYWxpemF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gc29mdG1heF88VCBleHRlbmRzIFRlbnNvcj4obG9naXRzOiBUfFRlbnNvckxpa2UsIGRpbSA9IC0xKTogVCB7XG4gIGNvbnN0ICRsb2dpdHMgPSBjb252ZXJ0VG9UZW5zb3IobG9naXRzLCAnbG9naXRzJywgJ3NvZnRtYXgnLCAnZmxvYXQzMicpO1xuXG4gIGlmIChkaW0gPT09IC0xKSB7XG4gICAgZGltID0gJGxvZ2l0cy5yYW5rIC0gMTtcbiAgfVxuICBpZiAoZGltICE9PSAkbG9naXRzLnJhbmsgLSAxKSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdTb2Z0bWF4IGFsb25nIGEgbm9uLWxhc3QgZGltZW5zaW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiAnICtcbiAgICAgICAgYExvZ2l0cyB3YXMgcmFuayAkeyRsb2dpdHMucmFua30gYW5kIGRpbSB3YXMgJHtkaW19YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFNvZnRtYXhJbnB1dHMgPSB7bG9naXRzOiAkbG9naXRzfTtcbiAgY29uc3QgYXR0cnM6IFNvZnRtYXhBdHRycyA9IHtkaW19O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgU29mdG1heCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBzb2Z0bWF4ID0gLyogQF9fUFVSRV9fICovIG9wKHtzb2Z0bWF4X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { FFT } from '../../kernel_names';\nimport { assert } from '../../util';\nimport { op } from '../operation';\n/**\n * Fast Fourier transform.\n *\n * Computes the 1-dimensional discrete Fourier transform over the inner-most\n * dimension of input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([1, 2, 3]);\n * const x = tf.complex(real, imag);\n *\n * x.fft().print(); // tf.spectral.fft(x).print();\n * ```\n * @param input The complex input to compute an fft over.\n *\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction fft_(input) {\n assert(input.dtype === 'complex64', () => `The dtype for tf.spectral.fft() must be complex64 ` +\n `but got ${input.dtype}.`);\n const inputs = { input };\n return ENGINE.runKernel(FFT, inputs);\n}\nexport const fft = /* @__PURE__ */ op({ fft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3BlY3RyYWwvZmZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQVMsSUFBSSxDQUFDLEtBQWE7SUFDekIsTUFBTSxDQUNGLEtBQUssQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUMzQixHQUFHLEVBQUUsQ0FBQyxvREFBb0Q7UUFDdEQsV0FBVyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVuQyxNQUFNLE1BQU0sR0FBYyxFQUFDLEtBQUssRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtGRlQsIEZGVElucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogRmFzdCBGb3VyaWVyIHRyYW5zZm9ybS5cbiAqXG4gKiBDb21wdXRlcyB0aGUgMS1kaW1lbnNpb25hbCBkaXNjcmV0ZSBGb3VyaWVyIHRyYW5zZm9ybSBvdmVyIHRoZSBpbm5lci1tb3N0XG4gKiBkaW1lbnNpb24gb2YgaW5wdXQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlYWwgPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICogY29uc3QgaW1hZyA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKiBjb25zdCB4ID0gdGYuY29tcGxleChyZWFsLCBpbWFnKTtcbiAqXG4gKiB4LmZmdCgpLnByaW50KCk7ICAvLyB0Zi5zcGVjdHJhbC5mZnQoeCkucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIGlucHV0IFRoZSBjb21wbGV4IGlucHV0IHRvIGNvbXB1dGUgYW4gZmZ0IG92ZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3BlY3RyYWwnLCBuYW1lc3BhY2U6ICdzcGVjdHJhbCd9XG4gKi9cbmZ1bmN0aW9uIGZmdF8oaW5wdXQ6IFRlbnNvcik6IFRlbnNvciB7XG4gIGFzc2VydChcbiAgICAgIGlucHV0LmR0eXBlID09PSAnY29tcGxleDY0JyxcbiAgICAgICgpID0+IGBUaGUgZHR5cGUgZm9yIHRmLnNwZWN0cmFsLmZmdCgpIG11c3QgYmUgY29tcGxleDY0IGAgK1xuICAgICAgICAgIGBidXQgZ290ICR7aW5wdXQuZHR5cGV9LmApO1xuXG4gIGNvbnN0IGlucHV0czogRkZUSW5wdXRzID0ge2lucHV0fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChGRlQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGZmdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZmZ0X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { IFFT } from '../../kernel_names';\nimport { assert } from '../../util';\nimport { op } from '../operation';\n/**\n * Inverse fast Fourier transform.\n *\n * Computes the inverse 1-dimensional discrete Fourier transform over the\n * inner-most dimension of input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([1, 2, 3]);\n * const x = tf.complex(real, imag);\n *\n * x.ifft().print(); // tf.spectral.ifft(x).print();\n * ```\n * @param input The complex input to compute an ifft over.\n *\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction ifft_(input) {\n assert(input.dtype === 'complex64', () => `The dtype for tf.spectral.ifft() must be complex64 ` +\n `but got ${input.dtype}.`);\n const inputs = { input };\n return ENGINE.runKernel(IFFT, inputs);\n}\nexport const ifft = /* @__PURE__ */ op({ ifft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZmdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwZWN0cmFsL2lmZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0sb0JBQW9CLENBQUM7QUFHcEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxLQUFLLENBQUMsS0FBYTtJQUMxQixNQUFNLENBQ0YsS0FBSyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQzNCLEdBQUcsRUFBRSxDQUFDLHFEQUFxRDtRQUN2RCxXQUFXLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLE1BQU0sTUFBTSxHQUFlLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge0lGRlQsIElGRlRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEludmVyc2UgZmFzdCBGb3VyaWVyIHRyYW5zZm9ybS5cbiAqXG4gKiBDb21wdXRlcyB0aGUgaW52ZXJzZSAxLWRpbWVuc2lvbmFsIGRpc2NyZXRlIEZvdXJpZXIgdHJhbnNmb3JtIG92ZXIgdGhlXG4gKiBpbm5lci1tb3N0IGRpbWVuc2lvbiBvZiBpbnB1dC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVhbCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKiBjb25zdCBpbWFnID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IHggPSB0Zi5jb21wbGV4KHJlYWwsIGltYWcpO1xuICpcbiAqIHguaWZmdCgpLnByaW50KCk7ICAvLyB0Zi5zcGVjdHJhbC5pZmZ0KHgpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBpbnB1dCBUaGUgY29tcGxleCBpbnB1dCB0byBjb21wdXRlIGFuIGlmZnQgb3Zlci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTcGVjdHJhbCcsIG5hbWVzcGFjZTogJ3NwZWN0cmFsJ31cbiAqL1xuZnVuY3Rpb24gaWZmdF8oaW5wdXQ6IFRlbnNvcik6IFRlbnNvciB7XG4gIGFzc2VydChcbiAgICAgIGlucHV0LmR0eXBlID09PSAnY29tcGxleDY0JyxcbiAgICAgICgpID0+IGBUaGUgZHR5cGUgZm9yIHRmLnNwZWN0cmFsLmlmZnQoKSBtdXN0IGJlIGNvbXBsZXg2NCBgICtcbiAgICAgICAgICBgYnV0IGdvdCAke2lucHV0LmR0eXBlfS5gKTtcblxuICBjb25zdCBpbnB1dHM6IElGRlRJbnB1dHMgPSB7aW5wdXR9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKElGRlQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlmZnQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2lmZnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { complex } from '../complex';\nimport { concat } from '../concat';\nimport { imag } from '../imag';\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { real } from '../real';\nimport { reshape } from '../reshape';\nimport { reverse } from '../reverse';\nimport { scalar } from '../scalar';\nimport { slice } from '../slice';\nimport { ifft } from './ifft';\n/**\n * Inversed real value input fast Fourier transform.\n *\n * Computes the 1-dimensional inversed discrete Fourier transform over the\n * inner-most dimension of the real input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([0, 0, 0]);\n * const x = tf.complex(real, imag);\n *\n * x.irfft().print();\n * ```\n * @param input The real value input to compute an irfft over.\n *\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction irfft_(input) {\n const innerDimensionSize = input.shape[input.shape.length - 1];\n const batch = input.size / innerDimensionSize;\n let ret;\n if (innerDimensionSize <= 2) {\n const complexInput = reshape(input, [batch, innerDimensionSize]);\n ret = ifft(complexInput);\n }\n else {\n // The length of unique components of the DFT of a real-valued signal\n // is 2 * (input_len - 1)\n const outputShape = [batch, 2 * (innerDimensionSize - 1)];\n const realInput = reshape(real(input), [batch, innerDimensionSize]);\n const imagInput = reshape(imag(input), [batch, innerDimensionSize]);\n const realConjugate = reverse(slice(realInput, [0, 1], [batch, innerDimensionSize - 2]), 1);\n const imagConjugate = mul(reverse(slice(imagInput, [0, 1], [batch, innerDimensionSize - 2]), 1), scalar(-1));\n const r = concat([realInput, realConjugate], 1);\n const i = concat([imagInput, imagConjugate], 1);\n const complexInput = reshape(complex(r, i), [outputShape[0], outputShape[1]]);\n ret = ifft(complexInput);\n }\n ret = real(ret);\n // reshape the result if the input is 3D tensor.\n if (input.rank === 3 && input.shape[0] !== 0) {\n const temp = ret;\n const batch = input.shape[0];\n ret = reshape(ret, [batch, ret.shape[0] / batch, ret.shape[1]]);\n temp.dispose();\n }\n return ret;\n}\nexport const irfft = /* @__PURE__ */ op({ irfft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJmZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGVjdHJhbC9pcmZmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRS9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxLQUFhO0lBQzNCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQzlDLElBQUksR0FBVyxDQUFDO0lBQ2hCLElBQUksa0JBQWtCLElBQUksQ0FBQyxFQUFFO1FBQzNCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDMUI7U0FBTTtRQUNMLHFFQUFxRTtRQUNyRSx5QkFBeUI7UUFDekIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUVwRSxNQUFNLGFBQWEsR0FDZixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sYUFBYSxHQUFhLEdBQUcsQ0FDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDckUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUNkLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMxQjtJQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEIsZ0RBQWdEO0lBQ2hELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDNUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgVGVuc29yMkR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4uL2NvbXBsZXgnO1xuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4uL2NvbmNhdCc7XG5pbXBvcnQge2ltYWd9IGZyb20gJy4uL2ltYWcnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZWFsfSBmcm9tICcuLi9yZWFsJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4vcmVzaGFwZSc7XG5pbXBvcnQge3JldmVyc2V9IGZyb20gJy4uL3JldmVyc2UnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuLi9zbGljZSc7XG5cbmltcG9ydCB7aWZmdH0gZnJvbSAnLi9pZmZ0JztcblxuLyoqXG4gKiBJbnZlcnNlZCByZWFsIHZhbHVlIGlucHV0IGZhc3QgRm91cmllciB0cmFuc2Zvcm0uXG4gKlxuICogQ29tcHV0ZXMgdGhlIDEtZGltZW5zaW9uYWwgaW52ZXJzZWQgZGlzY3JldGUgRm91cmllciB0cmFuc2Zvcm0gb3ZlciB0aGVcbiAqIGlubmVyLW1vc3QgZGltZW5zaW9uIG9mIHRoZSByZWFsIGlucHV0LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCByZWFsID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGltYWcgPSB0Zi50ZW5zb3IxZChbMCwgMCwgMF0pO1xuICogY29uc3QgeCA9IHRmLmNvbXBsZXgocmVhbCwgaW1hZyk7XG4gKlxuICogeC5pcmZmdCgpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBpbnB1dCBUaGUgcmVhbCB2YWx1ZSBpbnB1dCB0byBjb21wdXRlIGFuIGlyZmZ0IG92ZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3BlY3RyYWwnLCBuYW1lc3BhY2U6ICdzcGVjdHJhbCd9XG4gKi9cbmZ1bmN0aW9uIGlyZmZ0XyhpbnB1dDogVGVuc29yKTogVGVuc29yIHtcbiAgY29uc3QgaW5uZXJEaW1lbnNpb25TaXplID0gaW5wdXQuc2hhcGVbaW5wdXQuc2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGJhdGNoID0gaW5wdXQuc2l6ZSAvIGlubmVyRGltZW5zaW9uU2l6ZTtcbiAgbGV0IHJldDogVGVuc29yO1xuICBpZiAoaW5uZXJEaW1lbnNpb25TaXplIDw9IDIpIHtcbiAgICBjb25zdCBjb21wbGV4SW5wdXQgPSByZXNoYXBlKGlucHV0LCBbYmF0Y2gsIGlubmVyRGltZW5zaW9uU2l6ZV0pO1xuICAgIHJldCA9IGlmZnQoY29tcGxleElucHV0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGUgbGVuZ3RoIG9mIHVuaXF1ZSBjb21wb25lbnRzIG9mIHRoZSBERlQgb2YgYSByZWFsLXZhbHVlZCBzaWduYWxcbiAgICAvLyBpcyAyICogKGlucHV0X2xlbiAtIDEpXG4gICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBbYmF0Y2gsIDIgKiAoaW5uZXJEaW1lbnNpb25TaXplIC0gMSldO1xuICAgIGNvbnN0IHJlYWxJbnB1dCA9IHJlc2hhcGUocmVhbChpbnB1dCksIFtiYXRjaCwgaW5uZXJEaW1lbnNpb25TaXplXSk7XG4gICAgY29uc3QgaW1hZ0lucHV0ID0gcmVzaGFwZShpbWFnKGlucHV0KSwgW2JhdGNoLCBpbm5lckRpbWVuc2lvblNpemVdKTtcblxuICAgIGNvbnN0IHJlYWxDb25qdWdhdGUgPVxuICAgICAgICByZXZlcnNlKHNsaWNlKHJlYWxJbnB1dCwgWzAsIDFdLCBbYmF0Y2gsIGlubmVyRGltZW5zaW9uU2l6ZSAtIDJdKSwgMSk7XG4gICAgY29uc3QgaW1hZ0Nvbmp1Z2F0ZTogVGVuc29yMkQgPSBtdWwoXG4gICAgICAgIHJldmVyc2Uoc2xpY2UoaW1hZ0lucHV0LCBbMCwgMV0sIFtiYXRjaCwgaW5uZXJEaW1lbnNpb25TaXplIC0gMl0pLCAxKSxcbiAgICAgICAgc2NhbGFyKC0xKSk7XG5cbiAgICBjb25zdCByID0gY29uY2F0KFtyZWFsSW5wdXQsIHJlYWxDb25qdWdhdGVdLCAxKTtcbiAgICBjb25zdCBpID0gY29uY2F0KFtpbWFnSW5wdXQsIGltYWdDb25qdWdhdGVdLCAxKTtcbiAgICBjb25zdCBjb21wbGV4SW5wdXQgPVxuICAgICAgICByZXNoYXBlKGNvbXBsZXgociwgaSksIFtvdXRwdXRTaGFwZVswXSwgb3V0cHV0U2hhcGVbMV1dKTtcbiAgICByZXQgPSBpZmZ0KGNvbXBsZXhJbnB1dCk7XG4gIH1cbiAgcmV0ID0gcmVhbChyZXQpO1xuICAvLyByZXNoYXBlIHRoZSByZXN1bHQgaWYgdGhlIGlucHV0IGlzIDNEIHRlbnNvci5cbiAgaWYgKGlucHV0LnJhbmsgPT09IDMgJiYgaW5wdXQuc2hhcGVbMF0gIT09IDApIHtcbiAgICBjb25zdCB0ZW1wID0gcmV0O1xuICAgIGNvbnN0IGJhdGNoID0gaW5wdXQuc2hhcGVbMF07XG4gICAgcmV0ID0gcmVzaGFwZShyZXQsIFtiYXRjaCwgcmV0LnNoYXBlWzBdIC8gYmF0Y2gsIHJldC5zaGFwZVsxXV0pO1xuICAgIHRlbXAuZGlzcG9zZSgpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBjb25zdCBpcmZmdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aXJmZnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SplitV } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Splits a `tf.Tensor` into sub tensors.\n *\n * If `numOrSizeSplits` is a number, splits `x` along dimension `axis`\n * into `numOrSizeSplits` smaller tensors.\n * Requires that `numOrSizeSplits` evenly divides `x.shape[axis]`.\n *\n * If `numOrSizeSplits` is a number array, splits `x` into\n * `numOrSizeSplits.length` pieces. The shape of the `i`-th piece has the\n * same size as `x` except along dimension `axis` where the size is\n * `numOrSizeSplits[i]`.\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4, 5, 6, 7, 8], [2, 4]);\n * const [a, b] = tf.split(x, 2, 1);\n * a.print();\n * b.print();\n *\n * const [c, d, e] = tf.split(x, [1, 2, 1], 1);\n * c.print();\n * d.print();\n * e.print();\n * ```\n *\n * @param x The input tensor to split.\n * @param numOrSizeSplits Either an integer indicating the number of\n * splits along the axis or an array of integers containing the sizes of\n * each output tensor along the axis. If a number then it must evenly divide\n * `x.shape[axis]`; otherwise the sum of sizes must match `x.shape[axis]`.\n * Can contain one -1 indicating that dimension is to be inferred.\n * @param axis The dimension along which to split. Defaults to 0 (the first\n * dim).\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction split_(x, numOrSizeSplits, axis = 0) {\n const $x = convertToTensor(x, 'x', 'split');\n const inputs = { x: $x };\n const attr = { numOrSizeSplits, axis };\n return ENGINE.runKernel(SplitV, inputs, attr);\n}\nexport const split = /* @__PURE__ */ op({ split_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxNQUFNLEVBQTRCLE1BQU0saUJBQWlCLENBQUM7QUFJbEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFvQixFQUFFLGVBQWdDLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDbEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFNUMsTUFBTSxNQUFNLEdBQWlCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFnQixFQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUVsRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ1osTUFBTSxFQUFFLE1BQW1DLEVBQzNDLElBQStCLENBQW1CLENBQUM7QUFDaEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTcGxpdFYsIFNwbGl0VkF0dHJzLCBTcGxpdFZJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBTcGxpdHMgYSBgdGYuVGVuc29yYCBpbnRvIHN1YiB0ZW5zb3JzLlxuICpcbiAqIElmIGBudW1PclNpemVTcGxpdHNgIGlzIGEgbnVtYmVyLCBzcGxpdHMgYHhgIGFsb25nIGRpbWVuc2lvbiBgYXhpc2BcbiAqIGludG8gYG51bU9yU2l6ZVNwbGl0c2Agc21hbGxlciB0ZW5zb3JzLlxuICogUmVxdWlyZXMgdGhhdCBgbnVtT3JTaXplU3BsaXRzYCBldmVubHkgZGl2aWRlcyBgeC5zaGFwZVtheGlzXWAuXG4gKlxuICogSWYgYG51bU9yU2l6ZVNwbGl0c2AgaXMgYSBudW1iZXIgYXJyYXksIHNwbGl0cyBgeGAgaW50b1xuICogYG51bU9yU2l6ZVNwbGl0cy5sZW5ndGhgIHBpZWNlcy4gVGhlIHNoYXBlIG9mIHRoZSBgaWAtdGggcGllY2UgaGFzIHRoZVxuICogc2FtZSBzaXplIGFzIGB4YCBleGNlcHQgYWxvbmcgZGltZW5zaW9uIGBheGlzYCB3aGVyZSB0aGUgc2l6ZSBpc1xuICogYG51bU9yU2l6ZVNwbGl0c1tpXWAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0sIFsyLCA0XSk7XG4gKiBjb25zdCBbYSwgYl0gPSB0Zi5zcGxpdCh4LCAyLCAxKTtcbiAqIGEucHJpbnQoKTtcbiAqIGIucHJpbnQoKTtcbiAqXG4gKiBjb25zdCBbYywgZCwgZV0gPSB0Zi5zcGxpdCh4LCBbMSwgMiwgMV0sIDEpO1xuICogYy5wcmludCgpO1xuICogZC5wcmludCgpO1xuICogZS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciB0byBzcGxpdC5cbiAqIEBwYXJhbSBudW1PclNpemVTcGxpdHMgRWl0aGVyIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mXG4gKiBzcGxpdHMgYWxvbmcgdGhlIGF4aXMgb3IgYW4gYXJyYXkgb2YgaW50ZWdlcnMgY29udGFpbmluZyB0aGUgc2l6ZXMgb2ZcbiAqIGVhY2ggb3V0cHV0IHRlbnNvciBhbG9uZyB0aGUgYXhpcy4gSWYgYSBudW1iZXIgdGhlbiBpdCBtdXN0IGV2ZW5seSBkaXZpZGVcbiAqIGB4LnNoYXBlW2F4aXNdYDsgb3RoZXJ3aXNlIHRoZSBzdW0gb2Ygc2l6ZXMgbXVzdCBtYXRjaCBgeC5zaGFwZVtheGlzXWAuXG4gKiBDYW4gY29udGFpbiBvbmUgLTEgaW5kaWNhdGluZyB0aGF0IGRpbWVuc2lvbiBpcyB0byBiZSBpbmZlcnJlZC5cbiAqIEBwYXJhbSBheGlzIFRoZSBkaW1lbnNpb24gYWxvbmcgd2hpY2ggdG8gc3BsaXQuIERlZmF1bHRzIHRvIDAgKHRoZSBmaXJzdFxuICogZGltKS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdTbGljaW5nIGFuZCBKb2luaW5nJ31cbiAqL1xuZnVuY3Rpb24gc3BsaXRfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBudW1PclNpemVTcGxpdHM6IG51bWJlcltdfG51bWJlciwgYXhpcyA9IDApOiBUW10ge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzcGxpdCcpO1xuXG4gIGNvbnN0IGlucHV0czogU3BsaXRWSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cjogU3BsaXRWQXR0cnMgPSB7bnVtT3JTaXplU3BsaXRzLCBheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICBTcGxpdFYsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgIGF0dHIgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIHVua25vd24gYXMgVFtdO1xufVxuXG5leHBvcnQgY29uc3Qgc3BsaXQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NwbGl0X30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from '../../util';\nimport { complex } from '../complex';\nimport { concat } from '../concat';\nimport { imag } from '../imag';\nimport { op } from '../operation';\nimport { real } from '../real';\nimport { reshape } from '../reshape';\nimport { slice } from '../slice';\nimport { split } from '../split';\nimport { zeros } from '../zeros';\nimport { zerosLike } from '../zeros_like';\nimport { fft } from './fft';\n/**\n * Real value input fast Fourier transform.\n *\n * Computes the 1-dimensional discrete Fourier transform over the\n * inner-most dimension of the real input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n *\n * real.rfft().print();\n * ```\n * @param input The real value input to compute an rfft over.\n *\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction rfft_(input, fftLength) {\n assert(input.dtype === 'float32', () => `The dtype for rfft() must be real value but got ${input.dtype}`);\n let innerDimensionSize = input.shape[input.shape.length - 1];\n const batch = input.size / innerDimensionSize;\n let adjustedInput;\n if (fftLength != null && fftLength < innerDimensionSize) {\n // Need to crop\n const begin = input.shape.map(v => 0);\n const size = input.shape.map(v => v);\n size[input.shape.length - 1] = fftLength;\n adjustedInput = slice(input, begin, size);\n innerDimensionSize = fftLength;\n }\n else if (fftLength != null && fftLength > innerDimensionSize) {\n // Need to pad with zeros\n const zerosShape = input.shape.map(v => v);\n zerosShape[input.shape.length - 1] = fftLength - innerDimensionSize;\n adjustedInput = concat([input, zeros(zerosShape)], input.shape.length - 1);\n innerDimensionSize = fftLength;\n }\n else {\n adjustedInput = input;\n }\n // Complement the input with zero imaginary numbers.\n const zerosInput = zerosLike(adjustedInput);\n const complexInput = reshape(complex(adjustedInput, zerosInput), [batch, innerDimensionSize]);\n const ret = fft(complexInput);\n // Exclude complex conjugations. These conjugations are put symmetrically.\n const half = Math.floor(innerDimensionSize / 2) + 1;\n const realValues = real(ret);\n const imagValues = imag(ret);\n const realComplexConjugate = split(realValues, [half, innerDimensionSize - half], realValues.shape.length - 1);\n const imagComplexConjugate = split(imagValues, [half, innerDimensionSize - half], imagValues.shape.length - 1);\n const outputShape = adjustedInput.shape.slice();\n outputShape[adjustedInput.shape.length - 1] = half;\n return reshape(complex(realComplexConjugate[0], imagComplexConjugate[0]), outputShape);\n}\nexport const rfft = /* @__PURE__ */ op({ rfft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmZmdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwZWN0cmFsL3JmZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsU0FBa0I7SUFDOUMsTUFBTSxDQUNGLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUN6QixHQUFHLEVBQUUsQ0FBQyxtREFBbUQsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFNUUsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFD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QUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuLi9jb21wbGV4JztcbmltcG9ydCB7Y29uY2F0fSBmcm9tICcuLi9jb25jYXQnO1xuaW1wb3J0IHtpbWFnfSBmcm9tICcuLi9pbWFnJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3JlYWx9IGZyb20gJy4uL3JlYWwnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9yZXNoYXBlJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4uL3NsaWNlJztcbmltcG9ydCB7c3BsaXR9IGZyb20gJy4uL3NwbGl0JztcbmltcG9ydCB7emVyb3N9IGZyb20gJy4uL3plcm9zJztcbmltcG9ydCB7emVyb3NMaWtlfSBmcm9tICcuLi96ZXJvc19saWtlJztcblxuaW1wb3J0IHtmZnR9IGZyb20gJy4vZmZ0JztcblxuLyoqXG4gKiBSZWFsIHZhbHVlIGlucHV0IGZhc3QgRm91cmllciB0cmFuc2Zvcm0uXG4gKlxuICogQ29tcHV0ZXMgdGhlIDEtZGltZW5zaW9uYWwgZGlzY3JldGUgRm91cmllciB0cmFuc2Zvcm0gb3ZlciB0aGVcbiAqIGlubmVyLW1vc3QgZGltZW5zaW9uIG9mIHRoZSByZWFsIGlucHV0LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCByZWFsID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqXG4gKiByZWFsLnJmZnQoKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0gaW5wdXQgVGhlIHJlYWwgdmFsdWUgaW5wdXQgdG8gY29tcHV0ZSBhbiByZmZ0IG92ZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3BlY3RyYWwnLCBuYW1lc3BhY2U6ICdzcGVjdHJhbCd9XG4gKi9cbmZ1bmN0aW9uIHJmZnRfKGlucHV0OiBUZW5zb3IsIGZmdExlbmd0aD86IG51bWJlcik6IFRlbnNvciB7XG4gIGFzc2VydChcbiAgICAgIGlucHV0LmR0eXBlID09PSAnZmxvYXQzMicsXG4gICAgICAoKSA9PiBgVGhlIGR0eXBlIGZvciByZmZ0KCkgbXVzdCBiZSByZWFsIHZhbHVlIGJ1dCBnb3QgJHtpbnB1dC5kdHlwZX1gKTtcblxuICBsZXQgaW5uZXJEaW1lbnNpb25TaXplID0gaW5wdXQuc2hhcGVbaW5wdXQuc2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGJhdGNoID0gaW5wdXQuc2l6ZSAvIGlubmVyRGltZW5zaW9uU2l6ZTtcblxuICBsZXQgYWRqdXN0ZWRJbnB1dDogVGVuc29yO1xuICBpZiAoZmZ0TGVuZ3RoICE9IG51bGwgJiYgZmZ0TGVuZ3RoIDwgaW5uZXJEaW1lbnNpb25TaXplKSB7XG4gICAgLy8gTmVlZCB0byBjcm9wXG4gICAgY29uc3QgYmVnaW4gPSBpbnB1dC5zaGFwZS5tYXAodiA9PiAwKTtcbiAgICBjb25zdCBzaXplID0gaW5wdXQuc2hhcGUubWFwKHYgPT4gdik7XG4gICAgc2l6ZVtpbnB1dC5zaGFwZS5sZW5ndGggLSAxXSA9IGZmdExlbmd0aDtcbiAgICBhZGp1c3RlZElucHV0ID0gc2xpY2UoaW5wdXQsIGJlZ2luLCBzaXplKTtcbiAgICBpbm5lckRpbWVuc2lvblNpemUgPSBmZnRMZW5ndGg7XG4gIH0gZWxzZSBpZiAoZmZ0TGVuZ3RoICE9IG51bGwgJiYgZmZ0TGVuZ3RoID4gaW5uZXJEaW1lbnNpb25TaXplKSB7XG4gICAgLy8gTmVlZCB0byBwYWQgd2l0aCB6ZXJvc1xuICAgIGNvbnN0IHplcm9zU2hhcGUgPSBpbnB1dC5zaGFwZS5tYXAodiA9PiB2KTtcbiAgICB6ZXJvc1NoYXBlW2lucHV0LnNoYXBlLmxlbmd0aCAtIDFdID0gZmZ0TGVuZ3RoIC0gaW5uZXJEaW1lbnNpb25TaXplO1xuICAgIGFkanVzdGVkSW5wdXQgPSBjb25jYXQoW2lucHV0LCB6ZXJvcyh6ZXJvc1NoYXBlKV0sIGlucHV0LnNoYXBlLmxlbmd0aCAtIDEpO1xuICAgIGlubmVyRGltZW5zaW9uU2l6ZSA9IGZmdExlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICBhZGp1c3RlZElucHV0ID0gaW5wdXQ7XG4gIH1cblxuICAvLyBDb21wbGVtZW50IHRoZSBpbnB1dCB3aXRoIHplcm8gaW1hZ2luYXJ5IG51bWJlcnMuXG4gIGNvbnN0IHplcm9zSW5wdXQgPSB6ZXJvc0xpa2UoYWRqdXN0ZWRJbnB1dCk7XG4gIGNvbnN0IGNvbXBsZXhJbnB1dCA9XG4gICAgICByZXNoYXBlKGNvbXBsZXgoYWRqdXN0ZWRJbnB1dCwgemVyb3NJbnB1dCksIFtiYXRjaCwgaW5uZXJEaW1lbnNpb25TaXplXSk7XG5cbiAgY29uc3QgcmV0ID0gZmZ0KGNvbXBsZXhJbnB1dCk7XG5cbiAgLy8gRXhjbHVkZSBjb21wbGV4IGNvbmp1Z2F0aW9ucy4gVGhlc2UgY29uanVnYXRpb25zIGFyZSBwdXQgc3ltbWV0cmljYWxseS5cbiAgY29uc3QgaGFsZiA9IE1hdGguZmxvb3IoaW5uZXJEaW1lbnNpb25TaXplIC8gMikgKyAxO1xuICBjb25zdCByZWFsVmFsdWVzID0gcmVhbChyZXQpO1xuICBjb25zdCBpbWFnVmFsdWVzID0gaW1hZyhyZXQpO1xuICBjb25zdCByZWFsQ29tcGxleENvbmp1Z2F0ZSA9IHNwbGl0KFxuICAgICAgcmVhbFZhbHVlcywgW2hhbGYsIGlubmVyRGltZW5zaW9uU2l6ZSAtIGhhbGZdLFxuICAgICAgcmVhbFZhbHVlcy5zaGFwZS5sZW5ndGggLSAxKTtcbiAgY29uc3QgaW1hZ0NvbXBsZXhDb25qdWdhdGUgPSBzcGxpdChcbiAgICAgIGltYWdWYWx1ZXMsIFtoYWxmLCBpbm5lckRpbWVuc2lvblNpemUgLSBoYWxmXSxcbiAgICAgIGltYWdWYWx1ZXMuc2hhcGUubGVuZ3RoIC0gMSk7XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBhZGp1c3RlZElucHV0LnNoYXBlLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlW2FkanVzdGVkSW5wdXQuc2hhcGUubGVuZ3RoIC0gMV0gPSBoYWxmO1xuXG4gIHJldHVybiByZXNoYXBlKFxuICAgICAgY29tcGxleChyZWFsQ29tcGxleENvbmp1Z2F0ZVswXSwgaW1hZ0NvbXBsZXhDb25qdWdhdGVbMF0pLCBvdXRwdXRTaGFwZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZmZ0ID0gLyogQF9fUFVSRV9fICovIG9wKHtyZmZ0X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SquaredDifference } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns (a - b) * (a - b) element-wise.\n * Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.squaredDifference(b).print(); // or tf.squaredDifference(a, b)\n * ```\n *\n * ```js\n * // Broadcast squared difference a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.squaredDifference(b).print(); // or tf.squaredDifference(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction squaredDifference_(a, b) {\n let $a = convertToTensor(a, 'a', 'squaredDifference');\n let $b = convertToTensor(b, 'b', 'squaredDifference');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n const attrs = {};\n return ENGINE.runKernel(SquaredDifference, inputs, attrs);\n}\nexport const squaredDifference = /* @__PURE__ */ op({ squaredDifference_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3F1YXJlZF9kaWZmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3F1YXJlZF9kaWZmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGlCQUFpQixFQUEwQixNQUFNLGlCQUFpQixDQUFDO0FBRzNFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixDQUFvQixFQUFFLENBQW9CO0lBQzVDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDdEQsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN0RCxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUE0QixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3ZELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVqQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLGlCQUFpQixFQUFFLE1BQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxrQkFBa0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTcXVhcmVkRGlmZmVyZW5jZSwgU3F1YXJlZERpZmZlcmVuY2VJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIChhIC0gYikgKiAoYSAtIGIpIGVsZW1lbnQtd2lzZS5cbiAqIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCA0LCAzLCAxNl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCA5LCA0XSk7XG4gKlxuICogYS5zcXVhcmVkRGlmZmVyZW5jZShiKS5wcmludCgpOyAgLy8gb3IgdGYuc3F1YXJlZERpZmZlcmVuY2UoYSwgYilcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBCcm9hZGNhc3Qgc3F1YXJlZCBkaWZmZXJlbmNlICBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMiwgNCwgNiwgOF0pO1xuICogY29uc3QgYiA9IHRmLnNjYWxhcig1KTtcbiAqXG4gKiBhLnNxdWFyZWREaWZmZXJlbmNlKGIpLnByaW50KCk7ICAvLyBvciB0Zi5zcXVhcmVkRGlmZmVyZW5jZShhLCBiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIHNxdWFyZWREaWZmZXJlbmNlXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ3NxdWFyZWREaWZmZXJlbmNlJyk7XG4gIGxldCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdzcXVhcmVkRGlmZmVyZW5jZScpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IFNxdWFyZWREaWZmZXJlbmNlSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG4gIGNvbnN0IGF0dHJzID0ge307XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBTcXVhcmVkRGlmZmVyZW5jZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsIGF0dHJzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNxdWFyZWREaWZmZXJlbmNlID0gLyogQF9fUFVSRV9fICovIG9wKHtzcXVhcmVkRGlmZmVyZW5jZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { squeezeShape } from '../util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Removes dimensions of size 1 from the shape of a `tf.Tensor`.\n *\n * ```js\n * const x = tf.tensor([1, 2, 3, 4], [1, 1, 4]);\n * x.squeeze().print();\n * ```\n *\n * @param x The input tensor to be squeezed.\n * @param axis An optional list of numbers. If specified, only\n * squeezes the dimensions listed. The dimension index starts at 0. It\n * is an error to squeeze a dimension that is not 1.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction squeeze_(x, axis) {\n const $x = convertToTensor(x, 'x', 'squeeze', 'string_or_numeric');\n return reshape($x, squeezeShape($x.shape, axis).newShape);\n}\nexport const squeeze = /* @__PURE__ */ op({ squeeze_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3F1ZWV6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NxdWVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFckMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxRQUFRLENBQW1CLENBQW9CLEVBQUUsSUFBZTtJQUN2RSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNuRSxPQUFPLE9BQU8sQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFNLENBQUM7QUFDakUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzcXVlZXplU2hhcGV9IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogUmVtb3ZlcyBkaW1lbnNpb25zIG9mIHNpemUgMSBmcm9tIHRoZSBzaGFwZSBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yKFsxLCAyLCAzLCA0XSwgWzEsIDEsIDRdKTtcbiAqIHguc3F1ZWV6ZSgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIHRvIGJlIHNxdWVlemVkLlxuICogQHBhcmFtIGF4aXMgQW4gb3B0aW9uYWwgbGlzdCBvZiBudW1iZXJzLiBJZiBzcGVjaWZpZWQsIG9ubHlcbiAqICAgICBzcXVlZXplcyB0aGUgZGltZW5zaW9ucyBsaXN0ZWQuIFRoZSBkaW1lbnNpb24gaW5kZXggc3RhcnRzIGF0IDAuIEl0XG4gKiBpcyBhbiBlcnJvciB0byBzcXVlZXplIGEgZGltZW5zaW9uIHRoYXQgaXMgbm90IDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gc3F1ZWV6ZV88VCBleHRlbmRzIFRlbnNvcj4oeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXM/OiBudW1iZXJbXSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzcXVlZXplJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIHJldHVybiByZXNoYXBlKCR4LCBzcXVlZXplU2hhcGUoJHguc2hhcGUsIGF4aXMpLm5ld1NoYXBlKSBhcyBUO1xufVxuXG5leHBvcnQgY29uc3Qgc3F1ZWV6ZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3F1ZWV6ZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Pack } from '../kernel_names';\nimport { convertToTensorArray } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Stacks a list of rank-`R` `tf.Tensor`s into one rank-`(R+1)` `tf.Tensor`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n * tf.stack([a, b, c]).print();\n * ```\n *\n * @param tensors A list of tensor objects with the same shape and dtype.\n * @param axis The axis to stack along. Defaults to 0 (the first dim).\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction stack_(tensors, axis = 0) {\n const $tensors = convertToTensorArray(tensors, 'tensors', 'stack', 'string_or_numeric');\n util.assert($tensors.length >= 1, () => 'Pass at least one tensor to tf.stack');\n if ($tensors.length > 0) {\n util.assert(axis <= $tensors[0].rank, () => 'Axis must be <= rank of the tensor');\n }\n const inputs = $tensors;\n const attrs = { axis };\n return ENGINE.runKernel(Pack, inputs, attrs);\n}\nexport const stack = /* @__PURE__ */ op({ stack_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxJQUFJLEVBQXdCLE1BQU0saUJBQWlCLENBQUM7QUFJNUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsTUFBTSxDQUNYLE9BQTRCLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQ1Ysb0JBQW9CLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUUzRSxJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFeEUsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7S0FDM0U7SUFFRCxNQUFNLE1BQU0sR0FBZSxRQUFRLENBQUM7SUFDcEMsTUFBTSxLQUFLLEdBQWMsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUVoQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLElBQUksRUFBRSxNQUFtQyxFQUN6QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1BhY2ssIFBhY2tBdHRycywgUGFja0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3JBcnJheX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFN0YWNrcyBhIGxpc3Qgb2YgcmFuay1gUmAgYHRmLlRlbnNvcmBzIGludG8gb25lIHJhbmstYChSKzEpYCBgdGYuVGVuc29yYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzMsIDRdKTtcbiAqIGNvbnN0IGMgPSB0Zi50ZW5zb3IxZChbNSwgNl0pO1xuICogdGYuc3RhY2soW2EsIGIsIGNdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHRlbnNvcnMgQSBsaXN0IG9mIHRlbnNvciBvYmplY3RzIHdpdGggdGhlIHNhbWUgc2hhcGUgYW5kIGR0eXBlLlxuICogQHBhcmFtIGF4aXMgVGhlIGF4aXMgdG8gc3RhY2sgYWxvbmcuIERlZmF1bHRzIHRvIDAgKHRoZSBmaXJzdCBkaW0pLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5mdW5jdGlvbiBzdGFja188VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgdGVuc29yczogQXJyYXk8VHxUZW5zb3JMaWtlPiwgYXhpcyA9IDApOiBUZW5zb3Ige1xuICBjb25zdCAkdGVuc29ycyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3JBcnJheSh0ZW5zb3JzLCAndGVuc29ycycsICdzdGFjaycsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHRlbnNvcnMubGVuZ3RoID49IDEsICgpID0+ICdQYXNzIGF0IGxlYXN0IG9uZSB0ZW5zb3IgdG8gdGYuc3RhY2snKTtcblxuICBpZiAoJHRlbnNvcnMubGVuZ3RoID4gMCkge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBheGlzIDw9ICR0ZW5zb3JzWzBdLnJhbmssICgpID0+ICdBeGlzIG11c3QgYmUgPD0gcmFuayBvZiB0aGUgdGVuc29yJyk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFBhY2tJbnB1dHMgPSAkdGVuc29ycztcbiAgY29uc3QgYXR0cnM6IFBhY2tBdHRycyA9IHtheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFBhY2ssIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3RhY2sgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3N0YWNrX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Step } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes step of the input `tf.Tensor` element-wise: `x > 0 ? 1 : alpha`\n *\n * ```js\n * const x = tf.tensor1d([0, 2, -1, -3]);\n *\n * x.step(.5).print(); // or tf.step(x, .5)\n * ```\n * @param x The input tensor.\n * @param alpha The gradient when input is negative. Defaults to 0.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction step_(x, alpha = 0.0) {\n const $x = convertToTensor(x, 'x', 'step');\n const inputs = { x: $x };\n const attrs = { alpha };\n return ENGINE.runKernel(Step, inputs, attrs);\n}\nexport const step = /* @__PURE__ */ op({ step_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3N0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsS0FBSyxDQUFtQixDQUFlLEVBQUUsS0FBSyxHQUFHLEdBQUc7SUFDM0QsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQWMsRUFBQyxLQUFLLEVBQUMsQ0FBQztJQUVqQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLElBQUksRUFBRSxNQUFtQyxFQUN6QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1N0ZXAsIFN0ZXBBdHRycywgU3RlcElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHN0ZXAgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYHggPiAwID8gMSA6IGFscGhhYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDIsIC0xLCAtM10pO1xuICpcbiAqIHguc3RlcCguNSkucHJpbnQoKTsgIC8vIG9yIHRmLnN0ZXAoeCwgLjUpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKiBAcGFyYW0gYWxwaGEgVGhlIGdyYWRpZW50IHdoZW4gaW5wdXQgaXMgbmVnYXRpdmUuIERlZmF1bHRzIHRvIDAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHN0ZXBfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSwgYWxwaGEgPSAwLjApOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3RlcCcpO1xuXG4gIGNvbnN0IGlucHV0czogU3RlcElucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBTdGVwQXR0cnMgPSB7YWxwaGF9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgU3RlcCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5leHBvcnQgY29uc3Qgc3RlcCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3RlcF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { StridedSlice } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Extracts a strided slice of a tensor.\n *\n * Roughly speaking, this op extracts a slice of size (end-begin)/stride from\n * the given input tensor (x). Starting at the location specified by begin the\n * slice continues by adding stride to the index until all dimensions are not\n * less than end. Note that a stride can be negative, which causes a reverse\n * slice.\n *\n * ```js\n * const t = tf.tensor3d([1, 1, 1 ,2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6],\n * [3, 2, 3]);\n * t.stridedSlice([1, 0, 0], [2, 1, 3], [1, 1, 1]).print() // [[[3, 3, 3]]]\n * t.stridedSlice([1, 0, 0], [2, 2, 3], [1, 1, 1]).print() // [[[3, 3, 3],\n * // [4, 4, 4]]]\n * t.stridedSlice([1, -1, 0], [2, -3, 3], [1, -1, 1]).print() // [[[4, 4, 4],\n * // [3, 3, 3]]]\n * ```\n *\n * @param x The tensor to stride slice.\n * @param begin The coordinates to start the slice from.\n * @param end: The coordinates to end the slice at.\n * @param strides: The size of the slice.\n * @param beginMask: If the ith bit of beginMask is set, begin[i] is ignored\n * and the fullest possible range in that dimension is used instead.\n * @param endMask: If the ith bit of endMask is set, end[i] is ignored\n * and the fullest possible range in that dimension is used instead.\n * @param shrinkAxisMask: a bitmask where bit i implies that\n * the ith specification should shrink the dimensionality. begin and end must\n * imply a slice of size 1 in the dimension.\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nfunction stridedSlice_(x, begin, end, strides, beginMask = 0, endMask = 0, ellipsisMask = 0, newAxisMask = 0, shrinkAxisMask = 0) {\n const $x = convertToTensor(x, 'x', 'stridedSlice', 'string_or_numeric');\n const inputs = { x: $x };\n const attrs = {\n begin,\n end,\n strides,\n beginMask,\n endMask,\n ellipsisMask,\n newAxisMask,\n shrinkAxisMask\n };\n return ENGINE.runKernel(StridedSlice, inputs, attrs);\n}\nexport const stridedSlice = /* @__PURE__ */ op({ stridedSlice_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaWRlZF9zbGljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3N0cmlkZWRfc2xpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUF3QyxNQUFNLGlCQUFpQixDQUFDO0FBSXBGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUNILFNBQVMsYUFBYSxDQUNsQixDQUFvQixFQUFFLEtBQWUsRUFBRSxHQUFhLEVBQUUsT0FBa0IsRUFDeEUsU0FBUyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFDN0QsY0FBYyxHQUFHLENBQUM7SUFDcEIsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFeEUsTUFBTSxNQUFNLEdBQXVCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFzQjtRQUMvQixLQUFLO1FBQ0wsR0FBRztRQUNILE9BQU87UUFDUCxTQUFTO1FBQ1QsT0FBTztRQUNQLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztLQUNmLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFlBQVksRUFBRSxNQUFtQyxFQUNqRCxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1N0cmlkZWRTbGljZSwgU3RyaWRlZFNsaWNlQXR0cnMsIFN0cmlkZWRTbGljZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEV4dHJhY3RzIGEgc3RyaWRlZCBzbGljZSBvZiBhIHRlbnNvci5cbiAqXG4gKiBSb3VnaGx5IHNwZWFraW5nLCB0aGlzIG9wIGV4dHJhY3RzIGEgc2xpY2Ugb2Ygc2l6ZSAoZW5kLWJlZ2luKS9zdHJpZGUgZnJvbVxuICogdGhlIGdpdmVuIGlucHV0IHRlbnNvciAoeCkuIFN0YXJ0aW5nIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgYmVnaW4gdGhlXG4gKiBzbGljZSBjb250aW51ZXMgYnkgYWRkaW5nIHN0cmlkZSB0byB0aGUgaW5kZXggdW50aWwgYWxsIGRpbWVuc2lvbnMgYXJlIG5vdFxuICogbGVzcyB0aGFuIGVuZC4gTm90ZSB0aGF0IGEgc3RyaWRlIGNhbiBiZSBuZWdhdGl2ZSwgd2hpY2ggY2F1c2VzIGEgcmV2ZXJzZVxuICogc2xpY2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHQgPSB0Zi50ZW5zb3IzZChbMSwgMSwgMSAsMiwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNSwgNSwgNSwgNiwgNiwgNl0sXG4gKiAgICBbMywgMiwgM10pO1xuICogdC5zdHJpZGVkU2xpY2UoWzEsIDAsIDBdLCBbMiwgMSwgM10sIFsxLCAxLCAxXSkucHJpbnQoKSAgLy8gW1tbMywgMywgM11dXVxuICogdC5zdHJpZGVkU2xpY2UoWzEsIDAsIDBdLCBbMiwgMiwgM10sIFsxLCAxLCAxXSkucHJpbnQoKSAgLy8gW1tbMywgMywgM10sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWzQsIDQsIDRdXV1cbiAqIHQuc3RyaWRlZFNsaWNlKFsxLCAtMSwgMF0sIFsyLCAtMywgM10sIFsxLCAtMSwgMV0pLnByaW50KCkgLy8gW1tbNCwgNCwgNF0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWzMsIDMsIDNdXV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSB0ZW5zb3IgdG8gc3RyaWRlIHNsaWNlLlxuICogQHBhcmFtIGJlZ2luIFRoZSBjb29yZGluYXRlcyB0byBzdGFydCB0aGUgc2xpY2UgZnJvbS5cbiAqIEBwYXJhbSBlbmQ6IFRoZSBjb29yZGluYXRlcyB0byBlbmQgdGhlIHNsaWNlIGF0LlxuICogQHBhcmFtIHN0cmlkZXM6IFRoZSBzaXplIG9mIHRoZSBzbGljZS5cbiAqIEBwYXJhbSBiZWdpbk1hc2s6IElmIHRoZSBpdGggYml0IG9mIGJlZ2luTWFzayBpcyBzZXQsIGJlZ2luW2ldIGlzIGlnbm9yZWRcbiAqICAgICAgYW5kIHRoZSBmdWxsZXN0IHBvc3NpYmxlIHJhbmdlIGluIHRoYXQgZGltZW5zaW9uIGlzIHVzZWQgaW5zdGVhZC5cbiAqIEBwYXJhbSBlbmRNYXNrOiBJZiB0aGUgaXRoIGJpdCBvZiBlbmRNYXNrIGlzIHNldCwgZW5kW2ldIGlzIGlnbm9yZWRcbiAqICAgICAgYW5kIHRoZSBmdWxsZXN0IHBvc3NpYmxlIHJhbmdlIGluIHRoYXQgZGltZW5zaW9uIGlzIHVzZWQgaW5zdGVhZC5cbiAqIEBwYXJhbSBzaHJpbmtBeGlzTWFzazogYSBiaXRtYXNrIHdoZXJlIGJpdCBpIGltcGxpZXMgdGhhdFxuICogdGhlIGl0aCBzcGVjaWZpY2F0aW9uIHNob3VsZCBzaHJpbmsgdGhlIGRpbWVuc2lvbmFsaXR5LiBiZWdpbiBhbmQgZW5kIG11c3RcbiAqIGltcGx5IGEgc2xpY2Ugb2Ygc2l6ZSAxIGluIHRoZSBkaW1lbnNpb24uXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIHN0cmlkZWRTbGljZV8oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIGJlZ2luOiBudW1iZXJbXSwgZW5kOiBudW1iZXJbXSwgc3RyaWRlcz86IG51bWJlcltdLFxuICAgIGJlZ2luTWFzayA9IDAsIGVuZE1hc2sgPSAwLCBlbGxpcHNpc01hc2sgPSAwLCBuZXdBeGlzTWFzayA9IDAsXG4gICAgc2hyaW5rQXhpc01hc2sgPSAwKTogVGVuc29yIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3RyaWRlZFNsaWNlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBTdHJpZGVkU2xpY2VJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogU3RyaWRlZFNsaWNlQXR0cnMgPSB7XG4gICAgYmVnaW4sXG4gICAgZW5kLFxuICAgIHN0cmlkZXMsXG4gICAgYmVnaW5NYXNrLFxuICAgIGVuZE1hc2ssXG4gICAgZWxsaXBzaXNNYXNrLFxuICAgIG5ld0F4aXNNYXNrLFxuICAgIHNocmlua0F4aXNNYXNrXG4gIH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBTdHJpZGVkU2xpY2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaWRlZFNsaWNlID0gLyogQF9fUFVSRV9fICovIG9wKHtzdHJpZGVkU2xpY2VffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Tan } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes tan of the input `tf.Tensor` element-wise, `tan(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.tan().print(); // or tf.tan(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction tan_(x) {\n const $x = convertToTensor(x, 'x', 'tan', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Tan, inputs);\n}\nexport const tan = /* @__PURE__ */ op({ tan_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUYW4sIFRhbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0YW4gb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZSwgYHRhbih4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCBNYXRoLlBJIC8gMiwgTWF0aC5QSSAqIDMgLyA0XSk7XG4gKlxuICogeC50YW4oKS5wcmludCgpOyAgLy8gb3IgdGYudGFuKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHRhbl88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3RhbicsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBUYW5JbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFRhbiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IHRhbiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7dGFuX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-1 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor1d` as it makes the code more readable.\n *\n * ```js\n * tf.tensor1d([1, 2, 3]).print();\n * ```\n *\n * @param values The values of the tensor. Can be array of numbers,\n * or a `TypedArray`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor1d(values, dtype) {\n assertNonNull(values);\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 1) {\n throw new Error('tensor1d() requires values to be a flat/TypedArray');\n }\n const shape = null;\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yMWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3IxZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxNQUFvQixFQUFFLEtBQWdCO0lBQzdELGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsTUFBTSxLQUFLLEdBQWEsSUFBSSxDQUFDO0lBQzdCLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBYSxDQUFDO0FBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2luZmVyU2hhcGV9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2UxRH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnROb25OdWxsfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7bWFrZVRlbnNvcn0gZnJvbSAnLi90ZW5zb3Jfb3BzX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgcmFuay0xIGB0Zi5UZW5zb3JgIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlcywgc2hhcGUgYW5kIGR0eXBlLlxuICpcbiAqIFRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGFjaGlldmVkIHdpdGggYHRmLnRlbnNvcmAsIGJ1dCBpbiBnZW5lcmFsXG4gKiB3ZSByZWNvbW1lbmQgdXNpbmcgYHRmLnRlbnNvcjFkYCBhcyBpdCBtYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLlxuICpcbiAqIGBgYGpzXG4gKiB0Zi50ZW5zb3IxZChbMSwgMiwgM10pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgb2YgdGhlIHRlbnNvci4gQ2FuIGJlIGFycmF5IG9mIG51bWJlcnMsXG4gKiAgICAgb3IgYSBgVHlwZWRBcnJheWAuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3IxZCh2YWx1ZXM6IFRlbnNvckxpa2UxRCwgZHR5cGU/OiBEYXRhVHlwZSk6IFRlbnNvcjFEIHtcbiAgYXNzZXJ0Tm9uTnVsbCh2YWx1ZXMpO1xuICBjb25zdCBpbmZlcnJlZFNoYXBlID0gaW5mZXJTaGFwZSh2YWx1ZXMsIGR0eXBlKTtcbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0ZW5zb3IxZCgpIHJlcXVpcmVzIHZhbHVlcyB0byBiZSBhIGZsYXQvVHlwZWRBcnJheScpO1xuICB9XG4gIGNvbnN0IHNoYXBlOiBudW1iZXJbXSA9IG51bGw7XG4gIHJldHVybiBtYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGluZmVycmVkU2hhcGUsIGR0eXBlKSBhcyBUZW5zb3IxRDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-2 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor2d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor2d([[1, 2], [3, 4]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor2d([1, 2, 3, 4], [2, 2]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. If not provided, it is inferred from\n * `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor2d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 2) {\n throw new Error('tensor2d() requires shape to have two numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 2 && inferredShape.length !== 1) {\n throw new Error('tensor2d() requires values to be number[][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor2d() requires shape to be provided when `values` ' +\n 'are a flat/TypedArray');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yMmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3IyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUFFLEtBQXdCLEVBQzlDLEtBQWdCO0lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0tBQ2xFO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0VBQWdFLENBQUMsQ0FBQztLQUN2RTtJQUNELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUMvQyxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCx1QkFBdUIsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFhLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTJEfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk51bGx9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHttYWtlVGVuc29yfSBmcm9tICcuL3RlbnNvcl9vcHNfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyByYW5rLTIgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBgdGYudGVuc29yYCwgYnV0IGluIGdlbmVyYWxcbiAqIHdlIHJlY29tbWVuZCB1c2luZyBgdGYudGVuc29yMmRgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogIGBgYGpzXG4gKiAvLyBQYXNzIGEgbmVzdGVkIGFycmF5LlxuICogdGYudGVuc29yMmQoW1sxLCAyXSwgWzMsIDRdXSkucHJpbnQoKTtcbiAqIGBgYFxuICogYGBganNcbiAqIC8vIFBhc3MgYSBmbGF0IGFycmF5IGFuZCBzcGVjaWZ5IGEgc2hhcGUuXG4gKiB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyBvZiB0aGUgdGVuc29yLiBDYW4gYmUgbmVzdGVkIGFycmF5IG9mIG51bWJlcnMsXG4gKiAgICAgb3IgYSBmbGF0IGFycmF5LCBvciBhIGBUeXBlZEFycmF5YC5cbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgb2YgdGhlIHRlbnNvci4gSWYgbm90IHByb3ZpZGVkLCBpdCBpcyBpbmZlcnJlZCBmcm9tXG4gKiAgICAgYHZhbHVlc2AuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3IyZChcbiAgICB2YWx1ZXM6IFRlbnNvckxpa2UyRCwgc2hhcGU/OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIGR0eXBlPzogRGF0YVR5cGUpOiBUZW5zb3IyRCB7XG4gIGFzc2VydE5vbk51bGwodmFsdWVzKTtcbiAgaWYgKHNoYXBlICE9IG51bGwgJiYgc2hhcGUubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0ZW5zb3IyZCgpIHJlcXVpcmVzIHNoYXBlIHRvIGhhdmUgdHdvIG51bWJlcnMnKTtcbiAgfVxuICBjb25zdCBpbmZlcnJlZFNoYXBlID0gaW5mZXJTaGFwZSh2YWx1ZXMsIGR0eXBlKTtcbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSAyICYmIGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndGVuc29yMmQoKSByZXF1aXJlcyB2YWx1ZXMgdG8gYmUgbnVtYmVyW11bXSBvciBmbGF0L1R5cGVkQXJyYXknKTtcbiAgfVxuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggPT09IDEgJiYgc2hhcGUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RlbnNvcjJkKCkgcmVxdWlyZXMgc2hhcGUgdG8gYmUgcHJvdmlkZWQgd2hlbiBgdmFsdWVzYCAnICtcbiAgICAgICAgJ2FyZSBhIGZsYXQvVHlwZWRBcnJheScpO1xuICB9XG4gIHJldHVybiBtYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGluZmVycmVkU2hhcGUsIGR0eXBlKSBhcyBUZW5zb3IyRDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-4 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor4d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor4d([[[[1], [2]], [[3], [4]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor4d([1, 2, 3, 4], [1, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor4d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 4) {\n throw new Error('tensor4d() requires shape to have four numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 4 && inferredShape.length !== 1) {\n throw new Error('tensor4d() requires values to be number[][][][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor4d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yNGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3I0ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUFFLEtBQXdDLEVBQzlELEtBQWdCO0lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0tBQ25FO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsb0VBQW9FLENBQUMsQ0FBQztLQUMzRTtJQUNELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUMvQyxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCxrQkFBa0IsQ0FBQyxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFhLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTREfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk51bGx9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHttYWtlVGVuc29yfSBmcm9tICcuL3RlbnNvcl9vcHNfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyByYW5rLTQgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBgdGYudGVuc29yYCwgYnV0IGluIGdlbmVyYWxcbiAqIHdlIHJlY29tbWVuZCB1c2luZyBgdGYudGVuc29yNGRgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogIGBgYGpzXG4gKiAvLyBQYXNzIGEgbmVzdGVkIGFycmF5LlxuICogdGYudGVuc29yNGQoW1tbWzFdLCBbMl1dLCBbWzNdLCBbNF1dXV0pLnByaW50KCk7XG4gKiBgYGBcbiAqIGBgYGpzXG4gKiAvLyBQYXNzIGEgZmxhdCBhcnJheSBhbmQgc3BlY2lmeSBhIHNoYXBlLlxuICogdGYudGVuc29yNGQoWzEsIDIsIDMsIDRdLCBbMSwgMiwgMiwgMV0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgb2YgdGhlIHRlbnNvci4gQ2FuIGJlIG5lc3RlZCBhcnJheSBvZiBudW1iZXJzLFxuICogICAgIG9yIGEgZmxhdCBhcnJheSwgb3IgYSBgVHlwZWRBcnJheWAuXG4gKiBAcGFyYW0gc2hhcGUgVGhlIHNoYXBlIG9mIHRoZSB0ZW5zb3IuIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWQsXG4gKiAgIGl0IGlzIGluZmVycmVkIGZyb20gYHZhbHVlc2AuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3I0ZChcbiAgICB2YWx1ZXM6IFRlbnNvckxpa2U0RCwgc2hhcGU/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yNEQge1xuICBhc3NlcnROb25OdWxsKHZhbHVlcyk7XG4gIGlmIChzaGFwZSAhPSBudWxsICYmIHNoYXBlLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGVuc29yNGQoKSByZXF1aXJlcyBzaGFwZSB0byBoYXZlIGZvdXIgbnVtYmVycycpO1xuICB9XG4gIGNvbnN0IGluZmVycmVkU2hhcGUgPSBpbmZlclNoYXBlKHZhbHVlcywgZHR5cGUpO1xuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggIT09IDQgJiYgaW5mZXJyZWRTaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0ZW5zb3I0ZCgpIHJlcXVpcmVzIHZhbHVlcyB0byBiZSBudW1iZXJbXVtdW11bXSBvciBmbGF0L1R5cGVkQXJyYXknKTtcbiAgfVxuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggPT09IDEgJiYgc2hhcGUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RlbnNvcjRkKCkgcmVxdWlyZXMgc2hhcGUgdG8gYmUgcHJvdmlkZWQgd2hlbiBgdmFsdWVzYCAnICtcbiAgICAgICAgJ2FyZSBhIGZsYXQgYXJyYXknKTtcbiAgfVxuICByZXR1cm4gbWFrZVRlbnNvcih2YWx1ZXMsIHNoYXBlLCBpbmZlcnJlZFNoYXBlLCBkdHlwZSkgYXMgVGVuc29yNEQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-5 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor5d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor5d([[[[[1],[2]],[[3],[4]]],[[[5],[6]],[[7],[8]]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor5d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 5) {\n throw new Error('tensor5d() requires shape to have five numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 5 && inferredShape.length !== 1) {\n throw new Error('tensor5d() requires values to be ' +\n 'number[][][][][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor5d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yNWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3I1ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUFFLEtBQWdELEVBQ3RFLEtBQWdCO0lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0tBQ25FO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsbUNBQW1DO1lBQ25DLHFDQUFxQyxDQUFDLENBQUM7S0FDNUM7SUFDRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDWCx5REFBeUQ7WUFDekQsa0JBQWtCLENBQUMsQ0FBQztLQUN6QjtJQUNELE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBYSxDQUFDO0FBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yNUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2luZmVyU2hhcGV9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2U1RH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnROb25OdWxsfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7bWFrZVRlbnNvcn0gZnJvbSAnLi90ZW5zb3Jfb3BzX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgcmFuay01IGB0Zi5UZW5zb3JgIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlcywgc2hhcGUgYW5kIGR0eXBlLlxuICpcbiAqIFRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGFjaGlldmVkIHdpdGggYHRmLnRlbnNvcmAsIGJ1dCBpbiBnZW5lcmFsXG4gKiB3ZSByZWNvbW1lbmQgdXNpbmcgYHRmLnRlbnNvcjVkYCBhcyBpdCBtYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLlxuICpcbiAqICBgYGBqc1xuICogLy8gUGFzcyBhIG5lc3RlZCBhcnJheS5cbiAqIHRmLnRlbnNvcjVkKFtbW1tbMV0sWzJdXSxbWzNdLFs0XV1dLFtbWzVdLFs2XV0sW1s3XSxbOF1dXV1dKS5wcmludCgpO1xuICogYGBgXG4gKiBgYGBqc1xuICogLy8gUGFzcyBhIGZsYXQgYXJyYXkgYW5kIHNwZWNpZnkgYSBzaGFwZS5cbiAqIHRmLnRlbnNvcjVkKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSwgWzEsIDIsIDIsIDIsIDFdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIG9mIHRoZSB0ZW5zb3IuIENhbiBiZSBuZXN0ZWQgYXJyYXkgb2YgbnVtYmVycyxcbiAqICAgICBvciBhIGZsYXQgYXJyYXksIG9yIGEgYFR5cGVkQXJyYXlgLlxuICogQHBhcmFtIHNoYXBlIFRoZSBzaGFwZSBvZiB0aGUgdGVuc29yLiBPcHRpb25hbC4gSWYgbm90IHByb3ZpZGVkLFxuICogICBpdCBpcyBpbmZlcnJlZCBmcm9tIGB2YWx1ZXNgLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGVuc29yNWQoXG4gICAgdmFsdWVzOiBUZW5zb3JMaWtlNUQsIHNoYXBlPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yNUQge1xuICBhc3NlcnROb25OdWxsKHZhbHVlcyk7XG4gIGlmIChzaGFwZSAhPSBudWxsICYmIHNoYXBlLmxlbmd0aCAhPT0gNSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGVuc29yNWQoKSByZXF1aXJlcyBzaGFwZSB0byBoYXZlIGZpdmUgbnVtYmVycycpO1xuICB9XG4gIGNvbnN0IGluZmVycmVkU2hhcGUgPSBpbmZlclNoYXBlKHZhbHVlcywgZHR5cGUpO1xuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggIT09IDUgJiYgaW5mZXJyZWRTaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0ZW5zb3I1ZCgpIHJlcXVpcmVzIHZhbHVlcyB0byBiZSAnICtcbiAgICAgICAgJ251bWJlcltdW11bXVtdW10gb3IgZmxhdC9UeXBlZEFycmF5Jyk7XG4gIH1cbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoID09PSAxICYmIHNoYXBlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0ZW5zb3I1ZCgpIHJlcXVpcmVzIHNoYXBlIHRvIGJlIHByb3ZpZGVkIHdoZW4gYHZhbHVlc2AgJyArXG4gICAgICAgICdhcmUgYSBmbGF0IGFycmF5Jyk7XG4gIH1cbiAgcmV0dXJuIG1ha2VUZW5zb3IodmFsdWVzLCBzaGFwZSwgaW5mZXJyZWRTaGFwZSwgZHR5cGUpIGFzIFRlbnNvcjVEO1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-6 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor6d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor6d([[[[[[1],[2]],[[3],[4]]],[[[5],[6]],[[7],[8]]]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor6d([1, 2, 3, 4, 5, 6, 7, 8], [1, 1, 2, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor6d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 6) {\n throw new Error('tensor6d() requires shape to have six numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 6 && inferredShape.length !== 1) {\n throw new Error('tensor6d() requires values to be number[][][][][][] or ' +\n 'flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor6d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n shape = shape ||\n inferredShape;\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yNmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3I2ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUNwQixLQUF3RCxFQUN4RCxLQUFnQjtJQUNsQixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztLQUNsRTtJQUNELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM1RCxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQ1gseURBQXlEO1lBQ3pELGtCQUFrQixDQUFDLENBQUM7S0FDekI7SUFDRCxLQUFLLEdBQUcsS0FBSztRQUNULGFBQWlFLENBQUM7SUFDdEUsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFhLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3I2RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTZEfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk51bGx9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHttYWtlVGVuc29yfSBmcm9tICcuL3RlbnNvcl9vcHNfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyByYW5rLTYgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBgdGYudGVuc29yYCwgYnV0IGluIGdlbmVyYWxcbiAqIHdlIHJlY29tbWVuZCB1c2luZyBgdGYudGVuc29yNmRgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogIGBgYGpzXG4gKiAvLyBQYXNzIGEgbmVzdGVkIGFycmF5LlxuICogdGYudGVuc29yNmQoW1tbW1tbMV0sWzJdXSxbWzNdLFs0XV1dLFtbWzVdLFs2XV0sW1s3XSxbOF1dXV1dXSkucHJpbnQoKTtcbiAqIGBgYFxuICogYGBganNcbiAqIC8vIFBhc3MgYSBmbGF0IGFycmF5IGFuZCBzcGVjaWZ5IGEgc2hhcGUuXG4gKiB0Zi50ZW5zb3I2ZChbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0sIFsxLCAxLCAyLCAyLCAyLCAxXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyBvZiB0aGUgdGVuc29yLiBDYW4gYmUgbmVzdGVkIGFycmF5IG9mIG51bWJlcnMsXG4gKiAgICAgb3IgYSBmbGF0IGFycmF5LCBvciBhIGBUeXBlZEFycmF5YC5cbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgb2YgdGhlIHRlbnNvci4gT3B0aW9uYWwuIElmIG5vdCBwcm92aWRlZCxcbiAqICAgaXQgaXMgaW5mZXJyZWQgZnJvbSBgdmFsdWVzYC5cbiAqIEBwYXJhbSBkdHlwZSBUaGUgZGF0YSB0eXBlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlbnNvcjZkKFxuICAgIHZhbHVlczogVGVuc29yTGlrZTZELFxuICAgIHNoYXBlPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGR0eXBlPzogRGF0YVR5cGUpOiBUZW5zb3I2RCB7XG4gIGFzc2VydE5vbk51bGwodmFsdWVzKTtcbiAgaWYgKHNoYXBlICE9IG51bGwgJiYgc2hhcGUubGVuZ3RoICE9PSA2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0ZW5zb3I2ZCgpIHJlcXVpcmVzIHNoYXBlIHRvIGhhdmUgc2l4IG51bWJlcnMnKTtcbiAgfVxuICBjb25zdCBpbmZlcnJlZFNoYXBlID0gaW5mZXJTaGFwZSh2YWx1ZXMsIGR0eXBlKTtcbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSA2ICYmIGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndGVuc29yNmQoKSByZXF1aXJlcyB2YWx1ZXMgdG8gYmUgbnVtYmVyW11bXVtdW11bXVtdIG9yICcgK1xuICAgICAgICAnZmxhdC9UeXBlZEFycmF5Jyk7XG4gIH1cbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoID09PSAxICYmIHNoYXBlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0ZW5zb3I2ZCgpIHJlcXVpcmVzIHNoYXBlIHRvIGJlIHByb3ZpZGVkIHdoZW4gYHZhbHVlc2AgJyArXG4gICAgICAgICdhcmUgYSBmbGF0IGFycmF5Jyk7XG4gIH1cbiAgc2hhcGUgPSBzaGFwZSB8fFxuICAgICAgaW5mZXJyZWRTaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHJldHVybiBtYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGluZmVycmVkU2hhcGUsIGR0eXBlKSBhcyBUZW5zb3I2RDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { TensorScatterUpdate } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\nimport * as scatter_nd_util from './scatter_nd_util';\n/**\n * Creates a new tensor by applying sparse updates to individual\n * values or slices to the passed in tensor according to\n * indices. This operator is the similar to scatterNd op, except that the\n * udpates are scattered on an existing tensor (as opposed to a zero-tensor).\n *\n * If indices contains duplicates, then we pick the last update for the index.\n *\n * If an out of bound index is found on CPU, an error is returned.\n *\n * Warning: There are some GPU specific semantics for this operation.\n * - If an out of bound index is found, the index is ignored.\n * - The order in which updates are applied is nondeterministic, so the output\n * will be nondeterministic if indices contains duplicates.\n * ```js\n * const shape = [8];\n * const tensor = tf.ones(shape);\n * const indices = tf.tensor2d([4, 3, 1, 7], [4, 1], 'int32');\n * const updates = tf.tensor1d([9, 10, 11, 12]);\n *\n * tf.tensorScatterUpdate(tensor, indices, updates).print();\n * //[1, 11, 1, 10, 9, 1, 1, 12]\n * ```\n *\n * @param tensor A Tensor. Tensor to copy/update.\n * @param indices The tensor contains the indices into the output tensor, must\n * have at least 2 axes: (num_updates, index_depth).\n * @param updates The tensor contains the value for the indices.\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nfunction tensorScatterUpdate_(tensor, indices, updates) {\n const $tensor = convertToTensor(tensor, 'tensor', 'tensorScatterupdate');\n const $indices = convertToTensor(indices, 'indices', 'tensorScatterupdate', 'int32');\n const $updates = convertToTensor(updates, 'updates', 'tensorScatterupdate');\n scatter_nd_util.validateInput($updates, $indices, $tensor.shape);\n if ($tensor.dtype !== $updates.dtype) {\n throw new Error(`tensor and updates must have the same dtype, instead they are ${$tensor.dtype} and ${$updates.dtype}.`);\n }\n const inputs = {\n tensor: $tensor,\n indices: $indices,\n updates: $updates\n };\n const attrs = {};\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(TensorScatterUpdate, inputs, attrs);\n}\nexport const tensorScatterUpdate = op({ tensorScatterUpdate_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX3NjYXR0ZXJfdXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdGVuc29yX3NjYXR0ZXJfdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLG1CQUFtQixFQUFzRCxNQUFNLGlCQUFpQixDQUFDO0FBSXpHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxlQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILFNBQVMsb0JBQW9CLENBQ3pCLE1BQTRCLEVBQUUsT0FBMEIsRUFDeEQsT0FBMEI7SUFDNUIsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN6RSxNQUFNLFFBQVEsR0FDVixlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzVFLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FDWCxpRUFDSSxPQUFPLENBQUMsS0FBSyxRQUFRLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQ2pEO0lBRUQsTUFBTSxNQUFNLEdBQThCO1FBQ3hDLE1BQU0sRUFBRSxPQUFPO1FBQ2YsT0FBTyxFQUFFLFFBQVE7UUFDakIsT0FBTyxFQUFFLFFBQVE7S0FDbEIsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUE2QixFQUFFLENBQUM7SUFFM0MsMERBQTBEO0lBQzFELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDWixtQkFBbUIsRUFBRSxNQUFtQyxFQUN4RCxLQUFnQyxDQUFjLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1RlbnNvclNjYXR0ZXJVcGRhdGUsIFRlbnNvclNjYXR0ZXJVcGRhdGVBdHRycywgVGVuc29yU2NhdHRlclVwZGF0ZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1JhbmssIFRlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0ICogYXMgc2NhdHRlcl9uZF91dGlsIGZyb20gJy4vc2NhdHRlcl9uZF91dGlsJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRlbnNvciBieSBhcHBseWluZyBzcGFyc2UgdXBkYXRlcyB0byBpbmRpdmlkdWFsXG4gKiB2YWx1ZXMgb3Igc2xpY2VzIHRvIHRoZSBwYXNzZWQgaW4gdGVuc29yIGFjY29yZGluZyB0b1xuICogaW5kaWNlcy4gVGhpcyBvcGVyYXRvciBpcyB0aGUgc2ltaWxhciB0byBzY2F0dGVyTmQgb3AsIGV4Y2VwdCB0aGF0IHRoZVxuICogdWRwYXRlcyBhcmUgc2NhdHRlcmVkIG9uIGFuIGV4aXN0aW5nIHRlbnNvciAoYXMgb3Bwb3NlZCB0byBhIHplcm8tdGVuc29yKS5cbiAqXG4gKiBJZiBpbmRpY2VzIGNvbnRhaW5zIGR1cGxpY2F0ZXMsIHRoZW4gd2UgcGljayB0aGUgbGFzdCB1cGRhdGUgZm9yIHRoZSBpbmRleC5cbiAqXG4gKiBJZiBhbiBvdXQgb2YgYm91bmQgaW5kZXggaXMgZm91bmQgb24gQ1BVLCBhbiBlcnJvciBpcyByZXR1cm5lZC5cbiAqXG4gKiBXYXJuaW5nOiBUaGVyZSBhcmUgc29tZSBHUFUgc3BlY2lmaWMgc2VtYW50aWNzIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAqICAtIElmIGFuIG91dCBvZiBib3VuZCBpbmRleCBpcyBmb3VuZCwgdGhlIGluZGV4IGlzIGlnbm9yZWQuXG4gKiAgLSBUaGUgb3JkZXIgaW4gd2hpY2ggdXBkYXRlcyBhcmUgYXBwbGllZCBpcyBub25kZXRlcm1pbmlzdGljLCBzbyB0aGUgb3V0cHV0XG4gKiB3aWxsIGJlIG5vbmRldGVybWluaXN0aWMgaWYgaW5kaWNlcyBjb250YWlucyBkdXBsaWNhdGVzLlxuICogYGBganNcbiAqIGNvbnN0IHNoYXBlID0gWzhdO1xuICogY29uc3QgdGVuc29yID0gdGYub25lcyhzaGFwZSk7XG4gKiBjb25zdCBpbmRpY2VzID0gdGYudGVuc29yMmQoWzQsIDMsIDEsIDddLCBbNCwgMV0sICdpbnQzMicpO1xuICogY29uc3QgdXBkYXRlcyA9IHRmLnRlbnNvcjFkKFs5LCAxMCwgMTEsIDEyXSk7XG4gKlxuICogdGYudGVuc29yU2NhdHRlclVwZGF0ZSh0ZW5zb3IsIGluZGljZXMsIHVwZGF0ZXMpLnByaW50KCk7XG4gKiAgICAvL1sxLCAxMSwgMSwgMTAsIDksIDEsIDEsIDEyXVxuICogYGBgXG4gKlxuICogQHBhcmFtIHRlbnNvciBBIFRlbnNvci4gVGVuc29yIHRvIGNvcHkvdXBkYXRlLlxuICogQHBhcmFtIGluZGljZXMgVGhlIHRlbnNvciBjb250YWlucyB0aGUgaW5kaWNlcyBpbnRvIHRoZSBvdXRwdXQgdGVuc29yLCBtdXN0XG4gKiAgICAgaGF2ZSBhdCBsZWFzdCAyIGF4ZXM6IChudW1fdXBkYXRlcywgaW5kZXhfZGVwdGgpLlxuICogQHBhcmFtIHVwZGF0ZXMgVGhlIHRlbnNvciBjb250YWlucyB0aGUgdmFsdWUgZm9yIHRoZSBpbmRpY2VzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5mdW5jdGlvbiB0ZW5zb3JTY2F0dGVyVXBkYXRlXzxSIGV4dGVuZHMgUmFuaz4oXG4gICAgdGVuc29yOiBUZW5zb3I8Uj58VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgdXBkYXRlczogVGVuc29yfFRlbnNvckxpa2UpOiBUZW5zb3I8Uj4ge1xuICBjb25zdCAkdGVuc29yID0gY29udmVydFRvVGVuc29yKHRlbnNvciwgJ3RlbnNvcicsICd0ZW5zb3JTY2F0dGVydXBkYXRlJyk7XG4gIGNvbnN0ICRpbmRpY2VzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihpbmRpY2VzLCAnaW5kaWNlcycsICd0ZW5zb3JTY2F0dGVydXBkYXRlJywgJ2ludDMyJyk7XG4gIGNvbnN0ICR1cGRhdGVzID0gY29udmVydFRvVGVuc29yKHVwZGF0ZXMsICd1cGRhdGVzJywgJ3RlbnNvclNjYXR0ZXJ1cGRhdGUnKTtcbiAgc2NhdHRlcl9uZF91dGlsLnZhbGlkYXRlSW5wdXQoJHVwZGF0ZXMsICRpbmRpY2VzLCAkdGVuc29yLnNoYXBlKTtcbiAgaWYgKCR0ZW5zb3IuZHR5cGUgIT09ICR1cGRhdGVzLmR0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgdGVuc29yIGFuZCB1cGRhdGVzIG11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSwgaW5zdGVhZCB0aGV5IGFyZSAke1xuICAgICAgICAgICAgJHRlbnNvci5kdHlwZX0gYW5kICR7JHVwZGF0ZXMuZHR5cGV9LmApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBUZW5zb3JTY2F0dGVyVXBkYXRlSW5wdXRzID0ge1xuICAgIHRlbnNvcjogJHRlbnNvcixcbiAgICBpbmRpY2VzOiAkaW5kaWNlcyxcbiAgICB1cGRhdGVzOiAkdXBkYXRlc1xuICB9O1xuICBjb25zdCBhdHRyczogVGVuc29yU2NhdHRlclVwZGF0ZUF0dHJzID0ge307XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICBUZW5zb3JTY2F0dGVyVXBkYXRlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVGVuc29yPFI+O1xufVxuXG5leHBvcnQgY29uc3QgdGVuc29yU2NhdHRlclVwZGF0ZSA9IG9wKHt0ZW5zb3JTY2F0dGVyVXBkYXRlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { TopK } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Finds the values and indices of the `k` largest entries along the last\n * dimension.\n *\n * If the input is a vector (rank=1), finds the k largest entries in the vector\n * and outputs their values and indices as vectors. Thus values[j] is the j-th\n * largest entry in input, and its index is indices[j].\n * For higher rank inputs, computes the top k entries along the last dimension.\n *\n * If two elements are equal, the lower-index element appears first.\n *\n * ```js\n * const a = tf.tensor2d([[1, 5], [4, 3]]);\n * const {values, indices} = tf.topk(a);\n * values.print();\n * indices.print();\n * ```\n * @param x 1-D or higher `tf.Tensor` with last dimension being at least `k`.\n * @param k Number of top elements to look for along the last dimension.\n * @param sorted If true, the resulting `k` elements will be sorted by the\n * values in descending order.\n *\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nfunction topk_(x, k = 1, sorted = true) {\n const $x = convertToTensor(x, 'x', 'topk');\n if ($x.rank === 0) {\n throw new Error('topk() expects the input to be of rank 1 or higher');\n }\n const lastDim = $x.shape[$x.shape.length - 1];\n if (k < 0) {\n throw new Error(`'k' passed to topk() must be >= 0 but got ${k}`);\n }\n if (k > lastDim) {\n throw new Error(`'k' passed to topk() must be <= the last dimension (${lastDim}) ` +\n `but got ${k}`);\n }\n const inputs = { x: $x };\n const attrs = { k, sorted };\n const [values, indices] = ENGINE.runKernel(TopK, inputs, attrs);\n return { values, indices };\n}\nexport const topk = /* @__PURE__ */ op({ topk_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9way5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3RvcGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQVMsS0FBSyxDQUNWLENBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJO0lBQ3ZDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25FO0lBRUQsSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FDWCx1REFBdUQsT0FBTyxJQUFJO1lBQ2xFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNyQjtJQUVELE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFjLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBRXJDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDdEMsSUFBSSxFQUFFLE1BQW1DLEVBQ3pDLEtBQWdDLENBQVcsQ0FBQztJQUVoRCxPQUFPLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUb3BLLCBUb3BLQXR0cnMsIFRvcEtJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBGaW5kcyB0aGUgdmFsdWVzIGFuZCBpbmRpY2VzIG9mIHRoZSBga2AgbGFyZ2VzdCBlbnRyaWVzIGFsb25nIHRoZSBsYXN0XG4gKiBkaW1lbnNpb24uXG4gKlxuICogSWYgdGhlIGlucHV0IGlzIGEgdmVjdG9yIChyYW5rPTEpLCBmaW5kcyB0aGUgayBsYXJnZXN0IGVudHJpZXMgaW4gdGhlIHZlY3RvclxuICogYW5kIG91dHB1dHMgdGhlaXIgdmFsdWVzIGFuZCBpbmRpY2VzIGFzIHZlY3RvcnMuIFRodXMgdmFsdWVzW2pdIGlzIHRoZSBqLXRoXG4gKiBsYXJnZXN0IGVudHJ5IGluIGlucHV0LCBhbmQgaXRzIGluZGV4IGlzIGluZGljZXNbal0uXG4gKiBGb3IgaGlnaGVyIHJhbmsgaW5wdXRzLCBjb21wdXRlcyB0aGUgdG9wIGsgZW50cmllcyBhbG9uZyB0aGUgbGFzdCBkaW1lbnNpb24uXG4gKlxuICogSWYgdHdvIGVsZW1lbnRzIGFyZSBlcXVhbCwgdGhlIGxvd2VyLWluZGV4IGVsZW1lbnQgYXBwZWFycyBmaXJzdC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjJkKFtbMSwgNV0sIFs0LCAzXV0pO1xuICogY29uc3Qge3ZhbHVlcywgaW5kaWNlc30gPSB0Zi50b3BrKGEpO1xuICogdmFsdWVzLnByaW50KCk7XG4gKiBpbmRpY2VzLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB4IDEtRCBvciBoaWdoZXIgYHRmLlRlbnNvcmAgd2l0aCBsYXN0IGRpbWVuc2lvbiBiZWluZyBhdCBsZWFzdCBga2AuXG4gKiBAcGFyYW0gayBOdW1iZXIgb2YgdG9wIGVsZW1lbnRzIHRvIGxvb2sgZm9yIGFsb25nIHRoZSBsYXN0IGRpbWVuc2lvbi5cbiAqIEBwYXJhbSBzb3J0ZWQgSWYgdHJ1ZSwgdGhlIHJlc3VsdGluZyBga2AgZWxlbWVudHMgd2lsbCBiZSBzb3J0ZWQgYnkgdGhlXG4gKiAgICAgdmFsdWVzIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnRXZhbHVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIHRvcGtfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgayA9IDEsIHNvcnRlZCA9IHRydWUpOiB7dmFsdWVzOiBULCBpbmRpY2VzOiBUfSB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3RvcGsnKTtcbiAgaWYgKCR4LnJhbmsgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvcGsoKSBleHBlY3RzIHRoZSBpbnB1dCB0byBiZSBvZiByYW5rIDEgb3IgaGlnaGVyJyk7XG4gIH1cbiAgY29uc3QgbGFzdERpbSA9ICR4LnNoYXBlWyR4LnNoYXBlLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChrIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJ2snIHBhc3NlZCB0byB0b3BrKCkgbXVzdCBiZSA+PSAwIGJ1dCBnb3QgJHtrfWApO1xuICB9XG5cbiAgaWYgKGsgPiBsYXN0RGltKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJ2snIHBhc3NlZCB0byB0b3BrKCkgbXVzdCBiZSA8PSB0aGUgbGFzdCBkaW1lbnNpb24gKCR7bGFzdERpbX0pIGAgK1xuICAgICAgICBgYnV0IGdvdCAke2t9YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFRvcEtJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogVG9wS0F0dHJzID0ge2ssIHNvcnRlZH07XG5cbiAgY29uc3QgW3ZhbHVlcywgaW5kaWNlc10gPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgVG9wSywgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgW1QsIFRdO1xuXG4gIHJldHVybiB7dmFsdWVzLCBpbmRpY2VzfTtcbn1cblxuZXhwb3J0IGNvbnN0IHRvcGsgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3RvcGtffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { buffer } from './buffer';\nimport { op } from './operation';\nimport { MPRandGauss } from './rand_util';\n/**\n * Creates a `tf.Tensor` with values sampled from a truncated normal\n * distribution.\n *\n * ```js\n * tf.truncatedNormal([2, 2]).print();\n * ```\n *\n * The generated values follow a normal distribution with specified mean and\n * standard deviation, except that values whose magnitude is more than 2\n * standard deviations from the mean are dropped and re-picked.\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param mean The mean of the normal distribution.\n * @param stdDev The standard deviation of the normal distribution.\n * @param dtype The data type of the output tensor.\n * @param seed The seed for the random number generator.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction truncatedNormal_(shape, mean = 0, stdDev = 1, dtype, seed) {\n assertNonNegativeIntegerDimensions(shape);\n if (dtype != null && dtype === 'bool') {\n throw new Error(`Unsupported data type $ { dtype }`);\n }\n const randGauss = new MPRandGauss(mean, stdDev, dtype, true /* truncated */, seed);\n const res = buffer(shape, dtype);\n for (let i = 0; i < res.values.length; i++) {\n res.values[i] = randGauss.nextValue();\n }\n return res.toTensor();\n}\nexport const truncatedNormal = /* @__PURE__ */ op({ truncatedNormal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGVkX25vcm1hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3RydW5jYXRlZF9ub3JtYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDckIsS0FBa0IsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBeUIsRUFDbkUsSUFBYTtJQUNmLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSyxLQUFrQixLQUFLLE1BQU0sRUFBRTtRQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7S0FDdEQ7SUFDRCxNQUFNLFNBQVMsR0FDWCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQ3ZDO0lBQ0QsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGUsIFJhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbmltcG9ydCB7YnVmZmVyfSBmcm9tICcuL2J1ZmZlcic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge01QUmFuZEdhdXNzfSBmcm9tICcuL3JhbmRfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggdmFsdWVzIHNhbXBsZWQgZnJvbSBhIHRydW5jYXRlZCBub3JtYWxcbiAqIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBgYGBqc1xuICogdGYudHJ1bmNhdGVkTm9ybWFsKFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgdmFsdWVzIGZvbGxvdyBhIG5vcm1hbCBkaXN0cmlidXRpb24gd2l0aCBzcGVjaWZpZWQgbWVhbiBhbmRcbiAqIHN0YW5kYXJkIGRldmlhdGlvbiwgZXhjZXB0IHRoYXQgdmFsdWVzIHdob3NlIG1hZ25pdHVkZSBpcyBtb3JlIHRoYW4gMlxuICogc3RhbmRhcmQgZGV2aWF0aW9ucyBmcm9tIHRoZSBtZWFuIGFyZSBkcm9wcGVkIGFuZCByZS1waWNrZWQuXG4gKlxuICogQHBhcmFtIHNoYXBlIEFuIGFycmF5IG9mIGludGVnZXJzIGRlZmluaW5nIHRoZSBvdXRwdXQgdGVuc29yIHNoYXBlLlxuICogQHBhcmFtIG1lYW4gVGhlIG1lYW4gb2YgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24uXG4gKiBAcGFyYW0gc3RkRGV2IFRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24uXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZSBvZiB0aGUgb3V0cHV0IHRlbnNvci5cbiAqIEBwYXJhbSBzZWVkIFRoZSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5mdW5jdGlvbiB0cnVuY2F0ZWROb3JtYWxfPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBzaGFwZTogU2hhcGVNYXBbUl0sIG1lYW4gPSAwLCBzdGREZXYgPSAxLCBkdHlwZT86ICdmbG9hdDMyJ3wnaW50MzInLFxuICAgIHNlZWQ/OiBudW1iZXIpOiBUZW5zb3I8Uj4ge1xuICBhc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zKHNoYXBlKTtcbiAgaWYgKGR0eXBlICE9IG51bGwgJiYgKGR0eXBlIGFzIERhdGFUeXBlKSA9PT0gJ2Jvb2wnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgJCB7IGR0eXBlIH1gKTtcbiAgfVxuICBjb25zdCByYW5kR2F1c3MgPVxuICAgICAgbmV3IE1QUmFuZEdhdXNzKG1lYW4sIHN0ZERldiwgZHR5cGUsIHRydWUgLyogdHJ1bmNhdGVkICovLCBzZWVkKTtcbiAgY29uc3QgcmVzID0gYnVmZmVyKHNoYXBlLCBkdHlwZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy52YWx1ZXNbaV0gPSByYW5kR2F1c3MubmV4dFZhbHVlKCk7XG4gIH1cbiAgcmV0dXJuIHJlcy50b1RlbnNvcigpO1xufVxuXG5leHBvcnQgY29uc3QgdHJ1bmNhdGVkTm9ybWFsID0gLyogQF9fUFVSRV9fICovIG9wKHt0cnVuY2F0ZWROb3JtYWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Unique } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assert } from '../util';\nimport { op } from './operation';\n/**\n * Finds unique elements along an axis of a tensor.\n *\n * It returns a tensor `values` containing all of the unique elements along the\n * `axis` of the given tensor `x` in the same order that they occur along the\n * `axis` in `x`; `x` does not need to be sorted. It also returns a tensor\n * `indices` the same size as the number of the elements in `x` along the `axis`\n * dimension. It contains the index in the unique output `values`.\n *\n * ```js\n * // A 1-D tensor\n * const a = tf.tensor1d([1, 1, 2, 4, 4, 4, 7, 8, 8]);\n * const {values, indices} = tf.unique(a);\n * values.print(); // [1, 2, 4, 7, 8,]\n * indices.print(); // [0, 0, 1, 2, 2, 2, 3, 4, 4]\n * ```\n *\n * ```js\n * // A 2-D tensor with axis=0\n * //\n * // 'a' is: [[1, 0, 0],\n * // [1, 0, 0],\n * // [2, 0, 0]]\n * const a = tf.tensor2d([[1, 0, 0], [1, 0, 0], [2, 0, 0]]);\n * const {values, indices} = tf.unique(a, 0)\n * values.print(); // [[1, 0, 0],\n * // [2, 0, 0]]\n * indices.print(); // [0, 0, 1]\n * ```\n *\n * ```js\n * // A 2-D tensor with axis=1\n * //\n * // 'a' is: [[1, 0, 0],\n * // [1, 0, 0],\n * // [2, 0, 0]]\n * const a = tf.tensor2d([[1, 0, 0], [1, 0, 0], [2, 0, 0]]);\n * const {values, indices} = tf.unique(a, 1)\n * values.print(); // [[1, 0],\n * // [1, 0],\n * // [2, 0]]\n * indices.print(); // [0, 1, 1]\n * ```\n * @param x A tensor (int32, string, bool).\n * @param axis The axis of the tensor to find the unique elements.\n * @returns [uniqueElements, indices] (see above for details)\n *\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nfunction unique_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'unique', 'string_or_numeric');\n assert($x.rank > 0, () => 'The input tensor must be at least 1D');\n const inputs = { x: $x };\n const attrs = { axis };\n const [values, indices] = ENGINE.runKernel(Unique, inputs, attrs);\n return { values, indices };\n}\nexport const unique = /* @__PURE__ */ op({ unique_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdW5pcXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUUvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnREc7QUFDSCxTQUFTLE9BQU8sQ0FDWixDQUFlLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbEUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFbEUsTUFBTSxNQUFNLEdBQWlCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFnQixFQUFDLElBQUksRUFBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDdEMsTUFBTSxFQUFFLE1BQW1DLEVBQzNDLEtBQWdDLENBQWtCLENBQUM7SUFDdkQsT0FBTyxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7VW5pcXVlLCBVbmlxdWVBdHRycywgVW5pcXVlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEZpbmRzIHVuaXF1ZSBlbGVtZW50cyBhbG9uZyBhbiBheGlzIG9mIGEgdGVuc29yLlxuICpcbiAqIEl0IHJldHVybnMgYSB0ZW5zb3IgYHZhbHVlc2AgY29udGFpbmluZyBhbGwgb2YgdGhlIHVuaXF1ZSBlbGVtZW50cyBhbG9uZyB0aGVcbiAqIGBheGlzYCBvZiB0aGUgZ2l2ZW4gdGVuc29yIGB4YCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgb2NjdXIgYWxvbmcgdGhlXG4gKiBgYXhpc2AgaW4gYHhgOyBgeGAgZG9lcyBub3QgbmVlZCB0byBiZSBzb3J0ZWQuIEl0IGFsc28gcmV0dXJucyBhIHRlbnNvclxuICogYGluZGljZXNgIHRoZSBzYW1lIHNpemUgYXMgdGhlIG51bWJlciBvZiB0aGUgZWxlbWVudHMgaW4gYHhgIGFsb25nIHRoZSBgYXhpc2BcbiAqIGRpbWVuc2lvbi4gSXQgY29udGFpbnMgdGhlIGluZGV4IGluIHRoZSB1bmlxdWUgb3V0cHV0IGB2YWx1ZXNgLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBBIDEtRCB0ZW5zb3JcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMSwgMiwgNCwgNCwgNCwgNywgOCwgOF0pO1xuICogY29uc3Qge3ZhbHVlcywgaW5kaWNlc30gPSB0Zi51bmlxdWUoYSk7XG4gKiB2YWx1ZXMucHJpbnQoKTsgICAvLyBbMSwgMiwgNCwgNywgOCxdXG4gKiBpbmRpY2VzLnByaW50KCk7ICAvLyBbMCwgMCwgMSwgMiwgMiwgMiwgMywgNCwgNF1cbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBBIDItRCB0ZW5zb3Igd2l0aCBheGlzPTBcbiAqIC8vXG4gKiAvLyAnYScgaXM6IFtbMSwgMCwgMF0sXG4gKiAvLyAgICAgICAgICBbMSwgMCwgMF0sXG4gKiAvLyAgICAgICAgICBbMiwgMCwgMF1dXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoW1sxLCAwLCAwXSwgWzEsIDAsIDBdLCBbMiwgMCwgMF1dKTtcbiAqIGNvbnN0IHt2YWx1ZXMsIGluZGljZXN9ID0gdGYudW5pcXVlKGEsIDApXG4gKiB2YWx1ZXMucHJpbnQoKTsgICAvLyBbWzEsIDAsIDBdLFxuICogICAgICAgICAgICAgICAgICAgLy8gIFsyLCAwLCAwXV1cbiAqIGluZGljZXMucHJpbnQoKTsgIC8vIFswLCAwLCAxXVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEEgMi1EIHRlbnNvciB3aXRoIGF4aXM9MVxuICogLy9cbiAqIC8vICdhJyBpczogW1sxLCAwLCAwXSxcbiAqIC8vICAgICAgICAgIFsxLCAwLCAwXSxcbiAqIC8vICAgICAgICAgIFsyLCAwLCAwXV1cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IyZChbWzEsIDAsIDBdLCBbMSwgMCwgMF0sIFsyLCAwLCAwXV0pO1xuICogY29uc3Qge3ZhbHVlcywgaW5kaWNlc30gPSB0Zi51bmlxdWUoYSwgMSlcbiAqIHZhbHVlcy5wcmludCgpOyAgIC8vIFtbMSwgMF0sXG4gKiAgICAgICAgICAgICAgICAgICAvLyAgWzEsIDBdLFxuICogICAgICAgICAgICAgICAgICAgLy8gIFsyLCAwXV1cbiAqIGluZGljZXMucHJpbnQoKTsgIC8vIFswLCAxLCAxXVxuICogYGBgXG4gKiBAcGFyYW0geCBBIHRlbnNvciAoaW50MzIsIHN0cmluZywgYm9vbCkuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyBvZiB0aGUgdGVuc29yIHRvIGZpbmQgdGhlIHVuaXF1ZSBlbGVtZW50cy5cbiAqIEByZXR1cm5zIFt1bmlxdWVFbGVtZW50cywgaW5kaWNlc10gKHNlZSBhYm92ZSBmb3IgZGV0YWlscylcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdFdmFsdWF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gdW5pcXVlXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGF4aXMgPSAwKToge3ZhbHVlczogVCwgaW5kaWNlczogVGVuc29yMUR9IHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAndW5pcXVlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIGFzc2VydCgkeC5yYW5rID4gMCwgKCkgPT4gJ1RoZSBpbnB1dCB0ZW5zb3IgbXVzdCBiZSBhdCBsZWFzdCAxRCcpO1xuXG4gIGNvbnN0IGlucHV0czogVW5pcXVlSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFVuaXF1ZUF0dHJzID0ge2F4aXN9O1xuICBjb25zdCBbdmFsdWVzLCBpbmRpY2VzXSA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBVbmlxdWUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFtULCBUZW5zb3IxRF07XG4gIHJldHVybiB7dmFsdWVzLCBpbmRpY2VzfTtcbn1cblxuZXhwb3J0IGNvbnN0IHVuaXF1ZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7dW5pcXVlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { UnsortedSegmentSum } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assert, isInt } from '../util';\nimport { op } from './operation';\n/**\n * Computes the sum along segments of a `tf.Tensor`.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const segmentIds = tf.tensor1d([1, 2, 0, 1], 'int32');\n * const numSegments = 3;\n *\n * x.unsortedSegmentSum(segmentIds, numSegments).print()\n * //or tf.unsortedSegmentSum(x, segmentIds, numSegments)\n * ```\n * @param x The `tf.Tensor` that will be summed along its segments.\n * @param segmentIds A `tf.Tensor1D` whose rank is equal to the rank of `x`'s\n * dimension along the `axis`. Maps each element of `x` to a segment.\n * @param numSegments The number of distinct `segmentIds`.\n *\n * @doc {heading: 'Operations', subheading: 'Segment'}\n */\nfunction unsortedSegmentSum_(x, segmentIds, numSegments) {\n const $x = convertToTensor(x, 'x', 'unsortedSegmentSum');\n const $segmentIds = convertToTensor(segmentIds, 'segmentIds', 'unsortedSegmentSum', 'int32');\n assert(isInt(numSegments), () => 'numSegments must be of dtype int');\n const inputs = { x: $x, segmentIds: $segmentIds };\n const attrs = { numSegments };\n return ENGINE.runKernel(UnsortedSegmentSum, inputs, attrs);\n}\nexport const unsortedSegmentSum = /* @__PURE__ */ op({ unsortedSegmentSum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zb3J0ZWRfc2VnbWVudF9zdW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy91bnNvcnRlZF9zZWdtZW50X3N1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxrQkFBa0IsRUFBb0QsTUFBTSxpQkFBaUIsQ0FBQztBQUl0RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFTLG1CQUFtQixDQUN4QixDQUFlLEVBQUUsVUFBK0IsRUFBRSxXQUFtQjtJQUN2RSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUVyRSxNQUFNLE1BQU0sR0FBNkIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUMxRSxNQUFNLEtBQUssR0FBNEIsRUFBQyxXQUFXLEVBQUMsQ0FBQztJQUVyRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLGtCQUFrQixFQUFFLE1BQW1DLEVBQ3ZELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLG1CQUFtQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1Vuc29ydGVkU2VnbWVudFN1bSwgVW5zb3J0ZWRTZWdtZW50U3VtQXR0cnMsIFVuc29ydGVkU2VnbWVudFN1bUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjFEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydCwgaXNJbnR9IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHN1bSBhbG9uZyBzZWdtZW50cyBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqIGNvbnN0IHNlZ21lbnRJZHMgPSB0Zi50ZW5zb3IxZChbMSwgMiwgMCwgMV0sICdpbnQzMicpO1xuICogY29uc3QgbnVtU2VnbWVudHMgPSAzO1xuICpcbiAqIHgudW5zb3J0ZWRTZWdtZW50U3VtKHNlZ21lbnRJZHMsIG51bVNlZ21lbnRzKS5wcmludCgpXG4gKiAvL29yIHRmLnVuc29ydGVkU2VnbWVudFN1bSh4LCBzZWdtZW50SWRzLCBudW1TZWdtZW50cylcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGB0Zi5UZW5zb3JgIHRoYXQgd2lsbCBiZSBzdW1tZWQgYWxvbmcgaXRzIHNlZ21lbnRzLlxuICogQHBhcmFtIHNlZ21lbnRJZHMgQSBgdGYuVGVuc29yMURgIHdob3NlIHJhbmsgaXMgZXF1YWwgdG8gdGhlIHJhbmsgb2YgYHhgJ3NcbiAqIGRpbWVuc2lvbiBhbG9uZyB0aGUgYGF4aXNgLiAgTWFwcyBlYWNoIGVsZW1lbnQgb2YgYHhgIHRvIGEgc2VnbWVudC5cbiAqIEBwYXJhbSBudW1TZWdtZW50cyBUaGUgbnVtYmVyIG9mIGRpc3RpbmN0IGBzZWdtZW50SWRzYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTZWdtZW50J31cbiAqL1xuZnVuY3Rpb24gdW5zb3J0ZWRTZWdtZW50U3VtXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIHNlZ21lbnRJZHM6IFRlbnNvcjFEfFRlbnNvckxpa2UsIG51bVNlZ21lbnRzOiBudW1iZXIpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAndW5zb3J0ZWRTZWdtZW50U3VtJyk7XG4gIGNvbnN0ICRzZWdtZW50SWRzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihzZWdtZW50SWRzLCAnc2VnbWVudElkcycsICd1bnNvcnRlZFNlZ21lbnRTdW0nLCAnaW50MzInKTtcbiAgYXNzZXJ0KGlzSW50KG51bVNlZ21lbnRzKSwgKCkgPT4gJ251bVNlZ21lbnRzIG11c3QgYmUgb2YgZHR5cGUgaW50Jyk7XG5cbiAgY29uc3QgaW5wdXRzOiBVbnNvcnRlZFNlZ21lbnRTdW1JbnB1dHMgPSB7eDogJHgsIHNlZ21lbnRJZHM6ICRzZWdtZW50SWRzfTtcbiAgY29uc3QgYXR0cnM6IFVuc29ydGVkU2VnbWVudFN1bUF0dHJzID0ge251bVNlZ21lbnRzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFVuc29ydGVkU2VnbWVudFN1bSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCB1bnNvcnRlZFNlZ21lbnRTdW0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Vuc29ydGVkU2VnbWVudFN1bV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Unpack } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Unstacks a `tf.Tensor` of rank-`R` into a list of rank-`(R-1)` `tf.Tensor`s.\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * tf.unstack(a).forEach(tensor => tensor.print());\n * ```\n *\n * @param x A tensor object.\n * @param axis The axis to unstack along. Defaults to 0 (the first dim).\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction unstack_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'unstack', 'string_or_numeric');\n util.assert(axis >= -$x.shape.length && axis < $x.shape.length, () => `Axis = ${axis} is not in [-${$x.shape.length}, ${$x.shape.length})`);\n const inputs = { value: $x };\n const attrs = { axis };\n return ENGINE.runKernel(Unpack, inputs, attrs);\n}\nexport const unstack = /* @__PURE__ */ op({ unstack_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3Vuc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBSWxFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxDQUFvQixFQUFFLElBQUksR0FBRyxDQUFDO0lBQzlDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxNQUFNLENBQ1AsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUNsRCxHQUFHLEVBQUUsQ0FDRCxVQUFVLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUU5RSxNQUFNLE1BQU0sR0FBaUIsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQWdCLEVBQUMsSUFBSSxFQUFDLENBQUM7SUFFbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixNQUFNLEVBQUUsTUFBbUMsRUFDM0MsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtVbnBhY2ssIFVucGFja0F0dHJzLCBVbnBhY2tJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogVW5zdGFja3MgYSBgdGYuVGVuc29yYCBvZiByYW5rLWBSYCBpbnRvIGEgbGlzdCBvZiByYW5rLWAoUi0xKWAgYHRmLlRlbnNvcmBzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pO1xuICpcbiAqIHRmLnVuc3RhY2soYSkuZm9yRWFjaCh0ZW5zb3IgPT4gdGVuc29yLnByaW50KCkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggQSB0ZW5zb3Igb2JqZWN0LlxuICogQHBhcmFtIGF4aXMgVGhlIGF4aXMgdG8gdW5zdGFjayBhbG9uZy4gRGVmYXVsdHMgdG8gMCAodGhlIGZpcnN0IGRpbSkuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIHVuc3RhY2tfKHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzID0gMCk6IFRlbnNvcltdIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAndW5zdGFjaycsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGF4aXMgPj0gLSR4LnNoYXBlLmxlbmd0aCAmJiBheGlzIDwgJHguc2hhcGUubGVuZ3RoLFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgQXhpcyA9ICR7YXhpc30gaXMgbm90IGluIFstJHskeC5zaGFwZS5sZW5ndGh9LCAkeyR4LnNoYXBlLmxlbmd0aH0pYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBVbnBhY2tJbnB1dHMgPSB7dmFsdWU6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFVucGFja0F0dHJzID0ge2F4aXN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgVW5wYWNrLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHVuc3RhY2sgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Vuc3RhY2tffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { searchSorted } from './search_sorted';\n/**\n * Searches for where a value would go in a sorted sequence.\n *\n * This is not a method for checking containment (like javascript in).\n *\n * The typical use case for this operation is \"binning\", \"bucketing\", or\n * \"discretizing\". The values are assigned to bucket-indices based on the edges\n * listed in 'sortedSequence'. This operation returns the bucket-index for each\n * value.\n *\n * The index returned corresponds to the first edge greater than the value.\n *\n * The axis is not settable for this operation. It always operates on the\n * innermost dimension (axis=-1). The operation will accept any number of outer\n * dimensions.\n *\n * Note: This operation assumes that 'upperBound' is sorted along the\n * innermost axis, maybe using 'sort(..., axis=-1)'. If the sequence is not\n * sorted no error is raised and the content of the returned tensor is not well\n * defined.\n *\n * ```js\n * const seq = tf.tensor1d([0, 3, 9, 10, 10]);\n * const values = tf.tensor1d([0, 4, 10]);\n * const result = tf.upperBound(seq, values);\n * result.print(); // [1, 2, 5]\n * ```\n * @param sortedSequence: N-D. Sorted sequence.\n * @param values: N-D. Search values.\n * @return An N-D int32 tensor the size of values containing the result of\n * applying upper bound to each value. The result is not a global index to\n * the entire Tensor, but the index in the last dimension.\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nexport function upperBound(sortedSequence, values) {\n return searchSorted(sortedSequence, values, 'right');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBwZXJfYm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy91cHBlcl9ib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3RCLGNBQWlDLEVBQUUsTUFBeUI7SUFDOUQsT0FBTyxZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzZWFyY2hTb3J0ZWR9IGZyb20gJy4vc2VhcmNoX3NvcnRlZCc7XG5cbi8qKlxuICogU2VhcmNoZXMgZm9yIHdoZXJlIGEgdmFsdWUgd291bGQgZ28gaW4gYSBzb3J0ZWQgc2VxdWVuY2UuXG4gKlxuICogVGhpcyBpcyBub3QgYSBtZXRob2QgZm9yIGNoZWNraW5nIGNvbnRhaW5tZW50IChsaWtlIGphdmFzY3JpcHQgaW4pLlxuICpcbiAqIFRoZSB0eXBpY2FsIHVzZSBjYXNlIGZvciB0aGlzIG9wZXJhdGlvbiBpcyBcImJpbm5pbmdcIiwgXCJidWNrZXRpbmdcIiwgb3JcbiAqIFwiZGlzY3JldGl6aW5nXCIuIFRoZSB2YWx1ZXMgYXJlIGFzc2lnbmVkIHRvIGJ1Y2tldC1pbmRpY2VzIGJhc2VkIG9uIHRoZSBlZGdlc1xuICogbGlzdGVkIGluICdzb3J0ZWRTZXF1ZW5jZScuIFRoaXMgb3BlcmF0aW9uIHJldHVybnMgdGhlIGJ1Y2tldC1pbmRleCBmb3IgZWFjaFxuICogdmFsdWUuXG4gKlxuICogVGhlIGluZGV4IHJldHVybmVkIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCBlZGdlIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUuXG4gKlxuICogVGhlIGF4aXMgaXMgbm90IHNldHRhYmxlIGZvciB0aGlzIG9wZXJhdGlvbi4gSXQgYWx3YXlzIG9wZXJhdGVzIG9uIHRoZVxuICogaW5uZXJtb3N0IGRpbWVuc2lvbiAoYXhpcz0tMSkuIFRoZSBvcGVyYXRpb24gd2lsbCBhY2NlcHQgYW55IG51bWJlciBvZiBvdXRlclxuICogZGltZW5zaW9ucy5cbiAqXG4gKiBOb3RlOiBUaGlzIG9wZXJhdGlvbiBhc3N1bWVzIHRoYXQgJ3VwcGVyQm91bmQnIGlzIHNvcnRlZCBhbG9uZyB0aGVcbiAqIGlubmVybW9zdCBheGlzLCBtYXliZSB1c2luZyAnc29ydCguLi4sIGF4aXM9LTEpJy4gSWYgdGhlIHNlcXVlbmNlIGlzIG5vdFxuICogc29ydGVkIG5vIGVycm9yIGlzIHJhaXNlZCBhbmQgdGhlIGNvbnRlbnQgb2YgdGhlIHJldHVybmVkIHRlbnNvciBpcyBub3Qgd2VsbFxuICogZGVmaW5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3Qgc2VxID0gdGYudGVuc29yMWQoWzAsIDMsIDksIDEwLCAxMF0pO1xuICogY29uc3QgdmFsdWVzID0gdGYudGVuc29yMWQoWzAsIDQsIDEwXSk7XG4gKiBjb25zdCByZXN1bHQgPSB0Zi51cHBlckJvdW5kKHNlcSwgdmFsdWVzKTtcbiAqIHJlc3VsdC5wcmludCgpOyAvLyBbMSwgMiwgNV1cbiAqIGBgYFxuICogQHBhcmFtIHNvcnRlZFNlcXVlbmNlOiBOLUQuIFNvcnRlZCBzZXF1ZW5jZS5cbiAqIEBwYXJhbSB2YWx1ZXM6IE4tRC4gU2VhcmNoIHZhbHVlcy5cbiAqIEByZXR1cm4gQW4gTi1EIGludDMyIHRlbnNvciB0aGUgc2l6ZSBvZiB2YWx1ZXMgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mXG4gKiAgICAgYXBwbHlpbmcgdXBwZXIgYm91bmQgdG8gZWFjaCB2YWx1ZS4gVGhlIHJlc3VsdCBpcyBub3QgYSBnbG9iYWwgaW5kZXggdG9cbiAqICAgICB0aGUgZW50aXJlIFRlbnNvciwgYnV0IHRoZSBpbmRleCBpbiB0aGUgbGFzdCBkaW1lbnNpb24uXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdFdmFsdWF0aW9uJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwcGVyQm91bmQoXG4gICAgc29ydGVkU2VxdWVuY2U6IFRlbnNvcnxUZW5zb3JMaWtlLCB2YWx1ZXM6IFRlbnNvcnxUZW5zb3JMaWtlKTogVGVuc29yIHtcbiAgcmV0dXJuIHNlYXJjaFNvcnRlZChzb3J0ZWRTZXF1ZW5jZSwgdmFsdWVzLCAncmlnaHQnKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\n/**\n * Creates a new variable with the provided initial value.\n * ```js\n * const x = tf.variable(tf.tensor([1, 2, 3]));\n * x.assign(tf.tensor([4, 5, 6]));\n *\n * x.print();\n * ```\n *\n * @param initialValue Initial value for the tensor.\n * @param trainable If true, optimizers are allowed to update it.\n * @param name Name of the variable. Defaults to a unique id.\n * @param dtype If set, initialValue will be converted to the given type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function variable(initialValue, trainable = true, name, dtype) {\n return ENGINE.makeVariable(initialValue, trainable, name, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy92YXJpYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBSWpDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3BCLFlBQXVCLEVBQUUsU0FBUyxHQUFHLElBQUksRUFBRSxJQUFhLEVBQ3hELEtBQWdCO0lBQ2xCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQ2hELENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1RlbnNvciwgVmFyaWFibGV9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBSYW5rfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2YXJpYWJsZSB3aXRoIHRoZSBwcm92aWRlZCBpbml0aWFsIHZhbHVlLlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi52YXJpYWJsZSh0Zi50ZW5zb3IoWzEsIDIsIDNdKSk7XG4gKiB4LmFzc2lnbih0Zi50ZW5zb3IoWzQsIDUsIDZdKSk7XG4gKlxuICogeC5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSBJbml0aWFsIHZhbHVlIGZvciB0aGUgdGVuc29yLlxuICogQHBhcmFtIHRyYWluYWJsZSBJZiB0cnVlLCBvcHRpbWl6ZXJzIGFyZSBhbGxvd2VkIHRvIHVwZGF0ZSBpdC5cbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLiBEZWZhdWx0cyB0byBhIHVuaXF1ZSBpZC5cbiAqIEBwYXJhbSBkdHlwZSBJZiBzZXQsIGluaXRpYWxWYWx1ZSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZTxSIGV4dGVuZHMgUmFuaz4oXG4gICAgaW5pdGlhbFZhbHVlOiBUZW5zb3I8Uj4sIHRyYWluYWJsZSA9IHRydWUsIG5hbWU/OiBzdHJpbmcsXG4gICAgZHR5cGU/OiBEYXRhVHlwZSk6IFZhcmlhYmxlPFI+IHtcbiAgcmV0dXJuIEVOR0lORS5tYWtlVmFyaWFibGUoaW5pdGlhbFZhbHVlLCB0cmFpbmFibGUsIG5hbWUsIGR0eXBlKSBhc1xuICAgICAgVmFyaWFibGU8Uj47XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/** An implementation of the Where kernel shared between cpu and webgl */\nimport { buffer } from '../ops/buffer';\nexport function whereImpl(condShape, condVals) {\n const indices = [];\n for (let i = 0; i < condVals.length; i++) {\n if (condVals[i]) {\n indices.push(i);\n }\n }\n const inBuffer = buffer(condShape, 'int32');\n const out = buffer([indices.length, condShape.length], 'int32');\n for (let i = 0; i < indices.length; i++) {\n const loc = inBuffer.indexToLoc(indices[i]);\n const offset = i * condShape.length;\n out.values.set(loc, offset);\n }\n return out.toTensor();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmVfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvYmFja2VuZHMvd2hlcmVfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCx5RUFBeUU7QUFFekUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlyQyxNQUFNLFVBQVUsU0FBUyxDQUFDLFNBQW1CLEVBQUUsUUFBb0I7SUFDakUsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQjtLQUNGO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM3QjtJQUNELE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBYyxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV2hlcmUga2VybmVsIHNoYXJlZCBiZXR3ZWVuIGNwdSBhbmQgd2ViZ2wgKi9cblxuaW1wb3J0IHtidWZmZXJ9IGZyb20gJy4uL29wcy9idWZmZXInO1xuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VHlwZWRBcnJheX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gd2hlcmVJbXBsKGNvbmRTaGFwZTogbnVtYmVyW10sIGNvbmRWYWxzOiBUeXBlZEFycmF5KTogVGVuc29yMkQge1xuICBjb25zdCBpbmRpY2VzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY29uZFZhbHNbaV0pIHtcbiAgICAgIGluZGljZXMucHVzaChpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBpbkJ1ZmZlciA9IGJ1ZmZlcihjb25kU2hhcGUsICdpbnQzMicpO1xuXG4gIGNvbnN0IG91dCA9IGJ1ZmZlcihbaW5kaWNlcy5sZW5ndGgsIGNvbmRTaGFwZS5sZW5ndGhdLCAnaW50MzInKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbG9jID0gaW5CdWZmZXIuaW5kZXhUb0xvYyhpbmRpY2VzW2ldKTtcbiAgICBjb25zdCBvZmZzZXQgPSBpICogY29uZFNoYXBlLmxlbmd0aDtcbiAgICBvdXQudmFsdWVzLnNldChsb2MsIG9mZnNldCk7XG4gIH1cbiAgcmV0dXJuIG91dC50b1RlbnNvcigpIGFzIFRlbnNvcjJEO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { whereImpl } from '../backends/where_impl';\nimport { convertToTensor } from '../tensor_util_env';\n/**\n * Returns the coordinates of true elements of condition.\n *\n * The coordinates are returned in a 2-D tensor where the first dimension (rows)\n * represents the number of true elements, and the second dimension (columns)\n * represents the coordinates of the true elements. Keep in mind, the shape of\n * the output tensor can vary depending on how many true values there are in\n * input. Indices are output in row-major order. The resulting tensor has the\n * shape `[numTrueElems, condition.rank]`.\n *\n * This is analogous to calling the python `tf.where(cond)` without an x or y.\n *\n * ```js\n * const cond = tf.tensor1d([false, false, true], 'bool');\n * const result = await tf.whereAsync(cond);\n * result.print();\n * ```\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nasync function whereAsync_(condition) {\n const $condition = convertToTensor(condition, 'condition', 'whereAsync', 'bool');\n const vals = await $condition.data();\n const res = whereImpl($condition.shape, vals);\n if (condition !== $condition) {\n $condition.dispose();\n }\n return res;\n}\nexport const whereAsync = whereAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmVfYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy93aGVyZV9hc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsS0FBSyxVQUFVLFdBQVcsQ0FBQyxTQUE0QjtJQUNyRCxNQUFNLFVBQVUsR0FDWixlQUFlLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFO1FBQzVCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN0QjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge3doZXJlSW1wbH0gZnJvbSAnLi4vYmFja2VuZHMvd2hlcmVfaW1wbCc7XG5pbXBvcnQge1RlbnNvciwgVGVuc29yMkR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIG9mIHRydWUgZWxlbWVudHMgb2YgY29uZGl0aW9uLlxuICpcbiAqIFRoZSBjb29yZGluYXRlcyBhcmUgcmV0dXJuZWQgaW4gYSAyLUQgdGVuc29yIHdoZXJlIHRoZSBmaXJzdCBkaW1lbnNpb24gKHJvd3MpXG4gKiByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgdHJ1ZSBlbGVtZW50cywgYW5kIHRoZSBzZWNvbmQgZGltZW5zaW9uIChjb2x1bW5zKVxuICogcmVwcmVzZW50cyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHRydWUgZWxlbWVudHMuIEtlZXAgaW4gbWluZCwgdGhlIHNoYXBlIG9mXG4gKiB0aGUgb3V0cHV0IHRlbnNvciBjYW4gdmFyeSBkZXBlbmRpbmcgb24gaG93IG1hbnkgdHJ1ZSB2YWx1ZXMgdGhlcmUgYXJlIGluXG4gKiBpbnB1dC4gSW5kaWNlcyBhcmUgb3V0cHV0IGluIHJvdy1tYWpvciBvcmRlci4gVGhlIHJlc3VsdGluZyB0ZW5zb3IgaGFzIHRoZVxuICogc2hhcGUgYFtudW1UcnVlRWxlbXMsIGNvbmRpdGlvbi5yYW5rXWAuXG4gKlxuICogVGhpcyBpcyBhbmFsb2dvdXMgdG8gY2FsbGluZyB0aGUgcHl0aG9uIGB0Zi53aGVyZShjb25kKWAgd2l0aG91dCBhbiB4IG9yIHkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGNvbmQgPSB0Zi50ZW5zb3IxZChbZmFsc2UsIGZhbHNlLCB0cnVlXSwgJ2Jvb2wnKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRmLndoZXJlQXN5bmMoY29uZCk7XG4gKiByZXN1bHQucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0xvZ2ljYWwnfVxuICovXG5hc3luYyBmdW5jdGlvbiB3aGVyZUFzeW5jXyhjb25kaXRpb246IFRlbnNvcnxUZW5zb3JMaWtlKTogUHJvbWlzZTxUZW5zb3IyRD4ge1xuICBjb25zdCAkY29uZGl0aW9uID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihjb25kaXRpb24sICdjb25kaXRpb24nLCAnd2hlcmVBc3luYycsICdib29sJyk7XG4gIGNvbnN0IHZhbHMgPSBhd2FpdCAkY29uZGl0aW9uLmRhdGEoKTtcbiAgY29uc3QgcmVzID0gd2hlcmVJbXBsKCRjb25kaXRpb24uc2hhcGUsIHZhbHMpO1xuICBpZiAoY29uZGl0aW9uICE9PSAkY29uZGl0aW9uKSB7XG4gICAgJGNvbmRpdGlvbi5kaXNwb3NlKCk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IHdoZXJlQXN5bmMgPSB3aGVyZUFzeW5jXztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { gather } from './gather';\nimport { reshape } from './reshape';\nimport { squeeze } from './squeeze';\nimport { whereAsync } from './where_async';\n/**\n * Apply boolean mask to tensor.\n *\n * ```js\n * const tensor = tf.tensor2d([1, 2, 3, 4, 5, 6], [3, 2]);\n * const mask = tf.tensor1d([1, 0, 1], 'bool');\n * const result = await tf.booleanMaskAsync(tensor, mask);\n * result.print();\n * ```\n *\n * @param tensor N-D tensor.\n * @param mask K-D boolean tensor, K <= N and K must be known statically.\n * @param axis A 0-D int Tensor representing the axis in tensor to mask from.\n * By default, axis is 0 which will mask from the first dimension.\n * Otherwise K + axis <= N.\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nasync function booleanMaskAsync_(tensor, mask, axis) {\n const $tensor = convertToTensor(tensor, 'tensor', 'boolMask');\n const $mask = convertToTensor(mask, 'mask', 'boolMask', 'bool');\n const axisFrom = axis == null ? 0 : axis;\n const maskDim = $mask.rank;\n const tensorShape = $tensor.shape;\n util.assert(maskDim > 0, () => 'mask cannot be scalar');\n util.assertShapesMatch(tensorShape.slice(axisFrom, axisFrom + maskDim), $mask.shape, `mask's shape must match the first K dimensions of tensor's shape,`);\n let leadingSize = 1;\n for (let i = axisFrom; i < axisFrom + maskDim; i++) {\n leadingSize *= tensorShape[i];\n }\n const targetTensorShape = tensorShape.slice(0, axisFrom)\n .concat([leadingSize], tensorShape.slice(axisFrom + maskDim));\n const reshapedTensor = reshape($tensor, targetTensorShape);\n const reshapedMask = reshape($mask, [-1]);\n const positivePositions = await whereAsync(reshapedMask);\n const indices = squeeze(positivePositions, [1]);\n const res = gather(reshapedTensor, indices, axisFrom);\n // Ensure no memory leak.\n if (tensor !== $tensor) {\n $tensor.dispose();\n }\n if (mask !== $mask) {\n $mask.dispose();\n }\n indices.dispose();\n reshapedTensor.dispose();\n reshapedMask.dispose();\n positivePositions.dispose();\n return res;\n}\nexport const booleanMaskAsync = booleanMaskAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbl9tYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYm9vbGVhbl9tYXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILEtBQUssVUFBVSxpQkFBaUIsQ0FDNUIsTUFBeUIsRUFBRSxJQUF1QixFQUNsRCxJQUFhO0lBQ2YsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWhFLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDM0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsaUJBQWlCLENBQ2xCLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUM1RCxtRUFBbUUsQ0FBQyxDQUFDO0lBRXpFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEdBQUcsUUFBUSxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsRCxXQUFXLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsTUFBTSxpQkFBaUIsR0FDbkIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO1NBQ3pCLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXRELHlCQUF5QjtJQUN6QixJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7UUFDdEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0lBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQ2xCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNqQjtJQUNELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZCLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTVCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2dhdGhlcn0gZnJvbSAnLi9nYXRoZXInO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuaW1wb3J0IHtzcXVlZXplfSBmcm9tICcuL3NxdWVlemUnO1xuaW1wb3J0IHt3aGVyZUFzeW5jfSBmcm9tICcuL3doZXJlX2FzeW5jJztcblxuLyoqXG4gKiBBcHBseSBib29sZWFuIG1hc2sgdG8gdGVuc29yLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB0ZW5zb3IgPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNCwgNSwgNl0sIFszLCAyXSk7XG4gKiBjb25zdCBtYXNrID0gdGYudGVuc29yMWQoWzEsIDAsIDFdLCAnYm9vbCcpO1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgdGYuYm9vbGVhbk1hc2tBc3luYyh0ZW5zb3IsIG1hc2spO1xuICogcmVzdWx0LnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdGVuc29yIE4tRCB0ZW5zb3IuXG4gKiBAcGFyYW0gbWFzayBLLUQgYm9vbGVhbiB0ZW5zb3IsIEsgPD0gTiBhbmQgSyBtdXN0IGJlIGtub3duIHN0YXRpY2FsbHkuXG4gKiBAcGFyYW0gYXhpcyBBIDAtRCBpbnQgVGVuc29yIHJlcHJlc2VudGluZyB0aGUgYXhpcyBpbiB0ZW5zb3IgdG8gbWFzayBmcm9tLlxuICogICAgIEJ5IGRlZmF1bHQsIGF4aXMgaXMgMCB3aGljaCB3aWxsIG1hc2sgZnJvbSB0aGUgZmlyc3QgZGltZW5zaW9uLlxuICogICAgIE90aGVyd2lzZSBLICsgYXhpcyA8PSBOLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5hc3luYyBmdW5jdGlvbiBib29sZWFuTWFza0FzeW5jXyhcbiAgICB0ZW5zb3I6IFRlbnNvcnxUZW5zb3JMaWtlLCBtYXNrOiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgICBheGlzPzogbnVtYmVyKTogUHJvbWlzZTxUZW5zb3I+IHtcbiAgY29uc3QgJHRlbnNvciA9IGNvbnZlcnRUb1RlbnNvcih0ZW5zb3IsICd0ZW5zb3InLCAnYm9vbE1hc2snKTtcbiAgY29uc3QgJG1hc2sgPSBjb252ZXJ0VG9UZW5zb3IobWFzaywgJ21hc2snLCAnYm9vbE1hc2snLCAnYm9vbCcpO1xuXG4gIGNvbnN0IGF4aXNGcm9tID0gYXhpcyA9PSBudWxsID8gMCA6IGF4aXM7XG4gIGNvbnN0IG1hc2tEaW0gPSAkbWFzay5yYW5rO1xuICBjb25zdCB0ZW5zb3JTaGFwZSA9ICR0ZW5zb3Iuc2hhcGU7XG5cbiAgdXRpbC5hc3NlcnQobWFza0RpbSA+IDAsICgpID0+ICdtYXNrIGNhbm5vdCBiZSBzY2FsYXInKTtcbiAgdXRpbC5hc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgIHRlbnNvclNoYXBlLnNsaWNlKGF4aXNGcm9tLCBheGlzRnJvbSArIG1hc2tEaW0pLCAkbWFzay5zaGFwZSxcbiAgICAgIGBtYXNrJ3Mgc2hhcGUgbXVzdCBtYXRjaCB0aGUgZmlyc3QgSyBkaW1lbnNpb25zIG9mIHRlbnNvcidzIHNoYXBlLGApO1xuXG4gIGxldCBsZWFkaW5nU2l6ZSA9IDE7XG4gIGZvciAobGV0IGkgPSBheGlzRnJvbTsgaSA8IGF4aXNGcm9tICsgbWFza0RpbTsgaSsrKSB7XG4gICAgbGVhZGluZ1NpemUgKj0gdGVuc29yU2hhcGVbaV07XG4gIH1cbiAgY29uc3QgdGFyZ2V0VGVuc29yU2hhcGUgPVxuICAgICAgdGVuc29yU2hhcGUuc2xpY2UoMCwgYXhpc0Zyb20pXG4gICAgICAgICAgLmNvbmNhdChbbGVhZGluZ1NpemVdLCB0ZW5zb3JTaGFwZS5zbGljZShheGlzRnJvbSArIG1hc2tEaW0pKTtcbiAgY29uc3QgcmVzaGFwZWRUZW5zb3IgPSByZXNoYXBlKCR0ZW5zb3IsIHRhcmdldFRlbnNvclNoYXBlKTtcbiAgY29uc3QgcmVzaGFwZWRNYXNrID0gcmVzaGFwZSgkbWFzaywgWy0xXSk7XG4gIGNvbnN0IHBvc2l0aXZlUG9zaXRpb25zID0gYXdhaXQgd2hlcmVBc3luYyhyZXNoYXBlZE1hc2spO1xuICBjb25zdCBpbmRpY2VzID0gc3F1ZWV6ZShwb3NpdGl2ZVBvc2l0aW9ucywgWzFdKTtcblxuICBjb25zdCByZXMgPSBnYXRoZXIocmVzaGFwZWRUZW5zb3IsIGluZGljZXMsIGF4aXNGcm9tKTtcblxuICAvLyBFbnN1cmUgbm8gbWVtb3J5IGxlYWsuXG4gIGlmICh0ZW5zb3IgIT09ICR0ZW5zb3IpIHtcbiAgICAkdGVuc29yLmRpc3Bvc2UoKTtcbiAgfVxuICBpZiAobWFzayAhPT0gJG1hc2spIHtcbiAgICAkbWFzay5kaXNwb3NlKCk7XG4gIH1cbiAgaW5kaWNlcy5kaXNwb3NlKCk7XG4gIHJlc2hhcGVkVGVuc29yLmRpc3Bvc2UoKTtcbiAgcmVzaGFwZWRNYXNrLmRpc3Bvc2UoKTtcbiAgcG9zaXRpdmVQb3NpdGlvbnMuZGlzcG9zZSgpO1xuXG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBib29sZWFuTWFza0FzeW5jID0gYm9vbGVhbk1hc2tBc3luY187XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { add } from './add';\nimport { div } from './div';\nimport { mul } from './mul';\nimport { op } from './operation';\nimport { pow } from './pow';\nimport { scalar } from './scalar';\nimport { sub } from './sub';\n/**\n * Compute the moving average of a variable.\n *\n * Without zeroDebias, the moving average operation is defined by:\n * `v += delta`\n * where\n * `delta = (1 - decay) * (x - v)`\n *\n * With zeroDebias (default), the `delta` term is scaled to debias the\n * effect of the (assumed) zero-initialization of `v`.\n * `delta /= (1 - decay ^ step)`\n *\n * For more details on the zero-debiasing algorithm, see:\n * https://arxiv.org/abs/1412.6980\n *\n * Note that this function is completely stateless and does not keep track of\n * step count. The step count needs to be maintained by the caller and passed\n * in as `step`.\n *\n * @param v The current moving average value.\n * @param x New input value, must have the same shape and dtype as `v`.\n * @param decay The decay factor. Typical values are 0.95 and 0.99.\n * @param step Step count.\n * @param zeroDebias: Whether zeroDebias is to be performed (default: `true`).\n * @returns The new moving average value.\n *\n * @doc {heading: 'Operations', subheading: 'Moving Average'}\n */\nfunction movingAverage_(v, x, decay, step, zeroDebias = true) {\n const $v = convertToTensor(v, 'v', 'movingAverage');\n const $x = convertToTensor(x, 'x', 'movingAverage');\n const $decay = convertToTensor(decay, 'decay', 'movingAverage');\n assertTypesMatch($v, $x);\n util.assert(util.arraysEqual($v.shape, $x.shape), () => 'Shape mismatch in v and x');\n const one = scalar(1);\n const oneMinusDecay = sub(one, $decay);\n let update = mul(sub($x, $v), oneMinusDecay);\n if (zeroDebias) {\n util.assert(step != null, () => 'When using zeroDebias: true, step is required.');\n const $step = convertToTensor(step, 'step', 'movingAverage');\n update = div(update, sub(one, pow($decay, $step)));\n }\n return add($v, update);\n}\nexport const movingAverage = /* @__PURE__ */ op({ movingAverage_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nX2F2ZXJhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tb3ZpbmdfYXZlcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUUxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBUyxjQUFjLENBQ25CLENBQWUsRUFBRSxDQUFlLEVBQUUsS0FBb0IsRUFDdEQsSUFBb0IsRUFBRSxVQUFVLEdBQUcsSUFBSTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNwRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUVoRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFFN0UsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFdkMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDN0MsSUFBSSxVQUFVLEVBQUU7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUMxRSxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM3RCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BEO0lBQ0QsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7U2NhbGFyLCBUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2Fzc2VydFR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2FkZH0gZnJvbSAnLi9hZGQnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4vZGl2JztcbmltcG9ydCB7bXVsfSBmcm9tICcuL211bCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Bvd30gZnJvbSAnLi9wb3cnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4vc2NhbGFyJztcbmltcG9ydCB7c3VifSBmcm9tICcuL3N1Yic7XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbW92aW5nIGF2ZXJhZ2Ugb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBXaXRob3V0IHplcm9EZWJpYXMsIHRoZSBtb3ZpbmcgYXZlcmFnZSBvcGVyYXRpb24gaXMgZGVmaW5lZCBieTpcbiAqICAgYHYgKz0gZGVsdGFgXG4gKiB3aGVyZVxuICogICBgZGVsdGEgPSAoMSAtIGRlY2F5KSAqICh4IC0gdilgXG4gKlxuICogV2l0aCB6ZXJvRGViaWFzIChkZWZhdWx0KSwgdGhlIGBkZWx0YWAgdGVybSBpcyBzY2FsZWQgdG8gZGViaWFzIHRoZVxuICogZWZmZWN0IG9mIHRoZSAoYXNzdW1lZCkgemVyby1pbml0aWFsaXphdGlvbiBvZiBgdmAuXG4gKiAgIGBkZWx0YSAvPSAoMSAtIGRlY2F5IF4gc3RlcClgXG4gKlxuICogRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgemVyby1kZWJpYXNpbmcgYWxnb3JpdGhtLCBzZWU6XG4gKiAgIGh0dHBzOi8vYXJ4aXYub3JnL2Ficy8xNDEyLjY5ODBcbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjb21wbGV0ZWx5IHN0YXRlbGVzcyBhbmQgZG9lcyBub3Qga2VlcCB0cmFjayBvZlxuICogc3RlcCBjb3VudC4gVGhlIHN0ZXAgY291bnQgbmVlZHMgdG8gYmUgbWFpbnRhaW5lZCBieSB0aGUgY2FsbGVyIGFuZCBwYXNzZWRcbiAqIGluIGFzIGBzdGVwYC5cbiAqXG4gKiBAcGFyYW0gdiBUaGUgY3VycmVudCBtb3ZpbmcgYXZlcmFnZSB2YWx1ZS5cbiAqIEBwYXJhbSB4IE5ldyBpbnB1dCB2YWx1ZSwgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFuZCBkdHlwZSBhcyBgdmAuXG4gKiBAcGFyYW0gZGVjYXkgVGhlIGRlY2F5IGZhY3Rvci4gVHlwaWNhbCB2YWx1ZXMgYXJlIDAuOTUgYW5kIDAuOTkuXG4gKiBAcGFyYW0gc3RlcCBTdGVwIGNvdW50LlxuICogQHBhcmFtIHplcm9EZWJpYXM6IFdoZXRoZXIgemVyb0RlYmlhcyBpcyB0byBiZSBwZXJmb3JtZWQgKGRlZmF1bHQ6IGB0cnVlYCkuXG4gKiBAcmV0dXJucyBUaGUgbmV3IG1vdmluZyBhdmVyYWdlIHZhbHVlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01vdmluZyBBdmVyYWdlJ31cbiAqL1xuZnVuY3Rpb24gbW92aW5nQXZlcmFnZV88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgdjogVHxUZW5zb3JMaWtlLCB4OiBUfFRlbnNvckxpa2UsIGRlY2F5OiBudW1iZXJ8U2NhbGFyLFxuICAgIHN0ZXA/OiBudW1iZXJ8U2NhbGFyLCB6ZXJvRGViaWFzID0gdHJ1ZSk6IFQge1xuICBjb25zdCAkdiA9IGNvbnZlcnRUb1RlbnNvcih2LCAndicsICdtb3ZpbmdBdmVyYWdlJyk7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ21vdmluZ0F2ZXJhZ2UnKTtcbiAgY29uc3QgJGRlY2F5ID0gY29udmVydFRvVGVuc29yKGRlY2F5LCAnZGVjYXknLCAnbW92aW5nQXZlcmFnZScpO1xuXG4gIGFzc2VydFR5cGVzTWF0Y2goJHYsICR4KTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB1dGlsLmFycmF5c0VxdWFsKCR2LnNoYXBlLCAkeC5zaGFwZSksICgpID0+ICdTaGFwZSBtaXNtYXRjaCBpbiB2IGFuZCB4Jyk7XG5cbiAgY29uc3Qgb25lID0gc2NhbGFyKDEpO1xuICBjb25zdCBvbmVNaW51c0RlY2F5ID0gc3ViKG9uZSwgJGRlY2F5KTtcblxuICBsZXQgdXBkYXRlID0gbXVsKHN1YigkeCwgJHYpLCBvbmVNaW51c0RlY2F5KTtcbiAgaWYgKHplcm9EZWJpYXMpIHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgc3RlcCAhPSBudWxsLCAoKSA9PiAnV2hlbiB1c2luZyB6ZXJvRGViaWFzOiB0cnVlLCBzdGVwIGlzIHJlcXVpcmVkLicpO1xuICAgIGNvbnN0ICRzdGVwID0gY29udmVydFRvVGVuc29yKHN0ZXAsICdzdGVwJywgJ21vdmluZ0F2ZXJhZ2UnKTtcbiAgICB1cGRhdGUgPSBkaXYodXBkYXRlLCBzdWIob25lLCBwb3coJGRlY2F5LCAkc3RlcCkpKTtcbiAgfVxuICByZXR1cm4gYWRkKCR2LCB1cGRhdGUpO1xufVxuXG5leHBvcnQgY29uc3QgbW92aW5nQXZlcmFnZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bW92aW5nQXZlcmFnZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ScatterNd } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { op } from './operation';\nimport * as scatter_nd_util from './scatter_nd_util';\n/**\n * Creates a new tensor by applying sparse updates to individual\n * values or slices within a zero tensor of the given shape tensor according to\n * indices. This operator is the inverse of the `tf.gatherND` operator which\n * extracts values or slices from a given tensor.\n *\n * ```js\n * const indices = tf.tensor2d([4, 3, 1, 7], [4, 1], 'int32');\n * const updates = tf.tensor1d([9, 10, 11, 12]);\n * const shape = [8];\n * tf.scatterND(indices, updates, shape).print() //[0, 11, 0, 10, 9, 0, 0, 12]\n * ```\n *\n * @param indices The tensor contains the indices into the output tensor.\n * @param updates The tensor contains the value for the indices.\n * @param shape: The shape of the output tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nfunction scatterND_(indices, updates, shape) {\n assertNonNegativeIntegerDimensions(shape);\n const $indices = convertToTensor(indices, 'indices', 'scatterND', 'int32');\n const $updates = convertToTensor(updates, 'updates', 'scatterND');\n scatter_nd_util.validateInput($updates, $indices, shape);\n const inputs = { indices: $indices, updates: $updates };\n const attrs = { shape };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(ScatterNd, inputs, attrs);\n}\nexport const scatterND = /* @__PURE__ */ op({ scatterND_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhdHRlcl9uZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NjYXR0ZXJfbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDO0FBSTNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEtBQUssZUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxTQUFTLFVBQVUsQ0FDZixPQUEwQixFQUFFLE9BQTBCLEVBQ3RELEtBQWtCO0lBQ3BCLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNsRSxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFekQsTUFBTSxNQUFNLEdBQW9CLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFDdkUsTUFBTSxLQUFLLEdBQW1CLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFFdEMsMERBQTBEO0lBQzFELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDWixTQUFTLEVBQUUsTUFBbUMsRUFDOUMsS0FBZ0MsQ0FBYyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTY2F0dGVyTmQsIFNjYXR0ZXJOZEF0dHJzLCBTY2F0dGVyTmRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rLCBTaGFwZU1hcCwgVGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQgKiBhcyBzY2F0dGVyX25kX3V0aWwgZnJvbSAnLi9zY2F0dGVyX25kX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGVuc29yIGJ5IGFwcGx5aW5nIHNwYXJzZSB1cGRhdGVzIHRvIGluZGl2aWR1YWxcbiAqIHZhbHVlcyBvciBzbGljZXMgd2l0aGluIGEgemVybyB0ZW5zb3Igb2YgdGhlIGdpdmVuIHNoYXBlIHRlbnNvciBhY2NvcmRpbmcgdG9cbiAqIGluZGljZXMuIFRoaXMgb3BlcmF0b3IgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGB0Zi5nYXRoZXJORGAgb3BlcmF0b3Igd2hpY2hcbiAqIGV4dHJhY3RzIHZhbHVlcyBvciBzbGljZXMgZnJvbSBhIGdpdmVuIHRlbnNvci5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgaW5kaWNlcyA9IHRmLnRlbnNvcjJkKFs0LCAzLCAxLCA3XSwgWzQsIDFdLCAnaW50MzInKTtcbiAqIGNvbnN0IHVwZGF0ZXMgPSB0Zi50ZW5zb3IxZChbOSwgMTAsIDExLCAxMl0pO1xuICogY29uc3Qgc2hhcGUgPSBbOF07XG4gKiB0Zi5zY2F0dGVyTkQoaW5kaWNlcywgdXBkYXRlcywgc2hhcGUpLnByaW50KCkgLy9bMCwgMTEsIDAsIDEwLCA5LCAwLCAwLCAxMl1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBpbmRpY2VzIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIGluZGljZXMgaW50byB0aGUgb3V0cHV0IHRlbnNvci5cbiAqIEBwYXJhbSB1cGRhdGVzIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIHZhbHVlIGZvciB0aGUgaW5kaWNlcy5cbiAqIEBwYXJhbSBzaGFwZTogVGhlIHNoYXBlIG9mIHRoZSBvdXRwdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5mdW5jdGlvbiBzY2F0dGVyTkRfPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBpbmRpY2VzOiBUZW5zb3J8VGVuc29yTGlrZSwgdXBkYXRlczogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdKTogVGVuc29yPFI+IHtcbiAgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG4gIGNvbnN0ICRpbmRpY2VzID0gY29udmVydFRvVGVuc29yKGluZGljZXMsICdpbmRpY2VzJywgJ3NjYXR0ZXJORCcsICdpbnQzMicpO1xuICBjb25zdCAkdXBkYXRlcyA9IGNvbnZlcnRUb1RlbnNvcih1cGRhdGVzLCAndXBkYXRlcycsICdzY2F0dGVyTkQnKTtcbiAgc2NhdHRlcl9uZF91dGlsLnZhbGlkYXRlSW5wdXQoJHVwZGF0ZXMsICRpbmRpY2VzLCBzaGFwZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBTY2F0dGVyTmRJbnB1dHMgPSB7aW5kaWNlczogJGluZGljZXMsIHVwZGF0ZXM6ICR1cGRhdGVzfTtcbiAgY29uc3QgYXR0cnM6IFNjYXR0ZXJOZEF0dHJzID0ge3NoYXBlfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgIFNjYXR0ZXJOZCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcjxSPjtcbn1cblxuZXhwb3J0IGNvbnN0IHNjYXR0ZXJORCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2NhdHRlck5EX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SparseToDense } from '../kernel_names';\nimport * as sparse_to_dense from '../ops/sparse_to_dense_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { op } from './operation';\n/**\n * Converts a sparse representation into a dense tensor.\n *\n * Builds an array dense with shape outputShape such that:\n *\n * // If sparseIndices is scalar\n * dense[i] = (i == sparseIndices ? sparseValues : defaultValue)\n *\n * // If sparseIndices is a vector, then for each i\n * dense[sparseIndices[i]] = sparseValues[i]\n *\n * // If sparseIndices is an n by d matrix, then for each i in [0, n)\n * dense[sparseIndices[i][0], ..., sparseIndices[i][d-1]] = sparseValues[i]\n * All other values in dense are set to defaultValue. If sparseValues is a\n * scalar, all sparse indices are set to this single value.\n *\n * If indices are repeated the final value is summed over all values for those\n * indices.\n *\n * ```js\n * const indices = tf.tensor1d([4, 5, 6, 1, 2, 3], 'int32');\n * const values = tf.tensor1d([10, 11, 12, 13, 14, 15], 'float32');\n * const shape = [8];\n * tf.sparseToDense(indices, values, shape).print();\n * ```\n *\n * @param sparseIndices A 0-D, 1-D, or 2-D Tensor of type int32.\n * sparseIndices[i] contains the complete index where sparseValues[i] will be\n * placed.\n * @param sparseValues A 0-D or 1-D Tensor. Values\n * corresponding to each row of sparseIndices, or a scalar value to be used for\n * all sparse indices.\n * @param outputShape Shape of the dense output tensor. The type is inferred.\n * @param defaultValue Scalar. Value to set for indices not specified in\n * sparseIndices. Defaults to zero.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction sparseToDense_(sparseIndices, sparseValues, outputShape, defaultValue = 0) {\n assertNonNegativeIntegerDimensions(outputShape);\n const $sparseIndices = convertToTensor(sparseIndices, 'sparseIndices', 'sparseToDense', 'int32');\n const $sparseValues = convertToTensor(sparseValues, 'sparseValues', 'sparseToDense', 'string_or_numeric');\n const $defaultValue = convertToTensor(defaultValue, 'defaultValue', 'sparseToDense', $sparseValues.dtype);\n sparse_to_dense.validateInput($sparseIndices, $sparseValues, outputShape, $defaultValue);\n const inputs = {\n sparseIndices: $sparseIndices,\n sparseValues: $sparseValues,\n defaultValue: $defaultValue\n };\n const attrs = { outputShape };\n return ENGINE.runKernel(SparseToDense, inputs, attrs);\n}\nexport const sparseToDense = /* @__PURE__ */ op({ sparseToDense_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3RvX2RlbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3BhcnNlX3RvX2RlbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGFBQWEsRUFBMEMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RixPQUFPLEtBQUssZUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBRy9ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILFNBQVMsY0FBYyxDQUNuQixhQUFnQyxFQUFFLFlBQStCLEVBQ2pFLFdBQXdCLEVBQUUsZUFBa0MsQ0FBQztJQUMvRCxrQ0FBa0MsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVoRCxNQUFNLGNBQWMsR0FDaEIsZUFBZSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FDakMsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN4RSxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQ2pDLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RSxlQUFlLENBQUMsYUFBYSxDQUN6QixjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUvRCxNQUFNLE1BQU0sR0FBd0I7UUFDbEMsYUFBYSxFQUFFLGNBQWM7UUFDN0IsWUFBWSxFQUFFLGFBQWE7UUFDM0IsWUFBWSxFQUFFLGFBQWE7S0FDNUIsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUF1QixFQUFDLFdBQVcsRUFBQyxDQUFDO0lBRWhELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsYUFBYSxFQUFFLE1BQW1DLEVBQ2xELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U3BhcnNlVG9EZW5zZSwgU3BhcnNlVG9EZW5zZUF0dHJzLCBTcGFyc2VUb0RlbnNlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQgKiBhcyBzcGFyc2VfdG9fZGVuc2UgZnJvbSAnLi4vb3BzL3NwYXJzZV90b19kZW5zZV91dGlsJztcbmltcG9ydCB7U2NhbGFyLCBUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1JhbmssIFNjYWxhckxpa2UsIFNoYXBlTWFwLCBUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNwYXJzZSByZXByZXNlbnRhdGlvbiBpbnRvIGEgZGVuc2UgdGVuc29yLlxuICpcbiAqIEJ1aWxkcyBhbiBhcnJheSBkZW5zZSB3aXRoIHNoYXBlIG91dHB1dFNoYXBlIHN1Y2ggdGhhdDpcbiAqXG4gKiAvLyBJZiBzcGFyc2VJbmRpY2VzIGlzIHNjYWxhclxuICogZGVuc2VbaV0gPSAoaSA9PSBzcGFyc2VJbmRpY2VzID8gc3BhcnNlVmFsdWVzIDogZGVmYXVsdFZhbHVlKVxuICpcbiAqIC8vIElmIHNwYXJzZUluZGljZXMgaXMgYSB2ZWN0b3IsIHRoZW4gZm9yIGVhY2ggaVxuICogZGVuc2Vbc3BhcnNlSW5kaWNlc1tpXV0gPSBzcGFyc2VWYWx1ZXNbaV1cbiAqXG4gKiAvLyBJZiBzcGFyc2VJbmRpY2VzIGlzIGFuIG4gYnkgZCBtYXRyaXgsIHRoZW4gZm9yIGVhY2ggaSBpbiBbMCwgbilcbiAqIGRlbnNlW3NwYXJzZUluZGljZXNbaV1bMF0sIC4uLiwgc3BhcnNlSW5kaWNlc1tpXVtkLTFdXSA9IHNwYXJzZVZhbHVlc1tpXVxuICogQWxsIG90aGVyIHZhbHVlcyBpbiBkZW5zZSBhcmUgc2V0IHRvIGRlZmF1bHRWYWx1ZS4gSWYgc3BhcnNlVmFsdWVzIGlzIGFcbiAqIHNjYWxhciwgYWxsIHNwYXJzZSBpbmRpY2VzIGFyZSBzZXQgdG8gdGhpcyBzaW5nbGUgdmFsdWUuXG4gKlxuICogSWYgaW5kaWNlcyBhcmUgcmVwZWF0ZWQgdGhlIGZpbmFsIHZhbHVlIGlzIHN1bW1lZCBvdmVyIGFsbCB2YWx1ZXMgZm9yIHRob3NlXG4gKiBpbmRpY2VzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBpbmRpY2VzID0gdGYudGVuc29yMWQoWzQsIDUsIDYsIDEsIDIsIDNdLCAnaW50MzInKTtcbiAqIGNvbnN0IHZhbHVlcyA9IHRmLnRlbnNvcjFkKFsxMCwgMTEsIDEyLCAxMywgMTQsIDE1XSwgJ2Zsb2F0MzInKTtcbiAqIGNvbnN0IHNoYXBlID0gWzhdO1xuICogdGYuc3BhcnNlVG9EZW5zZShpbmRpY2VzLCB2YWx1ZXMsIHNoYXBlKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNwYXJzZUluZGljZXMgQSAwLUQsIDEtRCwgb3IgMi1EIFRlbnNvciBvZiB0eXBlIGludDMyLlxuICogc3BhcnNlSW5kaWNlc1tpXSBjb250YWlucyB0aGUgY29tcGxldGUgaW5kZXggd2hlcmUgc3BhcnNlVmFsdWVzW2ldIHdpbGwgYmVcbiAqIHBsYWNlZC5cbiAqIEBwYXJhbSBzcGFyc2VWYWx1ZXMgQSAwLUQgb3IgMS1EIFRlbnNvci4gVmFsdWVzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcm93IG9mIHNwYXJzZUluZGljZXMsIG9yIGEgc2NhbGFyIHZhbHVlIHRvIGJlIHVzZWQgZm9yXG4gKiBhbGwgc3BhcnNlIGluZGljZXMuXG4gKiBAcGFyYW0gb3V0cHV0U2hhcGUgU2hhcGUgb2YgdGhlIGRlbnNlIG91dHB1dCB0ZW5zb3IuIFRoZSB0eXBlIGlzIGluZmVycmVkLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBTY2FsYXIuIFZhbHVlIHRvIHNldCBmb3IgaW5kaWNlcyBub3Qgc3BlY2lmaWVkIGluXG4gKiBzcGFyc2VJbmRpY2VzLiBEZWZhdWx0cyB0byB6ZXJvLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ05vcm1hbGl6YXRpb24nfVxuICovXG5mdW5jdGlvbiBzcGFyc2VUb0RlbnNlXzxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc3BhcnNlSW5kaWNlczogVGVuc29yfFRlbnNvckxpa2UsIHNwYXJzZVZhbHVlczogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgb3V0cHV0U2hhcGU6IFNoYXBlTWFwW1JdLCBkZWZhdWx0VmFsdWU6IFNjYWxhcnxTY2FsYXJMaWtlID0gMCk6IFRlbnNvcjxSPiB7XG4gIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMob3V0cHV0U2hhcGUpO1xuXG4gIGNvbnN0ICRzcGFyc2VJbmRpY2VzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihzcGFyc2VJbmRpY2VzLCAnc3BhcnNlSW5kaWNlcycsICdzcGFyc2VUb0RlbnNlJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRzcGFyc2VWYWx1ZXMgPSBjb252ZXJ0VG9UZW5zb3IoXG4gICAgICBzcGFyc2VWYWx1ZXMsICdzcGFyc2VWYWx1ZXMnLCAnc3BhcnNlVG9EZW5zZScsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBjb25zdCAkZGVmYXVsdFZhbHVlID0gY29udmVydFRvVGVuc29yKFxuICAgICAgZGVmYXVsdFZhbHVlLCAnZGVmYXVsdFZhbHVlJywgJ3NwYXJzZVRvRGVuc2UnLCAkc3BhcnNlVmFsdWVzLmR0eXBlKTtcblxuICBzcGFyc2VfdG9fZGVuc2UudmFsaWRhdGVJbnB1dChcbiAgICAgICRzcGFyc2VJbmRpY2VzLCAkc3BhcnNlVmFsdWVzLCBvdXRwdXRTaGFwZSwgJGRlZmF1bHRWYWx1ZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBTcGFyc2VUb0RlbnNlSW5wdXRzID0ge1xuICAgIHNwYXJzZUluZGljZXM6ICRzcGFyc2VJbmRpY2VzLFxuICAgIHNwYXJzZVZhbHVlczogJHNwYXJzZVZhbHVlcyxcbiAgICBkZWZhdWx0VmFsdWU6ICRkZWZhdWx0VmFsdWVcbiAgfTtcblxuICBjb25zdCBhdHRyczogU3BhcnNlVG9EZW5zZUF0dHJzID0ge291dHB1dFNoYXBlfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFNwYXJzZVRvRGVuc2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlVG9EZW5zZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3BhcnNlVG9EZW5zZV99KTtcbiJdfQ==","/**\n * Validate sparseToDense inputs.\n *\n * @param sparseIndices A 0-D, 1-D, or 2-D Tensor of type int32.\n * sparseIndices[i] contains the complete index where sparseValues[i] will be\n * placed.\n * @param sparseValues A 0-D or 1-D Tensor. Values\n * corresponding to each row of sparseIndices, or a scalar value to be used for\n * all sparse indices.\n * @param outputShape number[]. Shape of the dense output tensor.\n * @param validateIndices boolean. indice validation is not supported, error\n * will be thrown if it is set.\n */\nexport function validateInput(sparseIndices, sparseValues, outputShape, defaultValues) {\n if (sparseIndices.dtype !== 'int32') {\n throw new Error('tf.sparseToDense() expects the indices to be int32 type,' +\n ` but the dtype was ${sparseIndices.dtype}.`);\n }\n if (sparseIndices.rank > 2) {\n throw new Error('sparseIndices should be a scalar, vector, or matrix,' +\n ` but got shape ${sparseIndices.shape}.`);\n }\n const numElems = sparseIndices.rank > 0 ? sparseIndices.shape[0] : 1;\n const numDims = sparseIndices.rank > 1 ? sparseIndices.shape[1] : 1;\n if (outputShape.length !== numDims) {\n throw new Error('outputShape has incorrect number of elements:,' +\n ` ${outputShape.length}, should be: ${numDims}.`);\n }\n const numValues = sparseValues.size;\n if (!(sparseValues.rank === 0 ||\n sparseValues.rank === 1 && numValues === numElems)) {\n throw new Error('sparseValues has incorrect shape ' +\n `${sparseValues.shape}, should be [] or [${numElems}]`);\n }\n if (sparseValues.dtype !== defaultValues.dtype) {\n throw new Error('sparseValues.dtype must match defaultValues.dtype');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3RvX2RlbnNlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGFyc2VfdG9fZGVuc2VfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDekIsYUFBcUIsRUFBRSxZQUFvQixFQUFFLFdBQXFCLEVBQ2xFLGFBQXFCO0lBQ3ZCLElBQUksYUFBYSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FDWCwwREFBMEQ7WUFDMUQsc0JBQXNCLGFBQWEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQ25EO0lBQ0QsSUFBSSxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUNYLHNEQUFzRDtZQUN0RCxrQkFBa0IsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7S0FDL0M7SUFFRCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNYLGdEQUFnRDtZQUNoRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLGdCQUFnQixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNwQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkIsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxFQUFFO1FBQ3hELE1BQU0sSUFBSSxLQUFLLENBQ1gsbUNBQW1DO1lBQ25DLEdBQUcsWUFBWSxDQUFDLEtBQUssc0JBQXNCLFFBQVEsR0FBRyxDQUFDLENBQUM7S0FDN0Q7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEtBQUssRUFBRTtRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7S0FDdEU7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5cbi8qKlxuICogVmFsaWRhdGUgc3BhcnNlVG9EZW5zZSBpbnB1dHMuXG4gKlxuICogQHBhcmFtIHNwYXJzZUluZGljZXMgQSAwLUQsIDEtRCwgb3IgMi1EIFRlbnNvciBvZiB0eXBlIGludDMyLlxuICogc3BhcnNlSW5kaWNlc1tpXSBjb250YWlucyB0aGUgY29tcGxldGUgaW5kZXggd2hlcmUgc3BhcnNlVmFsdWVzW2ldIHdpbGwgYmVcbiAqIHBsYWNlZC5cbiAqIEBwYXJhbSBzcGFyc2VWYWx1ZXMgQSAwLUQgb3IgMS1EIFRlbnNvci4gVmFsdWVzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcm93IG9mIHNwYXJzZUluZGljZXMsIG9yIGEgc2NhbGFyIHZhbHVlIHRvIGJlIHVzZWQgZm9yXG4gKiBhbGwgc3BhcnNlIGluZGljZXMuXG4gKiBAcGFyYW0gb3V0cHV0U2hhcGUgbnVtYmVyW10uIFNoYXBlIG9mIHRoZSBkZW5zZSBvdXRwdXQgdGVuc29yLlxuICogQHBhcmFtIHZhbGlkYXRlSW5kaWNlcyBib29sZWFuLiBpbmRpY2UgdmFsaWRhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBlcnJvclxuICogd2lsbCBiZSB0aHJvd24gaWYgaXQgaXMgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dChcbiAgICBzcGFyc2VJbmRpY2VzOiBUZW5zb3IsIHNwYXJzZVZhbHVlczogVGVuc29yLCBvdXRwdXRTaGFwZTogbnVtYmVyW10sXG4gICAgZGVmYXVsdFZhbHVlczogVGVuc29yKSB7XG4gIGlmIChzcGFyc2VJbmRpY2VzLmR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndGYuc3BhcnNlVG9EZW5zZSgpIGV4cGVjdHMgdGhlIGluZGljZXMgdG8gYmUgaW50MzIgdHlwZSwnICtcbiAgICAgICAgYCBidXQgdGhlIGR0eXBlIHdhcyAke3NwYXJzZUluZGljZXMuZHR5cGV9LmApO1xuICB9XG4gIGlmIChzcGFyc2VJbmRpY2VzLnJhbmsgPiAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnc3BhcnNlSW5kaWNlcyBzaG91bGQgYmUgYSBzY2FsYXIsIHZlY3Rvciwgb3IgbWF0cml4LCcgK1xuICAgICAgICBgIGJ1dCBnb3Qgc2hhcGUgJHtzcGFyc2VJbmRpY2VzLnNoYXBlfS5gKTtcbiAgfVxuXG4gIGNvbnN0IG51bUVsZW1zID0gc3BhcnNlSW5kaWNlcy5yYW5rID4gMCA/IHNwYXJzZUluZGljZXMuc2hhcGVbMF0gOiAxO1xuICBjb25zdCBudW1EaW1zID0gc3BhcnNlSW5kaWNlcy5yYW5rID4gMSA/IHNwYXJzZUluZGljZXMuc2hhcGVbMV0gOiAxO1xuXG4gIGlmIChvdXRwdXRTaGFwZS5sZW5ndGggIT09IG51bURpbXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdvdXRwdXRTaGFwZSBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBlbGVtZW50czosJyArXG4gICAgICAgIGAgJHtvdXRwdXRTaGFwZS5sZW5ndGh9LCBzaG91bGQgYmU6ICR7bnVtRGltc30uYCk7XG4gIH1cblxuICBjb25zdCBudW1WYWx1ZXMgPSBzcGFyc2VWYWx1ZXMuc2l6ZTtcbiAgaWYgKCEoc3BhcnNlVmFsdWVzLnJhbmsgPT09IDAgfHxcbiAgICAgICAgc3BhcnNlVmFsdWVzLnJhbmsgPT09IDEgJiYgbnVtVmFsdWVzID09PSBudW1FbGVtcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdzcGFyc2VWYWx1ZXMgaGFzIGluY29ycmVjdCBzaGFwZSAnICtcbiAgICAgICAgYCR7c3BhcnNlVmFsdWVzLnNoYXBlfSwgc2hvdWxkIGJlIFtdIG9yIFske251bUVsZW1zfV1gKTtcbiAgfVxuXG4gIGlmIChzcGFyc2VWYWx1ZXMuZHR5cGUgIT09IGRlZmF1bHRWYWx1ZXMuZHR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NwYXJzZVZhbHVlcy5kdHlwZSBtdXN0IG1hdGNoIGRlZmF1bHRWYWx1ZXMuZHR5cGUnKTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { GatherNd } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Gather slices from input tensor into a Tensor with shape specified by\n * `indices`.\n *\n * `indices` is a K-dimensional integer tensor, best thought of as a\n * (K-1)-dimensional tensor of indices into input, where each element defines a\n * slice of input:\n * output[\\\\(i_0, ..., i_{K-2}\\\\)] = input[indices[\\\\(i_0, ..., i_{K-2}\\\\)]]\n *\n * Whereas in `tf.gather`, `indices` defines slices into the first dimension of\n * input, in `tf.gatherND`, `indices` defines slices into the first N dimensions\n * of input, where N = indices.shape[-1].\n *\n * The last dimension of indices can be at most the rank of input:\n * indices.shape[-1] <= input.rank\n *\n * The last dimension of `indices` corresponds to elements\n * (if indices.shape[-1] == input.rank) or slices\n * (if indices.shape[-1] < input.rank) along dimension indices.shape[-1] of\n * input.\n * The output tensor has shape\n * indices.shape[:-1] + input.shape[indices.shape[-1]:]\n *\n * Note that on CPU, if an out of bound index is found, an error is returned. On\n * GPU, if an out of bound index is found, a 0 is stored in the corresponding\n * output value.\n *\n * ```js\n * const indices = tf.tensor2d([0, 1, 1, 0], [2,2], 'int32');\n * const input = tf.tensor2d([9, 10, 11, 12], [2, 2]);\n * tf.gatherND(input, indices).print() // [10, 11]\n * ```\n *\n * @param x The tensor from which to gather values.\n * @param indices Index tensor, must be of type int32.\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nfunction gatherND_(x, indices) {\n const $indices = convertToTensor(indices, 'indices', 'gatherND', 'int32');\n const $x = convertToTensor(x, 'x', 'gatherND', 'string_or_numeric');\n const inputs = { params: $x, indices: $indices };\n return ENGINE.runKernel(GatherNd, inputs);\n}\nexport const gatherND = /* @__PURE__ */ op({ gatherND_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0aGVyX25kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZ2F0aGVyX25kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILFNBQVMsU0FBUyxDQUFDLENBQW9CLEVBQUUsT0FBMEI7SUFDakUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sTUFBTSxHQUFtQixFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBRS9ELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7R2F0aGVyTmQsIEdhdGhlck5kSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBHYXRoZXIgc2xpY2VzIGZyb20gaW5wdXQgdGVuc29yIGludG8gYSBUZW5zb3Igd2l0aCBzaGFwZSBzcGVjaWZpZWQgYnlcbiAqIGBpbmRpY2VzYC5cbiAqXG4gKiBgaW5kaWNlc2AgaXMgYSBLLWRpbWVuc2lvbmFsIGludGVnZXIgdGVuc29yLCBiZXN0IHRob3VnaHQgb2YgYXMgYVxuICogKEstMSktZGltZW5zaW9uYWwgdGVuc29yIG9mIGluZGljZXMgaW50byBpbnB1dCwgd2hlcmUgZWFjaCBlbGVtZW50IGRlZmluZXMgYVxuICogc2xpY2Ugb2YgaW5wdXQ6XG4gKiBvdXRwdXRbXFxcXChpXzAsIC4uLiwgaV97Sy0yfVxcXFwpXSA9IGlucHV0W2luZGljZXNbXFxcXChpXzAsIC4uLiwgaV97Sy0yfVxcXFwpXV1cbiAqXG4gKiBXaGVyZWFzIGluIGB0Zi5nYXRoZXJgLCBgaW5kaWNlc2AgZGVmaW5lcyBzbGljZXMgaW50byB0aGUgZmlyc3QgZGltZW5zaW9uIG9mXG4gKiBpbnB1dCwgaW4gYHRmLmdhdGhlck5EYCwgYGluZGljZXNgIGRlZmluZXMgc2xpY2VzIGludG8gdGhlIGZpcnN0IE4gZGltZW5zaW9uc1xuICogb2YgaW5wdXQsIHdoZXJlIE4gPSBpbmRpY2VzLnNoYXBlWy0xXS5cbiAqXG4gKiBUaGUgbGFzdCBkaW1lbnNpb24gb2YgaW5kaWNlcyBjYW4gYmUgYXQgbW9zdCB0aGUgcmFuayBvZiBpbnB1dDpcbiAqIGluZGljZXMuc2hhcGVbLTFdIDw9IGlucHV0LnJhbmtcbiAqXG4gKiBUaGUgbGFzdCBkaW1lbnNpb24gb2YgYGluZGljZXNgIGNvcnJlc3BvbmRzIHRvIGVsZW1lbnRzXG4gKiAoaWYgaW5kaWNlcy5zaGFwZVstMV0gPT0gaW5wdXQucmFuaykgb3Igc2xpY2VzXG4gKiAoaWYgaW5kaWNlcy5zaGFwZVstMV0gPCBpbnB1dC5yYW5rKSBhbG9uZyBkaW1lbnNpb24gaW5kaWNlcy5zaGFwZVstMV0gb2ZcbiAqIGlucHV0LlxuICogVGhlIG91dHB1dCB0ZW5zb3IgaGFzIHNoYXBlXG4gKiBpbmRpY2VzLnNoYXBlWzotMV0gKyBpbnB1dC5zaGFwZVtpbmRpY2VzLnNoYXBlWy0xXTpdXG4gKlxuICogTm90ZSB0aGF0IG9uIENQVSwgaWYgYW4gb3V0IG9mIGJvdW5kIGluZGV4IGlzIGZvdW5kLCBhbiBlcnJvciBpcyByZXR1cm5lZC4gT25cbiAqIEdQVSwgaWYgYW4gb3V0IG9mIGJvdW5kIGluZGV4IGlzIGZvdW5kLCBhIDAgaXMgc3RvcmVkIGluIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBvdXRwdXQgdmFsdWUuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGluZGljZXMgPSB0Zi50ZW5zb3IyZChbMCwgMSwgMSwgMF0sIFsyLDJdLCAnaW50MzInKTtcbiAqIGNvbnN0IGlucHV0ID0gdGYudGVuc29yMmQoWzksIDEwLCAxMSwgMTJdLCBbMiwgMl0pO1xuICogdGYuZ2F0aGVyTkQoaW5wdXQsIGluZGljZXMpLnByaW50KCkgLy8gWzEwLCAxMV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSB0ZW5zb3IgZnJvbSB3aGljaCB0byBnYXRoZXIgdmFsdWVzLlxuICogQHBhcmFtIGluZGljZXMgSW5kZXggdGVuc29yLCBtdXN0IGJlIG9mIHR5cGUgaW50MzIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIGdhdGhlck5EXyh4OiBUZW5zb3J8VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yfFRlbnNvckxpa2UpOiBUZW5zb3Ige1xuICBjb25zdCAkaW5kaWNlcyA9IGNvbnZlcnRUb1RlbnNvcihpbmRpY2VzLCAnaW5kaWNlcycsICdnYXRoZXJORCcsICdpbnQzMicpO1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdnYXRoZXJORCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuXG4gIGNvbnN0IGlucHV0czogR2F0aGVyTmRJbnB1dHMgPSB7cGFyYW1zOiAkeCwgaW5kaWNlczogJGluZGljZXN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEdhdGhlck5kLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBnYXRoZXJORCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Z2F0aGVyTkRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tensor } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { add } from './add';\nimport { div } from './div';\nimport { getNoiseShape } from './dropout_util';\nimport { floor } from './floor';\nimport { mul } from './mul';\nimport { op } from './operation';\nimport { randomUniform } from './random_uniform';\n/**\n * Computes dropout.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 2, 1]);\n * const rate = 0.75;\n * const output = tf.dropout(x, rate);\n * output.print();\n * ```\n *\n * @param x A floating point Tensor or TensorLike.\n * @param rate A float in the range [0, 1). The probability that each element\n * of x is discarded.\n * @param noiseShape An array of numbers of type int32, representing the\n * shape for randomly generated keep/drop flags. If the noiseShape has null\n * value, it will be automatically replaced with the x's relative dimension\n * size. Optional.\n * @param seed Used to create random seeds. Optional.\n * @returns A Tensor of the same shape of x.\n *\n * @doc {heading: 'Operations', subheading: 'Dropout'}\n */\nfunction dropout_(x, rate, noiseShape, seed) {\n const $x = convertToTensor(x, 'x', 'dropout');\n util.assert($x.dtype === 'float32', () => `x has to be a floating point tensor since it's going to be ` +\n `scaled, but got a ${$x.dtype} tensor instead.`);\n util.assert(rate >= 0 && rate < 1, () => `rate must be a float in the range [0, 1), but got ${rate}.`);\n if (rate === 0) {\n return x instanceof Tensor ? $x.clone() : $x;\n }\n const $noiseShape = getNoiseShape($x, noiseShape);\n const keepProb = 1 - rate;\n const multiplier = div(floor(add(randomUniform($noiseShape, 0, 1, 'float32', seed), keepProb)), keepProb);\n return mul($x, multiplier);\n}\nexport const dropout = /* @__PURE__ */ op({ dropout_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcG91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Ryb3BvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILFNBQVMsUUFBUSxDQUNiLENBQW9CLEVBQUUsSUFBWSxFQUFFLFVBQXFCLEVBQ3pELElBQW9CO0lBQ3RCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQ3RCLEdBQUcsRUFBRSxDQUFDLDZEQUE2RDtRQUMvRCxxQkFBcUIsRUFBRSxDQUFDLEtBQUssa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMscURBQXFELElBQUksR0FBRyxDQUFDLENBQUM7SUFFeEUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2QsT0FBTyxDQUFDLFlBQVksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUM5QztJQUVELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUN2RSxRQUFRLENBQUMsQ0FBQztJQUVkLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2FkZH0gZnJvbSAnLi9hZGQnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4vZGl2JztcbmltcG9ydCB7Z2V0Tm9pc2VTaGFwZX0gZnJvbSAnLi9kcm9wb3V0X3V0aWwnO1xuaW1wb3J0IHtmbG9vcn0gZnJvbSAnLi9mbG9vcic7XG5pbXBvcnQge211bH0gZnJvbSAnLi9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyYW5kb21Vbmlmb3JtfSBmcm9tICcuL3JhbmRvbV91bmlmb3JtJztcblxuLyoqXG4gKiBDb21wdXRlcyBkcm9wb3V0LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDIsIDFdKTtcbiAqIGNvbnN0IHJhdGUgPSAwLjc1O1xuICogY29uc3Qgb3V0cHV0ID0gdGYuZHJvcG91dCh4LCByYXRlKTtcbiAqIG91dHB1dC5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggQSBmbG9hdGluZyBwb2ludCBUZW5zb3Igb3IgVGVuc29yTGlrZS5cbiAqIEBwYXJhbSByYXRlIEEgZmxvYXQgaW4gdGhlIHJhbmdlIFswLCAxKS4gVGhlIHByb2JhYmlsaXR5IHRoYXQgZWFjaCBlbGVtZW50XG4gKiAgIG9mIHggaXMgZGlzY2FyZGVkLlxuICogQHBhcmFtIG5vaXNlU2hhcGUgQW4gYXJyYXkgb2YgbnVtYmVycyBvZiB0eXBlIGludDMyLCByZXByZXNlbnRpbmcgdGhlXG4gKiBzaGFwZSBmb3IgcmFuZG9tbHkgZ2VuZXJhdGVkIGtlZXAvZHJvcCBmbGFncy4gSWYgdGhlIG5vaXNlU2hhcGUgaGFzIG51bGxcbiAqIHZhbHVlLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0aCB0aGUgeCdzIHJlbGF0aXZlIGRpbWVuc2lvblxuICogc2l6ZS4gT3B0aW9uYWwuXG4gKiBAcGFyYW0gc2VlZCBVc2VkIHRvIGNyZWF0ZSByYW5kb20gc2VlZHMuIE9wdGlvbmFsLlxuICogQHJldHVybnMgQSBUZW5zb3Igb2YgdGhlIHNhbWUgc2hhcGUgb2YgeC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdEcm9wb3V0J31cbiAqL1xuZnVuY3Rpb24gZHJvcG91dF8oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIHJhdGU6IG51bWJlciwgbm9pc2VTaGFwZT86IG51bWJlcltdLFxuICAgIHNlZWQ/OiBudW1iZXJ8c3RyaW5nKTogVGVuc29yIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnZHJvcG91dCcpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHguZHR5cGUgPT09ICdmbG9hdDMyJyxcbiAgICAgICgpID0+IGB4IGhhcyB0byBiZSBhIGZsb2F0aW5nIHBvaW50IHRlbnNvciBzaW5jZSBpdCdzIGdvaW5nIHRvIGJlIGAgK1xuICAgICAgICAgIGBzY2FsZWQsIGJ1dCBnb3QgYSAkeyR4LmR0eXBlfSB0ZW5zb3IgaW5zdGVhZC5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICByYXRlID49IDAgJiYgcmF0ZSA8IDEsXG4gICAgICAoKSA9PiBgcmF0ZSBtdXN0IGJlIGEgZmxvYXQgaW4gdGhlIHJhbmdlIFswLCAxKSwgYnV0IGdvdCAke3JhdGV9LmApO1xuXG4gIGlmIChyYXRlID09PSAwKSB7XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBUZW5zb3IgPyAkeC5jbG9uZSgpIDogJHg7XG4gIH1cblxuICBjb25zdCAkbm9pc2VTaGFwZSA9IGdldE5vaXNlU2hhcGUoJHgsIG5vaXNlU2hhcGUpO1xuICBjb25zdCBrZWVwUHJvYiA9IDEgLSByYXRlO1xuICBjb25zdCBtdWx0aXBsaWVyID0gZGl2KFxuICAgICAgZmxvb3IoYWRkKHJhbmRvbVVuaWZvcm0oJG5vaXNlU2hhcGUsIDAsIDEsICdmbG9hdDMyJywgc2VlZCksIGtlZXBQcm9iKSksXG4gICAgICBrZWVwUHJvYik7XG5cbiAgcmV0dXJuIG11bCgkeCwgbXVsdGlwbGllcik7XG59XG5cbmV4cG9ydCBjb25zdCBkcm9wb3V0ID0gLyogQF9fUFVSRV9fICovIG9wKHtkcm9wb3V0X30pO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\n/**\n * Normalize noise shape based on provided tensor and noise shape.\n *\n * @param x Tensor.\n * @param noiseShape The shape for the randomly generated keep/drop flags, as\n * an array of numbers. Optional.\n * @returns Normalized noise shape.\n */\nexport function getNoiseShape(x, noiseShape) {\n if (noiseShape == null) {\n return x.shape.slice();\n }\n if (util.arraysEqual(x.shape, noiseShape)) {\n return noiseShape;\n }\n if (x.shape.length === noiseShape.length) {\n const newDimension = [];\n for (let i = 0; i < x.shape.length; i++) {\n if (noiseShape[i] == null && x.shape[i] != null) {\n newDimension.push(x.shape[i]);\n }\n else {\n newDimension.push(noiseShape[i]);\n }\n }\n return newDimension;\n }\n return noiseShape;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcG91dF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZHJvcG91dF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQVMsRUFBRSxVQUFxQjtJQUM1RCxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDdEIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDekMsT0FBTyxVQUFVLENBQUM7S0FDbkI7SUFDRCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7UUFDeEMsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQy9DLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9CO2lCQUFNO2dCQUNMLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEM7U0FDRjtRQUNELE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBub2lzZSBzaGFwZSBiYXNlZCBvbiBwcm92aWRlZCB0ZW5zb3IgYW5kIG5vaXNlIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB4IFRlbnNvci5cbiAqIEBwYXJhbSBub2lzZVNoYXBlIFRoZSBzaGFwZSBmb3IgdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCBrZWVwL2Ryb3AgZmxhZ3MsIGFzXG4gKiAgIGFuIGFycmF5IG9mIG51bWJlcnMuIE9wdGlvbmFsLlxuICogQHJldHVybnMgTm9ybWFsaXplZCBub2lzZSBzaGFwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vaXNlU2hhcGUoeDogVGVuc29yLCBub2lzZVNoYXBlPzogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGlmIChub2lzZVNoYXBlID09IG51bGwpIHtcbiAgICByZXR1cm4geC5zaGFwZS5zbGljZSgpO1xuICB9XG4gIGlmICh1dGlsLmFycmF5c0VxdWFsKHguc2hhcGUsIG5vaXNlU2hhcGUpKSB7XG4gICAgcmV0dXJuIG5vaXNlU2hhcGU7XG4gIH1cbiAgaWYgKHguc2hhcGUubGVuZ3RoID09PSBub2lzZVNoYXBlLmxlbmd0aCkge1xuICAgIGNvbnN0IG5ld0RpbWVuc2lvbjogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHguc2hhcGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChub2lzZVNoYXBlW2ldID09IG51bGwgJiYgeC5zaGFwZVtpXSAhPSBudWxsKSB7XG4gICAgICAgIG5ld0RpbWVuc2lvbi5wdXNoKHguc2hhcGVbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RGltZW5zaW9uLnB1c2gobm9pc2VTaGFwZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdEaW1lbnNpb247XG4gIH1cblxuICByZXR1cm4gbm9pc2VTaGFwZTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { tensor1d } from './tensor1d';\nexport function enclosingPowerOfTwo(value) {\n // Return 2**N for integer N such that 2**N >= value.\n return Math.floor(Math.pow(2, Math.ceil(Math.log(value) / Math.log(2.0))));\n}\nexport function cosineWindow(windowLength, a, b) {\n const even = 1 - windowLength % 2;\n const newValues = new Float32Array(windowLength);\n for (let i = 0; i < windowLength; ++i) {\n const cosArg = (2.0 * Math.PI * i) / (windowLength + even - 1);\n newValues[i] = a - b * Math.cos(cosArg);\n }\n return tensor1d(newValues, 'float32');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsX29wc191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2lnbmFsX29wc191dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEMsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWE7SUFDL0MscURBQXFEO0lBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FDeEIsWUFBb0IsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUM1QyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9ELFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IxRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7dGVuc29yMWR9IGZyb20gJy4vdGVuc29yMWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW5jbG9zaW5nUG93ZXJPZlR3byh2YWx1ZTogbnVtYmVyKSB7XG4gIC8vIFJldHVybiAyKipOIGZvciBpbnRlZ2VyIE4gc3VjaCB0aGF0IDIqKk4gPj0gdmFsdWUuXG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucG93KDIsIE1hdGguY2VpbChNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLmxvZygyLjApKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29zaW5lV2luZG93KFxuICAgIHdpbmRvd0xlbmd0aDogbnVtYmVyLCBhOiBudW1iZXIsIGI6IG51bWJlcik6IFRlbnNvcjFEIHtcbiAgY29uc3QgZXZlbiA9IDEgLSB3aW5kb3dMZW5ndGggJSAyO1xuICBjb25zdCBuZXdWYWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KHdpbmRvd0xlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgd2luZG93TGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb3NBcmcgPSAoMi4wICogTWF0aC5QSSAqIGkpIC8gKHdpbmRvd0xlbmd0aCArIGV2ZW4gLSAxKTtcbiAgICBuZXdWYWx1ZXNbaV0gPSBhIC0gYiAqIE1hdGguY29zKGNvc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHRlbnNvcjFkKG5ld1ZhbHVlcywgJ2Zsb2F0MzInKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { assert, assertShapesMatch, getTypedArrayFromDType } from '../util';\nimport { tensor } from './tensor';\n/**\n * Returns whether the targets are in the top K predictions.\n *\n * ```js\n * const predictions = tf.tensor2d([[20, 10, 40, 30], [30, 50, -20, 10]]);\n * const targets = tf.tensor1d([2, 0]);\n * const precision = await tf.inTopKAsync(predictions, targets);\n * precision.print();\n * ```\n * @param predictions 2-D or higher `tf.Tensor` with last dimension being\n * at least `k`.\n * @param targets 1-D or higher `tf.Tensor`.\n * @param k Optional Number of top elements to look at for computing precision,\n * default to 1.\n *\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nasync function inTopKAsync_(predictions, targets, k = 1) {\n const $predictions = convertToTensor(predictions, 'predictions', 'inTopK');\n const $targets = convertToTensor(targets, 'targets', 'inTopK');\n assert($predictions.rank > 1, () => 'inTopK() expects the predictions to be of rank 2 or higher, ' +\n `but got ${$predictions.rank}`);\n assert($predictions.rank - 1 === $targets.rank, () => `predictions rank should be 1 larger than ` +\n `targets rank, but got predictions rank ` +\n `${$predictions.rank} and targets rank ${$targets.rank}`);\n assertShapesMatch($predictions.shape.slice(0, $predictions.shape.length - 1), $targets.shape, `predictions's shape should be align with the targets' shape, ` +\n 'except the last dimension.');\n const lastDim = $predictions.shape[$predictions.shape.length - 1];\n assert(k > 0 && k <= lastDim, () => `'k' passed to inTopK() must be > 0 && <= the predictions last ` +\n `dimension (${lastDim}), but got ${k}`);\n const predictionsVals = await $predictions.data();\n const targetsVals = await $targets.data();\n // Reshape predictionsVals into a 2d tensor [batch, lastDim]\n // and look up topK along lastDim.\n const [batch, size] = [predictionsVals.length / lastDim, lastDim];\n const precision = getTypedArrayFromDType('bool', batch);\n for (let b = 0; b < batch; b++) {\n const offset = b * size;\n const vals = predictionsVals.subarray(offset, offset + size);\n const valAndInd = [];\n for (let i = 0; i < vals.length; i++) {\n valAndInd.push({ value: vals[i], index: i });\n }\n valAndInd.sort((a, b) => b.value - a.value);\n precision[b] = 0;\n for (let i = 0; i < k; i++) {\n if (valAndInd[i].index === targetsVals[b]) {\n precision[b] = 1;\n break;\n }\n }\n }\n if (predictions !== $predictions) {\n $predictions.dispose();\n }\n if (targets !== $targets) {\n $targets.dispose();\n }\n // Output precision has the same shape as targets.\n return tensor(precision, $targets.shape, 'bool');\n}\nexport const inTopKAsync = inTopKAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5fdG9wX2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9pbl90b3Bfay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsS0FBSyxVQUFVLFlBQVksQ0FDdkIsV0FBeUIsRUFBRSxPQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3pELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sQ0FDRixZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMsOERBQThEO1FBQ2hFLFdBQVcsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsTUFBTSxDQUNGLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQ3ZDLEdBQUcsRUFBRSxDQUFDLDJDQUEyQztRQUM3Qyx5Q0FBeUM7UUFDekMsR0FBRyxZQUFZLENBQUMsSUFBSSxxQkFBcUIsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEUsaUJBQWlCLENBQ2IsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUMxRCxRQUFRLENBQUMsS0FBSyxFQUNkLCtEQUErRDtRQUMzRCw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxDQUNGLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sRUFDckIsR0FBRyxFQUFFLENBQUMsZ0VBQWdFO1FBQ2xFLGNBQWMsT0FBTyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFMUMsNERBQTREO0lBQzVELGtDQUFrQztJQUNsQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDOUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0QsTUFBTSxTQUFTLEdBQTBDLEVBQUUsQ0FBQztRQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsTUFBTTthQUNQO1NBQ0Y7S0FDRjtJQUVELElBQUksV0FBVyxLQUFLLFlBQVksRUFBRTtRQUNoQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDeEI7SUFDRCxJQUFJLE9BQU8sS0FBSyxRQUFRLEVBQUU7UUFDeEIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3BCO0lBRUQsa0RBQWtEO0lBQ2xELE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBTSxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydCwgYXNzZXJ0U2hhcGVzTWF0Y2gsIGdldFR5cGVkQXJyYXlGcm9tRFR5cGV9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHt0ZW5zb3J9IGZyb20gJy4vdGVuc29yJztcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHRhcmdldHMgYXJlIGluIHRoZSB0b3AgSyBwcmVkaWN0aW9ucy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcHJlZGljdGlvbnMgPSB0Zi50ZW5zb3IyZChbWzIwLCAxMCwgNDAsIDMwXSwgWzMwLCA1MCwgLTIwLCAxMF1dKTtcbiAqIGNvbnN0IHRhcmdldHMgPSB0Zi50ZW5zb3IxZChbMiwgMF0pO1xuICogY29uc3QgcHJlY2lzaW9uID0gYXdhaXQgdGYuaW5Ub3BLQXN5bmMocHJlZGljdGlvbnMsIHRhcmdldHMpO1xuICogcHJlY2lzaW9uLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBwcmVkaWN0aW9ucyAyLUQgb3IgaGlnaGVyIGB0Zi5UZW5zb3JgIHdpdGggbGFzdCBkaW1lbnNpb24gYmVpbmdcbiAqICAgICBhdCBsZWFzdCBga2AuXG4gKiBAcGFyYW0gdGFyZ2V0cyAxLUQgb3IgaGlnaGVyIGB0Zi5UZW5zb3JgLlxuICogQHBhcmFtIGsgT3B0aW9uYWwgTnVtYmVyIG9mIHRvcCBlbGVtZW50cyB0byBsb29rIGF0IGZvciBjb21wdXRpbmcgcHJlY2lzaW9uLFxuICogICAgIGRlZmF1bHQgdG8gMS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdFdmFsdWF0aW9uJ31cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5Ub3BLQXN5bmNfPFQgZXh0ZW5kcyBUZW5zb3IsIFUgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHByZWRpY3Rpb25zOiBUfFRlbnNvckxpa2UsIHRhcmdldHM6IFV8VGVuc29yTGlrZSwgayA9IDEpOiBQcm9taXNlPFU+IHtcbiAgY29uc3QgJHByZWRpY3Rpb25zID0gY29udmVydFRvVGVuc29yKHByZWRpY3Rpb25zLCAncHJlZGljdGlvbnMnLCAnaW5Ub3BLJyk7XG4gIGNvbnN0ICR0YXJnZXRzID0gY29udmVydFRvVGVuc29yKHRhcmdldHMsICd0YXJnZXRzJywgJ2luVG9wSycpO1xuXG4gIGFzc2VydChcbiAgICAgICRwcmVkaWN0aW9ucy5yYW5rID4gMSxcbiAgICAgICgpID0+ICdpblRvcEsoKSBleHBlY3RzIHRoZSBwcmVkaWN0aW9ucyB0byBiZSBvZiByYW5rIDIgb3IgaGlnaGVyLCAnICtcbiAgICAgICAgICBgYnV0IGdvdCAkeyRwcmVkaWN0aW9ucy5yYW5rfWApO1xuICBhc3NlcnQoXG4gICAgICAkcHJlZGljdGlvbnMucmFuayAtIDEgPT09ICR0YXJnZXRzLnJhbmssXG4gICAgICAoKSA9PiBgcHJlZGljdGlvbnMgcmFuayBzaG91bGQgYmUgMSBsYXJnZXIgdGhhbiBgICtcbiAgICAgICAgICBgdGFyZ2V0cyByYW5rLCBidXQgZ290IHByZWRpY3Rpb25zIHJhbmsgYCArXG4gICAgICAgICAgYCR7JHByZWRpY3Rpb25zLnJhbmt9IGFuZCB0YXJnZXRzIHJhbmsgJHskdGFyZ2V0cy5yYW5rfWApO1xuICBhc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICRwcmVkaWN0aW9ucy5zaGFwZS5zbGljZSgwLCAkcHJlZGljdGlvbnMuc2hhcGUubGVuZ3RoIC0gMSksXG4gICAgICAkdGFyZ2V0cy5zaGFwZSxcbiAgICAgIGBwcmVkaWN0aW9ucydzIHNoYXBlIHNob3VsZCBiZSBhbGlnbiB3aXRoIHRoZSB0YXJnZXRzJyBzaGFwZSwgYCArXG4gICAgICAgICAgJ2V4Y2VwdCB0aGUgbGFzdCBkaW1lbnNpb24uJyk7XG4gIGNvbnN0IGxhc3REaW0gPSAkcHJlZGljdGlvbnMuc2hhcGVbJHByZWRpY3Rpb25zLnNoYXBlLmxlbmd0aCAtIDFdO1xuICBhc3NlcnQoXG4gICAgICBrID4gMCAmJiBrIDw9IGxhc3REaW0sXG4gICAgICAoKSA9PiBgJ2snIHBhc3NlZCB0byBpblRvcEsoKSBtdXN0IGJlID4gMCAmJiA8PSB0aGUgcHJlZGljdGlvbnMgbGFzdCBgICtcbiAgICAgICAgICBgZGltZW5zaW9uICgke2xhc3REaW19KSwgYnV0IGdvdCAke2t9YCk7XG5cbiAgY29uc3QgcHJlZGljdGlvbnNWYWxzID0gYXdhaXQgJHByZWRpY3Rpb25zLmRhdGEoKTtcbiAgY29uc3QgdGFyZ2V0c1ZhbHMgPSBhd2FpdCAkdGFyZ2V0cy5kYXRhKCk7XG5cbiAgLy8gUmVzaGFwZSBwcmVkaWN0aW9uc1ZhbHMgaW50byBhIDJkIHRlbnNvciBbYmF0Y2gsIGxhc3REaW1dXG4gIC8vIGFuZCBsb29rIHVwIHRvcEsgYWxvbmcgbGFzdERpbS5cbiAgY29uc3QgW2JhdGNoLCBzaXplXSA9IFtwcmVkaWN0aW9uc1ZhbHMubGVuZ3RoIC8gbGFzdERpbSwgbGFzdERpbV07XG4gIGNvbnN0IHByZWNpc2lvbiA9IGdldFR5cGVkQXJyYXlGcm9tRFR5cGUoJ2Jvb2wnLCBiYXRjaCk7XG5cbiAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaDsgYisrKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gYiAqIHNpemU7XG4gICAgY29uc3QgdmFscyA9IHByZWRpY3Rpb25zVmFscy5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIHNpemUpO1xuICAgIGNvbnN0IHZhbEFuZEluZDogQXJyYXk8e3ZhbHVlOiBudW1iZXIsIGluZGV4OiBudW1iZXJ9PiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsQW5kSW5kLnB1c2goe3ZhbHVlOiB2YWxzW2ldLCBpbmRleDogaX0pO1xuICAgIH1cbiAgICB2YWxBbmRJbmQuc29ydCgoYSwgYikgPT4gYi52YWx1ZSAtIGEudmFsdWUpO1xuXG4gICAgcHJlY2lzaW9uW2JdID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgaWYgKHZhbEFuZEluZFtpXS5pbmRleCA9PT0gdGFyZ2V0c1ZhbHNbYl0pIHtcbiAgICAgICAgcHJlY2lzaW9uW2JdID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZWRpY3Rpb25zICE9PSAkcHJlZGljdGlvbnMpIHtcbiAgICAkcHJlZGljdGlvbnMuZGlzcG9zZSgpO1xuICB9XG4gIGlmICh0YXJnZXRzICE9PSAkdGFyZ2V0cykge1xuICAgICR0YXJnZXRzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIE91dHB1dCBwcmVjaXNpb24gaGFzIHRoZSBzYW1lIHNoYXBlIGFzIHRhcmdldHMuXG4gIHJldHVybiB0ZW5zb3IocHJlY2lzaW9uLCAkdGFyZ2V0cy5zaGFwZSwgJ2Jvb2wnKSBhcyBVO1xufVxuXG5leHBvcnQgY29uc3QgaW5Ub3BLQXN5bmMgPSBpblRvcEtBc3luY187XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv2DBackpropFilter } from '../kernel_names';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the derivative of the filter of a 2D convolution.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n * [batch, height, width, inChannels]. If rank 3, batch of 1 is assumed.\n * @param dy The dy image, of rank 4 or rank 3, of shape\n * [batch, height, width, outDepth]. If rank 3, batch of 1 is assumed.\n * @param filterShape The shape of the filter, length 4,\n * [filterHeight, filterWidth, inDepth, outDepth].\n * @param strides The strides of the convolution: [strideHeight,\n * strideWidth].\n * @param pad A string from: 'same', 'valid'. The type of padding algorithm\n * used in the forward prop of the op.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels].\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n */\nfunction conv2DBackpropFilter_(x, dy, filterShape, strides, pad, dataFormat = 'NHWC', dimRoundingMode) {\n let x4D = x;\n if (x.rank === 3) {\n x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]);\n }\n let dy4D = dy;\n if (dy4D.rank === 3) {\n dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ` +\n `${x4D.shape}.`);\n util.assert(dy4D.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ` +\n `${dy4D.shape}.`);\n util.assert(filterShape.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ` +\n `${filterShape}.`);\n const inDepth = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n const outDepth = dataFormat === 'NHWC' ? dy4D.shape[3] : dy4D.shape[1];\n util.assert(inDepth === filterShape[2], () => `Error in conv2dDerFilter: depth of input ${inDepth}) must ` +\n `match input depth in filter (${filterShape[2]}.`);\n util.assert(outDepth === filterShape[3], () => `Error in conv2dDerFilter: depth of dy (${outDepth}) must ` +\n `match output depth for filter (${filterShape[3]}).`);\n conv_util.checkPadOnDimRoundingMode('conv2dDerFilter', pad, dimRoundingMode);\n const inputs = { x: x4D, dy: dy4D };\n const attrs = { strides, pad, dataFormat, dimRoundingMode, filterShape };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(Conv2DBackpropFilter, inputs, attrs);\n}\nexport const conv2DBackpropFilter = /* @__PURE__ */ op({ conv2DBackpropFilter_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkX2JhY2twcm9wX2ZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbnYyZF9iYWNrcHJvcF9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsb0JBQW9CLEVBQXdELE1BQU0saUJBQWlCLENBQUM7QUFJNUcsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDMUIsQ0FBSSxFQUFFLEVBQUssRUFBRSxXQUE2QyxFQUMxRCxPQUFnQyxFQUNoQyxHQUFvRCxFQUNwRCxhQUE0QixNQUFNLEVBQ2xDLGVBQXdDO0lBQzFDLElBQUksR0FBRyxHQUFHLENBQWEsQ0FBQztJQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2hCLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzRDtJQUNELElBQUksSUFBSSxHQUFHLEVBQWMsQ0FBQztJQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRTtJQUNELElBQUksQ0FBQyxNQUFNLENBQ1AsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMsZ0VBQWdFO1FBQ2xFLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZixHQUFHLEVBQUUsQ0FBQyw2REFBNkQ7UUFDL0QsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsTUFBTSxDQUNQLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUN4QixHQUFHLEVBQUUsQ0FBQyxrRUFBa0U7UUFDcEUsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUFHLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsTUFBTSxRQUFRLEdBQUcsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQzFCLEdBQUcsRUFBRSxDQUFDLDRDQUE0QyxPQUFPLFNBQVM7UUFDOUQsZ0NBQWdDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUMzQixHQUFHLEVBQUUsQ0FBQywwQ0FBMEMsUUFBUSxTQUFTO1FBQzdELGtDQUFrQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0UsTUFBTSxNQUFNLEdBQStCLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDOUQsTUFBTSxLQUFLLEdBQ1AsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFDLENBQUM7SUFFN0QsMERBQTBEO0lBQzFELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDWixvQkFBb0IsRUFBRSxNQUFtQyxFQUN6RCxLQUFnQyxDQUFhLENBQUM7QUFDM0QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxxQkFBcUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q29udjJEQmFja3Byb3BGaWx0ZXIsIENvbnYyREJhY2twcm9wRmlsdGVyQXR0cnMsIENvbnYyREJhY2twcm9wRmlsdGVySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQgKiBhcyBjb252X3V0aWwgZnJvbSAnLi9jb252X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBkZXJpdmF0aXZlIG9mIHRoZSBmaWx0ZXIgb2YgYSAyRCBjb252b2x1dGlvbi5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDQgb3IgcmFuayAzIG9mIHNoYXBlXG4gKiAgICAgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXS4gSWYgcmFuayAzLCBiYXRjaCBvZiAxIGlzIGFzc3VtZWQuXG4gKiBAcGFyYW0gZHkgVGhlIGR5IGltYWdlLCBvZiByYW5rIDQgb3IgcmFuayAzLCBvZiBzaGFwZVxuICogICAgIFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgb3V0RGVwdGhdLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXJTaGFwZSBUaGUgc2hhcGUgb2YgdGhlIGZpbHRlciwgbGVuZ3RoIDQsXG4gKiAgICAgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluRGVwdGgsIG91dERlcHRoXS5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBjb252b2x1dGlvbjogW3N0cmlkZUhlaWdodCxcbiAqIHN0cmlkZVdpZHRoXS5cbiAqIEBwYXJhbSBwYWQgQSBzdHJpbmcgZnJvbTogJ3NhbWUnLCAndmFsaWQnLiBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobVxuICogICAgIHVzZWQgaW4gdGhlIGZvcndhcmQgcHJvcCBvZiB0aGUgb3AuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkhXQ1wiLCBcIk5DSFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5IV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS5cbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqL1xuZnVuY3Rpb24gY29udjJEQmFja3Byb3BGaWx0ZXJfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oXG4gICAgeDogVCwgZHk6IFQsIGZpbHRlclNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxjb252X3V0aWwuRXhwbGljaXRQYWRkaW5nLFxuICAgIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVycgPSAnTkhXQycsXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFRlbnNvcjREIHtcbiAgbGV0IHg0RCA9IHggYXMgVGVuc29yNEQ7XG4gIGlmICh4LnJhbmsgPT09IDMpIHtcbiAgICB4NEQgPSByZXNoYXBlKHgsIFsxLCB4LnNoYXBlWzBdLCB4LnNoYXBlWzFdLCB4LnNoYXBlWzJdXSk7XG4gIH1cbiAgbGV0IGR5NEQgPSBkeSBhcyBUZW5zb3I0RDtcbiAgaWYgKGR5NEQucmFuayA9PT0gMykge1xuICAgIGR5NEQgPSByZXNoYXBlKGR5LCBbMSwgZHkuc2hhcGVbMF0sIGR5LnNoYXBlWzFdLCBkeS5zaGFwZVsyXV0pO1xuICB9XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeDRELnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjJkRGVyRmlsdGVyOiBpbnB1dCBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCBzaGFwZSBgICtcbiAgICAgICAgICBgJHt4NEQuc2hhcGV9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGR5NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmREZXJGaWx0ZXI6IGR5IG11c3QgYmUgcmFuayA0LCBidXQgZ290IHNoYXBlIGAgK1xuICAgICAgICAgIGAke2R5NEQuc2hhcGV9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGZpbHRlclNoYXBlLmxlbmd0aCA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmREZXJGaWx0ZXI6IGZpbHRlclNoYXBlIG11c3QgYmUgbGVuZ3RoIDQsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYCR7ZmlsdGVyU2hhcGV9LmApO1xuICBjb25zdCBpbkRlcHRoID0gZGF0YUZvcm1hdCA9PT0gJ05IV0MnID8geDRELnNoYXBlWzNdIDogeDRELnNoYXBlWzFdO1xuICBjb25zdCBvdXREZXB0aCA9IGRhdGFGb3JtYXQgPT09ICdOSFdDJyA/IGR5NEQuc2hhcGVbM10gOiBkeTRELnNoYXBlWzFdO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGluRGVwdGggPT09IGZpbHRlclNoYXBlWzJdLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYyZERlckZpbHRlcjogZGVwdGggb2YgaW5wdXQgJHtpbkRlcHRofSkgbXVzdCBgICtcbiAgICAgICAgICBgbWF0Y2ggaW5wdXQgZGVwdGggaW4gZmlsdGVyICgke2ZpbHRlclNoYXBlWzJdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBvdXREZXB0aCA9PT0gZmlsdGVyU2hhcGVbM10sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjJkRGVyRmlsdGVyOiBkZXB0aCBvZiBkeSAoJHtvdXREZXB0aH0pIG11c3QgYCArXG4gICAgICAgICAgYG1hdGNoIG91dHB1dCBkZXB0aCBmb3IgZmlsdGVyICgke2ZpbHRlclNoYXBlWzNdfSkuYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKCdjb252MmREZXJGaWx0ZXInLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IGlucHV0czogQ29udjJEQmFja3Byb3BGaWx0ZXJJbnB1dHMgPSB7eDogeDRELCBkeTogZHk0RH07XG4gIGNvbnN0IGF0dHJzOiBDb252MkRCYWNrcHJvcEZpbHRlckF0dHJzID1cbiAgICAgIHtzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbVJvdW5kaW5nTW9kZSwgZmlsdGVyU2hhcGV9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgQ29udjJEQmFja3Byb3BGaWx0ZXIsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUZW5zb3I0RDtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYyREJhY2twcm9wRmlsdGVyID0gLyogQF9fUFVSRV9fICovIG9wKHtjb252MkRCYWNrcHJvcEZpbHRlcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as broadcast_util from './broadcast_util';\nimport { elu } from './elu';\nimport { leakyRelu } from './leaky_relu';\nimport { mul } from './mul';\nimport { prelu } from './prelu';\nimport { relu } from './relu';\nimport { relu6 } from './relu6';\nimport { reshape } from './reshape';\nimport { sigmoid } from './sigmoid';\nimport { step } from './step';\nimport { sum } from './sum';\n// Returns gradient for fused activation.\nexport function getFusedDyActivation(dy, y, activation) {\n if (activation == null || activation === 'linear') {\n return dy;\n }\n if (activation === 'relu') {\n return mul(dy, step(y));\n }\n throw new Error(`Cannot compute gradient for fused activation ${activation}.`);\n}\n// Returns gradient for fused bias.\nexport function getFusedBiasGradient(bias, dyActivation) {\n let res = dyActivation;\n const reduceAxes = broadcast_util.getReductionAxes(bias.shape, dyActivation.shape);\n if (reduceAxes.length > 0) {\n res = sum(res, reduceAxes);\n }\n return reshape(res, bias.shape);\n}\nexport function applyActivation(x, activation, preluActivationWeights, leakyreluAlpha) {\n if (activation === 'linear') {\n return x;\n }\n else if (activation === 'relu') {\n return relu(x);\n }\n else if (activation === 'elu') {\n return elu(x);\n }\n else if (activation === 'relu6') {\n return relu6(x);\n }\n else if (activation === 'prelu') {\n return prelu(x, preluActivationWeights);\n }\n else if (activation === 'leakyrelu') {\n return leakyRelu(x, leakyreluAlpha);\n }\n else if (activation === 'sigmoid') {\n return sigmoid(x);\n }\n throw new Error(`Unknown fused activation ${activation}.`);\n}\n// Whether we should call fused ops.\nexport const shouldFuse = (gradientDepth, activation) => {\n const gradientMode = gradientDepth > 0;\n return !gradientMode || activation === 'linear';\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzZWRfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Z1c2VkX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxLQUFLLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLHlDQUF5QztBQUN6QyxNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLEVBQVUsRUFBRSxDQUFTLEVBQUUsVUFBc0I7SUFDL0MsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUU7UUFDakQsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUNELElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtRQUN6QixPQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekI7SUFDRCxNQUFNLElBQUksS0FBSyxDQUNYLGdEQUFnRCxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxtQ0FBbUM7QUFDbkMsTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxJQUFZLEVBQUUsWUFBb0I7SUFDcEMsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDO0lBQ3ZCLE1BQU0sVUFBVSxHQUNaLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsQ0FBUyxFQUFFLFVBQXNCLEVBQUUsc0JBQStCLEVBQ2xFLGNBQXVCO0lBQ3pCLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRTtRQUMzQixPQUFPLENBQUMsQ0FBQztLQUNWO1NBQU0sSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hCO1NBQU0sSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO1FBQy9CLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2Y7U0FBTSxJQUFJLFVBQVUsS0FBSyxPQUFPLEVBQUU7UUFDakMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7U0FBTSxJQUFJLFVBQVUsS0FBSyxPQUFPLEVBQUU7UUFDakMsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUM7S0FDekM7U0FBTSxJQUFJLFVBQVUsS0FBSyxXQUFXLEVBQUU7UUFDckMsT0FBTyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ3JDO1NBQU0sSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1FBQ25DLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25CO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsb0NBQW9DO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQXFCLEVBQUUsVUFBc0IsRUFBRSxFQUFFO0lBQzFFLE1BQU0sWUFBWSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFDLFlBQVksSUFBSSxVQUFVLEtBQUssUUFBUSxDQUFDO0FBQ2xELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5cbmltcG9ydCAqIGFzIGJyb2FkY2FzdF91dGlsIGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtlbHV9IGZyb20gJy4vZWx1JztcbmltcG9ydCB7QWN0aXZhdGlvbn0gZnJvbSAnLi9mdXNlZF90eXBlcyc7XG5pbXBvcnQge2xlYWt5UmVsdX0gZnJvbSAnLi9sZWFreV9yZWx1JztcbmltcG9ydCB7bXVsfSBmcm9tICcuL211bCc7XG5pbXBvcnQge3ByZWx1fSBmcm9tICcuL3ByZWx1JztcbmltcG9ydCB7cmVsdX0gZnJvbSAnLi9yZWx1JztcbmltcG9ydCB7cmVsdTZ9IGZyb20gJy4vcmVsdTYnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuaW1wb3J0IHtzaWdtb2lkfSBmcm9tICcuL3NpZ21vaWQnO1xuaW1wb3J0IHtzdGVwfSBmcm9tICcuL3N0ZXAnO1xuaW1wb3J0IHtzdW19IGZyb20gJy4vc3VtJztcblxuLy8gUmV0dXJucyBncmFkaWVudCBmb3IgZnVzZWQgYWN0aXZhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdXNlZER5QWN0aXZhdGlvbihcbiAgICBkeTogVGVuc29yLCB5OiBUZW5zb3IsIGFjdGl2YXRpb246IEFjdGl2YXRpb24pOiBUZW5zb3Ige1xuICBpZiAoYWN0aXZhdGlvbiA9PSBudWxsIHx8IGFjdGl2YXRpb24gPT09ICdsaW5lYXInKSB7XG4gICAgcmV0dXJuIGR5O1xuICB9XG4gIGlmIChhY3RpdmF0aW9uID09PSAncmVsdScpIHtcbiAgICByZXR1cm4gbXVsKGR5LCBzdGVwKHkpKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IGNvbXB1dGUgZ3JhZGllbnQgZm9yIGZ1c2VkIGFjdGl2YXRpb24gJHthY3RpdmF0aW9ufS5gKTtcbn1cblxuLy8gUmV0dXJucyBncmFkaWVudCBmb3IgZnVzZWQgYmlhcy5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdXNlZEJpYXNHcmFkaWVudChcbiAgICBiaWFzOiBUZW5zb3IsIGR5QWN0aXZhdGlvbjogVGVuc29yKTogVGVuc29yIHtcbiAgbGV0IHJlcyA9IGR5QWN0aXZhdGlvbjtcbiAgY29uc3QgcmVkdWNlQXhlcyA9XG4gICAgICBicm9hZGNhc3RfdXRpbC5nZXRSZWR1Y3Rpb25BeGVzKGJpYXMuc2hhcGUsIGR5QWN0aXZhdGlvbi5zaGFwZSk7XG4gIGlmIChyZWR1Y2VBeGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXMgPSBzdW0ocmVzLCByZWR1Y2VBeGVzKTtcbiAgfVxuICByZXR1cm4gcmVzaGFwZShyZXMsIGJpYXMuc2hhcGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlBY3RpdmF0aW9uKFxuICAgIHg6IFRlbnNvciwgYWN0aXZhdGlvbjogQWN0aXZhdGlvbiwgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cz86IFRlbnNvcixcbiAgICBsZWFreXJlbHVBbHBoYT86IG51bWJlcik6IFRlbnNvciB7XG4gIGlmIChhY3RpdmF0aW9uID09PSAnbGluZWFyJykge1xuICAgIHJldHVybiB4O1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdyZWx1Jykge1xuICAgIHJldHVybiByZWx1KHgpO1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdlbHUnKSB7XG4gICAgcmV0dXJuIGVsdSh4KTtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAncmVsdTYnKSB7XG4gICAgcmV0dXJuIHJlbHU2KHgpO1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdwcmVsdScpIHtcbiAgICByZXR1cm4gcHJlbHUoeCwgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyk7XG4gIH0gZWxzZSBpZiAoYWN0aXZhdGlvbiA9PT0gJ2xlYWt5cmVsdScpIHtcbiAgICByZXR1cm4gbGVha3lSZWx1KHgsIGxlYWt5cmVsdUFscGhhKTtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAnc2lnbW9pZCcpIHtcbiAgICByZXR1cm4gc2lnbW9pZCh4KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZnVzZWQgYWN0aXZhdGlvbiAke2FjdGl2YXRpb259LmApO1xufVxuXG4vLyBXaGV0aGVyIHdlIHNob3VsZCBjYWxsIGZ1c2VkIG9wcy5cbmV4cG9ydCBjb25zdCBzaG91bGRGdXNlID0gKGdyYWRpZW50RGVwdGg6IG51bWJlciwgYWN0aXZhdGlvbjogQWN0aXZhdGlvbikgPT4ge1xuICBjb25zdCBncmFkaWVudE1vZGUgPSBncmFkaWVudERlcHRoID4gMDtcbiAgcmV0dXJuICFncmFkaWVudE1vZGUgfHwgYWN0aXZhdGlvbiA9PT0gJ2xpbmVhcic7XG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { customGrad } from '../../gradients';\nimport { FusedConv2D } from '../../kernel_names';\nimport { makeTypesMatch } from '../../tensor_util';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { add } from '../add';\nimport * as broadcast_util from '../broadcast_util';\nimport { conv2d as unfusedConv2d } from '../conv2d';\nimport { conv2DBackpropFilter } from '../conv2d_backprop_filter';\nimport { conv2DBackpropInput } from '../conv2d_backprop_input';\nimport * as conv_util from '../conv_util';\nimport { applyActivation, getFusedBiasGradient, getFusedDyActivation, shouldFuse } from '../fused_util';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * Computes a 2D convolution over the input x, optionally fused with adding a\n * bias and applying an activation.\n *\n * ```js\n * const inputDepth = 2;\n * const inShape = [2, 2, 2, inputDepth];\n * const outputDepth = 2;\n * const fSize = 1;\n * const pad = 0;\n * const strides = 1;\n *\n * const x = tf.tensor4d( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n * 16], inShape);\n * const w = tf.tensor4d([-1, 1, -2, 0.5], [fSize, fSize, inputDepth,\n * outputDepth]);\n *\n * tf.fused.conv2d({ x, filter: w, strides, pad, dataFormat: 'NHWC',\n * dilations: [1, 1], bias: tf.scalar(5), activation: 'relu' }).print();\n * ```\n *\n * @param obj An object with the following properties:\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n * `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid` output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `dilations` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @param bias Tensor to be added to the result.\n * @param activation Name of activation kernel (defaults to `linear`) to be\n * applied\n * after biasAdd.\n * @param preluActivationWeights Tensor of prelu weights to be applied as part\n * of a `prelu` activation, typically the same shape as `x`.\n * @param leakyreluAlpha Optional. Alpha to be applied as part of a `leakyrelu`\n * activation.\n */\nfunction fusedConv2d_({ x, filter, strides, pad, dataFormat = 'NHWC', dilations = [1, 1], dimRoundingMode, bias, activation = 'linear', preluActivationWeights, leakyreluAlpha }) {\n activation = activation || 'linear';\n if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n // TODO: Transpose bias and preluActivationWeights properly for NCHW\n // format before computation.\n util.assert(dataFormat === 'NHWC', () => `Error in fused conv2d: got dataFormat of ${dataFormat} but ` +\n `only NHWC is currently supported for the case of gradient depth ` +\n `is 0 and the activation is not linear.`);\n let result = unfusedConv2d(x, filter, strides, pad, dataFormat, dilations, dimRoundingMode);\n if (bias != null) {\n result = add(result, bias);\n }\n return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha);\n }\n const $x = convertToTensor(x, 'x', 'conv2d', 'float32');\n const $filter = convertToTensor(filter, 'filter', 'conv2d', 'float32');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ` +\n `${x4D.rank}.`);\n util.assert($filter.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ` +\n `${$filter.rank}.`);\n conv_util.checkPadOnDimRoundingMode('fused conv2d', pad, dimRoundingMode);\n const inputChannels = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n util.assert($filter.shape[2] === inputChannels, () => `Error in conv2d: depth of input (${inputChannels}) must match ` +\n `input depth for filter ${$filter.shape[2]}.`);\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in conv2D: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = conv_util.computeConv2DInfo(x4D.shape, $filter.shape, strides, dilations, pad, dimRoundingMode);\n let $bias;\n if (bias != null) {\n $bias = convertToTensor(bias, 'bias', 'fused conv2d');\n [$bias] = makeTypesMatch($bias, $x);\n // According to TensorFlow, the bias is supposed be a 1-D tensor or a\n // scalar.\n //\n // 3-D or 4-D bias is not disabled for NHWC format, because they are\n // currently being used in some cases. For examplem in our code base,\n // https://github.com/tensorflow/tfjs/blob/b53bd47e880367ae57493f0ea628abaf08db2d5d/tfjs-core/src/ops/fused/fused_conv2d_test.ts#L1972.\n if (dataFormat === 'NHWC') {\n broadcast_util.assertAndGetBroadcastShape(convInfo.outShape, $bias.shape);\n }\n else {\n util.assert($bias.shape.length <= 1, () => `Error in fused conv2d: only supports scalar or 1-D Tensor ` +\n `bias for NCHW format but got the bias of ` +\n `rank-${$bias.shape.length}.`);\n util.assert($bias.shape.length === 0 || $bias.shape[0] === convInfo.outChannels ||\n $bias.shape[0] === 1, () => `Error in fused conv2d: bias shape (${$bias.shape}) is not ` +\n `compatible with the number of output channels ` +\n `(${convInfo.outChannels})`);\n }\n }\n let $preluActivationWeights;\n if (preluActivationWeights != null) {\n // PReLU's activation weights could be a scalar, a 1-D tensor or a 3-D\n // tensor.\n const alphaShape = preluActivationWeights.shape;\n util.assert(alphaShape.length <= 1 || alphaShape.length === 3, () => `Error in fused conv2d: only supports scalar, 1-D Tensor or ` +\n `3-D Tensor PReLU activation weights but got a tensor of ` +\n `rank-${alphaShape.length}.`);\n if (alphaShape.length === 1) {\n // Whether the data format is NCHW or NHWC, the 1-D PReLU activation\n // weights tensor should be aligned with the output channels of conv2d\n // result.\n util.assert(alphaShape[0] === 1 || alphaShape[0] === convInfo.outChannels, () => `Error in fused conv2d: PReLU activation weights ` +\n `(${alphaShape}) is not compatible with the number of output ` +\n `channels (${convInfo.outChannels}).`);\n }\n else if (alphaShape.length === 3) {\n // Whether the data format is NCHW or NHWC, the PReLU activation weights\n // tensor should has the compatible shape with the result of conv2d.\n try {\n broadcast_util.assertAndGetBroadcastShape(alphaShape, convInfo.outShape);\n }\n catch (e) {\n const errMsg = `Error in fused conv2d: PReLU activation weights (${alphaShape}) ` +\n `is not compatible with the output shape of the conv2d ` +\n `(${convInfo.outShape}).`;\n throw Error(errMsg);\n }\n }\n $preluActivationWeights = convertToTensor(preluActivationWeights, 'prelu weights', 'fused conv2d');\n }\n const grad = (dy, saved) => {\n util.assert(dataFormat === 'NHWC', () => `Error in gradient of fused conv2D: got dataFormat of ${dataFormat} but only NHWC is currently supported.`);\n const [$filter, x4D, y, $bias] = saved;\n const dyActivation = getFusedDyActivation(dy, y, activation);\n util.assert(conv_util.tupleValuesAreOne(dilations), () => 'Error in gradient of fused conv2D: ' +\n `dilation rates greater than 1 ` +\n `are not yet supported in gradients. Got dilations '${dilations}'`);\n const xDer = conv2DBackpropInput(x4D.shape, dyActivation, $filter, strides, pad);\n const filterDer = conv2DBackpropFilter(x4D, dyActivation, $filter.shape, strides, pad);\n const der = [xDer, filterDer];\n if ($bias != null) {\n const biasDer = getFusedBiasGradient($bias, dyActivation);\n der.push(biasDer);\n }\n return der;\n };\n const inputs = {\n x: x4D,\n filter: $filter,\n bias: $bias,\n preluActivationWeights: $preluActivationWeights\n };\n const attrs = {\n strides,\n pad,\n dataFormat,\n dilations,\n dimRoundingMode,\n activation,\n leakyreluAlpha\n };\n // Depending on the the params passed in we will have different number of\n // inputs and thus a a different number of elements in the gradient.\n if (bias == null) {\n const customOp = customGrad((x4D, filter, save) => {\n let res = \n // tslint:disable-next-line: no-unnecessary-type-assertion\n ENGINE.runKernel(FusedConv2D, inputs, attrs);\n save([filter, x4D, res]);\n if (reshapedTo4D) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return { value: res, gradFunc: grad };\n });\n return customOp(x4D, $filter);\n }\n else {\n const customOpWithBias = customGrad((x4D, filter, bias, save) => {\n let res = ENGINE.runKernel(FusedConv2D, inputs, attrs);\n save([filter, x4D, res, bias]);\n if (reshapedTo4D) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return { value: res, gradFunc: grad };\n });\n return customOpWithBias(x4D, $filter, $bias);\n }\n}\nexport const conv2d = /* @__PURE__ */ op({ fusedConv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZnVzZWQvY29udjJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxXQUFXLEVBQXNDLE1BQU0sb0JBQW9CLENBQUM7QUFJcEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sS0FBSyxjQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFDLE1BQU0sSUFBSSxhQUFhLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxLQUFLLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFFMUMsT0FBTyxFQUFDLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdERztBQUNILFNBQVMsWUFBWSxDQUE4QixFQUNqRCxDQUFDLEVBQ0QsTUFBTSxFQUNOLE9BQU8sRUFDUCxHQUFHLEVBQ0gsVUFBVSxHQUFHLE1BQU0sRUFDbkIsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNsQixlQUFlLEVBQ2YsSUFBSSxFQUNKLFVBQVUsR0FBRyxRQUFRLEVBQ3JCLHNCQUFzQixFQUN0QixjQUFjLEVBYWY7SUFDQyxVQUFVLEdBQUcsVUFBVSxJQUFJLFFBQVEsQ0FBQztJQUVwQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsS0FBSyxLQUFLLEVBQUU7UUFDaEUsb0VBQW9FO1FBQ3BFLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsTUFBTSxDQUNQLFVBQVUsS0FBSyxNQUFNLEVBQ3JCLEdBQUcsRUFBRSxDQUFDLDRDQUE0QyxVQUFVLE9BQU87WUFDL0Qsa0VBQWtFO1lBQ2xFLHdDQUF3QyxDQUFDLENBQUM7UUFFbEQsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUN0QixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNyRSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUI7UUFFRCxPQUFPLGVBQWUsQ0FDWCxNQUFNLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLGNBQWMsQ0FBTSxDQUFDO0tBQzdFO0lBRUQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV2RSxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXpCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUNQLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNkLEdBQUcsRUFBRSxDQUFDLDREQUE0RDtRQUM5RCxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2xCLEdBQUcsRUFBRSxDQUFDLDZEQUE2RDtRQUMvRCxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sYUFBYSxHQUFHLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsRUFDbEMsR0FBRyxFQUFFLENBQUMsb0NBQW9DLGFBQWEsZUFBZTtRQUNsRSwwQkFBMEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxTQUFTLENBQUMsOEJBQThCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUM1RCxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsZUFBZSxPQUFPLG1CQUFtQixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FDeEMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXhFLElBQUksS0FBYSxDQUFDO0lBQ2xCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtRQUNoQixLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLHFFQUFxRTtRQUNyRSxVQUFVO1FBQ1YsRUFBRTtRQUNGLG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckUsdUlBQXVJO1FBQ3ZJLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUN6QixjQUFjLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0U7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUN2QixHQUFHLEVBQUUsQ0FBQyw0REFBNEQ7Z0JBQzlELDJDQUEyQztnQkFDM0MsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFFdkMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsV0FBVztnQkFDL0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ3hCLEdBQUcsRUFBRSxDQUFDLHNDQUFzQyxLQUFLLENBQUMsS0FBSyxXQUFXO2dCQUM5RCxnREFBZ0Q7Z0JBQ2hELElBQUksUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDdEM7S0FDRjtJQUVELElBQUksdUJBQStCLENBQUM7SUFDcEMsSUFBSSxzQkFBc0IsSUFBSSxJQUFJLEVBQUU7UUFDbEMsc0VBQXNFO1FBQ3RFLFVBQVU7UUFDVixNQUFNLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDakQsR0FBRyxFQUFFLENBQUMsNkRBQTZEO1lBQy9ELDBEQUEwRDtZQUMxRCxRQUFRLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRXRDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0Isb0VBQW9FO1lBQ3BFLHNFQUFzRTtZQUN0RSxVQUFVO1lBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FDUCxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsV0FBVyxFQUM3RCxHQUFHLEVBQUUsQ0FBQyxrREFBa0Q7Z0JBQ3BELElBQUksVUFBVSxnREFBZ0Q7Z0JBQzlELGFBQWEsUUFBUSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7U0FDaEQ7YUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLHdFQUF3RTtZQUN4RSxvRUFBb0U7WUFDcEUsSUFBSTtnQkFDRixjQUFjLENBQUMsMEJBQTBCLENBQ3JDLFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDcEM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixNQUFNLE1BQU0sR0FDUixvREFBb0QsVUFBVSxJQUFJO29CQUNsRSx3REFBd0Q7b0JBQ3hELElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDO2dCQUM5QixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQjtTQUNGO1FBRUQsdUJBQXVCLEdBQUcsZUFBZSxDQUNyQyxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7S0FDOUQ7SUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLEVBQVksRUFBRSxLQUFlLEVBQUUsRUFBRTtRQUM3QyxJQUFJLENBQUMsTUFBTSxDQUNQLFVBQVUsS0FBSyxNQUFNLEVBQ3JCLEdBQUcsRUFBRSxDQUFDLHdEQUNGLFVBQVUsd0NBQXdDLENBQUMsQ0FBQztRQUU1RCxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQzFCLEtBQStDLENBQUM7UUFFcEQsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQWEsQ0FBQztRQUV6RSxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFDdEMsR0FBRyxFQUFFLENBQUMscUNBQXFDO1lBQ3ZDLGdDQUFnQztZQUNoQyxzREFBc0QsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUU1RSxNQUFNLElBQUksR0FDTixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUNYLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekUsTUFBTSxHQUFHLEdBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFeEMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMxRCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBc0I7UUFDaEMsQ0FBQyxFQUFFLEdBQUc7UUFDTixNQUFNLEVBQUUsT0FBTztRQUNmLElBQUksRUFBRSxLQUFLO1FBQ1gsc0JBQXNCLEVBQUUsdUJBQXVCO0tBQ2hELENBQUM7SUFFRixNQUFNLEtBQUssR0FBcUI7UUFDOUIsT0FBTztRQUNQLEdBQUc7UUFDSCxVQUFVO1FBQ1YsU0FBUztRQUNULGVBQWU7UUFDZixVQUFVO1FBQ1YsY0FBYztLQUNmLENBQUM7SUFFRix5RUFBeUU7SUFDekUsb0VBQW9FO0lBQ3BFLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtRQUNoQixNQUFNLFFBQVEsR0FDVixVQUFVLENBQUMsQ0FBQyxHQUFhLEVBQUUsTUFBZ0IsRUFBRSxJQUFrQixFQUFFLEVBQUU7WUFDakUsSUFBSSxHQUFHO1lBQ0gsMERBQTBEO1lBQzFELE1BQU0sQ0FBQyxTQUFTLENBQ1osV0FBVyxFQUFFLE1BQW1DLEVBQ2hELEtBQWdDLENBQUMsQ0FBQztZQUUxQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFekIsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLDBEQUEwRDtnQkFDMUQsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDO2FBQ2Q7WUFFRCxPQUFPLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFNLENBQUM7S0FDcEM7U0FBTTtRQUNMLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUMvQixDQUFDLEdBQWEsRUFBRSxNQUFnQixFQUFFLElBQVksRUFBRSxJQUFrQixFQUFFLEVBQUU7WUFDcEUsSUFBSSxHQUFHLEdBQXNCLE1BQU0sQ0FBQyxTQUFTLENBQ3pDLFdBQVcsRUFBRSxNQUFtQyxFQUNoRCxLQUFnQyxDQUFDLENBQUM7WUFFdEMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUUvQixJQUFJLFlBQVksRUFBRTtnQkFDaEIsMERBQTBEO2dCQUMxRCxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pELENBQUM7YUFDZDtZQUVELE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVQLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQU0sQ0FBQztLQUNuRDtBQUNILENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtjdXN0b21HcmFkfSBmcm9tICcuLi8uLi9ncmFkaWVudHMnO1xuaW1wb3J0IHtGdXNlZENvbnYyRCwgRnVzZWRDb252MkRBdHRycywgRnVzZWRDb252MkRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4vLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IzRCwgVGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge0dyYWRTYXZlRnVuYywgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0ICogYXMgYnJvYWRjYXN0X3V0aWwgZnJvbSAnLi4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtjb252MmQgYXMgdW5mdXNlZENvbnYyZH0gZnJvbSAnLi4vY29udjJkJztcbmltcG9ydCB7Y29udjJEQmFja3Byb3BGaWx0ZXJ9IGZyb20gJy4uL2NvbnYyZF9iYWNrcHJvcF9maWx0ZXInO1xuaW1wb3J0IHtjb252MkRCYWNrcHJvcElucHV0fSBmcm9tICcuLi9jb252MmRfYmFja3Byb3BfaW5wdXQnO1xuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4uL2NvbnZfdXRpbCc7XG5pbXBvcnQge0FjdGl2YXRpb259IGZyb20gJy4uL2Z1c2VkX3R5cGVzJztcbmltcG9ydCB7YXBwbHlBY3RpdmF0aW9uLCBnZXRGdXNlZEJpYXNHcmFkaWVudCwgZ2V0RnVzZWREeUFjdGl2YXRpb24sIHNob3VsZEZ1c2V9IGZyb20gJy4uL2Z1c2VkX3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYSAyRCBjb252b2x1dGlvbiBvdmVyIHRoZSBpbnB1dCB4LCBvcHRpb25hbGx5IGZ1c2VkIHdpdGggYWRkaW5nIGFcbiAqIGJpYXMgYW5kIGFwcGx5aW5nIGFuIGFjdGl2YXRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGlucHV0RGVwdGggPSAyO1xuICogY29uc3QgaW5TaGFwZSA9IFsyLCAyLCAyLCBpbnB1dERlcHRoXTtcbiAqIGNvbnN0IG91dHB1dERlcHRoID0gMjtcbiAqIGNvbnN0IGZTaXplID0gMTtcbiAqIGNvbnN0IHBhZCA9IDA7XG4gKiBjb25zdCBzdHJpZGVzID0gMTtcbiAqXG4gKiBjb25zdCB4ID0gdGYudGVuc29yNGQoIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICogMTZdLCBpblNoYXBlKTtcbiAqIGNvbnN0IHcgPSB0Zi50ZW5zb3I0ZChbLTEsIDEsIC0yLCAwLjVdLCBbZlNpemUsIGZTaXplLCBpbnB1dERlcHRoLFxuICogb3V0cHV0RGVwdGhdKTtcbiAqXG4gKiB0Zi5mdXNlZC5jb252MmQoeyB4LCBmaWx0ZXI6IHcsIHN0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdDogJ05IV0MnLFxuICogZGlsYXRpb25zOiBbMSwgMV0sIGJpYXM6IHRmLnNjYWxhcig1KSwgYWN0aXZhdGlvbjogJ3JlbHUnIH0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb2JqIEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIG9mIHJhbmsgNCBvciByYW5rIDMsIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXNcbiAqIGFzc3VtZWQuXG4gKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIsIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgICBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluRGVwdGgsIG91dERlcHRoXWAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlSGVpZ2h0LFxuICogc3RyaWRlV2lkdGhdYC5cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgLSBgdmFsaWRgIG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkYXRhRm9ybWF0IEFuIG9wdGlvbmFsIHN0cmluZyBmcm9tOiBcIk5IV0NcIiwgXCJOQ0hXXCIuIERlZmF1bHRzIHRvXG4gKiAgICAgXCJOSFdDXCIuIFNwZWNpZnkgdGhlIGRhdGEgZm9ybWF0IG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEuIFdpdGggdGhlXG4gKiAgICAgZGVmYXVsdCBmb3JtYXQgXCJOSFdDXCIsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgb3JkZXIgb2Y6IFtiYXRjaCxcbiAqICAgICBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uIE9ubHkgXCJOSFdDXCIgaXMgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gYXRyb3VzIGNvbnZvbHV0aW9uLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYGRpbGF0aW9uc2AgaXMgYSBzaW5nbGVcbiAqICAgICBudW1iZXIsIHRoZW4gYGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW5cbiAqICAgICAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqIEBwYXJhbSBiaWFzIFRlbnNvciB0byBiZSBhZGRlZCB0byB0aGUgcmVzdWx0LlxuICogQHBhcmFtIGFjdGl2YXRpb24gTmFtZSBvZiBhY3RpdmF0aW9uIGtlcm5lbCAoZGVmYXVsdHMgdG8gYGxpbmVhcmApIHRvIGJlXG4gKiAgICAgYXBwbGllZFxuICogICAgICBhZnRlciBiaWFzQWRkLlxuICogQHBhcmFtIHByZWx1QWN0aXZhdGlvbldlaWdodHMgVGVuc29yIG9mIHByZWx1IHdlaWdodHMgdG8gYmUgYXBwbGllZCBhcyBwYXJ0XG4gKiAgICAgb2YgYSBgcHJlbHVgIGFjdGl2YXRpb24sIHR5cGljYWxseSB0aGUgc2FtZSBzaGFwZSBhcyBgeGAuXG4gKiBAcGFyYW0gbGVha3lyZWx1QWxwaGEgT3B0aW9uYWwuIEFscGhhIHRvIGJlIGFwcGxpZWQgYXMgcGFydCBvZiBhIGBsZWFreXJlbHVgXG4gKiAgICAgYWN0aXZhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZnVzZWRDb252MmRfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oe1xuICB4LFxuICBmaWx0ZXIsXG4gIHN0cmlkZXMsXG4gIHBhZCxcbiAgZGF0YUZvcm1hdCA9ICdOSFdDJyxcbiAgZGlsYXRpb25zID0gWzEsIDFdLFxuICBkaW1Sb3VuZGluZ01vZGUsXG4gIGJpYXMsXG4gIGFjdGl2YXRpb24gPSAnbGluZWFyJyxcbiAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyxcbiAgbGVha3lyZWx1QWxwaGFcbn06IHtcbiAgeDogVHxUZW5zb3JMaWtlLFxuICBmaWx0ZXI6IFRlbnNvcjREfFRlbnNvckxpa2UsXG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxjb252X3V0aWwuRXhwbGljaXRQYWRkaW5nLFxuICBkYXRhRm9ybWF0PzogJ05IV0MnfCdOQ0hXJyxcbiAgZGlsYXRpb25zPzogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcsXG4gIGJpYXM/OiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgYWN0aXZhdGlvbj86IEFjdGl2YXRpb24sXG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHM/OiBUZW5zb3IsXG4gIGxlYWt5cmVsdUFscGhhPzogbnVtYmVyXG59KTogVCB7XG4gIGFjdGl2YXRpb24gPSBhY3RpdmF0aW9uIHx8ICdsaW5lYXInO1xuXG4gIGlmIChzaG91bGRGdXNlKEVOR0lORS5zdGF0ZS5ncmFkaWVudERlcHRoLCBhY3RpdmF0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICAvLyBUT0RPOiBUcmFuc3Bvc2UgYmlhcyBhbmQgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyBwcm9wZXJseSBmb3IgTkNIV1xuICAgIC8vIGZvcm1hdCBiZWZvcmUgY29tcHV0YXRpb24uXG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGRhdGFGb3JtYXQgPT09ICdOSFdDJyxcbiAgICAgICAgKCkgPT4gYEVycm9yIGluIGZ1c2VkIGNvbnYyZDogZ290IGRhdGFGb3JtYXQgb2YgJHtkYXRhRm9ybWF0fSBidXQgYCArXG4gICAgICAgICAgICBgb25seSBOSFdDIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIHRoZSBjYXNlIG9mIGdyYWRpZW50IGRlcHRoIGAgK1xuICAgICAgICAgICAgYGlzIDAgYW5kIHRoZSBhY3RpdmF0aW9uIGlzIG5vdCBsaW5lYXIuYCk7XG5cbiAgICBsZXQgcmVzdWx0ID0gdW5mdXNlZENvbnYyZChcbiAgICAgICAgeCwgZmlsdGVyLCBzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9ucywgZGltUm91bmRpbmdNb2RlKTtcbiAgICBpZiAoYmlhcyAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCBiaWFzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICAgICAgICAgcmVzdWx0LCBhY3RpdmF0aW9uLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCBsZWFreXJlbHVBbHBoYSkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2NvbnYyZCcsICdmbG9hdDMyJyk7XG4gIGNvbnN0ICRmaWx0ZXIgPSBjb252ZXJ0VG9UZW5zb3IoZmlsdGVyLCAnZmlsdGVyJywgJ2NvbnYyZCcsICdmbG9hdDMyJyk7XG5cbiAgbGV0IHg0RCA9ICR4IGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG5cbiAgaWYgKCR4LnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIHg0RCA9IHJlc2hhcGUoJHgsIFsxLCAkeC5zaGFwZVswXSwgJHguc2hhcGVbMV0sICR4LnNoYXBlWzJdXSk7XG4gIH1cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IGlucHV0IG11c3QgYmUgcmFuayA0LCBidXQgZ290IHJhbmsgYCArXG4gICAgICAgICAgYCR7eDRELnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRmaWx0ZXIucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IGZpbHRlciBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyRmaWx0ZXIucmFua30uYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKCdmdXNlZCBjb252MmQnLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IGlucHV0Q2hhbm5lbHMgPSBkYXRhRm9ybWF0ID09PSAnTkhXQycgPyB4NEQuc2hhcGVbM10gOiB4NEQuc2hhcGVbMV07XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGZpbHRlci5zaGFwZVsyXSA9PT0gaW5wdXRDaGFubmVscyxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmQ6IGRlcHRoIG9mIGlucHV0ICgke2lucHV0Q2hhbm5lbHN9KSBtdXN0IG1hdGNoIGAgK1xuICAgICAgICAgIGBpbnB1dCBkZXB0aCBmb3IgZmlsdGVyICR7JGZpbHRlci5zaGFwZVsyXX0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY29udl91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGNvbnYyRDogRWl0aGVyIHN0cmlkZXMgb3IgZGlsYXRpb25zIG11c3QgYmUgMS4gJyArXG4gICAgICAgICAgYEdvdCBzdHJpZGVzICR7c3RyaWRlc30gYW5kIGRpbGF0aW9ucyAnJHtkaWxhdGlvbnN9J2ApO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gY29udl91dGlsLmNvbXB1dGVDb252MkRJbmZvKFxuICAgICAgeDRELnNoYXBlLCAkZmlsdGVyLnNoYXBlLCBzdHJpZGVzLCBkaWxhdGlvbnMsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcblxuICBsZXQgJGJpYXM6IFRlbnNvcjtcbiAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICRiaWFzID0gY29udmVydFRvVGVuc29yKGJpYXMsICdiaWFzJywgJ2Z1c2VkIGNvbnYyZCcpO1xuICAgIFskYmlhc10gPSBtYWtlVHlwZXNNYXRjaCgkYmlhcywgJHgpO1xuXG4gICAgLy8gQWNjb3JkaW5nIHRvIFRlbnNvckZsb3csIHRoZSBiaWFzIGlzIHN1cHBvc2VkIGJlIGEgMS1EIHRlbnNvciBvciBhXG4gICAgLy8gc2NhbGFyLlxuICAgIC8vXG4gICAgLy8gMy1EIG9yIDQtRCBiaWFzIGlzIG5vdCBkaXNhYmxlZCBmb3IgTkhXQyBmb3JtYXQsIGJlY2F1c2UgdGhleSBhcmVcbiAgICAvLyBjdXJyZW50bHkgYmVpbmcgdXNlZCBpbiBzb21lIGNhc2VzLiBGb3IgZXhhbXBsZW0gaW4gb3VyIGNvZGUgYmFzZSxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2Jsb2IvYjUzYmQ0N2U4ODAzNjdhZTU3NDkzZjBlYTYyOGFiYWYwOGRiMmQ1ZC90ZmpzLWNvcmUvc3JjL29wcy9mdXNlZC9mdXNlZF9jb252MmRfdGVzdC50cyNMMTk3Mi5cbiAgICBpZiAoZGF0YUZvcm1hdCA9PT0gJ05IV0MnKSB7XG4gICAgICBicm9hZGNhc3RfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShjb252SW5mby5vdXRTaGFwZSwgJGJpYXMuc2hhcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICAkYmlhcy5zaGFwZS5sZW5ndGggPD0gMSxcbiAgICAgICAgICAoKSA9PiBgRXJyb3IgaW4gZnVzZWQgY29udjJkOiBvbmx5IHN1cHBvcnRzIHNjYWxhciBvciAxLUQgVGVuc29yIGAgK1xuICAgICAgICAgICAgICBgYmlhcyBmb3IgTkNIVyBmb3JtYXQgYnV0IGdvdCB0aGUgYmlhcyBvZiBgICtcbiAgICAgICAgICAgICAgYHJhbmstJHskYmlhcy5zaGFwZS5sZW5ndGh9LmApO1xuXG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICAkYmlhcy5zaGFwZS5sZW5ndGggPT09IDAgfHwgJGJpYXMuc2hhcGVbMF0gPT09IGNvbnZJbmZvLm91dENoYW5uZWxzIHx8XG4gICAgICAgICAgICAgICRiaWFzLnNoYXBlWzBdID09PSAxLFxuICAgICAgICAgICgpID0+IGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IGJpYXMgc2hhcGUgKCR7JGJpYXMuc2hhcGV9KSBpcyBub3QgYCArXG4gICAgICAgICAgICAgIGBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlciBvZiBvdXRwdXQgY2hhbm5lbHMgYCArXG4gICAgICAgICAgICAgIGAoJHtjb252SW5mby5vdXRDaGFubmVsc30pYCk7XG4gICAgfVxuICB9XG5cbiAgbGV0ICRwcmVsdUFjdGl2YXRpb25XZWlnaHRzOiBUZW5zb3I7XG4gIGlmIChwcmVsdUFjdGl2YXRpb25XZWlnaHRzICE9IG51bGwpIHtcbiAgICAvLyBQUmVMVSdzIGFjdGl2YXRpb24gd2VpZ2h0cyBjb3VsZCBiZSBhIHNjYWxhciwgYSAxLUQgdGVuc29yIG9yIGEgMy1EXG4gICAgLy8gdGVuc29yLlxuICAgIGNvbnN0IGFscGhhU2hhcGUgPSBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLnNoYXBlO1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBhbHBoYVNoYXBlLmxlbmd0aCA8PSAxIHx8IGFscGhhU2hhcGUubGVuZ3RoID09PSAzLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gZnVzZWQgY29udjJkOiBvbmx5IHN1cHBvcnRzIHNjYWxhciwgMS1EIFRlbnNvciBvciBgICtcbiAgICAgICAgICAgIGAzLUQgVGVuc29yIFBSZUxVIGFjdGl2YXRpb24gd2VpZ2h0cyBidXQgZ290IGEgdGVuc29yIG9mIGAgK1xuICAgICAgICAgICAgYHJhbmstJHthbHBoYVNoYXBlLmxlbmd0aH0uYCk7XG5cbiAgICBpZiAoYWxwaGFTaGFwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIFdoZXRoZXIgdGhlIGRhdGEgZm9ybWF0IGlzIE5DSFcgb3IgTkhXQywgdGhlIDEtRCBQUmVMVSBhY3RpdmF0aW9uXG4gICAgICAvLyB3ZWlnaHRzIHRlbnNvciBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHRoZSBvdXRwdXQgY2hhbm5lbHMgb2YgY29udjJkXG4gICAgICAvLyByZXN1bHQuXG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICBhbHBoYVNoYXBlWzBdID09PSAxIHx8IGFscGhhU2hhcGVbMF0gPT09IGNvbnZJbmZvLm91dENoYW5uZWxzLFxuICAgICAgICAgICgpID0+IGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IFBSZUxVIGFjdGl2YXRpb24gd2VpZ2h0cyBgICtcbiAgICAgICAgICAgICAgYCgke2FscGhhU2hhcGV9KSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGAgK1xuICAgICAgICAgICAgICBgY2hhbm5lbHMgKCR7Y29udkluZm8ub3V0Q2hhbm5lbHN9KS5gKTtcbiAgICB9IGVsc2UgaWYgKGFscGhhU2hhcGUubGVuZ3RoID09PSAzKSB7XG4gICAgICAvLyBXaGV0aGVyIHRoZSBkYXRhIGZvcm1hdCBpcyBOQ0hXIG9yIE5IV0MsIHRoZSBQUmVMVSBhY3RpdmF0aW9uIHdlaWdodHNcbiAgICAgIC8vIHRlbnNvciBzaG91bGQgaGFzIHRoZSBjb21wYXRpYmxlIHNoYXBlIHdpdGggdGhlIHJlc3VsdCBvZiBjb252MmQuXG4gICAgICB0cnkge1xuICAgICAgICBicm9hZGNhc3RfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShcbiAgICAgICAgICAgIGFscGhhU2hhcGUsIGNvbnZJbmZvLm91dFNoYXBlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgZXJyTXNnID1cbiAgICAgICAgICAgIGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IFBSZUxVIGFjdGl2YXRpb24gd2VpZ2h0cyAoJHthbHBoYVNoYXBlfSkgYCArXG4gICAgICAgICAgICBgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgb3V0cHV0IHNoYXBlIG9mIHRoZSBjb252MmQgYCArXG4gICAgICAgICAgICBgKCR7Y29udkluZm8ub3V0U2hhcGV9KS5gO1xuICAgICAgICB0aHJvdyBFcnJvcihlcnJNc2cpO1xuICAgICAgfVxuICAgIH1cblxuICAgICRwcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gY29udmVydFRvVGVuc29yKFxuICAgICAgICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCAncHJlbHUgd2VpZ2h0cycsICdmdXNlZCBjb252MmQnKTtcbiAgfVxuXG4gIGNvbnN0IGdyYWQgPSAoZHk6IFRlbnNvcjRELCBzYXZlZDogVGVuc29yW10pID0+IHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgZGF0YUZvcm1hdCA9PT0gJ05IV0MnLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gZ3JhZGllbnQgb2YgZnVzZWQgY29udjJEOiBnb3QgZGF0YUZvcm1hdCBvZiAke1xuICAgICAgICAgICAgZGF0YUZvcm1hdH0gYnV0IG9ubHkgTkhXQyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLmApO1xuXG4gICAgY29uc3QgWyRmaWx0ZXIsIHg0RCwgeSwgJGJpYXNdID1cbiAgICAgICAgc2F2ZWQgYXMgW1RlbnNvcjRELCBUZW5zb3I0RCwgVGVuc29yNEQsIFRlbnNvcl07XG5cbiAgICBjb25zdCBkeUFjdGl2YXRpb24gPSBnZXRGdXNlZER5QWN0aXZhdGlvbihkeSwgeSwgYWN0aXZhdGlvbikgYXMgVGVuc29yNEQ7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgY29udl91dGlsLnR1cGxlVmFsdWVzQXJlT25lKGRpbGF0aW9ucyksXG4gICAgICAgICgpID0+ICdFcnJvciBpbiBncmFkaWVudCBvZiBmdXNlZCBjb252MkQ6ICcgK1xuICAgICAgICAgICAgYGRpbGF0aW9uIHJhdGVzIGdyZWF0ZXIgdGhhbiAxIGAgK1xuICAgICAgICAgICAgYGFyZSBub3QgeWV0IHN1cHBvcnRlZCBpbiBncmFkaWVudHMuIEdvdCBkaWxhdGlvbnMgJyR7ZGlsYXRpb25zfSdgKTtcblxuICAgIGNvbnN0IHhEZXIgPVxuICAgICAgICBjb252MkRCYWNrcHJvcElucHV0KHg0RC5zaGFwZSwgZHlBY3RpdmF0aW9uLCAkZmlsdGVyLCBzdHJpZGVzLCBwYWQpO1xuICAgIGNvbnN0IGZpbHRlckRlciA9XG4gICAgICAgIGNvbnYyREJhY2twcm9wRmlsdGVyKHg0RCwgZHlBY3RpdmF0aW9uLCAkZmlsdGVyLnNoYXBlLCBzdHJpZGVzLCBwYWQpO1xuICAgIGNvbnN0IGRlcjogVGVuc29yW10gPSBbeERlciwgZmlsdGVyRGVyXTtcblxuICAgIGlmICgkYmlhcyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBiaWFzRGVyID0gZ2V0RnVzZWRCaWFzR3JhZGllbnQoJGJpYXMsIGR5QWN0aXZhdGlvbik7XG4gICAgICBkZXIucHVzaChiaWFzRGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlcjtcbiAgfTtcblxuICBjb25zdCBpbnB1dHM6IEZ1c2VkQ29udjJESW5wdXRzID0ge1xuICAgIHg6IHg0RCxcbiAgICBmaWx0ZXI6ICRmaWx0ZXIsXG4gICAgYmlhczogJGJpYXMsXG4gICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0czogJHByZWx1QWN0aXZhdGlvbldlaWdodHNcbiAgfTtcblxuICBjb25zdCBhdHRyczogRnVzZWRDb252MkRBdHRycyA9IHtcbiAgICBzdHJpZGVzLFxuICAgIHBhZCxcbiAgICBkYXRhRm9ybWF0LFxuICAgIGRpbGF0aW9ucyxcbiAgICBkaW1Sb3VuZGluZ01vZGUsXG4gICAgYWN0aXZhdGlvbixcbiAgICBsZWFreXJlbHVBbHBoYVxuICB9O1xuXG4gIC8vIERlcGVuZGluZyBvbiB0aGUgdGhlIHBhcmFtcyBwYXNzZWQgaW4gd2Ugd2lsbCBoYXZlIGRpZmZlcmVudCBudW1iZXIgb2ZcbiAgLy8gaW5wdXRzIGFuZCB0aHVzIGEgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBncmFkaWVudC5cbiAgaWYgKGJpYXMgPT0gbnVsbCkge1xuICAgIGNvbnN0IGN1c3RvbU9wID1cbiAgICAgICAgY3VzdG9tR3JhZCgoeDREOiBUZW5zb3I0RCwgZmlsdGVyOiBUZW5zb3I0RCwgc2F2ZTogR3JhZFNhdmVGdW5jKSA9PiB7XG4gICAgICAgICAgbGV0IHJlczogVGVuc29yNER8VGVuc29yM0QgPVxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICBGdXNlZENvbnYyRCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG5cbiAgICAgICAgICBzYXZlKFtmaWx0ZXIsIHg0RCwgcmVzXSk7XG5cbiAgICAgICAgICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICAgICByZXMgPSByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhc1xuICAgICAgICAgICAgICAgIFRlbnNvcjNEO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7dmFsdWU6IHJlcywgZ3JhZEZ1bmM6IGdyYWR9O1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gY3VzdG9tT3AoeDRELCAkZmlsdGVyKSBhcyBUO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGN1c3RvbU9wV2l0aEJpYXMgPSBjdXN0b21HcmFkKFxuICAgICAgICAoeDREOiBUZW5zb3I0RCwgZmlsdGVyOiBUZW5zb3I0RCwgYmlhczogVGVuc29yLCBzYXZlOiBHcmFkU2F2ZUZ1bmMpID0+IHtcbiAgICAgICAgICBsZXQgcmVzOiBUZW5zb3I0RHxUZW5zb3IzRCA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgIEZ1c2VkQ29udjJELCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xuXG4gICAgICAgICAgc2F2ZShbZmlsdGVyLCB4NEQsIHJlcywgYmlhc10pO1xuXG4gICAgICAgICAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgICAgICAgcmVzID0gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMV0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdXSkgYXNcbiAgICAgICAgICAgICAgICBUZW5zb3IzRDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge3ZhbHVlOiByZXMsIGdyYWRGdW5jOiBncmFkfTtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY3VzdG9tT3BXaXRoQmlhcyh4NEQsICRmaWx0ZXIsICRiaWFzKSBhcyBUO1xuICB9XG59XG5leHBvcnQgY29uc3QgY29udjJkID0gLyogQF9fUFVSRV9fICovIG9wKHtmdXNlZENvbnYyZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DepthwiseConv2dNativeBackpropFilter } from '../kernel_names';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nfunction depthwiseConv2dNativeBackpropFilter_(x, dy, filterShape, strides, pad, dilations = [1, 1], dimRoundingMode) {\n let x4D = x;\n if (x.rank === 3) {\n x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]);\n }\n let dy4D = dy;\n if (dy4D.rank === 3) {\n dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]);\n }\n const inputs = { x: x4D, dy: dy4D };\n const attrs = { strides, pad, dimRoundingMode, dilations, filterShape };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(DepthwiseConv2dNativeBackpropFilter, inputs, attrs);\n}\nexport const depthwiseConv2dNativeBackpropFilter = op({ depthwiseConv2dNativeBackpropFilter_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGh3aXNlX2NvbnYyZF9uYXRpdmVfYmFja3Byb3BfZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZGVwdGh3aXNlX2NvbnYyZF9uYXRpdmVfYmFja3Byb3BfZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLG1DQUFtQyxFQUFzRixNQUFNLGlCQUFpQixDQUFDO0FBTXpKLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxTQUFTLG9DQUFvQyxDQUN6QyxDQUFJLEVBQUUsRUFBSyxFQUFFLFdBQTZDLEVBQzFELE9BQWdDLEVBQ2hDLEdBQTBDLEVBQzFDLFlBQXFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMzQyxlQUF3QztJQUMxQyxJQUFJLEdBQUcsR0FBRyxDQUFhLENBQUM7SUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNoQixHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0Q7SUFDRCxJQUFJLElBQUksR0FBRyxFQUFjLENBQUM7SUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNuQixJQUFJLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEU7SUFFRCxNQUFNLE1BQU0sR0FBOEMsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUM3RSxNQUFNLEtBQUssR0FDUCxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUU1RCwwREFBMEQ7SUFDMUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNaLG1DQUFtQyxFQUNuQyxNQUFtQyxFQUNuQyxLQUFnQyxDQUFhLENBQUM7QUFDM0QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUM1QyxFQUFFLENBQUMsRUFBQyxvQ0FBb0MsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7RGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQXR0cnMsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5cbmltcG9ydCB7RXhwbGljaXRQYWRkaW5nfSBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbmZ1bmN0aW9uIGRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFQsIGR5OiBULCBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nLFxuICAgIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXIgPSBbMSwgMV0sXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFRlbnNvcjREIHtcbiAgbGV0IHg0RCA9IHggYXMgVGVuc29yNEQ7XG4gIGlmICh4LnJhbmsgPT09IDMpIHtcbiAgICB4NEQgPSByZXNoYXBlKHgsIFsxLCB4LnNoYXBlWzBdLCB4LnNoYXBlWzFdLCB4LnNoYXBlWzJdXSk7XG4gIH1cbiAgbGV0IGR5NEQgPSBkeSBhcyBUZW5zb3I0RDtcbiAgaWYgKGR5NEQucmFuayA9PT0gMykge1xuICAgIGR5NEQgPSByZXNoYXBlKGR5LCBbMSwgZHkuc2hhcGVbMF0sIGR5LnNoYXBlWzFdLCBkeS5zaGFwZVsyXV0pO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlcklucHV0cyA9IHt4OiB4NEQsIGR5OiBkeTREfTtcbiAgY29uc3QgYXR0cnM6IERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQXR0cnMgPVxuICAgICAge3N0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlLCBkaWxhdGlvbnMsIGZpbHRlclNoYXBlfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyLFxuICAgICAgICAgICAgIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUZW5zb3I0RDtcbn1cblxuZXhwb3J0IGNvbnN0IGRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyID1cbiAgICBvcCh7ZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DepthwiseConv2dNativeBackpropInput } from '../kernel_names';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nfunction depthwiseConv2dNativeBackpropInput_(xShape, dy, filter, strides, pad, dilations = [1, 1], dimRoundingMode) {\n let dy4D = dy;\n let reshapedTo4D = false;\n if (dy.rank === 3) {\n reshapedTo4D = true;\n dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]);\n }\n const inputs = { dy: dy4D, filter };\n const attrs = { strides, pad, dimRoundingMode, dilations, inputShape: xShape };\n const res = \n // tslint:disable-next-line: no-unnecessary-type-assertion\n ENGINE.runKernel(DepthwiseConv2dNativeBackpropInput, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const depthwiseConv2dNativeBackpropInput = op({ depthwiseConv2dNativeBackpropInput_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGh3aXNlX2NvbnYyZF9uYXRpdmVfYmFja3Byb3BfaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9kZXB0aHdpc2VfY29udjJkX25hdGl2ZV9iYWNrcHJvcF9pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxrQ0FBa0MsRUFBb0YsTUFBTSxpQkFBaUIsQ0FBQztBQU10SixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsU0FBUyxtQ0FBbUMsQ0FDeEMsTUFBd0MsRUFBRSxFQUFLLEVBQUUsTUFBZ0IsRUFDakUsT0FBZ0MsRUFDaEMsR0FBMEMsRUFDMUMsWUFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzNDLGVBQXdDO0lBQzFDLElBQUksSUFBSSxHQUFHLEVBQWMsQ0FBQztJQUMxQixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNqQixZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRTtJQUVELE1BQU0sTUFBTSxHQUE2QyxFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDNUUsTUFBTSxLQUFLLEdBQ1AsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBRW5FLE1BQU0sR0FBRztJQUNMLDBEQUEwRDtJQUMxRCxNQUFNLENBQUMsU0FBUyxDQUNaLGtDQUFrQyxFQUNsQyxNQUFtQyxFQUNuQyxLQUFnQyxDQUFNLENBQUM7SUFFL0MsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQzNDLEVBQUUsQ0FBQyxFQUFDLG1DQUFtQyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0LCBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0QXR0cnMsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuaW1wb3J0IHtFeHBsaWNpdFBhZGRpbmd9IGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuZnVuY3Rpb24gZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICB4U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBkeTogVCwgZmlsdGVyOiBUZW5zb3I0RCxcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmcsXG4gICAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlciA9IFsxLCAxXSxcbiAgICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnKTogVCB7XG4gIGxldCBkeTREID0gZHkgYXMgVGVuc29yNEQ7XG4gIGxldCByZXNoYXBlZFRvNEQgPSBmYWxzZTtcbiAgaWYgKGR5LnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIGR5NEQgPSByZXNoYXBlKGR5LCBbMSwgZHkuc2hhcGVbMF0sIGR5LnNoYXBlWzFdLCBkeS5zaGFwZVsyXV0pO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0SW5wdXRzID0ge2R5OiBkeTRELCBmaWx0ZXJ9O1xuICBjb25zdCBhdHRyczogRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dEF0dHJzID1cbiAgICAgIHtzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZGlsYXRpb25zLCBpbnB1dFNoYXBlOiB4U2hhcGV9O1xuXG4gIGNvbnN0IHJlcyA9XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQsXG4gICAgICAgICAgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0ID1cbiAgICBvcCh7ZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { customGrad } from '../../gradients';\nimport { FusedDepthwiseConv2D } from '../../kernel_names';\nimport { makeTypesMatch } from '../../tensor_util';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { add } from '../add';\nimport * as broadcast_util from '../broadcast_util';\nimport * as conv_util from '../conv_util';\nimport { depthwiseConv2d as unfusedDepthwiseConv2d } from '../depthwise_conv2d';\nimport { depthwiseConv2dNativeBackpropFilter } from '../depthwise_conv2d_native_backprop_filter';\nimport { depthwiseConv2dNativeBackpropInput } from '../depthwise_conv2d_native_backprop_input';\nimport { applyActivation, getFusedBiasGradient, getFusedDyActivation, shouldFuse } from '../fused_util';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * Computes depthwise 2D convolution, optionally fused with adding a\n * bias and applying an activation.\n *\n * Given a 4D `input` array and a `filter` array of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]` containing\n * `inChannels` convolutional filters of depth 1, this op applies a\n * different filter to each input channel (expanding from 1 channel to\n * `channelMultiplier` channels for each), then concatenates the results\n * together. The output has `inChannels * channelMultiplier` channels.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d](\n * https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d)\n * for more details.\n *\n * @param obj An object with the following properties:\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter tensor, rank 4, of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @param bias Tensor to be added to the result.\n * @param activation Name of activation kernel (defaults to `linear`).\n * @param preluActivationWeights Tensor of prelu weights to be applied as part\n * of a `prelu` activation, typically the same shape as `x`.\n * @param leakyreluAlpha Optional. Alpha to be applied as part of a `leakyrelu`\n * activation.\n */\nfunction fusedDepthwiseConv2d_({ x, filter, strides, pad, dataFormat = 'NHWC', dilations = [1, 1], dimRoundingMode, bias, activation = 'linear', preluActivationWeights, leakyreluAlpha }) {\n if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n let result = unfusedDepthwiseConv2d(x, filter, strides, pad, dataFormat, dilations, dimRoundingMode);\n if (bias != null) {\n result = add(result, bias);\n }\n return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha);\n }\n const $x = convertToTensor(x, 'x', 'depthwiseConv2d', 'float32');\n const $filter = convertToTensor(filter, 'filter', 'depthwiseConv2d', 'float32');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got ` +\n `rank ${x4D.rank}.`);\n util.assert($filter.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, ` +\n `but got rank ${$filter.rank}.`);\n util.assert(x4D.shape[3] === $filter.shape[2], () => `Error in fused depthwiseConv2d: number of input channels ` +\n `(${x4D.shape[3]}) must match the inChannels dimension in ` +\n `filter ${$filter.shape[2]}.`);\n if (dilations == null) {\n dilations = [1, 1];\n }\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in fused depthwiseConv2d: Either strides or dilations must ' +\n `be 1. Got strides ${strides} and dilations '${dilations}'`);\n conv_util.checkPadOnDimRoundingMode('fused depthwiseConv2d', pad, dimRoundingMode);\n const convInfo = conv_util.computeConv2DInfo(x4D.shape, $filter.shape, strides, dilations, pad, dimRoundingMode, true /* depthwise */);\n let $bias;\n if (bias != null) {\n $bias = convertToTensor(bias, 'bias', 'fused conv2d');\n [$bias] = makeTypesMatch($bias, $x);\n broadcast_util.assertAndGetBroadcastShape(convInfo.outShape, $bias.shape);\n }\n let $preluActivationWeights;\n if (preluActivationWeights != null) {\n $preluActivationWeights = convertToTensor(preluActivationWeights, 'prelu weights', 'fused depthwiseConv2d');\n }\n const grad = (dy, saved) => {\n util.assert(conv_util.tupleValuesAreOne(dilations), () => 'Error in gradient of fused depthwiseConv2d: dilation rates ' +\n `greater than 1 are not yet supported. Got dilations ` +\n `'${dilations}'`);\n const [$filter, x4D, y, bias] = saved;\n const dyActivation = getFusedDyActivation(dy, y, activation);\n const xDer = depthwiseConv2dNativeBackpropInput(x4D.shape, dyActivation, $filter, strides, pad, dilations, dimRoundingMode);\n const filterDer = depthwiseConv2dNativeBackpropFilter(x4D, dyActivation, $filter.shape, strides, pad, dilations, dimRoundingMode);\n if (bias != null) {\n const biasDer = getFusedBiasGradient($bias, dyActivation);\n return [xDer, filterDer, biasDer];\n }\n return [xDer, filterDer];\n };\n const inputs = {\n x: x4D,\n filter: $filter,\n bias: $bias,\n preluActivationWeights: $preluActivationWeights\n };\n const attrs = {\n strides,\n pad,\n dataFormat,\n dilations,\n dimRoundingMode,\n activation,\n leakyreluAlpha\n };\n // Depending on the the params passed in we will have different number of\n // inputs and thus a a different number of elements in the gradient.\n if (bias == null) {\n const customOp = customGrad((x4D, filter, save) => {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n let res = ENGINE.runKernel(FusedDepthwiseConv2D, inputs, attrs);\n save([filter, x4D, res]);\n if (reshapedTo4D) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return { value: res, gradFunc: grad };\n });\n return customOp(x4D, $filter);\n }\n else {\n const customOpWithBias = customGrad((x4D, filter, bias, save) => {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n let res = ENGINE.runKernel(FusedDepthwiseConv2D, inputs, attrs);\n save([filter, x4D, res, bias]);\n if (reshapedTo4D) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return { value: res, gradFunc: grad };\n });\n return customOpWithBias(x4D, $filter, $bias);\n }\n}\nexport const depthwiseConv2d = /* @__PURE__ */ op({ fusedDepthwiseConv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGh3aXNlX2NvbnYyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Z1c2VkL2RlcHRod2lzZV9jb252MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFDLG9CQUFvQixFQUF3RCxNQUFNLG9CQUFvQixDQUFDO0FBSS9HLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEtBQUssY0FBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxlQUFlLElBQUksc0JBQXNCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRixPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUU3RixPQUFPLEVBQUMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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O0FBQ0QsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxxQkFBcUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtjdXN0b21HcmFkfSBmcm9tICcuLi8uLi9ncmFkaWVudHMnO1xuaW1wb3J0IHtGdXNlZERlcHRod2lzZUNvbnYyRCwgRnVzZWREZXB0aHdpc2VDb252MkRBdHRycywgRnVzZWREZXB0aHdpc2VDb252MkRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4vLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IzRCwgVGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge0dyYWRTYXZlRnVuYywgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0ICogYXMgYnJvYWRjYXN0X3V0aWwgZnJvbSAnLi4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4uL2NvbnZfdXRpbCc7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZCBhcyB1bmZ1c2VkRGVwdGh3aXNlQ29udjJkfSBmcm9tICcuLi9kZXB0aHdpc2VfY29udjJkJztcbmltcG9ydCB7ZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJ9IGZyb20gJy4uL2RlcHRod2lzZV9jb252MmRfbmF0aXZlX2JhY2twcm9wX2ZpbHRlcic7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXR9IGZyb20gJy4uL2RlcHRod2lzZV9jb252MmRfbmF0aXZlX2JhY2twcm9wX2lucHV0JztcbmltcG9ydCB7QWN0aXZhdGlvbn0gZnJvbSAnLi4vZnVzZWRfdHlwZXMnO1xuaW1wb3J0IHthcHBseUFjdGl2YXRpb24sIGdldEZ1c2VkQmlhc0dyYWRpZW50LCBnZXRGdXNlZER5QWN0aXZhdGlvbiwgc2hvdWxkRnVzZX0gZnJvbSAnLi4vZnVzZWRfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9yZXNoYXBlJztcblxuLyoqXG4gKiBDb21wdXRlcyBkZXB0aHdpc2UgMkQgY29udm9sdXRpb24sIG9wdGlvbmFsbHkgZnVzZWQgd2l0aCBhZGRpbmcgYVxuICogYmlhcyBhbmQgYXBwbHlpbmcgYW4gYWN0aXZhdGlvbi5cbiAqXG4gKiBHaXZlbiBhIDREIGBpbnB1dGAgYXJyYXkgYW5kIGEgYGZpbHRlcmAgYXJyYXkgb2Ygc2hhcGVcbiAqIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5DaGFubmVscywgY2hhbm5lbE11bHRpcGxpZXJdYCBjb250YWluaW5nXG4gKiBgaW5DaGFubmVsc2AgY29udm9sdXRpb25hbCBmaWx0ZXJzIG9mIGRlcHRoIDEsIHRoaXMgb3AgYXBwbGllcyBhXG4gKiBkaWZmZXJlbnQgZmlsdGVyIHRvIGVhY2ggaW5wdXQgY2hhbm5lbCAoZXhwYW5kaW5nIGZyb20gMSBjaGFubmVsIHRvXG4gKiBgY2hhbm5lbE11bHRpcGxpZXJgIGNoYW5uZWxzIGZvciBlYWNoKSwgdGhlbiBjb25jYXRlbmF0ZXMgdGhlIHJlc3VsdHNcbiAqIHRvZ2V0aGVyLiBUaGUgb3V0cHV0IGhhcyBgaW5DaGFubmVscyAqIGNoYW5uZWxNdWx0aXBsaWVyYCBjaGFubmVscy5cbiAqXG4gKiBTZWVcbiAqIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vZGVwdGh3aXNlX2NvbnYyZF0oXG4gKiAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2RlcHRod2lzZV9jb252MmQpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSBvYmogQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpc1xuICogYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0ZW5zb3IsIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgICBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluQ2hhbm5lbHMsIGNoYW5uZWxNdWx0aXBsaWVyXWAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlSGVpZ2h0LFxuICogc3RyaWRlV2lkdGhdYC4gSWYgc3RyaWRlcyBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYHN0cmlkZUhlaWdodCA9PVxuICogc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobS5cbiAqICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gYXRyb3VzIGNvbnZvbHV0aW9uLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYHJhdGVgIGlzIGEgc2luZ2xlXG4gKiAgICAgbnVtYmVyLCB0aGVuIGBkaWxhdGlvbkhlaWdodCA9PSBkaWxhdGlvbldpZHRoYC4gSWYgaXQgaXMgZ3JlYXRlciB0aGFuXG4gKiAgICAgMSwgdGhlbiBhbGwgdmFsdWVzIG9mIGBzdHJpZGVzYCBtdXN0IGJlIDEuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkhXQ1wiLCBcIk5DSFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5IV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS4gT25seSBcIk5IV0NcIiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICogQHBhcmFtIGRpbVJvdW5kaW5nTW9kZSBBIHN0cmluZyBmcm9tOiAnY2VpbCcsICdyb3VuZCcsICdmbG9vcicuIElmIG5vbmUgaXNcbiAqICAgICBwcm92aWRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRydW5jYXRlLlxuICogQHBhcmFtIGJpYXMgVGVuc29yIHRvIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0gYWN0aXZhdGlvbiBOYW1lIG9mIGFjdGl2YXRpb24ga2VybmVsIChkZWZhdWx0cyB0byBgbGluZWFyYCkuXG4gKiBAcGFyYW0gcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyBUZW5zb3Igb2YgcHJlbHUgd2VpZ2h0cyB0byBiZSBhcHBsaWVkIGFzIHBhcnRcbiAqICAgICBvZiBhIGBwcmVsdWAgYWN0aXZhdGlvbiwgdHlwaWNhbGx5IHRoZSBzYW1lIHNoYXBlIGFzIGB4YC5cbiAqIEBwYXJhbSBsZWFreXJlbHVBbHBoYSBPcHRpb25hbC4gQWxwaGEgdG8gYmUgYXBwbGllZCBhcyBwYXJ0IG9mIGEgYGxlYWt5cmVsdWBcbiAqICAgICBhY3RpdmF0aW9uLlxuICovXG5mdW5jdGlvbiBmdXNlZERlcHRod2lzZUNvbnYyZF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPih7XG4gIHgsXG4gIGZpbHRlcixcbiAgc3RyaWRlcyxcbiAgcGFkLFxuICBkYXRhRm9ybWF0ID0gJ05IV0MnLFxuICBkaWxhdGlvbnMgPSBbMSwgMV0sXG4gIGRpbVJvdW5kaW5nTW9kZSxcbiAgYmlhcyxcbiAgYWN0aXZhdGlvbiA9ICdsaW5lYXInLFxuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLFxuICBsZWFreXJlbHVBbHBoYVxufToge1xuICB4OiBUfFRlbnNvckxpa2UsXG4gIGZpbHRlcjogVGVuc29yNER8VGVuc29yTGlrZSxcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyLFxuICBkYXRhRm9ybWF0PzogJ05IV0MnfCdOQ0hXJyxcbiAgZGlsYXRpb25zPzogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcsXG4gIGJpYXM/OiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgYWN0aXZhdGlvbj86IEFjdGl2YXRpb24sXG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHM/OiBUZW5zb3IsXG4gIGxlYWt5cmVsdUFscGhhPzogbnVtYmVyXG59KTogVCB7XG4gIGlmIChzaG91bGRGdXNlKEVOR0lORS5zdGF0ZS5ncmFkaWVudERlcHRoLCBhY3RpdmF0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICBsZXQgcmVzdWx0ID0gdW5mdXNlZERlcHRod2lzZUNvbnYyZChcbiAgICAgICAgeCwgZmlsdGVyLCBzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9ucywgZGltUm91bmRpbmdNb2RlKTtcbiAgICBpZiAoYmlhcyAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCBiaWFzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICAgICAgICAgcmVzdWx0LCBhY3RpdmF0aW9uLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCBsZWFreXJlbHVBbHBoYSkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2RlcHRod2lzZUNvbnYyZCcsICdmbG9hdDMyJyk7XG4gIGNvbnN0ICRmaWx0ZXIgPVxuICAgICAgY29udmVydFRvVGVuc29yKGZpbHRlciwgJ2ZpbHRlcicsICdkZXB0aHdpc2VDb252MmQnLCAnZmxvYXQzMicpO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuICBpZiAoJHgucmFuayA9PT0gMykge1xuICAgIHJlc2hhcGVkVG80RCA9IHRydWU7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgIHg0RC5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGZ1c2VkIGRlcHRod2lzZUNvbnYyZDogaW5wdXQgbXVzdCBiZSByYW5rIDQsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHt4NEQucmFua30uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGZpbHRlci5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGZ1c2VkIGRlcHRod2lzZUNvbnYyZDogZmlsdGVyIG11c3QgYmUgcmFuayA0LCBgICtcbiAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JGZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQuc2hhcGVbM10gPT09ICRmaWx0ZXIuc2hhcGVbMl0sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gZnVzZWQgZGVwdGh3aXNlQ29udjJkOiBudW1iZXIgb2YgaW5wdXQgY2hhbm5lbHMgYCArXG4gICAgICAgICAgYCgke3g0RC5zaGFwZVszXX0pIG11c3QgbWF0Y2ggdGhlIGluQ2hhbm5lbHMgZGltZW5zaW9uIGluIGAgK1xuICAgICAgICAgIGBmaWx0ZXIgJHskZmlsdGVyLnNoYXBlWzJdfS5gKTtcbiAgaWYgKGRpbGF0aW9ucyA9PSBudWxsKSB7XG4gICAgZGlsYXRpb25zID0gWzEsIDFdO1xuICB9XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY29udl91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT5cbiAgICAgICAgICAnRXJyb3IgaW4gZnVzZWQgZGVwdGh3aXNlQ29udjJkOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCAnICtcbiAgICAgICAgICBgYmUgMS4gR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKFxuICAgICAgJ2Z1c2VkIGRlcHRod2lzZUNvbnYyZCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgY29udkluZm8gPSBjb252X3V0aWwuY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICB4NEQuc2hhcGUsICRmaWx0ZXIuc2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsXG4gICAgICB0cnVlIC8qIGRlcHRod2lzZSAqLyk7XG5cbiAgbGV0ICRiaWFzOiBUZW5zb3I7XG4gIGlmIChiaWFzICE9IG51bGwpIHtcbiAgICAkYmlhcyA9IGNvbnZlcnRUb1RlbnNvcihiaWFzLCAnYmlhcycsICdmdXNlZCBjb252MmQnKTtcbiAgICBbJGJpYXNdID0gbWFrZVR5cGVzTWF0Y2goJGJpYXMsICR4KTtcblxuICAgIGJyb2FkY2FzdF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKGNvbnZJbmZvLm91dFNoYXBlLCAkYmlhcy5zaGFwZSk7XG4gIH1cblxuICBsZXQgJHByZWx1QWN0aXZhdGlvbldlaWdodHM6IFRlbnNvcjtcbiAgaWYgKHByZWx1QWN0aXZhdGlvbldlaWdodHMgIT0gbnVsbCkge1xuICAgICRwcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gY29udmVydFRvVGVuc29yKFxuICAgICAgICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCAncHJlbHUgd2VpZ2h0cycsICdmdXNlZCBkZXB0aHdpc2VDb252MmQnKTtcbiAgfVxuXG4gIGNvbnN0IGdyYWQgPSAoZHk6IFRlbnNvcjRELCBzYXZlZDogVGVuc29yW10pID0+IHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgY29udl91dGlsLnR1cGxlVmFsdWVzQXJlT25lKGRpbGF0aW9ucyksXG4gICAgICAgICgpID0+ICdFcnJvciBpbiBncmFkaWVudCBvZiBmdXNlZCBkZXB0aHdpc2VDb252MmQ6IGRpbGF0aW9uIHJhdGVzICcgK1xuICAgICAgICAgICAgYGdyZWF0ZXIgdGhhbiAxIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4gR290IGRpbGF0aW9ucyBgICtcbiAgICAgICAgICAgIGAnJHtkaWxhdGlvbnN9J2ApO1xuICAgIGNvbnN0IFskZmlsdGVyLCB4NEQsIHksIGJpYXNdID0gc2F2ZWQ7XG5cbiAgICBjb25zdCBkeUFjdGl2YXRpb24gPSBnZXRGdXNlZER5QWN0aXZhdGlvbihkeSwgeSwgYWN0aXZhdGlvbikgYXMgVGVuc29yNEQ7XG5cbiAgICBjb25zdCB4RGVyID0gZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dChcbiAgICAgICAgKHg0RCBhcyBUZW5zb3I0RCkuc2hhcGUsIGR5QWN0aXZhdGlvbiwgJGZpbHRlciBhcyBUZW5zb3I0RCwgc3RyaWRlcyxcbiAgICAgICAgcGFkLCBkaWxhdGlvbnMsIGRpbVJvdW5kaW5nTW9kZSk7XG4gICAgY29uc3QgZmlsdGVyRGVyID0gZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIoXG4gICAgICAgIHg0RCBhcyBUZW5zb3I0RCwgZHlBY3RpdmF0aW9uLCAoJGZpbHRlciBhcyBUZW5zb3I0RCkuc2hhcGUsIHN0cmlkZXMsXG4gICAgICAgIHBhZCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGUpO1xuXG4gICAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgYmlhc0RlciA9IGdldEZ1c2VkQmlhc0dyYWRpZW50KCRiaWFzLCBkeUFjdGl2YXRpb24pO1xuICAgICAgcmV0dXJuIFt4RGVyLCBmaWx0ZXJEZXIsIGJpYXNEZXJdO1xuICAgIH1cbiAgICByZXR1cm4gW3hEZXIsIGZpbHRlckRlcl07XG4gIH07XG5cbiAgY29uc3QgaW5wdXRzOiBGdXNlZERlcHRod2lzZUNvbnYyRElucHV0cyA9IHtcbiAgICB4OiB4NEQsXG4gICAgZmlsdGVyOiAkZmlsdGVyLFxuICAgIGJpYXM6ICRiaWFzLFxuICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHM6ICRwcmVsdUFjdGl2YXRpb25XZWlnaHRzXG4gIH07XG4gIGNvbnN0IGF0dHJzOiBGdXNlZERlcHRod2lzZUNvbnYyREF0dHJzID0ge1xuICAgIHN0cmlkZXMsXG4gICAgcGFkLFxuICAgIGRhdGFGb3JtYXQsXG4gICAgZGlsYXRpb25zLFxuICAgIGRpbVJvdW5kaW5nTW9kZSxcbiAgICBhY3RpdmF0aW9uLFxuICAgIGxlYWt5cmVsdUFscGhhXG4gIH07XG5cbiAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0aGUgcGFyYW1zIHBhc3NlZCBpbiB3ZSB3aWxsIGhhdmUgZGlmZmVyZW50IG51bWJlciBvZlxuICAvLyBpbnB1dHMgYW5kIHRodXMgYSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGdyYWRpZW50LlxuICBpZiAoYmlhcyA9PSBudWxsKSB7XG4gICAgY29uc3QgY3VzdG9tT3AgPVxuICAgICAgICBjdXN0b21HcmFkKCh4NEQ6IFRlbnNvcjRELCBmaWx0ZXI6IFRlbnNvcjRELCBzYXZlOiBHcmFkU2F2ZUZ1bmMpID0+IHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICAgbGV0IHJlczogVGVuc29yNER8VGVuc29yM0QgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICBGdXNlZERlcHRod2lzZUNvbnYyRCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcblxuICAgICAgICAgIHNhdmUoW2ZpbHRlciwgeDRELCByZXNdKTtcblxuICAgICAgICAgIGlmIChyZXNoYXBlZFRvNEQpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgICAgICAgIHJlcyA9IHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzXG4gICAgICAgICAgICAgICAgVGVuc29yM0Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHt2YWx1ZTogcmVzLCBncmFkRnVuYzogZ3JhZH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBjdXN0b21PcCh4NEQsICRmaWx0ZXIpIGFzIFQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY3VzdG9tT3BXaXRoQmlhcyA9IGN1c3RvbUdyYWQoXG4gICAgICAgICh4NEQ6IFRlbnNvcjRELCBmaWx0ZXI6IFRlbnNvcjRELCBiaWFzOiBUZW5zb3IsIHNhdmU6IEdyYWRTYXZlRnVuYykgPT4ge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgICAgICBsZXQgcmVzOiBUZW5zb3I0RHxUZW5zb3IzRCA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgIEZ1c2VkRGVwdGh3aXNlQ29udjJELCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xuXG4gICAgICAgICAgc2F2ZShbZmlsdGVyLCB4NEQsIHJlcywgYmlhc10pO1xuXG4gICAgICAgICAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgICAgICAgcmVzID0gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMV0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdXSkgYXNcbiAgICAgICAgICAgICAgICBUZW5zb3IzRDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge3ZhbHVlOiByZXMsIGdyYWRGdW5jOiBncmFkfTtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY3VzdG9tT3BXaXRoQmlhcyh4NEQsICRmaWx0ZXIsICRiaWFzKSBhcyBUO1xuICB9XG59XG5leHBvcnQgY29uc3QgZGVwdGh3aXNlQ29udjJkID0gLyogQF9fUFVSRV9fICovIG9wKHtmdXNlZERlcHRod2lzZUNvbnYyZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { customGrad } from '../../gradients';\nimport { _FusedMatMul } from '../../kernel_names';\nimport { makeTypesMatch } from '../../tensor_util';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { add } from '../add';\nimport * as broadcast_util from '../broadcast_util';\nimport { applyActivation, getFusedBiasGradient, getFusedDyActivation, shouldFuse } from '../fused_util';\nimport { matMul as unfusedMatMul } from '../mat_mul';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * Computes the dot product of two matrices with optional activation and bias.\n *\n * ```js\n * const a = tf.tensor2d([-1, -2], [1, 2]);\n * const b = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const bias = tf.tensor2d([1, 2], [1, 2]);\n *\n * tf.fused.matMul({a, b, bias, activation: 'relu'}).print();\n * ```\n *\n * @param obj An object with the following properties:\n * - `a` First matrix in dot product operation.\n * - `b` Second matrix in dot product operation.\n * - `transposeA` If true, `a` is transposed before multiplication.\n * - `transposeB` If true, `b` is transposed before multiplication.\n * - `bias` Matrix to be added to the result.\n * - `activation` Name of activation kernel (defaults to `linear`).\n * - `preluActivationWeights` Tensor of prelu weights.\n * - `leakyreluAlpha` Alpha of leakyrelu.\n */\nfunction fusedMatMul_({ a, b, transposeA = false, transposeB = false, bias, activation = 'linear', preluActivationWeights, leakyreluAlpha = 0.2, }) {\n if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n let result = unfusedMatMul(a, b, transposeA, transposeB);\n if (bias != null) {\n result = add(result, bias);\n }\n return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha);\n }\n let $a = convertToTensor(a, 'a', 'fused matMul');\n let $b = convertToTensor(b, 'b', 'fused matMul');\n [$a, $b] = makeTypesMatch($a, $b);\n const innerShapeA = transposeA ? $a.shape[$a.rank - 2] : $a.shape[$a.rank - 1];\n const innerShapeB = transposeB ? $b.shape[$b.rank - 1] : $b.shape[$b.rank - 2];\n const outerShapeA = transposeA ? $a.shape[$a.rank - 1] : $a.shape[$a.rank - 2];\n const outerShapeB = transposeB ? $b.shape[$b.rank - 2] : $b.shape[$b.rank - 1];\n const outerDimsA = $a.shape.slice(0, -2);\n const outerDimsB = $b.shape.slice(0, -2);\n const batchDimA = util.sizeFromShape(outerDimsA);\n const batchDimB = util.sizeFromShape(outerDimsB);\n util.assert(innerShapeA === innerShapeB, () => `Error in fused matMul: inner shapes (${innerShapeA}) and (` +\n `${innerShapeB}) of Tensors with shapes ${$a.shape} and ` +\n `${$b.shape} and transposeA=${transposeA}` +\n ` and transposeB=${transposeB} must match.`);\n const outShapeOuterDims = broadcast_util.assertAndGetBroadcastShape($a.shape.slice(0, -2), $b.shape.slice(0, -2));\n const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]);\n const a3D = transposeA ?\n reshape($a, [batchDimA, innerShapeA, outerShapeA]) :\n reshape($a, [batchDimA, outerShapeA, innerShapeA]);\n const b3D = transposeB ?\n reshape($b, [batchDimB, outerShapeB, innerShapeB]) :\n reshape($b, [batchDimB, innerShapeB, outerShapeB]);\n let $bias;\n if (bias != null) {\n $bias = convertToTensor(bias, 'bias', 'fused matMul');\n [$bias] = makeTypesMatch($bias, $a);\n broadcast_util.assertAndGetBroadcastShape(outShape, $bias.shape);\n }\n let $preluActivationWeights;\n if (preluActivationWeights != null) {\n $preluActivationWeights = convertToTensor(preluActivationWeights, 'prelu weights', 'fused matMul');\n }\n const grad = (dy, saved) => {\n const [a3D, b3D, y, $bias] = saved;\n // we reshape dy because the result of the forward is not\n // necessarily going to be a 3d tensor due to a reshape done at the end of\n // the customOp.\n const dyActivation = getFusedDyActivation(reshape(dy, y.shape), y, activation);\n let aDer;\n let bDer;\n if (!transposeA && !transposeB) {\n aDer = unfusedMatMul(dyActivation, b3D, false, true);\n bDer = unfusedMatMul(a3D, dyActivation, true, false);\n }\n else if (!transposeA && transposeB) {\n aDer = unfusedMatMul(dyActivation, b3D, false, false);\n bDer = unfusedMatMul(dyActivation, a3D, true, false);\n }\n else if (transposeA && !transposeB) {\n aDer = unfusedMatMul(b3D, dyActivation, false, true);\n bDer = unfusedMatMul(a3D, dyActivation, false, false);\n }\n else {\n aDer = unfusedMatMul(b3D, dyActivation, true, true);\n bDer = unfusedMatMul(dyActivation, a3D, true, true);\n }\n if (bias != null) {\n const biasDer = getFusedBiasGradient($bias, dyActivation);\n return [aDer, bDer, biasDer];\n }\n else {\n return [aDer, bDer];\n }\n };\n const inputs = {\n a: a3D,\n b: b3D,\n bias: $bias,\n preluActivationWeights: $preluActivationWeights\n };\n const attrs = { transposeA, transposeB, activation, leakyreluAlpha };\n // Depending on the the params passed in we will have different number of\n // inputs and thus a a different number of elements in the gradient.\n if (bias == null) {\n const customOp = customGrad((a3D, b3D, save) => {\n const res = \n // tslint:disable-next-line: no-unnecessary-type-assertion\n ENGINE.runKernel(_FusedMatMul, inputs, attrs);\n save([a3D, b3D, res]);\n return { value: reshape(res, outShape), gradFunc: grad };\n });\n return customOp(a3D, b3D);\n }\n else {\n const customOpWithBias = customGrad((a3D, b3D, $bias, save) => {\n const res = \n // tslint:disable-next-line: no-unnecessary-type-assertion\n ENGINE.runKernel(_FusedMatMul, inputs, attrs);\n save([a3D, b3D, res, $bias]);\n return { value: reshape(res, outShape), gradFunc: grad };\n });\n return customOpWithBias(a3D, b3D, $bias);\n }\n}\nexport const matMul = /* @__PURE__ */ op({ fusedMatMul_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0X211bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Z1c2VkL21hdF9tdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBd0MsTUFBTSxvQkFBb0IsQ0FBQztBQUl2RixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxLQUFLLGNBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUMsTUFBTSxJQUFJLGFBQWEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBUyxZQUFZLENBQUMsRUFDcEIsQ0FBQyxFQUNELENBQUMsRUFDRCxVQUFVLEdBQUcsS0FBSyxFQUNsQixVQUFVLEdBQUcsS0FBSyxFQUNsQixJQUFJLEVBQ0osVUFBVSxHQUFHLFFBQVEsRUFDckIsc0JBQXNCLEVBQ3RCLGNBQWMsR0FBRyxHQUFHLEdBVXJCO0lBQ0csSUFBSSxVQUFV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QUFFLEdBQWEsRUFBRSxLQUFhLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1lBQ2xFLE1BQU0sR0FBRztZQUNMLDBEQUEwRDtZQUMxRCxNQUFNLENBQUMsU0FBUyxDQUNaLFlBQVksRUFBRSxNQUFtQyxFQUNqRCxLQUFnQyxDQUFXLENBQUM7WUFFcEQsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUU3QixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRVAsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge2N1c3RvbUdyYWR9IGZyb20gJy4uLy4uL2dyYWRpZW50cyc7XG5pbXBvcnQge19GdXNlZE1hdE11bCwgX0Z1c2VkTWF0TXVsQXR0cnMsIF9GdXNlZE1hdE11bElucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi8uLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjNEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtHcmFkU2F2ZUZ1bmMsIE5hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHttYWtlVHlwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7YWRkfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0ICogYXMgYnJvYWRjYXN0X3V0aWwgZnJvbSAnLi4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtBY3RpdmF0aW9ufSBmcm9tICcuLi9mdXNlZF90eXBlcyc7XG5pbXBvcnQge2FwcGx5QWN0aXZhdGlvbiwgZ2V0RnVzZWRCaWFzR3JhZGllbnQsIGdldEZ1c2VkRHlBY3RpdmF0aW9uLCBzaG91bGRGdXNlfSBmcm9tICcuLi9mdXNlZF91dGlsJztcbmltcG9ydCB7bWF0TXVsIGFzIHVuZnVzZWRNYXRNdWx9IGZyb20gJy4uL21hdF9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBtYXRyaWNlcyB3aXRoIG9wdGlvbmFsIGFjdGl2YXRpb24gYW5kIGJpYXMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IyZChbLTEsIC0yXSwgWzEsIDJdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKiBjb25zdCBiaWFzID0gdGYudGVuc29yMmQoWzEsIDJdLCBbMSwgMl0pO1xuICpcbiAqIHRmLmZ1c2VkLm1hdE11bCh7YSwgYiwgYmlhcywgYWN0aXZhdGlvbjogJ3JlbHUnfSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvYmogQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBgYWAgRmlyc3QgbWF0cml4IGluIGRvdCBwcm9kdWN0IG9wZXJhdGlvbi5cbiAqIC0gYGJgIFNlY29uZCBtYXRyaXggaW4gZG90IHByb2R1Y3Qgb3BlcmF0aW9uLlxuICogLSBgdHJhbnNwb3NlQWAgSWYgdHJ1ZSwgYGFgIGlzIHRyYW5zcG9zZWQgYmVmb3JlIG11bHRpcGxpY2F0aW9uLlxuICogLSBgdHJhbnNwb3NlQmAgSWYgdHJ1ZSwgYGJgIGlzIHRyYW5zcG9zZWQgYmVmb3JlIG11bHRpcGxpY2F0aW9uLlxuICogLSBgYmlhc2AgTWF0cml4IHRvIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQuXG4gKiAtIGBhY3RpdmF0aW9uYCBOYW1lIG9mIGFjdGl2YXRpb24ga2VybmVsIChkZWZhdWx0cyB0byBgbGluZWFyYCkuXG4gKiAtIGBwcmVsdUFjdGl2YXRpb25XZWlnaHRzYCBUZW5zb3Igb2YgcHJlbHUgd2VpZ2h0cy5cbiAqIC0gYGxlYWt5cmVsdUFscGhhYCBBbHBoYSBvZiBsZWFreXJlbHUuXG4gKi9cbmZ1bmN0aW9uIGZ1c2VkTWF0TXVsXyh7XG4gIGEsXG4gIGIsXG4gIHRyYW5zcG9zZUEgPSBmYWxzZSxcbiAgdHJhbnNwb3NlQiA9IGZhbHNlLFxuICBiaWFzLFxuICBhY3RpdmF0aW9uID0gJ2xpbmVhcicsXG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHMsXG4gIGxlYWt5cmVsdUFscGhhID0gMC4yLFxufToge1xuICBhOiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgYjogVGVuc29yfFRlbnNvckxpa2UsXG4gIHRyYW5zcG9zZUE/OiBib29sZWFuLFxuICB0cmFuc3Bvc2VCPzogYm9vbGVhbixcbiAgYmlhcz86IFRlbnNvcnxUZW5zb3JMaWtlLFxuICBhY3RpdmF0aW9uPzogQWN0aXZhdGlvbixcbiAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cz86IFRlbnNvclxuICBsZWFreXJlbHVBbHBoYT86IG51bWJlclxufSk6IFRlbnNvciB7XG4gICAgaWYgKHNob3VsZEZ1c2UoRU5HSU5FLnN0YXRlLmdyYWRpZW50RGVwdGgsIGFjdGl2YXRpb24pID09PSBmYWxzZSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHVuZnVzZWRNYXRNdWwoYSwgYiwgdHJhbnNwb3NlQSwgdHJhbnNwb3NlQik7XG4gICAgICBpZiAoYmlhcyAhPSBudWxsKSB7XG4gICAgICAgIHJlc3VsdCA9IGFkZChyZXN1bHQsIGJpYXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICAgICAgICAgICByZXN1bHQsIGFjdGl2YXRpb24sIHByZWx1QWN0aXZhdGlvbldlaWdodHMsIGxlYWt5cmVsdUFscGhhKTtcbiAgICB9XG5cbiAgICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnZnVzZWQgbWF0TXVsJyk7XG4gICAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2Z1c2VkIG1hdE11bCcpO1xuICAgIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICAgIGNvbnN0IGlubmVyU2hhcGVBID1cbiAgICAgICAgdHJhbnNwb3NlQSA/ICRhLnNoYXBlWyRhLnJhbmsgLSAyXSA6ICRhLnNoYXBlWyRhLnJhbmsgLSAxXTtcbiAgICBjb25zdCBpbm5lclNoYXBlQiA9XG4gICAgICAgIHRyYW5zcG9zZUIgPyAkYi5zaGFwZVskYi5yYW5rIC0gMV0gOiAkYi5zaGFwZVskYi5yYW5rIC0gMl07XG5cbiAgICBjb25zdCBvdXRlclNoYXBlQSA9XG4gICAgICAgIHRyYW5zcG9zZUEgPyAkYS5zaGFwZVskYS5yYW5rIC0gMV0gOiAkYS5zaGFwZVskYS5yYW5rIC0gMl07XG4gICAgY29uc3Qgb3V0ZXJTaGFwZUIgPVxuICAgICAgICB0cmFuc3Bvc2VCID8gJGIuc2hhcGVbJGIucmFuayAtIDJdIDogJGIuc2hhcGVbJGIucmFuayAtIDFdO1xuXG4gICAgY29uc3Qgb3V0ZXJEaW1zQSA9ICRhLnNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICBjb25zdCBvdXRlckRpbXNCID0gJGIuc2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgIGNvbnN0IGJhdGNoRGltQSA9IHV0aWwuc2l6ZUZyb21TaGFwZShvdXRlckRpbXNBKTtcbiAgICBjb25zdCBiYXRjaERpbUIgPSB1dGlsLnNpemVGcm9tU2hhcGUob3V0ZXJEaW1zQik7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgaW5uZXJTaGFwZUEgPT09IGlubmVyU2hhcGVCLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gZnVzZWQgbWF0TXVsOiBpbm5lciBzaGFwZXMgKCR7aW5uZXJTaGFwZUF9KSBhbmQgKGAgK1xuICAgICAgICAgICAgYCR7aW5uZXJTaGFwZUJ9KSBvZiBUZW5zb3JzIHdpdGggc2hhcGVzICR7JGEuc2hhcGV9IGFuZCBgICtcbiAgICAgICAgICAgIGAkeyRiLnNoYXBlfSBhbmQgdHJhbnNwb3NlQT0ke3RyYW5zcG9zZUF9YCArXG4gICAgICAgICAgICBgIGFuZCB0cmFuc3Bvc2VCPSR7dHJhbnNwb3NlQn0gbXVzdCBtYXRjaC5gKTtcblxuICAgIGNvbnN0IG91dFNoYXBlT3V0ZXJEaW1zID0gYnJvYWRjYXN0X3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoXG4gICAgICAgICRhLnNoYXBlLnNsaWNlKDAsIC0yKSwgJGIuc2hhcGUuc2xpY2UoMCwgLTIpKTtcbiAgICBjb25zdCBvdXRTaGFwZSA9IG91dFNoYXBlT3V0ZXJEaW1zLmNvbmNhdChbb3V0ZXJTaGFwZUEsIG91dGVyU2hhcGVCXSk7XG5cbiAgICBjb25zdCBhM0Q6IFRlbnNvcjNEID0gdHJhbnNwb3NlQSA/XG4gICAgICAgIHJlc2hhcGUoJGEsIFtiYXRjaERpbUEsIGlubmVyU2hhcGVBLCBvdXRlclNoYXBlQV0pIDpcbiAgICAgICAgcmVzaGFwZSgkYSwgW2JhdGNoRGltQSwgb3V0ZXJTaGFwZUEsIGlubmVyU2hhcGVBXSk7XG4gICAgY29uc3QgYjNEOiBUZW5zb3IzRCA9IHRyYW5zcG9zZUIgP1xuICAgICAgICByZXNoYXBlKCRiLCBbYmF0Y2hEaW1CLCBvdXRlclNoYXBlQiwgaW5uZXJTaGFwZUJdKSA6XG4gICAgICAgIHJlc2hhcGUoJGIsIFtiYXRjaERpbUIsIGlubmVyU2hhcGVCLCBvdXRlclNoYXBlQl0pO1xuXG4gICAgbGV0ICRiaWFzOiBUZW5zb3I7XG4gICAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICAgJGJpYXMgPSBjb252ZXJ0VG9UZW5zb3IoYmlhcywgJ2JpYXMnLCAnZnVzZWQgbWF0TXVsJyk7XG4gICAgICBbJGJpYXNdID0gbWFrZVR5cGVzTWF0Y2goJGJpYXMsICRhKTtcblxuICAgICAgYnJvYWRjYXN0X3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUob3V0U2hhcGUsICRiaWFzLnNoYXBlKTtcbiAgICB9XG5cbiAgICBsZXQgJHByZWx1QWN0aXZhdGlvbldlaWdodHM6IFRlbnNvcjtcbiAgICBpZiAocHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyAhPSBudWxsKSB7XG4gICAgICAkcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcihcbiAgICAgICAgICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCAncHJlbHUgd2VpZ2h0cycsICdmdXNlZCBtYXRNdWwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBncmFkID0gKGR5OiBUZW5zb3IzRCwgc2F2ZWQ6IFRlbnNvcltdKSA9PiB7XG4gICAgICBjb25zdCBbYTNELCBiM0QsIHksICRiaWFzXSA9IHNhdmVkO1xuICAgICAgLy8gd2UgcmVzaGFwZSBkeSBiZWNhdXNlIHRoZSByZXN1bHQgb2YgdGhlIGZvcndhcmQgaXMgbm90XG4gICAgICAvLyBuZWNlc3NhcmlseSBnb2luZyB0byBiZSBhIDNkIHRlbnNvciBkdWUgdG8gYSByZXNoYXBlIGRvbmUgYXQgdGhlIGVuZCBvZlxuICAgICAgLy8gdGhlIGN1c3RvbU9wLlxuICAgICAgY29uc3QgZHlBY3RpdmF0aW9uID1cbiAgICAgICAgICBnZXRGdXNlZER5QWN0aXZhdGlvbihyZXNoYXBlKGR5LCB5LnNoYXBlKSwgeSwgYWN0aXZhdGlvbik7XG4gICAgICBsZXQgYURlcjogVGVuc29yO1xuICAgICAgbGV0IGJEZXI6IFRlbnNvcjtcblxuICAgICAgaWYgKCF0cmFuc3Bvc2VBICYmICF0cmFuc3Bvc2VCKSB7XG4gICAgICAgIGFEZXIgPSB1bmZ1c2VkTWF0TXVsKGR5QWN0aXZhdGlvbiwgYjNELCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIGJEZXIgPSB1bmZ1c2VkTWF0TXVsKGEzRCwgZHlBY3RpdmF0aW9uLCB0cnVlLCBmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKCF0cmFuc3Bvc2VBICYmIHRyYW5zcG9zZUIpIHtcbiAgICAgICAgYURlciA9IHVuZnVzZWRNYXRNdWwoZHlBY3RpdmF0aW9uLCBiM0QsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIGJEZXIgPSB1bmZ1c2VkTWF0TXVsKGR5QWN0aXZhdGlvbiwgYTNELCB0cnVlLCBmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKHRyYW5zcG9zZUEgJiYgIXRyYW5zcG9zZUIpIHtcbiAgICAgICAgYURlciA9IHVuZnVzZWRNYXRNdWwoYjNELCBkeUFjdGl2YXRpb24sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgYkRlciA9IHVuZnVzZWRNYXRNdWwoYTNELCBkeUFjdGl2YXRpb24sIGZhbHNlLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhRGVyID0gdW5mdXNlZE1hdE11bChiM0QsIGR5QWN0aXZhdGlvbiwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGJEZXIgPSB1bmZ1c2VkTWF0TXVsKGR5QWN0aXZhdGlvbiwgYTNELCB0cnVlLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBiaWFzRGVyID0gZ2V0RnVzZWRCaWFzR3JhZGllbnQoJGJpYXMsIGR5QWN0aXZhdGlvbik7XG4gICAgICAgIHJldHVybiBbYURlciwgYkRlciwgYmlhc0Rlcl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW2FEZXIsIGJEZXJdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbnB1dHM6IF9GdXNlZE1hdE11bElucHV0cyA9IHtcbiAgICAgIGE6IGEzRCxcbiAgICAgIGI6IGIzRCxcbiAgICAgIGJpYXM6ICRiaWFzLFxuICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0czogJHByZWx1QWN0aXZhdGlvbldlaWdodHNcbiAgICB9O1xuICAgIGNvbnN0IGF0dHJzOiBfRnVzZWRNYXRNdWxBdHRycyA9XG4gICAgICAgIHt0cmFuc3Bvc2VBLCB0cmFuc3Bvc2VCLCBhY3RpdmF0aW9uLCBsZWFreXJlbHVBbHBoYX07XG5cbiAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHRoZSBwYXJhbXMgcGFzc2VkIGluIHdlIHdpbGwgaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9mXG4gICAgLy8gaW5wdXRzIGFuZCB0aHVzIGEgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBncmFkaWVudC5cbiAgICBpZiAoYmlhcyA9PSBudWxsKSB7XG4gICAgICBjb25zdCBjdXN0b21PcCA9XG4gICAgICAgICAgY3VzdG9tR3JhZCgoYTNEOiBUZW5zb3IzRCwgYjNEOiBUZW5zb3IzRCwgc2F2ZTogR3JhZFNhdmVGdW5jKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPVxuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgICBfRnVzZWRNYXRNdWwsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVGVuc29yO1xuXG4gICAgICAgICAgICBzYXZlKFthM0QsIGIzRCwgcmVzXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHJlc2hhcGUocmVzLCBvdXRTaGFwZSksIGdyYWRGdW5jOiBncmFkfTtcbiAgICAgICAgICB9KTtcbiAgICAgIHJldHVybiBjdXN0b21PcChhM0QsIGIzRCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1c3RvbU9wV2l0aEJpYXMgPSBjdXN0b21HcmFkKFxuICAgICAgICAgIChhM0Q6IFRlbnNvcjNELCBiM0Q6IFRlbnNvcjNELCAkYmlhczogVGVuc29yLCBzYXZlOiBHcmFkU2F2ZUZ1bmMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICAgIF9GdXNlZE1hdE11bCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUZW5zb3I7XG5cbiAgICAgICAgICAgIHNhdmUoW2EzRCwgYjNELCByZXMsICRiaWFzXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHJlc2hhcGUocmVzLCBvdXRTaGFwZSksIGdyYWRGdW5jOiBncmFkfTtcbiAgICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIGN1c3RvbU9wV2l0aEJpYXMoYTNELCBiM0QsICRiaWFzKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY29uc3QgbWF0TXVsID0gLyogQF9fUFVSRV9fICovIG9wKHtmdXNlZE1hdE11bF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { op } from '../operation';\nimport { cosineWindow } from '../signal_ops_util';\n/**\n * Generate a hamming window.\n *\n * See: https://en.wikipedia.org/wiki/Window_function#Hann_and_Hamming_windows\n *\n * ```js\n * tf.signal.hammingWindow(10).print();\n * ```\n * @param The length of window\n *\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction hammingWindow_(windowLength) {\n return cosineWindow(windowLength, 0.54, 0.46);\n}\nexport const hammingWindow = /* @__PURE__ */ op({ hammingWindow_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFtbWluZ193aW5kb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zaWduYWwvaGFtbWluZ193aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxZQUFvQjtJQUMxQyxPQUFPLFlBQVksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtjb3NpbmVXaW5kb3d9IGZyb20gJy4uL3NpZ25hbF9vcHNfdXRpbCc7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBoYW1taW5nIHdpbmRvdy5cbiAqXG4gKiBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpbmRvd19mdW5jdGlvbiNIYW5uX2FuZF9IYW1taW5nX3dpbmRvd3NcbiAqXG4gKiBgYGBqc1xuICogdGYuc2lnbmFsLmhhbW1pbmdXaW5kb3coMTApLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBUaGUgbGVuZ3RoIG9mIHdpbmRvd1xuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NpZ25hbCcsIG5hbWVzcGFjZTogJ3NpZ25hbCd9XG4gKi9cbmZ1bmN0aW9uIGhhbW1pbmdXaW5kb3dfKHdpbmRvd0xlbmd0aDogbnVtYmVyKTogVGVuc29yMUQge1xuICByZXR1cm4gY29zaW5lV2luZG93KHdpbmRvd0xlbmd0aCwgMC41NCwgMC40Nik7XG59XG5leHBvcnQgY29uc3QgaGFtbWluZ1dpbmRvdyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aGFtbWluZ1dpbmRvd199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { op } from '../operation';\nimport { cosineWindow } from '../signal_ops_util';\n/**\n * Generate a Hann window.\n *\n * See: https://en.wikipedia.org/wiki/Window_function#Hann_and_Hamming_windows\n *\n * ```js\n * tf.signal.hannWindow(10).print();\n * ```\n * @param The length of window\n *\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction hannWindow_(windowLength) {\n return cosineWindow(windowLength, 0.5, 0.5);\n}\nexport const hannWindow = /* @__PURE__ */ op({ hannWindow_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFubl93aW5kb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zaWduYWwvaGFubl93aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxZQUFvQjtJQUN2QyxPQUFPLFlBQVksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtjb3NpbmVXaW5kb3d9IGZyb20gJy4uL3NpZ25hbF9vcHNfdXRpbCc7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBIYW5uIHdpbmRvdy5cbiAqXG4gKiBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpbmRvd19mdW5jdGlvbiNIYW5uX2FuZF9IYW1taW5nX3dpbmRvd3NcbiAqXG4gKiBgYGBqc1xuICogdGYuc2lnbmFsLmhhbm5XaW5kb3coMTApLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBUaGUgbGVuZ3RoIG9mIHdpbmRvd1xuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NpZ25hbCcsIG5hbWVzcGFjZTogJ3NpZ25hbCd9XG4gKi9cbmZ1bmN0aW9uIGhhbm5XaW5kb3dfKHdpbmRvd0xlbmd0aDogbnVtYmVyKTogVGVuc29yMUQge1xuICByZXR1cm4gY29zaW5lV2luZG93KHdpbmRvd0xlbmd0aCwgMC41LCAwLjUpO1xufVxuXG5leHBvcnQgY29uc3QgaGFubldpbmRvdyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aGFubldpbmRvd199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { concat } from '../concat';\nimport { fill } from '../fill';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\nimport { slice } from '../slice';\nimport { tensor2d } from '../tensor2d';\n/**\n * Expands input into frames of frameLength.\n * Slides a window size with frameStep.\n *\n * ```js\n * tf.signal.frame([1, 2, 3], 2, 1).print();\n * ```\n * @param signal The input tensor to be expanded\n * @param frameLength Length of each frame\n * @param frameStep The frame hop size in samples.\n * @param padEnd Whether to pad the end of signal with padValue.\n * @param padValue A number to use where the input signal does\n * not exist when padEnd is True.\n *\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction frame_(signal, frameLength, frameStep, padEnd = false, padValue = 0) {\n let start = 0;\n const output = [];\n while (start + frameLength <= signal.size) {\n output.push(slice(signal, start, frameLength));\n start += frameStep;\n }\n if (padEnd) {\n while (start < signal.size) {\n const padLen = (start + frameLength) - signal.size;\n const pad = concat([\n slice(signal, start, frameLength - padLen), fill([padLen], padValue)\n ]);\n output.push(pad);\n start += frameStep;\n }\n }\n if (output.length === 0) {\n return tensor2d([], [0, frameLength]);\n }\n return reshape(concat(output), [output.length, frameLength]);\n}\nexport const frame = /* @__PURE__ */ op({ frame_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zaWduYWwvZnJhbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxNQUFNLENBQ1gsTUFBZ0IsRUFBRSxXQUFtQixFQUFFLFNBQWlCLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFDeEUsUUFBUSxHQUFHLENBQUM7SUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsT0FBTyxLQUFLLEdBQUcsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQy9DLEtBQUssSUFBSSxTQUFTLENBQUM7S0FDcEI7SUFFRCxJQUFJLE1BQU0sRUFBRTtRQUNWLE9BQU8sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNuRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUM7Z0JBQ2pCLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUM7YUFDckUsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixLQUFLLElBQUksU0FBUyxDQUFDO1NBQ3BCO0tBQ0Y7SUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQ3ZDO0lBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29uY2F0fSBmcm9tICcuLi9jb25jYXQnO1xuaW1wb3J0IHtmaWxsfSBmcm9tICcuLi9maWxsJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4uL3Jlc2hhcGUnO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi4vc2xpY2UnO1xuaW1wb3J0IHt0ZW5zb3IyZH0gZnJvbSAnLi4vdGVuc29yMmQnO1xuXG4vKipcbiAqIEV4cGFuZHMgaW5wdXQgaW50byBmcmFtZXMgb2YgZnJhbWVMZW5ndGguXG4gKiBTbGlkZXMgYSB3aW5kb3cgc2l6ZSB3aXRoIGZyYW1lU3RlcC5cbiAqXG4gKiBgYGBqc1xuICogdGYuc2lnbmFsLmZyYW1lKFsxLCAyLCAzXSwgMiwgMSkucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIHNpZ25hbCBUaGUgaW5wdXQgdGVuc29yIHRvIGJlIGV4cGFuZGVkXG4gKiBAcGFyYW0gZnJhbWVMZW5ndGggTGVuZ3RoIG9mIGVhY2ggZnJhbWVcbiAqIEBwYXJhbSBmcmFtZVN0ZXAgVGhlIGZyYW1lIGhvcCBzaXplIGluIHNhbXBsZXMuXG4gKiBAcGFyYW0gcGFkRW5kIFdoZXRoZXIgdG8gcGFkIHRoZSBlbmQgb2Ygc2lnbmFsIHdpdGggcGFkVmFsdWUuXG4gKiBAcGFyYW0gcGFkVmFsdWUgQSBudW1iZXIgdG8gdXNlIHdoZXJlIHRoZSBpbnB1dCBzaWduYWwgZG9lc1xuICogICAgIG5vdCBleGlzdCB3aGVuIHBhZEVuZCBpcyBUcnVlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NpZ25hbCcsIG5hbWVzcGFjZTogJ3NpZ25hbCd9XG4gKi9cbmZ1bmN0aW9uIGZyYW1lXyhcbiAgICBzaWduYWw6IFRlbnNvcjFELCBmcmFtZUxlbmd0aDogbnVtYmVyLCBmcmFtZVN0ZXA6IG51bWJlciwgcGFkRW5kID0gZmFsc2UsXG4gICAgcGFkVmFsdWUgPSAwKTogVGVuc29yIHtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgY29uc3Qgb3V0cHV0OiBUZW5zb3JbXSA9IFtdO1xuICB3aGlsZSAoc3RhcnQgKyBmcmFtZUxlbmd0aCA8PSBzaWduYWwuc2l6ZSkge1xuICAgIG91dHB1dC5wdXNoKHNsaWNlKHNpZ25hbCwgc3RhcnQsIGZyYW1lTGVuZ3RoKSk7XG4gICAgc3RhcnQgKz0gZnJhbWVTdGVwO1xuICB9XG5cbiAgaWYgKHBhZEVuZCkge1xuICAgIHdoaWxlIChzdGFydCA8IHNpZ25hbC5zaXplKSB7XG4gICAgICBjb25zdCBwYWRMZW4gPSAoc3RhcnQgKyBmcmFtZUxlbmd0aCkgLSBzaWduYWwuc2l6ZTtcbiAgICAgIGNvbnN0IHBhZCA9IGNvbmNhdChbXG4gICAgICAgIHNsaWNlKHNpZ25hbCwgc3RhcnQsIGZyYW1lTGVuZ3RoIC0gcGFkTGVuKSwgZmlsbChbcGFkTGVuXSwgcGFkVmFsdWUpXG4gICAgICBdKTtcbiAgICAgIG91dHB1dC5wdXNoKHBhZCk7XG4gICAgICBzdGFydCArPSBmcmFtZVN0ZXA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG91dHB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdGVuc29yMmQoW10sIFswLCBmcmFtZUxlbmd0aF0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc2hhcGUoY29uY2F0KG91dHB1dCksIFtvdXRwdXQubGVuZ3RoLCBmcmFtZUxlbmd0aF0pO1xufVxuZXhwb3J0IGNvbnN0IGZyYW1lID0gLyogQF9fUFVSRV9fICovIG9wKHtmcmFtZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { enclosingPowerOfTwo } from '../signal_ops_util';\nimport { rfft } from '../spectral/rfft';\nimport { frame } from './frame';\nimport { hannWindow } from './hann_window';\n/**\n * Computes the Short-time Fourier Transform of signals\n * See: https://en.wikipedia.org/wiki/Short-time_Fourier_transform\n *\n * ```js\n * const input = tf.tensor1d([1, 1, 1, 1, 1])\n * tf.signal.stft(input, 3, 1).print();\n * ```\n * @param signal 1-dimensional real value tensor.\n * @param frameLength The window length of samples.\n * @param frameStep The number of samples to step.\n * @param fftLength The size of the FFT to apply.\n * @param windowFn A callable that takes a window length and returns 1-d tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction stft_(signal, frameLength, frameStep, fftLength, windowFn = hannWindow) {\n if (fftLength == null) {\n fftLength = enclosingPowerOfTwo(frameLength);\n }\n const framedSignal = frame(signal, frameLength, frameStep);\n const windowedSignal = mul(framedSignal, windowFn(frameLength));\n return rfft(windowedSignal, fftLength);\n}\nexport const stft = /* @__PURE__ */ op({ stft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RmdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NpZ25hbC9zdGZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFdEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQVMsS0FBSyxDQUNWLE1BQWdCLEVBQUUsV0FBbUIsRUFBRSxTQUFpQixFQUN4RCxTQUFrQixFQUNsQixXQUF5QyxVQUFVO0lBQ3JELElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixTQUFTLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDOUM7SUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge211bH0gZnJvbSAnLi4vbXVsJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge2VuY2xvc2luZ1Bvd2VyT2ZUd299IGZyb20gJy4uL3NpZ25hbF9vcHNfdXRpbCc7XG5pbXBvcnQge3JmZnR9IGZyb20gJy4uL3NwZWN0cmFsL3JmZnQnO1xuXG5pbXBvcnQge2ZyYW1lfSBmcm9tICcuL2ZyYW1lJztcbmltcG9ydCB7aGFubldpbmRvd30gZnJvbSAnLi9oYW5uX3dpbmRvdyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIFNob3J0LXRpbWUgRm91cmllciBUcmFuc2Zvcm0gb2Ygc2lnbmFsc1xuICogU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaG9ydC10aW1lX0ZvdXJpZXJfdHJhbnNmb3JtXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGlucHV0ID0gdGYudGVuc29yMWQoWzEsIDEsIDEsIDEsIDFdKVxuICogdGYuc2lnbmFsLnN0ZnQoaW5wdXQsIDMsIDEpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBzaWduYWwgMS1kaW1lbnNpb25hbCByZWFsIHZhbHVlIHRlbnNvci5cbiAqIEBwYXJhbSBmcmFtZUxlbmd0aCBUaGUgd2luZG93IGxlbmd0aCBvZiBzYW1wbGVzLlxuICogQHBhcmFtIGZyYW1lU3RlcCBUaGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gc3RlcC5cbiAqIEBwYXJhbSBmZnRMZW5ndGggVGhlIHNpemUgb2YgdGhlIEZGVCB0byBhcHBseS5cbiAqIEBwYXJhbSB3aW5kb3dGbiBBIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSB3aW5kb3cgbGVuZ3RoIGFuZCByZXR1cm5zIDEtZCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2lnbmFsJywgbmFtZXNwYWNlOiAnc2lnbmFsJ31cbiAqL1xuZnVuY3Rpb24gc3RmdF8oXG4gICAgc2lnbmFsOiBUZW5zb3IxRCwgZnJhbWVMZW5ndGg6IG51bWJlciwgZnJhbWVTdGVwOiBudW1iZXIsXG4gICAgZmZ0TGVuZ3RoPzogbnVtYmVyLFxuICAgIHdpbmRvd0ZuOiAobGVuZ3RoOiBudW1iZXIpID0+IFRlbnNvcjFEID0gaGFubldpbmRvdyk6IFRlbnNvciB7XG4gIGlmIChmZnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGZmdExlbmd0aCA9IGVuY2xvc2luZ1Bvd2VyT2ZUd28oZnJhbWVMZW5ndGgpO1xuICB9XG4gIGNvbnN0IGZyYW1lZFNpZ25hbCA9IGZyYW1lKHNpZ25hbCwgZnJhbWVMZW5ndGgsIGZyYW1lU3RlcCk7XG4gIGNvbnN0IHdpbmRvd2VkU2lnbmFsID0gbXVsKGZyYW1lZFNpZ25hbCwgd2luZG93Rm4oZnJhbWVMZW5ndGgpKTtcbiAgcmV0dXJuIHJmZnQod2luZG93ZWRTaWduYWwsIGZmdExlbmd0aCk7XG59XG5leHBvcnQgY29uc3Qgc3RmdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3RmdF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { CropAndResize } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\n/**\n * Extracts crops from the input image tensor and resizes them using bilinear\n * sampling or nearest neighbor sampling (possibly with aspect ratio change)\n * to a common output size specified by cropSize.\n *\n * @param image 4d tensor of shape `[batch,imageHeight,imageWidth, depth]`,\n * where imageHeight and imageWidth must be positive, specifying the\n * batch of images from which to take crops\n * @param boxes 2d float32 tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the normalized\n * coordinates of the box in the `boxInd[i]`th image in the batch\n * @param boxInd 1d int32 tensor of shape `[numBoxes]` with values in range\n * `[0, batch)` that specifies the image that the `i`-th box refers to.\n * @param cropSize 1d int32 tensor of 2 elements `[cropHeigh, cropWidth]`\n * specifying the size to which all crops are resized to.\n * @param method Optional string from `'bilinear' | 'nearest'`,\n * defaults to bilinear, which specifies the sampling method for resizing\n * @param extrapolationValue A threshold for deciding when to remove boxes based\n * on score. Defaults to 0.\n * @return A 4D tensor of the shape `[numBoxes,cropHeight,cropWidth,depth]`\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction cropAndResize_(image, boxes, boxInd, cropSize, method = 'bilinear', extrapolationValue = 0) {\n const $image = convertToTensor(image, 'image', 'cropAndResize');\n const $boxes = convertToTensor(boxes, 'boxes', 'cropAndResize', 'float32');\n const $boxInd = convertToTensor(boxInd, 'boxInd', 'cropAndResize', 'int32');\n const numBoxes = $boxes.shape[0];\n util.assert($image.rank === 4, () => 'Error in cropAndResize: image must be rank 4,' +\n `but got rank ${$image.rank}.`);\n util.assert($boxes.rank === 2 && $boxes.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${numBoxes},4] ` +\n `but had shape ${$boxes.shape}.`);\n util.assert($boxInd.rank === 1 && $boxInd.shape[0] === numBoxes, () => `Error in cropAndResize: boxInd must be have size [${numBoxes}] ` +\n `but had shape ${$boxes.shape}.`);\n util.assert(cropSize.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got ` +\n `length ${cropSize.length}.`);\n util.assert(cropSize[0] >= 1 && cropSize[1] >= 1, () => `cropSize must be atleast [1,1], but was ${cropSize}`);\n util.assert(method === 'bilinear' || method === 'nearest', () => `method must be bilinear or nearest, but was ${method}`);\n const inputs = { image: $image, boxes: $boxes, boxInd: $boxInd };\n const attrs = { method, extrapolationValue, cropSize };\n const res = ENGINE.runKernel(CropAndResize, inputs, attrs);\n return res;\n}\nexport const cropAndResize = /* @__PURE__ */ op({ cropAndResize_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcF9hbmRfcmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvY3JvcF9hbmRfcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGFBQWEsRUFBMEMsTUFBTSxvQkFBb0IsQ0FBQztBQUkxRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsY0FBYyxDQUNuQixLQUEwQixFQUMxQixLQUEwQixFQUMxQixNQUEyQixFQUMzQixRQUEwQixFQUMxQixTQUErQixVQUFVLEVBQ3pDLGtCQUFrQixHQUFHLENBQUM7SUFFeEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpDLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2pCLEdBQUcsRUFBRSxDQUFDLCtDQUErQztRQUNqRCxnQkFBZ0IsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFDMUMsR0FBRyxFQUFFLENBQUMsb0RBQW9ELFFBQVEsTUFBTTtRQUNwRSxpQkFBaUIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFDbkQsR0FBRyxFQUFFLENBQUMscURBQXFELFFBQVEsSUFBSTtRQUNuRSxpQkFBaUIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMsZ0VBQWdFO1FBQ2xFLFVBQVUsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ3BDLEdBQUcsRUFBRSxDQUFDLDJDQUEyQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUM3QyxHQUFHLEVBQUUsQ0FBQywrQ0FBK0MsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVuRSxNQUFNLE1BQU0sR0FDYyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDMUUsTUFBTSxLQUFLLEdBQXVCLEVBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQ3pFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ3hCLGFBQWEsRUFBRSxNQUFtQyxFQUNsRCxLQUFnQyxDQUFDLENBQUM7SUFDdEMsT0FBTyxHQUFlLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge0Nyb3BBbmRSZXNpemUsIENyb3BBbmRSZXNpemVBdHRycywgQ3JvcEFuZFJlc2l6ZUlucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi8uLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IxRCwgVGVuc29yMkQsIFRlbnNvcjREfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEV4dHJhY3RzIGNyb3BzIGZyb20gdGhlIGlucHV0IGltYWdlIHRlbnNvciBhbmQgcmVzaXplcyB0aGVtIHVzaW5nIGJpbGluZWFyXG4gKiBzYW1wbGluZyBvciBuZWFyZXN0IG5laWdoYm9yIHNhbXBsaW5nIChwb3NzaWJseSB3aXRoIGFzcGVjdCByYXRpbyBjaGFuZ2UpXG4gKiB0byBhIGNvbW1vbiBvdXRwdXQgc2l6ZSBzcGVjaWZpZWQgYnkgY3JvcFNpemUuXG4gKlxuICogQHBhcmFtIGltYWdlIDRkIHRlbnNvciBvZiBzaGFwZSBgW2JhdGNoLGltYWdlSGVpZ2h0LGltYWdlV2lkdGgsIGRlcHRoXWAsXG4gKiAgICAgd2hlcmUgaW1hZ2VIZWlnaHQgYW5kIGltYWdlV2lkdGggbXVzdCBiZSBwb3NpdGl2ZSwgc3BlY2lmeWluZyB0aGVcbiAqICAgICBiYXRjaCBvZiBpbWFnZXMgZnJvbSB3aGljaCB0byB0YWtlIGNyb3BzXG4gKiBAcGFyYW0gYm94ZXMgMmQgZmxvYXQzMiB0ZW5zb3Igb2Ygc2hhcGUgYFtudW1Cb3hlcywgNF1gLiBFYWNoIGVudHJ5IGlzXG4gKiAgICAgYFt5MSwgeDEsIHkyLCB4Ml1gLCB3aGVyZSBgKHkxLCB4MSlgIGFuZCBgKHkyLCB4MilgIGFyZSB0aGUgbm9ybWFsaXplZFxuICogICAgIGNvb3JkaW5hdGVzIG9mIHRoZSBib3ggaW4gdGhlIGBib3hJbmRbaV1gdGggaW1hZ2UgaW4gdGhlIGJhdGNoXG4gKiBAcGFyYW0gYm94SW5kIDFkIGludDMyIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzXWAgd2l0aCB2YWx1ZXMgaW4gcmFuZ2VcbiAqICAgICBgWzAsIGJhdGNoKWAgdGhhdCBzcGVjaWZpZXMgdGhlIGltYWdlIHRoYXQgdGhlIGBpYC10aCBib3ggcmVmZXJzIHRvLlxuICogQHBhcmFtIGNyb3BTaXplIDFkIGludDMyIHRlbnNvciBvZiAyIGVsZW1lbnRzIGBbY3JvcEhlaWdoLCBjcm9wV2lkdGhdYFxuICogICAgIHNwZWNpZnlpbmcgdGhlIHNpemUgdG8gd2hpY2ggYWxsIGNyb3BzIGFyZSByZXNpemVkIHRvLlxuICogQHBhcmFtIG1ldGhvZCBPcHRpb25hbCBzdHJpbmcgZnJvbSBgJ2JpbGluZWFyJyB8ICduZWFyZXN0J2AsXG4gKiAgICAgZGVmYXVsdHMgdG8gYmlsaW5lYXIsIHdoaWNoIHNwZWNpZmllcyB0aGUgc2FtcGxpbmcgbWV0aG9kIGZvciByZXNpemluZ1xuICogQHBhcmFtIGV4dHJhcG9sYXRpb25WYWx1ZSBBIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hlbiB0byByZW1vdmUgYm94ZXMgYmFzZWRcbiAqICAgICBvbiBzY29yZS4gRGVmYXVsdHMgdG8gMC5cbiAqIEByZXR1cm4gQSA0RCB0ZW5zb3Igb2YgdGhlIHNoYXBlIGBbbnVtQm94ZXMsY3JvcEhlaWdodCxjcm9wV2lkdGgsZGVwdGhdYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ31cbiAqL1xuZnVuY3Rpb24gY3JvcEFuZFJlc2l6ZV8oXG4gICAgaW1hZ2U6IFRlbnNvcjREfFRlbnNvckxpa2UsXG4gICAgYm94ZXM6IFRlbnNvcjJEfFRlbnNvckxpa2UsXG4gICAgYm94SW5kOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIGNyb3BTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIG1ldGhvZDogJ2JpbGluZWFyJ3wnbmVhcmVzdCcgPSAnYmlsaW5lYXInLFxuICAgIGV4dHJhcG9sYXRpb25WYWx1ZSA9IDAsXG4gICAgKTogVGVuc29yNEQge1xuICBjb25zdCAkaW1hZ2UgPSBjb252ZXJ0VG9UZW5zb3IoaW1hZ2UsICdpbWFnZScsICdjcm9wQW5kUmVzaXplJyk7XG4gIGNvbnN0ICRib3hlcyA9IGNvbnZlcnRUb1RlbnNvcihib3hlcywgJ2JveGVzJywgJ2Nyb3BBbmRSZXNpemUnLCAnZmxvYXQzMicpO1xuICBjb25zdCAkYm94SW5kID0gY29udmVydFRvVGVuc29yKGJveEluZCwgJ2JveEluZCcsICdjcm9wQW5kUmVzaXplJywgJ2ludDMyJyk7XG5cbiAgY29uc3QgbnVtQm94ZXMgPSAkYm94ZXMuc2hhcGVbMF07XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2UucmFuayA9PT0gNCxcbiAgICAgICgpID0+ICdFcnJvciBpbiBjcm9wQW5kUmVzaXplOiBpbWFnZSBtdXN0IGJlIHJhbmsgNCwnICtcbiAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JGltYWdlLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRib3hlcy5yYW5rID09PSAyICYmICRib3hlcy5zaGFwZVsxXSA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjcm9wQW5kUmVzaXplOiBib3hlcyBtdXN0IGJlIGhhdmUgc2l6ZSBbJHtudW1Cb3hlc30sNF0gYCArXG4gICAgICAgICAgYGJ1dCBoYWQgc2hhcGUgJHskYm94ZXMuc2hhcGV9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRib3hJbmQucmFuayA9PT0gMSAmJiAkYm94SW5kLnNoYXBlWzBdID09PSBudW1Cb3hlcyxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjcm9wQW5kUmVzaXplOiBib3hJbmQgbXVzdCBiZSBoYXZlIHNpemUgWyR7bnVtQm94ZXN9XSBgICtcbiAgICAgICAgICBgYnV0IGhhZCBzaGFwZSAkeyRib3hlcy5zaGFwZX0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY3JvcFNpemUubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNyb3BBbmRSZXNpemU6IGNyb3BTaXplIG11c3QgYmUgb2YgbGVuZ3RoIDIsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYGxlbmd0aCAke2Nyb3BTaXplLmxlbmd0aH0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY3JvcFNpemVbMF0gPj0gMSAmJiBjcm9wU2l6ZVsxXSA+PSAxLFxuICAgICAgKCkgPT4gYGNyb3BTaXplIG11c3QgYmUgYXRsZWFzdCBbMSwxXSwgYnV0IHdhcyAke2Nyb3BTaXplfWApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIG1ldGhvZCA9PT0gJ2JpbGluZWFyJyB8fCBtZXRob2QgPT09ICduZWFyZXN0JyxcbiAgICAgICgpID0+IGBtZXRob2QgbXVzdCBiZSBiaWxpbmVhciBvciBuZWFyZXN0LCBidXQgd2FzICR7bWV0aG9kfWApO1xuXG4gIGNvbnN0IGlucHV0czpcbiAgICAgIENyb3BBbmRSZXNpemVJbnB1dHMgPSB7aW1hZ2U6ICRpbWFnZSwgYm94ZXM6ICRib3hlcywgYm94SW5kOiAkYm94SW5kfTtcbiAgY29uc3QgYXR0cnM6IENyb3BBbmRSZXNpemVBdHRycyA9IHttZXRob2QsIGV4dHJhcG9sYXRpb25WYWx1ZSwgY3JvcFNpemV9O1xuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgQ3JvcEFuZFJlc2l6ZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG4gIHJldHVybiByZXMgYXMgVGVuc29yNEQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcm9wQW5kUmVzaXplID0gLyogQF9fUFVSRV9fICovIG9wKHtjcm9wQW5kUmVzaXplX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { FlipLeftRight } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\n/**\n * Flips the image left to right. Currently available in the CPU, WebGL, and\n * WASM backends.\n *\n * @param image 4d tensor of shape `[batch, imageHeight, imageWidth, depth]`.\n */\n/** @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'} */\nfunction flipLeftRight_(image) {\n const $image = convertToTensor(image, 'image', 'flipLeftRight', 'float32');\n util.assert($image.rank === 4, () => 'Error in flipLeftRight: image must be rank 4,' +\n `but got rank ${$image.rank}.`);\n const inputs = { image: $image };\n const res = ENGINE.runKernel(FlipLeftRight, inputs, {});\n return res;\n}\nexport const flipLeftRight = /* @__PURE__ */ op({ flipLeftRight_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpcF9sZWZ0X3JpZ2h0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvZmxpcF9sZWZ0X3JpZ2h0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSxvQkFBb0IsQ0FBQztBQUd0RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7R0FLRztBQUNILDZFQUE2RTtBQUM3RSxTQUFTLGNBQWMsQ0FBQyxLQUEwQjtJQUNoRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFM0UsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDakIsR0FBRyxFQUFFLENBQUMsK0NBQStDO1FBQ2pELGdCQUFnQixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV4QyxNQUFNLE1BQU0sR0FBd0IsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDcEQsTUFBTSxHQUFHLEdBQ0wsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsTUFBbUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RSxPQUFPLEdBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7RmxpcExlZnRSaWdodCwgRmxpcExlZnRSaWdodElucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEZsaXBzIHRoZSBpbWFnZSBsZWZ0IHRvIHJpZ2h0LiBDdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSBDUFUsIFdlYkdMLCBhbmRcbiAqIFdBU00gYmFja2VuZHMuXG4gKlxuICogQHBhcmFtIGltYWdlIDRkIHRlbnNvciBvZiBzaGFwZSBgW2JhdGNoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgZGVwdGhdYC5cbiAqL1xuLyoqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ30gKi9cbmZ1bmN0aW9uIGZsaXBMZWZ0UmlnaHRfKGltYWdlOiBUZW5zb3I0RHxUZW5zb3JMaWtlKTogVGVuc29yNEQge1xuICBjb25zdCAkaW1hZ2UgPSBjb252ZXJ0VG9UZW5zb3IoaW1hZ2UsICdpbWFnZScsICdmbGlwTGVmdFJpZ2h0JywgJ2Zsb2F0MzInKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICRpbWFnZS5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGZsaXBMZWZ0UmlnaHQ6IGltYWdlIG11c3QgYmUgcmFuayA0LCcgK1xuICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskaW1hZ2UucmFua30uYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBGbGlwTGVmdFJpZ2h0SW5wdXRzID0ge2ltYWdlOiAkaW1hZ2V9O1xuICBjb25zdCByZXMgPVxuICAgICAgRU5HSU5FLnJ1bktlcm5lbChGbGlwTGVmdFJpZ2h0LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCwge30pO1xuICByZXR1cm4gcmVzIGFzIFRlbnNvcjREO1xufVxuXG5leHBvcnQgY29uc3QgZmxpcExlZnRSaWdodCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZmxpcExlZnRSaWdodF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\nimport { tile } from '../tile';\n/**\n * Converts images from grayscale to RGB format.\n *\n * @param image A grayscale tensor to convert. The `image`'s last dimension must\n * be size 1 with at least a two-dimensional shape.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction grayscaleToRGB_(image) {\n const $image = convertToTensor(image, 'image', 'grayscaleToRGB');\n const lastDimsIdx = $image.rank - 1;\n const lastDims = $image.shape[lastDimsIdx];\n util.assert($image.rank >= 2, () => 'Error in grayscaleToRGB: images must be at least rank 2, ' +\n `but got rank ${$image.rank}.`);\n util.assert(lastDims === 1, () => 'Error in grayscaleToRGB: last dimension of a grayscale image ' +\n `should be size 1, but got size ${lastDims}.`);\n const reps = new Array($image.rank);\n reps.fill(1, 0, lastDimsIdx);\n reps[lastDimsIdx] = 3;\n return tile($image, reps);\n}\nexport const grayscaleToRGB = /* @__PURE__ */ op({ grayscaleToRGB_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JheXNjYWxlX3RvX3JnYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWdlL2dyYXlzY2FsZV90b19yZ2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU3Qjs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxlQUFlLENBQ1csS0FBbUI7SUFDcEQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUVqRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQ2hCLEdBQUcsRUFBRSxDQUFDLDJEQUEyRDtRQUM3RCxnQkFBZ0IsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLEtBQUssQ0FBQyxFQUNkLEdBQUcsRUFBRSxDQUFDLCtEQUErRDtRQUNqRSxrQ0FBa0MsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUV2RCxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGVBQWUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMkQsIFRlbnNvcjNELCBUZW5zb3I0RCwgVGVuc29yNUQsIFRlbnNvcjZEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3RpbGV9IGZyb20gJy4uL3RpbGUnO1xuXG4vKipcbiAqIENvbnZlcnRzIGltYWdlcyBmcm9tIGdyYXlzY2FsZSB0byBSR0IgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBpbWFnZSBBIGdyYXlzY2FsZSB0ZW5zb3IgdG8gY29udmVydC4gVGhlIGBpbWFnZWAncyBsYXN0IGRpbWVuc2lvbiBtdXN0XG4gKiAgICAgYmUgc2l6ZSAxIHdpdGggYXQgbGVhc3QgYSB0d28tZGltZW5zaW9uYWwgc2hhcGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5mdW5jdGlvbiBncmF5c2NhbGVUb1JHQl88VCBleHRlbmRzIFRlbnNvcjJEfFRlbnNvcjNEfFRlbnNvcjREfFRlbnNvcjVEfFxuICAgICAgICAgICAgICAgICAgICAgICAgIFRlbnNvcjZEPihpbWFnZTogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICRpbWFnZSA9IGNvbnZlcnRUb1RlbnNvcihpbWFnZSwgJ2ltYWdlJywgJ2dyYXlzY2FsZVRvUkdCJyk7XG5cbiAgY29uc3QgbGFzdERpbXNJZHggPSAkaW1hZ2UucmFuayAtIDE7XG4gIGNvbnN0IGxhc3REaW1zID0gJGltYWdlLnNoYXBlW2xhc3REaW1zSWR4XTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICRpbWFnZS5yYW5rID49IDIsXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gZ3JheXNjYWxlVG9SR0I6IGltYWdlcyBtdXN0IGJlIGF0IGxlYXN0IHJhbmsgMiwgJyArXG4gICAgICAgICAgYGJ1dCBnb3QgcmFuayAkeyRpbWFnZS5yYW5rfS5gKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGxhc3REaW1zID09PSAxLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGdyYXlzY2FsZVRvUkdCOiBsYXN0IGRpbWVuc2lvbiBvZiBhIGdyYXlzY2FsZSBpbWFnZSAnICtcbiAgICAgICAgICBgc2hvdWxkIGJlIHNpemUgMSwgYnV0IGdvdCBzaXplICR7bGFzdERpbXN9LmApO1xuXG4gIGNvbnN0IHJlcHMgPSBuZXcgQXJyYXkoJGltYWdlLnJhbmspO1xuXG4gIHJlcHMuZmlsbCgxLCAwLCBsYXN0RGltc0lkeCk7XG4gIHJlcHNbbGFzdERpbXNJZHhdID0gMztcblxuICByZXR1cm4gdGlsZSgkaW1hZ2UsIHJlcHMpO1xufVxuXG5leHBvcnQgY29uc3QgZ3JheXNjYWxlVG9SR0IgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2dyYXlzY2FsZVRvUkdCX30pO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { cast } from '../cast';\nimport { einsum } from '../einsum';\nimport { expandDims } from '../expand_dims';\nimport { op } from '../operation';\nimport { tensor1d } from '../tensor1d';\n/**\n * Converts images from RGB format to grayscale.\n *\n * @param image A RGB tensor to convert. The `image`'s last dimension must\n * be size 3 with at least a two-dimensional shape.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction rgbToGrayscale_(image) {\n const $image = convertToTensor(image, 'image', 'RGBToGrayscale');\n const lastDimsIdx = $image.rank - 1;\n const lastDims = $image.shape[lastDimsIdx];\n util.assert($image.rank >= 2, () => 'Error in RGBToGrayscale: images must be at least rank 2, ' +\n `but got rank ${$image.rank}.`);\n util.assert(lastDims === 3, () => 'Error in RGBToGrayscale: last dimension of an RGB image ' +\n `should be size 3, but got size ${lastDims}.`);\n // Remember original dtype so we can convert back if needed\n const origDtype = $image.dtype;\n const fltImage = cast($image, 'float32');\n const rgbWeights = tensor1d([0.2989, 0.5870, 0.1140]);\n let grayFloat;\n switch ($image.rank) {\n case 2:\n grayFloat = einsum('ij,j->i', fltImage, rgbWeights);\n break;\n case 3:\n grayFloat = einsum('ijk,k->ij', fltImage, rgbWeights);\n break;\n case 4:\n grayFloat = einsum('ijkl,l->ijk', fltImage, rgbWeights);\n break;\n case 5:\n grayFloat = einsum('ijklm,m->ijkl', fltImage, rgbWeights);\n break;\n case 6:\n grayFloat = einsum('ijklmn,n->ijklm', fltImage, rgbWeights);\n break;\n default:\n throw new Error('Not a valid tensor rank.');\n }\n grayFloat = expandDims(grayFloat, -1);\n return cast(grayFloat, origDtype);\n}\nexport const rgbToGrayscale = /* @__PURE__ */ op({ rgbToGrayscale_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmdiX3RvX2dyYXlzY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWdlL3JnYl90b19ncmF5c2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGVBQWUsQ0FDVyxLQUFtQjtJQUNwRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRWpFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsRUFDaEIsR0FBRyxFQUFFLENBQUMsMkRBQTJEO1FBQzdELGdCQUFnQixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV4QyxJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsS0FBSyxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMsMERBQTBEO1FBQzVELGtDQUFrQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRXZELDJEQUEyRDtJQUMzRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFekMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXRELElBQUksU0FBUyxDQUFDO0lBQ2QsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ25CLEtBQUssQ0FBQztZQUNKLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNO1FBQ1IsS0FBSyxDQUFDO1lBQ0osU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3RELE1BQU07UUFDUixLQUFLLENBQUM7WUFDSixTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDeEQsTUFBTTtRQUNSLEtBQUssQ0FBQztZQUNKLFNBQVMsR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMxRCxNQUFNO1FBQ1IsS0FBSyxDQUFDO1lBQ0osU0FBUyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDNUQsTUFBTTtRQUNSO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0QyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFNLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IyRCwgVGVuc29yM0QsIFRlbnNvcjRELCBUZW5zb3I1RCwgVGVuc29yNkR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi4vY2FzdCc7XG5pbXBvcnQge2VpbnN1bX0gZnJvbSAnLi4vZWluc3VtJztcbmltcG9ydCB7ZXhwYW5kRGltc30gZnJvbSAnLi4vZXhwYW5kX2RpbXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7dGVuc29yMWR9IGZyb20gJy4uL3RlbnNvcjFkJztcblxuLyoqXG4gKiBDb252ZXJ0cyBpbWFnZXMgZnJvbSBSR0IgZm9ybWF0IHRvIGdyYXlzY2FsZS5cbiAqXG4gKiBAcGFyYW0gaW1hZ2UgQSBSR0IgdGVuc29yIHRvIGNvbnZlcnQuIFRoZSBgaW1hZ2VgJ3MgbGFzdCBkaW1lbnNpb24gbXVzdFxuICogICAgIGJlIHNpemUgMyB3aXRoIGF0IGxlYXN0IGEgdHdvLWRpbWVuc2lvbmFsIHNoYXBlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ31cbiAqL1xuZnVuY3Rpb24gcmdiVG9HcmF5c2NhbGVfPFQgZXh0ZW5kcyBUZW5zb3IyRHxUZW5zb3IzRHxUZW5zb3I0RHxUZW5zb3I1RHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBUZW5zb3I2RD4oaW1hZ2U6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkaW1hZ2UgPSBjb252ZXJ0VG9UZW5zb3IoaW1hZ2UsICdpbWFnZScsICdSR0JUb0dyYXlzY2FsZScpO1xuXG4gIGNvbnN0IGxhc3REaW1zSWR4ID0gJGltYWdlLnJhbmsgLSAxO1xuICBjb25zdCBsYXN0RGltcyA9ICRpbWFnZS5zaGFwZVtsYXN0RGltc0lkeF07XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2UucmFuayA+PSAyLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIFJHQlRvR3JheXNjYWxlOiBpbWFnZXMgbXVzdCBiZSBhdCBsZWFzdCByYW5rIDIsICcgK1xuICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskaW1hZ2UucmFua30uYCk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICBsYXN0RGltcyA9PT0gMyxcbiAgICAgICgpID0+ICdFcnJvciBpbiBSR0JUb0dyYXlzY2FsZTogbGFzdCBkaW1lbnNpb24gb2YgYW4gUkdCIGltYWdlICcgK1xuICAgICAgICAgIGBzaG91bGQgYmUgc2l6ZSAzLCBidXQgZ290IHNpemUgJHtsYXN0RGltc30uYCk7XG5cbiAgLy8gUmVtZW1iZXIgb3JpZ2luYWwgZHR5cGUgc28gd2UgY2FuIGNvbnZlcnQgYmFjayBpZiBuZWVkZWRcbiAgY29uc3Qgb3JpZ0R0eXBlID0gJGltYWdlLmR0eXBlO1xuICBjb25zdCBmbHRJbWFnZSA9IGNhc3QoJGltYWdlLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IHJnYldlaWdodHMgPSB0ZW5zb3IxZChbMC4yOTg5LCAwLjU4NzAsIDAuMTE0MF0pO1xuXG4gIGxldCBncmF5RmxvYXQ7XG4gIHN3aXRjaCAoJGltYWdlLnJhbmspIHtcbiAgICBjYXNlIDI6XG4gICAgICBncmF5RmxvYXQgPSBlaW5zdW0oJ2lqLGotPmknLCBmbHRJbWFnZSwgcmdiV2VpZ2h0cyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBncmF5RmxvYXQgPSBlaW5zdW0oJ2lqayxrLT5paicsIGZsdEltYWdlLCByZ2JXZWlnaHRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIGdyYXlGbG9hdCA9IGVpbnN1bSgnaWprbCxsLT5pamsnLCBmbHRJbWFnZSwgcmdiV2VpZ2h0cyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICBncmF5RmxvYXQgPSBlaW5zdW0oJ2lqa2xtLG0tPmlqa2wnLCBmbHRJbWFnZSwgcmdiV2VpZ2h0cyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICBncmF5RmxvYXQgPSBlaW5zdW0oJ2lqa2xtbixuLT5pamtsbScsIGZsdEltYWdlLCByZ2JXZWlnaHRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIHZhbGlkIHRlbnNvciByYW5rLicpO1xuICB9XG4gIGdyYXlGbG9hdCA9IGV4cGFuZERpbXMoZ3JheUZsb2F0LCAtMSk7XG5cbiAgcmV0dXJuIGNhc3QoZ3JheUZsb2F0LCBvcmlnRHR5cGUpIGFzIFQ7XG59XG5cbmV4cG9ydCBjb25zdCByZ2JUb0dyYXlzY2FsZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmdiVG9HcmF5c2NhbGVffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { RotateWithOffset } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\n/**\n * Rotates the input image tensor counter-clockwise with an optional offset\n * center of rotation. Currently available in the CPU, WebGL, and WASM backends.\n *\n * @param image 4d tensor of shape `[batch, imageHeight, imageWidth, depth]`.\n * @param radians The amount of rotation.\n * @param fillValue The value to fill in the empty space leftover\n * after rotation. Can be either a single grayscale value (0-255), or an\n * array of three numbers `[red, green, blue]` specifying the red, green,\n * and blue channels. Defaults to `0` (black).\n * @param center The center of rotation. Can be either a single value (0-1), or\n * an array of two numbers `[centerX, centerY]`. Defaults to `0.5` (rotates\n * the image around its center).\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction rotateWithOffset_(image, radians, fillValue = 0, center = 0.5) {\n const $image = convertToTensor(image, 'image', 'rotateWithOffset', 'float32');\n util.assert($image.rank === 4, () => 'Error in rotateWithOffset: image must be rank 4,' +\n `but got rank ${$image.rank}.`);\n const inputs = { image: $image };\n const attrs = { radians, fillValue, center };\n const res = ENGINE.runKernel(RotateWithOffset, inputs, attrs);\n return res;\n}\nexport const rotateWithOffset = /* @__PURE__ */ op({ rotateWithOffset_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlX3dpdGhfb2Zmc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2Uvcm90YXRlX3dpdGhfb2Zmc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGdCQUFnQixFQUFnRCxNQUFNLG9CQUFvQixDQUFDO0FBSW5HLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksQ0FBQztBQUVuQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQVMsaUJBQWlCLENBQ3RCLEtBQTBCLEVBQUUsT0FBZSxFQUMzQyxZQUE2QyxDQUFDLEVBQzlDLFNBQWtDLEdBQUc7SUFDdkMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFOUUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDakIsR0FBRyxFQUFFLENBQUMsa0RBQWtEO1FBQ3BELGdCQUFnQixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV4QyxNQUFNLE1BQU0sR0FBMkIsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQTBCLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUNsRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUN4QixnQkFBZ0IsRUFBRSxNQUFtQyxFQUNyRCxLQUFnQyxDQUFDLENBQUM7SUFDdEMsT0FBTyxHQUFlLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtSb3RhdGVXaXRoT2Zmc2V0LCBSb3RhdGVXaXRoT2Zmc2V0QXR0cnMsIFJvdGF0ZVdpdGhPZmZzZXRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4vLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogUm90YXRlcyB0aGUgaW5wdXQgaW1hZ2UgdGVuc29yIGNvdW50ZXItY2xvY2t3aXNlIHdpdGggYW4gb3B0aW9uYWwgb2Zmc2V0XG4gKiBjZW50ZXIgb2Ygcm90YXRpb24uIEN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIENQVSwgV2ViR0wsIGFuZCBXQVNNIGJhY2tlbmRzLlxuICpcbiAqIEBwYXJhbSBpbWFnZSA0ZCB0ZW5zb3Igb2Ygc2hhcGUgYFtiYXRjaCwgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIGRlcHRoXWAuXG4gKiBAcGFyYW0gcmFkaWFucyBUaGUgYW1vdW50IG9mIHJvdGF0aW9uLlxuICogQHBhcmFtIGZpbGxWYWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBpbiB0aGUgZW1wdHkgc3BhY2UgbGVmdG92ZXJcbiAqICAgICBhZnRlciByb3RhdGlvbi4gQ2FuIGJlIGVpdGhlciBhIHNpbmdsZSBncmF5c2NhbGUgdmFsdWUgKDAtMjU1KSwgb3IgYW5cbiAqICAgICBhcnJheSBvZiB0aHJlZSBudW1iZXJzIGBbcmVkLCBncmVlbiwgYmx1ZV1gIHNwZWNpZnlpbmcgdGhlIHJlZCwgZ3JlZW4sXG4gKiAgICAgYW5kIGJsdWUgY2hhbm5lbHMuIERlZmF1bHRzIHRvIGAwYCAoYmxhY2spLlxuICogQHBhcmFtIGNlbnRlciBUaGUgY2VudGVyIG9mIHJvdGF0aW9uLiBDYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlICgwLTEpLCBvclxuICogICAgIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIGBbY2VudGVyWCwgY2VudGVyWV1gLiBEZWZhdWx0cyB0byBgMC41YCAocm90YXRlc1xuICogICAgIHRoZSBpbWFnZSBhcm91bmQgaXRzIGNlbnRlcikuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5mdW5jdGlvbiByb3RhdGVXaXRoT2Zmc2V0XyhcbiAgICBpbWFnZTogVGVuc29yNER8VGVuc29yTGlrZSwgcmFkaWFuczogbnVtYmVyLFxuICAgIGZpbGxWYWx1ZTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IDAsXG4gICAgY2VudGVyOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXSA9IDAuNSk6IFRlbnNvcjREIHtcbiAgY29uc3QgJGltYWdlID0gY29udmVydFRvVGVuc29yKGltYWdlLCAnaW1hZ2UnLCAncm90YXRlV2l0aE9mZnNldCcsICdmbG9hdDMyJyk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2UucmFuayA9PT0gNCxcbiAgICAgICgpID0+ICdFcnJvciBpbiByb3RhdGVXaXRoT2Zmc2V0OiBpbWFnZSBtdXN0IGJlIHJhbmsgNCwnICtcbiAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JGltYWdlLnJhbmt9LmApO1xuXG4gIGNvbnN0IGlucHV0czogUm90YXRlV2l0aE9mZnNldElucHV0cyA9IHtpbWFnZTogJGltYWdlfTtcbiAgY29uc3QgYXR0cnM6IFJvdGF0ZVdpdGhPZmZzZXRBdHRycyA9IHtyYWRpYW5zLCBmaWxsVmFsdWUsIGNlbnRlcn07XG4gIGNvbnN0IHJlcyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBSb3RhdGVXaXRoT2Zmc2V0LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbiAgcmV0dXJuIHJlcyBhcyBUZW5zb3I0RDtcbn1cblxuZXhwb3J0IGNvbnN0IHJvdGF0ZVdpdGhPZmZzZXQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3JvdGF0ZVdpdGhPZmZzZXRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\nfunction nonMaxSuppSanityCheck(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma) {\n if (iouThreshold == null) {\n iouThreshold = 0.5;\n }\n if (scoreThreshold == null) {\n scoreThreshold = Number.NEGATIVE_INFINITY;\n }\n if (softNmsSigma == null) {\n softNmsSigma = 0.0;\n }\n const numBoxes = boxes.shape[0];\n maxOutputSize = Math.min(maxOutputSize, numBoxes);\n util.assert(0 <= iouThreshold && iouThreshold <= 1, () => `iouThreshold must be in [0, 1], but was '${iouThreshold}'`);\n util.assert(boxes.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${boxes.rank}'`);\n util.assert(boxes.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${boxes.shape[1]}`);\n util.assert(scores.rank === 1, () => 'scores must be a 1D tensor');\n util.assert(scores.shape[0] === numBoxes, () => `scores has incompatible shape with boxes. Expected ${numBoxes}, ` +\n `but was ${scores.shape[0]}`);\n util.assert(0 <= softNmsSigma && softNmsSigma <= 1, () => `softNmsSigma must be in [0, 1], but was '${softNmsSigma}'`);\n return { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma };\n}\nexport { nonMaxSuppSanityCheck };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ubWF4X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9ub25tYXhfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxTQUFTLHFCQUFxQixDQUMxQixLQUFlLEVBQUUsTUFBZ0IsRUFBRSxhQUFxQixFQUN4RCxZQUFvQixFQUFFLGNBQXNCLEVBQUUsWUFBcUI7SUFNckUsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO1FBQ3hCLFlBQVksR0FBRyxHQUFHLENBQUM7S0FDcEI7SUFDRCxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUU7UUFDMUIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztLQUMzQztJQUNELElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixZQUFZLEdBQUcsR0FBRyxDQUFDO0tBQ3BCO0lBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFbEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLElBQUksWUFBWSxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQ3RDLEdBQUcsRUFBRSxDQUFDLDRDQUE0QyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2hCLEdBQUcsRUFBRSxDQUFDLCtDQUErQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN4RSxJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNwQixHQUFHLEVBQUUsQ0FDRCxvREFBb0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQzVCLEdBQUcsRUFBRSxDQUFDLHNEQUFzRCxRQUFRLElBQUk7UUFDcEUsV0FBVyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLENBQUMsRUFDdEMsR0FBRyxFQUFFLENBQUMsNENBQTRDLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDdkUsT0FBTyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IxRCwgVGVuc29yMkR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5mdW5jdGlvbiBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgYm94ZXM6IFRlbnNvcjJELCBzY29yZXM6IFRlbnNvcjFELCBtYXhPdXRwdXRTaXplOiBudW1iZXIsXG4gICAgaW91VGhyZXNob2xkOiBudW1iZXIsIHNjb3JlVGhyZXNob2xkOiBudW1iZXIsIHNvZnRObXNTaWdtYT86IG51bWJlcik6IHtcbiAgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLFxuICBpb3VUaHJlc2hvbGQ6IG51bWJlcixcbiAgc2NvcmVUaHJlc2hvbGQ6IG51bWJlcixcbiAgc29mdE5tc1NpZ21hOiBudW1iZXJcbn0ge1xuICBpZiAoaW91VGhyZXNob2xkID09IG51bGwpIHtcbiAgICBpb3VUaHJlc2hvbGQgPSAwLjU7XG4gIH1cbiAgaWYgKHNjb3JlVGhyZXNob2xkID09IG51bGwpIHtcbiAgICBzY29yZVRocmVzaG9sZCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgfVxuICBpZiAoc29mdE5tc1NpZ21hID09IG51bGwpIHtcbiAgICBzb2Z0Tm1zU2lnbWEgPSAwLjA7XG4gIH1cblxuICBjb25zdCBudW1Cb3hlcyA9IGJveGVzLnNoYXBlWzBdO1xuICBtYXhPdXRwdXRTaXplID0gTWF0aC5taW4obWF4T3V0cHV0U2l6ZSwgbnVtQm94ZXMpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgMCA8PSBpb3VUaHJlc2hvbGQgJiYgaW91VGhyZXNob2xkIDw9IDEsXG4gICAgICAoKSA9PiBgaW91VGhyZXNob2xkIG11c3QgYmUgaW4gWzAsIDFdLCBidXQgd2FzICcke2lvdVRocmVzaG9sZH0nYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYm94ZXMucmFuayA9PT0gMixcbiAgICAgICgpID0+IGBib3hlcyBtdXN0IGJlIGEgMkQgdGVuc29yLCBidXQgd2FzIG9mIHJhbmsgJyR7Ym94ZXMucmFua30nYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYm94ZXMuc2hhcGVbMV0gPT09IDQsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBib3hlcyBtdXN0IGhhdmUgNCBjb2x1bW5zLCBidXQgMm5kIGRpbWVuc2lvbiB3YXMgJHtib3hlcy5zaGFwZVsxXX1gKTtcbiAgdXRpbC5hc3NlcnQoc2NvcmVzLnJhbmsgPT09IDEsICgpID0+ICdzY29yZXMgbXVzdCBiZSBhIDFEIHRlbnNvcicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHNjb3Jlcy5zaGFwZVswXSA9PT0gbnVtQm94ZXMsXG4gICAgICAoKSA9PiBgc2NvcmVzIGhhcyBpbmNvbXBhdGlibGUgc2hhcGUgd2l0aCBib3hlcy4gRXhwZWN0ZWQgJHtudW1Cb3hlc30sIGAgK1xuICAgICAgICAgIGBidXQgd2FzICR7c2NvcmVzLnNoYXBlWzBdfWApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIDAgPD0gc29mdE5tc1NpZ21hICYmIHNvZnRObXNTaWdtYSA8PSAxLFxuICAgICAgKCkgPT4gYHNvZnRObXNTaWdtYSBtdXN0IGJlIGluIFswLCAxXSwgYnV0IHdhcyAnJHtzb2Z0Tm1zU2lnbWF9J2ApO1xuICByZXR1cm4ge21heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsIHNvZnRObXNTaWdtYX07XG59XG5cbmV4cG9ydCB7bm9uTWF4U3VwcFNhbml0eUNoZWNrfTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { NonMaxSuppressionV3 } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { op } from '../operation';\n/**\n * Performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @return A 1D tensor with the selected box indices.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction nonMaxSuppression_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppression', 'float32');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppression', 'float32');\n const inputs = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold);\n maxOutputSize = inputs.maxOutputSize;\n iouThreshold = inputs.iouThreshold;\n scoreThreshold = inputs.scoreThreshold;\n const attrs = { maxOutputSize, iouThreshold, scoreThreshold };\n return ENGINE.runKernel(NonMaxSuppressionV3, { boxes: $boxes, scores: $scores }, attrs);\n}\nexport const nonMaxSuppression = /* @__PURE__ */ op({ nonMaxSuppression_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWdlL25vbl9tYXhfc3VwcHJlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixLQUEwQixFQUFFLE1BQTJCLEVBQ3ZELGFBQXFCLEVBQUUsWUFBWSxHQUFHLEdBQUcsRUFDekMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUI7SUFDM0MsTUFBTSxNQUFNLEdBQ1IsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEUsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNuQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUV2QyxNQUFNLEtBQUssR0FBRyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFDLENBQUM7SUFDNUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixtQkFBbUIsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7Tm9uTWF4U3VwcHJlc3Npb25WM30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7bm9uTWF4U3VwcFNhbml0eUNoZWNrfSBmcm9tICcuLi9ub25tYXhfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFBlcmZvcm1zIG5vbiBtYXhpbXVtIHN1cHByZXNzaW9uIG9mIGJvdW5kaW5nIGJveGVzIGJhc2VkIG9uXG4gKiBpb3UgKGludGVyc2VjdGlvbiBvdmVyIHVuaW9uKS5cbiAqXG4gKiBAcGFyYW0gYm94ZXMgYSAyZCB0ZW5zb3Igb2Ygc2hhcGUgYFtudW1Cb3hlcywgNF1gLiBFYWNoIGVudHJ5IGlzXG4gKiAgICAgYFt5MSwgeDEsIHkyLCB4Ml1gLCB3aGVyZSBgKHkxLCB4MSlgIGFuZCBgKHkyLCB4MilgIGFyZSB0aGUgY29ybmVycyBvZlxuICogICAgIHRoZSBib3VuZGluZyBib3guXG4gKiBAcGFyYW0gc2NvcmVzIGEgMWQgdGVuc29yIHByb3ZpZGluZyB0aGUgYm94IHNjb3JlcyBvZiBzaGFwZSBgW251bUJveGVzXWAuXG4gKiBAcGFyYW0gbWF4T3V0cHV0U2l6ZSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgdG8gYmUgc2VsZWN0ZWQuXG4gKiBAcGFyYW0gaW91VGhyZXNob2xkIEEgZmxvYXQgcmVwcmVzZW50aW5nIHRoZSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZXRoZXJcbiAqICAgICBib3hlcyBvdmVybGFwIHRvbyBtdWNoIHdpdGggcmVzcGVjdCB0byBJT1UuIE11c3QgYmUgYmV0d2VlbiBbMCwgMV0uXG4gKiAgICAgRGVmYXVsdHMgdG8gMC41ICg1MCUgYm94IG92ZXJsYXApLlxuICogQHBhcmFtIHNjb3JlVGhyZXNob2xkIEEgdGhyZXNob2xkIGZvciBkZWNpZGluZyB3aGVuIHRvIHJlbW92ZSBib3hlcyBiYXNlZFxuICogICAgIG9uIHNjb3JlLiBEZWZhdWx0cyB0byAtaW5mLCB3aGljaCBtZWFucyBhbnkgc2NvcmUgaXMgYWNjZXB0ZWQuXG4gKiBAcmV0dXJuIEEgMUQgdGVuc29yIHdpdGggdGhlIHNlbGVjdGVkIGJveCBpbmRpY2VzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ31cbiAqL1xuZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25fKFxuICAgIGJveGVzOiBUZW5zb3IyRHxUZW5zb3JMaWtlLCBzY29yZXM6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLCBpb3VUaHJlc2hvbGQgPSAwLjUsXG4gICAgc2NvcmVUaHJlc2hvbGQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpOiBUZW5zb3IxRCB7XG4gIGNvbnN0ICRib3hlcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbicsICdmbG9hdDMyJyk7XG4gIGNvbnN0ICRzY29yZXMgPVxuICAgICAgY29udmVydFRvVGVuc29yKHNjb3JlcywgJ3Njb3JlcycsICdub25NYXhTdXBwcmVzc2lvbicsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzID0gbm9uTWF4U3VwcFNhbml0eUNoZWNrKFxuICAgICAgJGJveGVzLCAkc2NvcmVzLCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkKTtcbiAgbWF4T3V0cHV0U2l6ZSA9IGlucHV0cy5tYXhPdXRwdXRTaXplO1xuICBpb3VUaHJlc2hvbGQgPSBpbnB1dHMuaW91VGhyZXNob2xkO1xuICBzY29yZVRocmVzaG9sZCA9IGlucHV0cy5zY29yZVRocmVzaG9sZDtcblxuICBjb25zdCBhdHRycyA9IHttYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBOb25NYXhTdXBwcmVzc2lvblYzLCB7Ym94ZXM6ICRib3hlcywgc2NvcmVzOiAkc2NvcmVzfSwgYXR0cnMpO1xufVxuXG5leHBvcnQgY29uc3Qgbm9uTWF4U3VwcHJlc3Npb24gPSAvKiBAX19QVVJFX18gKi8gb3Aoe25vbk1heFN1cHByZXNzaW9uX30pO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Inserts a value into a sorted array. This method allows duplicate, meaning it\n * allows inserting duplicate value, in which case, the element will be inserted\n * at the lowest index of the value.\n * @param arr The array to modify.\n * @param element The element to insert.\n * @param comparator Optional. If no comparator is specified, elements are\n * compared using array_util.defaultComparator, which is suitable for Strings\n * and Numbers in ascending arrays. If the array contains multiple instances of\n * the target value, the left-most instance will be returned. To provide a\n * comparator, it should take 2 arguments to compare and return a negative,\n * zero, or a positive number.\n */\nexport function binaryInsert(arr, element, comparator) {\n const index = binarySearch(arr, element, comparator);\n const insertionPoint = index < 0 ? -(index + 1) : index;\n arr.splice(insertionPoint, 0, element);\n}\n/**\n * Searches the array for the target using binary search, returns the index\n * of the found element, or position to insert if element not found. If no\n * comparator is specified, elements are compared using array_\n * util.defaultComparator, which is suitable for Strings and Numbers in\n * ascending arrays. If the array contains multiple instances of the target\n * value, the left-most instance will be returned.\n * @param arr The array to be searched in.\n * @param target The target to be searched for.\n * @param comparator Should take 2 arguments to compare and return a negative,\n * zero, or a positive number.\n * @return Lowest index of the target value if found, otherwise the insertion\n * point where the target should be inserted, in the form of\n * (-insertionPoint - 1).\n */\nexport function binarySearch(arr, target, comparator) {\n return binarySearch_(arr, target, comparator || defaultComparator);\n}\n/**\n * Compares its two arguments for order.\n * @param a The first element to be compared.\n * @param b The second element to be compared.\n * @return A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nfunction defaultComparator(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\nfunction binarySearch_(arr, target, comparator) {\n let left = 0;\n let right = arr.length;\n let middle = 0;\n let found = false;\n while (left < right) {\n middle = left + ((right - left) >>> 1);\n const compareResult = comparator(target, arr[middle]);\n if (compareResult > 0) {\n left = middle + 1;\n }\n else {\n right = middle;\n // If compareResult is 0, the value is found. We record it is found,\n // and then keep looking because there may be duplicate.\n found = !compareResult;\n }\n }\n return found ? left : -left - 1;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9iYWNrZW5kcy9ub25fbWF4X3N1cHByZXNzaW9uX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDeEIsR0FBUSxFQUFFLE9BQVUsRUFBRSxVQUFtQztJQUMzRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDeEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQ3hCLEdBQVEsRUFBRSxNQUFTLEVBQUUsVUFBbUM7SUFDMUQsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLElBQUksaUJBQWlCLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBSSxDQUFJLEVBQUUsQ0FBSTtJQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ2xCLEdBQVEsRUFBRSxNQUFTLEVBQUUsVUFBa0M7SUFDekQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN2QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEIsT0FBTyxJQUFJLEdBQUcsS0FBSyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNuQjthQUFNO1lBQ0wsS0FBSyxHQUFHLE1BQU0sQ0FBQztZQUNmLG9FQUFvRTtZQUNwRSx3REFBd0Q7WUFDeEQsS0FBSyxHQUFHLENBQUMsYUFBYSxDQUFDO1NBQ3hCO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBJbnNlcnRzIGEgdmFsdWUgaW50byBhIHNvcnRlZCBhcnJheS4gVGhpcyBtZXRob2QgYWxsb3dzIGR1cGxpY2F0ZSwgbWVhbmluZyBpdFxuICogYWxsb3dzIGluc2VydGluZyBkdXBsaWNhdGUgdmFsdWUsIGluIHdoaWNoIGNhc2UsIHRoZSBlbGVtZW50IHdpbGwgYmUgaW5zZXJ0ZWRcbiAqIGF0IHRoZSBsb3dlc3QgaW5kZXggb2YgdGhlIHZhbHVlLlxuICogQHBhcmFtIGFyciBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gaW5zZXJ0LlxuICogQHBhcmFtIGNvbXBhcmF0b3IgT3B0aW9uYWwuIElmIG5vIGNvbXBhcmF0b3IgaXMgc3BlY2lmaWVkLCBlbGVtZW50cyBhcmVcbiAqIGNvbXBhcmVkIHVzaW5nIGFycmF5X3V0aWwuZGVmYXVsdENvbXBhcmF0b3IsIHdoaWNoIGlzIHN1aXRhYmxlIGZvciBTdHJpbmdzXG4gKiBhbmQgTnVtYmVycyBpbiBhc2NlbmRpbmcgYXJyYXlzLiBJZiB0aGUgYXJyYXkgY29udGFpbnMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mXG4gKiB0aGUgdGFyZ2V0IHZhbHVlLCB0aGUgbGVmdC1tb3N0IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQuIFRvIHByb3ZpZGUgYVxuICogY29tcGFyYXRvciwgaXQgc2hvdWxkIHRha2UgMiBhcmd1bWVudHMgdG8gY29tcGFyZSBhbmQgcmV0dXJuIGEgbmVnYXRpdmUsXG4gKiB6ZXJvLCBvciBhIHBvc2l0aXZlIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmFyeUluc2VydDxUPihcbiAgICBhcnI6IFRbXSwgZWxlbWVudDogVCwgY29tcGFyYXRvcj86IChhOiBULCBiOiBUKSA9PiBudW1iZXIpIHtcbiAgY29uc3QgaW5kZXggPSBiaW5hcnlTZWFyY2goYXJyLCBlbGVtZW50LCBjb21wYXJhdG9yKTtcbiAgY29uc3QgaW5zZXJ0aW9uUG9pbnQgPSBpbmRleCA8IDAgPyAtKGluZGV4ICsgMSkgOiBpbmRleDtcbiAgYXJyLnNwbGljZShpbnNlcnRpb25Qb2ludCwgMCwgZWxlbWVudCk7XG59XG5cbi8qKlxuICogU2VhcmNoZXMgdGhlIGFycmF5IGZvciB0aGUgdGFyZ2V0IHVzaW5nIGJpbmFyeSBzZWFyY2gsIHJldHVybnMgdGhlIGluZGV4XG4gKiBvZiB0aGUgZm91bmQgZWxlbWVudCwgb3IgcG9zaXRpb24gdG8gaW5zZXJ0IGlmIGVsZW1lbnQgbm90IGZvdW5kLiBJZiBub1xuICogY29tcGFyYXRvciBpcyBzcGVjaWZpZWQsIGVsZW1lbnRzIGFyZSBjb21wYXJlZCB1c2luZyBhcnJheV9cbiAqIHV0aWwuZGVmYXVsdENvbXBhcmF0b3IsIHdoaWNoIGlzIHN1aXRhYmxlIGZvciBTdHJpbmdzIGFuZCBOdW1iZXJzIGluXG4gKiBhc2NlbmRpbmcgYXJyYXlzLiBJZiB0aGUgYXJyYXkgY29udGFpbnMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSB0YXJnZXRcbiAqIHZhbHVlLCB0aGUgbGVmdC1tb3N0IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBAcGFyYW0gYXJyIFRoZSBhcnJheSB0byBiZSBzZWFyY2hlZCBpbi5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB0byBiZSBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gY29tcGFyYXRvciBTaG91bGQgdGFrZSAyIGFyZ3VtZW50cyB0byBjb21wYXJlIGFuZCByZXR1cm4gYSBuZWdhdGl2ZSxcbiAqICAgIHplcm8sIG9yIGEgcG9zaXRpdmUgbnVtYmVyLlxuICogQHJldHVybiBMb3dlc3QgaW5kZXggb2YgdGhlIHRhcmdldCB2YWx1ZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIHRoZSBpbnNlcnRpb25cbiAqICAgIHBvaW50IHdoZXJlIHRoZSB0YXJnZXQgc2hvdWxkIGJlIGluc2VydGVkLCBpbiB0aGUgZm9ybSBvZlxuICogICAgKC1pbnNlcnRpb25Qb2ludCAtIDEpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluYXJ5U2VhcmNoPFQ+KFxuICAgIGFycjogVFtdLCB0YXJnZXQ6IFQsIGNvbXBhcmF0b3I/OiAoYTogVCwgYjogVCkgPT4gbnVtYmVyKSB7XG4gIHJldHVybiBiaW5hcnlTZWFyY2hfKGFyciwgdGFyZ2V0LCBjb21wYXJhdG9yIHx8IGRlZmF1bHRDb21wYXJhdG9yKTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBpdHMgdHdvIGFyZ3VtZW50cyBmb3Igb3JkZXIuXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb21wYXJlZC5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgZWxlbWVudCB0byBiZSBjb21wYXJlZC5cbiAqIEByZXR1cm4gQSBuZWdhdGl2ZSBudW1iZXIsIHplcm8sIG9yIGEgcG9zaXRpdmUgbnVtYmVyIGFzIHRoZSBmaXJzdFxuICogICAgIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcjxUPihhOiBULCBiOiBUKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEgPiBiID8gMSA6IGEgPCBiID8gLTEgOiAwO1xufVxuXG5mdW5jdGlvbiBiaW5hcnlTZWFyY2hfPFQ+KFxuICAgIGFycjogVFtdLCB0YXJnZXQ6IFQsIGNvbXBhcmF0b3I6IChhOiBULCBiOiBUKSA9PiBudW1iZXIpIHtcbiAgbGV0IGxlZnQgPSAwO1xuICBsZXQgcmlnaHQgPSBhcnIubGVuZ3RoO1xuICBsZXQgbWlkZGxlID0gMDtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcbiAgICBtaWRkbGUgPSBsZWZ0ICsgKChyaWdodCAtIGxlZnQpID4+PiAxKTtcbiAgICBjb25zdCBjb21wYXJlUmVzdWx0ID0gY29tcGFyYXRvcih0YXJnZXQsIGFyclttaWRkbGVdKTtcbiAgICBpZiAoY29tcGFyZVJlc3VsdCA+IDApIHtcbiAgICAgIGxlZnQgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByaWdodCA9IG1pZGRsZTtcbiAgICAgIC8vIElmIGNvbXBhcmVSZXN1bHQgaXMgMCwgdGhlIHZhbHVlIGlzIGZvdW5kLiBXZSByZWNvcmQgaXQgaXMgZm91bmQsXG4gICAgICAvLyBhbmQgdGhlbiBrZWVwIGxvb2tpbmcgYmVjYXVzZSB0aGVyZSBtYXkgYmUgZHVwbGljYXRlLlxuICAgICAgZm91bmQgPSAhY29tcGFyZVJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm91bmQgPyBsZWZ0IDogLWxlZnQgLSAxO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { binaryInsert } from './non_max_suppression_util';\nexport function nonMaxSuppressionV3Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) {\n return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, 0 /* softNmsSigma */);\n}\nexport function nonMaxSuppressionV4Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize) {\n return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, 0 /* softNmsSigma */, false /* returnScoresTensor */, padToMaxOutputSize /* padToMaxOutputSize */, true\n /* returnValidOutputs */ );\n}\nexport function nonMaxSuppressionV5Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma) {\n return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, true /* returnScoresTensor */);\n}\nfunction nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, returnScoresTensor = false, padToMaxOutputSize = false, returnValidOutputs = false) {\n // The list is sorted in ascending order, so that we can always pop the\n // candidate with the largest score in O(1) time.\n const candidates = [];\n for (let i = 0; i < scores.length; i++) {\n if (scores[i] > scoreThreshold) {\n candidates.push({ score: scores[i], boxIndex: i, suppressBeginIndex: 0 });\n }\n }\n candidates.sort(ascendingComparator);\n // If softNmsSigma is 0, the outcome of this algorithm is exactly same as\n // before.\n const scale = softNmsSigma > 0 ? (-0.5 / softNmsSigma) : 0.0;\n const selectedIndices = [];\n const selectedScores = [];\n while (selectedIndices.length < maxOutputSize && candidates.length > 0) {\n const candidate = candidates.pop();\n const { score: originalScore, boxIndex, suppressBeginIndex } = candidate;\n if (originalScore < scoreThreshold) {\n break;\n }\n // Overlapping boxes are likely to have similar scores, therefore we\n // iterate through the previously selected boxes backwards in order to\n // see if candidate's score should be suppressed. We use\n // suppressBeginIndex to track and ensure a candidate can be suppressed\n // by a selected box no more than once. Also, if the overlap exceeds\n // iouThreshold, we simply ignore the candidate.\n let ignoreCandidate = false;\n for (let j = selectedIndices.length - 1; j >= suppressBeginIndex; --j) {\n const iou = intersectionOverUnion(boxes, boxIndex, selectedIndices[j]);\n if (iou >= iouThreshold) {\n ignoreCandidate = true;\n break;\n }\n candidate.score =\n candidate.score * suppressWeight(iouThreshold, scale, iou);\n if (candidate.score <= scoreThreshold) {\n break;\n }\n }\n // At this point, if `candidate.score` has not dropped below\n // `scoreThreshold`, then we know that we went through all of the\n // previous selections and can safely update `suppressBeginIndex` to the\n // end of the selected array. Then we can re-insert the candidate with\n // the updated score and suppressBeginIndex back in the candidate list.\n // If on the other hand, `candidate.score` has dropped below the score\n // threshold, we will not add it back to the candidates list.\n candidate.suppressBeginIndex = selectedIndices.length;\n if (!ignoreCandidate) {\n // Candidate has passed all the tests, and is not suppressed, so\n // select the candidate.\n if (candidate.score === originalScore) {\n selectedIndices.push(boxIndex);\n selectedScores.push(candidate.score);\n }\n else if (candidate.score > scoreThreshold) {\n // Candidate's score is suppressed but is still high enough to be\n // considered, so add back to the candidates list.\n binaryInsert(candidates, candidate, ascendingComparator);\n }\n }\n }\n // NonMaxSuppressionV4 feature: padding output to maxOutputSize.\n const validOutputs = selectedIndices.length;\n const elemsToPad = maxOutputSize - validOutputs;\n if (padToMaxOutputSize && elemsToPad > 0) {\n selectedIndices.push(...new Array(elemsToPad).fill(0));\n selectedScores.push(...new Array(elemsToPad).fill(0.0));\n }\n const result = { selectedIndices };\n if (returnScoresTensor) {\n result['selectedScores'] = selectedScores;\n }\n if (returnValidOutputs) {\n result['validOutputs'] = validOutputs;\n }\n return result;\n}\nfunction intersectionOverUnion(boxes, i, j) {\n const iCoord = boxes.subarray(i * 4, i * 4 + 4);\n const jCoord = boxes.subarray(j * 4, j * 4 + 4);\n const yminI = Math.min(iCoord[0], iCoord[2]);\n const xminI = Math.min(iCoord[1], iCoord[3]);\n const ymaxI = Math.max(iCoord[0], iCoord[2]);\n const xmaxI = Math.max(iCoord[1], iCoord[3]);\n const yminJ = Math.min(jCoord[0], jCoord[2]);\n const xminJ = Math.min(jCoord[1], jCoord[3]);\n const ymaxJ = Math.max(jCoord[0], jCoord[2]);\n const xmaxJ = Math.max(jCoord[1], jCoord[3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) *\n Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n// A Gaussian penalty function, this method always returns values in [0, 1].\n// The weight is a function of similarity, the more overlap two boxes are, the\n// smaller the weight is, meaning highly overlapping boxe will be significantly\n// penalized. On the other hand, a non-overlapping box will not be penalized.\nfunction suppressWeight(iouThreshold, scale, iou) {\n const weight = Math.exp(scale * iou * iou);\n return iou <= iouThreshold ? weight : 0.0;\n}\nfunction ascendingComparator(c1, c2) {\n // For objects with same scores, we make the object with the larger index go\n // first. In an array that pops from the end, this means that the object with\n // the smaller index will be popped first. This ensures the same output as\n // the TensorFlow python version.\n return (c1.score - c2.score) ||\n ((c1.score === c2.score) && (c2.boxIndex - c1.boxIndex));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9iYWNrZW5kcy9ub25fbWF4X3N1cHByZXNzaW9uX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBaUJ4RCxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLEtBQWlCLEVBQUUsTUFBa0IsRUFBRSxhQUFxQixFQUM1RCxZQUFvQixFQUFFLGNBQXNCO0lBQzlDLE9BQU8sc0JBQXNCLENBQ3pCLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQzFELENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLEtBQWlCLEVBQUUsTUFBa0IsRUFBRSxhQUFxQixFQUM1RCxZQUFvQixFQUFFLGNBQXNCLEVBQzVDLGtCQUEyQjtJQUM3QixPQUFPLHNCQUFzQixDQUN6QixLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUMxRCxDQUFDLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixFQUNwRCxrQkFBa0IsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJO0lBQ2pELHdCQUF3QixFQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FDbkMsS0FBaUIsRUFBRSxNQUFrQixFQUFFLGFBQXFCLEVBQzVELFlBQW9CLEVBQUUsY0FBc0IsRUFDNUMsWUFBb0I7SUFDdEIsT0FBTyxzQkFBc0IsQ0FDekIsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQ3hFLElBQUksQ0FBQyx3QkFBd0Is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QUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixFQUFFLEdBQUcsQ0FBQztRQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLGdCQUFnQixDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDZFQUE2RTtBQUM3RSxTQUFTLGNBQWMsQ0FBQyxZQUFvQixFQUFFLEtBQWEsRUFBRSxHQUFXO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQyxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzVDLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEVBQWEsRUFBRSxFQUFhO0lBQ3ZELDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLGlDQUFpQztJQUNqQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUeXBlZEFycmF5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2JpbmFyeUluc2VydH0gZnJvbSAnLi9ub25fbWF4X3N1cHByZXNzaW9uX3V0aWwnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBOb25NYXhTdXBwcmVzc2lvbiBrZXJuZWwgc2hhcmVkIGJldHdlZW4gd2ViZ2wgYW5kIGNwdS5cbiAqL1xuaW50ZXJmYWNlIENhbmRpZGF0ZSB7XG4gIHNjb3JlOiBudW1iZXI7XG4gIGJveEluZGV4OiBudW1iZXI7XG4gIHN1cHByZXNzQmVnaW5JbmRleDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTm9uTWF4U3VwcHJlc3Npb25SZXN1bHQge1xuICBzZWxlY3RlZEluZGljZXM6IG51bWJlcltdO1xuICBzZWxlY3RlZFNjb3Jlcz86IG51bWJlcltdO1xuICB2YWxpZE91dHB1dHM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25NYXhTdXBwcmVzc2lvblYzSW1wbChcbiAgICBib3hlczogVHlwZWRBcnJheSwgc2NvcmVzOiBUeXBlZEFycmF5LCBtYXhPdXRwdXRTaXplOiBudW1iZXIsXG4gICAgaW91VGhyZXNob2xkOiBudW1iZXIsIHNjb3JlVGhyZXNob2xkOiBudW1iZXIpOiBOb25NYXhTdXBwcmVzc2lvblJlc3VsdCB7XG4gIHJldHVybiBub25NYXhTdXBwcmVzc2lvbkltcGxfKFxuICAgICAgYm94ZXMsIHNjb3JlcywgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCxcbiAgICAgIDAgLyogc29mdE5tc1NpZ21hICovKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uVjRJbXBsKFxuICAgIGJveGVzOiBUeXBlZEFycmF5LCBzY29yZXM6IFR5cGVkQXJyYXksIG1heE91dHB1dFNpemU6IG51bWJlcixcbiAgICBpb3VUaHJlc2hvbGQ6IG51bWJlciwgc2NvcmVUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBwYWRUb01heE91dHB1dFNpemU6IGJvb2xlYW4pOiBOb25NYXhTdXBwcmVzc2lvblJlc3VsdCB7XG4gIHJldHVybiBub25NYXhTdXBwcmVzc2lvbkltcGxfKFxuICAgICAgYm94ZXMsIHNjb3JlcywgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCxcbiAgICAgIDAgLyogc29mdE5tc1NpZ21hICovLCBmYWxzZSAvKiByZXR1cm5TY29yZXNUZW5zb3IgKi8sXG4gICAgICBwYWRUb01heE91dHB1dFNpemUgLyogcGFkVG9NYXhPdXRwdXRTaXplICovLCB0cnVlXG4gICAgICAvKiByZXR1cm5WYWxpZE91dHB1dHMgKi8pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25WNUltcGwoXG4gICAgYm94ZXM6IFR5cGVkQXJyYXksIHNjb3JlczogVHlwZWRBcnJheSwgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLFxuICAgIGlvdVRocmVzaG9sZDogbnVtYmVyLCBzY29yZVRocmVzaG9sZDogbnVtYmVyLFxuICAgIHNvZnRObXNTaWdtYTogbnVtYmVyKTogTm9uTWF4U3VwcHJlc3Npb25SZXN1bHQge1xuICByZXR1cm4gbm9uTWF4U3VwcHJlc3Npb25JbXBsXyhcbiAgICAgIGJveGVzLCBzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsIHNvZnRObXNTaWdtYSxcbiAgICAgIHRydWUgLyogcmV0dXJuU2NvcmVzVGVuc29yICovKTtcbn1cblxuZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25JbXBsXyhcbiAgICBib3hlczogVHlwZWRBcnJheSwgc2NvcmVzOiBUeXBlZEFycmF5LCBtYXhPdXRwdXRTaXplOiBudW1iZXIsXG4gICAgaW91VGhyZXNob2xkOiBudW1iZXIsIHNjb3JlVGhyZXNob2xkOiBudW1iZXIsIHNvZnRObXNTaWdtYTogbnVtYmVyLFxuICAgIHJldHVyblNjb3Jlc1RlbnNvciA9IGZhbHNlLCBwYWRUb01heE91dHB1dFNpemUgPSBmYWxzZSxcbiAgICByZXR1cm5WYWxpZE91dHB1dHMgPSBmYWxzZSk6IE5vbk1heFN1cHByZXNzaW9uUmVzdWx0IHtcbiAgLy8gVGhlIGxpc3QgaXMgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciwgc28gdGhhdCB3ZSBjYW4gYWx3YXlzIHBvcCB0aGVcbiAgLy8gY2FuZGlkYXRlIHdpdGggdGhlIGxhcmdlc3Qgc2NvcmUgaW4gTygxKSB0aW1lLlxuICBjb25zdCBjYW5kaWRhdGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY29yZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc2NvcmVzW2ldID4gc2NvcmVUaHJlc2hvbGQpIHtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7c2NvcmU6IHNjb3Jlc1tpXSwgYm94SW5kZXg6IGksIHN1cHByZXNzQmVnaW5JbmRleDogMH0pO1xuICAgIH1cbiAgfVxuXG4gIGNhbmRpZGF0ZXMuc29ydChhc2NlbmRpbmdDb21wYXJhdG9yKTtcblxuICAvLyBJZiBzb2Z0Tm1zU2lnbWEgaXMgMCwgdGhlIG91dGNvbWUgb2YgdGhpcyBhbGdvcml0aG0gaXMgZXhhY3RseSBzYW1lIGFzXG4gIC8vIGJlZm9yZS5cbiAgY29uc3Qgc2NhbGUgPSBzb2Z0Tm1zU2lnbWEgPiAwID8gKC0wLjUgLyBzb2Z0Tm1zU2lnbWEpIDogMC4wO1xuXG4gIGNvbnN0IHNlbGVjdGVkSW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRTY29yZXM6IG51bWJlcltdID0gW107XG5cbiAgd2hpbGUgKHNlbGVjdGVkSW5kaWNlcy5sZW5ndGggPCBtYXhPdXRwdXRTaXplICYmIGNhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZXMucG9wKCk7XG4gICAgY29uc3Qge3Njb3JlOiBvcmlnaW5hbFNjb3JlLCBib3hJbmRleCwgc3VwcHJlc3NCZWdpbkluZGV4fSA9IGNhbmRpZGF0ZTtcblxuICAgIGlmIChvcmlnaW5hbFNjb3JlIDwgc2NvcmVUaHJlc2hvbGQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIE92ZXJsYXBwaW5nIGJveGVzIGFyZSBsaWtlbHkgdG8gaGF2ZSBzaW1pbGFyIHNjb3JlcywgdGhlcmVmb3JlIHdlXG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIGJveGVzIGJhY2t3YXJkcyBpbiBvcmRlciB0b1xuICAgIC8vIHNlZSBpZiBjYW5kaWRhdGUncyBzY29yZSBzaG91bGQgYmUgc3VwcHJlc3NlZC4gV2UgdXNlXG4gICAgLy8gc3VwcHJlc3NCZWdpbkluZGV4IHRvIHRyYWNrIGFuZCBlbnN1cmUgYSBjYW5kaWRhdGUgY2FuIGJlIHN1cHByZXNzZWRcbiAgICAvLyBieSBhIHNlbGVjdGVkIGJveCBubyBtb3JlIHRoYW4gb25jZS4gQWxzbywgaWYgdGhlIG92ZXJsYXAgZXhjZWVkc1xuICAgIC8vIGlvdVRocmVzaG9sZCwgd2Ugc2ltcGx5IGlnbm9yZSB0aGUgY2FuZGlkYXRlLlxuICAgIGxldCBpZ25vcmVDYW5kaWRhdGUgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBqID0gc2VsZWN0ZWRJbmRpY2VzLmxlbmd0aCAtIDE7IGogPj0gc3VwcHJlc3NCZWdpbkluZGV4OyAtLWopIHtcbiAgICAgIGNvbnN0IGlvdSA9IGludGVyc2VjdGlvbk92ZXJVbmlvbihib3hlcywgYm94SW5kZXgsIHNlbGVjdGVkSW5kaWNlc1tqXSk7XG5cbiAgICAgIGlmIChpb3UgPj0gaW91VGhyZXNob2xkKSB7XG4gICAgICAgIGlnbm9yZUNhbmRpZGF0ZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYW5kaWRhdGUuc2NvcmUgPVxuICAgICAgICAgIGNhbmRpZGF0ZS5zY29yZSAqIHN1cHByZXNzV2VpZ2h0KGlvdVRocmVzaG9sZCwgc2NhbGUsIGlvdSk7XG5cbiAgICAgIGlmIChjYW5kaWRhdGUuc2NvcmUgPD0gc2NvcmVUaHJlc2hvbGQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgaWYgYGNhbmRpZGF0ZS5zY29yZWAgaGFzIG5vdCBkcm9wcGVkIGJlbG93XG4gICAgLy8gYHNjb3JlVGhyZXNob2xkYCwgdGhlbiB3ZSBrbm93IHRoYXQgd2Ugd2VudCB0aHJvdWdoIGFsbCBvZiB0aGVcbiAgICAvLyBwcmV2aW91cyBzZWxlY3Rpb25zIGFuZCBjYW4gc2FmZWx5IHVwZGF0ZSBgc3VwcHJlc3NCZWdpbkluZGV4YCB0byB0aGVcbiAgICAvLyBlbmQgb2YgdGhlIHNlbGVjdGVkIGFycmF5LiBUaGVuIHdlIGNhbiByZS1pbnNlcnQgdGhlIGNhbmRpZGF0ZSB3aXRoXG4gICAgLy8gdGhlIHVwZGF0ZWQgc2NvcmUgYW5kIHN1cHByZXNzQmVnaW5JbmRleCBiYWNrIGluIHRoZSBjYW5kaWRhdGUgbGlzdC5cbiAgICAvLyBJZiBvbiB0aGUgb3RoZXIgaGFuZCwgYGNhbmRpZGF0ZS5zY29yZWAgaGFzIGRyb3BwZWQgYmVsb3cgdGhlIHNjb3JlXG4gICAgLy8gdGhyZXNob2xkLCB3ZSB3aWxsIG5vdCBhZGQgaXQgYmFjayB0byB0aGUgY2FuZGlkYXRlcyBsaXN0LlxuICAgIGNhbmRpZGF0ZS5zdXBwcmVzc0JlZ2luSW5kZXggPSBzZWxlY3RlZEluZGljZXMubGVuZ3RoO1xuXG4gICAgaWYgKCFpZ25vcmVDYW5kaWRhdGUpIHtcbiAgICAgIC8vIENhbmRpZGF0ZSBoYXMgcGFzc2VkIGFsbCB0aGUgdGVzdHMsIGFuZCBpcyBub3Qgc3VwcHJlc3NlZCwgc29cbiAgICAgIC8vIHNlbGVjdCB0aGUgY2FuZGlkYXRlLlxuICAgICAgaWYgKGNhbmRpZGF0ZS5zY29yZSA9PT0gb3JpZ2luYWxTY29yZSkge1xuICAgICAgICBzZWxlY3RlZEluZGljZXMucHVzaChib3hJbmRleCk7XG4gICAgICAgIHNlbGVjdGVkU2NvcmVzLnB1c2goY2FuZGlkYXRlLnNjb3JlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FuZGlkYXRlLnNjb3JlID4gc2NvcmVUaHJlc2hvbGQpIHtcbiAgICAgICAgLy8gQ2FuZGlkYXRlJ3Mgc2NvcmUgaXMgc3VwcHJlc3NlZCBidXQgaXMgc3RpbGwgaGlnaCBlbm91Z2ggdG8gYmVcbiAgICAgICAgLy8gY29uc2lkZXJlZCwgc28gYWRkIGJhY2sgdG8gdGhlIGNhbmRpZGF0ZXMgbGlzdC5cbiAgICAgICAgYmluYXJ5SW5zZXJ0KGNhbmRpZGF0ZXMsIGNhbmRpZGF0ZSwgYXNjZW5kaW5nQ29tcGFyYXRvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTm9uTWF4U3VwcHJlc3Npb25WNCBmZWF0dXJlOiBwYWRkaW5nIG91dHB1dCB0byBtYXhPdXRwdXRTaXplLlxuICBjb25zdCB2YWxpZE91dHB1dHMgPSBzZWxlY3RlZEluZGljZXMubGVuZ3RoO1xuICBjb25zdCBlbGVtc1RvUGFkID0gbWF4T3V0cHV0U2l6ZSAtIHZhbGlkT3V0cHV0cztcblxuICBpZiAocGFkVG9NYXhPdXRwdXRTaXplICYmIGVsZW1zVG9QYWQgPiAwKSB7XG4gICAgc2VsZWN0ZWRJbmRpY2VzLnB1c2goLi4ubmV3IEFycmF5KGVsZW1zVG9QYWQpLmZpbGwoMCkpO1xuICAgIHNlbGVjdGVkU2NvcmVzLnB1c2goLi4ubmV3IEFycmF5KGVsZW1zVG9QYWQpLmZpbGwoMC4wKSk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IE5vbk1heFN1cHByZXNzaW9uUmVzdWx0ID0ge3NlbGVjdGVkSW5kaWNlc307XG5cbiAgaWYgKHJldHVyblNjb3Jlc1RlbnNvcikge1xuICAgIHJlc3VsdFsnc2VsZWN0ZWRTY29yZXMnXSA9IHNlbGVjdGVkU2NvcmVzO1xuICB9XG5cbiAgaWYgKHJldHVyblZhbGlkT3V0cHV0cykge1xuICAgIHJlc3VsdFsndmFsaWRPdXRwdXRzJ10gPSB2YWxpZE91dHB1dHM7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3Rpb25PdmVyVW5pb24oYm94ZXM6IFR5cGVkQXJyYXksIGk6IG51bWJlciwgajogbnVtYmVyKSB7XG4gIGNvbnN0IGlDb29yZCA9IGJveGVzLnN1YmFycmF5KGkgKiA0LCBpICogNCArIDQpO1xuICBjb25zdCBqQ29vcmQgPSBib3hlcy5zdWJhcnJheShqICogNCwgaiAqIDQgKyA0KTtcbiAgY29uc3QgeW1pbkkgPSBNYXRoLm1pbihpQ29vcmRbMF0sIGlDb29yZFsyXSk7XG4gIGNvbnN0IHhtaW5JID0gTWF0aC5taW4oaUNvb3JkWzFdLCBpQ29vcmRbM10pO1xuICBjb25zdCB5bWF4SSA9IE1hdGgubWF4KGlDb29yZFswXSwgaUNvb3JkWzJdKTtcbiAgY29uc3QgeG1heEkgPSBNYXRoLm1heChpQ29vcmRbMV0sIGlDb29yZFszXSk7XG4gIGNvbnN0IHltaW5KID0gTWF0aC5taW4oakNvb3JkWzBdLCBqQ29vcmRbMl0pO1xuICBjb25zdCB4bWluSiA9IE1hdGgubWluKGpDb29yZFsxXSwgakNvb3JkWzNdKTtcbiAgY29uc3QgeW1heEogPSBNYXRoLm1heChqQ29vcmRbMF0sIGpDb29yZFsyXSk7XG4gIGNvbnN0IHhtYXhKID0gTWF0aC5tYXgoakNvb3JkWzFdLCBqQ29vcmRbM10pO1xuICBjb25zdCBhcmVhSSA9ICh5bWF4SSAtIHltaW5JKSAqICh4bWF4SSAtIHhtaW5JKTtcbiAgY29uc3QgYXJlYUogPSAoeW1heEogLSB5bWluSikgKiAoeG1heEogLSB4bWluSik7XG4gIGlmIChhcmVhSSA8PSAwIHx8IGFyZWFKIDw9IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IGludGVyc2VjdGlvblltaW4gPSBNYXRoLm1heCh5bWluSSwgeW1pbkopO1xuICBjb25zdCBpbnRlcnNlY3Rpb25YbWluID0gTWF0aC5tYXgoeG1pbkksIHhtaW5KKTtcbiAgY29uc3QgaW50ZXJzZWN0aW9uWW1heCA9IE1hdGgubWluKHltYXhJLCB5bWF4Sik7XG4gIGNvbnN0IGludGVyc2VjdGlvblhtYXggPSBNYXRoLm1pbih4bWF4SSwgeG1heEopO1xuICBjb25zdCBpbnRlcnNlY3Rpb25BcmVhID0gTWF0aC5tYXgoaW50ZXJzZWN0aW9uWW1heCAtIGludGVyc2VjdGlvblltaW4sIDAuMCkgKlxuICAgICAgTWF0aC5tYXgoaW50ZXJzZWN0aW9uWG1heCAtIGludGVyc2VjdGlvblhtaW4sIDAuMCk7XG4gIHJldHVybiBpbnRlcnNlY3Rpb25BcmVhIC8gKGFyZWFJICsgYXJlYUogLSBpbnRlcnNlY3Rpb25BcmVhKTtcbn1cblxuLy8gQSBHYXVzc2lhbiBwZW5hbHR5IGZ1bmN0aW9uLCB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyB2YWx1ZXMgaW4gWzAsIDFdLlxuLy8gVGhlIHdlaWdodCBpcyBhIGZ1bmN0aW9uIG9mIHNpbWlsYXJpdHksIHRoZSBtb3JlIG92ZXJsYXAgdHdvIGJveGVzIGFyZSwgdGhlXG4vLyBzbWFsbGVyIHRoZSB3ZWlnaHQgaXMsIG1lYW5pbmcgaGlnaGx5IG92ZXJsYXBwaW5nIGJveGUgd2lsbCBiZSBzaWduaWZpY2FudGx5XG4vLyBwZW5hbGl6ZWQuIE9uIHRoZSBvdGhlciBoYW5kLCBhIG5vbi1vdmVybGFwcGluZyBib3ggd2lsbCBub3QgYmUgcGVuYWxpemVkLlxuZnVuY3Rpb24gc3VwcHJlc3NXZWlnaHQoaW91VGhyZXNob2xkOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIGlvdTogbnVtYmVyKSB7XG4gIGNvbnN0IHdlaWdodCA9IE1hdGguZXhwKHNjYWxlICogaW91ICogaW91KTtcbiAgcmV0dXJuIGlvdSA8PSBpb3VUaHJlc2hvbGQgPyB3ZWlnaHQgOiAwLjA7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZ0NvbXBhcmF0b3IoYzE6IENhbmRpZGF0ZSwgYzI6IENhbmRpZGF0ZSkge1xuICAvLyBGb3Igb2JqZWN0cyB3aXRoIHNhbWUgc2NvcmVzLCB3ZSBtYWtlIHRoZSBvYmplY3Qgd2l0aCB0aGUgbGFyZ2VyIGluZGV4IGdvXG4gIC8vIGZpcnN0LiBJbiBhbiBhcnJheSB0aGF0IHBvcHMgZnJvbSB0aGUgZW5kLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCB3aXRoXG4gIC8vIHRoZSBzbWFsbGVyIGluZGV4IHdpbGwgYmUgcG9wcGVkIGZpcnN0LiBUaGlzIGVuc3VyZXMgdGhlIHNhbWUgb3V0cHV0IGFzXG4gIC8vIHRoZSBUZW5zb3JGbG93IHB5dGhvbiB2ZXJzaW9uLlxuICByZXR1cm4gKGMxLnNjb3JlIC0gYzIuc2NvcmUpIHx8XG4gICAgICAoKGMxLnNjb3JlID09PSBjMi5zY29yZSkgJiYgKGMyLmJveEluZGV4IC0gYzEuYm94SW5kZXgpKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { nonMaxSuppressionV3Impl } from '../../backends/non_max_suppression_impl';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { tensor1d } from '../tensor1d';\n/**\n * Performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * This is the async version of `nonMaxSuppression`\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @return A 1D tensor with the selected box indices.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nasync function nonMaxSuppressionAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppressionAsync');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppressionAsync');\n const inputs = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold);\n maxOutputSize = inputs.maxOutputSize;\n iouThreshold = inputs.iouThreshold;\n scoreThreshold = inputs.scoreThreshold;\n const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]);\n const boxesVals = boxesAndScores[0];\n const scoresVals = boxesAndScores[1];\n // We call a cpu based impl directly with the typedarray data here rather\n // than a kernel because all kernels are synchronous (and thus cannot await\n // .data()).\n const { selectedIndices } = nonMaxSuppressionV3Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold);\n if ($boxes !== boxes) {\n $boxes.dispose();\n }\n if ($scores !== scores) {\n $scores.dispose();\n }\n return tensor1d(selectedIndices, 'int32');\n}\nexport const nonMaxSuppressionAsync = nonMaxSuppressionAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl9hc3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWdlL25vbl9tYXhfc3VwcHJlc3Npb25fYXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFaEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQ2xDLEtBQTBCLEVBQUUsTUFBMkIsRUFDdkQsYUFBcUIsRUFBRSxZQUFZLEdBQUcsR0FBRyxFQUN6QyxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQjtJQUMzQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFFNUUsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNuQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUV2QyxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJDLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsWUFBWTtJQUNaLE1BQU0sRUFBQyxlQUFlLEVBQUMsR0FBRyx1QkFBdUIsQ0FDN0MsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtRQUNwQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbEI7SUFDRCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDdEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0lBRUQsT0FBTyxRQUFRLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblYzSW1wbH0gZnJvbSAnLi4vLi4vYmFja2VuZHMvbm9uX21heF9zdXBwcmVzc2lvbl9pbXBsJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7bm9uTWF4U3VwcFNhbml0eUNoZWNrfSBmcm9tICcuLi9ub25tYXhfdXRpbCc7XG5pbXBvcnQge3RlbnNvcjFkfSBmcm9tICcuLi90ZW5zb3IxZCc7XG5cbi8qKlxuICogUGVyZm9ybXMgbm9uIG1heGltdW0gc3VwcHJlc3Npb24gb2YgYm91bmRpbmcgYm94ZXMgYmFzZWQgb25cbiAqIGlvdSAoaW50ZXJzZWN0aW9uIG92ZXIgdW5pb24pLlxuICpcbiAqIFRoaXMgaXMgdGhlIGFzeW5jIHZlcnNpb24gb2YgYG5vbk1heFN1cHByZXNzaW9uYFxuICpcbiAqIEBwYXJhbSBib3hlcyBhIDJkIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzLCA0XWAuIEVhY2ggZW50cnkgaXNcbiAqICAgICBgW3kxLCB4MSwgeTIsIHgyXWAsIHdoZXJlIGAoeTEsIHgxKWAgYW5kIGAoeTIsIHgyKWAgYXJlIHRoZSBjb3JuZXJzIG9mXG4gKiAgICAgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSBzY29yZXMgYSAxZCB0ZW5zb3IgcHJvdmlkaW5nIHRoZSBib3ggc2NvcmVzIG9mIHNoYXBlIGBbbnVtQm94ZXNdYC5cbiAqIEBwYXJhbSBtYXhPdXRwdXRTaXplIFRoZSBtYXhpbXVtIG51bWJlciBvZiBib3hlcyB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSBpb3VUaHJlc2hvbGQgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hldGhlclxuICogICAgIGJveGVzIG92ZXJsYXAgdG9vIG11Y2ggd2l0aCByZXNwZWN0IHRvIElPVS4gTXVzdCBiZSBiZXR3ZWVuIFswLCAxXS5cbiAqICAgICBEZWZhdWx0cyB0byAwLjUgKDUwJSBib3ggb3ZlcmxhcCkuXG4gKiBAcGFyYW0gc2NvcmVUaHJlc2hvbGQgQSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZW4gdG8gcmVtb3ZlIGJveGVzIGJhc2VkXG4gKiAgICAgb24gc2NvcmUuIERlZmF1bHRzIHRvIC1pbmYsIHdoaWNoIG1lYW5zIGFueSBzY29yZSBpcyBhY2NlcHRlZC5cbiAqIEByZXR1cm4gQSAxRCB0ZW5zb3Igd2l0aCB0aGUgc2VsZWN0ZWQgYm94IGluZGljZXMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5hc3luYyBmdW5jdGlvbiBub25NYXhTdXBwcmVzc2lvbkFzeW5jXyhcbiAgICBib3hlczogVGVuc29yMkR8VGVuc29yTGlrZSwgc2NvcmVzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIG1heE91dHB1dFNpemU6IG51bWJlciwgaW91VGhyZXNob2xkID0gMC41LFxuICAgIHNjb3JlVGhyZXNob2xkID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTogUHJvbWlzZTxUZW5zb3IxRD4ge1xuICBjb25zdCAkYm94ZXMgPSBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbkFzeW5jJyk7XG4gIGNvbnN0ICRzY29yZXMgPSBjb252ZXJ0VG9UZW5zb3Ioc2NvcmVzLCAnc2NvcmVzJywgJ25vbk1heFN1cHByZXNzaW9uQXN5bmMnKTtcblxuICBjb25zdCBpbnB1dHMgPSBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgICAkYm94ZXMsICRzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQpO1xuICBtYXhPdXRwdXRTaXplID0gaW5wdXRzLm1heE91dHB1dFNpemU7XG4gIGlvdVRocmVzaG9sZCA9IGlucHV0cy5pb3VUaHJlc2hvbGQ7XG4gIHNjb3JlVGhyZXNob2xkID0gaW5wdXRzLnNjb3JlVGhyZXNob2xkO1xuXG4gIGNvbnN0IGJveGVzQW5kU2NvcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoWyRib3hlcy5kYXRhKCksICRzY29yZXMuZGF0YSgpXSk7XG4gIGNvbnN0IGJveGVzVmFscyA9IGJveGVzQW5kU2NvcmVzWzBdO1xuICBjb25zdCBzY29yZXNWYWxzID0gYm94ZXNBbmRTY29yZXNbMV07XG5cbiAgLy8gV2UgY2FsbCBhIGNwdSBiYXNlZCBpbXBsIGRpcmVjdGx5IHdpdGggdGhlIHR5cGVkYXJyYXkgZGF0YSAgaGVyZSByYXRoZXJcbiAgLy8gdGhhbiBhIGtlcm5lbCBiZWNhdXNlIGFsbCBrZXJuZWxzIGFyZSBzeW5jaHJvbm91cyAoYW5kIHRodXMgY2Fubm90IGF3YWl0XG4gIC8vIC5kYXRhKCkpLlxuICBjb25zdCB7c2VsZWN0ZWRJbmRpY2VzfSA9IG5vbk1heFN1cHByZXNzaW9uVjNJbXBsKFxuICAgICAgYm94ZXNWYWxzLCBzY29yZXNWYWxzLCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkKTtcbiAgaWYgKCRib3hlcyAhPT0gYm94ZXMpIHtcbiAgICAkYm94ZXMuZGlzcG9zZSgpO1xuICB9XG4gIGlmICgkc2NvcmVzICE9PSBzY29yZXMpIHtcbiAgICAkc2NvcmVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJldHVybiB0ZW5zb3IxZChzZWxlY3RlZEluZGljZXMsICdpbnQzMicpO1xufVxuXG5leHBvcnQgY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25Bc3luYyA9IG5vbk1heFN1cHByZXNzaW9uQXN5bmNfO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { NonMaxSuppressionV5 } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { op } from '../operation';\n/**\n * Performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * This op also supports a Soft-NMS mode (cf.\n * Bodla et al, https://arxiv.org/abs/1704.04503) where boxes reduce the score\n * of other overlapping boxes, therefore favoring different regions of the image\n * with high scores. To enable this Soft-NMS mode, set the `softNmsSigma`\n * parameter to be larger than 0.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @param softNmsSigma A float representing the sigma parameter for Soft NMS.\n * When sigma is 0, it falls back to nonMaxSuppression.\n * @return A map with the following properties:\n * - selectedIndices: A 1D tensor with the selected box indices.\n * - selectedScores: A 1D tensor with the corresponding scores for each\n * selected box.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction nonMaxSuppressionWithScore_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, softNmsSigma = 0.0) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppression');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppression');\n const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n maxOutputSize = params.maxOutputSize;\n iouThreshold = params.iouThreshold;\n scoreThreshold = params.scoreThreshold;\n softNmsSigma = params.softNmsSigma;\n const inputs = { boxes: $boxes, scores: $scores };\n const attrs = { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const result = ENGINE.runKernel(NonMaxSuppressionV5, inputs, attrs);\n return { selectedIndices: result[0], selectedScores: result[1] };\n}\nexport const nonMaxSuppressionWithScore = /* @__PURE__ */ op({ nonMaxSuppressionWithScore_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLG1CQUFtQixFQUFzRCxNQUFNLG9CQUFvQixDQUFDO0FBSTVHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd0RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsU0FBUywyQkFBMkIsQ0FDaEMsS0FBMEIsRUFBRSxNQUEyQixFQUN2RCxhQUFxQixFQUFFLFlBQVksR0FBRyxHQUFHLEVBQ3pDLGNBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQ3pDLFlBQVksR0FBRyxHQUFHO0lBQ3BCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUV2RSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FDaEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFDNUQsWUFBWSxDQUFDLENBQUM7SUFDbEIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDckMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDbkMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDdkMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFFbkMsTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDM0UsTUFBTSxLQUFLLEdBQ1AsRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUMsQ0FBQztJQUVoRSwwREFBMEQ7SUFDMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDWixtQkFBbUIsRUFBRSxNQUFtQyxFQUN4RCxLQUFnQyxDQUFhLENBQUM7SUFFakUsT0FBTyxFQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsMkJBQTJCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7Tm9uTWF4U3VwcHJlc3Npb25WNSwgTm9uTWF4U3VwcHJlc3Npb25WNUF0dHJzLCBOb25NYXhTdXBwcmVzc2lvblY1SW5wdXRzfSBmcm9tICcuLi8uLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uLy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7bm9uTWF4U3VwcFNhbml0eUNoZWNrfSBmcm9tICcuLi9ub25tYXhfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFBlcmZvcm1zIG5vbiBtYXhpbXVtIHN1cHByZXNzaW9uIG9mIGJvdW5kaW5nIGJveGVzIGJhc2VkIG9uXG4gKiBpb3UgKGludGVyc2VjdGlvbiBvdmVyIHVuaW9uKS5cbiAqXG4gKiBUaGlzIG9wIGFsc28gc3VwcG9ydHMgYSBTb2Z0LU5NUyBtb2RlIChjZi5cbiAqIEJvZGxhIGV0IGFsLCBodHRwczovL2FyeGl2Lm9yZy9hYnMvMTcwNC4wNDUwMykgd2hlcmUgYm94ZXMgcmVkdWNlIHRoZSBzY29yZVxuICogb2Ygb3RoZXIgb3ZlcmxhcHBpbmcgYm94ZXMsIHRoZXJlZm9yZSBmYXZvcmluZyBkaWZmZXJlbnQgcmVnaW9ucyBvZiB0aGUgaW1hZ2VcbiAqIHdpdGggaGlnaCBzY29yZXMuIFRvIGVuYWJsZSB0aGlzIFNvZnQtTk1TIG1vZGUsIHNldCB0aGUgYHNvZnRObXNTaWdtYWBcbiAqIHBhcmFtZXRlciB0byBiZSBsYXJnZXIgdGhhbiAwLlxuICpcbiAqIEBwYXJhbSBib3hlcyBhIDJkIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzLCA0XWAuIEVhY2ggZW50cnkgaXNcbiAqICAgICBgW3kxLCB4MSwgeTIsIHgyXWAsIHdoZXJlIGAoeTEsIHgxKWAgYW5kIGAoeTIsIHgyKWAgYXJlIHRoZSBjb3JuZXJzIG9mXG4gKiAgICAgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSBzY29yZXMgYSAxZCB0ZW5zb3IgcHJvdmlkaW5nIHRoZSBib3ggc2NvcmVzIG9mIHNoYXBlIGBbbnVtQm94ZXNdYC5cbiAqIEBwYXJhbSBtYXhPdXRwdXRTaXplIFRoZSBtYXhpbXVtIG51bWJlciBvZiBib3hlcyB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSBpb3VUaHJlc2hvbGQgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hldGhlclxuICogICAgIGJveGVzIG92ZXJsYXAgdG9vIG11Y2ggd2l0aCByZXNwZWN0IHRvIElPVS4gTXVzdCBiZSBiZXR3ZWVuIFswLCAxXS5cbiAqICAgICBEZWZhdWx0cyB0byAwLjUgKDUwJSBib3ggb3ZlcmxhcCkuXG4gKiBAcGFyYW0gc2NvcmVUaHJlc2hvbGQgQSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZW4gdG8gcmVtb3ZlIGJveGVzIGJhc2VkXG4gKiAgICAgb24gc2NvcmUuIERlZmF1bHRzIHRvIC1pbmYsIHdoaWNoIG1lYW5zIGFueSBzY29yZSBpcyBhY2NlcHRlZC5cbiAqIEBwYXJhbSBzb2Z0Tm1zU2lnbWEgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHNpZ21hIHBhcmFtZXRlciBmb3IgU29mdCBOTVMuXG4gKiAgICAgV2hlbiBzaWdtYSBpcyAwLCBpdCBmYWxscyBiYWNrIHRvIG5vbk1heFN1cHByZXNzaW9uLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIHNlbGVjdGVkSW5kaWNlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgc2VsZWN0ZWQgYm94IGluZGljZXMuXG4gKiAgICAgLSBzZWxlY3RlZFNjb3JlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBzY29yZXMgZm9yIGVhY2hcbiAqICAgICAgIHNlbGVjdGVkIGJveC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdJbWFnZXMnLCBuYW1lc3BhY2U6ICdpbWFnZSd9XG4gKi9cbmZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlXyhcbiAgICBib3hlczogVGVuc29yMkR8VGVuc29yTGlrZSwgc2NvcmVzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIG1heE91dHB1dFNpemU6IG51bWJlciwgaW91VGhyZXNob2xkID0gMC41LFxuICAgIHNjb3JlVGhyZXNob2xkID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgIHNvZnRObXNTaWdtYSA9IDAuMCk6IE5hbWVkVGVuc29yTWFwIHtcbiAgY29uc3QgJGJveGVzID0gY29udmVydFRvVGVuc29yKGJveGVzLCAnYm94ZXMnLCAnbm9uTWF4U3VwcHJlc3Npb24nKTtcbiAgY29uc3QgJHNjb3JlcyA9IGNvbnZlcnRUb1RlbnNvcihzY29yZXMsICdzY29yZXMnLCAnbm9uTWF4U3VwcHJlc3Npb24nKTtcblxuICBjb25zdCBwYXJhbXMgPSBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgICAkYm94ZXMsICRzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsXG4gICAgICBzb2Z0Tm1zU2lnbWEpO1xuICBtYXhPdXRwdXRTaXplID0gcGFyYW1zLm1heE91dHB1dFNpemU7XG4gIGlvdVRocmVzaG9sZCA9IHBhcmFtcy5pb3VUaHJlc2hvbGQ7XG4gIHNjb3JlVGhyZXNob2xkID0gcGFyYW1zLnNjb3JlVGhyZXNob2xkO1xuICBzb2Z0Tm1zU2lnbWEgPSBwYXJhbXMuc29mdE5tc1NpZ21hO1xuXG4gIGNvbnN0IGlucHV0czogTm9uTWF4U3VwcHJlc3Npb25WNUlucHV0cyA9IHtib3hlczogJGJveGVzLCBzY29yZXM6ICRzY29yZXN9O1xuICBjb25zdCBhdHRyczogTm9uTWF4U3VwcHJlc3Npb25WNUF0dHJzID1cbiAgICAgIHttYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkLCBzb2Z0Tm1zU2lnbWF9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzdWx0ID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgICAgIE5vbk1heFN1cHByZXNzaW9uVjUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcltdO1xuXG4gIHJldHVybiB7c2VsZWN0ZWRJbmRpY2VzOiByZXN1bHRbMF0sIHNlbGVjdGVkU2NvcmVzOiByZXN1bHRbMV19O1xufVxuXG5leHBvcnQgY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25XaXRoU2NvcmUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe25vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { nonMaxSuppressionV5Impl } from '../../backends/non_max_suppression_impl';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { tensor1d } from '../tensor1d';\n/**\n * Asynchronously performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * This op also supports a Soft-NMS mode (cf.\n * Bodla et al, https://arxiv.org/abs/1704.04503) where boxes reduce the score\n * of other overlapping boxes, therefore favoring different regions of the image\n * with high scores. To enable this Soft-NMS mode, set the `softNmsSigma`\n * parameter to be larger than 0.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @param softNmsSigma A float representing the sigma parameter for Soft NMS.\n * When sigma is 0, it falls back to nonMaxSuppression.\n * @return A map with the following properties:\n * - selectedIndices: A 1D tensor with the selected box indices.\n * - selectedScores: A 1D tensor with the corresponding scores for each\n * selected box.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nasync function nonMaxSuppressionWithScoreAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, softNmsSigma = 0.0) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppressionAsync');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppressionAsync');\n const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n maxOutputSize = params.maxOutputSize;\n iouThreshold = params.iouThreshold;\n scoreThreshold = params.scoreThreshold;\n softNmsSigma = params.softNmsSigma;\n const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]);\n const boxesVals = boxesAndScores[0];\n const scoresVals = boxesAndScores[1];\n // We call a cpu based impl directly with the typedarray data here rather\n // than a kernel because all kernels are synchronous (and thus cannot await\n // .data()).\n const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n if ($boxes !== boxes) {\n $boxes.dispose();\n }\n if ($scores !== scores) {\n $scores.dispose();\n }\n return {\n selectedIndices: tensor1d(selectedIndices, 'int32'),\n selectedScores: tensor1d(selectedScores)\n };\n}\nexport const nonMaxSuppressionWithScoreAsync = nonMaxSuppressionWithScoreAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlX2FzeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlX2FzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBR2hGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsS0FBSyxVQUFVLGdDQUFnQyxDQUMzQyxLQUEwQixFQUFFLE1BQTJCLEVBQ3ZELGFBQXFCLEVBQUUsWUFBWSxHQUFHLEdBQUcsRUFDekMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFDekMsWUFBWSxHQUFHLEdBQUc7SUFDcEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUN6RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBRTVFLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUM1RCxZQUFZLENBQUMsQ0FBQztJQUNsQixhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNuQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN2QyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUVuQyxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJDLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsWUFBWTtJQUNaLE1BQU0sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFDLEdBQUcsdUJBQXVCLENBQzdELFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQ2xFLFlBQVksQ0FBQyxDQUFDO0lBRWxCLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtRQUNwQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbEI7SUFDRCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDdEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0lBRUQsT0FBTztRQUNMLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQztRQUNuRCxjQUFjLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztLQUN6QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblY1SW1wbH0gZnJvbSAnLi4vLi4vYmFja2VuZHMvbm9uX21heF9zdXBwcmVzc2lvbl9pbXBsJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge25vbk1heFN1cHBTYW5pdHlDaGVja30gZnJvbSAnLi4vbm9ubWF4X3V0aWwnO1xuaW1wb3J0IHt0ZW5zb3IxZH0gZnJvbSAnLi4vdGVuc29yMWQnO1xuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHBlcmZvcm1zIG5vbiBtYXhpbXVtIHN1cHByZXNzaW9uIG9mIGJvdW5kaW5nIGJveGVzIGJhc2VkIG9uXG4gKiBpb3UgKGludGVyc2VjdGlvbiBvdmVyIHVuaW9uKS5cbiAqXG4gKiBUaGlzIG9wIGFsc28gc3VwcG9ydHMgYSBTb2Z0LU5NUyBtb2RlIChjZi5cbiAqIEJvZGxhIGV0IGFsLCBodHRwczovL2FyeGl2Lm9yZy9hYnMvMTcwNC4wNDUwMykgd2hlcmUgYm94ZXMgcmVkdWNlIHRoZSBzY29yZVxuICogb2Ygb3RoZXIgb3ZlcmxhcHBpbmcgYm94ZXMsIHRoZXJlZm9yZSBmYXZvcmluZyBkaWZmZXJlbnQgcmVnaW9ucyBvZiB0aGUgaW1hZ2VcbiAqIHdpdGggaGlnaCBzY29yZXMuIFRvIGVuYWJsZSB0aGlzIFNvZnQtTk1TIG1vZGUsIHNldCB0aGUgYHNvZnRObXNTaWdtYWBcbiAqIHBhcmFtZXRlciB0byBiZSBsYXJnZXIgdGhhbiAwLlxuICpcbiAqIEBwYXJhbSBib3hlcyBhIDJkIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzLCA0XWAuIEVhY2ggZW50cnkgaXNcbiAqICAgICBgW3kxLCB4MSwgeTIsIHgyXWAsIHdoZXJlIGAoeTEsIHgxKWAgYW5kIGAoeTIsIHgyKWAgYXJlIHRoZSBjb3JuZXJzIG9mXG4gKiAgICAgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSBzY29yZXMgYSAxZCB0ZW5zb3IgcHJvdmlkaW5nIHRoZSBib3ggc2NvcmVzIG9mIHNoYXBlIGBbbnVtQm94ZXNdYC5cbiAqIEBwYXJhbSBtYXhPdXRwdXRTaXplIFRoZSBtYXhpbXVtIG51bWJlciBvZiBib3hlcyB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSBpb3VUaHJlc2hvbGQgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hldGhlclxuICogICAgIGJveGVzIG92ZXJsYXAgdG9vIG11Y2ggd2l0aCByZXNwZWN0IHRvIElPVS4gTXVzdCBiZSBiZXR3ZWVuIFswLCAxXS5cbiAqICAgICBEZWZhdWx0cyB0byAwLjUgKDUwJSBib3ggb3ZlcmxhcCkuXG4gKiBAcGFyYW0gc2NvcmVUaHJlc2hvbGQgQSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZW4gdG8gcmVtb3ZlIGJveGVzIGJhc2VkXG4gKiAgICAgb24gc2NvcmUuIERlZmF1bHRzIHRvIC1pbmYsIHdoaWNoIG1lYW5zIGFueSBzY29yZSBpcyBhY2NlcHRlZC5cbiAqIEBwYXJhbSBzb2Z0Tm1zU2lnbWEgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHNpZ21hIHBhcmFtZXRlciBmb3IgU29mdCBOTVMuXG4gKiAgICAgV2hlbiBzaWdtYSBpcyAwLCBpdCBmYWxscyBiYWNrIHRvIG5vbk1heFN1cHByZXNzaW9uLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIHNlbGVjdGVkSW5kaWNlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgc2VsZWN0ZWQgYm94IGluZGljZXMuXG4gKiAgICAgLSBzZWxlY3RlZFNjb3JlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBzY29yZXMgZm9yIGVhY2hcbiAqICAgICAgIHNlbGVjdGVkIGJveC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdJbWFnZXMnLCBuYW1lc3BhY2U6ICdpbWFnZSd9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlQXN5bmNfKFxuICAgIGJveGVzOiBUZW5zb3IyRHxUZW5zb3JMaWtlLCBzY29yZXM6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLCBpb3VUaHJlc2hvbGQgPSAwLjUsXG4gICAgc2NvcmVUaHJlc2hvbGQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgc29mdE5tc1NpZ21hID0gMC4wKTogUHJvbWlzZTxOYW1lZFRlbnNvck1hcD4ge1xuICBjb25zdCAkYm94ZXMgPSBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbkFzeW5jJyk7XG4gIGNvbnN0ICRzY29yZXMgPSBjb252ZXJ0VG9UZW5zb3Ioc2NvcmVzLCAnc2NvcmVzJywgJ25vbk1heFN1cHByZXNzaW9uQXN5bmMnKTtcblxuICBjb25zdCBwYXJhbXMgPSBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgICAkYm94ZXMsICRzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsXG4gICAgICBzb2Z0Tm1zU2lnbWEpO1xuICBtYXhPdXRwdXRTaXplID0gcGFyYW1zLm1heE91dHB1dFNpemU7XG4gIGlvdVRocmVzaG9sZCA9IHBhcmFtcy5pb3VUaHJlc2hvbGQ7XG4gIHNjb3JlVGhyZXNob2xkID0gcGFyYW1zLnNjb3JlVGhyZXNob2xkO1xuICBzb2Z0Tm1zU2lnbWEgPSBwYXJhbXMuc29mdE5tc1NpZ21hO1xuXG4gIGNvbnN0IGJveGVzQW5kU2NvcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoWyRib3hlcy5kYXRhKCksICRzY29yZXMuZGF0YSgpXSk7XG4gIGNvbnN0IGJveGVzVmFscyA9IGJveGVzQW5kU2NvcmVzWzBdO1xuICBjb25zdCBzY29yZXNWYWxzID0gYm94ZXNBbmRTY29yZXNbMV07XG5cbiAgLy8gV2UgY2FsbCBhIGNwdSBiYXNlZCBpbXBsIGRpcmVjdGx5IHdpdGggdGhlIHR5cGVkYXJyYXkgZGF0YSAgaGVyZSByYXRoZXJcbiAgLy8gdGhhbiBhIGtlcm5lbCBiZWNhdXNlIGFsbCBrZXJuZWxzIGFyZSBzeW5jaHJvbm91cyAoYW5kIHRodXMgY2Fubm90IGF3YWl0XG4gIC8vIC5kYXRhKCkpLlxuICBjb25zdCB7c2VsZWN0ZWRJbmRpY2VzLCBzZWxlY3RlZFNjb3Jlc30gPSBub25NYXhTdXBwcmVzc2lvblY1SW1wbChcbiAgICAgIGJveGVzVmFscywgc2NvcmVzVmFscywgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCxcbiAgICAgIHNvZnRObXNTaWdtYSk7XG5cbiAgaWYgKCRib3hlcyAhPT0gYm94ZXMpIHtcbiAgICAkYm94ZXMuZGlzcG9zZSgpO1xuICB9XG4gIGlmICgkc2NvcmVzICE9PSBzY29yZXMpIHtcbiAgICAkc2NvcmVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VsZWN0ZWRJbmRpY2VzOiB0ZW5zb3IxZChzZWxlY3RlZEluZGljZXMsICdpbnQzMicpLFxuICAgIHNlbGVjdGVkU2NvcmVzOiB0ZW5zb3IxZChzZWxlY3RlZFNjb3JlcylcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlQXN5bmMgPSBub25NYXhTdXBwcmVzc2lvbldpdGhTY29yZUFzeW5jXztcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { NonMaxSuppressionV4 } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { op } from '../operation';\n/**\n * Asynchronously performs non maximum suppression of bounding boxes based on\n * iou (intersection over union), with an option to pad results.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @param padToMaxOutputSize Defaults to false. If true, size of output\n * `selectedIndices` is padded to maxOutputSize.\n * @return A map with the following properties:\n * - selectedIndices: A 1D tensor with the selected box indices.\n * - validOutputs: A scalar denoting how many elements in `selectedIndices`\n * are valid. Valid elements occur first, then padding.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction nonMaxSuppressionPadded_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, padToMaxOutputSize = false) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppression');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppression');\n const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, null /* softNmsSigma */);\n const $maxOutputSize = params.maxOutputSize;\n const $iouThreshold = params.iouThreshold;\n const $scoreThreshold = params.scoreThreshold;\n const inputs = { boxes: $boxes, scores: $scores };\n const attrs = {\n maxOutputSize: $maxOutputSize,\n iouThreshold: $iouThreshold,\n scoreThreshold: $scoreThreshold,\n padToMaxOutputSize\n };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const result = ENGINE.runKernel(NonMaxSuppressionV4, inputs, attrs);\n return { selectedIndices: result[0], validOutputs: result[1] };\n}\nexport const nonMaxSuppressionPadded = /* @__PURE__ */ op({ nonMaxSuppressionPadded_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl9wYWRkZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9pbWFnZS9ub25fbWF4X3N1cHByZXNzaW9uX3BhZGRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxtQkFBbUIsRUFBc0QsTUFBTSxvQkFBb0IsQ0FBQztBQUk1RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHdEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsd0JBQXdCLENBQzdCLEtBQTBCLEVBQUUsTUFBMkIsRUFDdkQsYUFBcUIsRUFBRSxZQUFZLEdBQUcsR0FBRyxFQUN6QyxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUN6QyxrQkFBa0IsR0FBRyxLQUFLO0lBQzVCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUV2RSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FDaEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDN0IsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUM1QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQzFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDM0UsTUFBTSxLQUFLLEdBQTZCO1FBQ3RDLGFBQWEsRUFBRSxjQUFjO1FBQzdCLFlBQVksRUFBRSxhQUFhO1FBQzNCLGNBQWMsRUFBRSxlQUFlO1FBQy9CLGtCQUFrQjtLQUNuQixDQUFDO0lBRUYsMERBQTBEO0lBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osbUJBQW1CLEVBQUUsTUFBbUMsRUFDeEQsS0FBZ0MsQ0FBYSxDQUFDO0lBRWpFLE9BQU8sRUFBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLHdCQUF3QixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge05vbk1heFN1cHByZXNzaW9uVjQsIE5vbk1heFN1cHByZXNzaW9uVjRBdHRycywgTm9uTWF4U3VwcHJlc3Npb25WNElucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi8uLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQge25vbk1heFN1cHBTYW5pdHlDaGVja30gZnJvbSAnLi4vbm9ubWF4X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBwZXJmb3JtcyBub24gbWF4aW11bSBzdXBwcmVzc2lvbiBvZiBib3VuZGluZyBib3hlcyBiYXNlZCBvblxuICogaW91IChpbnRlcnNlY3Rpb24gb3ZlciB1bmlvbiksIHdpdGggYW4gb3B0aW9uIHRvIHBhZCByZXN1bHRzLlxuICpcbiAqIEBwYXJhbSBib3hlcyBhIDJkIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzLCA0XWAuIEVhY2ggZW50cnkgaXNcbiAqICAgICBgW3kxLCB4MSwgeTIsIHgyXWAsIHdoZXJlIGAoeTEsIHgxKWAgYW5kIGAoeTIsIHgyKWAgYXJlIHRoZSBjb3JuZXJzIG9mXG4gKiAgICAgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSBzY29yZXMgYSAxZCB0ZW5zb3IgcHJvdmlkaW5nIHRoZSBib3ggc2NvcmVzIG9mIHNoYXBlIGBbbnVtQm94ZXNdYC5cbiAqIEBwYXJhbSBtYXhPdXRwdXRTaXplIFRoZSBtYXhpbXVtIG51bWJlciBvZiBib3hlcyB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSBpb3VUaHJlc2hvbGQgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hldGhlclxuICogICAgIGJveGVzIG92ZXJsYXAgdG9vIG11Y2ggd2l0aCByZXNwZWN0IHRvIElPVS4gTXVzdCBiZSBiZXR3ZWVuIFswLCAxXS5cbiAqICAgICBEZWZhdWx0cyB0byAwLjUgKDUwJSBib3ggb3ZlcmxhcCkuXG4gKiBAcGFyYW0gc2NvcmVUaHJlc2hvbGQgQSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZW4gdG8gcmVtb3ZlIGJveGVzIGJhc2VkXG4gKiAgICAgb24gc2NvcmUuIERlZmF1bHRzIHRvIC1pbmYsIHdoaWNoIG1lYW5zIGFueSBzY29yZSBpcyBhY2NlcHRlZC5cbiAqIEBwYXJhbSBwYWRUb01heE91dHB1dFNpemUgRGVmYXVsdHMgdG8gZmFsc2UuIElmIHRydWUsIHNpemUgb2Ygb3V0cHV0XG4gKiAgICAgYHNlbGVjdGVkSW5kaWNlc2AgaXMgcGFkZGVkIHRvIG1heE91dHB1dFNpemUuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gc2VsZWN0ZWRJbmRpY2VzOiBBIDFEIHRlbnNvciB3aXRoIHRoZSBzZWxlY3RlZCBib3ggaW5kaWNlcy5cbiAqICAgICAtIHZhbGlkT3V0cHV0czogQSBzY2FsYXIgZGVub3RpbmcgaG93IG1hbnkgZWxlbWVudHMgaW4gYHNlbGVjdGVkSW5kaWNlc2BcbiAqICAgICAgIGFyZSB2YWxpZC4gVmFsaWQgZWxlbWVudHMgb2NjdXIgZmlyc3QsIHRoZW4gcGFkZGluZy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdJbWFnZXMnLCBuYW1lc3BhY2U6ICdpbWFnZSd9XG4gKi9cbmZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uUGFkZGVkXyhcbiAgICBib3hlczogVGVuc29yMkR8VGVuc29yTGlrZSwgc2NvcmVzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIG1heE91dHB1dFNpemU6IG51bWJlciwgaW91VGhyZXNob2xkID0gMC41LFxuICAgIHNjb3JlVGhyZXNob2xkID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgIHBhZFRvTWF4T3V0cHV0U2l6ZSA9IGZhbHNlKTogTmFtZWRUZW5zb3JNYXAge1xuICBjb25zdCAkYm94ZXMgPSBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbicpO1xuICBjb25zdCAkc2NvcmVzID0gY29udmVydFRvVGVuc29yKHNjb3JlcywgJ3Njb3JlcycsICdub25NYXhTdXBwcmVzc2lvbicpO1xuXG4gIGNvbnN0IHBhcmFtcyA9IG5vbk1heFN1cHBTYW5pdHlDaGVjayhcbiAgICAgICRib3hlcywgJHNjb3JlcywgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCxcbiAgICAgIG51bGwgLyogc29mdE5tc1NpZ21hICovKTtcbiAgY29uc3QgJG1heE91dHB1dFNpemUgPSBwYXJhbXMubWF4T3V0cHV0U2l6ZTtcbiAgY29uc3QgJGlvdVRocmVzaG9sZCA9IHBhcmFtcy5pb3VUaHJlc2hvbGQ7XG4gIGNvbnN0ICRzY29yZVRocmVzaG9sZCA9IHBhcmFtcy5zY29yZVRocmVzaG9sZDtcblxuICBjb25zdCBpbnB1dHM6IE5vbk1heFN1cHByZXNzaW9uVjRJbnB1dHMgPSB7Ym94ZXM6ICRib3hlcywgc2NvcmVzOiAkc2NvcmVzfTtcbiAgY29uc3QgYXR0cnM6IE5vbk1heFN1cHByZXNzaW9uVjRBdHRycyA9IHtcbiAgICBtYXhPdXRwdXRTaXplOiAkbWF4T3V0cHV0U2l6ZSxcbiAgICBpb3VUaHJlc2hvbGQ6ICRpb3VUaHJlc2hvbGQsXG4gICAgc2NvcmVUaHJlc2hvbGQ6ICRzY29yZVRocmVzaG9sZCxcbiAgICBwYWRUb01heE91dHB1dFNpemVcbiAgfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlc3VsdCA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICAgICBOb25NYXhTdXBwcmVzc2lvblY0LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUZW5zb3JbXTtcblxuICByZXR1cm4ge3NlbGVjdGVkSW5kaWNlczogcmVzdWx0WzBdLCB2YWxpZE91dHB1dHM6IHJlc3VsdFsxXX07XG59XG5cbmV4cG9ydCBjb25zdCBub25NYXhTdXBwcmVzc2lvblBhZGRlZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bm9uTWF4U3VwcHJlc3Npb25QYWRkZWRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { nonMaxSuppressionV4Impl } from '../../backends/non_max_suppression_impl';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { scalar } from '../scalar';\nimport { tensor1d } from '../tensor1d';\n/**\n * Asynchronously performs non maximum suppression of bounding boxes based on\n * iou (intersection over union), with an option to pad results.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @param padToMaxOutputSize Defaults to false. If true, size of output\n * `selectedIndices` is padded to maxOutputSize.\n * @return A map with the following properties:\n * - selectedIndices: A 1D tensor with the selected box indices.\n * - validOutputs: A scalar denoting how many elements in `selectedIndices`\n * are valid. Valid elements occur first, then padding.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nasync function nonMaxSuppressionPaddedAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, padToMaxOutputSize = false) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppressionAsync');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppressionAsync');\n const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, null /* softNmsSigma */);\n const $maxOutputSize = params.maxOutputSize;\n const $iouThreshold = params.iouThreshold;\n const $scoreThreshold = params.scoreThreshold;\n const [boxesVals, scoresVals] = await Promise.all([$boxes.data(), $scores.data()]);\n // We call a cpu based impl directly with the typedarray data here rather\n // than a kernel because all kernels are synchronous (and thus cannot await\n // .data()).\n const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl(boxesVals, scoresVals, $maxOutputSize, $iouThreshold, $scoreThreshold, padToMaxOutputSize);\n if ($boxes !== boxes) {\n $boxes.dispose();\n }\n if ($scores !== scores) {\n $scores.dispose();\n }\n return {\n selectedIndices: tensor1d(selectedIndices, 'int32'),\n validOutputs: scalar(validOutputs, 'int32')\n };\n}\nexport const nonMaxSuppressionPaddedAsync = nonMaxSuppressionPaddedAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl9wYWRkZWRfYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9pbWFnZS9ub25fbWF4X3N1cHByZXNzaW9uX3BhZGRlZF9hc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUdoRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsS0FBSyxVQUFVLDZCQUE2QixDQUN4QyxLQUEwQixFQUFFLE1BQTJCLEVBQ3ZELGFBQXFCLEVBQUUsWUFBWSxHQUFHLEdBQUcsRUFDekMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFDekMsa0JBQWtCLEdBQUcsS0FBSztJQUM1QixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFFNUUsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUMxQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0lBRTlDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQ3pCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZELHlFQUF5RTtJQUN6RSwyRUFBMkU7SUFDM0UsWUFBWTtJQUNaLE1BQU0sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLEdBQUcsdUJBQXVCLENBQzNELFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQ3JFLGtCQUFrQixDQUFDLENBQUM7SUFFeEIsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO1FBQ3BCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNsQjtJQUNELElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRTtRQUN0QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbkI7SUFFRCxPQUFPO1FBQ0wsZUFBZSxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO1FBQ25ELFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQztLQUM1QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblY0SW1wbH0gZnJvbSAnLi4vLi4vYmFja2VuZHMvbm9uX21heF9zdXBwcmVzc2lvbl9pbXBsJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge25vbk1heFN1cHBTYW5pdHlDaGVja30gZnJvbSAnLi4vbm9ubWF4X3V0aWwnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3RlbnNvcjFkfSBmcm9tICcuLi90ZW5zb3IxZCc7XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgcGVyZm9ybXMgbm9uIG1heGltdW0gc3VwcHJlc3Npb24gb2YgYm91bmRpbmcgYm94ZXMgYmFzZWQgb25cbiAqIGlvdSAoaW50ZXJzZWN0aW9uIG92ZXIgdW5pb24pLCB3aXRoIGFuIG9wdGlvbiB0byBwYWQgcmVzdWx0cy5cbiAqXG4gKiBAcGFyYW0gYm94ZXMgYSAyZCB0ZW5zb3Igb2Ygc2hhcGUgYFtudW1Cb3hlcywgNF1gLiBFYWNoIGVudHJ5IGlzXG4gKiAgICAgYFt5MSwgeDEsIHkyLCB4Ml1gLCB3aGVyZSBgKHkxLCB4MSlgIGFuZCBgKHkyLCB4MilgIGFyZSB0aGUgY29ybmVycyBvZlxuICogICAgIHRoZSBib3VuZGluZyBib3guXG4gKiBAcGFyYW0gc2NvcmVzIGEgMWQgdGVuc29yIHByb3ZpZGluZyB0aGUgYm94IHNjb3JlcyBvZiBzaGFwZSBgW251bUJveGVzXWAuXG4gKiBAcGFyYW0gbWF4T3V0cHV0U2l6ZSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgdG8gYmUgc2VsZWN0ZWQuXG4gKiBAcGFyYW0gaW91VGhyZXNob2xkIEEgZmxvYXQgcmVwcmVzZW50aW5nIHRoZSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZXRoZXJcbiAqICAgICBib3hlcyBvdmVybGFwIHRvbyBtdWNoIHdpdGggcmVzcGVjdCB0byBJT1UuIE11c3QgYmUgYmV0d2VlbiBbMCwgMV0uXG4gKiAgICAgRGVmYXVsdHMgdG8gMC41ICg1MCUgYm94IG92ZXJsYXApLlxuICogQHBhcmFtIHNjb3JlVGhyZXNob2xkIEEgdGhyZXNob2xkIGZvciBkZWNpZGluZyB3aGVuIHRvIHJlbW92ZSBib3hlcyBiYXNlZFxuICogICAgIG9uIHNjb3JlLiBEZWZhdWx0cyB0byAtaW5mLCB3aGljaCBtZWFucyBhbnkgc2NvcmUgaXMgYWNjZXB0ZWQuXG4gKiBAcGFyYW0gcGFkVG9NYXhPdXRwdXRTaXplIERlZmF1bHRzIHRvIGZhbHNlLiBJZiB0cnVlLCBzaXplIG9mIG91dHB1dFxuICogICAgIGBzZWxlY3RlZEluZGljZXNgIGlzIHBhZGRlZCB0byBtYXhPdXRwdXRTaXplLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIHNlbGVjdGVkSW5kaWNlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgc2VsZWN0ZWQgYm94IGluZGljZXMuXG4gKiAgICAgLSB2YWxpZE91dHB1dHM6IEEgc2NhbGFyIGRlbm90aW5nIGhvdyBtYW55IGVsZW1lbnRzIGluIGBzZWxlY3RlZEluZGljZXNgXG4gKiAgICAgICBhcmUgdmFsaWQuIFZhbGlkIGVsZW1lbnRzIG9jY3VyIGZpcnN0LCB0aGVuIHBhZGRpbmcuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5hc3luYyBmdW5jdGlvbiBub25NYXhTdXBwcmVzc2lvblBhZGRlZEFzeW5jXyhcbiAgICBib3hlczogVGVuc29yMkR8VGVuc29yTGlrZSwgc2NvcmVzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIG1heE91dHB1dFNpemU6IG51bWJlciwgaW91VGhyZXNob2xkID0gMC41LFxuICAgIHNjb3JlVGhyZXNob2xkID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgIHBhZFRvTWF4T3V0cHV0U2l6ZSA9IGZhbHNlKTogUHJvbWlzZTxOYW1lZFRlbnNvck1hcD4ge1xuICBjb25zdCAkYm94ZXMgPSBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbkFzeW5jJyk7XG4gIGNvbnN0ICRzY29yZXMgPSBjb252ZXJ0VG9UZW5zb3Ioc2NvcmVzLCAnc2NvcmVzJywgJ25vbk1heFN1cHByZXNzaW9uQXN5bmMnKTtcblxuICBjb25zdCBwYXJhbXMgPSBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgICAkYm94ZXMsICRzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsXG4gICAgICBudWxsIC8qIHNvZnRObXNTaWdtYSAqLyk7XG4gIGNvbnN0ICRtYXhPdXRwdXRTaXplID0gcGFyYW1zLm1heE91dHB1dFNpemU7XG4gIGNvbnN0ICRpb3VUaHJlc2hvbGQgPSBwYXJhbXMuaW91VGhyZXNob2xkO1xuICBjb25zdCAkc2NvcmVUaHJlc2hvbGQgPSBwYXJhbXMuc2NvcmVUaHJlc2hvbGQ7XG5cbiAgY29uc3QgW2JveGVzVmFscywgc2NvcmVzVmFsc10gPVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWyRib3hlcy5kYXRhKCksICRzY29yZXMuZGF0YSgpXSk7XG5cbiAgLy8gV2UgY2FsbCBhIGNwdSBiYXNlZCBpbXBsIGRpcmVjdGx5IHdpdGggdGhlIHR5cGVkYXJyYXkgZGF0YSBoZXJlIHJhdGhlclxuICAvLyB0aGFuIGEga2VybmVsIGJlY2F1c2UgYWxsIGtlcm5lbHMgYXJlIHN5bmNocm9ub3VzIChhbmQgdGh1cyBjYW5ub3QgYXdhaXRcbiAgLy8gLmRhdGEoKSkuXG4gIGNvbnN0IHtzZWxlY3RlZEluZGljZXMsIHZhbGlkT3V0cHV0c30gPSBub25NYXhTdXBwcmVzc2lvblY0SW1wbChcbiAgICAgIGJveGVzVmFscywgc2NvcmVzVmFscywgJG1heE91dHB1dFNpemUsICRpb3VUaHJlc2hvbGQsICRzY29yZVRocmVzaG9sZCxcbiAgICAgIHBhZFRvTWF4T3V0cHV0U2l6ZSk7XG5cbiAgaWYgKCRib3hlcyAhPT0gYm94ZXMpIHtcbiAgICAkYm94ZXMuZGlzcG9zZSgpO1xuICB9XG4gIGlmICgkc2NvcmVzICE9PSBzY29yZXMpIHtcbiAgICAkc2NvcmVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VsZWN0ZWRJbmRpY2VzOiB0ZW5zb3IxZChzZWxlY3RlZEluZGljZXMsICdpbnQzMicpLFxuICAgIHZhbGlkT3V0cHV0czogc2NhbGFyKHZhbGlkT3V0cHV0cywgJ2ludDMyJylcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vbk1heFN1cHByZXNzaW9uUGFkZGVkQXN5bmMgPSBub25NYXhTdXBwcmVzc2lvblBhZGRlZEFzeW5jXztcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { ResizeBilinear } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * Bilinear resize a single 3D image or a batch of 3D images to a new shape.\n *\n * @param images The images, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param size The new shape `[newHeight, newWidth]` to resize the\n * images to. Each channel is resized individually.\n * @param alignCorners Defaults to `false`. If true, rescale\n * input by `(new_height - 1) / (height - 1)`, which exactly aligns the 4\n * corners of images and resized images. If false, rescale by\n * `new_height / height`. Treat similarly the width dimension.\n * @param halfPixelCenters Defaults to `false`. Whether to assume pixel centers\n * are at 0.5, which would make the floating point coordinates of the top\n * left pixel 0.5, 0.5.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction resizeBilinear_(images, size, alignCorners = false, halfPixelCenters = false) {\n const $images = convertToTensor(images, 'images', 'resizeBilinear');\n util.assert($images.rank === 3 || $images.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got ` +\n `rank ${$images.rank}.`);\n util.assert(size.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ` +\n `${size}.`);\n util.assert(halfPixelCenters === false || alignCorners === false, () => `Error in resizeBilinear: If halfPixelCenters is true, ` +\n `alignCorners must be false.`);\n let batchImages = $images;\n let reshapedTo4D = false;\n if ($images.rank === 3) {\n reshapedTo4D = true;\n batchImages = reshape($images, [1, $images.shape[0], $images.shape[1], $images.shape[2]]);\n }\n const [] = size;\n const inputs = { images: batchImages };\n const attrs = { alignCorners, halfPixelCenters, size };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(ResizeBilinear, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const resizeBilinear = /* @__PURE__ */ op({ resizeBilinear_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX2JpbGluZWFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvcmVzaXplX2JpbGluZWFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUk3RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxlQUFlLENBQ3BCLE1BQW9CLEVBQUUsSUFBc0IsRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUNsRSxnQkFBZ0IsR0FBRyxLQUFLO0lBQzFCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFcEUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDeEMsR0FBRyxFQUFFLENBQUMsMERBQTBEO1FBQzVELFFBQVEsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDakIsR0FBRyxFQUFFLENBQUMsNERBQTREO1FBQzlELEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUMsTUFBTSxDQUNQLGdCQUFnQixLQUFLLEtBQUssSUFBSSxZQUFZLEtBQUssS0FBSyxFQUNwRCxHQUFHLEVBQUUsQ0FBQyx3REFBd0Q7UUFDMUQsNkJBQTZCLENBQUMsQ0FBQztJQUV2QyxJQUFJLFdBQVcsR0FBRyxPQUFtQixDQUFDO0lBQ3RDLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3RCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsV0FBVyxHQUFHLE9BQU8sQ0FDakIsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RTtJQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztJQUVoQixNQUFNLE1BQU0sR0FBeUIsRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFDLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQXdCLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBQyxDQUFDO0lBRTFFLDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLGNBQWMsRUFBRSxNQUFtQyxFQUNuRCxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7UmVzaXplQmlsaW5lYXIsIFJlc2l6ZUJpbGluZWFyQXR0cnMsIFJlc2l6ZUJpbGluZWFySW5wdXRzfSBmcm9tICcuLi8uLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uLy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4vcmVzaGFwZSc7XG5cbi8qKlxuICogQmlsaW5lYXIgcmVzaXplIGEgc2luZ2xlIDNEIGltYWdlIG9yIGEgYmF0Y2ggb2YgM0QgaW1hZ2VzIHRvIGEgbmV3IHNoYXBlLlxuICpcbiAqIEBwYXJhbSBpbWFnZXMgVGhlIGltYWdlcywgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpcyBhc3N1bWVkLlxuICogQHBhcmFtIHNpemUgVGhlIG5ldyBzaGFwZSBgW25ld0hlaWdodCwgbmV3V2lkdGhdYCB0byByZXNpemUgdGhlXG4gKiAgICAgaW1hZ2VzIHRvLiBFYWNoIGNoYW5uZWwgaXMgcmVzaXplZCBpbmRpdmlkdWFsbHkuXG4gKiBAcGFyYW0gYWxpZ25Db3JuZXJzIERlZmF1bHRzIHRvIGBmYWxzZWAuIElmIHRydWUsIHJlc2NhbGVcbiAqICAgICBpbnB1dCBieSBgKG5ld19oZWlnaHQgLSAxKSAvIChoZWlnaHQgLSAxKWAsIHdoaWNoIGV4YWN0bHkgYWxpZ25zIHRoZSA0XG4gKiAgICAgY29ybmVycyBvZiBpbWFnZXMgYW5kIHJlc2l6ZWQgaW1hZ2VzLiBJZiBmYWxzZSwgcmVzY2FsZSBieVxuICogICAgIGBuZXdfaGVpZ2h0IC8gaGVpZ2h0YC4gVHJlYXQgc2ltaWxhcmx5IHRoZSB3aWR0aCBkaW1lbnNpb24uXG4gKiBAcGFyYW0gaGFsZlBpeGVsQ2VudGVycyBEZWZhdWx0cyB0byBgZmFsc2VgLiBXaGV0aGVyIHRvIGFzc3VtZSBwaXhlbCBjZW50ZXJzXG4gKiAgICAgYXJlIGF0IDAuNSwgd2hpY2ggd291bGQgbWFrZSB0aGUgZmxvYXRpbmcgcG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIHRvcFxuICogICAgIGxlZnQgcGl4ZWwgMC41LCAwLjUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5mdW5jdGlvbiByZXNpemVCaWxpbmVhcl88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICBpbWFnZXM6IFR8VGVuc29yTGlrZSwgc2l6ZTogW251bWJlciwgbnVtYmVyXSwgYWxpZ25Db3JuZXJzID0gZmFsc2UsXG4gICAgaGFsZlBpeGVsQ2VudGVycyA9IGZhbHNlKTogVCB7XG4gIGNvbnN0ICRpbWFnZXMgPSBjb252ZXJ0VG9UZW5zb3IoaW1hZ2VzLCAnaW1hZ2VzJywgJ3Jlc2l6ZUJpbGluZWFyJyk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2VzLnJhbmsgPT09IDMgfHwgJGltYWdlcy5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJlc2l6ZUJpbGluZWFyOiB4IG11c3QgYmUgcmFuayAzIG9yIDQsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHskaW1hZ2VzLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHNpemUubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJlc2l6ZUJpbGluZWFyOiBuZXcgc2hhcGUgbXVzdCAyRCwgYnV0IGdvdCBzaGFwZSBgICtcbiAgICAgICAgICBgJHtzaXplfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBoYWxmUGl4ZWxDZW50ZXJzID09PSBmYWxzZSB8fCBhbGlnbkNvcm5lcnMgPT09IGZhbHNlLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJlc2l6ZUJpbGluZWFyOiBJZiBoYWxmUGl4ZWxDZW50ZXJzIGlzIHRydWUsIGAgK1xuICAgICAgICAgIGBhbGlnbkNvcm5lcnMgbXVzdCBiZSBmYWxzZS5gKTtcblxuICBsZXQgYmF0Y2hJbWFnZXMgPSAkaW1hZ2VzIGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG4gIGlmICgkaW1hZ2VzLnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIGJhdGNoSW1hZ2VzID0gcmVzaGFwZShcbiAgICAgICAgJGltYWdlcywgWzEsICRpbWFnZXMuc2hhcGVbMF0sICRpbWFnZXMuc2hhcGVbMV0sICRpbWFnZXMuc2hhcGVbMl1dKTtcbiAgfVxuXG4gIGNvbnN0IFtdID0gc2l6ZTtcblxuICBjb25zdCBpbnB1dHM6IFJlc2l6ZUJpbGluZWFySW5wdXRzID0ge2ltYWdlczogYmF0Y2hJbWFnZXN9O1xuICBjb25zdCBhdHRyczogUmVzaXplQmlsaW5lYXJBdHRycyA9IHthbGlnbkNvcm5lcnMsIGhhbGZQaXhlbENlbnRlcnMsIHNpemV9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIFJlc2l6ZUJpbGluZWFyLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUO1xuXG4gIGlmIChyZXNoYXBlZFRvNEQpIHtcbiAgICByZXR1cm4gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMV0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdXSkgYXMgVDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgY29uc3QgcmVzaXplQmlsaW5lYXIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Jlc2l6ZUJpbGluZWFyX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { ResizeNearestNeighbor } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * NearestNeighbor resize a batch of 3D images to a new shape.\n *\n * @param images The images, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param size The new shape `[newHeight, newWidth]` to resize the\n * images to. Each channel is resized individually.\n * @param alignCorners Defaults to False. If true, rescale\n * input by `(new_height - 1) / (height - 1)`, which exactly aligns the 4\n * corners of images and resized images. If false, rescale by\n * `new_height / height`. Treat similarly the width dimension.\n * @param halfPixelCenters Defaults to `false`. Whether to assume pixels are of\n * half the actual dimensions, and yield more accurate resizes. This flag\n * would also make the floating point coordinates of the top left pixel\n * 0.5, 0.5.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction resizeNearestNeighbor_(images, size, alignCorners = false, halfPixelCenters = false) {\n const $images = convertToTensor(images, 'images', 'resizeNearestNeighbor');\n util.assert($images.rank === 3 || $images.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got ` +\n `rank ${$images.rank}.`);\n util.assert(size.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ` +\n `${size}.`);\n util.assert($images.dtype === 'float32' || $images.dtype === 'int32', () => '`images` must have `int32` or `float32` as dtype');\n util.assert(halfPixelCenters === false || alignCorners === false, () => `Error in resizeNearestNeighbor: If halfPixelCenters is true, ` +\n `alignCorners must be false.`);\n let batchImages = $images;\n let reshapedTo4D = false;\n if ($images.rank === 3) {\n reshapedTo4D = true;\n batchImages = reshape($images, [1, $images.shape[0], $images.shape[1], $images.shape[2]]);\n }\n const [] = size;\n const inputs = { images: batchImages };\n const attrs = { alignCorners, halfPixelCenters, size };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(ResizeNearestNeighbor, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const resizeNearestNeighbor = /* @__PURE__ */ op({ resizeNearestNeighbor_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX25lYXJlc3RfbmVpZ2hib3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9pbWFnZS9yZXNpemVfbmVhcmVzdF9uZWlnaGJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxxQkFBcUIsRUFBMEQsTUFBTSxvQkFBb0IsQ0FBQztBQUlsSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQVMsc0JBQXNCLENBQzNCLE1BQW9CLEVBQUUsSUFBc0IsRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUNsRSxnQkFBZ0IsR0FBRyxLQUFLO0lBQzFCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFFM0UsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDeEMsR0FBRyxFQUFFLENBQUMsaUVBQWlFO1FBQ25FLFFBQVEsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDakIsR0FBRyxFQUFFLENBQ0QsbUVBQW1FO1FBQ25FLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUN4RCxHQUFHLEVBQUUsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQzlELElBQUksQ0FBQyxNQUFNLENBQ1AsZ0JBQWdCLEtBQUssS0FBSyxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQ3BELEdBQUcsRUFBRSxDQUFDLCtEQUErRDtRQUNqRSw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksV0FBVyxHQUFHLE9BQW1CLENBQUM7SUFDdEMsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDdEIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixXQUFXLEdBQUcsT0FBTyxDQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pFO0lBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBRWhCLE1BQU0sTUFBTSxHQUFnQyxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUNsRSxNQUFNLEtBQUssR0FDc0IsRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFFeEUsMERBQTBEO0lBQzFELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1oscUJBQXFCLEVBQUUsTUFBbUMsRUFDMUQsS0FBZ0MsQ0FBTSxDQUFDO0lBRXZELElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sQ0FBQztLQUN0RTtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxzQkFBc0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtSZXNpemVOZWFyZXN0TmVpZ2hib3IsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckF0dHJzLCBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4vLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9yZXNoYXBlJztcblxuLyoqXG4gKiBOZWFyZXN0TmVpZ2hib3IgcmVzaXplIGEgYmF0Y2ggb2YgM0QgaW1hZ2VzIHRvIGEgbmV3IHNoYXBlLlxuICpcbiAqIEBwYXJhbSBpbWFnZXMgVGhlIGltYWdlcywgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpcyBhc3N1bWVkLlxuICogQHBhcmFtIHNpemUgVGhlIG5ldyBzaGFwZSBgW25ld0hlaWdodCwgbmV3V2lkdGhdYCB0byByZXNpemUgdGhlXG4gKiAgICAgaW1hZ2VzIHRvLiBFYWNoIGNoYW5uZWwgaXMgcmVzaXplZCBpbmRpdmlkdWFsbHkuXG4gKiBAcGFyYW0gYWxpZ25Db3JuZXJzIERlZmF1bHRzIHRvIEZhbHNlLiBJZiB0cnVlLCByZXNjYWxlXG4gKiAgICAgaW5wdXQgYnkgYChuZXdfaGVpZ2h0IC0gMSkgLyAoaGVpZ2h0IC0gMSlgLCB3aGljaCBleGFjdGx5IGFsaWducyB0aGUgNFxuICogICAgIGNvcm5lcnMgb2YgaW1hZ2VzIGFuZCByZXNpemVkIGltYWdlcy4gSWYgZmFsc2UsIHJlc2NhbGUgYnlcbiAqICAgICBgbmV3X2hlaWdodCAvIGhlaWdodGAuIFRyZWF0IHNpbWlsYXJseSB0aGUgd2lkdGggZGltZW5zaW9uLlxuICogQHBhcmFtIGhhbGZQaXhlbENlbnRlcnMgRGVmYXVsdHMgdG8gYGZhbHNlYC4gV2hldGhlciB0byBhc3N1bWUgcGl4ZWxzIGFyZSBvZlxuICogICAgICBoYWxmIHRoZSBhY3R1YWwgZGltZW5zaW9ucywgYW5kIHlpZWxkIG1vcmUgYWNjdXJhdGUgcmVzaXplcy4gVGhpcyBmbGFnXG4gKiAgICAgIHdvdWxkIGFsc28gbWFrZSB0aGUgZmxvYXRpbmcgcG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIHRvcCBsZWZ0IHBpeGVsXG4gKiAgICAgIDAuNSwgMC41LlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ31cbiAqL1xuZnVuY3Rpb24gcmVzaXplTmVhcmVzdE5laWdoYm9yXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIGltYWdlczogVHxUZW5zb3JMaWtlLCBzaXplOiBbbnVtYmVyLCBudW1iZXJdLCBhbGlnbkNvcm5lcnMgPSBmYWxzZSxcbiAgICBoYWxmUGl4ZWxDZW50ZXJzID0gZmFsc2UpOiBUIHtcbiAgY29uc3QgJGltYWdlcyA9IGNvbnZlcnRUb1RlbnNvcihpbWFnZXMsICdpbWFnZXMnLCAncmVzaXplTmVhcmVzdE5laWdoYm9yJyk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2VzLnJhbmsgPT09IDMgfHwgJGltYWdlcy5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJlc2l6ZU5lYXJlc3ROZWlnaGJvcjogeCBtdXN0IGJlIHJhbmsgMyBvciA0LCBidXQgZ290IGAgK1xuICAgICAgICAgIGByYW5rICR7JGltYWdlcy5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBzaXplLmxlbmd0aCA9PT0gMixcbiAgICAgICgpID0+XG4gICAgICAgICAgYEVycm9yIGluIHJlc2l6ZU5lYXJlc3ROZWlnaGJvcjogbmV3IHNoYXBlIG11c3QgMkQsIGJ1dCBnb3Qgc2hhcGUgYCArXG4gICAgICAgICAgYCR7c2l6ZX0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGltYWdlcy5kdHlwZSA9PT0gJ2Zsb2F0MzInIHx8ICRpbWFnZXMuZHR5cGUgPT09ICdpbnQzMicsXG4gICAgICAoKSA9PiAnYGltYWdlc2AgbXVzdCBoYXZlIGBpbnQzMmAgb3IgYGZsb2F0MzJgIGFzIGR0eXBlJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaGFsZlBpeGVsQ2VudGVycyA9PT0gZmFsc2UgfHwgYWxpZ25Db3JuZXJzID09PSBmYWxzZSxcbiAgICAgICgpID0+IGBFcnJvciBpbiByZXNpemVOZWFyZXN0TmVpZ2hib3I6IElmIGhhbGZQaXhlbENlbnRlcnMgaXMgdHJ1ZSwgYCArXG4gICAgICAgICAgYGFsaWduQ29ybmVycyBtdXN0IGJlIGZhbHNlLmApO1xuICBsZXQgYmF0Y2hJbWFnZXMgPSAkaW1hZ2VzIGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG4gIGlmICgkaW1hZ2VzLnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIGJhdGNoSW1hZ2VzID0gcmVzaGFwZShcbiAgICAgICAgJGltYWdlcywgWzEsICRpbWFnZXMuc2hhcGVbMF0sICRpbWFnZXMuc2hhcGVbMV0sICRpbWFnZXMuc2hhcGVbMl1dKTtcbiAgfVxuICBjb25zdCBbXSA9IHNpemU7XG5cbiAgY29uc3QgaW5wdXRzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHMgPSB7aW1hZ2VzOiBiYXRjaEltYWdlc307XG4gIGNvbnN0IGF0dHJzOlxuICAgICAgUmVzaXplTmVhcmVzdE5laWdoYm9yQXR0cnMgPSB7YWxpZ25Db3JuZXJzLCBoYWxmUGl4ZWxDZW50ZXJzLCBzaXplfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlcyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICBSZXNpemVOZWFyZXN0TmVpZ2hib3IsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCByZXNpemVOZWFyZXN0TmVpZ2hib3IgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Jlc2l6ZU5lYXJlc3ROZWlnaGJvcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { tensor1d } from '../tensor1d';\nimport { op } from '../operation';\nimport { cast } from '../cast';\nimport { split } from '../split';\nimport { bincount } from '../bincount';\nimport { lessEqual } from '../less_equal';\nimport { greater } from '../greater';\nimport { sum } from '../sum';\nimport { add } from '../add';\nimport { mul } from '../mul';\nimport { div } from '../div';\nimport { sub } from '../sub';\nimport { round } from '../round';\nimport { where } from '../where';\nimport { fill } from '../fill';\nimport { slice } from '../slice';\nimport { range } from '../range';\nimport { tensor } from '../tensor';\nimport * as util from '../../util';\nimport { convertToTensor } from '../../tensor_util_env';\n/**\n * Performs image binarization with corresponding threshold\n * (depends on the method)value, which creates a binary image from a grayscale.\n * @param image 3d tensor of shape [imageHeight,imageWidth, depth],\n * where imageHeight and imageWidth must be positive.The image color\n * range should be [0, 255].\n * @param method Optional string from `'binary' | 'otsu'`\n * which specifies the method for thresholding. Defaults to 'binary'.\n * @param inverted Optional boolean whichspecifies\n * if colours should be inverted. Defaults to false.\n * @param threshValue Optional number which defines threshold value from 0 to 1.\n * Defaults to 0.5.\n * @return A 3d tensor of shape [imageHeight,imageWidth, depth], which\n * contains binarized image.\n */\nfunction threshold_(image, method = 'binary', inverted = false, threshValue = 0.5) {\n const $image = convertToTensor(image, 'image', 'threshold');\n /* 0.2989, 0.5870, 0.1140 are represent luma coefficients in CCIR601.\n Reference for converting between RGB and grayscale: https://en.wikipedia.org/wiki/Luma_%28video%29 */\n const RED_INTENCITY_COEF = 0.2989;\n const GREEN_INTENCITY_COEF = 0.5870;\n const BLUE_INTENCITY_COEF = 0.1140;\n const totalPixelsInImage = $image.shape[0] * $image.shape[1];\n let $threshold = mul(tensor1d([threshValue]), 255);\n let r, g, b, grayscale;\n util.assert($image.rank === 3, () => 'Error in threshold: image must be rank 3,' +\n `but got rank ${$image.rank}.`);\n util.assert($image.shape[2] === 3 || $image.shape[2] === 1, () => 'Error in threshold: ' +\n 'image color channel must be equal to 3 or 1' +\n `but got ${$image.shape[2]}.`);\n util.assert($image.dtype === 'int32' || $image.dtype === 'float32', () => 'Error in dtype: image dtype must be int32 or float32,' +\n `but got dtype ${$image.dtype}.`);\n util.assert(method === 'otsu' || method === 'binary', () => `Method must be binary or otsu, but was ${method}`);\n if ($image.shape[2] === 3) {\n [r, g, b] = split($image, [1, 1, 1], -1);\n const $r = mul(r, RED_INTENCITY_COEF);\n const $g = mul(g, GREEN_INTENCITY_COEF);\n const $b = mul(b, BLUE_INTENCITY_COEF);\n grayscale = add(add($r, $g), $b);\n }\n else {\n grayscale = image;\n }\n if (method === 'otsu') {\n const $histogram = bincount(cast(round(grayscale), 'int32'), tensor([]), 256);\n $threshold = otsu($histogram, totalPixelsInImage);\n }\n const invCondition = inverted ?\n lessEqual(grayscale, $threshold) : greater(grayscale, $threshold);\n const result = cast(mul(invCondition, 255), 'int32');\n return result;\n}\nfunction otsu(histogram, total) {\n let bestThresh = tensor1d([-1]);\n let bestInBetVar = tensor1d([0]);\n let cInBetVar = tensor1d([0]);\n let classFirst, classSecond, meanFirst, meanSec, weightForeground, weightBack;\n for (let index = 0; index < histogram.size - 1; index++) {\n classFirst = slice(histogram, 0, index + 1);\n classSecond = slice(histogram, index + 1);\n weightForeground = div(sum(classFirst), total);\n weightBack = div(sum(classSecond), total);\n const meanFirstDivA = sum(mul(classFirst, range(0, classFirst.size)));\n meanFirst = div(meanFirstDivA, sum(classFirst));\n const meanSecFill = fill(classSecond.shape, classFirst.size);\n const meanSecAdd = add(range(0, classSecond.size), meanSecFill);\n const meanSecMul = mul(classSecond, (meanSecAdd));\n meanSec = div(sum(meanSecMul), sum(classSecond));\n const cInBetVarSubA = sub(meanFirst, meanSec);\n const cInBetVarSubB = sub(meanFirst, meanSec);\n const cInBetVarMul = mul(weightForeground, weightBack);\n cInBetVar = mul(mul(cInBetVarMul, cInBetVarSubA), cInBetVarSubB);\n const condition = greater(cInBetVar, bestInBetVar);\n bestInBetVar = where(condition, cInBetVar, bestInBetVar);\n bestThresh = where(condition, tensor1d([index]), bestThresh);\n }\n return bestThresh;\n}\nexport const threshold = /* @__PURE__ */ op({ threshold_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZXNob2xkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvdGhyZXNob2xkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FB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O1FBRXpELFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FFaEU7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHsgVGVuc29yMUQsIFRlbnNvcjNEIH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7IHRlbnNvcjFkIH0gZnJvbSAnLi4vdGVuc29yMWQnO1xuaW1wb3J0IHsgVGVuc29yTGlrZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IG9wIH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7IGNhc3QgfSBmcm9tICcuLi9jYXN0JztcbmltcG9ydCB7IHNwbGl0IH0gZnJvbSAnLi4vc3BsaXQnO1xuaW1wb3J0IHsgYmluY291bnQgfSBmcm9tICcuLi9iaW5jb3VudCc7XG5pbXBvcnQgeyBsZXNzRXF1YWwgfSBmcm9tICcuLi9sZXNzX2VxdWFsJztcbmltcG9ydCB7IGdyZWF0ZXIgfSBmcm9tICcuLi9ncmVhdGVyJztcbmltcG9ydCB7IHN1bSB9IGZyb20gJy4uL3N1bSc7XG5pbXBvcnQgeyBhZGQgfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0IHsgbXVsIH0gZnJvbSAnLi4vbXVsJztcbmltcG9ydCB7IGRpdiB9IGZyb20gJy4uL2Rpdic7XG5pbXBvcnQgeyBzdWIgfSBmcm9tICcuLi9zdWInO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tICcuLi9yb3VuZCc7XG5pbXBvcnQgeyB3aGVyZSB9IGZyb20gJy4uL3doZXJlJztcbmltcG9ydCB7IGZpbGwgfSBmcm9tICcuLi9maWxsJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4uL3NsaWNlJztcbmltcG9ydCB7IHJhbmdlIH0gZnJvbSAnLi4vcmFuZ2UnO1xuaW1wb3J0IHsgdGVuc29yIH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBjb252ZXJ0VG9UZW5zb3IgfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuXG4vKipcbiAqIFBlcmZvcm1zIGltYWdlIGJpbmFyaXphdGlvbiB3aXRoIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkXG4gKiAoZGVwZW5kcyBvbiB0aGUgbWV0aG9kKXZhbHVlLCB3aGljaCBjcmVhdGVzIGEgYmluYXJ5IGltYWdlIGZyb20gYSBncmF5c2NhbGUuXG4gKiBAcGFyYW0gaW1hZ2UgM2QgdGVuc29yIG9mIHNoYXBlIFtpbWFnZUhlaWdodCxpbWFnZVdpZHRoLCBkZXB0aF0sXG4gKiB3aGVyZSBpbWFnZUhlaWdodCBhbmQgaW1hZ2VXaWR0aCBtdXN0IGJlIHBvc2l0aXZlLlRoZSBpbWFnZSBjb2xvclxuICogcmFuZ2Ugc2hvdWxkIGJlIFswLCAyNTVdLlxuICogQHBhcmFtIG1ldGhvZCBPcHRpb25hbCBzdHJpbmcgZnJvbSBgJ2JpbmFyeScgfCAnb3RzdSdgXG4gKiB3aGljaCBzcGVjaWZpZXMgdGhlIG1ldGhvZCBmb3IgdGhyZXNob2xkaW5nLiBEZWZhdWx0cyB0byAnYmluYXJ5Jy5cbiAqIEBwYXJhbSBpbnZlcnRlZCBPcHRpb25hbCBib29sZWFuIHdoaWNoc3BlY2lmaWVzXG4gKiBpZiBjb2xvdXJzIHNob3VsZCBiZSBpbnZlcnRlZC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcGFyYW0gdGhyZXNoVmFsdWUgT3B0aW9uYWwgbnVtYmVyIHdoaWNoIGRlZmluZXMgdGhyZXNob2xkIHZhbHVlIGZyb20gMCB0byAxLlxuICogRGVmYXVsdHMgdG8gMC41LlxuICogQHJldHVybiBBIDNkIHRlbnNvciBvZiBzaGFwZSBbaW1hZ2VIZWlnaHQsaW1hZ2VXaWR0aCwgZGVwdGhdLCB3aGljaFxuICogY29udGFpbnMgYmluYXJpemVkIGltYWdlLlxuICovXG5cbmZ1bmN0aW9uIHRocmVzaG9sZF8oXG4gICAgaW1hZ2U6IFRlbnNvcjNEIHwgVGVuc29yTGlrZSxcbiAgICBtZXRob2QgPSAnYmluYXJ5JyxcbiAgICBpbnZlcnRlZCA9IGZhbHNlLFxuICAgIHRocmVzaFZhbHVlID0gMC41XG4pOiBUZW5zb3IzRCB7XG4gICAgY29uc3QgJGltYWdlID0gY29udmVydFRvVGVuc29yKGltYWdlLCAnaW1hZ2UnLCAndGhyZXNob2xkJyk7XG5cbiAgICAvKiAwLjI5ODksIDAuNTg3MCwgMC4xMTQwIGFyZSByZXByZXNlbnQgbHVtYSBjb2VmZmljaWVudHMgaW4gQ0NJUjYwMS5cblx0UmVmZXJlbmNlIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gUkdCIGFuZCBncmF5c2NhbGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0x1bWFfJTI4dmlkZW8lMjkgICovXG5cbiAgICBjb25zdCBSRURfSU5URU5DSVRZX0NPRUYgPSAwLjI5ODk7XG4gICAgY29uc3QgR1JFRU5fSU5URU5DSVRZX0NPRUYgPSAwLjU4NzA7XG4gICAgY29uc3QgQkxVRV9JTlRFTkNJVFlfQ09FRiA9IDAuMTE0MDtcbiAgICBjb25zdCB0b3RhbFBpeGVsc0luSW1hZ2UgPSAkaW1hZ2Uuc2hhcGVbMF0gKiAkaW1hZ2Uuc2hhcGVbMV07XG5cbiAgICBsZXQgJHRocmVzaG9sZCA9IG11bCh0ZW5zb3IxZChbdGhyZXNoVmFsdWVdKSwgMjU1KTtcbiAgICBsZXQgciwgZywgYiwgZ3JheXNjYWxlO1xuXG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICRpbWFnZS5yYW5rID09PSAzLFxuICAgICAgICAoKSA9PiAnRXJyb3IgaW4gdGhyZXNob2xkOiBpbWFnZSBtdXN0IGJlIHJhbmsgMywnICtcbiAgICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskaW1hZ2UucmFua30uYCk7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgJGltYWdlLnNoYXBlWzJdID09PSAzIHx8ICRpbWFnZS5zaGFwZVsyXT09PSAxLFxuICAgICAgICAoKSA9PiAnRXJyb3IgaW4gdGhyZXNob2xkOiAnICtcbiAgICAgICAgICAgICdpbWFnZSBjb2xvciBjaGFubmVsIG11c3QgYmUgZXF1YWwgdG8gMyBvciAxJyArXG4gICAgICAgICAgICBgYnV0IGdvdCAkeyRpbWFnZS5zaGFwZVsyXX0uYCk7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICRpbWFnZS5kdHlwZSA9PT0gJ2ludDMyJyB8fCAkaW1hZ2UuZHR5cGUgPT09ICdmbG9hdDMyJyxcbiAgICAgICgpID0+ICdFcnJvciBpbiBkdHlwZTogaW1hZ2UgZHR5cGUgbXVzdCBiZSBpbnQzMiBvciBmbG9hdDMyLCcgK1xuICAgICAgICAgIGBidXQgZ290IGR0eXBlICR7JGltYWdlLmR0eXBlfS5gKTtcblxuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgbWV0aG9kID09PSAnb3RzdScgfHwgbWV0aG9kID09PSAnYmluYXJ5JyxcbiAgICAgICgpID0+IGBNZXRob2QgbXVzdCBiZSBiaW5hcnkgb3Igb3RzdSwgYnV0IHdhcyAke21ldGhvZH1gKTtcblxuICAgIGlmICgkaW1hZ2Uuc2hhcGVbMl0gPT09IDMpIHtcbiAgICAgICAgW3IsIGcsIGJdID0gc3BsaXQoJGltYWdlLCBbMSwgMSwgMV0sIC0xKTtcbiAgICAgICAgY29uc3QgJHIgPSBtdWwocixSRURfSU5URU5DSVRZX0NPRUYpO1xuICAgICAgICBjb25zdCAkZyA9IG11bChnLEdSRUVOX0lOVEVOQ0lUWV9DT0VGKTtcbiAgICAgICAgY29uc3QgJGIgPSBtdWwoYixCTFVFX0lOVEVOQ0lUWV9DT0VGKTtcbiAgICAgICAgZ3JheXNjYWxlID0gYWRkKGFkZCgkciwgJGcpLCAkYik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ3JheXNjYWxlID0gaW1hZ2U7XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ290c3UnKSB7XG4gICAgICAgIGNvbnN0ICRoaXN0b2dyYW0gPSBiaW5jb3VudChjYXN0KHJvdW5kKGdyYXlzY2FsZSksICdpbnQzMicpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgdGVuc29yKFtdKSxcbiAgICAgICAgICAgIDI1Nik7XG4gICAgICAgICR0aHJlc2hvbGQgPSBvdHN1KCRoaXN0b2dyYW0sIHRvdGFsUGl4ZWxzSW5JbWFnZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW52Q29uZGl0aW9uID0gaW52ZXJ0ZWQgP1xuICAgICAgICBsZXNzRXF1YWwoZ3JheXNjYWxlLCAkdGhyZXNob2xkKSA6IGdyZWF0ZXIoZ3JheXNjYWxlLCAkdGhyZXNob2xkKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhc3QobXVsKGludkNvbmRpdGlvbiwyNTUpLCAnaW50MzInKTtcblxuICAgIHJldHVybiByZXN1bHQgYXMgVGVuc29yM0Q7XG59XG5cbmZ1bmN0aW9uIG90c3UoaGlzdG9ncmFtOiBUZW5zb3IxRCwgdG90YWw6IG51bWJlcik6VGVuc29yMUQge1xuXG4gICAgbGV0IGJlc3RUaHJlc2ggPSB0ZW5zb3IxZChbLTFdKTtcbiAgICBsZXQgYmVzdEluQmV0VmFyID0gdGVuc29yMWQoWzBdKTtcbiAgICBsZXQgY0luQmV0VmFyID0gdGVuc29yMWQoWzBdKTtcbiAgICBsZXQgY2xhc3NGaXJzdCwgY2xhc3NTZWNvbmQsIG1lYW5GaXJzdCxcbiAgICAgICAgbWVhblNlYywgd2VpZ2h0Rm9yZWdyb3VuZCwgd2VpZ2h0QmFjaztcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBoaXN0b2dyYW0uc2l6ZS0xOyBpbmRleCsrKSB7XG5cbiAgICAgICAgY2xhc3NGaXJzdCA9IHNsaWNlKGhpc3RvZ3JhbSwgMCwgaW5kZXggKyAxKTtcblxuICAgICAgICBjbGFzc1NlY29uZCA9IHNsaWNlKGhpc3RvZ3JhbSxpbmRleCArIDEpO1xuXG4gICAgICAgIHdlaWdodEZvcmVncm91bmQgPSBkaXYoc3VtKGNsYXNzRmlyc3QpLHRvdGFsKTtcblxuICAgICAgICB3ZWlnaHRCYWNrID0gZGl2KHN1bShjbGFzc1NlY29uZCksdG90YWwpO1xuXG4gICAgICAgIGNvbnN0IG1lYW5GaXJzdERpdkEgPSBzdW0obXVsKGNsYXNzRmlyc3QsIHJhbmdlKDAsIGNsYXNzRmlyc3Quc2l6ZSkpKTtcblxuICAgICAgICBtZWFuRmlyc3QgPSBkaXYobWVhbkZpcnN0RGl2QSwgc3VtKGNsYXNzRmlyc3QpICk7XG5cbiAgICAgICAgY29uc3QgbWVhblNlY0ZpbGwgPSBmaWxsKGNsYXNzU2Vjb25kLnNoYXBlLCBjbGFzc0ZpcnN0LnNpemUpO1xuICAgICAgICBjb25zdCBtZWFuU2VjQWRkID0gYWRkKHJhbmdlKDAsY2xhc3NTZWNvbmQuc2l6ZSksbWVhblNlY0ZpbGwpO1xuICAgICAgICBjb25zdCBtZWFuU2VjTXVsID0gbXVsKGNsYXNzU2Vjb25kLCAobWVhblNlY0FkZCkpO1xuICAgICAgICBtZWFuU2VjID0gZGl2KHN1bShtZWFuU2VjTXVsKSwgc3VtKGNsYXNzU2Vjb25kKSk7XG5cbiAgICAgICAgY29uc3QgY0luQmV0VmFyU3ViQSA9IHN1YihtZWFuRmlyc3QsIG1lYW5TZWMpO1xuICAgICAgICBjb25zdCBjSW5CZXRWYXJTdWJCID0gc3ViKG1lYW5GaXJzdCwgbWVhblNlYyk7XG4gICAgICAgIGNvbnN0IGNJbkJldFZhck11bCA9IG11bCh3ZWlnaHRGb3JlZ3JvdW5kLCB3ZWlnaHRCYWNrKTtcbiAgICAgICAgY0luQmV0VmFyID0gbXVsKG11bChjSW5CZXRWYXJNdWwsY0luQmV0VmFyU3ViQSksIGNJbkJldFZhclN1YkIpO1xuXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdyZWF0ZXIoY0luQmV0VmFyLCBiZXN0SW5CZXRWYXIpO1xuXG4gICAgICAgIGJlc3RJbkJldFZhciA9IHdoZXJlKGNvbmRpdGlvbiwgY0luQmV0VmFyLCBiZXN0SW5CZXRWYXIpO1xuXG4gICAgICAgIGJlc3RUaHJlc2ggPSB3aGVyZShjb25kaXRpb24sIHRlbnNvcjFkKFtpbmRleF0pLCBiZXN0VGhyZXNoKTtcblxuICAgIH1cbiAgICByZXR1cm4gYmVzdFRocmVzaDtcbn1cblxuZXhwb3J0IGNvbnN0IHRocmVzaG9sZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7IHRocmVzaG9sZF8gfSk7XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { Transform } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\n/**\n * Applies the given transform(s) to the image(s).\n *\n * @param image 4d tensor of shape `[batch, imageHeight, imageWidth, depth]`.\n * @param transforms Projective transform matrix/matrices. A tensor1d of length\n * 8 or tensor of size N x 8. If one row of transforms is [a0, a1, a2, b0,\n * b1, b2, c0, c1], then it maps the output point (x, y) to a transformed\n * input point (x', y') = ((a0 x + a1 y + a2) / k, (b0 x + b1 y + b2) / k),\n * where k = c0 x + c1 y + 1. The transforms are inverted compared to the\n * transform mapping input points to output points.\n * @param interpolation Interpolation mode.\n * Supported values: 'nearest', 'bilinear'. Default to 'nearest'.\n * @param fillMode Points outside the boundaries of the input are filled\n * according to the given mode, one of 'constant', 'reflect', 'wrap',\n * 'nearest'. Default to 'constant'.\n * 'reflect': (d c b a | a b c d | d c b a ) The input is extended by\n * reflecting about the edge of the last pixel.\n * 'constant': (k k k k | a b c d | k k k k) The input is extended by\n * filling all values beyond the edge with the same constant value k.\n * 'wrap': (a b c d | a b c d | a b c d) The input is extended by\n * wrapping around to the opposite edge.\n * 'nearest': (a a a a | a b c d | d d d d) The input is extended by\n * the nearest pixel.\n * @param fillValue A float represents the value to be filled outside the\n * boundaries when fillMode is 'constant'.\n * @param Output dimension after the transform, [height, width]. If undefined,\n * output is the same size as input image.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction transform_(image, transforms, interpolation = 'nearest', fillMode = 'constant', fillValue = 0, outputShape) {\n const $image = convertToTensor(image, 'image', 'transform', 'float32');\n const $transforms = convertToTensor(transforms, 'transforms', 'transform', 'float32');\n util.assert($image.rank === 4, () => 'Error in transform: image must be rank 4,' +\n `but got rank ${$image.rank}.`);\n util.assert($transforms.rank === 2 &&\n ($transforms.shape[0] === $image.shape[0] ||\n $transforms.shape[0] === 1) &&\n $transforms.shape[1] === 8, () => `Error in transform: Input transform should be batch x 8 or 1 x 8`);\n util.assert(outputShape == null || outputShape.length === 2, () => 'Error in transform: outputShape must be [height, width] or null, ' +\n `but got ${outputShape}.`);\n const inputs = { image: $image, transforms: $transforms };\n const attrs = { interpolation, fillMode, fillValue, outputShape };\n return ENGINE.runKernel(Transform, inputs, attrs);\n}\nexport const transform = /* @__PURE__ */ op({ transform_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvdHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLFNBQVMsRUFBa0MsTUFBTSxvQkFBb0IsQ0FBQztBQUk5RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxTQUFTLFVBQVUsQ0FDZixLQUEwQixFQUFFLFVBQStCLEVBQzNELGdCQUFzQyxTQUFTLEVBQy9DLFdBQWtELFVBQVUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUMzRSxXQUE4QjtJQUNoQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkUsTUFBTSxXQUFXLEdBQ2IsZUFBZSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRFLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2pCLEdBQUcsRUFBRSxDQUFDLDJDQUEyQztRQUM3QyxnQkFBZ0IsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDbEIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUM5QixHQUFHLEVBQUUsQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO0lBRTlFLElBQUksQ0FBQyxNQUFNLENBQ1AsV0FBVyxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDL0MsR0FBRyxFQUFFLENBQ0QsbUVBQW1FO1FBQ25FLFdBQVcsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUVuQyxNQUFNLE1BQU0sR0FBb0IsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUN6RSxNQUFNLEtBQUssR0FDVSxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBQyxDQUFDO0lBRXZFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsU0FBUyxFQUFFLE1BQW1DLEVBQzlDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge1RyYW5zZm9ybSwgVHJhbnNmb3JtQXR0cnMsIFRyYW5zZm9ybUlucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi8uLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IyRCwgVGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZ2l2ZW4gdHJhbnNmb3JtKHMpIHRvIHRoZSBpbWFnZShzKS5cbiAqXG4gKiBAcGFyYW0gaW1hZ2UgNGQgdGVuc29yIG9mIHNoYXBlIGBbYmF0Y2gsIGltYWdlSGVpZ2h0LCBpbWFnZVdpZHRoLCBkZXB0aF1gLlxuICogQHBhcmFtIHRyYW5zZm9ybXMgUHJvamVjdGl2ZSB0cmFuc2Zvcm0gbWF0cml4L21hdHJpY2VzLiBBIHRlbnNvcjFkIG9mIGxlbmd0aFxuICogICAgIDggb3IgdGVuc29yIG9mIHNpemUgTiB4IDguIElmIG9uZSByb3cgb2YgdHJhbnNmb3JtcyBpcyBbYTAsIGExLCBhMiwgYjAsXG4gKiAgICAgYjEsIGIyLCBjMCwgYzFdLCB0aGVuIGl0IG1hcHMgdGhlIG91dHB1dCBwb2ludCAoeCwgeSkgdG8gYSB0cmFuc2Zvcm1lZFxuICogICAgIGlucHV0IHBvaW50ICh4JywgeScpID0gKChhMCB4ICsgYTEgeSArIGEyKSAvIGssIChiMCB4ICsgYjEgeSArIGIyKSAvIGspLFxuICogICAgIHdoZXJlIGsgPSBjMCB4ICsgYzEgeSArIDEuIFRoZSB0cmFuc2Zvcm1zIGFyZSBpbnZlcnRlZCBjb21wYXJlZCB0byB0aGVcbiAqICAgICB0cmFuc2Zvcm0gbWFwcGluZyBpbnB1dCBwb2ludHMgdG8gb3V0cHV0IHBvaW50cy5cbiAqIEBwYXJhbSBpbnRlcnBvbGF0aW9uIEludGVycG9sYXRpb24gbW9kZS5cbiAqICAgICBTdXBwb3J0ZWQgdmFsdWVzOiAnbmVhcmVzdCcsICdiaWxpbmVhcicuIERlZmF1bHQgdG8gJ25lYXJlc3QnLlxuICogQHBhcmFtIGZpbGxNb2RlIFBvaW50cyBvdXRzaWRlIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBpbnB1dCBhcmUgZmlsbGVkXG4gKiAgICAgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBtb2RlLCBvbmUgb2YgJ2NvbnN0YW50JywgJ3JlZmxlY3QnLCAnd3JhcCcsXG4gKiAgICAgJ25lYXJlc3QnLiBEZWZhdWx0IHRvICdjb25zdGFudCcuXG4gKiAgICAgJ3JlZmxlY3QnOiAoZCBjIGIgYSB8IGEgYiBjIGQgfCBkIGMgYiBhICkgVGhlIGlucHV0IGlzIGV4dGVuZGVkIGJ5XG4gKiAgICAgcmVmbGVjdGluZyBhYm91dCB0aGUgZWRnZSBvZiB0aGUgbGFzdCBwaXhlbC5cbiAqICAgICAnY29uc3RhbnQnOiAoayBrIGsgayB8IGEgYiBjIGQgfCBrIGsgayBrKSBUaGUgaW5wdXQgaXMgZXh0ZW5kZWQgYnlcbiAqICAgICBmaWxsaW5nIGFsbCB2YWx1ZXMgYmV5b25kIHRoZSBlZGdlIHdpdGggdGhlIHNhbWUgY29uc3RhbnQgdmFsdWUgay5cbiAqICAgICAnd3JhcCc6IChhIGIgYyBkIHwgYSBiIGMgZCB8IGEgYiBjIGQpIFRoZSBpbnB1dCBpcyBleHRlbmRlZCBieVxuICogICAgIHdyYXBwaW5nIGFyb3VuZCB0byB0aGUgb3Bwb3NpdGUgZWRnZS5cbiAqICAgICAnbmVhcmVzdCc6IChhIGEgYSBhIHwgYSBiIGMgZCB8IGQgZCBkIGQpIFRoZSBpbnB1dCBpcyBleHRlbmRlZCBieVxuICogICAgIHRoZSBuZWFyZXN0IHBpeGVsLlxuICogQHBhcmFtIGZpbGxWYWx1ZSBBIGZsb2F0IHJlcHJlc2VudHMgdGhlIHZhbHVlIHRvIGJlIGZpbGxlZCBvdXRzaWRlIHRoZVxuICogICAgIGJvdW5kYXJpZXMgd2hlbiBmaWxsTW9kZSBpcyAnY29uc3RhbnQnLlxuICogQHBhcmFtIE91dHB1dCBkaW1lbnNpb24gYWZ0ZXIgdGhlIHRyYW5zZm9ybSwgW2hlaWdodCwgd2lkdGhdLiBJZiB1bmRlZmluZWQsXG4gKiAgICAgb3V0cHV0IGlzIHRoZSBzYW1lIHNpemUgYXMgaW5wdXQgaW1hZ2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1fKFxuICAgIGltYWdlOiBUZW5zb3I0RHxUZW5zb3JMaWtlLCB0cmFuc2Zvcm1zOiBUZW5zb3IyRHxUZW5zb3JMaWtlLFxuICAgIGludGVycG9sYXRpb246ICduZWFyZXN0J3wnYmlsaW5lYXInID0gJ25lYXJlc3QnLFxuICAgIGZpbGxNb2RlOiAnY29uc3RhbnQnfCdyZWZsZWN0J3wnd3JhcCd8J25lYXJlc3QnID0gJ2NvbnN0YW50JywgZmlsbFZhbHVlID0gMCxcbiAgICBvdXRwdXRTaGFwZT86IFtudW1iZXIsIG51bWJlcl0pOiBUZW5zb3I0RCB7XG4gIGNvbnN0ICRpbWFnZSA9IGNvbnZlcnRUb1RlbnNvcihpbWFnZSwgJ2ltYWdlJywgJ3RyYW5zZm9ybScsICdmbG9hdDMyJyk7XG4gIGNvbnN0ICR0cmFuc2Zvcm1zID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcih0cmFuc2Zvcm1zLCAndHJhbnNmb3JtcycsICd0cmFuc2Zvcm0nLCAnZmxvYXQzMicpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGltYWdlLnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gdHJhbnNmb3JtOiBpbWFnZSBtdXN0IGJlIHJhbmsgNCwnICtcbiAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JGltYWdlLnJhbmt9LmApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHRyYW5zZm9ybXMucmFuayA9PT0gMiAmJlxuICAgICAgICAgICgkdHJhbnNmb3Jtcy5zaGFwZVswXSA9PT0gJGltYWdlLnNoYXBlWzBdIHx8XG4gICAgICAgICAgICR0cmFuc2Zvcm1zLnNoYXBlWzBdID09PSAxKSAmJlxuICAgICAgICAgICR0cmFuc2Zvcm1zLnNoYXBlWzFdID09PSA4LFxuICAgICAgKCkgPT4gYEVycm9yIGluIHRyYW5zZm9ybTogSW5wdXQgdHJhbnNmb3JtIHNob3VsZCBiZSBiYXRjaCB4IDggb3IgMSB4IDhgKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIG91dHB1dFNoYXBlID09IG51bGwgfHwgb3V0cHV0U2hhcGUubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT5cbiAgICAgICAgICAnRXJyb3IgaW4gdHJhbnNmb3JtOiBvdXRwdXRTaGFwZSBtdXN0IGJlIFtoZWlnaHQsIHdpZHRoXSBvciBudWxsLCAnICtcbiAgICAgICAgICBgYnV0IGdvdCAke291dHB1dFNoYXBlfS5gKTtcblxuICBjb25zdCBpbnB1dHM6IFRyYW5zZm9ybUlucHV0cyA9IHtpbWFnZTogJGltYWdlLCB0cmFuc2Zvcm1zOiAkdHJhbnNmb3Jtc307XG4gIGNvbnN0IGF0dHJzOlxuICAgICAgVHJhbnNmb3JtQXR0cnMgPSB7aW50ZXJwb2xhdGlvbiwgZmlsbE1vZGUsIGZpbGxWYWx1ZSwgb3V0cHV0U2hhcGV9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgVHJhbnNmb3JtLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7dHJhbnNmb3JtX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assert } from '../../util';\nimport { greaterEqual } from '../greater_equal';\nimport { less } from '../less';\nimport { lessEqual } from '../less_equal';\nimport { logicalAnd } from '../logical_and';\nimport { minimum } from '../minimum';\nimport { neg } from '../neg';\nimport { op } from '../operation';\nimport { range } from '../range';\nimport { reshape } from '../reshape';\nimport { stack } from '../stack';\nimport { sub } from '../sub';\nimport { unstack } from '../unstack';\nimport { where } from '../where';\nimport { zeros } from '../zeros';\n/**\n * Copy a tensor setting everything outside a central band in each innermost\n * matrix to zero.\n *\n * The band part is computed as follows: Assume input has `k` dimensions\n * `[I, J, K, ..., M, N]`, then the output is a tensor with the same shape where\n * `band[i, j, k, ..., m, n] = in_band(m, n) * input[i, j, k, ..., m, n]`.\n * The indicator function\n * `in_band(m, n) = (num_lower < 0 || (m-n) <= num_lower)`\n * `&& (num_upper < 0 || (n-m) <= num_upper)`\n *\n * ```js\n * const x = tf.tensor2d([[ 0, 1, 2, 3],\n * [-1, 0, 1, 2],\n * [-2, -1, 0, 1],\n * [-3, -2, -1, 0]]);\n * let y = tf.linalg.bandPart(x, 1, -1);\n * y.print(); // [[ 0, 1, 2, 3],\n * // [-1, 0, 1, 2],\n * // [ 0, -1, 0, 1],\n * // [ 0, 0 , -1, 0]]\n * let z = tf.linalg.bandPart(x, 2, 1);\n * z.print(); // [[ 0, 1, 0, 0],\n * // [-1, 0, 1, 0],\n * // [-2, -1, 0, 1],\n * // [ 0, -2, -1, 0]]\n * ```\n *\n * @param x Rank `k` tensor\n * @param numLower Number of subdiagonals to keep.\n * If negative, keep entire lower triangle.\n * @param numUpper Number of subdiagonals to keep.\n * If negative, keep entire upper triangle.\n * @returns Rank `k` tensor of the same shape as input.\n * The extracted banded tensor.\n *\n * @doc {heading:'Operations', subheading:'Linear Algebra', namespace:'linalg'}\n */\nfunction bandPart_(a, numLower, numUpper) {\n const $a = convertToTensor(a, 'a', 'bandPart');\n assert($a.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${$a.rank}.`);\n const shape = $a.shape;\n const [M, N] = $a.shape.slice(-2);\n let $numLower;\n let $numUpper;\n if (typeof numLower === 'number') {\n assert(numLower % 1 === 0, () => `bandPart(): numLower must be an integer, got ${numLower}.`);\n assert(numLower <= M, () => `bandPart(): numLower (${numLower})` +\n ` must not be greater than the number of rows (${M}).`);\n $numLower =\n convertToTensor(numLower < 0 ? M : numLower, 'numLower', 'bandPart');\n }\n else {\n assert(numLower.dtype === 'int32', () => `bandPart(): numLower's dtype must be an int32.`);\n // If numLower is a Scalar, checking `numLower <= M` could hurt performance,\n // but minimum(numLower, M) could avoid unexpected results.\n $numLower = where(less(numLower, 0), M, minimum(numLower, M));\n }\n if (typeof numUpper === 'number') {\n assert(numUpper % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${numUpper}.`);\n assert(numUpper <= N, () => `bandPart(): numUpper (${numUpper})` +\n ` must not be greater than the number of columns (${N}).`);\n $numUpper =\n convertToTensor(numUpper < 0 ? N : numUpper, 'numUpper', 'bandPart');\n }\n else {\n assert(numUpper.dtype === 'int32', () => `bandPart(): numUpper's dtype must be an int32.`);\n $numUpper = where(less(numUpper, 0), N, minimum(numUpper, N));\n }\n const i = reshape(range(0, M, 1, 'int32'), [-1, 1]);\n const j = range(0, N, 1, 'int32');\n const ij = sub(i, j);\n const inBand = logicalAnd(lessEqual(ij, $numLower), greaterEqual(ij, neg($numUpper)));\n const zero = zeros([M, N], $a.dtype);\n return reshape(stack(unstack(reshape($a, [-1, M, N]))\n .map(mat => where(inBand, mat, zero))), shape);\n}\nexport const bandPart = /* @__PURE__ */ op({ bandPart_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuZF9wYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbGluYWxnL2JhbmRfcGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVsQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBQ0gsU0FBUyxTQUFTLENBQ2Qs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LFlBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzRSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJDLE9BQU8sT0FBTyxDQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDaEQsS0FBSyxDQUFNLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtTY2FsYXIsIFRlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7Z3JlYXRlckVxdWFsfSBmcm9tICcuLi9ncmVhdGVyX2VxdWFsJztcbmltcG9ydCB7bGVzc30gZnJvbSAnLi4vbGVzcyc7XG5pbXBvcnQge2xlc3NFcXVhbH0gZnJvbSAnLi4vbGVzc19lcXVhbCc7XG5pbXBvcnQge2xvZ2ljYWxBbmR9IGZyb20gJy4uL2xvZ2ljYWxfYW5kJztcbmltcG9ydCB7bWluaW11bX0gZnJvbSAnLi4vbWluaW11bSc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi4vbmVnJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3JhbmdlfSBmcm9tICcuLi9yYW5nZSc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4uL3Jlc2hhcGUnO1xuaW1wb3J0IHtzdGFja30gZnJvbSAnLi4vc3RhY2snO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4uL3N1Yic7XG5pbXBvcnQge3Vuc3RhY2t9IGZyb20gJy4uL3Vuc3RhY2snO1xuaW1wb3J0IHt3aGVyZX0gZnJvbSAnLi4vd2hlcmUnO1xuaW1wb3J0IHt6ZXJvc30gZnJvbSAnLi4vemVyb3MnO1xuXG4vKipcbiAqIENvcHkgYSB0ZW5zb3Igc2V0dGluZyBldmVyeXRoaW5nIG91dHNpZGUgYSBjZW50cmFsIGJhbmQgaW4gZWFjaCBpbm5lcm1vc3RcbiAqIG1hdHJpeCB0byB6ZXJvLlxuICpcbiAqIFRoZSBiYW5kIHBhcnQgaXMgY29tcHV0ZWQgYXMgZm9sbG93czogQXNzdW1lIGlucHV0IGhhcyBga2AgZGltZW5zaW9uc1xuICogYFtJLCBKLCBLLCAuLi4sIE0sIE5dYCwgdGhlbiB0aGUgb3V0cHV0IGlzIGEgdGVuc29yIHdpdGggdGhlIHNhbWUgc2hhcGUgd2hlcmVcbiAqIGBiYW5kW2ksIGosIGssIC4uLiwgbSwgbl0gPSBpbl9iYW5kKG0sIG4pICogaW5wdXRbaSwgaiwgaywgLi4uLCBtLCBuXWAuXG4gKiBUaGUgaW5kaWNhdG9yIGZ1bmN0aW9uXG4gKiBgaW5fYmFuZChtLCBuKSA9IChudW1fbG93ZXIgPCAwIHx8IChtLW4pIDw9IG51bV9sb3dlcilgXG4gKiBgJiYgKG51bV91cHBlciA8IDAgfHwgKG4tbSkgPD0gbnVtX3VwcGVyKWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjJkKFtbIDAsICAxLCAgMiwgM10sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFstMSwgIDAsICAxLCAyXSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgWy0yLCAtMSwgIDAsIDFdLFxuICogICAgICAgICAgICAgICAgICAgICAgICBbLTMsIC0yLCAtMSwgMF1dKTtcbiAqIGxldCB5ID0gdGYubGluYWxnLmJhbmRQYXJ0KHgsIDEsIC0xKTtcbiAqIHkucHJpbnQoKTsgLy8gW1sgMCwgIDEsICAyLCAzXSxcbiAqICAgICAgICAgICAgLy8gIFstMSwgIDAsICAxLCAyXSxcbiAqICAgICAgICAgICAgLy8gIFsgMCwgLTEsICAwLCAxXSxcbiAqICAgICAgICAgICAgLy8gIFsgMCwgMCAsIC0xLCAwXV1cbiAqIGxldCB6ID0gdGYubGluYWxnLmJhbmRQYXJ0KHgsIDIsIDEpO1xuICogei5wcmludCgpOyAvLyBbWyAwLCAgMSwgIDAsIDBdLFxuICogICAgICAgICAgICAvLyAgWy0xLCAgMCwgIDEsIDBdLFxuICogICAgICAgICAgICAvLyAgWy0yLCAtMSwgIDAsIDFdLFxuICogICAgICAgICAgICAvLyAgWyAwLCAtMiwgLTEsIDBdXVxuICogYGBgXG4gKlxuICogQHBhcmFtIHggUmFuayBga2AgdGVuc29yXG4gKiBAcGFyYW0gbnVtTG93ZXIgTnVtYmVyIG9mIHN1YmRpYWdvbmFscyB0byBrZWVwLlxuICogICBJZiBuZWdhdGl2ZSwga2VlcCBlbnRpcmUgbG93ZXIgdHJpYW5nbGUuXG4gKiBAcGFyYW0gbnVtVXBwZXIgTnVtYmVyIG9mIHN1YmRpYWdvbmFscyB0byBrZWVwLlxuICogICBJZiBuZWdhdGl2ZSwga2VlcCBlbnRpcmUgdXBwZXIgdHJpYW5nbGUuXG4gKiBAcmV0dXJucyBSYW5rIGBrYCB0ZW5zb3Igb2YgdGhlIHNhbWUgc2hhcGUgYXMgaW5wdXQuXG4gKiAgIFRoZSBleHRyYWN0ZWQgYmFuZGVkIHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOidPcGVyYXRpb25zJywgc3ViaGVhZGluZzonTGluZWFyIEFsZ2VicmEnLCBuYW1lc3BhY2U6J2xpbmFsZyd9XG4gKi9cbmZ1bmN0aW9uIGJhbmRQYXJ0XzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUfFRlbnNvckxpa2UsIG51bUxvd2VyOiBudW1iZXJ8U2NhbGFyLCBudW1VcHBlcjogbnVtYmVyfFNjYWxhcik6IFQge1xuICBjb25zdCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdiYW5kUGFydCcpO1xuICBhc3NlcnQoXG4gICAgICAkYS5yYW5rID49IDIsXG4gICAgICAoKSA9PiBgYmFuZFBhcnQoKTogUmFuayBtdXN0IGJlIGF0IGxlYXN0IDIsIGdvdCAkeyRhLnJhbmt9LmApO1xuXG4gIGNvbnN0IHNoYXBlID0gJGEuc2hhcGU7XG4gIGNvbnN0IFtNLCBOXSA9ICRhLnNoYXBlLnNsaWNlKC0yKTtcblxuICBsZXQgJG51bUxvd2VyOiBTY2FsYXI7XG4gIGxldCAkbnVtVXBwZXI6IFNjYWxhcjtcbiAgaWYgKHR5cGVvZiBudW1Mb3dlciA9PT0gJ251bWJlcicpIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIG51bUxvd2VyICUgMSA9PT0gMCxcbiAgICAgICAgKCkgPT4gYGJhbmRQYXJ0KCk6IG51bUxvd2VyIG11c3QgYmUgYW4gaW50ZWdlciwgZ290ICR7bnVtTG93ZXJ9LmApO1xuICAgIGFzc2VydChcbiAgICAgICAgbnVtTG93ZXIgPD0gTSxcbiAgICAgICAgKCkgPT4gYGJhbmRQYXJ0KCk6IG51bUxvd2VyICgke251bUxvd2VyfSlgICtcbiAgICAgICAgICAgIGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2Ygcm93cyAoJHtNfSkuYCk7XG4gICAgJG51bUxvd2VyID1cbiAgICAgICAgY29udmVydFRvVGVuc29yKG51bUxvd2VyIDwgMCA/IE0gOiBudW1Mb3dlciwgJ251bUxvd2VyJywgJ2JhbmRQYXJ0JykgYXNcbiAgICAgICAgU2NhbGFyO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydChcbiAgICAgICAgbnVtTG93ZXIuZHR5cGUgPT09ICdpbnQzMicsXG4gICAgICAgICgpID0+IGBiYW5kUGFydCgpOiBudW1Mb3dlcidzIGR0eXBlIG11c3QgYmUgYW4gaW50MzIuYCk7XG4gICAgLy8gSWYgbnVtTG93ZXIgaXMgYSBTY2FsYXIsIGNoZWNraW5nIGBudW1Mb3dlciA8PSBNYCBjb3VsZCBodXJ0IHBlcmZvcm1hbmNlLFxuICAgIC8vIGJ1dCBtaW5pbXVtKG51bUxvd2VyLCBNKSBjb3VsZCBhdm9pZCB1bmV4cGVjdGVkIHJlc3VsdHMuXG4gICAgJG51bUxvd2VyID0gd2hlcmUobGVzcyhudW1Mb3dlciwgMCksIE0sIG1pbmltdW0obnVtTG93ZXIsIE0pKSBhcyBTY2FsYXI7XG4gIH1cblxuICBpZiAodHlwZW9mIG51bVVwcGVyID09PSAnbnVtYmVyJykge1xuICAgIGFzc2VydChcbiAgICAgICAgbnVtVXBwZXIgJSAxID09PSAwLFxuICAgICAgICAoKSA9PiBgYmFuZFBhcnQoKTogbnVtVXBwZXIgbXVzdCBiZSBhbiBpbnRlZ2VyLCBnb3QgJHtudW1VcHBlcn0uYCk7XG4gICAgYXNzZXJ0KFxuICAgICAgICBudW1VcHBlciA8PSBOLFxuICAgICAgICAoKSA9PiBgYmFuZFBhcnQoKTogbnVtVXBwZXIgKCR7bnVtVXBwZXJ9KWAgK1xuICAgICAgICAgICAgYCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjb2x1bW5zICgke059KS5gKTtcbiAgICAkbnVtVXBwZXIgPVxuICAgICAgICBjb252ZXJ0VG9UZW5zb3IobnVtVXBwZXIgPCAwID8gTiA6IG51bVVwcGVyLCAnbnVtVXBwZXInLCAnYmFuZFBhcnQnKSBhc1xuICAgICAgICBTY2FsYXI7XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KFxuICAgICAgICBudW1VcHBlci5kdHlwZSA9PT0gJ2ludDMyJyxcbiAgICAgICAgKCkgPT4gYGJhbmRQYXJ0KCk6IG51bVVwcGVyJ3MgZHR5cGUgbXVzdCBiZSBhbiBpbnQzMi5gKTtcbiAgICAkbnVtVXBwZXIgPSB3aGVyZShsZXNzKG51bVVwcGVyLCAwKSwgTiwgbWluaW11bShudW1VcHBlciwgTikpIGFzIFNjYWxhcjtcbiAgfVxuXG4gIGNvbnN0IGkgPSByZXNoYXBlKHJhbmdlKDAsIE0sIDEsICdpbnQzMicpLCBbLTEsIDFdKTtcbiAgY29uc3QgaiA9IHJhbmdlKDAsIE4sIDEsICdpbnQzMicpO1xuICBjb25zdCBpaiA9IHN1YihpLCBqKTtcblxuICBjb25zdCBpbkJhbmQgPVxuICAgICAgbG9naWNhbEFuZChsZXNzRXF1YWwoaWosICRudW1Mb3dlciksIGdyZWF0ZXJFcXVhbChpaiwgbmVnKCRudW1VcHBlcikpKTtcblxuICBjb25zdCB6ZXJvID0gemVyb3MoW00sIE5dLCAkYS5kdHlwZSk7XG5cbiAgcmV0dXJuIHJlc2hhcGUoXG4gICAgICAgICAgICAgc3RhY2sodW5zdGFjayhyZXNoYXBlKCRhLCBbLTEsIE0sIE5dKSlcbiAgICAgICAgICAgICAgICAgICAgICAgLm1hcChtYXQgPT4gd2hlcmUoaW5CYW5kLCBtYXQsIHplcm8pKSksXG4gICAgICAgICAgICAgc2hhcGUpIGFzIFQ7XG59XG5cbmV4cG9ydCBjb25zdCBiYW5kUGFydCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YmFuZFBhcnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { assert } from '../../util';\nimport { div } from '../div';\nimport { mul } from '../mul';\nimport { norm } from '../norm';\nimport { op } from '../operation';\nimport { split } from '../split';\nimport { squeeze } from '../squeeze';\nimport { stack } from '../stack';\nimport { sub } from '../sub';\nimport { sum } from '../sum';\n/**\n * Gram-Schmidt orthogonalization.\n *\n * ```js\n * const x = tf.tensor2d([[1, 2], [3, 4]]);\n * let y = tf.linalg.gramSchmidt(x);\n * y.print();\n * console.log('Orthogonalized:');\n * y.dot(y.transpose()).print(); // should be nearly the identity matrix.\n * console.log('First row direction maintained:');\n * const data = await y.array();\n * console.log(data[0][1] / data[0][0]); // should be nearly 2.\n * ```\n *\n * @param xs The vectors to be orthogonalized, in one of the two following\n * formats:\n * - An Array of `tf.Tensor1D`.\n * - A `tf.Tensor2D`, i.e., a matrix, in which case the vectors are the rows\n * of `xs`.\n * In each case, all the vectors must have the same length and the length\n * must be greater than or equal to the number of vectors.\n * @returns The orthogonalized and normalized vectors or matrix.\n * Orthogonalization means that the vectors or the rows of the matrix\n * are orthogonal (zero inner products). Normalization means that each\n * vector or each row of the matrix has an L2 norm that equals `1`.\n *\n * @doc {heading:'Operations', subheading:'Linear Algebra', namespace:'linalg'}\n */\nfunction gramSchmidt_(xs) {\n let inputIsTensor2D;\n if (Array.isArray(xs)) {\n inputIsTensor2D = false;\n assert(xs != null && xs.length > 0, () => 'Gram-Schmidt process: input must not be null, undefined, or ' +\n 'empty');\n const dim = xs[0].shape[0];\n for (let i = 1; i < xs.length; ++i) {\n assert(xs[i].shape[0] === dim, () => 'Gram-Schmidt: Non-unique lengths found in the input vectors: ' +\n `(${xs[i].shape[0]} vs. ${dim})`);\n }\n }\n else {\n inputIsTensor2D = true;\n xs = split(xs, xs.shape[0], 0).map(x => squeeze(x, [0]));\n }\n assert(xs.length <= xs[0].shape[0], () => `Gram-Schmidt: Number of vectors (${xs.length}) exceeds ` +\n `number of dimensions (${xs[0].shape[0]}).`);\n const ys = [];\n const xs1d = xs;\n for (let i = 0; i < xs.length; ++i) {\n ys.push(ENGINE.tidy(() => {\n let x = xs1d[i];\n if (i > 0) {\n for (let j = 0; j < i; ++j) {\n const proj = mul(sum(mul(ys[j], x)), ys[j]);\n x = sub(x, proj);\n }\n }\n return div(x, norm(x, 'euclidean'));\n }));\n }\n if (inputIsTensor2D) {\n return stack(ys, 0);\n }\n else {\n return ys;\n }\n}\nexport const gramSchmidt = /* @__PURE__ */ op({ gramSchmidt_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhbV9zY2htaWR0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbGluYWxnL2dyYW1fc2NobWlkdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXBDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILFNBQVMsWUFBWSxDQUFDLEVBQXVCO0lBQzNDLElBQUksZUFBd0IsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDckIsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixNQUFNLENBQ0YsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0IsR0FBRyxFQUFFLENBQUMsOERBQThEO1lBQ2hFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbEMsTUFBTSxDQUNGLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUN0QixHQUFHLEVBQUUsQ0FDRCwrREFBK0Q7Z0JBQy9ELElBQUssRUFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUMzRDtLQUNGO1NBQU07UUFDTCxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxRDtJQUVELE1BQU0sQ0FDRixFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzNCLEdBQUcsRUFBRSxDQUFDLG9DQUNLLEVBQWlCLENBQUMsTUFBTSxZQUFZO1FBQzNDLHlCQUEwQixFQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckUsTUFBTSxFQUFFLEdBQWUsRUFBRSxDQUFDO0lBQzFCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNsQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtvQkFDMUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNsQjthQUNGO1lBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ0w7SUFFRCxJQUFJLGVBQWUsRUFBRTtRQUNuQixPQUFPLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFhLENBQUM7S0FDakM7U0FBTTtRQUNMLE9BQU8sRUFBRSxDQUFDO0tBQ1g7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbXBvcnQge2Rpdn0gZnJvbSAnLi4vZGl2JztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9tdWwnO1xuaW1wb3J0IHtub3JtfSBmcm9tICcuLi9ub3JtJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3NwbGl0fSBmcm9tICcuLi9zcGxpdCc7XG5pbXBvcnQge3NxdWVlemV9IGZyb20gJy4uL3NxdWVlemUnO1xuaW1wb3J0IHtzdGFja30gZnJvbSAnLi4vc3RhY2snO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4uL3N1Yic7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi4vc3VtJztcblxuLyoqXG4gKiBHcmFtLVNjaG1pZHQgb3J0aG9nb25hbGl6YXRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbWzEsIDJdLCBbMywgNF1dKTtcbiAqIGxldCB5ID0gdGYubGluYWxnLmdyYW1TY2htaWR0KHgpO1xuICogeS5wcmludCgpO1xuICogY29uc29sZS5sb2coJ09ydGhvZ29uYWxpemVkOicpO1xuICogeS5kb3QoeS50cmFuc3Bvc2UoKSkucHJpbnQoKTsgIC8vIHNob3VsZCBiZSBuZWFybHkgdGhlIGlkZW50aXR5IG1hdHJpeC5cbiAqIGNvbnNvbGUubG9nKCdGaXJzdCByb3cgZGlyZWN0aW9uIG1haW50YWluZWQ6Jyk7XG4gKiBjb25zdCBkYXRhID0gYXdhaXQgeS5hcnJheSgpO1xuICogY29uc29sZS5sb2coZGF0YVswXVsxXSAvIGRhdGFbMF1bMF0pOyAgLy8gc2hvdWxkIGJlIG5lYXJseSAyLlxuICogYGBgXG4gKlxuICogQHBhcmFtIHhzIFRoZSB2ZWN0b3JzIHRvIGJlIG9ydGhvZ29uYWxpemVkLCBpbiBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmdcbiAqICAgZm9ybWF0czpcbiAqICAgLSBBbiBBcnJheSBvZiBgdGYuVGVuc29yMURgLlxuICogICAtIEEgYHRmLlRlbnNvcjJEYCwgaS5lLiwgYSBtYXRyaXgsIGluIHdoaWNoIGNhc2UgdGhlIHZlY3RvcnMgYXJlIHRoZSByb3dzXG4gKiAgICAgb2YgYHhzYC5cbiAqICAgSW4gZWFjaCBjYXNlLCBhbGwgdGhlIHZlY3RvcnMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgdGhlIGxlbmd0aFxuICogICBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHZlY3RvcnMuXG4gKiBAcmV0dXJucyBUaGUgb3J0aG9nb25hbGl6ZWQgYW5kIG5vcm1hbGl6ZWQgdmVjdG9ycyBvciBtYXRyaXguXG4gKiAgIE9ydGhvZ29uYWxpemF0aW9uIG1lYW5zIHRoYXQgdGhlIHZlY3RvcnMgb3IgdGhlIHJvd3Mgb2YgdGhlIG1hdHJpeFxuICogICBhcmUgb3J0aG9nb25hbCAoemVybyBpbm5lciBwcm9kdWN0cykuIE5vcm1hbGl6YXRpb24gbWVhbnMgdGhhdCBlYWNoXG4gKiAgIHZlY3RvciBvciBlYWNoIHJvdyBvZiB0aGUgbWF0cml4IGhhcyBhbiBMMiBub3JtIHRoYXQgZXF1YWxzIGAxYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOidPcGVyYXRpb25zJywgc3ViaGVhZGluZzonTGluZWFyIEFsZ2VicmEnLCBuYW1lc3BhY2U6J2xpbmFsZyd9XG4gKi9cbmZ1bmN0aW9uIGdyYW1TY2htaWR0Xyh4czogVGVuc29yMURbXXxUZW5zb3IyRCk6IFRlbnNvcjFEW118VGVuc29yMkQge1xuICBsZXQgaW5wdXRJc1RlbnNvcjJEOiBib29sZWFuO1xuICBpZiAoQXJyYXkuaXNBcnJheSh4cykpIHtcbiAgICBpbnB1dElzVGVuc29yMkQgPSBmYWxzZTtcbiAgICBhc3NlcnQoXG4gICAgICAgIHhzICE9IG51bGwgJiYgeHMubGVuZ3RoID4gMCxcbiAgICAgICAgKCkgPT4gJ0dyYW0tU2NobWlkdCBwcm9jZXNzOiBpbnB1dCBtdXN0IG5vdCBiZSBudWxsLCB1bmRlZmluZWQsIG9yICcgK1xuICAgICAgICAgICAgJ2VtcHR5Jyk7XG4gICAgY29uc3QgZGltID0geHNbMF0uc2hhcGVbMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICAgIHhzW2ldLnNoYXBlWzBdID09PSBkaW0sXG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgJ0dyYW0tU2NobWlkdDogTm9uLXVuaXF1ZSBsZW5ndGhzIGZvdW5kIGluIHRoZSBpbnB1dCB2ZWN0b3JzOiAnICtcbiAgICAgICAgICAgICAgYCgkeyh4cyBhcyBUZW5zb3IxRFtdKVtpXS5zaGFwZVswXX0gdnMuICR7ZGltfSlgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRJc1RlbnNvcjJEID0gdHJ1ZTtcbiAgICB4cyA9IHNwbGl0KHhzLCB4cy5zaGFwZVswXSwgMCkubWFwKHggPT4gc3F1ZWV6ZSh4LCBbMF0pKTtcbiAgfVxuXG4gIGFzc2VydChcbiAgICAgIHhzLmxlbmd0aCA8PSB4c1swXS5zaGFwZVswXSxcbiAgICAgICgpID0+IGBHcmFtLVNjaG1pZHQ6IE51bWJlciBvZiB2ZWN0b3JzICgke1xuICAgICAgICAgICAgICAgICh4cyBhcyBUZW5zb3IxRFtdKS5sZW5ndGh9KSBleGNlZWRzIGAgK1xuICAgICAgICAgIGBudW1iZXIgb2YgZGltZW5zaW9ucyAoJHsoeHMgYXMgVGVuc29yMURbXSlbMF0uc2hhcGVbMF19KS5gKTtcblxuICBjb25zdCB5czogVGVuc29yMURbXSA9IFtdO1xuICBjb25zdCB4czFkID0geHM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeHMubGVuZ3RoOyArK2kpIHtcbiAgICB5cy5wdXNoKEVOR0lORS50aWR5KCgpID0+IHtcbiAgICAgIGxldCB4ID0geHMxZFtpXTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGk7ICsraikge1xuICAgICAgICAgIGNvbnN0IHByb2ogPSBtdWwoc3VtKG11bCh5c1tqXSwgeCkpLCB5c1tqXSk7XG4gICAgICAgICAgeCA9IHN1Yih4LCBwcm9qKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRpdih4LCBub3JtKHgsICdldWNsaWRlYW4nKSk7XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKGlucHV0SXNUZW5zb3IyRCkge1xuICAgIHJldHVybiBzdGFjayh5cywgMCkgYXMgVGVuc29yMkQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHlzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBncmFtU2NobWlkdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Z3JhbVNjaG1pZHRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { dispose } from '../../globals';\nimport { assert } from '../../util';\nimport { clone } from '../clone';\nimport { concat } from '../concat';\nimport { div } from '../div';\nimport { eye } from '../eye';\nimport { greater } from '../greater';\nimport { matMul } from '../mat_mul';\nimport { mul } from '../mul';\nimport { neg } from '../neg';\nimport { norm } from '../norm';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\nimport { slice } from '../slice';\nimport { stack } from '../stack';\nimport { sub } from '../sub';\nimport { tensor2d } from '../tensor2d';\nimport { transpose } from '../transpose';\nimport { unstack } from '../unstack';\nimport { where } from '../where';\n/**\n * Compute QR decomposition of m-by-n matrix using Householder transformation.\n *\n * Implementation based on\n * [http://www.cs.cornell.edu/~bindel/class/cs6210-f09/lec18.pdf]\n * (http://www.cs.cornell.edu/~bindel/class/cs6210-f09/lec18.pdf)\n *\n * ```js\n * const a = tf.tensor2d([[1, 2], [3, 4]]);\n * let [q, r] = tf.linalg.qr(a);\n * console.log('Q');\n * q.print();\n * console.log('R');\n * r.print();\n * console.log('Orthogonalized');\n * q.dot(q.transpose()).print() // should be nearly the identity matrix.\n * console.log('Reconstructed');\n * q.dot(r).print(); // should be nearly [[1, 2], [3, 4]];\n * ```\n *\n * @param x The `tf.Tensor` to be QR-decomposed. Must have rank >= 2. Suppose\n * it has the shape `[..., M, N]`.\n * @param fullMatrices An optional boolean parameter. Defaults to `false`.\n * If `true`, compute full-sized `Q`. If `false` (the default),\n * compute only the leading N columns of `Q` and `R`.\n * @returns An `Array` of two `tf.Tensor`s: `[Q, R]`. `Q` is a unitary matrix,\n * i.e., its columns all have unit norm and are mutually orthogonal.\n * If `M >= N`,\n * If `fullMatrices` is `false` (default),\n * - `Q` has a shape of `[..., M, N]`,\n * - `R` has a shape of `[..., N, N]`.\n * If `fullMatrices` is `true` (default),\n * - `Q` has a shape of `[..., M, M]`,\n * - `R` has a shape of `[..., M, N]`.\n * If `M < N`,\n * - `Q` has a shape of `[..., M, M]`,\n * - `R` has a shape of `[..., M, N]`.\n * @throws If the rank of `x` is less than 2.\n *\n * @doc {heading:'Operations',\n * subheading:'Linear Algebra',\n * namespace:'linalg'}\n */\nfunction qr_(x, fullMatrices = false) {\n assert(x.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${x.rank}`);\n if (x.rank === 2) {\n return qr2d(x, fullMatrices);\n }\n else {\n // Rank > 2.\n // TODO(cais): Below we split the input into individual 2D tensors,\n // perform QR decomposition on them and then stack the results back\n // together. We should explore whether this can be parallelized.\n const outerDimsProd = x.shape.slice(0, x.shape.length - 2)\n .reduce((value, prev) => value * prev);\n const x2ds = unstack(reshape(x, [\n outerDimsProd, x.shape[x.shape.length - 2],\n x.shape[x.shape.length - 1]\n ]), 0);\n const q2ds = [];\n const r2ds = [];\n x2ds.forEach(x2d => {\n const [q2d, r2d] = qr2d(x2d, fullMatrices);\n q2ds.push(q2d);\n r2ds.push(r2d);\n });\n const q = reshape(stack(q2ds, 0), x.shape);\n const r = reshape(stack(r2ds, 0), x.shape);\n return [q, r];\n }\n}\nfunction qr2d(x, fullMatrices = false) {\n return ENGINE.tidy(() => {\n assert(x.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${x.shape.length}D Tensor.`);\n const m = x.shape[0];\n const n = x.shape[1];\n let q = eye(m); // Orthogonal transform so far.\n let r = clone(x); // Transformed matrix so far.\n const one2D = tensor2d([[1]], [1, 1]);\n let w = clone(one2D);\n const iters = m >= n ? n : m;\n for (let j = 0; j < iters; ++j) {\n // This tidy within the for-loop ensures we clean up temporary\n // tensors as soon as they are no longer needed.\n const rTemp = r;\n const wTemp = w;\n const qTemp = q;\n [w, r, q] = ENGINE.tidy(() => {\n // Find H = I - tau * w * w', to put zeros below R(j, j).\n const rjEnd1 = slice(r, [j, j], [m - j, 1]);\n const normX = norm(rjEnd1);\n const rjj = slice(r, [j, j], [1, 1]);\n // The sign() function returns 0 on 0, which causes division by zero.\n const s = where(greater(rjj, 0), tensor2d([[-1]]), tensor2d([[1]]));\n const u1 = sub(rjj, mul(s, normX));\n const wPre = div(rjEnd1, u1);\n if (wPre.shape[0] === 1) {\n w = clone(one2D);\n }\n else {\n w = concat([\n one2D,\n slice(wPre, [1, 0], [wPre.shape[0] - 1, wPre.shape[1]])\n ], 0);\n }\n const tau = neg(div(matMul(s, u1), normX));\n // -- R := HR, Q := QH.\n const rjEndAll = slice(r, [j, 0], [m - j, n]);\n const tauTimesW = mul(tau, w);\n const wT = transpose(w);\n if (j === 0) {\n r = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll)));\n }\n else {\n const rTimesTau = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll)));\n r = concat([slice(r, [0, 0], [j, n]), rTimesTau], 0);\n }\n const tawTimesWT = transpose(tauTimesW);\n const qAllJEnd = slice(q, [0, j], [m, q.shape[1] - j]);\n if (j === 0) {\n q = sub(qAllJEnd, matMul(matMul(qAllJEnd, w), tawTimesWT));\n }\n else {\n const qTimesTau = sub(qAllJEnd, matMul(matMul(qAllJEnd, w), tawTimesWT));\n q = concat([slice(q, [0, 0], [m, j]), qTimesTau], 1);\n }\n return [w, r, q];\n });\n dispose([rTemp, wTemp, qTemp]);\n }\n if (!fullMatrices && m > n) {\n q = slice(q, [0, 0], [m, n]);\n r = slice(r, [0, 0], [n, n]);\n }\n return [q, r];\n });\n}\nexport const qr = /* @__PURE__ */ op({ qr_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9saW5hbGcvcXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMs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Q0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0wsTUFBTSxTQUFTLEdBQ1gsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0RDtnQkFDRCxNQUFNLFVBQVUsR0FBYSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ1gsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0wsTUFBTSxTQUFTLEdBQ1gsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0RDtnQkFDRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7UUFFRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUMsQ0FBeUIsQ0FBQztBQUM3QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge2Rpc3Bvc2V9IGZyb20gJy4uLy4uL2dsb2JhbHMnO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbXBvcnQge2Nsb25lfSBmcm9tICcuLi9jbG9uZSc7XG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi4vY29uY2F0JztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9kaXYnO1xuaW1wb3J0IHtleWV9IGZyb20gJy4uL2V5ZSc7XG5pbXBvcnQge2dyZWF0ZXJ9IGZyb20gJy4uL2dyZWF0ZXInO1xuaW1wb3J0IHttYXRNdWx9IGZyb20gJy4uL21hdF9tdWwnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi4vbmVnJztcbmltcG9ydCB7bm9ybX0gZnJvbSAnLi4vbm9ybSc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9yZXNoYXBlJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4uL3NsaWNlJztcbmltcG9ydCB7c3RhY2t9IGZyb20gJy4uL3N0YWNrJztcbmltcG9ydCB7c3VifSBmcm9tICcuLi9zdWInO1xuaW1wb3J0IHt0ZW5zb3IyZH0gZnJvbSAnLi4vdGVuc29yMmQnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4uL3RyYW5zcG9zZSc7XG5pbXBvcnQge3Vuc3RhY2t9IGZyb20gJy4uL3Vuc3RhY2snO1xuaW1wb3J0IHt3aGVyZX0gZnJvbSAnLi4vd2hlcmUnO1xuXG4vKipcbiAqIENvbXB1dGUgUVIgZGVjb21wb3NpdGlvbiBvZiBtLWJ5LW4gbWF0cml4IHVzaW5nIEhvdXNlaG9sZGVyIHRyYW5zZm9ybWF0aW9uLlxuICpcbiAqIEltcGxlbWVudGF0aW9uIGJhc2VkIG9uXG4gKiAgIFtodHRwOi8vd3d3LmNzLmNvcm5lbGwuZWR1L35iaW5kZWwvY2xhc3MvY3M2MjEwLWYwOS9sZWMxOC5wZGZdXG4gKiAoaHR0cDovL3d3dy5jcy5jb3JuZWxsLmVkdS9+YmluZGVsL2NsYXNzL2NzNjIxMC1mMDkvbGVjMTgucGRmKVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoW1sxLCAyXSwgWzMsIDRdXSk7XG4gKiBsZXQgW3EsIHJdID0gdGYubGluYWxnLnFyKGEpO1xuICogY29uc29sZS5sb2coJ1EnKTtcbiAqIHEucHJpbnQoKTtcbiAqIGNvbnNvbGUubG9nKCdSJyk7XG4gKiByLnByaW50KCk7XG4gKiBjb25zb2xlLmxvZygnT3J0aG9nb25hbGl6ZWQnKTtcbiAqIHEuZG90KHEudHJhbnNwb3NlKCkpLnByaW50KCkgIC8vIHNob3VsZCBiZSBuZWFybHkgdGhlIGlkZW50aXR5IG1hdHJpeC5cbiAqIGNvbnNvbGUubG9nKCdSZWNvbnN0cnVjdGVkJyk7XG4gKiBxLmRvdChyKS5wcmludCgpOyAvLyBzaG91bGQgYmUgbmVhcmx5IFtbMSwgMl0sIFszLCA0XV07XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgYHRmLlRlbnNvcmAgdG8gYmUgUVItZGVjb21wb3NlZC4gTXVzdCBoYXZlIHJhbmsgPj0gMi4gU3VwcG9zZVxuICogICBpdCBoYXMgdGhlIHNoYXBlIGBbLi4uLCBNLCBOXWAuXG4gKiBAcGFyYW0gZnVsbE1hdHJpY2VzIEFuIG9wdGlvbmFsIGJvb2xlYW4gcGFyYW1ldGVyLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICogICBJZiBgdHJ1ZWAsIGNvbXB1dGUgZnVsbC1zaXplZCBgUWAuIElmIGBmYWxzZWAgKHRoZSBkZWZhdWx0KSxcbiAqICAgY29tcHV0ZSBvbmx5IHRoZSBsZWFkaW5nIE4gY29sdW1ucyBvZiBgUWAgYW5kIGBSYC5cbiAqIEByZXR1cm5zIEFuIGBBcnJheWAgb2YgdHdvIGB0Zi5UZW5zb3JgczogYFtRLCBSXWAuIGBRYCBpcyBhIHVuaXRhcnkgbWF0cml4LFxuICogICBpLmUuLCBpdHMgY29sdW1ucyBhbGwgaGF2ZSB1bml0IG5vcm0gYW5kIGFyZSBtdXR1YWxseSBvcnRob2dvbmFsLlxuICogICBJZiBgTSA+PSBOYCxcbiAqICAgICBJZiBgZnVsbE1hdHJpY2VzYCBpcyBgZmFsc2VgIChkZWZhdWx0KSxcbiAqICAgICAgIC0gYFFgIGhhcyBhIHNoYXBlIG9mIGBbLi4uLCBNLCBOXWAsXG4gKiAgICAgICAtIGBSYCBoYXMgYSBzaGFwZSBvZiBgWy4uLiwgTiwgTl1gLlxuICogICAgIElmIGBmdWxsTWF0cmljZXNgIGlzIGB0cnVlYCAoZGVmYXVsdCksXG4gKiAgICAgICAtIGBRYCBoYXMgYSBzaGFwZSBvZiBgWy4uLiwgTSwgTV1gLFxuICogICAgICAgLSBgUmAgaGFzIGEgc2hhcGUgb2YgYFsuLi4sIE0sIE5dYC5cbiAqICAgSWYgYE0gPCBOYCxcbiAqICAgICAtIGBRYCBoYXMgYSBzaGFwZSBvZiBgWy4uLiwgTSwgTV1gLFxuICogICAgIC0gYFJgIGhhcyBhIHNoYXBlIG9mIGBbLi4uLCBNLCBOXWAuXG4gKiBAdGhyb3dzIElmIHRoZSByYW5rIG9mIGB4YCBpcyBsZXNzIHRoYW4gMi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOidPcGVyYXRpb25zJyxcbiAqICAgICAgIHN1YmhlYWRpbmc6J0xpbmVhciBBbGdlYnJhJyxcbiAqICAgICAgIG5hbWVzcGFjZTonbGluYWxnJ31cbiAqL1xuZnVuY3Rpb24gcXJfKHg6IFRlbnNvciwgZnVsbE1hdHJpY2VzID0gZmFsc2UpOiBbVGVuc29yLCBUZW5zb3JdIHtcbiAgYXNzZXJ0KFxuICAgICAgeC5yYW5rID49IDIsXG4gICAgICAoKSA9PiBgcXIoKSByZXF1aXJlcyBpbnB1dCB0ZW5zb3IgdG8gaGF2ZSBhIHJhbmsgPj0gMiwgYnV0IGdvdCByYW5rICR7XG4gICAgICAgICAgeC5yYW5rfWApO1xuXG4gIGlmICh4LnJhbmsgPT09IDIpIHtcbiAgICByZXR1cm4gcXIyZCh4IGFzIFRlbnNvcjJELCBmdWxsTWF0cmljZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFJhbmsgPiAyLlxuICAgIC8vIFRPRE8oY2Fpcyk6IEJlbG93IHdlIHNwbGl0IHRoZSBpbnB1dCBpbnRvIGluZGl2aWR1YWwgMkQgdGVuc29ycyxcbiAgICAvLyAgIHBlcmZvcm0gUVIgZGVjb21wb3NpdGlvbiBvbiB0aGVtIGFuZCB0aGVuIHN0YWNrIHRoZSByZXN1bHRzIGJhY2tcbiAgICAvLyAgIHRvZ2V0aGVyLiBXZSBzaG91bGQgZXhwbG9yZSB3aGV0aGVyIHRoaXMgY2FuIGJlIHBhcmFsbGVsaXplZC5cbiAgICBjb25zdCBvdXRlckRpbXNQcm9kID0geC5zaGFwZS5zbGljZSgwLCB4LnNoYXBlLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKCh2YWx1ZSwgcHJldikgPT4gdmFsdWUgKiBwcmV2KTtcbiAgICBjb25zdCB4MmRzID0gdW5zdGFjayhcbiAgICAgICAgcmVzaGFwZShcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIG91dGVyRGltc1Byb2QsIHguc2hhcGVbeC5zaGFwZS5sZW5ndGggLSAyXSxcbiAgICAgICAgICAgICAgeC5zaGFwZVt4LnNoYXBlLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgMCk7XG4gICAgY29uc3QgcTJkczogVGVuc29yMkRbXSA9IFtdO1xuICAgIGNvbnN0IHIyZHM6IFRlbnNvcjJEW10gPSBbXTtcbiAgICB4MmRzLmZvckVhY2goeDJkID0+IHtcbiAgICAgIGNvbnN0IFtxMmQsIHIyZF0gPSBxcjJkKHgyZCBhcyBUZW5zb3IyRCwgZnVsbE1hdHJpY2VzKTtcbiAgICAgIHEyZHMucHVzaChxMmQpO1xuICAgICAgcjJkcy5wdXNoKHIyZCk7XG4gICAgfSk7XG4gICAgY29uc3QgcSA9IHJlc2hhcGUoc3RhY2socTJkcywgMCksIHguc2hhcGUpO1xuICAgIGNvbnN0IHIgPSByZXNoYXBlKHN0YWNrKHIyZHMsIDApLCB4LnNoYXBlKTtcbiAgICByZXR1cm4gW3EsIHJdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHFyMmQoeDogVGVuc29yMkQsIGZ1bGxNYXRyaWNlcyA9IGZhbHNlKTogW1RlbnNvcjJELCBUZW5zb3IyRF0ge1xuICByZXR1cm4gRU5HSU5FLnRpZHkoKCkgPT4ge1xuICAgIGFzc2VydChcbiAgICAgICAgeC5zaGFwZS5sZW5ndGggPT09IDIsXG4gICAgICAgICgpID0+IGBxcjJkKCkgcmVxdWlyZXMgYSAyRCBUZW5zb3IsIGJ1dCBnb3QgYSAke1xuICAgICAgICAgICAgeC5zaGFwZS5sZW5ndGh9RCBUZW5zb3IuYCk7XG5cbiAgICBjb25zdCBtID0geC5zaGFwZVswXTtcbiAgICBjb25zdCBuID0geC5zaGFwZVsxXTtcblxuICAgIGxldCBxID0gZXllKG0pOyAgICAvLyBPcnRob2dvbmFsIHRyYW5zZm9ybSBzbyBmYXIuXG4gICAgbGV0IHIgPSBjbG9uZSh4KTsgIC8vIFRyYW5zZm9ybWVkIG1hdHJpeCBzbyBmYXIuXG5cbiAgICBjb25zdCBvbmUyRCA9IHRlbnNvcjJkKFtbMV1dLCBbMSwgMV0pO1xuICAgIGxldCB3OiBUZW5zb3IyRCA9IGNsb25lKG9uZTJEKTtcblxuICAgIGNvbnN0IGl0ZXJzID0gbSA+PSBuID8gbiA6IG07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBpdGVyczsgKytqKSB7XG4gICAgICAvLyBUaGlzIHRpZHkgd2l0aGluIHRoZSBmb3ItbG9vcCBlbnN1cmVzIHdlIGNsZWFuIHVwIHRlbXBvcmFyeVxuICAgICAgLy8gdGVuc29ycyBhcyBzb29uIGFzIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuXG4gICAgICBjb25zdCByVGVtcCA9IHI7XG4gICAgICBjb25zdCB3VGVtcCA9IHc7XG4gICAgICBjb25zdCBxVGVtcCA9IHE7XG4gICAgICBbdywgciwgcV0gPSBFTkdJTkUudGlkeSgoKTogW1RlbnNvcjJELCBUZW5zb3IyRCwgVGVuc29yMkRdID0+IHtcbiAgICAgICAgLy8gRmluZCBIID0gSSAtIHRhdSAqIHcgKiB3JywgdG8gcHV0IHplcm9zIGJlbG93IFIoaiwgaikuXG4gICAgICAgIGNvbnN0IHJqRW5kMSA9IHNsaWNlKHIsIFtqLCBqXSwgW20gLSBqLCAxXSk7XG4gICAgICAgIGNvbnN0IG5vcm1YID0gbm9ybShyakVuZDEpO1xuICAgICAgICBjb25zdCByamogPSBzbGljZShyLCBbaiwgal0sIFsxLCAxXSk7XG5cbiAgICAgICAgLy8gVGhlIHNpZ24oKSBmdW5jdGlvbiByZXR1cm5zIDAgb24gMCwgd2hpY2ggY2F1c2VzIGRpdmlzaW9uIGJ5IHplcm8uXG4gICAgICAgIGNvbnN0IHMgPSB3aGVyZShncmVhdGVyKHJqaiwgMCksIHRlbnNvcjJkKFtbLTFdXSksIHRlbnNvcjJkKFtbMV1dKSk7XG5cbiAgICAgICAgY29uc3QgdTEgPSBzdWIocmpqLCBtdWwocywgbm9ybVgpKTtcbiAgICAgICAgY29uc3Qgd1ByZSA9IGRpdihyakVuZDEsIHUxKTtcbiAgICAgICAgaWYgKHdQcmUuc2hhcGVbMF0gPT09IDEpIHtcbiAgICAgICAgICB3ID0gY2xvbmUob25lMkQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHcgPSBjb25jYXQoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBvbmUyRCxcbiAgICAgICAgICAgICAgICBzbGljZSh3UHJlLCBbMSwgMF0sIFt3UHJlLnNoYXBlWzBdIC0gMSwgd1ByZS5zaGFwZVsxXV0pIGFzXG4gICAgICAgICAgICAgICAgICAgIFRlbnNvcjJEXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhdSA9IG5lZyhkaXYobWF0TXVsKHMsIHUxKSwgbm9ybVgpKSBhcyBUZW5zb3IyRDtcblxuICAgICAgICAvLyAtLSBSIDo9IEhSLCBRIDo9IFFILlxuICAgICAgICBjb25zdCByakVuZEFsbCA9IHNsaWNlKHIsIFtqLCAwXSwgW20gLSBqLCBuXSk7XG4gICAgICAgIGNvbnN0IHRhdVRpbWVzVzogVGVuc29yMkQgPSBtdWwodGF1LCB3KTtcbiAgICAgICAgY29uc3Qgd1Q6IFRlbnNvcjJEID0gdHJhbnNwb3NlKHcpO1xuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIHIgPSBzdWIocmpFbmRBbGwsIG1hdE11bCh0YXVUaW1lc1csIG1hdE11bCh3VCwgcmpFbmRBbGwpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgclRpbWVzVGF1OiBUZW5zb3IyRCA9XG4gICAgICAgICAgICAgIHN1YihyakVuZEFsbCwgbWF0TXVsKHRhdVRpbWVzVywgbWF0TXVsKHdULCByakVuZEFsbCkpKTtcbiAgICAgICAgICByID0gY29uY2F0KFtzbGljZShyLCBbMCwgMF0sIFtqLCBuXSksIHJUaW1lc1RhdV0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhd1RpbWVzV1Q6IFRlbnNvcjJEID0gdHJhbnNwb3NlKHRhdVRpbWVzVyk7XG4gICAgICAgIGNvbnN0IHFBbGxKRW5kID0gc2xpY2UocSwgWzAsIGpdLCBbbSwgcS5zaGFwZVsxXSAtIGpdKTtcbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICBxID0gc3ViKHFBbGxKRW5kLCBtYXRNdWwobWF0TXVsKHFBbGxKRW5kLCB3KSwgdGF3VGltZXNXVCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHFUaW1lc1RhdTogVGVuc29yMkQgPVxuICAgICAgICAgICAgICBzdWIocUFsbEpFbmQsIG1hdE11bChtYXRNdWwocUFsbEpFbmQsIHcpLCB0YXdUaW1lc1dUKSk7XG4gICAgICAgICAgcSA9IGNvbmNhdChbc2xpY2UocSwgWzAsIDBdLCBbbSwgal0pLCBxVGltZXNUYXVdLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3csIHIsIHFdO1xuICAgICAgfSk7XG4gICAgICBkaXNwb3NlKFtyVGVtcCwgd1RlbXAsIHFUZW1wXSk7XG4gICAgfVxuXG4gICAgaWYgKCFmdWxsTWF0cmljZXMgJiYgbSA+IG4pIHtcbiAgICAgIHEgPSBzbGljZShxLCBbMCwgMF0sIFttLCBuXSk7XG4gICAgICByID0gc2xpY2UociwgWzAsIDBdLCBbbiwgbl0pO1xuICAgIH1cblxuICAgIHJldHVybiBbcSwgcl07XG4gIH0pIGFzIFtUZW5zb3IyRCwgVGVuc29yMkRdO1xufVxuXG5leHBvcnQgY29uc3QgcXIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3FyX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport var Reduction;\n(function (Reduction) {\n Reduction[Reduction[\"NONE\"] = 0] = \"NONE\";\n Reduction[Reduction[\"MEAN\"] = 1] = \"MEAN\";\n Reduction[Reduction[\"SUM\"] = 2] = \"SUM\";\n Reduction[Reduction[\"SUM_BY_NONZERO_WEIGHTS\"] = 3] = \"SUM_BY_NONZERO_WEIGHTS\";\n})(Reduction || (Reduction = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9zc19vcHNfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb3NzX29wc191dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLENBQU4sSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25CLHlDQUFJLENBQUE7SUFDSix5Q0FBSSxDQUFBO0lBQ0osdUNBQUcsQ0FBQTtJQUNILDZFQUFzQixDQUFBO0FBQ3hCLENBQUMsRUFMVyxTQUFTLEtBQVQsU0FBUyxRQUtwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuZXhwb3J0IGVudW0gUmVkdWN0aW9uIHtcbiAgTk9ORSxcbiAgTUVBTixcbiAgU1VNLFxuICBTVU1fQllfTk9OWkVST19XRUlHSFRTXG59XG4iXX0=","import { convertToTensor } from '../../tensor_util_env';\nimport { cast } from '../cast';\nimport { div } from '../div';\nimport { Reduction } from '../loss_ops_utils';\nimport { mean } from '../mean';\nimport { mul } from '../mul';\nimport { notEqual } from '../not_equal';\nimport { ones } from '../ones';\nimport { op } from '../operation';\nimport { scalar } from '../scalar';\nimport { sum } from '../sum';\n/**\n * Computes the weighted loss between two tensors.\n *\n * @param losses Tensor of shape `[batch_size, d1, ..., dN]`.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `losses`, and must be broadcastable to `losses` (i.e., all\n * dimensions must be either `1`, or the same as the corresponding\n * `losses` dimension).\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction computeWeightedLoss_(losses, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $losses = convertToTensor(losses, 'losses', 'computeWeightedLoss');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'computeWeightedLoss');\n }\n const weightedLoss = ($weights == null) ? $losses : mul($losses, $weights);\n if (reduction === Reduction.NONE) {\n return weightedLoss;\n }\n if (reduction === Reduction.SUM) {\n return sum(weightedLoss);\n }\n if (reduction === Reduction.MEAN) {\n if ($weights == null) {\n return mean(weightedLoss);\n }\n else {\n const broadcastFactor = $losses.size / $weights.size;\n const result = div(sum(weightedLoss), sum($weights));\n return broadcastFactor > 1 ? div(result, scalar(broadcastFactor)) :\n result;\n }\n }\n if (reduction === Reduction.SUM_BY_NONZERO_WEIGHTS) {\n if ($weights == null) {\n return div(sum(weightedLoss), scalar($losses.size));\n }\n else {\n const broadcastedWeights = mul($weights, ones($losses.shape));\n const numNonZeros = cast(sum(notEqual(broadcastedWeights, scalar(0))), 'float32');\n return div(sum(weightedLoss), numNonZeros);\n }\n }\n throw Error(`Unknown reduction: ${reduction}`);\n}\nexport const computeWeightedLoss = /* @__PURE__ */ op({ computeWeightedLoss_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZV93ZWlnaHRlZF9sb3NzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3RELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUUzQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDekIsTUFBb0IsRUFBRSxPQUEyQixFQUNqRCxTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQjtJQUM5QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3pFLElBQUksUUFBUSxHQUFXLElBQUksQ0FBQztJQUM1QixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7UUFDbkIsUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDdkU7SUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTNFLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7UUFDaEMsT0FBTyxZQUFpQixDQUFDO0tBQzFCO0lBQ0QsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMvQixPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMxQjtJQUNELElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7UUFDaEMsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDckQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyRCxPQUFPLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsTUFBVyxDQUFDO1NBQzFDO0tBQ0Y7SUFDRCxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsc0JBQXNCLEVBQUU7UUFDbEQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFOUQsTUFBTSxXQUFXLEdBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDNUM7S0FDRjtJQUVELE1BQU0sS0FBSyxDQUFDLHNCQUFzQixTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsb0JBQW9CLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Nhc3R9IGZyb20gJy4uL2Nhc3QnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4uL2Rpdic7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttZWFufSBmcm9tICcuLi9tZWFuJztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9tdWwnO1xuaW1wb3J0IHtub3RFcXVhbH0gZnJvbSAnLi4vbm90X2VxdWFsJztcbmltcG9ydCB7b25lc30gZnJvbSAnLi4vb25lcyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi4vc3VtJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgd2VpZ2h0ZWQgbG9zcyBiZXR3ZWVuIHR3byB0ZW5zb3JzLlxuICpcbiAqIEBwYXJhbSBsb3NzZXMgVGVuc29yIG9mIHNoYXBlIGBbYmF0Y2hfc2l6ZSwgZDEsIC4uLiwgZE5dYC5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbG9zc2VzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbG9zc2VzYCAoaS5lLiwgYWxsXG4gKiAgICBkaW1lbnNpb25zIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmdcbiAqICAgIGBsb3NzZXNgIGRpbWVuc2lvbikuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ0xvc3NlcycsIG5hbWVzcGFjZTogJ2xvc3Nlcyd9XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVXZWlnaHRlZExvc3NfPFQgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGxvc3NlczogVHxUZW5zb3JMaWtlLCB3ZWlnaHRzPzogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgcmVkdWN0aW9uID0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpOiBPIHtcbiAgY29uc3QgJGxvc3NlcyA9IGNvbnZlcnRUb1RlbnNvcihsb3NzZXMsICdsb3NzZXMnLCAnY29tcHV0ZVdlaWdodGVkTG9zcycpO1xuICBsZXQgJHdlaWdodHM6IFRlbnNvciA9IG51bGw7XG4gIGlmICh3ZWlnaHRzICE9IG51bGwpIHtcbiAgICAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdjb21wdXRlV2VpZ2h0ZWRMb3NzJyk7XG4gIH1cblxuICBjb25zdCB3ZWlnaHRlZExvc3MgPSAoJHdlaWdodHMgPT0gbnVsbCkgPyAkbG9zc2VzIDogbXVsKCRsb3NzZXMsICR3ZWlnaHRzKTtcblxuICBpZiAocmVkdWN0aW9uID09PSBSZWR1Y3Rpb24uTk9ORSkge1xuICAgIHJldHVybiB3ZWlnaHRlZExvc3MgYXMgTztcbiAgfVxuICBpZiAocmVkdWN0aW9uID09PSBSZWR1Y3Rpb24uU1VNKSB7XG4gICAgcmV0dXJuIHN1bSh3ZWlnaHRlZExvc3MpO1xuICB9XG4gIGlmIChyZWR1Y3Rpb24gPT09IFJlZHVjdGlvbi5NRUFOKSB7XG4gICAgaWYgKCR3ZWlnaHRzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBtZWFuKHdlaWdodGVkTG9zcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdEZhY3RvciA9ICRsb3NzZXMuc2l6ZSAvICR3ZWlnaHRzLnNpemU7XG4gICAgICBjb25zdCByZXN1bHQgPSBkaXYoc3VtKHdlaWdodGVkTG9zcyksIHN1bSgkd2VpZ2h0cykpO1xuICAgICAgcmV0dXJuIGJyb2FkY2FzdEZhY3RvciA+IDEgPyBkaXYocmVzdWx0LCBzY2FsYXIoYnJvYWRjYXN0RmFjdG9yKSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgYXMgTztcbiAgICB9XG4gIH1cbiAgaWYgKHJlZHVjdGlvbiA9PT0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpIHtcbiAgICBpZiAoJHdlaWdodHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGRpdihzdW0od2VpZ2h0ZWRMb3NzKSwgc2NhbGFyKCRsb3NzZXMuc2l6ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RlZFdlaWdodHMgPSBtdWwoJHdlaWdodHMsIG9uZXMoJGxvc3Nlcy5zaGFwZSkpO1xuXG4gICAgICBjb25zdCBudW1Ob25aZXJvcyA9XG4gICAgICAgICAgY2FzdChzdW0obm90RXF1YWwoYnJvYWRjYXN0ZWRXZWlnaHRzLCBzY2FsYXIoMCkpKSwgJ2Zsb2F0MzInKTtcbiAgICAgIHJldHVybiBkaXYoc3VtKHdlaWdodGVkTG9zcyksIG51bU5vblplcm9zKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBFcnJvcihgVW5rbm93biByZWR1Y3Rpb246ICR7cmVkdWN0aW9ufWApO1xufVxuZXhwb3J0IGNvbnN0IGNvbXB1dGVXZWlnaHRlZExvc3MgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NvbXB1dGVXZWlnaHRlZExvc3NffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { abs } from '../abs';\nimport { Reduction } from '../loss_ops_utils';\nimport { op } from '../operation';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the absolute difference loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction absoluteDifference_(labels, predictions, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'absoluteDifference');\n const $predictions = convertToTensor(predictions, 'predictions', 'absoluteDifference');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'absoluteDifference');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in absoluteDifference: ');\n const losses = abs(sub($labels, $predictions));\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const absoluteDifference = /* @__PURE__ */ op({ absoluteDifference_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzb2x1dGVfZGlmZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvc3Nlcy9hYnNvbHV0ZV9kaWZmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTNCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDeEIsTUFBb0IsRUFBRSxXQUF5QixFQUMvQyxPQUEyQixFQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQjtJQUM5QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sWUFBWSxHQUNkLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdEUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztLQUN0RTtJQUNELGlCQUFpQixDQUNiLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBRXhFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDL0MsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsbUJBQW1CLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydFNoYXBlc01hdGNofSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7YWJzfSBmcm9tICcuLi9hYnMnO1xuaW1wb3J0IHtSZWR1Y3Rpb259IGZyb20gJy4uL2xvc3Nfb3BzX3V0aWxzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgbG9zcyBiZXR3ZWVuIHR3byB0ZW5zb3JzLlxuICpcbiAqIEBwYXJhbSBsYWJlbHMgVGhlIGdyb3VuZCB0cnV0aCBvdXRwdXQgdGVuc29yLCBzYW1lIGRpbWVuc2lvbnMgYXNcbiAqICAgICdwcmVkaWN0aW9ucycuXG4gKiBAcGFyYW0gcHJlZGljdGlvbnMgVGhlIHByZWRpY3RlZCBvdXRwdXRzLlxuICogQHBhcmFtIHdlaWdodHMgVGVuc29yIHdob3NlIHJhbmsgaXMgZWl0aGVyIDAsIG9yIHRoZSBzYW1lIHJhbmsgYXNcbiAqICAgIGBsYWJlbHNgLCBhbmQgbXVzdCBiZSBicm9hZGNhc3RhYmxlIHRvIGBsYWJlbHNgIChpLmUuLCBhbGwgZGltZW5zaW9uc1xuICogICAgbXVzdCBiZSBlaXRoZXIgYDFgLCBvciB0aGUgc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBgbG9zc2VzYFxuICogICAgZGltZW5zaW9uKS5cbiAqIEBwYXJhbSByZWR1Y3Rpb24gVHlwZSBvZiByZWR1Y3Rpb24gdG8gYXBwbHkgdG8gbG9zcy4gU2hvdWxkIGJlIG9mIHR5cGVcbiAqICAgIGBSZWR1Y3Rpb25gXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ0xvc3NlcycsIG5hbWVzcGFjZTogJ2xvc3Nlcyd9XG4gKi9cbmZ1bmN0aW9uIGFic29sdXRlRGlmZmVyZW5jZV88VCBleHRlbmRzIFRlbnNvciwgTyBleHRlbmRzIFRlbnNvcj4oXG4gICAgbGFiZWxzOiBUfFRlbnNvckxpa2UsIHByZWRpY3Rpb25zOiBUfFRlbnNvckxpa2UsXG4gICAgd2VpZ2h0cz86IFRlbnNvcnxUZW5zb3JMaWtlLFxuICAgIHJlZHVjdGlvbiA9IFJlZHVjdGlvbi5TVU1fQllfTk9OWkVST19XRUlHSFRTKTogTyB7XG4gIGNvbnN0ICRsYWJlbHMgPSBjb252ZXJ0VG9UZW5zb3IobGFiZWxzLCAnbGFiZWxzJywgJ2Fic29sdXRlRGlmZmVyZW5jZScpO1xuICBjb25zdCAkcHJlZGljdGlvbnMgPVxuICAgICAgY29udmVydFRvVGVuc29yKHByZWRpY3Rpb25zLCAncHJlZGljdGlvbnMnLCAnYWJzb2x1dGVEaWZmZXJlbmNlJyk7XG4gIGxldCAkd2VpZ2h0czogVGVuc29yID0gbnVsbDtcbiAgaWYgKHdlaWdodHMgIT0gbnVsbCkge1xuICAgICR3ZWlnaHRzID0gY29udmVydFRvVGVuc29yKHdlaWdodHMsICd3ZWlnaHRzJywgJ2Fic29sdXRlRGlmZmVyZW5jZScpO1xuICB9XG4gIGFzc2VydFNoYXBlc01hdGNoKFxuICAgICAgJGxhYmVscy5zaGFwZSwgJHByZWRpY3Rpb25zLnNoYXBlLCAnRXJyb3IgaW4gYWJzb2x1dGVEaWZmZXJlbmNlOiAnKTtcblxuICBjb25zdCBsb3NzZXMgPSBhYnMoc3ViKCRsYWJlbHMsICRwcmVkaWN0aW9ucykpO1xuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuXG5leHBvcnQgY29uc3QgYWJzb2x1dGVEaWZmZXJlbmNlID0gLyogQF9fUFVSRV9fICovIG9wKHthYnNvbHV0ZURpZmZlcmVuY2VffSk7XG4iXX0=","import { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { sum } from '../sum';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the cosine distance loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param axis The dimension along which the cosine distance is computed.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction cosineDistance_(labels, predictions, axis, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'cosineDistance');\n const $predictions = convertToTensor(predictions, 'predictions', 'cosineDistance');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'cosineDistance');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in cosineDistance: ');\n const one = scalar(1);\n const losses = sub(one, sum(mul($labels, $predictions), axis, true));\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const cosineDistance = /* @__PURE__ */ op({ cosineDistance_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zaW5lX2Rpc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL2Nvc2luZV9kaXN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTNCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQVMsZUFBZSxDQUNwQixNQUFvQixFQUFFLFdBQXlCLEVBQUUsSUFBWSxFQUM3RCxPQUEyQixFQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQjtJQUM5QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sWUFBWSxHQUNkLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbEUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztLQUNsRTtJQUNELGlCQUFpQixDQUNiLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcbmltcG9ydCB7c3VtfSBmcm9tICcuLi9zdW0nO1xuXG5pbXBvcnQge2NvbXB1dGVXZWlnaHRlZExvc3N9IGZyb20gJy4vY29tcHV0ZV93ZWlnaHRlZF9sb3NzJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgY29zaW5lIGRpc3RhbmNlIGxvc3MgYmV0d2VlbiB0d28gdGVuc29ycy5cbiAqXG4gKiBAcGFyYW0gbGFiZWxzIFRoZSBncm91bmQgdHJ1dGggb3V0cHV0IHRlbnNvciwgc2FtZSBkaW1lbnNpb25zIGFzXG4gKiAgICAncHJlZGljdGlvbnMnLlxuICogQHBhcmFtIHByZWRpY3Rpb25zIFRoZSBwcmVkaWN0ZWQgb3V0cHV0cy5cbiAqIEBwYXJhbSBheGlzIFRoZSBkaW1lbnNpb24gYWxvbmcgd2hpY2ggdGhlIGNvc2luZSBkaXN0YW5jZSBpcyBjb21wdXRlZC5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbGFiZWxzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbGFiZWxzYCAoaS5lLiwgYWxsIGRpbWVuc2lvbnNcbiAqICAgIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGxvc3Nlc2BcbiAqICAgIGRpbWVuc2lvbikuXG4gKiBAcGFyYW0gcmVkdWN0aW9uIFR5cGUgb2YgcmVkdWN0aW9uIHRvIGFwcGx5IHRvIGxvc3MuIFNob3VsZCBiZSBvZiB0eXBlXG4gKiAgICBgUmVkdWN0aW9uYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnfVxuICovXG5mdW5jdGlvbiBjb3NpbmVEaXN0YW5jZV88VCBleHRlbmRzIFRlbnNvciwgTyBleHRlbmRzIFRlbnNvcj4oXG4gICAgbGFiZWxzOiBUfFRlbnNvckxpa2UsIHByZWRpY3Rpb25zOiBUfFRlbnNvckxpa2UsIGF4aXM6IG51bWJlcixcbiAgICB3ZWlnaHRzPzogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgcmVkdWN0aW9uID0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpOiBPIHtcbiAgY29uc3QgJGxhYmVscyA9IGNvbnZlcnRUb1RlbnNvcihsYWJlbHMsICdsYWJlbHMnLCAnY29zaW5lRGlzdGFuY2UnKTtcbiAgY29uc3QgJHByZWRpY3Rpb25zID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ2Nvc2luZURpc3RhbmNlJyk7XG4gIGxldCAkd2VpZ2h0czogVGVuc29yID0gbnVsbDtcbiAgaWYgKHdlaWdodHMgIT0gbnVsbCkge1xuICAgICR3ZWlnaHRzID0gY29udmVydFRvVGVuc29yKHdlaWdodHMsICd3ZWlnaHRzJywgJ2Nvc2luZURpc3RhbmNlJyk7XG4gIH1cbiAgYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAkbGFiZWxzLnNoYXBlLCAkcHJlZGljdGlvbnMuc2hhcGUsICdFcnJvciBpbiBjb3NpbmVEaXN0YW5jZTogJyk7XG5cbiAgY29uc3Qgb25lID0gc2NhbGFyKDEpO1xuICBjb25zdCBsb3NzZXMgPSBzdWIob25lLCBzdW0obXVsKCRsYWJlbHMsICRwcmVkaWN0aW9ucyksIGF4aXMsIHRydWUpKTtcbiAgcmV0dXJuIGNvbXB1dGVXZWlnaHRlZExvc3MobG9zc2VzLCAkd2VpZ2h0cywgcmVkdWN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBjb3NpbmVEaXN0YW5jZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29zaW5lRGlzdGFuY2VffSk7XG4iXX0=","import { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { relu } from '../relu';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the Hinge loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction hingeLoss_(labels, predictions, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n let $labels = convertToTensor(labels, 'labels', 'hingeLoss');\n const $predictions = convertToTensor(predictions, 'predictions', 'hingeLoss');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'hingeLoss');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in hingeLoss: ');\n const one = scalar(1);\n // Convert binary labels to (-1, 1)\n $labels = sub(mul(scalar(2), $labels), one);\n const losses = relu(sub(one, mul($labels, $predictions)));\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const hingeLoss = /* @__PURE__ */ op({ hingeLoss_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGluZ2VfbG9zcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvc3Nlcy9oaW5nZV9sb3NzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFM0IsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFNUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLFVBQVUsQ0FDZixNQUFvQixFQUFFLFdBQXlCLEVBQy9DLE9BQTJCLEVBQzNCLFNBQVMsR0FBRyxTQUFTLENBQUMsc0JBQXNCO0lBQzlDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlFLElBQUksUUFBUSxHQUFXLElBQUksQ0FBQztJQUM1QixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7UUFDbkIsUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFFN0UsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLG1DQUFtQztJQUNuQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydFNoYXBlc01hdGNofSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7UmVkdWN0aW9ufSBmcm9tICcuLi9sb3NzX29wc191dGlscyc7XG5pbXBvcnQge211bH0gZnJvbSAnLi4vbXVsJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3JlbHV9IGZyb20gJy4uL3JlbHUnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIEhpbmdlIGxvc3MgYmV0d2VlbiB0d28gdGVuc29ycy5cbiAqXG4gKiBAcGFyYW0gbGFiZWxzIFRoZSBncm91bmQgdHJ1dGggb3V0cHV0IHRlbnNvciwgc2FtZSBkaW1lbnNpb25zIGFzXG4gKiAgICAncHJlZGljdGlvbnMnLlxuICogQHBhcmFtIHByZWRpY3Rpb25zIFRoZSBwcmVkaWN0ZWQgb3V0cHV0cy5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbGFiZWxzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbGFiZWxzYCAoaS5lLiwgYWxsIGRpbWVuc2lvbnNcbiAqICAgIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGxvc3Nlc2BcbiAqICAgIGRpbWVuc2lvbikuXG4gKiBAcGFyYW0gcmVkdWN0aW9uIFR5cGUgb2YgcmVkdWN0aW9uIHRvIGFwcGx5IHRvIGxvc3MuIFNob3VsZCBiZSBvZiB0eXBlXG4gKiAgICBgUmVkdWN0aW9uYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnfVxuICovXG5mdW5jdGlvbiBoaW5nZUxvc3NfPFQgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGxhYmVsczogVHxUZW5zb3JMaWtlLCBwcmVkaWN0aW9uczogVHxUZW5zb3JMaWtlLFxuICAgIHdlaWdodHM/OiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgICByZWR1Y3Rpb24gPSBSZWR1Y3Rpb24uU1VNX0JZX05PTlpFUk9fV0VJR0hUUyk6IE8ge1xuICBsZXQgJGxhYmVscyA9IGNvbnZlcnRUb1RlbnNvcihsYWJlbHMsICdsYWJlbHMnLCAnaGluZ2VMb3NzJyk7XG4gIGNvbnN0ICRwcmVkaWN0aW9ucyA9IGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ2hpbmdlTG9zcycpO1xuICBsZXQgJHdlaWdodHM6IFRlbnNvciA9IG51bGw7XG4gIGlmICh3ZWlnaHRzICE9IG51bGwpIHtcbiAgICAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdoaW5nZUxvc3MnKTtcbiAgfVxuICBhc3NlcnRTaGFwZXNNYXRjaCgkbGFiZWxzLnNoYXBlLCAkcHJlZGljdGlvbnMuc2hhcGUsICdFcnJvciBpbiBoaW5nZUxvc3M6ICcpO1xuXG4gIGNvbnN0IG9uZSA9IHNjYWxhcigxKTtcbiAgLy8gQ29udmVydCBiaW5hcnkgbGFiZWxzIHRvICgtMSwgMSlcbiAgJGxhYmVscyA9IHN1YihtdWwoc2NhbGFyKDIpLCAkbGFiZWxzKSwgb25lKTtcbiAgY29uc3QgbG9zc2VzID0gcmVsdShzdWIob25lLCBtdWwoJGxhYmVscywgJHByZWRpY3Rpb25zKSkpO1xuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuZXhwb3J0IGNvbnN0IGhpbmdlTG9zcyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aGluZ2VMb3NzX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { abs } from '../abs';\nimport { add } from '../add';\nimport { Reduction } from '../loss_ops_utils';\nimport { minimum } from '../minimum';\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { scalar } from '../scalar';\nimport { square } from '../square';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the Huber loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param delta Point where Huber loss changes from quadratic to linear.\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`.\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction huberLoss_(labels, predictions, weights, delta = 1.0, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'huberLoss');\n const $predictions = convertToTensor(predictions, 'predictions', 'huberLoss');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'huberLoss');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in huberLoss: ');\n const deltaScalar = scalar(delta);\n const error = abs(sub($predictions, $labels));\n const quadratic = minimum(error, deltaScalar);\n const linear = sub(error, quadratic);\n const losses = add(mul(scalar(0.5), square(quadratic)), mul(deltaScalar, linear));\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const huberLoss = /* @__PURE__ */ op({ huberLoss_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHViZXJfbG9zcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvc3Nlcy9odWJlcl9sb3NzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLFVBQVUsQ0FDZixNQUFvQixFQUFFLFdBQXlCLEVBQy9DLE9BQTJCLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFDeEMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0I7SUFDOUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDL0QsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDN0Q7SUFDRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUU3RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFckMsTUFBTSxNQUFNLEdBQ1IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydFNoYXBlc01hdGNofSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7YWJzfSBmcm9tICcuLi9hYnMnO1xuaW1wb3J0IHthZGR9IGZyb20gJy4uL2FkZCc7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttaW5pbXVtfSBmcm9tICcuLi9taW5pbXVtJztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7c2NhbGFyfSBmcm9tICcuLi9zY2FsYXInO1xuaW1wb3J0IHtzcXVhcmV9IGZyb20gJy4uL3NxdWFyZSc7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIEh1YmVyIGxvc3MgYmV0d2VlbiB0d28gdGVuc29ycy5cbiAqXG4gKiBAcGFyYW0gbGFiZWxzIFRoZSBncm91bmQgdHJ1dGggb3V0cHV0IHRlbnNvciwgc2FtZSBkaW1lbnNpb25zIGFzXG4gKiAgICAncHJlZGljdGlvbnMnLlxuICogQHBhcmFtIHByZWRpY3Rpb25zIFRoZSBwcmVkaWN0ZWQgb3V0cHV0cy5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbGFiZWxzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbGFiZWxzYCAoaS5lLiwgYWxsIGRpbWVuc2lvbnNcbiAqICAgIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGxvc3Nlc2BcbiAqICAgIGRpbWVuc2lvbikuXG4gKiBAcGFyYW0gZGVsdGEgUG9pbnQgd2hlcmUgSHViZXIgbG9zcyBjaGFuZ2VzIGZyb20gcXVhZHJhdGljIHRvIGxpbmVhci5cbiAqIEBwYXJhbSByZWR1Y3Rpb24gVHlwZSBvZiByZWR1Y3Rpb24gdG8gYXBwbHkgdG8gbG9zcy4gU2hvdWxkIGJlIG9mIHR5cGVcbiAqICAgIGBSZWR1Y3Rpb25gLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnfVxuICovXG5mdW5jdGlvbiBodWJlckxvc3NfPFQgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGxhYmVsczogVHxUZW5zb3JMaWtlLCBwcmVkaWN0aW9uczogVHxUZW5zb3JMaWtlLFxuICAgIHdlaWdodHM/OiBUZW5zb3J8VGVuc29yTGlrZSwgZGVsdGEgPSAxLjAsXG4gICAgcmVkdWN0aW9uID0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpOiBPIHtcbiAgY29uc3QgJGxhYmVscyA9IGNvbnZlcnRUb1RlbnNvcihsYWJlbHMsICdsYWJlbHMnLCAnaHViZXJMb3NzJyk7XG4gIGNvbnN0ICRwcmVkaWN0aW9ucyA9IGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ2h1YmVyTG9zcycpO1xuICBsZXQgJHdlaWdodHM6IFRlbnNvciA9IG51bGw7XG4gIGlmICh3ZWlnaHRzICE9IG51bGwpIHtcbiAgICAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdodWJlckxvc3MnKTtcbiAgfVxuICBhc3NlcnRTaGFwZXNNYXRjaCgkbGFiZWxzLnNoYXBlLCAkcHJlZGljdGlvbnMuc2hhcGUsICdFcnJvciBpbiBodWJlckxvc3M6ICcpO1xuXG4gIGNvbnN0IGRlbHRhU2NhbGFyID0gc2NhbGFyKGRlbHRhKTtcbiAgY29uc3QgZXJyb3IgPSBhYnMoc3ViKCRwcmVkaWN0aW9ucywgJGxhYmVscykpO1xuICBjb25zdCBxdWFkcmF0aWMgPSBtaW5pbXVtKGVycm9yLCBkZWx0YVNjYWxhcik7XG4gIGNvbnN0IGxpbmVhciA9IHN1YihlcnJvciwgcXVhZHJhdGljKTtcblxuICBjb25zdCBsb3NzZXMgPVxuICAgICAgYWRkKG11bChzY2FsYXIoMC41KSwgc3F1YXJlKHF1YWRyYXRpYykpLCBtdWwoZGVsdGFTY2FsYXIsIGxpbmVhcikpO1xuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuZXhwb3J0IGNvbnN0IGh1YmVyTG9zcyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aHViZXJMb3NzX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { add } from '../add';\nimport { log } from '../log';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { neg } from '../neg';\nimport { op } from '../operation';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the log loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param epsilon A small increment to avoid taking log of zero\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction logLoss_(labels, predictions, weights, epsilon = 1e-7, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'logLoss');\n const $predictions = convertToTensor(predictions, 'predictions', 'logLoss');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'logLoss');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in logLoss: ');\n const one = scalar(1);\n const epsilonScalar = scalar(epsilon);\n const l1 = neg(mul($labels, log(add($predictions, epsilonScalar))));\n const l2 = mul(sub(one, $labels), log(add(sub(one, $predictions), epsilonScalar)));\n const losses = sub(l1, l2);\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const logLoss = /* @__PURE__ */ op({ logLoss_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX2xvc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb3NzZXMvbG9nX2xvc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLFFBQVEsQ0FDYixNQUFvQixFQUFFLFdBQXlCLEVBQy9DLE9BQTJCLEVBQUUsT0FBTyxHQUFHLElBQUksRUFDM0MsU0FBUyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0I7SUFDOUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDM0Q7SUFDRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUUzRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sRUFBRSxHQUNKLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQixPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi4vYWRkJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi9sb2cnO1xuaW1wb3J0IHtSZWR1Y3Rpb259IGZyb20gJy4uL2xvc3Nfb3BzX3V0aWxzJztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9tdWwnO1xuaW1wb3J0IHtuZWd9IGZyb20gJy4uL25lZyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGxvZyBsb3NzIGJldHdlZW4gdHdvIHRlbnNvcnMuXG4gKlxuICogQHBhcmFtIGxhYmVscyBUaGUgZ3JvdW5kIHRydXRoIG91dHB1dCB0ZW5zb3IsIHNhbWUgZGltZW5zaW9ucyBhc1xuICogICAgJ3ByZWRpY3Rpb25zJy5cbiAqIEBwYXJhbSBwcmVkaWN0aW9ucyBUaGUgcHJlZGljdGVkIG91dHB1dHMuXG4gKiBAcGFyYW0gd2VpZ2h0cyBUZW5zb3Igd2hvc2UgcmFuayBpcyBlaXRoZXIgMCwgb3IgdGhlIHNhbWUgcmFuayBhc1xuICogICAgYGxhYmVsc2AsIGFuZCBtdXN0IGJlIGJyb2FkY2FzdGFibGUgdG8gYGxhYmVsc2AgKGkuZS4sIGFsbCBkaW1lbnNpb25zXG4gKiAgICBtdXN0IGJlIGVpdGhlciBgMWAsIG9yIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGBsb3NzZXNgXG4gKiAgICBkaW1lbnNpb24pLlxuICogQHBhcmFtIGVwc2lsb24gQSBzbWFsbCBpbmNyZW1lbnQgdG8gYXZvaWQgdGFraW5nIGxvZyBvZiB6ZXJvXG4gKiBAcGFyYW0gcmVkdWN0aW9uIFR5cGUgb2YgcmVkdWN0aW9uIHRvIGFwcGx5IHRvIGxvc3MuIFNob3VsZCBiZSBvZiB0eXBlXG4gKiAgICBgUmVkdWN0aW9uYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnfVxuICovXG5mdW5jdGlvbiBsb2dMb3NzXzxUIGV4dGVuZHMgVGVuc29yLCBPIGV4dGVuZHMgVGVuc29yPihcbiAgICBsYWJlbHM6IFR8VGVuc29yTGlrZSwgcHJlZGljdGlvbnM6IFR8VGVuc29yTGlrZSxcbiAgICB3ZWlnaHRzPzogVGVuc29yfFRlbnNvckxpa2UsIGVwc2lsb24gPSAxZS03LFxuICAgIHJlZHVjdGlvbiA9IFJlZHVjdGlvbi5TVU1fQllfTk9OWkVST19XRUlHSFRTKTogTyB7XG4gIGNvbnN0ICRsYWJlbHMgPSBjb252ZXJ0VG9UZW5zb3IobGFiZWxzLCAnbGFiZWxzJywgJ2xvZ0xvc3MnKTtcbiAgY29uc3QgJHByZWRpY3Rpb25zID0gY29udmVydFRvVGVuc29yKHByZWRpY3Rpb25zLCAncHJlZGljdGlvbnMnLCAnbG9nTG9zcycpO1xuICBsZXQgJHdlaWdodHM6IFRlbnNvciA9IG51bGw7XG4gIGlmICh3ZWlnaHRzICE9IG51bGwpIHtcbiAgICAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdsb2dMb3NzJyk7XG4gIH1cbiAgYXNzZXJ0U2hhcGVzTWF0Y2goJGxhYmVscy5zaGFwZSwgJHByZWRpY3Rpb25zLnNoYXBlLCAnRXJyb3IgaW4gbG9nTG9zczogJyk7XG5cbiAgY29uc3Qgb25lID0gc2NhbGFyKDEpO1xuICBjb25zdCBlcHNpbG9uU2NhbGFyID0gc2NhbGFyKGVwc2lsb24pO1xuXG4gIGNvbnN0IGwxID0gbmVnKG11bCgkbGFiZWxzLCBsb2coYWRkKCRwcmVkaWN0aW9ucywgZXBzaWxvblNjYWxhcikpKSk7XG4gIGNvbnN0IGwyID1cbiAgICAgIG11bChzdWIob25lLCAkbGFiZWxzKSwgbG9nKGFkZChzdWIob25lLCAkcHJlZGljdGlvbnMpLCBlcHNpbG9uU2NhbGFyKSkpO1xuICBjb25zdCBsb3NzZXMgPSBzdWIobDEsIGwyKTtcbiAgcmV0dXJuIGNvbXB1dGVXZWlnaHRlZExvc3MobG9zc2VzLCAkd2VpZ2h0cywgcmVkdWN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBsb2dMb3NzID0gLyogQF9fUFVSRV9fICovIG9wKHtsb2dMb3NzX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { Reduction } from '../loss_ops_utils';\nimport { op } from '../operation';\nimport { squaredDifference } from '../squared_difference';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the mean squared error between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction meanSquaredError_(labels, predictions, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'meanSquaredError');\n const $predictions = convertToTensor(predictions, 'predictions', 'meanSquaredError');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'meanSquaredError');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in meanSquaredError: ');\n const losses = squaredDifference($labels, $predictions);\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const meanSquaredError = /* @__PURE__ */ op({ meanSquaredError_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhbl9zcXVhcmVkX2Vycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL21lYW5fc3F1YXJlZF9lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDdEIsTUFBb0IsRUFBRSxXQUF5QixFQUMvQyxPQUEyQixFQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQjtJQUM5QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sWUFBWSxHQUNkLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDcEUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztLQUNwRTtJQUNELGlCQUFpQixDQUNiLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RCxPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0U2hhcGVzTWF0Y2h9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtSZWR1Y3Rpb259IGZyb20gJy4uL2xvc3Nfb3BzX3V0aWxzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3NxdWFyZWREaWZmZXJlbmNlfSBmcm9tICcuLi9zcXVhcmVkX2RpZmZlcmVuY2UnO1xuXG5pbXBvcnQge2NvbXB1dGVXZWlnaHRlZExvc3N9IGZyb20gJy4vY29tcHV0ZV93ZWlnaHRlZF9sb3NzJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbWVhbiBzcXVhcmVkIGVycm9yIGJldHdlZW4gdHdvIHRlbnNvcnMuXG4gKlxuICogQHBhcmFtIGxhYmVscyBUaGUgZ3JvdW5kIHRydXRoIG91dHB1dCB0ZW5zb3IsIHNhbWUgZGltZW5zaW9ucyBhc1xuICogICAgJ3ByZWRpY3Rpb25zJy5cbiAqIEBwYXJhbSBwcmVkaWN0aW9ucyBUaGUgcHJlZGljdGVkIG91dHB1dHMuXG4gKiBAcGFyYW0gd2VpZ2h0cyBUZW5zb3Igd2hvc2UgcmFuayBpcyBlaXRoZXIgMCwgb3IgdGhlIHNhbWUgcmFuayBhc1xuICogICAgYGxhYmVsc2AsIGFuZCBtdXN0IGJlIGJyb2FkY2FzdGFibGUgdG8gYGxhYmVsc2AgKGkuZS4sIGFsbCBkaW1lbnNpb25zXG4gKiAgICBtdXN0IGJlIGVpdGhlciBgMWAsIG9yIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGBsb3NzZXNgXG4gKiAgICBkaW1lbnNpb24pLlxuICogQHBhcmFtIHJlZHVjdGlvbiBUeXBlIG9mIHJlZHVjdGlvbiB0byBhcHBseSB0byBsb3NzLiBTaG91bGQgYmUgb2YgdHlwZVxuICogICAgYFJlZHVjdGlvbmBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnTG9zc2VzJywgbmFtZXNwYWNlOiAnbG9zc2VzJ31cbiAqL1xuZnVuY3Rpb24gbWVhblNxdWFyZWRFcnJvcl88VCBleHRlbmRzIFRlbnNvciwgTyBleHRlbmRzIFRlbnNvcj4oXG4gICAgbGFiZWxzOiBUfFRlbnNvckxpa2UsIHByZWRpY3Rpb25zOiBUfFRlbnNvckxpa2UsXG4gICAgd2VpZ2h0cz86IFRlbnNvcnxUZW5zb3JMaWtlLFxuICAgIHJlZHVjdGlvbiA9IFJlZHVjdGlvbi5TVU1fQllfTk9OWkVST19XRUlHSFRTKTogTyB7XG4gIGNvbnN0ICRsYWJlbHMgPSBjb252ZXJ0VG9UZW5zb3IobGFiZWxzLCAnbGFiZWxzJywgJ21lYW5TcXVhcmVkRXJyb3InKTtcbiAgY29uc3QgJHByZWRpY3Rpb25zID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ21lYW5TcXVhcmVkRXJyb3InKTtcbiAgbGV0ICR3ZWlnaHRzOiBUZW5zb3IgPSBudWxsO1xuICBpZiAod2VpZ2h0cyAhPSBudWxsKSB7XG4gICAgJHdlaWdodHMgPSBjb252ZXJ0VG9UZW5zb3Iod2VpZ2h0cywgJ3dlaWdodHMnLCAnbWVhblNxdWFyZWRFcnJvcicpO1xuICB9XG4gIGFzc2VydFNoYXBlc01hdGNoKFxuICAgICAgJGxhYmVscy5zaGFwZSwgJHByZWRpY3Rpb25zLnNoYXBlLCAnRXJyb3IgaW4gbWVhblNxdWFyZWRFcnJvcjogJyk7XG5cbiAgY29uc3QgbG9zc2VzID0gc3F1YXJlZERpZmZlcmVuY2UoJGxhYmVscywgJHByZWRpY3Rpb25zKTtcbiAgcmV0dXJuIGNvbXB1dGVXZWlnaHRlZExvc3MobG9zc2VzLCAkd2VpZ2h0cywgcmVkdWN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBtZWFuU3F1YXJlZEVycm9yID0gLyogQF9fUFVSRV9fICovIG9wKHttZWFuU3F1YXJlZEVycm9yX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { abs } from '../abs';\nimport { add } from '../add';\nimport { exp } from '../exp';\nimport { log1p } from '../log1p';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { neg } from '../neg';\nimport { op } from '../operation';\nimport { relu } from '../relu';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\nfunction sigmoidCrossEntropyWithLogits_(labels, logits) {\n const $labels = convertToTensor(labels, 'labels', 'sigmoidCrossEntropyWithLogits');\n const $logits = convertToTensor(logits, 'logits', 'sigmoidCrossEntropyWithLogits');\n assertShapesMatch($labels.shape, $logits.shape, 'Error in sigmoidCrossEntropyWithLogits: ');\n /**\n * Implementation Details:\n *\n * For brevity, let `x = logits`, `z = labels`. The logistic loss is\n * z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))\n * = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))\n * = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))\n * = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))\n * = (1 - z) * x + log(1 + exp(-x))\n * = x - x * z + log(1 + exp(-x))\n *\n * For x < 0, to avoid overflow in exp(-x), we reformulate the above\n * x - x * z + log(1 + exp(-x))\n * = log(exp(x)) - x * z + log(1 + exp(-x))\n * = - x * z + log(1 + exp(x))\n *\n * Hence, to ensure stability and avoid overflow, the implementation uses\n * this equivalent formulation:\n * max(x, 0) - x * z + log(1 + exp(-abs(x)))\n */\n const maxOutput = relu($logits);\n const outputXTarget = mul($logits, $labels);\n const sigmoidOutput = log1p(exp(neg(abs($logits))));\n return add(sub(maxOutput, outputXTarget), sigmoidOutput);\n}\n/**\n * Computes the sigmoid cross entropy loss between two tensors.\n *\n * If labelSmoothing is nonzero, smooth the labels towards 1/2:\n *\n * newMulticlassLabels = multiclassLabels * (1 - labelSmoothing)\n * + 0.5 * labelSmoothing\n *\n * @param multiClassLabels The ground truth output tensor of shape\n * [batch_size, num_classes], same dimensions as 'predictions'.\n * @param logits The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param labelSmoothing If greater than 0, then smooth the labels.\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc { heading: 'Training', subheading: 'Losses', namespace: 'losses' }\n */\nfunction sigmoidCrossEntropy_(multiClassLabels, logits, weights, labelSmoothing = 0, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n let $multiClassLabels = convertToTensor(multiClassLabels, 'multiClassLabels', 'sigmoidCrossEntropy');\n const $logits = convertToTensor(logits, 'logits', 'sigmoidCrossEntropy');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'sigmoidCrossEntropy');\n }\n assertShapesMatch($multiClassLabels.shape, $logits.shape, 'Error in sigmoidCrossEntropy: ');\n if (labelSmoothing > 0) {\n const labelSmoothingScalar = scalar(labelSmoothing);\n const one = scalar(1);\n const half = scalar(0.5);\n $multiClassLabels =\n add(mul($multiClassLabels, sub(one, labelSmoothingScalar)), mul(half, labelSmoothingScalar));\n }\n const losses = sigmoidCrossEntropyWithLogits_($multiClassLabels, $logits);\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const sigmoidCrossEntropy = /* @__PURE__ */ op({ sigmoidCrossEntropy_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbW9pZF9jcm9zc19lbnRyb3B5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL3NpZ21vaWRfY3Jvc3NfZW50cm9weS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTNCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVELFNBQVMsOEJBQThCLENBQ25DLE1BQW9CLEVBQUUsTUFBb0I7SUFDNUMsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsK0JBQStCLENBQUMsQ0FBQztJQUN2RSxNQUFNLE9BQU8sR0FDVCxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQ3ZFLGlCQUFpQixDQUNiLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDO0lBRTlFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUJHO0lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILFNBQVMsb0JBQW9CLENBQ3pCLGdCQUE4QixFQUFFLE1BQW9CLEVBQ3BELE9BQTJCLEVBQUUsY0FBYyxHQUFHLENBQUMsRUFDL0MsU0FBUyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0I7SUFDOUMsSUFBSSxpQkFBaUIsR0FBRyxlQUFlLENBQ25DLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN6RSxJQUFJLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDNUIsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsaUJBQWlCLENBQ2IsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztJQUU5RSxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QixpQkFBaUI7WUFDYixHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxFQUN0RCxHQUFHLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztLQUMxQztJQUNELE1BQU0sTUFBTSxHQUFHLDhCQUE4QixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTFFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge2Fic30gZnJvbSAnLi4vYWJzJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0IHtleHB9IGZyb20gJy4uL2V4cCc7XG5pbXBvcnQge2xvZzFwfSBmcm9tICcuLi9sb2cxcCc7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi4vbmVnJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3JlbHV9IGZyb20gJy4uL3JlbHUnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbmZ1bmN0aW9uIHNpZ21vaWRDcm9zc0VudHJvcHlXaXRoTG9naXRzXzxUIGV4dGVuZHMgVGVuc29yLCBPIGV4dGVuZHMgVGVuc29yPihcbiAgICBsYWJlbHM6IFR8VGVuc29yTGlrZSwgbG9naXRzOiBUfFRlbnNvckxpa2UpOiBPIHtcbiAgY29uc3QgJGxhYmVscyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IobGFiZWxzLCAnbGFiZWxzJywgJ3NpZ21vaWRDcm9zc0VudHJvcHlXaXRoTG9naXRzJyk7XG4gIGNvbnN0ICRsb2dpdHMgPVxuICAgICAgY29udmVydFRvVGVuc29yKGxvZ2l0cywgJ2xvZ2l0cycsICdzaWdtb2lkQ3Jvc3NFbnRyb3B5V2l0aExvZ2l0cycpO1xuICBhc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICRsYWJlbHMuc2hhcGUsICRsb2dpdHMuc2hhcGUsICdFcnJvciBpbiBzaWdtb2lkQ3Jvc3NFbnRyb3B5V2l0aExvZ2l0czogJyk7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGF0aW9uIERldGFpbHM6XG4gICAqXG4gICAqIEZvciBicmV2aXR5LCBsZXQgYHggPSBsb2dpdHNgLCBgeiA9IGxhYmVsc2AuICBUaGUgbG9naXN0aWMgbG9zcyBpc1xuICAgKiAgICAgeiAqIC1sb2coc2lnbW9pZCh4KSkgKyAoMSAtIHopICogLWxvZygxIC0gc2lnbW9pZCh4KSlcbiAgICogICA9IHogKiAtbG9nKDEgLyAoMSArIGV4cCgteCkpKSArICgxIC0geikgKiAtbG9nKGV4cCgteCkgLyAoMSArIGV4cCgteCkpKVxuICAgKiAgID0geiAqIGxvZygxICsgZXhwKC14KSkgKyAoMSAtIHopICogKC1sb2coZXhwKC14KSkgKyBsb2coMSArIGV4cCgteCkpKVxuICAgKiAgID0geiAqIGxvZygxICsgZXhwKC14KSkgKyAoMSAtIHopICogKHggKyBsb2coMSArIGV4cCgteCkpXG4gICAqICAgPSAoMSAtIHopICogeCArIGxvZygxICsgZXhwKC14KSlcbiAgICogICA9IHggLSB4ICogeiArIGxvZygxICsgZXhwKC14KSlcbiAgICpcbiAgICogICBGb3IgeCA8IDAsIHRvIGF2b2lkIG92ZXJmbG93IGluIGV4cCgteCksIHdlIHJlZm9ybXVsYXRlIHRoZSBhYm92ZVxuICAgKiAgICAgeCAtIHggKiB6ICsgbG9nKDEgKyBleHAoLXgpKVxuICAgKiAgID0gbG9nKGV4cCh4KSkgLSB4ICogeiArIGxvZygxICsgZXhwKC14KSlcbiAgICogICA9IC0geCAqIHogKyBsb2coMSArIGV4cCh4KSlcbiAgICpcbiAgICogSGVuY2UsIHRvIGVuc3VyZSBzdGFiaWxpdHkgYW5kIGF2b2lkIG92ZXJmbG93LCB0aGUgaW1wbGVtZW50YXRpb24gdXNlc1xuICAgKiB0aGlzIGVxdWl2YWxlbnQgZm9ybXVsYXRpb246XG4gICAqICAgICBtYXgoeCwgMCkgLSB4ICogeiArIGxvZygxICsgZXhwKC1hYnMoeCkpKVxuICAgKi9cbiAgY29uc3QgbWF4T3V0cHV0ID0gcmVsdSgkbG9naXRzKTtcbiAgY29uc3Qgb3V0cHV0WFRhcmdldCA9IG11bCgkbG9naXRzLCAkbGFiZWxzKTtcbiAgY29uc3Qgc2lnbW9pZE91dHB1dCA9IGxvZzFwKGV4cChuZWcoYWJzKCRsb2dpdHMpKSkpO1xuXG4gIHJldHVybiBhZGQoc3ViKG1heE91dHB1dCwgb3V0cHV0WFRhcmdldCksIHNpZ21vaWRPdXRwdXQpO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBzaWdtb2lkIGNyb3NzIGVudHJvcHkgbG9zcyBiZXR3ZWVuIHR3byB0ZW5zb3JzLlxuICpcbiAqIElmIGxhYmVsU21vb3RoaW5nIGlzIG5vbnplcm8sIHNtb290aCB0aGUgbGFiZWxzIHRvd2FyZHMgMS8yOlxuICpcbiAqICAgbmV3TXVsdGljbGFzc0xhYmVscyA9IG11bHRpY2xhc3NMYWJlbHMgKiAoMSAtIGxhYmVsU21vb3RoaW5nKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgKyAwLjUgKiBsYWJlbFNtb290aGluZ1xuICpcbiAqIEBwYXJhbSBtdWx0aUNsYXNzTGFiZWxzIFRoZSBncm91bmQgdHJ1dGggb3V0cHV0IHRlbnNvciBvZiBzaGFwZVxuICogW2JhdGNoX3NpemUsIG51bV9jbGFzc2VzXSwgc2FtZSBkaW1lbnNpb25zIGFzICdwcmVkaWN0aW9ucycuXG4gKiBAcGFyYW0gbG9naXRzIFRoZSBwcmVkaWN0ZWQgb3V0cHV0cy5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbGFiZWxzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbGFiZWxzYCAoaS5lLiwgYWxsIGRpbWVuc2lvbnNcbiAqICAgIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGxvc3Nlc2BcbiAqICAgIGRpbWVuc2lvbikuXG4gKiBAcGFyYW0gbGFiZWxTbW9vdGhpbmcgSWYgZ3JlYXRlciB0aGFuIDAsIHRoZW4gc21vb3RoIHRoZSBsYWJlbHMuXG4gKiBAcGFyYW0gcmVkdWN0aW9uIFR5cGUgb2YgcmVkdWN0aW9uIHRvIGFwcGx5IHRvIGxvc3MuIFNob3VsZCBiZSBvZiB0eXBlXG4gKiAgICBgUmVkdWN0aW9uYFxuICpcbiAqIEBkb2MgeyBoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnTG9zc2VzJywgbmFtZXNwYWNlOiAnbG9zc2VzJyB9XG4gKi9cbmZ1bmN0aW9uIHNpZ21vaWRDcm9zc0VudHJvcHlfPFQgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KFxuICAgIG11bHRpQ2xhc3NMYWJlbHM6IFR8VGVuc29yTGlrZSwgbG9naXRzOiBUfFRlbnNvckxpa2UsXG4gICAgd2VpZ2h0cz86IFRlbnNvcnxUZW5zb3JMaWtlLCBsYWJlbFNtb290aGluZyA9IDAsXG4gICAgcmVkdWN0aW9uID0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpOiBPIHtcbiAgbGV0ICRtdWx0aUNsYXNzTGFiZWxzID0gY29udmVydFRvVGVuc29yKFxuICAgICAgbXVsdGlDbGFzc0xhYmVscywgJ211bHRpQ2xhc3NMYWJlbHMnLCAnc2lnbW9pZENyb3NzRW50cm9weScpO1xuICBjb25zdCAkbG9naXRzID0gY29udmVydFRvVGVuc29yKGxvZ2l0cywgJ2xvZ2l0cycsICdzaWdtb2lkQ3Jvc3NFbnRyb3B5Jyk7XG4gIGxldCAkd2VpZ2h0czogVGVuc29yID0gbnVsbDtcbiAgaWYgKHdlaWdodHMgIT0gbnVsbCkge1xuICAgICR3ZWlnaHRzID0gY29udmVydFRvVGVuc29yKHdlaWdodHMsICd3ZWlnaHRzJywgJ3NpZ21vaWRDcm9zc0VudHJvcHknKTtcbiAgfVxuICBhc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICRtdWx0aUNsYXNzTGFiZWxzLnNoYXBlLCAkbG9naXRzLnNoYXBlLCAnRXJyb3IgaW4gc2lnbW9pZENyb3NzRW50cm9weTogJyk7XG5cbiAgaWYgKGxhYmVsU21vb3RoaW5nID4gMCkge1xuICAgIGNvbnN0IGxhYmVsU21vb3RoaW5nU2NhbGFyID0gc2NhbGFyKGxhYmVsU21vb3RoaW5nKTtcbiAgICBjb25zdCBvbmUgPSBzY2FsYXIoMSk7XG4gICAgY29uc3QgaGFsZiA9IHNjYWxhcigwLjUpO1xuXG4gICAgJG11bHRpQ2xhc3NMYWJlbHMgPVxuICAgICAgICBhZGQobXVsKCRtdWx0aUNsYXNzTGFiZWxzLCBzdWIob25lLCBsYWJlbFNtb290aGluZ1NjYWxhcikpLFxuICAgICAgICAgICAgbXVsKGhhbGYsIGxhYmVsU21vb3RoaW5nU2NhbGFyKSk7XG4gIH1cbiAgY29uc3QgbG9zc2VzID0gc2lnbW9pZENyb3NzRW50cm9weVdpdGhMb2dpdHNfKCRtdWx0aUNsYXNzTGFiZWxzLCAkbG9naXRzKTtcblxuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuXG5leHBvcnQgY29uc3Qgc2lnbW9pZENyb3NzRW50cm9weSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2lnbW9pZENyb3NzRW50cm9weV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { customGrad } from '../../gradients';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { add } from '../add';\nimport { expandShapeToKeepDim } from '../axis_util';\nimport { cast } from '../cast';\nimport { div } from '../div';\nimport { exp } from '../exp';\nimport { logSumExp } from '../log_sum_exp';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { neg } from '../neg';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { sum } from '../sum';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes softmax cross entropy between logits and labels.\n *\n * Measures the probability error in discrete classification tasks in which\n * the classes are mutually exclusive (each entry is in exactly one class).\n * For example, each CIFAR-10 image is labeled with one and only one label: an\n * image can be a dog or a truck, but not both.\n *\n * `NOTE`: While the classes are mutually exclusive, their probabilities need\n * not be. All that is required is that each row of labels is a valid\n * probability distribution. If they are not, the computation of the gradient\n * will be incorrect.\n *\n * `WARNING`: This op expects unscaled logits, since it performs a softmax on\n * logits internally for efficiency. Do not call this op with the output of\n * softmax, as it will produce incorrect results.\n *\n * logits and labels must have the same shape, e.g. [batch_size, num_classes]\n * and the same dtype.\n * @param labels The labels array.\n * @param logits The logits array.\n * @param dim The dimension softmax would be performed on. Defaults to `-1`\n * which indicates the last dimension.\n */\nfunction softmaxCrossEntropyWithLogits_(labels, logits, dim = -1) {\n if (dim === -1) {\n dim = logits.rank - 1;\n }\n if (dim !== logits.rank - 1) {\n throw Error(`Softmax cross entropy along a non-last dimension is not yet ` +\n `supported. Labels / logits was rank ${logits.rank} ` +\n `and dim was ${dim}`);\n }\n // Use a custom gradient for numerical stability.\n const customOp = customGrad((labels, logits, save) => {\n // Reference:\n // 1. http://cs231n.github.io/linear-classify/#softmax\n // 2. https://blog.feedly.com/tricks-of-the-trade-logsumexp/\n const keepDims = true;\n const lse = logSumExp(logits, [dim], keepDims);\n const logResult = sub(cast(logits, 'float32'), lse);\n save([labels, logResult]);\n const costVector = neg(mul(logResult, labels));\n const value = sum(costVector, [dim]);\n const gradFunc = (dy, saved) => {\n const [labels, logResult] = saved;\n const dyShape = expandShapeToKeepDim(dy.shape, [dim]);\n return [\n mul(reshape(dy, dyShape), sub(cast(labels, 'float32'), exp(logResult))),\n mul(reshape(dy, dyShape), sub(exp(logResult), cast(labels, 'float32'))),\n ];\n };\n return { value, gradFunc };\n });\n return customOp(labels, logits);\n}\n/**\n * Computes the softmax cross entropy loss between two tensors.\n *\n * If labelSmoothing is nonzero, smooth the labels towards 1/2:\n *\n * newOnehotLabels = onehotLabels * (1 - labelSmoothing)\n * + labelSmoothing / numClasses\n *\n * @param onehotLabels One hot encoded labels\n * [batch_size, num_classes], same dimensions as 'predictions'.\n * @param logits The predicted outputs.\n * @param weights Tensor whose rank is either 0, or 1, and must be\n * broadcastable to `loss` of shape [batch_size]\n * @param labelSmoothing If greater than 0, then smooth the labels.\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc { heading: 'Training', subheading: 'Losses', namespace: 'losses' }\n */\nfunction softmaxCrossEntropy_(onehotLabels, logits, weights, labelSmoothing = 0, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n let $onehotLabels = convertToTensor(onehotLabels, 'onehotLabels', 'softmaxCrossEntropy');\n const $logits = convertToTensor(logits, 'logits', 'softmaxCrossEntropy');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'softmaxCrossEntropy');\n }\n assertShapesMatch($onehotLabels.shape, $logits.shape, 'Error in softmaxCrossEntropy: ');\n if (labelSmoothing > 0) {\n const labelSmoothingScalar = scalar(labelSmoothing);\n const one = scalar(1);\n const numClasses = scalar($onehotLabels.shape[1]);\n $onehotLabels =\n add(mul($onehotLabels, sub(one, labelSmoothingScalar)), div(labelSmoothingScalar, numClasses));\n }\n const losses = softmaxCrossEntropyWithLogits_($onehotLabels, $logits);\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const softmaxCrossEntropy = /* @__PURE__ */ op({ softmaxCrossEntropy_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdG1heF9jcm9zc19lbnRyb3B5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL3NvZnRtYXhfY3Jvc3NfZW50cm9weS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFHM0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENB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QixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUN2RTtJQUVELGlCQUFpQixDQUNiLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBRTFFLElBQUksY0FBYyxHQUFHLENBQUMsRUFBRTtRQUN0QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxhQUFhO1lBQ1QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLEVBQ2xELEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsTUFBTSxNQUFNLEdBQUcsOEJBQThCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXRFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7Y3VzdG9tR3JhZH0gZnJvbSAnLi4vLi4vZ3JhZGllbnRzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtHcmFkU2F2ZUZ1bmN9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi4vYWRkJztcbmltcG9ydCB7ZXhwYW5kU2hhcGVUb0tlZXBEaW19IGZyb20gJy4uL2F4aXNfdXRpbCc7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4uL2Nhc3QnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4uL2Rpdic7XG5pbXBvcnQge2V4cH0gZnJvbSAnLi4vZXhwJztcbmltcG9ydCB7bG9nU3VtRXhwfSBmcm9tICcuLi9sb2dfc3VtX2V4cCc7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi4vbmVnJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4uL3Jlc2hhcGUnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcbmltcG9ydCB7c3VtfSBmcm9tICcuLi9zdW0nO1xuXG5pbXBvcnQge2NvbXB1dGVXZWlnaHRlZExvc3N9IGZyb20gJy4vY29tcHV0ZV93ZWlnaHRlZF9sb3NzJztcblxuLyoqXG4gKiBDb21wdXRlcyBzb2Z0bWF4IGNyb3NzIGVudHJvcHkgYmV0d2VlbiBsb2dpdHMgYW5kIGxhYmVscy5cbiAqXG4gKiBNZWFzdXJlcyB0aGUgcHJvYmFiaWxpdHkgZXJyb3IgaW4gZGlzY3JldGUgY2xhc3NpZmljYXRpb24gdGFza3MgaW4gd2hpY2hcbiAqIHRoZSBjbGFzc2VzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKGVhY2ggZW50cnkgaXMgaW4gZXhhY3RseSBvbmUgY2xhc3MpLlxuICogRm9yIGV4YW1wbGUsIGVhY2ggQ0lGQVItMTAgaW1hZ2UgaXMgbGFiZWxlZCB3aXRoIG9uZSBhbmQgb25seSBvbmUgbGFiZWw6IGFuXG4gKiBpbWFnZSBjYW4gYmUgYSBkb2cgb3IgYSB0cnVjaywgYnV0IG5vdCBib3RoLlxuICpcbiAqIGBOT1RFYDogV2hpbGUgdGhlIGNsYXNzZXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgdGhlaXIgcHJvYmFiaWxpdGllcyBuZWVkXG4gKiBub3QgYmUuIEFsbCB0aGF0IGlzIHJlcXVpcmVkIGlzIHRoYXQgZWFjaCByb3cgb2YgbGFiZWxzIGlzIGEgdmFsaWRcbiAqIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbi4gSWYgdGhleSBhcmUgbm90LCB0aGUgY29tcHV0YXRpb24gb2YgdGhlIGdyYWRpZW50XG4gKiB3aWxsIGJlIGluY29ycmVjdC5cbiAqXG4gKiBgV0FSTklOR2A6IFRoaXMgb3AgZXhwZWN0cyB1bnNjYWxlZCBsb2dpdHMsIHNpbmNlIGl0IHBlcmZvcm1zIGEgc29mdG1heCBvblxuICogbG9naXRzIGludGVybmFsbHkgZm9yIGVmZmljaWVuY3kuIERvIG5vdCBjYWxsIHRoaXMgb3Agd2l0aCB0aGUgb3V0cHV0IG9mXG4gKiBzb2Z0bWF4LCBhcyBpdCB3aWxsIHByb2R1Y2UgaW5jb3JyZWN0IHJlc3VsdHMuXG4gKlxuICogbG9naXRzIGFuZCBsYWJlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlLCBlLmcuIFtiYXRjaF9zaXplLCBudW1fY2xhc3Nlc11cbiAqIGFuZCB0aGUgc2FtZSBkdHlwZS5cbiAqIEBwYXJhbSBsYWJlbHMgVGhlIGxhYmVscyBhcnJheS5cbiAqIEBwYXJhbSBsb2dpdHMgVGhlIGxvZ2l0cyBhcnJheS5cbiAqIEBwYXJhbSBkaW0gVGhlIGRpbWVuc2lvbiBzb2Z0bWF4IHdvdWxkIGJlIHBlcmZvcm1lZCBvbi4gRGVmYXVsdHMgdG8gYC0xYFxuICogICAgIHdoaWNoIGluZGljYXRlcyB0aGUgbGFzdCBkaW1lbnNpb24uXG4gKi9cbmZ1bmN0aW9uIHNvZnRtYXhDcm9zc0VudHJvcHlXaXRoTG9naXRzXzxUIGV4dGVuZHMgVGVuc29yLCBPIGV4dGVuZHMgVGVuc29yPihcbiAgICBsYWJlbHM6IFQsIGxvZ2l0czogVCwgZGltID0gLTEpOiBPIHtcbiAgaWYgKGRpbSA9PT0gLTEpIHtcbiAgICBkaW0gPSBsb2dpdHMucmFuayAtIDE7XG4gIH1cblxuICBpZiAoZGltICE9PSBsb2dpdHMucmFuayAtIDEpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYFNvZnRtYXggY3Jvc3MgZW50cm9weSBhbG9uZyBhIG5vbi1sYXN0IGRpbWVuc2lvbiBpcyBub3QgeWV0IGAgK1xuICAgICAgICBgc3VwcG9ydGVkLiBMYWJlbHMgLyBsb2dpdHMgd2FzIHJhbmsgJHtsb2dpdHMucmFua30gYCArXG4gICAgICAgIGBhbmQgZGltIHdhcyAke2RpbX1gKTtcbiAgfVxuICAvLyBVc2UgYSBjdXN0b20gZ3JhZGllbnQgZm9yIG51bWVyaWNhbCBzdGFiaWxpdHkuXG4gIGNvbnN0IGN1c3RvbU9wID1cbiAgICAgIGN1c3RvbUdyYWQoKGxhYmVsczogVGVuc29yLCBsb2dpdHM6IFRlbnNvciwgc2F2ZTogR3JhZFNhdmVGdW5jKSA9PiB7XG4gICAgICAgIC8vIFJlZmVyZW5jZTpcbiAgICAgICAgLy8gICAxLiBodHRwOi8vY3MyMzFuLmdpdGh1Yi5pby9saW5lYXItY2xhc3NpZnkvI3NvZnRtYXhcbiAgICAgICAgLy8gICAyLiBodHRwczovL2Jsb2cuZmVlZGx5LmNvbS90cmlja3Mtb2YtdGhlLXRyYWRlLWxvZ3N1bWV4cC9cbiAgICAgICAgY29uc3Qga2VlcERpbXMgPSB0cnVlO1xuICAgICAgICBjb25zdCBsc2UgPSBsb2dTdW1FeHAobG9naXRzLCBbZGltXSwga2VlcERpbXMpO1xuICAgICAgICBjb25zdCBsb2dSZXN1bHQgPSBzdWIoY2FzdChsb2dpdHMsICdmbG9hdDMyJyksIGxzZSk7XG4gICAgICAgIHNhdmUoW2xhYmVscywgbG9nUmVzdWx0XSk7XG5cbiAgICAgICAgY29uc3QgY29zdFZlY3RvciA9IG5lZyhtdWwobG9nUmVzdWx0LCBsYWJlbHMpKTtcbiAgICAgICAgY29uc3QgdmFsdWU6IE8gPSBzdW0oY29zdFZlY3RvciwgW2RpbV0pO1xuXG4gICAgICAgIGNvbnN0IGdyYWRGdW5jID0gKGR5OiBPLCBzYXZlZDogVGVuc29yW10pID0+IHtcbiAgICAgICAgICBjb25zdCBbbGFiZWxzLCBsb2dSZXN1bHRdID0gc2F2ZWQ7XG4gICAgICAgICAgY29uc3QgZHlTaGFwZSA9IGV4cGFuZFNoYXBlVG9LZWVwRGltKGR5LnNoYXBlLCBbZGltXSk7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG11bChyZXNoYXBlKGR5LCBkeVNoYXBlKSxcbiAgICAgICAgICAgICAgICBzdWIoY2FzdChsYWJlbHMsICdmbG9hdDMyJyksIGV4cChsb2dSZXN1bHQpKSksXG4gICAgICAgICAgICBtdWwocmVzaGFwZShkeSwgZHlTaGFwZSksXG4gICAgICAgICAgICAgICAgc3ViKGV4cChsb2dSZXN1bHQpLCBjYXN0KGxhYmVscywgJ2Zsb2F0MzInKSkpLFxuICAgICAgICAgIF07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7dmFsdWUsIGdyYWRGdW5jfTtcbiAgICAgIH0pO1xuXG4gIHJldHVybiBjdXN0b21PcChsYWJlbHMsIGxvZ2l0cyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHNvZnRtYXggY3Jvc3MgZW50cm9weSBsb3NzIGJldHdlZW4gdHdvIHRlbnNvcnMuXG4gKlxuICogSWYgbGFiZWxTbW9vdGhpbmcgaXMgbm9uemVybywgc21vb3RoIHRoZSBsYWJlbHMgdG93YXJkcyAxLzI6XG4gKlxuICogICBuZXdPbmVob3RMYWJlbHMgPSBvbmVob3RMYWJlbHMgKiAoMSAtIGxhYmVsU21vb3RoaW5nKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgKyBsYWJlbFNtb290aGluZyAvIG51bUNsYXNzZXNcbiAqXG4gKiBAcGFyYW0gb25laG90TGFiZWxzIE9uZSBob3QgZW5jb2RlZCBsYWJlbHNcbiAqICAgIFtiYXRjaF9zaXplLCBudW1fY2xhc3Nlc10sIHNhbWUgZGltZW5zaW9ucyBhcyAncHJlZGljdGlvbnMnLlxuICogQHBhcmFtIGxvZ2l0cyBUaGUgcHJlZGljdGVkIG91dHB1dHMuXG4gKiBAcGFyYW0gd2VpZ2h0cyBUZW5zb3Igd2hvc2UgcmFuayBpcyBlaXRoZXIgMCwgb3IgMSwgYW5kIG11c3QgYmVcbiAqICAgIGJyb2FkY2FzdGFibGUgdG8gYGxvc3NgICBvZiBzaGFwZSBbYmF0Y2hfc2l6ZV1cbiAqIEBwYXJhbSBsYWJlbFNtb290aGluZyBJZiBncmVhdGVyIHRoYW4gMCwgdGhlbiBzbW9vdGggdGhlIGxhYmVscy5cbiAqIEBwYXJhbSByZWR1Y3Rpb24gVHlwZSBvZiByZWR1Y3Rpb24gdG8gYXBwbHkgdG8gbG9zcy4gU2hvdWxkIGJlIG9mIHR5cGVcbiAqICAgIGBSZWR1Y3Rpb25gXG4gKlxuICogQGRvYyB7IGhlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnIH1cbiAqL1xuZnVuY3Rpb24gc29mdG1heENyb3NzRW50cm9weV88VCBleHRlbmRzIFRlbnNvciwgTyBleHRlbmRzIFRlbnNvcj4oXG4gICAgb25laG90TGFiZWxzOiBUfFRlbnNvckxpa2UsIGxvZ2l0czogVHxUZW5zb3JMaWtlLFxuICAgIHdlaWdodHM/OiBUZW5zb3J8VGVuc29yTGlrZSwgbGFiZWxTbW9vdGhpbmcgPSAwLFxuICAgIHJlZHVjdGlvbiA9IFJlZHVjdGlvbi5TVU1fQllfTk9OWkVST19XRUlHSFRTKTogTyB7XG4gIGxldCAkb25laG90TGFiZWxzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihvbmVob3RMYWJlbHMsICdvbmVob3RMYWJlbHMnLCAnc29mdG1heENyb3NzRW50cm9weScpO1xuICBjb25zdCAkbG9naXRzID0gY29udmVydFRvVGVuc29yKGxvZ2l0cywgJ2xvZ2l0cycsICdzb2Z0bWF4Q3Jvc3NFbnRyb3B5Jyk7XG4gIGxldCAkd2VpZ2h0czogVGVuc29yID0gbnVsbDtcblxuICBpZiAod2VpZ2h0cyAhPSBudWxsKSB7XG4gICAgJHdlaWdodHMgPSBjb252ZXJ0VG9UZW5zb3Iod2VpZ2h0cywgJ3dlaWdodHMnLCAnc29mdG1heENyb3NzRW50cm9weScpO1xuICB9XG5cbiAgYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAkb25laG90TGFiZWxzLnNoYXBlLCAkbG9naXRzLnNoYXBlLCAnRXJyb3IgaW4gc29mdG1heENyb3NzRW50cm9weTogJyk7XG5cbiAgaWYgKGxhYmVsU21vb3RoaW5nID4gMCkge1xuICAgIGNvbnN0IGxhYmVsU21vb3RoaW5nU2NhbGFyID0gc2NhbGFyKGxhYmVsU21vb3RoaW5nKTtcbiAgICBjb25zdCBvbmUgPSBzY2FsYXIoMSk7XG4gICAgY29uc3QgbnVtQ2xhc3NlcyA9IHNjYWxhcigkb25laG90TGFiZWxzLnNoYXBlWzFdKTtcblxuICAgICRvbmVob3RMYWJlbHMgPVxuICAgICAgICBhZGQobXVsKCRvbmVob3RMYWJlbHMsIHN1YihvbmUsIGxhYmVsU21vb3RoaW5nU2NhbGFyKSksXG4gICAgICAgICAgICBkaXYobGFiZWxTbW9vdGhpbmdTY2FsYXIsIG51bUNsYXNzZXMpKTtcbiAgfVxuXG4gIGNvbnN0IGxvc3NlcyA9IHNvZnRtYXhDcm9zc0VudHJvcHlXaXRoTG9naXRzXygkb25laG90TGFiZWxzLCAkbG9naXRzKTtcblxuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuXG5leHBvcnQgY29uc3Qgc29mdG1heENyb3NzRW50cm9weSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c29mdG1heENyb3NzRW50cm9weV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { SparseFillEmptyRows } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * The input SparseTensor is represented via the map of inputs {`indices`,\n * `values`, `denseShape`}. The output SparseTensor has the same `denseShape`\n * but with indices `outputIndices` and values `outputValues`. This op inserts a\n * single entry for every row that doesn't have any values. The index is created\n * as `[row, 0, ..., 0]` and the inserted value is `defaultValue`.\n *\n * For example, suppose `spInput` has shape [5, 6] and non-empty values:\n * [0, 1]: a\n * [0, 3]: b\n * [2, 0]: c\n * [3, 1]: d\n *\n * Rows 1 and 4 are empty, so the output will be of shape [5, 6] with values:\n * [0, 1]: a\n * [0, 3]: b\n * [1, 0]: `defaultValue`\n * [2, 0]: c\n * [3, 1]: d\n * [4, 0]: `defaultValue`\n *\n * The output SparseTensor will be in row-major order and will have the same\n * shape as the input.\n *\n * This op also returns an indicator vector shaped [dense_shape[0]] such that\n * emptyRowIndicator[i] = True iff row i was an empty row.\n *\n * And a reverse index map vector shaped [indices.shape[0]] that is used during\n * backpropagation, reverseIndexMap[i] = outi s.t. indices[i, j] ==\n * outputIndices[outi, j] for all j\n *\n * ```js\n * const result = tf.sparse.sparseFillEmptyRows(\n * [[0, 0], [1, 0], [1, 3], [1, 4], [3, 2], [3, 3]],\n * [0, 10, 13, 14, 32, 33], [5, 6], -1);\n * console.log(result);\n * result['outputIndices'].print(); // [[0, 0], [1, 0], [1, 3], [1, 4],\n * // [2, 0], [3, 2], [3, 3], [4, 0]]\n * result['outputValues'].print(); // [0, 10, 13, 14,-1, 32, 33, -1]\n * result['emptyRowIndicator'].print(); // [false, false, true, false, true]\n * result['reverseIndexMap'].print(); // [0, 1, 2, 3, 5, 6]\n * ```\n * @param indices: 2-D. The indices of the sparse tensor.\n * @param values: 1-D. The values of the sparse tensor.\n * @param denseShape: 1-D. The shape of the sparse tensor.\n * @param defaultValue: 0-D. Default value to insert into location [row, 0, ...,\n * 0] for rows missing from the input sparse tensor.\n * @return A map with the following properties:\n * - outputIndices\n * - outputValues: 1-D. The values of the filled sparse tensor.\n * - emptyRowIndicator: 1-D. Whether the dense row was missing in the input\n * sparse tensor.\n * - reverseIndexMap: 1-D. A map from the input indices to the output\n * indices.\n * @doc {heading: 'Operations', subheading: 'Sparse'}\n */\nfunction sparseFillEmptyRows_(indices, values, denseShape, defaultValue) {\n const $indices = convertToTensor(indices, 'indices', 'sparseFillEmptyRows', 'int32');\n const $values = convertToTensor(values, 'values', 'sparseFillEmptyRows');\n const $denseShape = convertToTensor(denseShape, 'denseShape', 'sparseFillEmptyRows', 'int32');\n const $defaultValue = convertToTensor(defaultValue, 'defaultValue', 'sparseFillEmptyRows', $values.dtype);\n if ($indices.rank !== 2) {\n throw new Error(`Indices should be Tensor2D but received shape\n ${$indices.shape}`);\n }\n if ($values.rank !== 1) {\n throw new Error(`Values should be Tensor1D but received shape ${$values.shape}`);\n }\n if ($denseShape.rank !== 1) {\n throw new Error(`Dense shape should be Tensor1D but received shape ${$denseShape.shape}`);\n }\n if ($defaultValue.rank !== 0) {\n throw new Error(`Default value should be a scalar but received shape ${$defaultValue.shape}`);\n }\n const inputs = {\n indices: $indices,\n values: $values,\n denseShape: $denseShape,\n defaultValue: $defaultValue\n };\n const result = ENGINE.runKernel(SparseFillEmptyRows, inputs);\n return {\n outputIndices: result[0],\n outputValues: result[1],\n emptyRowIndicator: result[2],\n reverseIndexMap: result[3]\n };\n}\nexport const sparseFillEmptyRows = /* @__PURE__ */ op({ sparseFillEmptyRows_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX2ZpbGxfZW1wdHlfcm93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwYXJzZS9zcGFyc2VfZmlsbF9lbXB0eV9yb3dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLG1CQUFtQixFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBR2xGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDekIsT0FBNEIsRUFBRSxNQUEyQixFQUN6RCxVQUErQixFQUMvQixZQUErQjtJQUNqQyxNQUFNLFFBQVEsR0FDVixlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FDakMsWUFBWSxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDO1VBQ1YsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDekI7SUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0RBQWdELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBQ0QsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUNaLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzFCO0lBQ0QsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUNaLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzVCO0lBRUQsTUFBTSxNQUFNLEdBQThCO1FBQ3hDLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLE1BQU0sRUFBRSxPQUFPO1FBQ2YsVUFBVSxFQUFFLFdBQVc7UUFDdkIsWUFBWSxFQUFFLGFBQWE7S0FDNUIsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsTUFBWSxDQUFDLENBQUM7SUFDN0UsT0FBTztRQUNMLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDM0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsb0JBQW9CLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7U3BhcnNlRmlsbEVtcHR5Um93cywgU3BhcnNlRmlsbEVtcHR5Um93c0lucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7U2NhbGFyLCBUZW5zb3IsIFRlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7U2NhbGFyTGlrZSwgVGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBUaGUgaW5wdXQgU3BhcnNlVGVuc29yIGlzIHJlcHJlc2VudGVkIHZpYSB0aGUgbWFwIG9mIGlucHV0cyB7YGluZGljZXNgLFxuICogYHZhbHVlc2AsIGBkZW5zZVNoYXBlYH0uIFRoZSBvdXRwdXQgU3BhcnNlVGVuc29yIGhhcyB0aGUgc2FtZSBgZGVuc2VTaGFwZWBcbiAqIGJ1dCB3aXRoIGluZGljZXMgYG91dHB1dEluZGljZXNgIGFuZCB2YWx1ZXMgYG91dHB1dFZhbHVlc2AuIFRoaXMgb3AgaW5zZXJ0cyBhXG4gKiBzaW5nbGUgZW50cnkgZm9yIGV2ZXJ5IHJvdyB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgdmFsdWVzLiBUaGUgaW5kZXggaXMgY3JlYXRlZFxuICogYXMgYFtyb3csIDAsIC4uLiwgMF1gIGFuZCB0aGUgaW5zZXJ0ZWQgdmFsdWUgaXMgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogRm9yIGV4YW1wbGUsIHN1cHBvc2UgYHNwSW5wdXRgIGhhcyBzaGFwZSBbNSwgNl0gYW5kIG5vbi1lbXB0eSB2YWx1ZXM6XG4gKiBbMCwgMV06IGFcbiAqIFswLCAzXTogYlxuICogWzIsIDBdOiBjXG4gKiBbMywgMV06IGRcbiAqXG4gKiBSb3dzIDEgYW5kIDQgYXJlIGVtcHR5LCBzbyB0aGUgb3V0cHV0IHdpbGwgYmUgb2Ygc2hhcGUgWzUsIDZdIHdpdGggdmFsdWVzOlxuICogWzAsIDFdOiBhXG4gKiBbMCwgM106IGJcbiAqIFsxLCAwXTogYGRlZmF1bHRWYWx1ZWBcbiAqIFsyLCAwXTogY1xuICogWzMsIDFdOiBkXG4gKiBbNCwgMF06IGBkZWZhdWx0VmFsdWVgXG4gKlxuICogVGhlIG91dHB1dCBTcGFyc2VUZW5zb3Igd2lsbCBiZSBpbiByb3ctbWFqb3Igb3JkZXIgYW5kIHdpbGwgaGF2ZSB0aGUgc2FtZVxuICogc2hhcGUgYXMgdGhlIGlucHV0LlxuICpcbiAqIFRoaXMgb3AgYWxzbyByZXR1cm5zIGFuIGluZGljYXRvciB2ZWN0b3Igc2hhcGVkIFtkZW5zZV9zaGFwZVswXV0gc3VjaCB0aGF0XG4gKiBlbXB0eVJvd0luZGljYXRvcltpXSA9IFRydWUgaWZmIHJvdyBpIHdhcyBhbiBlbXB0eSByb3cuXG4gKlxuICogQW5kIGEgcmV2ZXJzZSBpbmRleCBtYXAgdmVjdG9yIHNoYXBlZCBbaW5kaWNlcy5zaGFwZVswXV0gdGhhdCBpcyB1c2VkIGR1cmluZ1xuICogYmFja3Byb3BhZ2F0aW9uLCByZXZlcnNlSW5kZXhNYXBbaV0gPSBvdXRpIHMudC4gaW5kaWNlc1tpLCBqXSA9PVxuICogb3V0cHV0SW5kaWNlc1tvdXRpLCBqXSBmb3IgYWxsIGpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gdGYuc3BhcnNlLnNwYXJzZUZpbGxFbXB0eVJvd3MoXG4gKiAgIFtbMCwgMF0sIFsxLCAwXSwgWzEsIDNdLCBbMSwgNF0sIFszLCAyXSwgWzMsIDNdXSxcbiAqICAgWzAsIDEwLCAxMywgMTQsIDMyLCAzM10sIFs1LCA2XSwgLTEpO1xuICogY29uc29sZS5sb2cocmVzdWx0KTtcbiAqIHJlc3VsdFsnb3V0cHV0SW5kaWNlcyddLnByaW50KCk7IC8vIFtbMCwgMF0sIFsxLCAwXSwgWzEsIDNdLCBbMSwgNF0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgWzIsIDBdLCBbMywgMl0sIFszLCAzXSwgWzQsIDBdXVxuICogcmVzdWx0WydvdXRwdXRWYWx1ZXMnXS5wcmludCgpOyAvLyBbMCwgMTAsIDEzLCAxNCwtMSwgMzIsIDMzLCAtMV1cbiAqIHJlc3VsdFsnZW1wdHlSb3dJbmRpY2F0b3InXS5wcmludCgpOyAvLyBbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAqIHJlc3VsdFsncmV2ZXJzZUluZGV4TWFwJ10ucHJpbnQoKTsgLy8gWzAsIDEsIDIsIDMsIDUsIDZdXG4gKiBgYGBcbiAqIEBwYXJhbSBpbmRpY2VzOiAyLUQuIFRoZSBpbmRpY2VzIG9mIHRoZSBzcGFyc2UgdGVuc29yLlxuICogQHBhcmFtIHZhbHVlczogMS1ELiBUaGUgdmFsdWVzIG9mIHRoZSBzcGFyc2UgdGVuc29yLlxuICogQHBhcmFtIGRlbnNlU2hhcGU6IDEtRC4gVGhlIHNoYXBlIG9mIHRoZSBzcGFyc2UgdGVuc29yLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZTogMC1ELiBEZWZhdWx0IHZhbHVlIHRvIGluc2VydCBpbnRvIGxvY2F0aW9uIFtyb3csIDAsIC4uLixcbiAqICAgICAwXSBmb3Igcm93cyBtaXNzaW5nIGZyb20gdGhlIGlucHV0IHNwYXJzZSB0ZW5zb3IuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gb3V0cHV0SW5kaWNlc1xuICogICAgIC0gb3V0cHV0VmFsdWVzOiAxLUQuIFRoZSB2YWx1ZXMgb2YgdGhlIGZpbGxlZCBzcGFyc2UgdGVuc29yLlxuICogICAgIC0gZW1wdHlSb3dJbmRpY2F0b3I6IDEtRC4gV2hldGhlciB0aGUgZGVuc2Ugcm93IHdhcyBtaXNzaW5nIGluIHRoZSBpbnB1dFxuICogc3BhcnNlIHRlbnNvci5cbiAqICAgICAtIHJldmVyc2VJbmRleE1hcDogMS1ELiBBIG1hcCBmcm9tIHRoZSBpbnB1dCBpbmRpY2VzIHRvIHRoZSBvdXRwdXRcbiAqIGluZGljZXMuXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTcGFyc2UnfVxuICovXG5mdW5jdGlvbiBzcGFyc2VGaWxsRW1wdHlSb3dzXyhcbiAgICBpbmRpY2VzOiBUZW5zb3IyRHxUZW5zb3JMaWtlLCB2YWx1ZXM6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgZGVuc2VTaGFwZTogVGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICBkZWZhdWx0VmFsdWU6IFNjYWxhcnxTY2FsYXJMaWtlKTogTmFtZWRUZW5zb3JNYXAge1xuICBjb25zdCAkaW5kaWNlcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IoaW5kaWNlcywgJ2luZGljZXMnLCAnc3BhcnNlRmlsbEVtcHR5Um93cycsICdpbnQzMicpO1xuICBjb25zdCAkdmFsdWVzID0gY29udmVydFRvVGVuc29yKHZhbHVlcywgJ3ZhbHVlcycsICdzcGFyc2VGaWxsRW1wdHlSb3dzJyk7XG4gIGNvbnN0ICRkZW5zZVNoYXBlID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihkZW5zZVNoYXBlLCAnZGVuc2VTaGFwZScsICdzcGFyc2VGaWxsRW1wdHlSb3dzJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRkZWZhdWx0VmFsdWUgPSBjb252ZXJ0VG9UZW5zb3IoXG4gICAgICBkZWZhdWx0VmFsdWUsICdkZWZhdWx0VmFsdWUnLCAnc3BhcnNlRmlsbEVtcHR5Um93cycsICR2YWx1ZXMuZHR5cGUpO1xuXG4gIGlmICgkaW5kaWNlcy5yYW5rICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbmRpY2VzIHNob3VsZCBiZSBUZW5zb3IyRCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgJHskaW5kaWNlcy5zaGFwZX1gKTtcbiAgfVxuICBpZiAoJHZhbHVlcy5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmFsdWVzIHNob3VsZCBiZSBUZW5zb3IxRCBidXQgcmVjZWl2ZWQgc2hhcGUgJHskdmFsdWVzLnNoYXBlfWApO1xuICB9XG4gIGlmICgkZGVuc2VTaGFwZS5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZW5zZSBzaGFwZSBzaG91bGQgYmUgVGVuc29yMUQgYnV0IHJlY2VpdmVkIHNoYXBlICR7XG4gICAgICAgICRkZW5zZVNoYXBlLnNoYXBlfWApO1xuICB9XG4gIGlmICgkZGVmYXVsdFZhbHVlLnJhbmsgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIGEgc2NhbGFyIGJ1dCByZWNlaXZlZCBzaGFwZSAke1xuICAgICAgICAkZGVmYXVsdFZhbHVlLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBTcGFyc2VGaWxsRW1wdHlSb3dzSW5wdXRzID0ge1xuICAgIGluZGljZXM6ICRpbmRpY2VzLFxuICAgIHZhbHVlczogJHZhbHVlcyxcbiAgICBkZW5zZVNoYXBlOiAkZGVuc2VTaGFwZSxcbiAgICBkZWZhdWx0VmFsdWU6ICRkZWZhdWx0VmFsdWVcbiAgfTtcblxuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID0gRU5HSU5FLnJ1bktlcm5lbChTcGFyc2VGaWxsRW1wdHlSb3dzLCBpbnB1dHMgYXMge30pO1xuICByZXR1cm4ge1xuICAgIG91dHB1dEluZGljZXM6IHJlc3VsdFswXSxcbiAgICBvdXRwdXRWYWx1ZXM6IHJlc3VsdFsxXSxcbiAgICBlbXB0eVJvd0luZGljYXRvcjogcmVzdWx0WzJdLFxuICAgIHJldmVyc2VJbmRleE1hcDogcmVzdWx0WzNdXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzcGFyc2VGaWxsRW1wdHlSb3dzID0gLyogQF9fUFVSRV9fICovIG9wKHtzcGFyc2VGaWxsRW1wdHlSb3dzX30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { SparseReshape } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * This operation has the same semantics as reshape on the represented dense\n * tensor. The `inputIndices` are recomputed based on the requested `newShape`.\n * If one component of `newShape` is the special value -1, the size of that\n * dimension is computed so that the total dense size remains constant. At most\n * one component of `newShape` can be -1. The number of dense elements implied\n * by `newShape` must be the same as the number of dense elements originally\n * implied by `inputShape`. Reshaping does not affect the order of values in the\n * SparseTensor. If the input tensor has rank R_in and N non-empty values, and\n * `newShape` has length R_out, then `inputIndices` has shape [N, R_in],\n * `inputShape` has length R_in, `outputIndices` has shape [N, R_out], and\n * `outputShape` has length R_out.\n *\n * ```js\n * const result = tf.sparse.sparseReshape(\n * [[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 2, 3]],\n * [2, 3, 6], [9, -1]);\n * console.log(result);\n * result['outputIndices'].print(); //[[0, 0], [0, 1], [1, 2], [4, 2], [8, 1]]\n * result['outputShape'].print(); // [9, 4]\n * ```\n * @param inputIndices: 2-D. N x R_in matrix with the indices of non-empty\n * values in a SparseTensor.\n * @param inputShape: 1-D. R_in Tensor1D with the input SparseTensor's dense\n * shape.\n * @param newShape: 1-D. R_out Tensor1D with the requested new dense shape.\n * @return A map with the following properties:\n * - outputIndices: 2-D. N x R_out matrix with the updated indices of\n * non-empty values in the output SparseTensor.\n * - outputShape: 1-D. R_out vector with the full dense shape of the output\n * SparseTensor. This is the same as newShape but with any -1 dimensions\n * filled in.\n * @doc {heading: 'Operations', subheading: 'Sparse'}\n */\nfunction sparseReshape_(inputIndices, inputShape, newShape) {\n const $inputIndices = convertToTensor(inputIndices, 'inputIndices', 'sparseReshape', 'int32');\n const $inputShape = convertToTensor(inputShape, 'inputShape', 'sparseReshape', 'int32');\n const $newShape = convertToTensor(newShape, 'newShape', 'sparseReshape', 'int32');\n if ($inputIndices.rank !== 2) {\n throw new Error(`Input indices should be Tensor2D but received shape\n ${$inputIndices.shape}`);\n }\n if ($inputShape.rank !== 1) {\n throw new Error(`Input shape should be Tensor1D but received shape ${$inputShape.shape}`);\n }\n if ($newShape.rank !== 1) {\n throw new Error(`New shape should be Tensor1D but received shape ${$newShape.shape}`);\n }\n const inputs = {\n inputIndices: $inputIndices,\n inputShape: $inputShape,\n newShape: $newShape\n };\n const result = ENGINE.runKernel(SparseReshape, inputs);\n return { outputIndices: result[0], outputShape: result[1] };\n}\nexport const sparseReshape = /* @__PURE__ */ op({ sparseReshape_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3Jlc2hhcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGFyc2Uvc3BhcnNlX3Jlc2hhcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLG9CQUFvQixDQUFDO0FBR3RFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxTQUFTLGNBQWMsQ0FDbkIsWUFBaUMsRUFBRSxVQUErQixFQUNsRSxRQUE2QjtJQUMvQixNQUFNLGFBQWEsR0FDZixlQUFlLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUUsTUFBTSxXQUFXLEdBQ2IsZUFBZSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sU0FBUyxHQUNYLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVwRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUM7VUFDVixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUM5QjtJQUNELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFDWixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMxQjtJQUNELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDWCxtREFBbUQsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDM0U7SUFFRCxNQUFNLE1BQU0sR0FBd0I7UUFDbEMsWUFBWSxFQUFFLGFBQWE7UUFDM0IsVUFBVSxFQUFFLFdBQVc7UUFDdkIsUUFBUSxFQUFFLFNBQVM7S0FDcEIsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE1BQVksQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sRUFBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7U3BhcnNlUmVzaGFwZSwgU3BhcnNlUmVzaGFwZUlucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRCwgVGVuc29yMkR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogVGhpcyBvcGVyYXRpb24gaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyByZXNoYXBlIG9uIHRoZSByZXByZXNlbnRlZCBkZW5zZVxuICogdGVuc29yLiBUaGUgYGlucHV0SW5kaWNlc2AgYXJlIHJlY29tcHV0ZWQgYmFzZWQgb24gdGhlIHJlcXVlc3RlZCBgbmV3U2hhcGVgLlxuICogSWYgb25lIGNvbXBvbmVudCBvZiBgbmV3U2hhcGVgIGlzIHRoZSBzcGVjaWFsIHZhbHVlIC0xLCB0aGUgc2l6ZSBvZiB0aGF0XG4gKiBkaW1lbnNpb24gaXMgY29tcHV0ZWQgc28gdGhhdCB0aGUgdG90YWwgZGVuc2Ugc2l6ZSByZW1haW5zIGNvbnN0YW50LiBBdCBtb3N0XG4gKiBvbmUgY29tcG9uZW50IG9mIGBuZXdTaGFwZWAgY2FuIGJlIC0xLiBUaGUgbnVtYmVyIG9mIGRlbnNlIGVsZW1lbnRzIGltcGxpZWRcbiAqIGJ5IGBuZXdTaGFwZWAgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGRlbnNlIGVsZW1lbnRzIG9yaWdpbmFsbHlcbiAqIGltcGxpZWQgYnkgYGlucHV0U2hhcGVgLiBSZXNoYXBpbmcgZG9lcyBub3QgYWZmZWN0IHRoZSBvcmRlciBvZiB2YWx1ZXMgaW4gdGhlXG4gKiBTcGFyc2VUZW5zb3IuIElmIHRoZSBpbnB1dCB0ZW5zb3IgaGFzIHJhbmsgUl9pbiBhbmQgTiBub24tZW1wdHkgdmFsdWVzLCBhbmRcbiAqIGBuZXdTaGFwZWAgaGFzIGxlbmd0aCBSX291dCwgdGhlbiBgaW5wdXRJbmRpY2VzYCBoYXMgc2hhcGUgW04sIFJfaW5dLFxuICogYGlucHV0U2hhcGVgIGhhcyBsZW5ndGggUl9pbiwgYG91dHB1dEluZGljZXNgIGhhcyBzaGFwZSBbTiwgUl9vdXRdLCBhbmRcbiAqIGBvdXRwdXRTaGFwZWAgaGFzIGxlbmd0aCBSX291dC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gdGYuc3BhcnNlLnNwYXJzZVJlc2hhcGUoXG4gKiAgIFtbMCwgMCwgMF0sIFswLCAwLCAxXSwgWzAsIDEsIDBdLCBbMSwgMCwgMF0sIFsxLCAyLCAzXV0sXG4gKiAgIFsyLCAzLCA2XSwgWzksIC0xXSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICogcmVzdWx0WydvdXRwdXRJbmRpY2VzJ10ucHJpbnQoKTsgLy9bWzAsIDBdLCBbMCwgMV0sIFsxLCAyXSwgWzQsIDJdLCBbOCwgMV1dXG4gKiByZXN1bHRbJ291dHB1dFNoYXBlJ10ucHJpbnQoKTsgLy8gWzksIDRdXG4gKiBgYGBcbiAqIEBwYXJhbSBpbnB1dEluZGljZXM6IDItRC4gTiB4IFJfaW4gbWF0cml4IHdpdGggdGhlIGluZGljZXMgb2Ygbm9uLWVtcHR5XG4gKiB2YWx1ZXMgaW4gYSBTcGFyc2VUZW5zb3IuXG4gKiBAcGFyYW0gaW5wdXRTaGFwZTogMS1ELiBSX2luIFRlbnNvcjFEIHdpdGggdGhlIGlucHV0IFNwYXJzZVRlbnNvcidzIGRlbnNlXG4gKiBzaGFwZS5cbiAqIEBwYXJhbSBuZXdTaGFwZTogMS1ELiBSX291dCBUZW5zb3IxRCB3aXRoIHRoZSByZXF1ZXN0ZWQgbmV3IGRlbnNlIHNoYXBlLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIG91dHB1dEluZGljZXM6IDItRC4gTiB4IFJfb3V0IG1hdHJpeCB3aXRoIHRoZSB1cGRhdGVkIGluZGljZXMgb2ZcbiAqICAgICAgIG5vbi1lbXB0eSB2YWx1ZXMgaW4gdGhlIG91dHB1dCBTcGFyc2VUZW5zb3IuXG4gKiAgICAgLSBvdXRwdXRTaGFwZTogMS1ELiBSX291dCB2ZWN0b3Igd2l0aCB0aGUgZnVsbCBkZW5zZSBzaGFwZSBvZiB0aGUgb3V0cHV0XG4gKiAgICAgICBTcGFyc2VUZW5zb3IuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbmV3U2hhcGUgYnV0IHdpdGggYW55IC0xIGRpbWVuc2lvbnNcbiAqICAgICAgICBmaWxsZWQgaW4uXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTcGFyc2UnfVxuICovXG5mdW5jdGlvbiBzcGFyc2VSZXNoYXBlXyhcbiAgICBpbnB1dEluZGljZXM6IFRlbnNvcjJEfFRlbnNvckxpa2UsIGlucHV0U2hhcGU6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgbmV3U2hhcGU6IFRlbnNvcjFEfFRlbnNvckxpa2UpOiBOYW1lZFRlbnNvck1hcCB7XG4gIGNvbnN0ICRpbnB1dEluZGljZXMgPVxuICAgICAgY29udmVydFRvVGVuc29yKGlucHV0SW5kaWNlcywgJ2lucHV0SW5kaWNlcycsICdzcGFyc2VSZXNoYXBlJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRpbnB1dFNoYXBlID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihpbnB1dFNoYXBlLCAnaW5wdXRTaGFwZScsICdzcGFyc2VSZXNoYXBlJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRuZXdTaGFwZSA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IobmV3U2hhcGUsICduZXdTaGFwZScsICdzcGFyc2VSZXNoYXBlJywgJ2ludDMyJyk7XG5cbiAgaWYgKCRpbnB1dEluZGljZXMucmFuayAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgaW5kaWNlcyBzaG91bGQgYmUgVGVuc29yMkQgYnV0IHJlY2VpdmVkIHNoYXBlXG4gICAgICAgICR7JGlucHV0SW5kaWNlcy5zaGFwZX1gKTtcbiAgfVxuICBpZiAoJGlucHV0U2hhcGUucmFuayAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgc2hhcGUgc2hvdWxkIGJlIFRlbnNvcjFEIGJ1dCByZWNlaXZlZCBzaGFwZSAke1xuICAgICAgICAkaW5wdXRTaGFwZS5zaGFwZX1gKTtcbiAgfVxuICBpZiAoJG5ld1NoYXBlLnJhbmsgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBOZXcgc2hhcGUgc2hvdWxkIGJlIFRlbnNvcjFEIGJ1dCByZWNlaXZlZCBzaGFwZSAkeyRuZXdTaGFwZS5zaGFwZX1gKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogU3BhcnNlUmVzaGFwZUlucHV0cyA9IHtcbiAgICBpbnB1dEluZGljZXM6ICRpbnB1dEluZGljZXMsXG4gICAgaW5wdXRTaGFwZTogJGlucHV0U2hhcGUsXG4gICAgbmV3U2hhcGU6ICRuZXdTaGFwZVxuICB9O1xuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID0gRU5HSU5FLnJ1bktlcm5lbChTcGFyc2VSZXNoYXBlLCBpbnB1dHMgYXMge30pO1xuICByZXR1cm4ge291dHB1dEluZGljZXM6IHJlc3VsdFswXSwgb3V0cHV0U2hhcGU6IHJlc3VsdFsxXX07XG59XG5cbmV4cG9ydCBjb25zdCBzcGFyc2VSZXNoYXBlID0gLyogQF9fUFVSRV9fICovIG9wKHtzcGFyc2VSZXNoYXBlX30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { SparseSegmentMean } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Computes the mean along sparse segments of a tensor.\n *\n * ```js\n * const c = tf.tensor2d([[1,2,3,4], [-1,-2,-3,-4], [6,7,8,9]]);\n * // Select two rows, one segment.\n * const result1 = tf.sparse.sparseSegmentMean(c,\n * tf.tensor1d([0, 1], 'int32'),\n * tf.tensor1d([0, 0], 'int32'));\n * result1.print(); // [[0, 0, 0, 0]]\n *\n * // Select two rows, two segments.\n * const result2 = tf.sparse.sparseSegmentMean(c,\n * tf.tensor1d([0, 1], 'int32'),\n * tf.tensor1d([0, 1], 'int32'));\n * result2.print(); // [[1, 2, 3, 4], [-1, -2, -3, -4]]\n *\n * // Select all rows, two segments.\n * const result3 = tf.sparse.sparseSegmentMean(c,\n * tf.tensor1d([0, 1, 2], 'int32'),\n * tf.tensor1d([0, 1, 1], 'int32'));\n * result3.print(); // [[1.0, 2.0, 3.0, 4.0], [2.5, 2.5, 2.5, 2.5]]\n * ```\n * @param data: A Tensor of at least one dimension with data that will be\n * assembled in the output.\n * @param indices: A 1-D Tensor with indices into data. Has same rank as\n * segmentIds.\n * @param segmentIds: A 1-D Tensor with indices into the output Tensor. Values\n * should be sorted and can be repeated.\n * @return Has same shape as data, except for dimension 0 which has equal to\n * the number of segments.\n *\n * @doc {heading: 'Operations', subheading: 'Sparse'}\n */\nfunction sparseSegmentMean_(data, indices, segmentIds) {\n const $data = convertToTensor(data, 'data', 'sparseSegmentMean');\n const $indices = convertToTensor(indices, 'indices', 'sparseSegmentMean', 'int32');\n const $segmentIds = convertToTensor(segmentIds, 'segmentIds', 'sparseSegmentMean', 'int32');\n if ($data.rank < 1) {\n throw new Error(`Data should be at least 1 dimensional but received scalar`);\n }\n if ($indices.rank !== 1) {\n throw new Error(`Indices should be Tensor1D but received shape\n ${$indices.shape}`);\n }\n if ($segmentIds.rank !== 1) {\n throw new Error(`Segment ids should be Tensor1D but received shape\n ${$segmentIds.shape}`);\n }\n const inputs = {\n data: $data,\n indices: $indices,\n segmentIds: $segmentIds\n };\n return ENGINE.runKernel(SparseSegmentMean, inputs);\n}\nexport const sparseSegmentMean = /* @__PURE__ */ op({ sparseSegmentMean_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3NlZ21lbnRfbWVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwYXJzZS9zcGFyc2Vfc2VnbWVudF9tZWFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGlCQUFpQixFQUEwQixNQUFNLG9CQUFvQixDQUFDO0FBRTlFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixJQUF1QixFQUFFLE9BQTRCLEVBQ3JELFVBQStCO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQ1YsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEUsTUFBTSxXQUFXLEdBQ2IsZUFBZSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFNUUsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUNYLDJEQUEyRCxDQUFDLENBQUM7S0FDbEU7SUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUM7WUFDUixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMzQjtJQUNELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQztZQUNSLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsTUFBTSxNQUFNLEdBQTRCO1FBQ3RDLElBQUksRUFBRSxLQUFLO1FBQ1gsT0FBTyxFQUFFLFFBQVE7UUFDakIsVUFBVSxFQUFFLFdBQVc7S0FDeEIsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxNQUFZLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGtCQUFrQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge1NwYXJzZVNlZ21lbnRNZWFuLCBTcGFyc2VTZWdtZW50TWVhbklucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBtZWFuIGFsb25nIHNwYXJzZSBzZWdtZW50cyBvZiBhIHRlbnNvci5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYyA9IHRmLnRlbnNvcjJkKFtbMSwyLDMsNF0sIFstMSwtMiwtMywtNF0sIFs2LDcsOCw5XV0pO1xuICogLy8gU2VsZWN0IHR3byByb3dzLCBvbmUgc2VnbWVudC5cbiAqIGNvbnN0IHJlc3VsdDEgPSB0Zi5zcGFyc2Uuc3BhcnNlU2VnbWVudE1lYW4oYyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxXSwgJ2ludDMyJyksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Zi50ZW5zb3IxZChbMCwgMF0sICdpbnQzMicpKTtcbiAqIHJlc3VsdDEucHJpbnQoKTsgLy8gW1swLCAwLCAwLCAwXV1cbiAqXG4gKiAvLyBTZWxlY3QgdHdvIHJvd3MsIHR3byBzZWdtZW50cy5cbiAqIGNvbnN0IHJlc3VsdDIgPSB0Zi5zcGFyc2Uuc3BhcnNlU2VnbWVudE1lYW4oYyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYudGVuc29yMWQoWzAsIDFdLCAnaW50MzInKSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYudGVuc29yMWQoWzAsIDFdLCAnaW50MzInKSk7XG4gKiByZXN1bHQyLnByaW50KCk7IC8vIFtbMSwgMiwgMywgNF0sIFstMSwgLTIsIC0zLCAtNF1dXG4gKlxuICogLy8gU2VsZWN0IGFsbCByb3dzLCB0d28gc2VnbWVudHMuXG4gKiBjb25zdCByZXN1bHQzID0gdGYuc3BhcnNlLnNwYXJzZVNlZ21lbnRNZWFuKGMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxLCAyXSwgJ2ludDMyJyksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxLCAxXSwgJ2ludDMyJykpO1xuICogcmVzdWx0My5wcmludCgpOyAvLyBbWzEuMCwgMi4wLCAzLjAsIDQuMF0sIFsyLjUsIDIuNSwgMi41LCAyLjVdXVxuICogYGBgXG4gKiBAcGFyYW0gZGF0YTogQSBUZW5zb3Igb2YgYXQgbGVhc3Qgb25lIGRpbWVuc2lvbiB3aXRoIGRhdGEgdGhhdCB3aWxsIGJlXG4gKiAgICAgYXNzZW1ibGVkIGluIHRoZSBvdXRwdXQuXG4gKiBAcGFyYW0gaW5kaWNlczogQSAxLUQgVGVuc29yIHdpdGggaW5kaWNlcyBpbnRvIGRhdGEuIEhhcyBzYW1lIHJhbmsgYXNcbiAqICAgICBzZWdtZW50SWRzLlxuICogQHBhcmFtIHNlZ21lbnRJZHM6IEEgMS1EIFRlbnNvciB3aXRoIGluZGljZXMgaW50byB0aGUgb3V0cHV0IFRlbnNvci4gVmFsdWVzXG4gKiAgICAgc2hvdWxkIGJlIHNvcnRlZCBhbmQgY2FuIGJlIHJlcGVhdGVkLlxuICogQHJldHVybiBIYXMgc2FtZSBzaGFwZSBhcyBkYXRhLCBleGNlcHQgZm9yIGRpbWVuc2lvbiAwIHdoaWNoIGhhcyBlcXVhbCB0b1xuICogICAgICAgICB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NwYXJzZSd9XG4gKi9cbmZ1bmN0aW9uIHNwYXJzZVNlZ21lbnRNZWFuXyhcbiAgICBkYXRhOiBUZW5zb3J8VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICBzZWdtZW50SWRzOiBUZW5zb3IxRHxUZW5zb3JMaWtlKTogVGVuc29yIHtcbiAgY29uc3QgJGRhdGEgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YSwgJ2RhdGEnLCAnc3BhcnNlU2VnbWVudE1lYW4nKTtcbiAgY29uc3QgJGluZGljZXMgPVxuICAgICAgY29udmVydFRvVGVuc29yKGluZGljZXMsICdpbmRpY2VzJywgJ3NwYXJzZVNlZ21lbnRNZWFuJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRzZWdtZW50SWRzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihzZWdtZW50SWRzLCAnc2VnbWVudElkcycsICdzcGFyc2VTZWdtZW50TWVhbicsICdpbnQzMicpO1xuXG4gIGlmICgkZGF0YS5yYW5rIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYERhdGEgc2hvdWxkIGJlIGF0IGxlYXN0IDEgZGltZW5zaW9uYWwgYnV0IHJlY2VpdmVkIHNjYWxhcmApO1xuICB9XG4gIGlmICgkaW5kaWNlcy5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbmRpY2VzIHNob3VsZCBiZSBUZW5zb3IxRCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgICAkeyRpbmRpY2VzLnNoYXBlfWApO1xuICB9XG4gIGlmICgkc2VnbWVudElkcy5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWdtZW50IGlkcyBzaG91bGQgYmUgVGVuc29yMUQgYnV0IHJlY2VpdmVkIHNoYXBlXG4gICAgICAgICAgJHskc2VnbWVudElkcy5zaGFwZX1gKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogU3BhcnNlU2VnbWVudE1lYW5JbnB1dHMgPSB7XG4gICAgZGF0YTogJGRhdGEsXG4gICAgaW5kaWNlczogJGluZGljZXMsXG4gICAgc2VnbWVudElkczogJHNlZ21lbnRJZHNcbiAgfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTcGFyc2VTZWdtZW50TWVhbiwgaW5wdXRzIGFzIHt9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNwYXJzZVNlZ21lbnRNZWFuID0gLyogQF9fUFVSRV9fICovIG9wKHtzcGFyc2VTZWdtZW50TWVhbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { SparseSegmentSum } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Computes the sum along sparse segments of a tensor.\n *\n * ```js\n * const c = tf.tensor2d([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]);\n * // Select two rows, one segment.\n * const result1 = tf.sparse.sparseSegmentSum(c,\n * tf.tensor1d([0, 1], 'int32'),\n * tf.tensor1d([0, 0], 'int32'));\n * result1.print(); // [[0, 0, 0, 0]]\n *\n * // Select two rows, two segments.\n * const result2 = tf.sparse.sparseSegmentSum(c,\n * tf.tensor1d([0, 1], 'int32'),\n * tf.tensor1d([0, 1], 'int32'));\n * result2.print(); // [[1, 2, 3, 4], [-1, -2, -3, -4]]\n *\n * // Select all rows, two segments.\n * const result3 = tf.sparse.sparseSegmentSum(c,\n * tf.tensor1d([0, 1, 2], 'int32'),\n * tf.tensor1d([0, 0, 1], 'int32'));\n * result3.print(); // [[0, 0, 0, 0], [5, 6, 7, 8]]\n * ```\n * @param data: A Tensor of at least one dimension with data that will be\n * assembled in the output.\n * @param indices: A 1-D Tensor with indices into data. Has same rank as\n * segmentIds.\n * @param segmentIds: A 1-D Tensor with indices into the output Tensor. Values\n * should be sorted and can be repeated.\n * @return Has same shape as data, except for dimension 0 which has equal to\n * the number of segments.\n *\n * @doc {heading: 'Operations', subheading: 'Sparse'}\n */\nfunction sparseSegmentSum_(data, indices, segmentIds) {\n const $data = convertToTensor(data, 'data', 'sparseSegmentSum');\n const $indices = convertToTensor(indices, 'indices', 'sparseSegmentSum', 'int32');\n const $segmentIds = convertToTensor(segmentIds, 'segmentIds', 'sparseSegmentSum', 'int32');\n if ($data.rank < 1) {\n throw new Error(`Data should be at least 1 dimensional but received scalar`);\n }\n if ($indices.rank !== 1) {\n throw new Error(`Indices should be Tensor1D but received shape\n ${$indices.shape}`);\n }\n if ($segmentIds.rank !== 1) {\n throw new Error(`Segment ids should be Tensor1D but received shape\n ${$segmentIds.shape}`);\n }\n const inputs = {\n data: $data,\n indices: $indices,\n segmentIds: $segmentIds\n };\n return ENGINE.runKernel(SparseSegmentSum, inputs);\n}\nexport const sparseSegmentSum = /* @__PURE__ */ op({ sparseSegmentSum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3NlZ21lbnRfc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3BhcnNlL3NwYXJzZV9zZWdtZW50X3N1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDdEIsSUFBdUIsRUFBRSxPQUE0QixFQUNyRCxVQUErQjtJQUNqQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sUUFBUSxHQUNWLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTNFLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FDWCwyREFBMkQsQ0FBQyxDQUFDO0tBQ2xFO0lBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDO1dBQ1QsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDMUI7SUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUM7V0FDVCxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUM3QjtJQUVELE1BQU0sTUFBTSxHQUEyQjtRQUNyQyxJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFVBQVUsRUFBRSxXQUFXO0tBQ3hCLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsTUFBWSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTcGFyc2VTZWdtZW50U3VtLCBTcGFyc2VTZWdtZW50U3VtSW5wdXRzfSBmcm9tICcuLi8uLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjFEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHN1bSBhbG9uZyBzcGFyc2Ugc2VnbWVudHMgb2YgYSB0ZW5zb3IuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGMgPSB0Zi50ZW5zb3IyZChbWzEsMiwzLDRdLCBbLTEsLTIsLTMsLTRdLCBbNSw2LDcsOF1dKTtcbiAqIC8vIFNlbGVjdCB0d28gcm93cywgb25lIHNlZ21lbnQuXG4gKiBjb25zdCByZXN1bHQxID0gdGYuc3BhcnNlLnNwYXJzZVNlZ21lbnRTdW0oYyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxXSwgJ2ludDMyJyksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Zi50ZW5zb3IxZChbMCwgMF0sICdpbnQzMicpKTtcbiAqIHJlc3VsdDEucHJpbnQoKTsgLy8gW1swLCAwLCAwLCAwXV1cbiAqXG4gKiAvLyBTZWxlY3QgdHdvIHJvd3MsIHR3byBzZWdtZW50cy5cbiAqIGNvbnN0IHJlc3VsdDIgPSB0Zi5zcGFyc2Uuc3BhcnNlU2VnbWVudFN1bShjLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYudGVuc29yMWQoWzAsIDFdLCAnaW50MzInKSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxXSwgJ2ludDMyJykpO1xuICogcmVzdWx0Mi5wcmludCgpOyAvLyBbWzEsIDIsIDMsIDRdLCBbLTEsIC0yLCAtMywgLTRdXVxuICpcbiAqIC8vIFNlbGVjdCBhbGwgcm93cywgdHdvIHNlZ21lbnRzLlxuICogY29uc3QgcmVzdWx0MyA9IHRmLnNwYXJzZS5zcGFyc2VTZWdtZW50U3VtKGMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Zi50ZW5zb3IxZChbMCwgMSwgMl0sICdpbnQzMicpLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYudGVuc29yMWQoWzAsIDAsIDFdLCAnaW50MzInKSk7XG4gKiByZXN1bHQzLnByaW50KCk7IC8vIFtbMCwgMCwgMCwgMF0sIFs1LCA2LCA3LCA4XV1cbiAqIGBgYFxuICogQHBhcmFtIGRhdGE6IEEgVGVuc29yIG9mIGF0IGxlYXN0IG9uZSBkaW1lbnNpb24gd2l0aCBkYXRhIHRoYXQgd2lsbCBiZVxuICogICAgIGFzc2VtYmxlZCBpbiB0aGUgb3V0cHV0LlxuICogQHBhcmFtIGluZGljZXM6IEEgMS1EIFRlbnNvciB3aXRoIGluZGljZXMgaW50byBkYXRhLiBIYXMgc2FtZSByYW5rIGFzXG4gKiAgICAgc2VnbWVudElkcy5cbiAqIEBwYXJhbSBzZWdtZW50SWRzOiBBIDEtRCBUZW5zb3Igd2l0aCBpbmRpY2VzIGludG8gdGhlIG91dHB1dCBUZW5zb3IuIFZhbHVlc1xuICogICAgIHNob3VsZCBiZSBzb3J0ZWQgYW5kIGNhbiBiZSByZXBlYXRlZC5cbiAqIEByZXR1cm4gSGFzIHNhbWUgc2hhcGUgYXMgZGF0YSwgZXhjZXB0IGZvciBkaW1lbnNpb24gMCB3aGljaCBoYXMgZXF1YWwgdG9cbiAqICAgICAgICAgdGhlIG51bWJlciBvZiBzZWdtZW50cy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTcGFyc2UnfVxuICovXG5mdW5jdGlvbiBzcGFyc2VTZWdtZW50U3VtXyhcbiAgICBkYXRhOiBUZW5zb3J8VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICBzZWdtZW50SWRzOiBUZW5zb3IxRHxUZW5zb3JMaWtlKTogVGVuc29yIHtcbiAgY29uc3QgJGRhdGEgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YSwgJ2RhdGEnLCAnc3BhcnNlU2VnbWVudFN1bScpO1xuICBjb25zdCAkaW5kaWNlcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IoaW5kaWNlcywgJ2luZGljZXMnLCAnc3BhcnNlU2VnbWVudFN1bScsICdpbnQzMicpO1xuICBjb25zdCAkc2VnbWVudElkcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3Ioc2VnbWVudElkcywgJ3NlZ21lbnRJZHMnLCAnc3BhcnNlU2VnbWVudFN1bScsICdpbnQzMicpO1xuXG4gIGlmICgkZGF0YS5yYW5rIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYERhdGEgc2hvdWxkIGJlIGF0IGxlYXN0IDEgZGltZW5zaW9uYWwgYnV0IHJlY2VpdmVkIHNjYWxhcmApO1xuICB9XG4gIGlmICgkaW5kaWNlcy5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbmRpY2VzIHNob3VsZCBiZSBUZW5zb3IxRCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgICR7JGluZGljZXMuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKCRzZWdtZW50SWRzLnJhbmsgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlZ21lbnQgaWRzIHNob3VsZCBiZSBUZW5zb3IxRCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgICR7JHNlZ21lbnRJZHMuc2hhcGV9YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFNwYXJzZVNlZ21lbnRTdW1JbnB1dHMgPSB7XG4gICAgZGF0YTogJGRhdGEsXG4gICAgaW5kaWNlczogJGluZGljZXMsXG4gICAgc2VnbWVudElkczogJHNlZ21lbnRJZHNcbiAgfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTcGFyc2VTZWdtZW50U3VtLCBpbnB1dHMgYXMge30pO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlU2VnbWVudFN1bSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3BhcnNlU2VnbWVudFN1bV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { StringNGrams } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Creates ngrams from ragged string data.\n *\n * This op accepts a ragged tensor with 1 ragged dimension containing only\n * strings and outputs a ragged tensor with 1 ragged dimension containing ngrams\n * of that string, joined along the innermost axis.\n *\n * ```js\n * const result = tf.string.stringNGrams(\n * ['a', 'b', 'c', 'd'], tf.tensor1d([0, 2, 4], 'int32'),\n * '|', [1, 2], 'LP', 'RP', -1, false);\n * result['nGrams'].print(); // ['a', 'b', 'LP|a', 'a|b', 'b|RP',\n * // 'c', 'd', 'LP|c', 'c|d', 'd|RP']\n * result['nGramsSplits'].print(); // [0, 5, 10]\n * ```\n * @param data: The values tensor of the ragged string tensor to make ngrams out\n * of. Must be a 1D string tensor.\n * @param dataSplits: The splits tensor of the ragged string tensor to make\n * ngrams out of.\n * @param separator: The string to append between elements of the token. Use \"\"\n * for no separator.\n * @param nGramWidths: The sizes of the ngrams to create.\n * @param leftPad: The string to use to pad the left side of the ngram sequence.\n * Only used if pad_width !== 0.\n * @param rightPad: The string to use to pad the right side of the ngram\n * sequence. Only used if pad_width !== 0.\n * @param padWidth: The number of padding elements to add to each side of each\n * sequence. Note that padding will never be greater than `nGramWidths`-1\n * regardless of this value. If `padWidth`=-1, then add max(`nGramWidths`)-1\n * elements.\n * @param preserveShortSequences: If true, then ensure that at least one ngram\n * is generated for each input sequence. In particular, if an input sequence\n * is shorter than min(ngramWidth) + 2*padWidth, then generate a single\n * ngram containing the entire sequence. If false, then no ngrams are\n * generated for these short input sequences.\n * @return A map with the following properties:\n * - nGrams: The values tensor of the output ngrams ragged tensor.\n * - nGramsSplits: The splits tensor of the output ngrams ragged tensor.\n *\n * @doc {heading: 'Operations', subheading: 'String'}\n */\nfunction stringNGrams_(data, dataSplits, separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences) {\n const $data = convertToTensor(data, 'data', 'stringNGrams', 'string');\n if ($data.dtype !== 'string') {\n throw new Error('Data must be of datatype string');\n }\n if ($data.shape.length !== 1) {\n throw new Error(`Data must be a vector, saw: ${$data.shape}`);\n }\n const $dataSplits = convertToTensor(dataSplits, 'dataSplits', 'stringNGrams');\n if ($dataSplits.dtype !== 'int32') {\n throw new Error('Data splits must be of datatype int32');\n }\n const attrs = {\n separator,\n nGramWidths,\n leftPad,\n rightPad,\n padWidth,\n preserveShortSequences\n };\n const inputs = { data: $data, dataSplits: $dataSplits };\n const result = ENGINE.runKernel(StringNGrams, inputs, attrs);\n return { nGrams: result[0], nGramsSplits: result[1] };\n}\nexport const stringNGrams = /* @__PURE__ */ op({ stringNGrams_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nX25fZ3JhbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zdHJpbmcvc3RyaW5nX25fZ3JhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsWUFBWSxFQUF3QyxNQUFNLG9CQUFvQixDQUFDO0FBR3ZGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLElBQXlCLEVBQUUsVUFBNkIsRUFBRSxTQUFpQixFQUMzRSxXQUFxQixFQUFFLE9BQWUsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQzFFLHNCQUErQjtJQUNqQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEUsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7S0FDcEQ7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMvRDtJQUVELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzlFLElBQUksV0FBVyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsTUFBTSxLQUFLLEdBQXNCO1FBQy9CLFNBQVM7UUFDVCxXQUFXO1FBQ1gsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRO1FBQ1Isc0JBQXNCO0tBQ3ZCLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBdUIsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUMxRSxNQUFNLE1BQU0sR0FDUixNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxNQUFZLEVBQUUsS0FBVyxDQUFDLENBQUM7SUFDOUQsT0FBTyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTdHJpbmdOR3JhbXMsIFN0cmluZ05HcmFtc0F0dHJzLCBTdHJpbmdOR3JhbXNJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBuZ3JhbXMgZnJvbSByYWdnZWQgc3RyaW5nIGRhdGEuXG4gKlxuICogVGhpcyBvcCBhY2NlcHRzIGEgcmFnZ2VkIHRlbnNvciB3aXRoIDEgcmFnZ2VkIGRpbWVuc2lvbiBjb250YWluaW5nIG9ubHlcbiAqIHN0cmluZ3MgYW5kIG91dHB1dHMgYSByYWdnZWQgdGVuc29yIHdpdGggMSByYWdnZWQgZGltZW5zaW9uIGNvbnRhaW5pbmcgbmdyYW1zXG4gKiBvZiB0aGF0IHN0cmluZywgam9pbmVkIGFsb25nIHRoZSBpbm5lcm1vc3QgYXhpcy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gdGYuc3RyaW5nLnN0cmluZ05HcmFtcyhcbiAqICAgWydhJywgJ2InLCAnYycsICdkJ10sIHRmLnRlbnNvcjFkKFswLCAyLCA0XSwgJ2ludDMyJyksXG4gKiAgICd8JywgWzEsIDJdLCAnTFAnLCAnUlAnLCAtMSwgZmFsc2UpO1xuICogcmVzdWx0WyduR3JhbXMnXS5wcmludCgpOyAvLyBbJ2EnLCAnYicsICdMUHxhJywgJ2F8YicsICdifFJQJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICdjJywgJ2QnLCAnTFB8YycsICdjfGQnLCAnZHxSUCddXG4gKiByZXN1bHRbJ25HcmFtc1NwbGl0cyddLnByaW50KCk7IC8vIFswLCA1LCAxMF1cbiAqIGBgYFxuICogQHBhcmFtIGRhdGE6IFRoZSB2YWx1ZXMgdGVuc29yIG9mIHRoZSByYWdnZWQgc3RyaW5nIHRlbnNvciB0byBtYWtlIG5ncmFtcyBvdXRcbiAqICAgICBvZi4gTXVzdCBiZSBhIDFEIHN0cmluZyB0ZW5zb3IuXG4gKiBAcGFyYW0gZGF0YVNwbGl0czogVGhlIHNwbGl0cyB0ZW5zb3Igb2YgdGhlIHJhZ2dlZCBzdHJpbmcgdGVuc29yIHRvIG1ha2VcbiAqICAgICBuZ3JhbXMgb3V0IG9mLlxuICogQHBhcmFtIHNlcGFyYXRvcjogVGhlIHN0cmluZyB0byBhcHBlbmQgYmV0d2VlbiBlbGVtZW50cyBvZiB0aGUgdG9rZW4uIFVzZSBcIlwiXG4gKiAgICAgZm9yIG5vIHNlcGFyYXRvci5cbiAqIEBwYXJhbSBuR3JhbVdpZHRoczogVGhlIHNpemVzIG9mIHRoZSBuZ3JhbXMgdG8gY3JlYXRlLlxuICogQHBhcmFtIGxlZnRQYWQ6IFRoZSBzdHJpbmcgdG8gdXNlIHRvIHBhZCB0aGUgbGVmdCBzaWRlIG9mIHRoZSBuZ3JhbSBzZXF1ZW5jZS5cbiAqICAgICBPbmx5IHVzZWQgaWYgcGFkX3dpZHRoICE9PSAwLlxuICogQHBhcmFtIHJpZ2h0UGFkOiBUaGUgc3RyaW5nIHRvIHVzZSB0byBwYWQgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG5ncmFtXG4gKiAgICAgc2VxdWVuY2UuIE9ubHkgdXNlZCBpZiBwYWRfd2lkdGggIT09IDAuXG4gKiBAcGFyYW0gcGFkV2lkdGg6IFRoZSBudW1iZXIgb2YgcGFkZGluZyBlbGVtZW50cyB0byBhZGQgdG8gZWFjaCBzaWRlIG9mIGVhY2hcbiAqICAgICBzZXF1ZW5jZS4gTm90ZSB0aGF0IHBhZGRpbmcgd2lsbCBuZXZlciBiZSBncmVhdGVyIHRoYW4gYG5HcmFtV2lkdGhzYC0xXG4gKiAgICAgcmVnYXJkbGVzcyBvZiB0aGlzIHZhbHVlLiBJZiBgcGFkV2lkdGhgPS0xLCB0aGVuIGFkZCBtYXgoYG5HcmFtV2lkdGhzYCktMVxuICogICAgIGVsZW1lbnRzLlxuICogQHBhcmFtIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXM6IElmIHRydWUsIHRoZW4gZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIG5ncmFtXG4gKiAgICAgaXMgZ2VuZXJhdGVkIGZvciBlYWNoIGlucHV0IHNlcXVlbmNlLiBJbiBwYXJ0aWN1bGFyLCBpZiBhbiBpbnB1dCBzZXF1ZW5jZVxuICogICAgIGlzIHNob3J0ZXIgdGhhbiBtaW4obmdyYW1XaWR0aCkgKyAyKnBhZFdpZHRoLCB0aGVuIGdlbmVyYXRlIGEgc2luZ2xlXG4gKiAgICAgbmdyYW0gY29udGFpbmluZyB0aGUgZW50aXJlIHNlcXVlbmNlLiBJZiBmYWxzZSwgdGhlbiBubyBuZ3JhbXMgYXJlXG4gKiAgICAgZ2VuZXJhdGVkIGZvciB0aGVzZSBzaG9ydCBpbnB1dCBzZXF1ZW5jZXMuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gbkdyYW1zOiBUaGUgdmFsdWVzIHRlbnNvciBvZiB0aGUgb3V0cHV0IG5ncmFtcyByYWdnZWQgdGVuc29yLlxuICogICAgIC0gbkdyYW1zU3BsaXRzOiBUaGUgc3BsaXRzIHRlbnNvciBvZiB0aGUgb3V0cHV0IG5ncmFtcyByYWdnZWQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1N0cmluZyd9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ05HcmFtc18oXG4gICAgZGF0YTogVGVuc29yMUR8VGVuc29yTGlrZSwgZGF0YVNwbGl0czogVGVuc29yfFRlbnNvckxpa2UsIHNlcGFyYXRvcjogc3RyaW5nLFxuICAgIG5HcmFtV2lkdGhzOiBudW1iZXJbXSwgbGVmdFBhZDogc3RyaW5nLCByaWdodFBhZDogc3RyaW5nLCBwYWRXaWR0aDogbnVtYmVyLFxuICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXM6IGJvb2xlYW4pOiBOYW1lZFRlbnNvck1hcCB7XG4gIGNvbnN0ICRkYXRhID0gY29udmVydFRvVGVuc29yKGRhdGEsICdkYXRhJywgJ3N0cmluZ05HcmFtcycsICdzdHJpbmcnKTtcbiAgaWYgKCRkYXRhLmR0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRGF0YSBtdXN0IGJlIG9mIGRhdGF0eXBlIHN0cmluZycpO1xuICB9XG4gIGlmICgkZGF0YS5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGEgbXVzdCBiZSBhIHZlY3Rvciwgc2F3OiAkeyRkYXRhLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgJGRhdGFTcGxpdHMgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YVNwbGl0cywgJ2RhdGFTcGxpdHMnLCAnc3RyaW5nTkdyYW1zJyk7XG4gIGlmICgkZGF0YVNwbGl0cy5kdHlwZSAhPT0gJ2ludDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRGF0YSBzcGxpdHMgbXVzdCBiZSBvZiBkYXRhdHlwZSBpbnQzMicpO1xuICB9XG5cbiAgY29uc3QgYXR0cnM6IFN0cmluZ05HcmFtc0F0dHJzID0ge1xuICAgIHNlcGFyYXRvcixcbiAgICBuR3JhbVdpZHRocyxcbiAgICBsZWZ0UGFkLFxuICAgIHJpZ2h0UGFkLFxuICAgIHBhZFdpZHRoLFxuICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXNcbiAgfTtcblxuICBjb25zdCBpbnB1dHM6IFN0cmluZ05HcmFtc0lucHV0cyA9IHtkYXRhOiAkZGF0YSwgZGF0YVNwbGl0czogJGRhdGFTcGxpdHN9O1xuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID1cbiAgICAgIEVOR0lORS5ydW5LZXJuZWwoU3RyaW5nTkdyYW1zLCBpbnB1dHMgYXMge30sIGF0dHJzIGFzIHt9KTtcbiAgcmV0dXJuIHtuR3JhbXM6IHJlc3VsdFswXSwgbkdyYW1zU3BsaXRzOiByZXN1bHRbMV19O1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nTkdyYW1zID0gLyogQF9fUFVSRV9fICovIG9wKHtzdHJpbmdOR3JhbXNffSk7XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { StaticRegexReplace } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Replace the match of a `pattern` in `input` with `rewrite`.\n *\n * ```js\n * const result = tf.string.staticRegexReplace(\n * ['format this spacing better'], ' +', ' ');\n * result.print(); // ['format this spacing better']\n * ```\n * @param input: A Tensor of type string. The text to be processed.\n * @param pattern: A string. The regular expression to match the input.\n * @param rewrite: A string. The rewrite to be applied to the matched\n * expression.\n * @param replaceGlobal: An optional bool. Defaults to True. If True, the\n * replacement is global, otherwise the replacement is done only on the\n * first match.\n * @return A Tensor of type string.\n *\n * @doc {heading: 'Operations', subheading: 'String'}\n */\nfunction staticRegexReplace_(input, pattern, rewrite, replaceGlobal = true) {\n const $input = convertToTensor(input, 'input', 'staticRegexReplace', 'string');\n const attrs = { pattern, rewrite, replaceGlobal };\n return ENGINE.runKernel(StaticRegexReplace, { x: $input }, attrs);\n}\nexport const staticRegexReplace = /* @__PURE__ */ op({ staticRegexReplace_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljX3JlZ2V4X3JlcGxhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zdHJpbmcvc3RhdGljX3JlZ2V4X3JlcGxhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsa0JBQWtCLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFHL0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLEtBQTBCLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFDNUQsYUFBYSxHQUFDLElBQUk7SUFFbEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQ3BDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUE0QixFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLENBQUM7SUFDekUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUMvQixLQUFnQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxtQkFBbUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTdGF0aWNSZWdleFJlcGxhY2UsIFN0YXRpY1JlZ2V4UmVwbGFjZUF0dHJzfSBmcm9tICcuLi8uLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uLy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJlcGxhY2UgdGhlIG1hdGNoIG9mIGEgYHBhdHRlcm5gIGluIGBpbnB1dGAgd2l0aCBgcmV3cml0ZWAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlc3VsdCA9IHRmLnN0cmluZy5zdGF0aWNSZWdleFJlcGxhY2UoXG4gKiAgICAgWydmb3JtYXQgICAgICAgdGhpcyAgIHNwYWNpbmcgICAgICBiZXR0ZXInXSwgJyArJywgJyAnKTtcbiAqIHJlc3VsdC5wcmludCgpOyAvLyBbJ2Zvcm1hdCB0aGlzIHNwYWNpbmcgYmV0dGVyJ11cbiAqIGBgYFxuICogQHBhcmFtIGlucHV0OiBBIFRlbnNvciBvZiB0eXBlIHN0cmluZy4gVGhlIHRleHQgdG8gYmUgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHBhdHRlcm46IEEgc3RyaW5nLiBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBpbnB1dC5cbiAqIEBwYXJhbSByZXdyaXRlOiBBIHN0cmluZy4gVGhlIHJld3JpdGUgdG8gYmUgYXBwbGllZCB0byB0aGUgbWF0Y2hlZFxuICogICAgIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gcmVwbGFjZUdsb2JhbDogQW4gb3B0aW9uYWwgYm9vbC4gRGVmYXVsdHMgdG8gVHJ1ZS4gSWYgVHJ1ZSwgdGhlXG4gKiAgICAgcmVwbGFjZW1lbnQgaXMgZ2xvYmFsLCBvdGhlcndpc2UgdGhlIHJlcGxhY2VtZW50IGlzIGRvbmUgb25seSBvbiB0aGVcbiAqICAgICBmaXJzdCBtYXRjaC5cbiAqIEByZXR1cm4gQSBUZW5zb3Igb2YgdHlwZSBzdHJpbmcuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3RyaW5nJ31cbiAqL1xuZnVuY3Rpb24gc3RhdGljUmVnZXhSZXBsYWNlXyhcbiAgaW5wdXQ6IFRlbnNvciB8IFRlbnNvckxpa2UsIHBhdHRlcm46IHN0cmluZywgcmV3cml0ZTogc3RyaW5nLFxuICByZXBsYWNlR2xvYmFsPXRydWUpOiBUZW5zb3Ige1xuXG4gIGNvbnN0ICRpbnB1dCA9IGNvbnZlcnRUb1RlbnNvcihpbnB1dCwgJ2lucHV0JywgJ3N0YXRpY1JlZ2V4UmVwbGFjZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJyk7XG4gIGNvbnN0IGF0dHJzOiBTdGF0aWNSZWdleFJlcGxhY2VBdHRycyA9IHtwYXR0ZXJuLCByZXdyaXRlLCByZXBsYWNlR2xvYmFsfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoU3RhdGljUmVnZXhSZXBsYWNlLCB7eDogJGlucHV0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3RhdGljUmVnZXhSZXBsYWNlID0gLyogQF9fUFVSRV9fICovIG9wKHtzdGF0aWNSZWdleFJlcGxhY2VffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Modularized ops.\nexport { abs } from './abs';\nexport { acos } from './acos';\nexport { acosh } from './acosh';\nexport { add } from './add';\nexport { addN } from './add_n';\nexport { all } from './all';\nexport { any } from './any';\nexport { argMax } from './arg_max';\nexport { argMin } from './arg_min';\nexport { asin } from './asin';\nexport { asinh } from './asinh';\nexport { atan } from './atan';\nexport { atan2 } from './atan2';\nexport { atanh } from './atanh';\nexport { avgPool } from './avg_pool';\nexport { avgPool3d } from './avg_pool_3d';\nexport { basicLSTMCell } from './basic_lstm_cell';\nexport { batchToSpaceND } from './batch_to_space_nd';\nexport { batchNorm } from './batchnorm';\nexport { batchNorm2d } from './batchnorm2d';\nexport { batchNorm3d } from './batchnorm3d';\nexport { batchNorm4d } from './batchnorm4d';\nexport { bincount } from './bincount';\nexport { bitwiseAnd } from './bitwise_and';\nexport { broadcastArgs } from './broadcast_args';\nexport { broadcastTo } from './broadcast_to';\nexport { buffer } from './buffer';\nexport { cast } from './cast';\nexport { ceil } from './ceil';\nexport { clipByValue } from './clip_by_value';\nexport { clone } from './clone';\nexport { complex } from './complex';\nexport { concat } from './concat';\nexport { concat1d } from './concat_1d';\nexport { concat2d } from './concat_2d';\nexport { concat3d } from './concat_3d';\nexport { concat4d } from './concat_4d';\nexport { conv1d } from './conv1d';\nexport { conv2d } from './conv2d';\nexport { conv2dTranspose } from './conv2d_transpose';\nexport { conv3d } from './conv3d';\nexport { conv3dTranspose } from './conv3d_transpose';\nexport { cos } from './cos';\nexport { cosh } from './cosh';\nexport { cumprod } from './cumprod';\nexport { cumsum } from './cumsum';\nexport { denseBincount } from './dense_bincount';\nexport { depthToSpace } from './depth_to_space';\nexport { depthwiseConv2d } from './depthwise_conv2d';\nexport { diag } from './diag';\nexport { dilation2d } from './dilation2d';\nexport { div } from './div';\nexport { divNoNan } from './div_no_nan';\nexport { dot } from './dot';\nexport { einsum } from './einsum';\nexport { elu } from './elu';\nexport { ensureShape } from './ensure_shape';\nexport { equal } from './equal';\nexport { erf } from './erf';\nexport { euclideanNorm } from './euclidean_norm';\nexport { exp } from './exp';\nexport { expandDims } from './expand_dims';\nexport { expm1 } from './expm1';\nexport { eye } from './eye';\nexport { fill } from './fill';\nexport { floor } from './floor';\nexport { floorDiv } from './floorDiv';\nexport { gather } from './gather';\nexport { greater } from './greater';\nexport { greaterEqual } from './greater_equal';\nexport { imag } from './imag';\nexport { isFinite } from './is_finite';\nexport { isInf } from './is_inf';\nexport { isNaN } from './is_nan';\nexport { leakyRelu } from './leaky_relu';\nexport { less } from './less';\nexport { lessEqual } from './less_equal';\nexport { linspace } from './linspace';\nexport { localResponseNormalization } from './local_response_normalization';\nexport { log } from './log';\nexport { log1p } from './log1p';\nexport { logSigmoid } from './log_sigmoid';\nexport { logSoftmax } from './log_softmax';\nexport { logSumExp } from './log_sum_exp';\nexport { logicalAnd } from './logical_and';\nexport { logicalNot } from './logical_not';\nexport { logicalOr } from './logical_or';\nexport { logicalXor } from './logical_xor';\nexport { lowerBound } from './lower_bound';\nexport { matMul } from './mat_mul';\nexport { max } from './max';\nexport { maxPool } from './max_pool';\nexport { maxPool3d } from './max_pool_3d';\nexport { maxPoolWithArgmax } from './max_pool_with_argmax';\nexport { maximum } from './maximum';\nexport { mean } from './mean';\nexport { meshgrid } from './meshgrid';\nexport { min } from './min';\nexport { minimum } from './minimum';\nexport { mirrorPad } from './mirror_pad';\nexport { mod } from './mod';\nexport { moments } from './moments';\nexport { mul } from './mul';\nexport { multiRNNCell } from './multi_rnn_cell';\nexport { multinomial } from './multinomial';\nexport { neg } from './neg';\nexport { notEqual } from './not_equal';\nexport { oneHot } from './one_hot';\nexport { ones } from './ones';\nexport { onesLike } from './ones_like';\nexport { outerProduct } from './outer_product';\nexport { pad } from './pad';\nexport { pad1d } from './pad1d';\nexport { pad2d } from './pad2d';\nexport { pad3d } from './pad3d';\nexport { pad4d } from './pad4d';\nexport { pool } from './pool';\nexport { pow } from './pow';\nexport { prelu } from './prelu';\nexport { print } from './print';\nexport { prod } from './prod';\nexport { raggedGather } from './ragged_gather';\nexport { raggedRange } from './ragged_range';\nexport { raggedTensorToTensor } from './ragged_tensor_to_tensor';\nexport { rand } from './rand';\nexport { randomGamma } from './random_gamma';\nexport { randomNormal } from './random_normal';\nexport { randomStandardNormal } from './random_standard_normal';\nexport { randomUniform } from './random_uniform';\nexport { randomUniformInt } from './random_uniform_int';\nexport { range } from './range';\nexport { real } from './real';\nexport { reciprocal } from './reciprocal';\nexport { relu } from './relu';\nexport { relu6 } from './relu6';\nexport { reshape } from './reshape';\nexport { reverse } from './reverse';\nexport { reverse1d } from './reverse_1d';\nexport { reverse2d } from './reverse_2d';\nexport { reverse3d } from './reverse_3d';\nexport { reverse4d } from './reverse_4d';\nexport { round } from './round';\nexport { rsqrt } from './rsqrt';\nexport { scalar } from './scalar';\nexport { selu } from './selu';\nexport { separableConv2d } from './separable_conv2d';\nexport { setdiff1dAsync } from './setdiff1d_async';\nexport { sigmoid } from './sigmoid';\nexport { sign } from './sign';\nexport { sin } from './sin';\nexport { sinh } from './sinh';\nexport { slice } from './slice';\nexport { slice1d } from './slice1d';\nexport { slice2d } from './slice2d';\nexport { slice3d } from './slice3d';\nexport { slice4d } from './slice4d';\nexport { softmax } from './softmax';\nexport { softplus } from './softplus';\nexport { spaceToBatchND } from './space_to_batch_nd';\nexport { fft } from './spectral/fft';\nexport { ifft } from './spectral/ifft';\nexport { irfft } from './spectral/irfft';\nexport { rfft } from './spectral/rfft';\nexport { split } from './split';\nexport { sqrt } from './sqrt';\nexport { square } from './square';\nexport { squaredDifference } from './squared_difference';\nexport { squeeze } from './squeeze';\nexport { stack } from './stack';\nexport { step } from './step';\nexport { stridedSlice } from './strided_slice';\nexport { sub } from './sub';\nexport { sum } from './sum';\nexport { tan } from './tan';\nexport { tanh } from './tanh';\nexport { tensor } from './tensor';\nexport { tensor1d } from './tensor1d';\nexport { tensor2d } from './tensor2d';\nexport { tensor3d } from './tensor3d';\nexport { tensor4d } from './tensor4d';\nexport { tensor5d } from './tensor5d';\nexport { tensor6d } from './tensor6d';\nexport { tensorScatterUpdate } from './tensor_scatter_update';\nexport { tile } from './tile';\nexport { topk } from './topk';\nexport { truncatedNormal } from './truncated_normal';\nexport { unique } from './unique';\nexport { unsortedSegmentSum } from './unsorted_segment_sum';\nexport { unstack } from './unstack';\nexport { upperBound } from './upper_bound';\nexport { variable } from './variable';\nexport { where } from './where';\nexport { whereAsync } from './where_async';\nexport { zeros } from './zeros';\nexport { zerosLike } from './zeros_like';\nexport * from './boolean_mask';\nexport * from './transpose';\nexport * from './norm';\nexport * from './moving_average';\nexport * from './scatter_nd';\nexport * from './search_sorted';\nexport * from './sparse_to_dense';\nexport * from './gather_nd';\nexport * from './dropout';\nexport * from './signal_ops_util';\nexport * from './in_top_k';\nexport { op, OP_SCOPE_SUFFIX } from './operation';\nimport { rfft } from './spectral/rfft';\nimport { fft } from './spectral/fft';\nimport { ifft } from './spectral/ifft';\nimport { irfft } from './spectral/irfft';\nconst spectral = {\n fft,\n ifft,\n rfft,\n irfft\n};\nimport * as fused from './fused_ops';\nimport { hammingWindow } from './signal/hamming_window';\nimport { hannWindow } from './signal/hann_window';\nimport { frame } from './signal/frame';\nimport { stft } from './signal/stft';\nconst signal = {\n hammingWindow,\n hannWindow,\n frame,\n stft,\n};\n// Image Ops namespace\nimport { cropAndResize } from './image/crop_and_resize';\nimport { flipLeftRight } from './image/flip_left_right';\nimport { grayscaleToRGB } from './image/grayscale_to_rgb';\nimport { rgbToGrayscale } from './image/rgb_to_grayscale';\nimport { rotateWithOffset } from './image/rotate_with_offset';\nimport { nonMaxSuppression } from './image/non_max_suppression';\nimport { nonMaxSuppressionAsync } from './image/non_max_suppression_async';\nimport { nonMaxSuppressionWithScore } from './image/non_max_suppression_with_score';\nimport { nonMaxSuppressionWithScoreAsync } from './image/non_max_suppression_with_score_async';\nimport { nonMaxSuppressionPadded } from './image/non_max_suppression_padded';\nimport { nonMaxSuppressionPaddedAsync } from './image/non_max_suppression_padded_async';\nimport { resizeBilinear } from './image/resize_bilinear';\nimport { resizeNearestNeighbor } from './image/resize_nearest_neighbor';\nimport { threshold } from './image/threshold';\nimport { transform } from './image/transform';\nconst image = {\n flipLeftRight,\n grayscaleToRGB,\n resizeNearestNeighbor,\n resizeBilinear,\n rgbToGrayscale,\n rotateWithOffset,\n cropAndResize,\n nonMaxSuppression,\n nonMaxSuppressionAsync,\n nonMaxSuppressionWithScore,\n nonMaxSuppressionWithScoreAsync,\n nonMaxSuppressionPadded,\n nonMaxSuppressionPaddedAsync,\n threshold,\n transform\n};\n// linalg namespace\nimport { bandPart } from './linalg/band_part';\nimport { gramSchmidt } from './linalg/gram_schmidt';\nimport { qr } from './linalg/qr';\nconst linalg = {\n bandPart,\n gramSchmidt,\n qr\n};\n// losses namespace;\nimport { absoluteDifference } from './losses/absolute_difference';\nimport { computeWeightedLoss } from './losses/compute_weighted_loss';\nimport { cosineDistance } from './losses/cosine_distance';\nimport { hingeLoss } from './losses/hinge_loss';\nimport { huberLoss } from './losses/huber_loss';\nimport { logLoss } from './losses/log_loss';\nimport { meanSquaredError } from './losses/mean_squared_error';\nimport { sigmoidCrossEntropy } from './losses/sigmoid_cross_entropy';\nimport { softmaxCrossEntropy } from './losses/softmax_cross_entropy';\nconst losses = {\n absoluteDifference,\n computeWeightedLoss,\n cosineDistance,\n hingeLoss,\n huberLoss,\n logLoss,\n meanSquaredError,\n sigmoidCrossEntropy,\n softmaxCrossEntropy\n};\nimport { sparseFillEmptyRows } from './sparse/sparse_fill_empty_rows';\nimport { sparseReshape } from './sparse/sparse_reshape';\nimport { sparseSegmentMean } from './sparse/sparse_segment_mean';\nimport { sparseSegmentSum } from './sparse/sparse_segment_sum';\nconst sparse = {\n sparseFillEmptyRows,\n sparseReshape,\n sparseSegmentMean,\n sparseSegmentSum\n};\nimport { stringNGrams } from './string/string_n_grams';\nimport { stringSplit } from './string/string_split';\nimport { stringToHashBucketFast } from './string/string_to_hash_bucket_fast';\nimport { staticRegexReplace } from './string/static_regex_replace';\n// tslint:disable-next-line:variable-name\nconst string = {\n stringNGrams,\n stringSplit,\n stringToHashBucketFast,\n staticRegexReplace,\n};\n// Second level exports.\nexport { image, linalg, losses, spectral, fused, signal, sparse, string };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILG1CQUFtQjtBQUNuQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENB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OEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsTUFBTSxNQUFNLEdBQUc7SUFDYixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixnQkFBZ0I7Q0FDakIsQ0FBQztBQUVGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDakUseUNBQXlDO0FBQ3pDLE1BQU0sTUFBTSxHQUFHO0lBQ2IsWUFBWTtJQUNaLFdBQVc7SUFDWCxzQkFBc0I7SUFDdEIsa0JBQWtCO0NBQ25CLENBQUM7QUFFRix3QkFBd0I7QUFDeEIsT0FBTyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gTW9kdWxhcml6ZWQgb3BzLlxuZXhwb3J0IHthYnN9IGZyb20gJy4vYWJzJztcbmV4cG9ydCB7YWNvc30gZnJvbSAnLi9hY29zJztcbmV4cG9ydCB7YWNvc2h9IGZyb20gJy4vYWNvc2gnO1xuZXhwb3J0IHthZGR9IGZyb20gJy4vYWRkJztcbmV4cG9ydCB7YWRkTn0gZnJvbSAnLi9hZGRfbic7XG5leHBvcnQge2FsbH0gZnJvbSAnLi9hbGwnO1xuZXhwb3J0IHthbnl9IGZyb20gJy4vYW55JztcbmV4cG9ydCB7YXJnTWF4fSBmcm9tICcuL2FyZ19tYXgnO1xuZXhwb3J0IHthcmdNaW59IGZyb20gJy4vYXJnX21pbic7XG5leHBvcnQge2FzaW59IGZyb20gJy4vYXNpbic7XG5leHBvcnQge2FzaW5ofSBmcm9tICcuL2FzaW5oJztcbmV4cG9ydCB7YXRhbn0gZnJvbSAnLi9hdGFuJztcbmV4cG9ydCB7YXRhbjJ9IGZyb20gJy4vYXRhbjInO1xuZXhwb3J0IHthdGFuaH0gZnJvbSAnLi9hdGFuaCc7XG5leHBvcnQge2F2Z1Bvb2x9IGZyb20gJy4vYXZnX3Bvb2wnO1xuZXhwb3J0IHthdmdQb29sM2R9IGZyb20gJy4vYXZnX3Bvb2xfM2QnO1xuZXhwb3J0IHtiYXNpY0xTVE1DZWxsfSBmcm9tICcuL2Jhc2ljX2xzdG1fY2VsbCc7XG5leHBvcnQge2JhdGNoVG9TcGFjZU5EfSBmcm9tICcuL2JhdGNoX3RvX3NwYWNlX25kJztcbmV4cG9ydCB7YmF0Y2hOb3JtfSBmcm9tICcuL2JhdGNobm9ybSc7XG5leHBvcnQge2JhdGNoTm9ybTJkfSBmcm9tICcuL2JhdGNobm9ybTJkJztcbmV4cG9ydCB7YmF0Y2hOb3JtM2R9IGZyb20gJy4vYmF0Y2hub3JtM2QnO1xuZXhwb3J0IHtiYXRjaE5vcm00ZH0gZnJvbSAnLi9iYXRjaG5vcm00ZCc7XG5leHBvcnQge2JpbmNvdW50fSBmcm9tICcuL2JpbmNvdW50JztcbmV4cG9ydCB7Yml0d2lzZUFuZH0gZnJvbSAnLi9iaXR3aXNlX2FuZCc7XG5leHBvcnQge2Jyb2FkY2FzdEFyZ3N9IGZyb20gJy4vYnJvYWRjYXN0X2FyZ3MnO1xuZXhwb3J0IHticm9hZGNhc3RUb30gZnJvbSAnLi9icm9hZGNhc3RfdG8nO1xuZXhwb3J0IHtidWZmZXJ9IGZyb20gJy4vYnVmZmVyJztcbmV4cG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmV4cG9ydCB7Y2VpbH0gZnJvbSAnLi9jZWlsJztcbmV4cG9ydCB7Y2xpcEJ5VmFsdWV9IGZyb20gJy4vY2xpcF9ieV92YWx1ZSc7XG5leHBvcnQge2Nsb25lfSBmcm9tICcuL2Nsb25lJztcbmV4cG9ydCB7Y29tcGxleH0gZnJvbSAnLi9jb21wbGV4JztcbmV4cG9ydCB7Y29uY2F0fSBmcm9tICcuL2NvbmNhdCc7XG5leHBvcnQge2NvbmNhdDFkfSBmcm9tICcuL2NvbmNhdF8xZCc7XG5leHBvcnQge2NvbmNhdDJkfSBmcm9tICcuL2NvbmNhdF8yZCc7XG5leHBvcnQge2NvbmNhdDNkfSBmcm9tICcuL2NvbmNhdF8zZCc7XG5leHBvcnQge2NvbmNhdDRkfSBmcm9tICcuL2NvbmNhdF80ZCc7XG5leHBvcnQge2NvbnYxZH0gZnJvbSAnLi9jb252MWQnO1xuZXhwb3J0IHtjb252MmR9IGZyb20gJy4vY29udjJkJztcbmV4cG9ydCB7Y29udjJkVHJhbnNwb3NlfSBmcm9tICcuL2NvbnYyZF90cmFuc3Bvc2UnO1xuZXhwb3J0IHtjb252M2R9IGZyb20gJy4vY29udjNkJztcbmV4cG9ydCB7Y29udjNkVHJhbnNwb3NlfSBmcm9tICcuL2NvbnYzZF90cmFuc3Bvc2UnO1xuZXhwb3J0IHtjb3N9IGZyb20gJy4vY29zJztcbmV4cG9ydCB7Y29zaH0gZnJvbSAnLi9jb3NoJztcbmV4cG9ydCB7Y3VtcHJvZH0gZnJvbSAnLi9jdW1wcm9kJztcbmV4cG9ydCB7Y3Vtc3VtfSBmcm9tICcuL2N1bXN1bSc7XG5leHBvcnQge2RlbnNlQmluY291bnR9IGZyb20gJy4vZGVuc2VfYmluY291bnQnO1xuZXhwb3J0IHtkZXB0aFRvU3BhY2V9IGZyb20gJy4vZGVwdGhfdG9fc3BhY2UnO1xuZXhwb3J0IHtkZXB0aHdpc2VDb252MmR9IGZyb20gJy4vZGVwdGh3aXNlX2NvbnYyZCc7XG5leHBvcnQge2RpYWd9IGZyb20gJy4vZGlhZyc7XG5leHBvcnQge2RpbGF0aW9uMmR9IGZyb20gJy4vZGlsYXRpb24yZCc7XG5leHBvcnQge2Rpdn0gZnJvbSAnLi9kaXYnO1xuZXhwb3J0IHtkaXZOb05hbn0gZnJvbSAnLi9kaXZfbm9fbmFuJztcbmV4cG9ydCB7ZG90fSBmcm9tICcuL2RvdCc7XG5leHBvcnQge2VpbnN1bX0gZnJvbSAnLi9laW5zdW0nO1xuZXhwb3J0IHtlbHV9IGZyb20gJy4vZWx1JztcbmV4cG9ydCB7ZW5zdXJlU2hhcGV9IGZyb20gJy4vZW5zdXJlX3NoYXBlJztcbmV4cG9ydCB7ZXF1YWx9IGZyb20gJy4vZXF1YWwnO1xuZXhwb3J0IHtlcmZ9IGZyb20gJy4vZXJmJztcbmV4cG9ydCB7ZXVjbGlkZWFuTm9ybX0gZnJvbSAnLi9ldWNsaWRlYW5fbm9ybSc7XG5leHBvcnQge2V4cH0gZnJvbSAnLi9leHAnO1xuZXhwb3J0IHtleHBhbmREaW1zfSBmcm9tICcuL2V4cGFuZF9kaW1zJztcbmV4cG9ydCB7ZXhwbTF9IGZyb20gJy4vZXhwbTEnO1xuZXhwb3J0IHtleWV9IGZyb20gJy4vZXllJztcbmV4cG9ydCB7ZmlsbH0gZnJvbSAnLi9maWxsJztcbmV4cG9ydCB7Zmxvb3J9IGZyb20gJy4vZmxvb3InO1xuZXhwb3J0IHtmbG9vckRpdn0gZnJvbSAnLi9mbG9vckRpdic7XG5leHBvcnQge2dhdGhlcn0gZnJvbSAnLi9nYXRoZXInO1xuZXhwb3J0IHtncmVhdGVyfSBmcm9tICcuL2dyZWF0ZXInO1xuZXhwb3J0IHtncmVhdGVyRXF1YWx9IGZyb20gJy4vZ3JlYXRlcl9lcXVhbCc7XG5leHBvcnQge2ltYWd9IGZyb20gJy4vaW1hZyc7XG5leHBvcnQge2lzRmluaXRlfSBmcm9tICcuL2lzX2Zpbml0ZSc7XG5leHBvcnQge2lzSW5mfSBmcm9tICcuL2lzX2luZic7XG5leHBvcnQge2lzTmFOfSBmcm9tICcuL2lzX25hbic7XG5leHBvcnQge2xlYWt5UmVsdX0gZnJvbSAnLi9sZWFreV9yZWx1JztcbmV4cG9ydCB7bGVzc30gZnJvbSAnLi9sZXNzJztcbmV4cG9ydCB7bGVzc0VxdWFsfSBmcm9tICcuL2xlc3NfZXF1YWwnO1xuZXhwb3J0IHtsaW5zcGFjZX0gZnJvbSAnLi9saW5zcGFjZSc7XG5leHBvcnQge2xvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9ufSBmcm9tICcuL2xvY2FsX3Jlc3BvbnNlX25vcm1hbGl6YXRpb24nO1xuZXhwb3J0IHtsb2d9IGZyb20gJy4vbG9nJztcbmV4cG9ydCB7bG9nMXB9IGZyb20gJy4vbG9nMXAnO1xuZXhwb3J0IHtsb2dTaWdtb2lkfSBmcm9tICcuL2xvZ19zaWdtb2lkJztcbmV4cG9ydCB7bG9nU29mdG1heH0gZnJvbSAnLi9sb2dfc29mdG1heCc7XG5leHBvcnQge2xvZ1N1bUV4cH0gZnJvbSAnLi9sb2dfc3VtX2V4cCc7XG5leHBvcnQge2xvZ2ljYWxBbmR9IGZyb20gJy4vbG9naWNhbF9hbmQnO1xuZXhwb3J0IHtsb2dpY2FsTm90fSBmcm9tICcuL2xvZ2ljYWxfbm90JztcbmV4cG9ydCB7bG9naWNhbE9yfSBmcm9tICcuL2xvZ2ljYWxfb3InO1xuZXhwb3J0IHtsb2dpY2FsWG9yfSBmcm9tICcuL2xvZ2ljYWxfeG9yJztcbmV4cG9ydCB7bG93ZXJCb3VuZH0gZnJvbSAnLi9sb3dlcl9ib3VuZCc7XG5leHBvcnQge21hdE11bH0gZnJvbSAnLi9tYXRfbXVsJztcbmV4cG9ydCB7bWF4fSBmcm9tICcuL21heCc7XG5leHBvcnQge21heFBvb2x9IGZyb20gJy4vbWF4X3Bvb2wnO1xuZXhwb3J0IHttYXhQb29sM2R9IGZyb20gJy4vbWF4X3Bvb2xfM2QnO1xuZXhwb3J0IHttYXhQb29sV2l0aEFyZ21heH0gZnJvbSAnLi9tYXhfcG9vbF93aXRoX2FyZ21heCc7XG5leHBvcnQge21heGltdW19IGZyb20gJy4vbWF4aW11bSc7XG5leHBvcnQge21lYW59IGZyb20gJy4vbWVhbic7XG5leHBvcnQge21lc2hncmlkfSBmcm9tICcuL21lc2hncmlkJztcbmV4cG9ydCB7bWlufSBmcm9tICcuL21pbic7XG5leHBvcnQge21pbmltdW19IGZyb20gJy4vbWluaW11bSc7XG5leHBvcnQge21pcnJvclBhZH0gZnJvbSAnLi9taXJyb3JfcGFkJztcbmV4cG9ydCB7bW9kfSBmcm9tICcuL21vZCc7XG5leHBvcnQge21vbWVudHN9IGZyb20gJy4vbW9tZW50cyc7XG5leHBvcnQge211bH0gZnJvbSAnLi9tdWwnO1xuZXhwb3J0IHtMU1RNQ2VsbEZ1bmMsIG11bHRpUk5OQ2VsbH0gZnJvbSAnLi9tdWx0aV9ybm5fY2VsbCc7XG5leHBvcnQge211bHRpbm9taWFsfSBmcm9tICcuL211bHRpbm9taWFsJztcbmV4cG9ydCB7bmVnfSBmcm9tICcuL25lZyc7XG5leHBvcnQge25vdEVxdWFsfSBmcm9tICcuL25vdF9lcXVhbCc7XG5leHBvcnQge29uZUhvdH0gZnJvbSAnLi9vbmVfaG90JztcbmV4cG9ydCB7b25lc30gZnJvbSAnLi9vbmVzJztcbmV4cG9ydCB7b25lc0xpa2V9IGZyb20gJy4vb25lc19saWtlJztcbmV4cG9ydCB7b3V0ZXJQcm9kdWN0fSBmcm9tICcuL291dGVyX3Byb2R1Y3QnO1xuZXhwb3J0IHtwYWR9IGZyb20gJy4vcGFkJztcbmV4cG9ydCB7cGFkMWR9IGZyb20gJy4vcGFkMWQnO1xuZXhwb3J0IHtwYWQyZH0gZnJvbSAnLi9wYWQyZCc7XG5leHBvcnQge3BhZDNkfSBmcm9tICcuL3BhZDNkJztcbmV4cG9ydCB7cGFkNGR9IGZyb20gJy4vcGFkNGQnO1xuZXhwb3J0IHtwb29sfSBmcm9tICcuL3Bvb2wnO1xuZXhwb3J0IHtwb3d9IGZyb20gJy4vcG93JztcbmV4cG9ydCB7cHJlbHV9IGZyb20gJy4vcHJlbHUnO1xuZXhwb3J0IHtwcmludH0gZnJvbSAnLi9wcmludCc7XG5leHBvcnQge3Byb2R9IGZyb20gJy4vcHJvZCc7XG5leHBvcnQge3JhZ2dlZEdhdGhlcn0gZnJvbSAnLi9yYWdnZWRfZ2F0aGVyJztcbmV4cG9ydCB7cmFnZ2VkUmFuZ2V9IGZyb20gJy4vcmFnZ2VkX3JhbmdlJztcbmV4cG9ydCB7cmFnZ2VkVGVuc29yVG9UZW5zb3J9IGZyb20gJy4vcmFnZ2VkX3RlbnNvcl90b190ZW5zb3InO1xuZXhwb3J0IHtyYW5kfSBmcm9tICcuL3JhbmQnO1xuZXhwb3J0IHtyYW5kb21HYW1tYX0gZnJvbSAnLi9yYW5kb21fZ2FtbWEnO1xuZXhwb3J0IHtyYW5kb21Ob3JtYWx9IGZyb20gJy4vcmFuZG9tX25vcm1hbCc7XG5leHBvcnQge3JhbmRvbVN0YW5kYXJkTm9ybWFsfSBmcm9tICcuL3JhbmRvbV9zdGFuZGFyZF9ub3JtYWwnO1xuZXhwb3J0IHtyYW5kb21Vbmlmb3JtfSBmcm9tICcuL3JhbmRvbV91bmlmb3JtJztcbmV4cG9ydCB7cmFuZG9tVW5pZm9ybUludH0gZnJvbSAnLi9yYW5kb21fdW5pZm9ybV9pbnQnO1xuZXhwb3J0IHtyYW5nZX0gZnJvbSAnLi9yYW5nZSc7XG5leHBvcnQge3JlYWx9IGZyb20gJy4vcmVhbCc7XG5leHBvcnQge3JlY2lwcm9jYWx9IGZyb20gJy4vcmVjaXByb2NhbCc7XG5leHBvcnQge3JlbHV9IGZyb20gJy4vcmVsdSc7XG5leHBvcnQge3JlbHU2fSBmcm9tICcuL3JlbHU2JztcbmV4cG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcbmV4cG9ydCB7cmV2ZXJzZX0gZnJvbSAnLi9yZXZlcnNlJztcbmV4cG9ydCB7cmV2ZXJzZTFkfSBmcm9tICcuL3JldmVyc2VfMWQnO1xuZXhwb3J0IHtyZXZlcnNlMmR9IGZyb20gJy4vcmV2ZXJzZV8yZCc7XG5leHBvcnQge3JldmVyc2UzZH0gZnJvbSAnLi9yZXZlcnNlXzNkJztcbmV4cG9ydCB7cmV2ZXJzZTRkfSBmcm9tICcuL3JldmVyc2VfNGQnO1xuZXhwb3J0IHtyb3VuZH0gZnJvbSAnLi9yb3VuZCc7XG5leHBvcnQge3JzcXJ0fSBmcm9tICcuL3JzcXJ0JztcbmV4cG9ydCB7c2NhbGFyfSBmcm9tICcuL3NjYWxhcic7XG5leHBvcnQge3NlbHV9IGZyb20gJy4vc2VsdSc7XG5leHBvcnQge3NlcGFyYWJsZUNvbnYyZH0gZnJvbSAnLi9zZXBhcmFibGVfY29udjJkJztcbmV4cG9ydCB7c2V0ZGlmZjFkQXN5bmN9IGZyb20gJy4vc2V0ZGlmZjFkX2FzeW5jJztcbmV4cG9ydCB7c2lnbW9pZH0gZnJvbSAnLi9zaWdtb2lkJztcbmV4cG9ydCB7c2lnbn0gZnJvbSAnLi9zaWduJztcbmV4cG9ydCB7c2lufSBmcm9tICcuL3Npbic7XG5leHBvcnQge3Npbmh9IGZyb20gJy4vc2luaCc7XG5leHBvcnQge3NsaWNlfSBmcm9tICcuL3NsaWNlJztcbmV4cG9ydCB7c2xpY2UxZH0gZnJvbSAnLi9zbGljZTFkJztcbmV4cG9ydCB7c2xpY2UyZH0gZnJvbSAnLi9zbGljZTJkJztcbmV4cG9ydCB7c2xpY2UzZH0gZnJvbSAnLi9zbGljZTNkJztcbmV4cG9ydCB7c2xpY2U0ZH0gZnJvbSAnLi9zbGljZTRkJztcbmV4cG9ydCB7c29mdG1heH0gZnJvbSAnLi9zb2Z0bWF4JztcbmV4cG9ydCB7c29mdHBsdXN9IGZyb20gJy4vc29mdHBsdXMnO1xuZXhwb3J0IHtzcGFjZVRvQmF0Y2hORH0gZnJvbSAnLi9zcGFjZV90b19iYXRjaF9uZCc7XG5leHBvcnQge2ZmdH0gZnJvbSAnLi9zcGVjdHJhbC9mZnQnO1xuZXhwb3J0IHtpZmZ0fSBmcm9tICcuL3NwZWN0cmFsL2lmZnQnO1xuZXhwb3J0IHtpcmZmdH0gZnJvbSAnLi9zcGVjdHJhbC9pcmZmdCc7XG5leHBvcnQge3JmZnR9IGZyb20gJy4vc3BlY3RyYWwvcmZmdCc7XG5leHBvcnQge3NwbGl0fSBmcm9tICcuL3NwbGl0JztcbmV4cG9ydCB7c3FydH0gZnJvbSAnLi9zcXJ0JztcbmV4cG9ydCB7c3F1YXJlfSBmcm9tICcuL3NxdWFyZSc7XG5leHBvcnQge3NxdWFyZWREaWZmZXJlbmNlfSBmcm9tICcuL3NxdWFyZWRfZGlmZmVyZW5jZSc7XG5leHBvcnQge3NxdWVlemV9IGZyb20gJy4vc3F1ZWV6ZSc7XG5leHBvcnQge3N0YWNrfSBmcm9tICcuL3N0YWNrJztcbmV4cG9ydCB7c3RlcH0gZnJvbSAnLi9zdGVwJztcbmV4cG9ydCB7c3RyaWRlZFNsaWNlfSBmcm9tICcuL3N0cmlkZWRfc2xpY2UnO1xuZXhwb3J0IHtzdWJ9IGZyb20gJy4vc3ViJztcbmV4cG9ydCB7c3VtfSBmcm9tICcuL3N1bSc7XG5leHBvcnQge3Rhbn0gZnJvbSAnLi90YW4nO1xuZXhwb3J0IHt0YW5ofSBmcm9tICcuL3RhbmgnO1xuZXhwb3J0IHt0ZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmV4cG9ydCB7dGVuc29yMWR9IGZyb20gJy4vdGVuc29yMWQnO1xuZXhwb3J0IHt0ZW5zb3IyZH0gZnJvbSAnLi90ZW5zb3IyZCc7XG5leHBvcnQge3RlbnNvcjNkfSBmcm9tICcuL3RlbnNvcjNkJztcbmV4cG9ydCB7dGVuc29yNGR9IGZyb20gJy4vdGVuc29yNGQnO1xuZXhwb3J0IHt0ZW5zb3I1ZH0gZnJvbSAnLi90ZW5zb3I1ZCc7XG5leHBvcnQge3RlbnNvcjZkfSBmcm9tICcuL3RlbnNvcjZkJztcbmV4cG9ydCB7dGVuc29yU2NhdHRlclVwZGF0ZX0gZnJvbSAnLi90ZW5zb3Jfc2NhdHRlcl91cGRhdGUnO1xuZXhwb3J0IHt0aWxlfSBmcm9tICcuL3RpbGUnO1xuZXhwb3J0IHt0b3BrfSBmcm9tICcuL3RvcGsnO1xuZXhwb3J0IHt0cnVuY2F0ZWROb3JtYWx9IGZyb20gJy4vdHJ1bmNhdGVkX25vcm1hbCc7XG5leHBvcnQge3VuaXF1ZX0gZnJvbSAnLi91bmlxdWUnO1xuZXhwb3J0IHt1bnNvcnRlZFNlZ21lbnRTdW19IGZyb20gJy4vdW5zb3J0ZWRfc2VnbWVudF9zdW0nO1xuZXhwb3J0IHt1bnN0YWNrfSBmcm9tICcuL3Vuc3RhY2snO1xuZXhwb3J0IHt1cHBlckJvdW5kfSBmcm9tICcuL3VwcGVyX2JvdW5kJztcbmV4cG9ydCB7dmFyaWFibGV9IGZyb20gJy4vdmFyaWFibGUnO1xuZXhwb3J0IHt3aGVyZX0gZnJvbSAnLi93aGVyZSc7XG5leHBvcnQge3doZXJlQXN5bmN9IGZyb20gJy4vd2hlcmVfYXN5bmMnO1xuZXhwb3J0IHt6ZXJvc30gZnJvbSAnLi96ZXJvcyc7XG5leHBvcnQge3plcm9zTGlrZX0gZnJvbSAnLi96ZXJvc19saWtlJztcblxuZXhwb3J0ICogZnJvbSAnLi9ib29sZWFuX21hc2snO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc3Bvc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ub3JtJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nX2F2ZXJhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2F0dGVyX25kJztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoX3NvcnRlZCc7XG5leHBvcnQgKiBmcm9tICcuL3NwYXJzZV90b19kZW5zZSc7XG5leHBvcnQgKiBmcm9tICcuL2dhdGhlcl9uZCc7XG5leHBvcnQgKiBmcm9tICcuL2Ryb3BvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9zaWduYWxfb3BzX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9pbl90b3Bfayc7XG5cbmV4cG9ydCB7b3AsIE9QX1NDT1BFX1NVRkZJWH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG5pbXBvcnQge3JmZnR9IGZyb20gJy4vc3BlY3RyYWwvcmZmdCc7XG5pbXBvcnQge2ZmdH0gZnJvbSAnLi9zcGVjdHJhbC9mZnQnO1xuaW1wb3J0IHtpZmZ0fSBmcm9tICcuL3NwZWN0cmFsL2lmZnQnO1xuaW1wb3J0IHtpcmZmdH0gZnJvbSAnLi9zcGVjdHJhbC9pcmZmdCc7XG5jb25zdCBzcGVjdHJhbCA9IHtcbiAgZmZ0LFxuICBpZmZ0LFxuICByZmZ0LFxuICBpcmZmdFxufTtcblxuaW1wb3J0ICogYXMgZnVzZWQgZnJvbSAnLi9mdXNlZF9vcHMnO1xuXG5pbXBvcnQge2hhbW1pbmdXaW5kb3d9IGZyb20gJy4vc2lnbmFsL2hhbW1pbmdfd2luZG93JztcbmltcG9ydCB7aGFubldpbmRvd30gZnJvbSAnLi9zaWduYWwvaGFubl93aW5kb3cnO1xuaW1wb3J0IHtmcmFtZX0gZnJvbSAnLi9zaWduYWwvZnJhbWUnO1xuaW1wb3J0IHtzdGZ0fSBmcm9tICcuL3NpZ25hbC9zdGZ0JztcbmNvbnN0IHNpZ25hbCA9IHtcbiAgaGFtbWluZ1dpbmRvdyxcbiAgaGFubldpbmRvdyxcbiAgZnJhbWUsXG4gIHN0ZnQsXG59O1xuXG4vLyBJbWFnZSBPcHMgbmFtZXNwYWNlXG5pbXBvcnQge2Nyb3BBbmRSZXNpemV9IGZyb20gJy4vaW1hZ2UvY3JvcF9hbmRfcmVzaXplJztcbmltcG9ydCB7ZmxpcExlZnRSaWdodH0gZnJvbSAnLi9pbWFnZS9mbGlwX2xlZnRfcmlnaHQnO1xuaW1wb3J0IHtncmF5c2NhbGVUb1JHQn0gZnJvbSAnLi9pbWFnZS9ncmF5c2NhbGVfdG9fcmdiJztcbmltcG9ydCB7cmdiVG9HcmF5c2NhbGV9IGZyb20gJy4vaW1hZ2UvcmdiX3RvX2dyYXlzY2FsZSc7XG5pbXBvcnQge3JvdGF0ZVdpdGhPZmZzZXR9IGZyb20gJy4vaW1hZ2Uvcm90YXRlX3dpdGhfb2Zmc2V0JztcbmltcG9ydCB7bm9uTWF4U3VwcHJlc3Npb259IGZyb20gJy4vaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbic7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uQXN5bmN9IGZyb20gJy4vaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl9hc3luYyc7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlfSBmcm9tICcuL2ltYWdlL25vbl9tYXhfc3VwcHJlc3Npb25fd2l0aF9zY29yZSc7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlQXN5bmN9IGZyb20gJy4vaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlX2FzeW5jJztcbmltcG9ydCB7bm9uTWF4U3VwcHJlc3Npb25QYWRkZWR9IGZyb20gJy4vaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl9wYWRkZWQnO1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblBhZGRlZEFzeW5jfSBmcm9tICcuL2ltYWdlL25vbl9tYXhfc3VwcHJlc3Npb25fcGFkZGVkX2FzeW5jJztcbmltcG9ydCB7cmVzaXplQmlsaW5lYXJ9IGZyb20gJy4vaW1hZ2UvcmVzaXplX2JpbGluZWFyJztcbmltcG9ydCB7cmVzaXplTmVhcmVzdE5laWdoYm9yfSBmcm9tICcuL2ltYWdlL3Jlc2l6ZV9uZWFyZXN0X25laWdoYm9yJztcbmltcG9ydCB7dGhyZXNob2xkfSBmcm9tICcuL2ltYWdlL3RocmVzaG9sZCc7XG5pbXBvcnQge3RyYW5zZm9ybX0gZnJvbSAnLi9pbWFnZS90cmFuc2Zvcm0nO1xuY29uc3QgaW1hZ2UgPSB7XG4gIGZsaXBMZWZ0UmlnaHQsXG4gIGdyYXlzY2FsZVRvUkdCLFxuICByZXNpemVOZWFyZXN0TmVpZ2hib3IsXG4gIHJlc2l6ZUJpbGluZWFyLFxuICByZ2JUb0dyYXlzY2FsZSxcbiAgcm90YXRlV2l0aE9mZnNldCxcbiAgY3JvcEFuZFJlc2l6ZSxcbiAgbm9uTWF4U3VwcHJlc3Npb24sXG4gIG5vbk1heFN1cHByZXNzaW9uQXN5bmMsXG4gIG5vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlLFxuICBub25NYXhTdXBwcmVzc2lvbldpdGhTY29yZUFzeW5jLFxuICBub25NYXhTdXBwcmVzc2lvblBhZGRlZCxcbiAgbm9uTWF4U3VwcHJlc3Npb25QYWRkZWRBc3luYyxcbiAgdGhyZXNob2xkLFxuICB0cmFuc2Zvcm1cbn07XG5cbi8vIGxpbmFsZyBuYW1lc3BhY2VcbmltcG9ydCB7YmFuZFBhcnR9IGZyb20gJy4vbGluYWxnL2JhbmRfcGFydCc7XG5pbXBvcnQge2dyYW1TY2htaWR0fSBmcm9tICcuL2xpbmFsZy9ncmFtX3NjaG1pZHQnO1xuaW1wb3J0IHtxcn0gZnJvbSAnLi9saW5hbGcvcXInO1xuY29uc3QgbGluYWxnID0ge1xuICBiYW5kUGFydCxcbiAgZ3JhbVNjaG1pZHQsXG4gIHFyXG59O1xuXG4vLyBsb3NzZXMgbmFtZXNwYWNlO1xuaW1wb3J0IHthYnNvbHV0ZURpZmZlcmVuY2V9IGZyb20gJy4vbG9zc2VzL2Fic29sdXRlX2RpZmZlcmVuY2UnO1xuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2xvc3Nlcy9jb21wdXRlX3dlaWdodGVkX2xvc3MnO1xuaW1wb3J0IHtjb3NpbmVEaXN0YW5jZX0gZnJvbSAnLi9sb3NzZXMvY29zaW5lX2Rpc3RhbmNlJztcbmltcG9ydCB7aGluZ2VMb3NzfSBmcm9tICcuL2xvc3Nlcy9oaW5nZV9sb3NzJztcbmltcG9ydCB7aHViZXJMb3NzfSBmcm9tICcuL2xvc3Nlcy9odWJlcl9sb3NzJztcbmltcG9ydCB7bG9nTG9zc30gZnJvbSAnLi9sb3NzZXMvbG9nX2xvc3MnO1xuaW1wb3J0IHttZWFuU3F1YXJlZEVycm9yfSBmcm9tICcuL2xvc3Nlcy9tZWFuX3NxdWFyZWRfZXJyb3InO1xuaW1wb3J0IHtzaWdtb2lkQ3Jvc3NFbnRyb3B5fSBmcm9tICcuL2xvc3Nlcy9zaWdtb2lkX2Nyb3NzX2VudHJvcHknO1xuaW1wb3J0IHtzb2Z0bWF4Q3Jvc3NFbnRyb3B5fSBmcm9tICcuL2xvc3Nlcy9zb2Z0bWF4X2Nyb3NzX2VudHJvcHknO1xuY29uc3QgbG9zc2VzID0ge1xuICBhYnNvbHV0ZURpZmZlcmVuY2UsXG4gIGNvbXB1dGVXZWlnaHRlZExvc3MsXG4gIGNvc2luZURpc3RhbmNlLFxuICBoaW5nZUxvc3MsXG4gIGh1YmVyTG9zcyxcbiAgbG9nTG9zcyxcbiAgbWVhblNxdWFyZWRFcnJvcixcbiAgc2lnbW9pZENyb3NzRW50cm9weSxcbiAgc29mdG1heENyb3NzRW50cm9weVxufTtcblxuaW1wb3J0IHtzcGFyc2VGaWxsRW1wdHlSb3dzfSBmcm9tICcuL3NwYXJzZS9zcGFyc2VfZmlsbF9lbXB0eV9yb3dzJztcbmltcG9ydCB7c3BhcnNlUmVzaGFwZX0gZnJvbSAnLi9zcGFyc2Uvc3BhcnNlX3Jlc2hhcGUnO1xuaW1wb3J0IHtzcGFyc2VTZWdtZW50TWVhbn0gZnJvbSAnLi9zcGFyc2Uvc3BhcnNlX3NlZ21lbnRfbWVhbic7XG5pbXBvcnQge3NwYXJzZVNlZ21lbnRTdW19IGZyb20gJy4vc3BhcnNlL3NwYXJzZV9zZWdtZW50X3N1bSc7XG5jb25zdCBzcGFyc2UgPSB7XG4gIHNwYXJzZUZpbGxFbXB0eVJvd3MsXG4gIHNwYXJzZVJlc2hhcGUsXG4gIHNwYXJzZVNlZ21lbnRNZWFuLFxuICBzcGFyc2VTZWdtZW50U3VtXG59O1xuXG5pbXBvcnQge3N0cmluZ05HcmFtc30gZnJvbSAnLi9zdHJpbmcvc3RyaW5nX25fZ3JhbXMnO1xuaW1wb3J0IHtzdHJpbmdTcGxpdH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nX3NwbGl0JztcbmltcG9ydCB7c3RyaW5nVG9IYXNoQnVja2V0RmFzdH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nX3RvX2hhc2hfYnVja2V0X2Zhc3QnO1xuaW1wb3J0IHtzdGF0aWNSZWdleFJlcGxhY2V9IGZyb20gJy4vc3RyaW5nL3N0YXRpY19yZWdleF9yZXBsYWNlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG5jb25zdCBzdHJpbmcgPSB7XG4gIHN0cmluZ05HcmFtcyxcbiAgc3RyaW5nU3BsaXQsXG4gIHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3QsXG4gIHN0YXRpY1JlZ2V4UmVwbGFjZSxcbn07XG5cbi8vIFNlY29uZCBsZXZlbCBleHBvcnRzLlxuZXhwb3J0IHtpbWFnZSwgbGluYWxnLCBsb3NzZXMsIHNwZWN0cmFsLCBmdXNlZCwgc2lnbmFsLCBzcGFyc2UsIHN0cmluZ307XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { StringSplit } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Split elements of `input` based on `delimiter` into a SparseTensor .\n *\n * Let N be the size of source (typically N will be the batch size). Split each\n * element of `input` based on `delimiter` and return a SparseTensor containing\n * the splitted tokens. Empty tokens are ignored if `skipEmpty` is set to True.\n *\n * `delimiter` can be empty, or a string of split characters. If `delimiter` is\n * an empty string, each element of `input` is split into individual\n * character strings. Otherwise every character of `delimiter` is a potential\n * split point.\n *\n * ```js\n * const result = tf.string.stringSplit(['hello world', 'a b c'], ' ');\n * result['indices'].print(); // [[0, 0], [0, 1], [1, 0], [1, 1], [1, 2]]\n * result['values'].print(); // ['hello', 'world', 'a', 'b', 'c']\n * result['shape'].print(); // [2, 3]\n * ```\n * @param input: 1-D. Strings to split.\n * @param delimiter: 0-D. Delimiter characters, or empty string.\n * @param skipEmpty: Optional. If true, skip the empty strings from the result.\n * Defaults to true.\n * @return A map with the following properties:\n * - indices: A dense matrix of int32 representing the indices of the sparse\n * tensor.\n * - values: A vector of strings corresponding to the splited values.\n * - shape: a length-2 vector of int32 representing the shape of the sparse\n * tensor, where the first value is N and the second value is the maximum number\n * of tokens in a single input entry.\n *\n * @doc {heading: 'Operations', subheading: 'String'}\n */\nfunction stringSplit_(input, delimiter, skipEmpty = true) {\n const $input = convertToTensor(input, 'input', 'stringSplit', 'string');\n const $delimiter = convertToTensor(delimiter, 'delimiter', 'stringSplit', 'string');\n if ($input.rank !== 1) {\n throw new Error(`Input should be Tensor1D but received shape ${$input.shape}`);\n }\n if ($delimiter.rank !== 0) {\n throw new Error(`Delimiter should be a scalar but received shape ${$delimiter.shape}`);\n }\n const attrs = { skipEmpty };\n const inputs = { input: $input, delimiter: $delimiter };\n const result = ENGINE.runKernel(StringSplit, inputs, attrs);\n return { indices: result[0], values: result[1], shape: result[2] };\n}\nexport const stringSplit = /* @__PURE__ */ op({ stringSplit_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nX3NwbGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3RyaW5nL3N0cmluZ19zcGxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxXQUFXLEVBQXNDLE1BQU0sb0JBQW9CLENBQUM7QUFHcEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxTQUFTLFlBQVksQ0FDakIsS0FBMEIsRUFBRSxTQUE0QixFQUN4RCxTQUFTLEdBQUcsSUFBSTtJQUNsQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEUsTUFBTSxVQUFVLEdBQ1osZUFBZSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXJFLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDWCwrQ0FBK0MsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDcEU7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ1gsbURBQW1ELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsTUFBTSxLQUFLLEdBQXFCLEVBQUMsU0FBUyxFQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQXNCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLENBQUM7SUFDekUsTUFBTSxNQUFNLEdBQ1IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsTUFBWSxFQUFFLEtBQVcsQ0FBQyxDQUFDO0lBQzdELE9BQU8sRUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTdHJpbmdTcGxpdCwgU3RyaW5nU3BsaXRBdHRycywgU3RyaW5nU3BsaXRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1NjYWxhciwgVGVuc29yLCBUZW5zb3IxRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7U2NhbGFyTGlrZSwgVGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBTcGxpdCBlbGVtZW50cyBvZiBgaW5wdXRgIGJhc2VkIG9uIGBkZWxpbWl0ZXJgIGludG8gYSBTcGFyc2VUZW5zb3IgLlxuICpcbiAqIExldCBOIGJlIHRoZSBzaXplIG9mIHNvdXJjZSAodHlwaWNhbGx5IE4gd2lsbCBiZSB0aGUgYmF0Y2ggc2l6ZSkuIFNwbGl0IGVhY2hcbiAqIGVsZW1lbnQgb2YgYGlucHV0YCBiYXNlZCBvbiBgZGVsaW1pdGVyYCBhbmQgcmV0dXJuIGEgU3BhcnNlVGVuc29yIGNvbnRhaW5pbmdcbiAqIHRoZSBzcGxpdHRlZCB0b2tlbnMuIEVtcHR5IHRva2VucyBhcmUgaWdub3JlZCBpZiBgc2tpcEVtcHR5YCBpcyBzZXQgdG8gVHJ1ZS5cbiAqXG4gKiBgZGVsaW1pdGVyYCBjYW4gYmUgZW1wdHksIG9yIGEgc3RyaW5nIG9mIHNwbGl0IGNoYXJhY3RlcnMuIElmIGBkZWxpbWl0ZXJgIGlzXG4gKiBhbiBlbXB0eSBzdHJpbmcsIGVhY2ggZWxlbWVudCBvZiBgaW5wdXRgIGlzIHNwbGl0IGludG8gaW5kaXZpZHVhbFxuICogY2hhcmFjdGVyIHN0cmluZ3MuIE90aGVyd2lzZSBldmVyeSBjaGFyYWN0ZXIgb2YgYGRlbGltaXRlcmAgaXMgYSBwb3RlbnRpYWxcbiAqIHNwbGl0IHBvaW50LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCByZXN1bHQgPSB0Zi5zdHJpbmcuc3RyaW5nU3BsaXQoWydoZWxsbyB3b3JsZCcsICAnYSBiIGMnXSwgJyAnKTtcbiAqIHJlc3VsdFsnaW5kaWNlcyddLnByaW50KCk7IC8vIFtbMCwgMF0sIFswLCAxXSwgWzEsIDBdLCBbMSwgMV0sIFsxLCAyXV1cbiAqIHJlc3VsdFsndmFsdWVzJ10ucHJpbnQoKTsgLy8gWydoZWxsbycsICd3b3JsZCcsICdhJywgJ2InLCAnYyddXG4gKiByZXN1bHRbJ3NoYXBlJ10ucHJpbnQoKTsgLy8gWzIsIDNdXG4gKiBgYGBcbiAqIEBwYXJhbSBpbnB1dDogMS1ELiBTdHJpbmdzIHRvIHNwbGl0LlxuICogQHBhcmFtIGRlbGltaXRlcjogMC1ELiBEZWxpbWl0ZXIgY2hhcmFjdGVycywgb3IgZW1wdHkgc3RyaW5nLlxuICogQHBhcmFtIHNraXBFbXB0eTogT3B0aW9uYWwuIElmIHRydWUsIHNraXAgdGhlIGVtcHR5IHN0cmluZ3MgZnJvbSB0aGUgcmVzdWx0LlxuICogICAgIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gaW5kaWNlczogQSBkZW5zZSBtYXRyaXggb2YgaW50MzIgcmVwcmVzZW50aW5nIHRoZSBpbmRpY2VzIG9mIHRoZSBzcGFyc2VcbiAqICAgICAgIHRlbnNvci5cbiAqICAgICAtIHZhbHVlczogQSB2ZWN0b3Igb2Ygc3RyaW5ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGxpdGVkIHZhbHVlcy5cbiAqICAgICAtIHNoYXBlOiBhIGxlbmd0aC0yIHZlY3RvciBvZiBpbnQzMiByZXByZXNlbnRpbmcgdGhlIHNoYXBlIG9mIHRoZSBzcGFyc2VcbiAqIHRlbnNvciwgd2hlcmUgdGhlIGZpcnN0IHZhbHVlIGlzIE4gYW5kIHRoZSBzZWNvbmQgdmFsdWUgaXMgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiB0b2tlbnMgaW4gYSBzaW5nbGUgaW5wdXQgZW50cnkuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3RyaW5nJ31cbiAqL1xuZnVuY3Rpb24gc3RyaW5nU3BsaXRfKFxuICAgIGlucHV0OiBUZW5zb3IxRHxUZW5zb3JMaWtlLCBkZWxpbWl0ZXI6IFNjYWxhcnxTY2FsYXJMaWtlLFxuICAgIHNraXBFbXB0eSA9IHRydWUpOiBOYW1lZFRlbnNvck1hcCB7XG4gIGNvbnN0ICRpbnB1dCA9IGNvbnZlcnRUb1RlbnNvcihpbnB1dCwgJ2lucHV0JywgJ3N0cmluZ1NwbGl0JywgJ3N0cmluZycpO1xuICBjb25zdCAkZGVsaW1pdGVyID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihkZWxpbWl0ZXIsICdkZWxpbWl0ZXInLCAnc3RyaW5nU3BsaXQnLCAnc3RyaW5nJyk7XG5cbiAgaWYgKCRpbnB1dC5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW5wdXQgc2hvdWxkIGJlIFRlbnNvcjFEIGJ1dCByZWNlaXZlZCBzaGFwZSAkeyRpbnB1dC5zaGFwZX1gKTtcbiAgfVxuICBpZiAoJGRlbGltaXRlci5yYW5rICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGVsaW1pdGVyIHNob3VsZCBiZSBhIHNjYWxhciBidXQgcmVjZWl2ZWQgc2hhcGUgJHskZGVsaW1pdGVyLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgYXR0cnM6IFN0cmluZ1NwbGl0QXR0cnMgPSB7c2tpcEVtcHR5fTtcbiAgY29uc3QgaW5wdXRzOiBTdHJpbmdTcGxpdElucHV0cyA9IHtpbnB1dDogJGlucHV0LCBkZWxpbWl0ZXI6ICRkZWxpbWl0ZXJ9O1xuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID1cbiAgICAgIEVOR0lORS5ydW5LZXJuZWwoU3RyaW5nU3BsaXQsIGlucHV0cyBhcyB7fSwgYXR0cnMgYXMge30pO1xuICByZXR1cm4ge2luZGljZXM6IHJlc3VsdFswXSwgdmFsdWVzOiByZXN1bHRbMV0sIHNoYXBlOiByZXN1bHRbMl19O1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nU3BsaXQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3N0cmluZ1NwbGl0X30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { StringToHashBucketFast } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Converts each string in the input Tensor to its hash mod by a number of\n * buckets.\n *\n * The hash function is deterministic on the content of the string within the\n * process and will never change. However, it is not suitable for cryptography.\n * This function may be used when CPU time is scarce and inputs are trusted or\n * unimportant. There is a risk of adversaries constructing inputs that all hash\n * to the same bucket.\n *\n * ```js\n * const result = tf.string.stringToHashBucketFast(\n * ['Hello', 'TensorFlow', '2.x'], 3);\n * result.print(); // [0, 2, 2]\n * ```\n * @param input: The strings to assign a hash bucket.\n * @param numBuckets: The number of buckets.\n * @return A Tensor of the same shape as the input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'String'}\n */\nfunction stringToHashBucketFast_(input, numBuckets) {\n const $input = convertToTensor(input, 'input', 'stringToHashBucketFast', 'string');\n const attrs = { numBuckets };\n if (numBuckets <= 0) {\n throw new Error(`Number of buckets must be at least 1`);\n }\n const inputs = { input: $input };\n return ENGINE.runKernel(StringToHashBucketFast, inputs, attrs);\n}\nexport const stringToHashBucketFast = /* @__PURE__ */ op({ stringToHashBucketFast_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nX3RvX2hhc2hfYnVja2V0X2Zhc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zdHJpbmcvc3RyaW5nX3RvX2hhc2hfYnVja2V0X2Zhc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsc0JBQXNCLEVBQTRELE1BQU0sb0JBQW9CLENBQUM7QUFFckgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDNUIsS0FBd0IsRUFBRSxVQUFrQjtJQUM5QyxNQUFNLE1BQU0sR0FDUixlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4RSxNQUFNLEtBQUssR0FBZ0MsRUFBQyxVQUFVLEVBQUMsQ0FBQztJQUV4RCxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsTUFBTSxNQUFNLEdBQWlDLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBQzdELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxNQUFZLEVBQUUsS0FBVyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyx1QkFBdUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTdHJpbmdUb0hhc2hCdWNrZXRGYXN0LCBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0QXR0cnMsIFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbnZlcnRzIGVhY2ggc3RyaW5nIGluIHRoZSBpbnB1dCBUZW5zb3IgdG8gaXRzIGhhc2ggbW9kIGJ5IGEgbnVtYmVyIG9mXG4gKiBidWNrZXRzLlxuICpcbiAqIFRoZSBoYXNoIGZ1bmN0aW9uIGlzIGRldGVybWluaXN0aWMgb24gdGhlIGNvbnRlbnQgb2YgdGhlIHN0cmluZyB3aXRoaW4gdGhlXG4gKiBwcm9jZXNzIGFuZCB3aWxsIG5ldmVyIGNoYW5nZS4gSG93ZXZlciwgaXQgaXMgbm90IHN1aXRhYmxlIGZvciBjcnlwdG9ncmFwaHkuXG4gKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHdoZW4gQ1BVIHRpbWUgaXMgc2NhcmNlIGFuZCBpbnB1dHMgYXJlIHRydXN0ZWQgb3JcbiAqIHVuaW1wb3J0YW50LiBUaGVyZSBpcyBhIHJpc2sgb2YgYWR2ZXJzYXJpZXMgY29uc3RydWN0aW5nIGlucHV0cyB0aGF0IGFsbCBoYXNoXG4gKiB0byB0aGUgc2FtZSBidWNrZXQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlc3VsdCA9IHRmLnN0cmluZy5zdHJpbmdUb0hhc2hCdWNrZXRGYXN0KFxuICogICBbJ0hlbGxvJywgJ1RlbnNvckZsb3cnLCAnMi54J10sIDMpO1xuICogcmVzdWx0LnByaW50KCk7IC8vIFswLCAyLCAyXVxuICogYGBgXG4gKiBAcGFyYW0gaW5wdXQ6IFRoZSBzdHJpbmdzIHRvIGFzc2lnbiBhIGhhc2ggYnVja2V0LlxuICogQHBhcmFtIG51bUJ1Y2tldHM6IFRoZSBudW1iZXIgb2YgYnVja2V0cy5cbiAqIEByZXR1cm4gQSBUZW5zb3Igb2YgdGhlIHNhbWUgc2hhcGUgYXMgdGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTdHJpbmcnfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0hhc2hCdWNrZXRGYXN0XyhcbiAgICBpbnB1dDogVGVuc29yfFRlbnNvckxpa2UsIG51bUJ1Y2tldHM6IG51bWJlcik6IFRlbnNvciB7XG4gIGNvbnN0ICRpbnB1dCA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IoaW5wdXQsICdpbnB1dCcsICdzdHJpbmdUb0hhc2hCdWNrZXRGYXN0JywgJ3N0cmluZycpO1xuICBjb25zdCBhdHRyczogU3RyaW5nVG9IYXNoQnVja2V0RmFzdEF0dHJzID0ge251bUJ1Y2tldHN9O1xuXG4gIGlmIChudW1CdWNrZXRzIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE51bWJlciBvZiBidWNrZXRzIG11c3QgYmUgYXQgbGVhc3QgMWApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0SW5wdXRzID0ge2lucHV0OiAkaW5wdXR9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTdHJpbmdUb0hhc2hCdWNrZXRGYXN0LCBpbnB1dHMgYXMge30sIGF0dHJzIGFzIHt9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3N0cmluZ1RvSGFzaEJ1Y2tldEZhc3RffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { OptimizerConstructors } from './optimizers/optimizer_constructors';\nexport const train = OptimizerConstructors;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL3RyYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcHRpbWl6ZXJDb25zdHJ1Y3RvcnN9IGZyb20gJy4vb3B0aW1pemVycy9vcHRpbWl6ZXJfY29uc3RydWN0b3JzJztcblxuZXhwb3J0IGNvbnN0IHRyYWluID0gT3B0aW1pemVyQ29uc3RydWN0b3JzO1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nconst delayCallback = (() => {\n if (typeof requestAnimationFrame !== 'undefined') {\n return requestAnimationFrame;\n }\n else if (typeof setImmediate !== 'undefined') {\n return setImmediate;\n }\n return (f) => f(); // no delays\n})();\n/**\n * Returns a promise that resolves when a requestAnimationFrame has completed.\n *\n * On Node.js this uses setImmediate instead of requestAnimationFrame.\n *\n * This is simply a sugar method so that users can do the following:\n * `await tf.nextFrame();`\n *\n * @doc {heading: 'Performance', subheading: 'Timing'}\n */\nfunction nextFrame() {\n return new Promise(resolve => delayCallback(() => resolve()));\n}\nexport { nextFrame };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlcl91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9icm93c2VyX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsTUFBTSxhQUFhLEdBQWEsQ0FBQyxHQUFHLEVBQUU7SUFDcEMsSUFBSSxPQUFPLHFCQUFxQixLQUFLLFdBQVcsRUFBRTtRQUNoRCxPQUFPLHFCQUFxQixDQUFDO0tBQzlCO1NBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDOUMsT0FBTyxZQUFZLENBQUM7S0FDckI7SUFDRCxPQUFPLENBQUMsQ0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFFLFlBQVk7QUFDNUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsU0FBUztJQUNoQixPQUFPLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5jb25zdCBkZWxheUNhbGxiYWNrOiBGdW5jdGlvbiA9ICgoKSA9PiB7XG4gIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG4gIHJldHVybiAoZjogRnVuY3Rpb24pID0+IGYoKTsgIC8vIG5vIGRlbGF5c1xufSkoKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaGFzIGNvbXBsZXRlZC5cbiAqXG4gKiBPbiBOb2RlLmpzIHRoaXMgdXNlcyBzZXRJbW1lZGlhdGUgaW5zdGVhZCBvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG4gKlxuICogVGhpcyBpcyBzaW1wbHkgYSBzdWdhciBtZXRob2Qgc28gdGhhdCB1c2VycyBjYW4gZG8gdGhlIGZvbGxvd2luZzpcbiAqIGBhd2FpdCB0Zi5uZXh0RnJhbWUoKTtgXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1BlcmZvcm1hbmNlJywgc3ViaGVhZGluZzogJ1RpbWluZyd9XG4gKi9cbmZ1bmN0aW9uIG5leHRGcmFtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gZGVsYXlDYWxsYmFjaygoKSA9PiByZXNvbHZlKCkpKTtcbn1cblxuZXhwb3J0IHtuZXh0RnJhbWV9O1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\nexport function assertParamsConsistent(shapes, axis) {\n const rank = shapes[0].length;\n shapes.forEach((shape, i) => {\n util.assert(shape.length === rank, () => `Error in concat${rank}D: rank of tensors[${i}] must be the same ` +\n `as the rank of the rest (${rank})`);\n });\n util.assert(axis >= 0 && axis < rank, () => `Error in concat${rank}D: axis must be between 0 and ${rank - 1}.`);\n const firstShape = shapes[0];\n shapes.forEach((shape, i) => {\n for (let r = 0; r < rank; r++) {\n util.assert((r === axis) || (shape[r] === firstShape[r]), () => `Error in concat${rank}D: Shape of tensors[${i}] (${shape}) ` +\n `does not match the shape of the rest (${firstShape}) ` +\n `along the non-concatenated axis ${i}.`);\n }\n });\n}\nexport function computeOutShape(shapes, axis) {\n const outputShape = shapes[0].slice();\n for (let i = 1; i < shapes.length; i++) {\n outputShape[axis] += shapes[i][axis];\n }\n return outputShape;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9jb25jYXRfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBa0IsRUFBRSxJQUFZO0lBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQixJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUNyQixHQUFHLEVBQUUsQ0FDRCxrQkFBa0IsSUFBSSxzQkFBc0IsQ0FBQyxxQkFBcUI7WUFDbEUsNEJBQTRCLElBQUksR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksRUFDeEIsR0FBRyxFQUFFLENBQUMsa0JBQWtCLElBQUksaUNBQWlDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTlFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDNUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLElBQUksdUJBQXVCLENBQUMsTUFBTSxLQUFLLElBQUk7Z0JBQy9ELHlDQUF5QyxVQUFVLElBQUk7Z0JBQ3ZELG1DQUFtQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFrQixFQUFFLElBQVk7SUFDOUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEM7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UGFyYW1zQ29uc2lzdGVudChzaGFwZXM6IG51bWJlcltdW10sIGF4aXM6IG51bWJlcikge1xuICBjb25zdCByYW5rID0gc2hhcGVzWzBdLmxlbmd0aDtcbiAgc2hhcGVzLmZvckVhY2goKHNoYXBlLCBpKSA9PiB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHNoYXBlLmxlbmd0aCA9PT0gcmFuayxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGBFcnJvciBpbiBjb25jYXQke3Jhbmt9RDogcmFuayBvZiB0ZW5zb3JzWyR7aX1dIG11c3QgYmUgdGhlIHNhbWUgYCArXG4gICAgICAgICAgICBgYXMgdGhlIHJhbmsgb2YgdGhlIHJlc3QgKCR7cmFua30pYCk7XG4gIH0pO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYXhpcyA+PSAwICYmIGF4aXMgPCByYW5rLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbmNhdCR7cmFua31EOiBheGlzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAke3JhbmsgLSAxfS5gKTtcblxuICBjb25zdCBmaXJzdFNoYXBlID0gc2hhcGVzWzBdO1xuICBzaGFwZXMuZm9yRWFjaCgoc2hhcGUsIGkpID0+IHtcbiAgICBmb3IgKGxldCByID0gMDsgciA8IHJhbms7IHIrKykge1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgKHIgPT09IGF4aXMpIHx8IChzaGFwZVtyXSA9PT0gZmlyc3RTaGFwZVtyXSksXG4gICAgICAgICAgKCkgPT4gYEVycm9yIGluIGNvbmNhdCR7cmFua31EOiBTaGFwZSBvZiB0ZW5zb3JzWyR7aX1dICgke3NoYXBlfSkgYCArXG4gICAgICAgICAgICAgIGBkb2VzIG5vdCBtYXRjaCB0aGUgc2hhcGUgb2YgdGhlIHJlc3QgKCR7Zmlyc3RTaGFwZX0pIGAgK1xuICAgICAgICAgICAgICBgYWxvbmcgdGhlIG5vbi1jb25jYXRlbmF0ZWQgYXhpcyAke2l9LmApO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlT3V0U2hhcGUoc2hhcGVzOiBudW1iZXJbXVtdLCBheGlzOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gc2hhcGVzWzBdLnNsaWNlKCk7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgc2hhcGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0U2hhcGVbYXhpc10gKz0gc2hhcGVzW2ldW2F4aXNdO1xuICB9XG4gIHJldHVybiBvdXRwdXRTaGFwZTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport var RowPartitionType;\n(function (RowPartitionType) {\n RowPartitionType[RowPartitionType[\"FIRST_DIM_SIZE\"] = 0] = \"FIRST_DIM_SIZE\";\n RowPartitionType[RowPartitionType[\"VALUE_ROWIDS\"] = 1] = \"VALUE_ROWIDS\";\n RowPartitionType[RowPartitionType[\"ROW_LENGTHS\"] = 2] = \"ROW_LENGTHS\";\n RowPartitionType[RowPartitionType[\"ROW_SPLITS\"] = 3] = \"ROW_SPLITS\";\n RowPartitionType[RowPartitionType[\"ROW_LIMITS\"] = 4] = \"ROW_LIMITS\";\n RowPartitionType[RowPartitionType[\"ROW_STARTS\"] = 5] = \"ROW_STARTS\";\n})(RowPartitionType || (RowPartitionType = {}));\nexport function combineRaggedTensorToTensorShapes(raggedRank, shape, valueShape) {\n // Test for consistency of valueShape and shape specified.\n // If shape is unspecified and valueShape is specified, then copy\n // over the size from the valueShape dimension.\n let outputShape = new Array();\n if (valueShape == null && shape == null) {\n return outputShape;\n }\n if (shape == null) {\n // Here, value_shape must be of known size.\n while (outputShape.length < raggedRank + valueShape.length) {\n outputShape.push(-1);\n }\n }\n else {\n outputShape = shape.slice();\n }\n if (valueShape == null) {\n return outputShape;\n }\n // At this point, valueShape and output_shape have known ranks.\n if (raggedRank + valueShape.length !== outputShape.length) {\n throw new Error(`rt input.shape and shape=${shape} are incompatible: rt input.rank = ${raggedRank +\n valueShape.length}, but shape.rank = ${outputShape.length}`);\n }\n for (let i = 1; i < valueShape.length; ++i) {\n const valueDim = valueShape[i];\n const outputShapeDimIndex = outputShape[outputShape.length - valueShape.length + i];\n const outputShapeDim = outputShape[outputShapeDimIndex];\n if (valueDim >= 0) {\n if (outputShapeDim >= 0) {\n if (outputShapeDim !== valueDim) {\n throw new Error(`rt input.shape and shape=${shape} are incompatible: rt input.shape[${i + raggedRank}] = ${valueDim} but shape[${i + raggedRank}] = ${outputShapeDim}`);\n }\n }\n else {\n outputShape[outputShapeDimIndex] = valueDim;\n }\n }\n }\n return outputShape;\n}\nexport function getRowPartitionTypesHelper(rowPartitionTypeStrings) {\n const stringToType = {\n 'FIRST_DIM_SIZE': RowPartitionType.FIRST_DIM_SIZE,\n 'VALUE_ROWIDS': RowPartitionType.VALUE_ROWIDS,\n 'ROW_LENGTHS': RowPartitionType.ROW_LENGTHS,\n 'ROW_SPLITS': RowPartitionType.ROW_SPLITS,\n 'ROW_LIMITS': RowPartitionType.ROW_LIMITS,\n 'ROW_STARTS': RowPartitionType.ROW_STARTS\n };\n const result = [];\n for (const typeStr of rowPartitionTypeStrings) {\n if (typeStr in stringToType) {\n result.push(stringToType[typeStr]);\n }\n else {\n break;\n }\n }\n return result;\n}\nexport function getRaggedRank(rowPartitionTypes) {\n if (rowPartitionTypes.length === 0) {\n return 0;\n }\n if (rowPartitionTypes[0] === RowPartitionType.FIRST_DIM_SIZE) {\n return rowPartitionTypes.length - 1;\n }\n return rowPartitionTypes.length;\n}\nexport function validateDefaultValueShape(defaultValueShape, valueShape) {\n if (defaultValueShape == null || valueShape == null) {\n return;\n }\n const defaultNDims = defaultValueShape.length;\n const valuesNDims = valueShape.length;\n if (defaultNDims >= valuesNDims) {\n throw new Error(`defaultValue.shape=${defaultValueShape} and ragged tensor flatValues.shape=${valueShape}, are incompatible: defaultValue.rank = ${defaultNDims} must be less than ragged tensor input flatValues.rank = ${valuesNDims})`);\n }\n for (let i = 0; i < Math.min(defaultNDims, valuesNDims - 1); ++i) {\n const defaultDim = defaultValueShape[i];\n const valueDim = valueShape[i + 1];\n if (defaultDim >= 0 && valueDim >= 0 && defaultDim !== 1 &&\n defaultDim !== valueDim) {\n throw new Error(`defaultValue.shape=${defaultValueShape}, and ragged tensor input flatValues.shape=${valueShape} are incompatible: defaultValue.shape[${i - defaultValueShape.length}] = ${defaultDim} but ragged tensor input.flatValues.shape[${i - defaultValueShape.length}] = ${valueDim}`);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX3RvX2RlbnNlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yYWdnZWRfdG9fZGVuc2VfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLENBQU4sSUFBWSxnQkFPWDtBQVBELFdBQVksZ0JBQWdCO0lBQzFCLDJFQUFjLENBQUE7SUFDZCx1RUFBWSxDQUFBO0lBQ1oscUVBQVcsQ0FBQTtJQUNYLG1FQUFVLENBQUE7SUFDVixtRUFBVSxDQUFBO0lBQ1YsbUVBQVUsQ0FBQTtBQUNaLENBQUMsRUFQVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTzNCO0FBRUQsTUFBTSxVQUFVLGlDQUFpQyxDQUM3QyxVQUFrQixFQUFFLEtBQWUsRUFBRSxVQUFvQjtJQUMzRCwwREFBMEQ7SUFDMUQsaUVBQWlFO0lBQ2pFLCtDQUErQztJQUUvQyxJQUFJLFdBQVcsR0FBYSxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3hDLElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ3ZDLE9BQU8sV0FBVyxDQUFDO0tBQ3BCO0lBRUQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLDJDQUEyQztRQUMzQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDMUQsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO0tBQ0Y7U0FBTTtRQUNMLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDN0I7SUFDRCxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDdEIsT0FBTyxXQUFXLENBQUM7S0FDcEI7SUFDRCwrREFBK0Q7SUFDL0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sS0FBSyxX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QUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksVUFBVSxLQUFLLENBQUM7WUFDcEQsVUFBVSxLQUFLLFFBQVEsRUFBRTtZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUNaLGlCQUFpQiw4Q0FDakIsVUFBVSx5Q0FDVixDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxPQUM1QixVQUFVLDZDQUNWLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLE9BQU8sUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNwRDtLQUNGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuZXhwb3J0IGVudW0gUm93UGFydGl0aW9uVHlwZSB7XG4gIEZJUlNUX0RJTV9TSVpFLFxuICBWQUxVRV9ST1dJRFMsXG4gIFJPV19MRU5HVEhTLFxuICBST1dfU1BMSVRTLFxuICBST1dfTElNSVRTLFxuICBST1dfU1RBUlRTXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUmFnZ2VkVGVuc29yVG9UZW5zb3JTaGFwZXMoXG4gICAgcmFnZ2VkUmFuazogbnVtYmVyLCBzaGFwZTogbnVtYmVyW10sIHZhbHVlU2hhcGU6IG51bWJlcltdKSB7XG4gIC8vIFRlc3QgZm9yIGNvbnNpc3RlbmN5IG9mIHZhbHVlU2hhcGUgYW5kIHNoYXBlIHNwZWNpZmllZC5cbiAgLy8gSWYgc2hhcGUgaXMgdW5zcGVjaWZpZWQgYW5kIHZhbHVlU2hhcGUgaXMgc3BlY2lmaWVkLCB0aGVuIGNvcHlcbiAgLy8gb3ZlciB0aGUgc2l6ZSBmcm9tIHRoZSB2YWx1ZVNoYXBlIGRpbWVuc2lvbi5cblxuICBsZXQgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gbmV3IEFycmF5KCk7XG4gIGlmICh2YWx1ZVNoYXBlID09IG51bGwgJiYgc2hhcGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBvdXRwdXRTaGFwZTtcbiAgfVxuXG4gIGlmIChzaGFwZSA9PSBudWxsKSB7XG4gICAgLy8gSGVyZSwgdmFsdWVfc2hhcGUgbXVzdCBiZSBvZiBrbm93biBzaXplLlxuICAgIHdoaWxlIChvdXRwdXRTaGFwZS5sZW5ndGggPCByYWdnZWRSYW5rICsgdmFsdWVTaGFwZS5sZW5ndGgpIHtcbiAgICAgIG91dHB1dFNoYXBlLnB1c2goLTEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXRwdXRTaGFwZSA9IHNoYXBlLnNsaWNlKCk7XG4gIH1cbiAgaWYgKHZhbHVlU2hhcGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBvdXRwdXRTaGFwZTtcbiAgfVxuICAvLyBBdCB0aGlzIHBvaW50LCB2YWx1ZVNoYXBlIGFuZCBvdXRwdXRfc2hhcGUgaGF2ZSBrbm93biByYW5rcy5cbiAgaWYgKHJhZ2dlZFJhbmsgKyB2YWx1ZVNoYXBlLmxlbmd0aCAhPT0gb3V0cHV0U2hhcGUubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcnQgaW5wdXQuc2hhcGUgYW5kIHNoYXBlPSR7c2hhcGV9IGFyZSBpbmNvbXBhdGlibGU6IHJ0IGlucHV0LnJhbmsgPSAke1xuICAgICAgICAgICAgcmFnZ2VkUmFuayArXG4gICAgICAgICAgICB2YWx1ZVNoYXBlLmxlbmd0aH0sIGJ1dCBzaGFwZS5yYW5rID0gJHtvdXRwdXRTaGFwZS5sZW5ndGh9YCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IHZhbHVlU2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCB2YWx1ZURpbSA9IHZhbHVlU2hhcGVbaV07XG4gICAgY29uc3Qgb3V0cHV0U2hhcGVEaW1JbmRleCA9XG4gICAgICAgIG91dHB1dFNoYXBlW291dHB1dFNoYXBlLmxlbmd0aCAtIHZhbHVlU2hhcGUubGVuZ3RoICsgaV07XG4gICAgY29uc3Qgb3V0cHV0U2hhcGVEaW0gPSBvdXRwdXRTaGFwZVtvdXRwdXRTaGFwZURpbUluZGV4XTtcblxuICAgIGlmICh2YWx1ZURpbSA+PSAwKSB7XG4gICAgICBpZiAob3V0cHV0U2hhcGVEaW0gPj0gMCkge1xuICAgICAgICBpZiAob3V0cHV0U2hhcGVEaW0gIT09IHZhbHVlRGltKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBydCBpbnB1dC5zaGFwZSBhbmQgc2hhcGU9JHtcbiAgICAgICAgICAgICAgc2hhcGV9IGFyZSBpbmNvbXBhdGlibGU6IHJ0IGlucHV0LnNoYXBlWyR7aSArIHJhZ2dlZFJhbmt9XSA9ICR7XG4gICAgICAgICAgICAgIHZhbHVlRGltfSBidXQgc2hhcGVbJHtpICsgcmFnZ2VkUmFua31dID0gJHtvdXRwdXRTaGFwZURpbX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0U2hhcGVbb3V0cHV0U2hhcGVEaW1JbmRleF0gPSB2YWx1ZURpbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFNoYXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93UGFydGl0aW9uVHlwZXNIZWxwZXIocm93UGFydGl0aW9uVHlwZVN0cmluZ3M6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IHN0cmluZ1RvVHlwZSA9IHtcbiAgICAnRklSU1RfRElNX1NJWkUnOiBSb3dQYXJ0aXRpb25UeXBlLkZJUlNUX0RJTV9TSVpFLFxuICAgICdWQUxVRV9ST1dJRFMnOiBSb3dQYXJ0aXRpb25UeXBlLlZBTFVFX1JPV0lEUyxcbiAgICAnUk9XX0xFTkdUSFMnOiBSb3dQYXJ0aXRpb25UeXBlLlJPV19MRU5HVEhTLFxuICAgICdST1dfU1BMSVRTJzogUm93UGFydGl0aW9uVHlwZS5ST1dfU1BMSVRTLFxuICAgICdST1dfTElNSVRTJzogUm93UGFydGl0aW9uVHlwZS5ST1dfTElNSVRTLFxuICAgICdST1dfU1RBUlRTJzogUm93UGFydGl0aW9uVHlwZS5ST1dfU1RBUlRTXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0OiBSb3dQYXJ0aXRpb25UeXBlW10gPSBbXTtcbiAgZm9yIChjb25zdCB0eXBlU3RyIG9mIHJvd1BhcnRpdGlvblR5cGVTdHJpbmdzKSB7XG4gICAgaWYgKHR5cGVTdHIgaW4gc3RyaW5nVG9UeXBlKSB7XG4gICAgICByZXN1bHQucHVzaChzdHJpbmdUb1R5cGVbdHlwZVN0ciBhcyBrZXlvZiB0eXBlb2Ygc3RyaW5nVG9UeXBlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYWdnZWRSYW5rKHJvd1BhcnRpdGlvblR5cGVzOiBSb3dQYXJ0aXRpb25UeXBlW10pIHtcbiAgaWYgKHJvd1BhcnRpdGlvblR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChyb3dQYXJ0aXRpb25UeXBlc1swXSA9PT0gUm93UGFydGl0aW9uVHlwZS5GSVJTVF9ESU1fU0laRSkge1xuICAgIHJldHVybiByb3dQYXJ0aXRpb25UeXBlcy5sZW5ndGggLSAxO1xuICB9XG4gIHJldHVybiByb3dQYXJ0aXRpb25UeXBlcy5sZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZURlZmF1bHRWYWx1ZVNoYXBlKFxuICAgIGRlZmF1bHRWYWx1ZVNoYXBlOiBudW1iZXJbXSwgdmFsdWVTaGFwZTogbnVtYmVyW10pIHtcbiAgaWYgKGRlZmF1bHRWYWx1ZVNoYXBlID09IG51bGwgfHwgdmFsdWVTaGFwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdE5EaW1zID0gZGVmYXVsdFZhbHVlU2hhcGUubGVuZ3RoO1xuICBjb25zdCB2YWx1ZXNORGltcyA9IHZhbHVlU2hhcGUubGVuZ3RoO1xuICBpZiAoZGVmYXVsdE5EaW1zID49IHZhbHVlc05EaW1zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWZhdWx0VmFsdWUuc2hhcGU9JHtcbiAgICAgICAgZGVmYXVsdFZhbHVlU2hhcGV9IGFuZCByYWdnZWQgdGVuc29yIGZsYXRWYWx1ZXMuc2hhcGU9JHtcbiAgICAgICAgdmFsdWVTaGFwZX0sIGFyZSBpbmNvbXBhdGlibGU6IGRlZmF1bHRWYWx1ZS5yYW5rID0gJHtcbiAgICAgICAgZGVmYXVsdE5EaW1zfSBtdXN0IGJlIGxlc3MgdGhhbiByYWdnZWQgdGVuc29yIGlucHV0IGZsYXRWYWx1ZXMucmFuayA9ICR7XG4gICAgICAgIHZhbHVlc05EaW1zfSlgKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGRlZmF1bHRORGltcywgdmFsdWVzTkRpbXMgLSAxKTsgKytpKSB7XG4gICAgY29uc3QgZGVmYXVsdERpbSA9IGRlZmF1bHRWYWx1ZVNoYXBlW2ldO1xuICAgIGNvbnN0IHZhbHVlRGltID0gdmFsdWVTaGFwZVtpICsgMV07XG4gICAgaWYgKGRlZmF1bHREaW0gPj0gMCAmJiB2YWx1ZURpbSA+PSAwICYmIGRlZmF1bHREaW0gIT09IDEgJiZcbiAgICAgICAgZGVmYXVsdERpbSAhPT0gdmFsdWVEaW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZGVmYXVsdFZhbHVlLnNoYXBlPSR7XG4gICAgICAgICAgZGVmYXVsdFZhbHVlU2hhcGV9LCBhbmQgcmFnZ2VkIHRlbnNvciBpbnB1dCBmbGF0VmFsdWVzLnNoYXBlPSR7XG4gICAgICAgICAgdmFsdWVTaGFwZX0gYXJlIGluY29tcGF0aWJsZTogZGVmYXVsdFZhbHVlLnNoYXBlWyR7XG4gICAgICAgICAgaSAtIGRlZmF1bHRWYWx1ZVNoYXBlLmxlbmd0aH1dID0gJHtcbiAgICAgICAgICBkZWZhdWx0RGltfSBidXQgcmFnZ2VkIHRlbnNvciBpbnB1dC5mbGF0VmFsdWVzLnNoYXBlWyR7XG4gICAgICAgICAgaSAtIGRlZmF1bHRWYWx1ZVNoYXBlLmxlbmd0aH1dID0gJHt2YWx1ZURpbX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Inputs of size above this threshold will be parallelized by calling multiple\n * shader programs.\n */\nimport { nearestDivisor } from '../util';\nexport const PARALLELIZE_THRESHOLD = 30;\nexport function computeOptimalWindowSize(inSize) {\n if (inSize <= PARALLELIZE_THRESHOLD) {\n return inSize;\n }\n return nearestDivisor(inSize, Math.floor(Math.sqrt(inSize)));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yZWR1Y2VfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7O0dBR0c7QUFDSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQVN4QyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsTUFBYztJQUNyRCxJQUFJLE1BQU0sSUFBSSxxQkFBcUIsRUFBRTtRQUNuQyxPQUFPLE1BQU0sQ0FBQztLQUNmO0lBQ0QsT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBJbnB1dHMgb2Ygc2l6ZSBhYm92ZSB0aGlzIHRocmVzaG9sZCB3aWxsIGJlIHBhcmFsbGVsaXplZCBieSBjYWxsaW5nIG11bHRpcGxlXG4gKiBzaGFkZXIgcHJvZ3JhbXMuXG4gKi9cbmltcG9ydCB7bmVhcmVzdERpdmlzb3J9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgY29uc3QgUEFSQUxMRUxJWkVfVEhSRVNIT0xEID0gMzA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkdWNlSW5mbyB7XG4gIHdpbmRvd1NpemU6IG51bWJlcjtcbiAgYmF0Y2hTaXplOiBudW1iZXI7XG4gIGluU2l6ZTogbnVtYmVyO1xuICBvdXRTaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlT3B0aW1hbFdpbmRvd1NpemUoaW5TaXplOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoaW5TaXplIDw9IFBBUkFMTEVMSVpFX1RIUkVTSE9MRCkge1xuICAgIHJldHVybiBpblNpemU7XG4gIH1cbiAgcmV0dXJuIG5lYXJlc3REaXZpc29yKGluU2l6ZSwgTWF0aC5mbG9vcihNYXRoLnNxcnQoaW5TaXplKSkpO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Returns the image center in pixels.\nexport function getImageCenter(center, imageHeight, imageWidth) {\n const centerX = imageWidth * (typeof center === 'number' ? center : center[0]);\n const centerY = imageHeight * (typeof center === 'number' ? center : center[1]);\n return [centerX, centerY];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yb3RhdGVfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxzQ0FBc0M7QUFDdEMsTUFBTSxVQUFVLGNBQWMsQ0FDMUIsTUFBK0IsRUFBRSxXQUFtQixFQUNwRCxVQUFrQjtJQUNwQixNQUFNLE9BQU8sR0FDVCxVQUFVLEdBQUcsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQ1QsV0FBVyxHQUFHLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gUmV0dXJucyB0aGUgaW1hZ2UgY2VudGVyIGluIHBpeGVscy5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZUNlbnRlcihcbiAgICBjZW50ZXI6IG51bWJlcnxbbnVtYmVyLCBudW1iZXJdLCBpbWFnZUhlaWdodDogbnVtYmVyLFxuICAgIGltYWdlV2lkdGg6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBjZW50ZXJYID1cbiAgICAgIGltYWdlV2lkdGggKiAodHlwZW9mIGNlbnRlciA9PT0gJ251bWJlcicgPyBjZW50ZXIgOiBjZW50ZXJbMF0pO1xuICBjb25zdCBjZW50ZXJZID1cbiAgICAgIGltYWdlSGVpZ2h0ICogKHR5cGVvZiBjZW50ZXIgPT09ICdudW1iZXInID8gY2VudGVyIDogY2VudGVyWzFdKTtcbiAgcmV0dXJuIFtjZW50ZXJYLCBjZW50ZXJZXTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Gets the new shape of the input Tensor after it's been reshaped\n * to:\n * [blockShape[0], ..., blockShape[M-1], batch / prod(blockShape),\n * inputShape[1], ..., inputShape[N-1]]\n *\n * See step 1: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getReshaped(inputShape, blockShape, prod, batchToSpace = true) {\n let reshaped = [];\n if (batchToSpace) {\n reshaped = reshaped.concat(blockShape.slice(0));\n reshaped.push(inputShape[0] / prod);\n reshaped = reshaped.concat(inputShape.slice(1));\n }\n else {\n reshaped = reshaped.concat(inputShape[0]);\n const spatialLength = blockShape.length;\n for (let i = 0; i < spatialLength; ++i) {\n reshaped =\n reshaped.concat([inputShape[i + 1] / blockShape[i], blockShape[i]]);\n }\n reshaped = reshaped.concat(inputShape.slice(spatialLength + 1));\n }\n return reshaped;\n}\n/**\n * Gets the permutation that will transpose the dimensions of the\n * reshaped tensor to shape:\n *\n * [batch / prod(block_shape),inputShape[1], blockShape[0], ...,\n * inputShape[M], blockShape[M-1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * see step 2: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getPermuted(reshapedRank, blockShapeRank, batchToSpace = true) {\n const permuted = [];\n if (batchToSpace) {\n permuted.push(blockShapeRank);\n for (let i = blockShapeRank + 1; i < reshapedRank; ++i) {\n if (i <= 2 * blockShapeRank) {\n permuted.push(i);\n permuted.push(i - (blockShapeRank + 1));\n }\n else {\n permuted.push(i);\n }\n }\n }\n else {\n const permutedBeforeBatch = [];\n const permutedAfterBatch = [];\n for (let i = 1; i < reshapedRank; ++i) {\n if (i >= blockShapeRank * 2 + 1 || i % 2 === 1) {\n permutedAfterBatch.push(i);\n }\n else {\n permutedBeforeBatch.push(i);\n }\n }\n permuted.push(...permutedBeforeBatch);\n permuted.push(0);\n permuted.push(...permutedAfterBatch);\n }\n return permuted;\n}\n/**\n * Gets the shape of the reshaped and permuted input Tensor before any cropping\n * is applied. The new shape will be:\n *\n * [batch / prod(blockShape),inputShape[1] * blockShape[0], ...,\n * inputShape[M] * blockShape[M-1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * See step 3: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getReshapedPermuted(inputShape, blockShape, prod, batchToSpace = true) {\n const reshapedPermuted = [];\n if (batchToSpace) {\n reshapedPermuted.push(inputShape[0] / prod);\n }\n else {\n reshapedPermuted.push(inputShape[0] * prod);\n }\n for (let i = 1; i < inputShape.length; ++i) {\n if (i <= blockShape.length) {\n if (batchToSpace) {\n reshapedPermuted.push(blockShape[i - 1] * inputShape[i]);\n }\n else {\n reshapedPermuted.push(inputShape[i] / blockShape[i - 1]);\n }\n }\n else {\n reshapedPermuted.push(inputShape[i]);\n }\n }\n return reshapedPermuted;\n}\n/**\n * Converts the crops argument into the beginning coordinates of a slice\n * operation.\n */\nexport function getSliceBeginCoords(crops, blockShape) {\n const sliceBeginCoords = [0];\n for (let i = 0; i < blockShape; ++i) {\n sliceBeginCoords.push(crops[i][0]);\n }\n return sliceBeginCoords;\n}\n/**\n * Converts the crops argument into the size of a slice operation. When\n * combined with getSliceBeginCoords this function allows the reshaped and\n * permuted Tensor to be cropped to its final output shape of:\n *\n * inputShape[1] * blockShape[0] - crops[0,0] - crops[0,1], ...,\n * inputShape[M] * blockShape[M-1] -crops[M-1,0] -\n * crops[M-1,1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * See step 4: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getSliceSize(uncroppedShape, crops, blockShape) {\n const sliceSize = uncroppedShape.slice(0, 1);\n for (let i = 0; i < blockShape; ++i) {\n sliceSize.push(uncroppedShape[i + 1] - crops[i][0] - crops[i][1]);\n }\n return sliceSize;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfb3BzX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hcnJheV9vcHNfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDdkIsVUFBb0IsRUFBRSxVQUFvQixFQUFFLElBQVksRUFDeEQsWUFBWSxHQUFHLElBQUk7SUFDckIsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBQzVCLElBQUksWUFBWSxFQUFFO1FBQ2hCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNwQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakQ7U0FBTTtRQUNMLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUN0QyxRQUFRO2dCQUNKLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO1FBQ0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFB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TyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUMvQixLQUFpQixFQUFFLFVBQWtCO0lBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ25DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwQztJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUN4QixjQUF3QixFQUFFLEtBQWlCLEVBQUUsVUFBa0I7SUFDakUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25FO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXcgc2hhcGUgb2YgdGhlIGlucHV0IFRlbnNvciBhZnRlciBpdCdzIGJlZW4gcmVzaGFwZWRcbiAqIHRvOlxuICogW2Jsb2NrU2hhcGVbMF0sIC4uLiwgYmxvY2tTaGFwZVtNLTFdLCBiYXRjaCAvIHByb2QoYmxvY2tTaGFwZSksXG4gKiBpbnB1dFNoYXBlWzFdLCAuLi4sIGlucHV0U2hhcGVbTi0xXV1cbiAqXG4gKiBTZWUgc3RlcCAxOiBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvYmF0Y2hfdG9fc3BhY2VfbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc2hhcGVkKFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLCBibG9ja1NoYXBlOiBudW1iZXJbXSwgcHJvZDogbnVtYmVyLFxuICAgIGJhdGNoVG9TcGFjZSA9IHRydWUpOiBudW1iZXJbXSB7XG4gIGxldCByZXNoYXBlZDogbnVtYmVyW10gPSBbXTtcbiAgaWYgKGJhdGNoVG9TcGFjZSkge1xuICAgIHJlc2hhcGVkID0gcmVzaGFwZWQuY29uY2F0KGJsb2NrU2hhcGUuc2xpY2UoMCkpO1xuICAgIHJlc2hhcGVkLnB1c2goaW5wdXRTaGFwZVswXSAvIHByb2QpO1xuICAgIHJlc2hhcGVkID0gcmVzaGFwZWQuY29uY2F0KGlucHV0U2hhcGUuc2xpY2UoMSkpO1xuICB9IGVsc2Uge1xuICAgIHJlc2hhcGVkID0gcmVzaGFwZWQuY29uY2F0KGlucHV0U2hhcGVbMF0pO1xuICAgIGNvbnN0IHNwYXRpYWxMZW5ndGggPSBibG9ja1NoYXBlLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwYXRpYWxMZW5ndGg7ICsraSkge1xuICAgICAgcmVzaGFwZWQgPVxuICAgICAgICAgIHJlc2hhcGVkLmNvbmNhdChbaW5wdXRTaGFwZVtpICsgMV0gLyBibG9ja1NoYXBlW2ldLCBibG9ja1NoYXBlW2ldXSk7XG4gICAgfVxuICAgIHJlc2hhcGVkID0gcmVzaGFwZWQuY29uY2F0KGlucHV0U2hhcGUuc2xpY2Uoc3BhdGlhbExlbmd0aCArIDEpKTtcbiAgfVxuICByZXR1cm4gcmVzaGFwZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcGVybXV0YXRpb24gdGhhdCB3aWxsIHRyYW5zcG9zZSB0aGUgZGltZW5zaW9ucyBvZiB0aGVcbiAqIHJlc2hhcGVkIHRlbnNvciB0byBzaGFwZTpcbiAqXG4gKiBbYmF0Y2ggLyBwcm9kKGJsb2NrX3NoYXBlKSxpbnB1dFNoYXBlWzFdLCBibG9ja1NoYXBlWzBdLCAuLi4sXG4gKiBpbnB1dFNoYXBlW01dLCBibG9ja1NoYXBlW00tMV0saW5wdXRTaGFwZVtNKzFdLCAuLi4sIGlucHV0U2hhcGVbTi0xXV1cbiAqXG4gKiBzZWUgc3RlcCAyOiBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvYmF0Y2hfdG9fc3BhY2VfbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcm11dGVkKFxuICAgIHJlc2hhcGVkUmFuazogbnVtYmVyLCBibG9ja1NoYXBlUmFuazogbnVtYmVyLFxuICAgIGJhdGNoVG9TcGFjZSA9IHRydWUpOiBudW1iZXJbXSB7XG4gIGNvbnN0IHBlcm11dGVkID0gW107XG4gIGlmIChiYXRjaFRvU3BhY2UpIHtcbiAgICBwZXJtdXRlZC5wdXNoKGJsb2NrU2hhcGVSYW5rKTtcbiAgICBmb3IgKGxldCBpID0gYmxvY2tTaGFwZVJhbmsgKyAxOyBpIDwgcmVzaGFwZWRSYW5rOyArK2kpIHtcbiAgICAgIGlmIChpIDw9IDIgKiBibG9ja1NoYXBlUmFuaykge1xuICAgICAgICBwZXJtdXRlZC5wdXNoKGkpO1xuICAgICAgICBwZXJtdXRlZC5wdXNoKGkgLSAoYmxvY2tTaGFwZVJhbmsgKyAxKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZXJtdXRlZC5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwZXJtdXRlZEJlZm9yZUJhdGNoID0gW107XG4gICAgY29uc3QgcGVybXV0ZWRBZnRlckJhdGNoID0gW107XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCByZXNoYXBlZFJhbms7ICsraSkge1xuICAgICAgaWYgKGkgPj0gYmxvY2tTaGFwZVJhbmsgKiAyICsgMSB8fCBpICUgMiA9PT0gMSkge1xuICAgICAgICBwZXJtdXRlZEFmdGVyQmF0Y2gucHVzaChpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlcm11dGVkQmVmb3JlQmF0Y2gucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGVybXV0ZWQucHVzaCguLi5wZXJtdXRlZEJlZm9yZUJhdGNoKTtcbiAgICBwZXJtdXRlZC5wdXNoKDApO1xuICAgIHBlcm11dGVkLnB1c2goLi4ucGVybXV0ZWRBZnRlckJhdGNoKTtcbiAgfVxuICByZXR1cm4gcGVybXV0ZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc2hhcGUgb2YgdGhlIHJlc2hhcGVkIGFuZCBwZXJtdXRlZCBpbnB1dCBUZW5zb3IgYmVmb3JlIGFueSBjcm9wcGluZ1xuICogaXMgYXBwbGllZC4gIFRoZSBuZXcgc2hhcGUgd2lsbCBiZTpcbiAqXG4gKiBbYmF0Y2ggLyBwcm9kKGJsb2NrU2hhcGUpLGlucHV0U2hhcGVbMV0gKiBibG9ja1NoYXBlWzBdLCAuLi4sXG4gKiBpbnB1dFNoYXBlW01dICogYmxvY2tTaGFwZVtNLTFdLGlucHV0U2hhcGVbTSsxXSwgLi4uLCBpbnB1dFNoYXBlW04tMV1dXG4gKlxuICogU2VlIHN0ZXAgMzogaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2JhdGNoX3RvX3NwYWNlX25kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNoYXBlZFBlcm11dGVkKFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLCBibG9ja1NoYXBlOiBudW1iZXJbXSwgcHJvZDogbnVtYmVyLFxuICAgIGJhdGNoVG9TcGFjZSA9IHRydWUpOiBudW1iZXJbXSB7XG4gIGNvbnN0IHJlc2hhcGVkUGVybXV0ZWQgPSBbXTtcblxuICBpZiAoYmF0Y2hUb1NwYWNlKSB7XG4gICAgcmVzaGFwZWRQZXJtdXRlZC5wdXNoKGlucHV0U2hhcGVbMF0gLyBwcm9kKTtcbiAgfSBlbHNlIHtcbiAgICByZXNoYXBlZFBlcm11dGVkLnB1c2goaW5wdXRTaGFwZVswXSAqIHByb2QpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBpbnB1dFNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPD0gYmxvY2tTaGFwZS5sZW5ndGgpIHtcbiAgICAgIGlmIChiYXRjaFRvU3BhY2UpIHtcbiAgICAgICAgcmVzaGFwZWRQZXJtdXRlZC5wdXNoKGJsb2NrU2hhcGVbaSAtIDFdICogaW5wdXRTaGFwZVtpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNoYXBlZFBlcm11dGVkLnB1c2goaW5wdXRTaGFwZVtpXSAvIGJsb2NrU2hhcGVbaSAtIDFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzaGFwZWRQZXJtdXRlZC5wdXNoKGlucHV0U2hhcGVbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNoYXBlZFBlcm11dGVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjcm9wcyBhcmd1bWVudCBpbnRvIHRoZSBiZWdpbm5pbmcgY29vcmRpbmF0ZXMgb2YgYSBzbGljZVxuICogb3BlcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2xpY2VCZWdpbkNvb3JkcyhcbiAgICBjcm9wczogbnVtYmVyW11bXSwgYmxvY2tTaGFwZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICBjb25zdCBzbGljZUJlZ2luQ29vcmRzID0gWzBdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2NrU2hhcGU7ICsraSkge1xuICAgIHNsaWNlQmVnaW5Db29yZHMucHVzaChjcm9wc1tpXVswXSk7XG4gIH1cbiAgcmV0dXJuIHNsaWNlQmVnaW5Db29yZHM7XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNyb3BzIGFyZ3VtZW50IGludG8gdGhlIHNpemUgb2YgYSBzbGljZSBvcGVyYXRpb24uICBXaGVuXG4gKiBjb21iaW5lZCB3aXRoIGdldFNsaWNlQmVnaW5Db29yZHMgdGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHJlc2hhcGVkIGFuZFxuICogcGVybXV0ZWQgVGVuc29yIHRvIGJlIGNyb3BwZWQgdG8gaXRzIGZpbmFsIG91dHB1dCBzaGFwZSBvZjpcbiAqXG4gKiBpbnB1dFNoYXBlWzFdICogYmxvY2tTaGFwZVswXSAtIGNyb3BzWzAsMF0gLSBjcm9wc1swLDFdLCAuLi4sXG4gKiBpbnB1dFNoYXBlW01dICogYmxvY2tTaGFwZVtNLTFdIC1jcm9wc1tNLTEsMF0gLVxuICogY3JvcHNbTS0xLDFdLGlucHV0U2hhcGVbTSsxXSwgLi4uLCBpbnB1dFNoYXBlW04tMV1dXG4gKlxuICogU2VlIHN0ZXAgNDogaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2JhdGNoX3RvX3NwYWNlX25kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbGljZVNpemUoXG4gICAgdW5jcm9wcGVkU2hhcGU6IG51bWJlcltdLCBjcm9wczogbnVtYmVyW11bXSwgYmxvY2tTaGFwZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICBjb25zdCBzbGljZVNpemUgPSB1bmNyb3BwZWRTaGFwZS5zbGljZSgwLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9ja1NoYXBlOyArK2kpIHtcbiAgICBzbGljZVNpemUucHVzaCh1bmNyb3BwZWRTaGFwZVtpICsgMV0gLSBjcm9wc1tpXVswXSAtIGNyb3BzW2ldWzFdKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZVNpemU7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const SELU_SCALEALPHA = 1.7580993408473768599402175208123;\nexport const SELU_SCALE = 1.0507009873554804934193349852946;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsdV91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2VsdV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxpQ0FBaUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmV4cG9ydCBjb25zdCBTRUxVX1NDQUxFQUxQSEEgPSAxLjc1ODA5OTM0MDg0NzM3Njg1OTk0MDIxNzUyMDgxMjM7XG5leHBvcnQgY29uc3QgU0VMVV9TQ0FMRSA9IDEuMDUwNzAwOTg3MzU1NDgwNDkzNDE5MzM0OTg1Mjk0NjtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const ERF_P = 0.3275911;\nexport const ERF_A1 = 0.254829592;\nexport const ERF_A2 = -0.284496736;\nexport const ERF_A3 = 1.421413741;\nexport const ERF_A4 = -1.453152027;\nexport const ERF_A5 = 1.061405429;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJmX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9lcmZfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmV4cG9ydCBjb25zdCBFUkZfUCA9IDAuMzI3NTkxMTtcbmV4cG9ydCBjb25zdCBFUkZfQTEgPSAwLjI1NDgyOTU5MjtcbmV4cG9ydCBjb25zdCBFUkZfQTIgPSAtMC4yODQ0OTY3MzY7XG5leHBvcnQgY29uc3QgRVJGX0EzID0gMS40MjE0MTM3NDE7XG5leHBvcnQgY29uc3QgRVJGX0E0ID0gLTEuNDUzMTUyMDI3O1xuZXhwb3J0IGNvbnN0IEVSRl9BNSA9IDEuMDYxNDA1NDI5O1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Merges real and imaginary Float32Arrays into a single complex Float32Array.\n *\n * The memory layout is interleaved as follows:\n * real: [r0, r1, r2]\n * imag: [i0, i1, i2]\n * complex: [r0, i0, r1, i1, r2, i2]\n *\n * This is the inverse of splitRealAndImagArrays.\n *\n * @param real The real values of the complex tensor values.\n * @param imag The imag values of the complex tensor values.\n * @returns A complex tensor as a Float32Array with merged values.\n */\nexport function mergeRealAndImagArrays(real, imag) {\n if (real.length !== imag.length) {\n throw new Error(`Cannot merge real and imag arrays of different lengths. real:` +\n `${real.length}, imag: ${imag.length}.`);\n }\n const result = new Float32Array(real.length * 2);\n for (let i = 0; i < result.length; i += 2) {\n result[i] = real[i / 2];\n result[i + 1] = imag[i / 2];\n }\n return result;\n}\n/**\n * Splits a complex Float32Array into real and imag parts.\n *\n * The memory layout is interleaved as follows:\n * complex: [r0, i0, r1, i1, r2, i2]\n * real: [r0, r1, r2]\n * imag: [i0, i1, i2]\n *\n * This is the inverse of mergeRealAndImagArrays.\n *\n * @param complex The complex tensor values.\n * @returns An object with real and imag Float32Array components of the complex\n * tensor.\n */\nexport function splitRealAndImagArrays(complex) {\n const real = new Float32Array(complex.length / 2);\n const imag = new Float32Array(complex.length / 2);\n for (let i = 0; i < complex.length; i += 2) {\n real[i / 2] = complex[i];\n imag[i / 2] = complex[i + 1];\n }\n return { real, imag };\n}\n/**\n * Extracts even indexed complex values in the given array.\n * @param complex The complex tensor values\n */\nexport function complexWithEvenIndex(complex) {\n const len = Math.ceil(complex.length / 4);\n const real = new Float32Array(len);\n const imag = new Float32Array(len);\n for (let i = 0; i < complex.length; i += 4) {\n real[Math.floor(i / 4)] = complex[i];\n imag[Math.floor(i / 4)] = complex[i + 1];\n }\n return { real, imag };\n}\n/**\n * Extracts odd indexed comple values in the given array.\n * @param complex The complex tensor values\n */\nexport function complexWithOddIndex(complex) {\n const len = Math.floor(complex.length / 4);\n const real = new Float32Array(len);\n const imag = new Float32Array(len);\n for (let i = 2; i < complex.length; i += 4) {\n real[Math.floor(i / 4)] = complex[i];\n imag[Math.floor(i / 4)] = complex[i + 1];\n }\n return { real, imag };\n}\n/**\n * Get the map representing a complex value in the given array.\n * @param complex The complex tensor values.\n * @param index An index of the target complex value.\n */\nexport function getComplexWithIndex(complex, index) {\n const real = complex[index * 2];\n const imag = complex[index * 2 + 1];\n return { real, imag };\n}\n/**\n * Insert a given complex value into the TypedArray.\n * @param data The array in which the complex value is inserted.\n * @param c The complex value to be inserted.\n * @param index An index of the target complex value.\n */\nexport function assignToTypedArray(data, real, imag, index) {\n data[index * 2] = real;\n data[index * 2 + 1] = imag;\n}\n/**\n * Make the list of exponent terms used by FFT.\n */\nexport function exponents(n, inverse) {\n const real = new Float32Array(n / 2);\n const imag = new Float32Array(n / 2);\n for (let i = 0; i < Math.ceil(n / 2); i++) {\n const x = (inverse ? 2 : -2) * Math.PI * (i / n);\n real[i] = Math.cos(x);\n imag[i] = Math.sin(x);\n }\n return { real, imag };\n}\n/**\n * Make the exponent term used by FFT.\n */\nexport function exponent(k, n, inverse) {\n const x = (inverse ? 2 : -2) * Math.PI * (k / n);\n const real = Math.cos(x);\n const imag = Math.sin(x);\n return { real, imag };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9iYWNrZW5kcy9jb21wbGV4X3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0g7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDbEMsSUFBa0IsRUFBRSxJQUFrQjtJQUN4QyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUNYLCtEQUErRDtZQUMvRCxHQUFHLElBQUksQ0FBQyxNQUFNLFdBQVcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDOUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBcUI7SUFFMUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFB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LENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1R5cGVkQXJyYXl9IGZyb20gJy4uL3R5cGVzJztcbi8qKlxuICogTWVyZ2VzIHJlYWwgYW5kIGltYWdpbmFyeSBGbG9hdDMyQXJyYXlzIGludG8gYSBzaW5nbGUgY29tcGxleCBGbG9hdDMyQXJyYXkuXG4gKlxuICogVGhlIG1lbW9yeSBsYXlvdXQgaXMgaW50ZXJsZWF2ZWQgYXMgZm9sbG93czpcbiAqIHJlYWw6IFtyMCwgcjEsIHIyXVxuICogaW1hZzogW2kwLCBpMSwgaTJdXG4gKiBjb21wbGV4OiBbcjAsIGkwLCByMSwgaTEsIHIyLCBpMl1cbiAqXG4gKiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIHNwbGl0UmVhbEFuZEltYWdBcnJheXMuXG4gKlxuICogQHBhcmFtIHJlYWwgVGhlIHJlYWwgdmFsdWVzIG9mIHRoZSBjb21wbGV4IHRlbnNvciB2YWx1ZXMuXG4gKiBAcGFyYW0gaW1hZyBUaGUgaW1hZyB2YWx1ZXMgb2YgdGhlIGNvbXBsZXggdGVuc29yIHZhbHVlcy5cbiAqIEByZXR1cm5zIEEgY29tcGxleCB0ZW5zb3IgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCBtZXJnZWQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhcbiAgICByZWFsOiBGbG9hdDMyQXJyYXksIGltYWc6IEZsb2F0MzJBcnJheSk6IEZsb2F0MzJBcnJheSB7XG4gIGlmIChyZWFsLmxlbmd0aCAhPT0gaW1hZy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgbWVyZ2UgcmVhbCBhbmQgaW1hZyBhcnJheXMgb2YgZGlmZmVyZW50IGxlbmd0aHMuIHJlYWw6YCArXG4gICAgICAgIGAke3JlYWwubGVuZ3RofSwgaW1hZzogJHtpbWFnLmxlbmd0aH0uYCk7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gbmV3IEZsb2F0MzJBcnJheShyZWFsLmxlbmd0aCAqIDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlc3VsdFtpXSA9IHJlYWxbaSAvIDJdO1xuICAgIHJlc3VsdFtpICsgMV0gPSBpbWFnW2kgLyAyXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGNvbXBsZXggRmxvYXQzMkFycmF5IGludG8gcmVhbCBhbmQgaW1hZyBwYXJ0cy5cbiAqXG4gKiBUaGUgbWVtb3J5IGxheW91dCBpcyBpbnRlcmxlYXZlZCBhcyBmb2xsb3dzOlxuICogY29tcGxleDogW3IwLCBpMCwgcjEsIGkxLCByMiwgaTJdXG4gKiByZWFsOiBbcjAsIHIxLCByMl1cbiAqIGltYWc6IFtpMCwgaTEsIGkyXVxuICpcbiAqIFRoaXMgaXMgdGhlIGludmVyc2Ugb2YgbWVyZ2VSZWFsQW5kSW1hZ0FycmF5cy5cbiAqXG4gKiBAcGFyYW0gY29tcGxleCBUaGUgY29tcGxleCB0ZW5zb3IgdmFsdWVzLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggcmVhbCBhbmQgaW1hZyBGbG9hdDMyQXJyYXkgY29tcG9uZW50cyBvZiB0aGUgY29tcGxleFxuICogICAgIHRlbnNvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UmVhbEFuZEltYWdBcnJheXMoY29tcGxleDogRmxvYXQzMkFycmF5KTpcbiAgICB7cmVhbDogRmxvYXQzMkFycmF5LCBpbWFnOiBGbG9hdDMyQXJyYXl9IHtcbiAgY29uc3QgcmVhbCA9IG5ldyBGbG9hdDMyQXJyYXkoY29tcGxleC5sZW5ndGggLyAyKTtcbiAgY29uc3QgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkoY29tcGxleC5sZW5ndGggLyAyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wbGV4Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVhbFtpIC8gMl0gPSBjb21wbGV4W2ldO1xuICAgIGltYWdbaSAvIDJdID0gY29tcGxleFtpICsgMV07XG4gIH1cbiAgcmV0dXJuIHtyZWFsLCBpbWFnfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBldmVuIGluZGV4ZWQgY29tcGxleCB2YWx1ZXMgaW4gdGhlIGdpdmVuIGFycmF5LlxuICogQHBhcmFtIGNvbXBsZXggVGhlIGNvbXBsZXggdGVuc29yIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleFdpdGhFdmVuSW5kZXgoY29tcGxleDogRmxvYXQzMkFycmF5KTpcbiAgICB7cmVhbDogRmxvYXQzMkFycmF5LCBpbWFnOiBGbG9hdDMyQXJyYXl9IHtcbiAgY29uc3QgbGVuID0gTWF0aC5jZWlsKGNvbXBsZXgubGVuZ3RoIC8gNCk7XG4gIGNvbnN0IHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XG4gIGNvbnN0IGltYWcgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcGxleC5sZW5ndGg7IGkgKz0gNCkge1xuICAgIHJlYWxbTWF0aC5mbG9vcihpIC8gNCldID0gY29tcGxleFtpXTtcbiAgICBpbWFnW01hdGguZmxvb3IoaSAvIDQpXSA9IGNvbXBsZXhbaSArIDFdO1xuICB9XG4gIHJldHVybiB7cmVhbCwgaW1hZ307XG59XG5cbi8qKlxuICogRXh0cmFjdHMgb2RkIGluZGV4ZWQgY29tcGxlIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gYXJyYXkuXG4gKiBAcGFyYW0gY29tcGxleCBUaGUgY29tcGxleCB0ZW5zb3IgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4V2l0aE9kZEluZGV4KGNvbXBsZXg6IEZsb2F0MzJBcnJheSk6XG4gICAge3JlYWw6IEZsb2F0MzJBcnJheSwgaW1hZzogRmxvYXQzMkFycmF5fSB7XG4gIGNvbnN0IGxlbiA9IE1hdGguZmxvb3IoY29tcGxleC5sZW5ndGggLyA0KTtcbiAgY29uc3QgcmVhbCA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcbiAgY29uc3QgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBjb21wbGV4Lmxlbmd0aDsgaSArPSA0KSB7XG4gICAgcmVhbFtNYXRoLmZsb29yKGkgLyA0KV0gPSBjb21wbGV4W2ldO1xuICAgIGltYWdbTWF0aC5mbG9vcihpIC8gNCldID0gY29tcGxleFtpICsgMV07XG4gIH1cbiAgcmV0dXJuIHtyZWFsLCBpbWFnfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1hcCByZXByZXNlbnRpbmcgYSBjb21wbGV4IHZhbHVlIGluIHRoZSBnaXZlbiBhcnJheS5cbiAqIEBwYXJhbSBjb21wbGV4IFRoZSBjb21wbGV4IHRlbnNvciB2YWx1ZXMuXG4gKiBAcGFyYW0gaW5kZXggQW4gaW5kZXggb2YgdGhlIHRhcmdldCBjb21wbGV4IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcGxleFdpdGhJbmRleChcbiAgICBjb21wbGV4OiBGbG9hdDMyQXJyYXksIGluZGV4OiBudW1iZXIpOiB7cmVhbDogbnVtYmVyLCBpbWFnOiBudW1iZXJ9IHtcbiAgY29uc3QgcmVhbCA9IGNvbXBsZXhbaW5kZXggKiAyXTtcbiAgY29uc3QgaW1hZyA9IGNvbXBsZXhbaW5kZXggKiAyICsgMV07XG4gIHJldHVybiB7cmVhbCwgaW1hZ307XG59XG5cbi8qKlxuICogSW5zZXJ0IGEgZ2l2ZW4gY29tcGxleCB2YWx1ZSBpbnRvIHRoZSBUeXBlZEFycmF5LlxuICogQHBhcmFtIGRhdGEgVGhlIGFycmF5IGluIHdoaWNoIHRoZSBjb21wbGV4IHZhbHVlIGlzIGluc2VydGVkLlxuICogQHBhcmFtIGMgVGhlIGNvbXBsZXggdmFsdWUgdG8gYmUgaW5zZXJ0ZWQuXG4gKiBAcGFyYW0gaW5kZXggQW4gaW5kZXggb2YgdGhlIHRhcmdldCBjb21wbGV4IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduVG9UeXBlZEFycmF5KFxuICAgIGRhdGE6IFR5cGVkQXJyYXksIHJlYWw6IG51bWJlciwgaW1hZzogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XG4gIGRhdGFbaW5kZXggKiAyXSA9IHJlYWw7XG4gIGRhdGFbaW5kZXggKiAyICsgMV0gPSBpbWFnO1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIGxpc3Qgb2YgZXhwb25lbnQgdGVybXMgdXNlZCBieSBGRlQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvbmVudHMoXG4gICAgbjogbnVtYmVyLCBpbnZlcnNlOiBib29sZWFuKToge3JlYWw6IEZsb2F0MzJBcnJheSwgaW1hZzogRmxvYXQzMkFycmF5fSB7XG4gIGNvbnN0IHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KG4gLyAyKTtcbiAgY29uc3QgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkobiAvIDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGguY2VpbChuIC8gMik7IGkrKykge1xuICAgIGNvbnN0IHggPSAoaW52ZXJzZSA/IDIgOiAtMikgKiBNYXRoLlBJICogKGkgLyBuKTtcbiAgICByZWFsW2ldID0gTWF0aC5jb3MoeCk7XG4gICAgaW1hZ1tpXSA9IE1hdGguc2luKHgpO1xuICB9XG4gIHJldHVybiB7cmVhbCwgaW1hZ307XG59XG5cbi8qKlxuICogTWFrZSB0aGUgZXhwb25lbnQgdGVybSB1c2VkIGJ5IEZGVC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9uZW50KFxuICAgIGs6IG51bWJlciwgbjogbnVtYmVyLCBpbnZlcnNlOiBib29sZWFuKToge3JlYWw6IG51bWJlciwgaW1hZzogbnVtYmVyfSB7XG4gIGNvbnN0IHggPSAoaW52ZXJzZSA/IDIgOiAtMikgKiBNYXRoLlBJICogKGsgLyBuKTtcbiAgY29uc3QgcmVhbCA9IE1hdGguY29zKHgpO1xuICBjb25zdCBpbWFnID0gTWF0aC5zaW4oeCk7XG4gIHJldHVybiB7cmVhbCwgaW1hZ307XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from '../util_base';\nconst ARROW = '->';\nconst ARROW_REGEX = /->/g;\nconst COMMA = ',';\nconst ELLIPSIS = '...';\n/**\n * Parse an equation for einsum.\n *\n * @param equation The einsum equation (e.g., \"ij,jk->ik\").\n * @param numTensors Number of tensors provided along with `equation`. Used to\n * check matching number of input tensors.\n * @returns An object consisting of the following fields:\n * - allDims: all dimension names as strings.\n * - summedDims: a list of all dimensions being summed over, as indices to\n * the elements of `allDims`.\n * - idDims: indices of the dimensions in each input tensor, as indices to\n * the elements of `allDims.\n */\nexport function decodeEinsumEquation(equation, numTensors) {\n equation = equation.replace(/\\s/g, ''); // Remove witespace in equation.\n const numArrows = (equation.length - equation.replace(ARROW_REGEX, '').length) /\n ARROW.length;\n if (numArrows < 1) {\n throw new Error('Equations without an arrow are not supported.');\n }\n else if (numArrows > 1) {\n throw new Error(`Equation must contain exactly one arrow (\"${ARROW}\").`);\n }\n const [inputString, outputString] = equation.split(ARROW);\n assert(inputString.indexOf(ELLIPSIS) === -1, () => `The ellipsis notation (\"${ELLIPSIS}\") is not supported yet.`);\n const inputTerms = inputString.split(COMMA);\n const numInputs = inputTerms.length;\n if (numTensors !== numInputs) {\n throw new Error(`Expected ${numInputs} input tensors, received ${numTensors}`);\n }\n if (numInputs > 2) {\n throw new Error('Support for more than 2 input tensors is not implemented yet.');\n }\n const allDims = [];\n for (let i = 0; i < outputString.length; ++i) {\n const dimName = outputString[i];\n if (!inputTerms.some(inputTerm => inputTerm.indexOf(dimName) !== -1)) {\n throw new Error(`Output subscripts contain the label ${dimName} ` +\n `not present in the input subscripts.`);\n }\n if (allDims.indexOf(dimName) === -1) {\n allDims.push(dimName);\n }\n }\n for (let i = 0; i < inputString.length; ++i) {\n const dimName = inputString[i];\n if (allDims.indexOf(dimName) === -1 && dimName !== COMMA) {\n allDims.push(dimName);\n }\n }\n const idDims = new Array(inputTerms.length);\n for (let i = 0; i < numInputs; ++i) {\n if (new Set(inputTerms[i].split('')).size !== inputTerms[i].length) {\n throw new Error(`Found duplicate axes in input component ${inputTerms[i]}. ` +\n `Support for duplicate axes in input is not implemented yet.`);\n }\n idDims[i] = [];\n for (let j = 0; j < inputTerms[i].length; ++j) {\n idDims[i].push(allDims.indexOf(inputTerms[i][j]));\n }\n }\n const numDims = allDims.length; // Number of unique dimensions.\n const numOutDims = outputString.length; // Number of output dimensions.\n const summedDims = []; // Dimensions being summed over.\n for (let i = numOutDims; i < numDims; ++i) {\n summedDims.push(i);\n }\n return { allDims, summedDims, idDims };\n}\n/**\n * Get the permutation for a given input tensor.\n *\n * @param nDims Total number of dimension of all tensors involved in the einsum\n * operation.\n * @param idDims Dimension indices involve in the tensor in question.\n * @returns An object consisting of the following fields:\n * - permutationIndices: Indices to permute the axes of the tensor with.\n * - expandDims: Indices to the dimension that need to be expanded from the\n * tensor after permutation.\n */\nexport function getEinsumPermutation(nDims, idDims) {\n let permutationIndices = new Array(nDims);\n permutationIndices.fill(-1);\n for (let i = 0; i < idDims.length; ++i) {\n permutationIndices[idDims[i]] = i;\n }\n const expandDims = [];\n for (let i = 0; i < nDims; ++i) {\n if (permutationIndices[i] === -1) {\n expandDims.push(i);\n }\n }\n permutationIndices = permutationIndices.filter(d => d !== -1);\n return { permutationIndices, expandDims };\n}\n/**\n * Checks that the dimension sizes from different input tensors match the\n * equation.\n */\nexport function checkEinsumDimSizes(nDims, idDims, tensors) {\n const dimSizes = new Array(nDims);\n for (let i = 0; i < tensors.length; ++i) {\n const shape = tensors[i].shape;\n for (let j = 0; j < idDims[i].length; ++j) {\n if (dimSizes[idDims[i][j]] === undefined) {\n dimSizes[idDims[i][j]] = shape[j];\n }\n else {\n assert(dimSizes[idDims[i][j]] === shape[j], () => `Expected dimension ${dimSizes[idDims[i][j]]} at axis ${j} ` +\n `of input shaped ${JSON.stringify(shape)}, ` +\n `but got dimension ${shape[j]}`);\n }\n }\n }\n}\n/**\n * Gets path of computation for einsum.\n *\n * @param summedDims indices to the dimensions being summed over.\n * @param idDims A look up table for the dimensions present in each input\n * tensor. Each consituent array contains indices for the dimensions in the\n * corresponding input tensor.\n *\n * @return A map with two fields:\n * - path: The path of computation, with each element indicating the dimension\n * being summed over after the element-wise multiplication in that step.\n * - steps: With the same length as `path`. Each element contains the indices\n * to the input tensors being used for element-wise multiplication in the\n * corresponding step.\n */\nexport function getEinsumComputePath(summedDims, idDims) {\n const path = summedDims;\n const steps = [];\n let nSteps = 0;\n if (summedDims.length === 0) {\n // Einsum that involes no summing: e.g., transpose and outer product.\n path.push(-1);\n }\n nSteps = summedDims.length + 1;\n for (let i = 0; i < nSteps; ++i) {\n steps.push([]);\n }\n const computedTermIndices = [];\n for (let i = 0; i < path.length; ++i) {\n const summedDim = path[i];\n const termIndices = findTermsWithDim(idDims, summedDim);\n for (const termIndex of termIndices) {\n if (computedTermIndices.indexOf(termIndex) === -1) {\n steps[i].push(termIndex);\n computedTermIndices.push(termIndex);\n }\n }\n }\n return { path, steps };\n}\n/** Determines if an axes permutation is the identity permutation. */\nexport function isIdentityPermutation(perm) {\n return perm.every((dim, index) => dim === index);\n}\nfunction findTermsWithDim(idDims, dim) {\n const termIndices = [];\n for (let i = 0; i < idDims.length; ++i) {\n if (idDims[i].length === 0 || idDims[i].indexOf(dim) !== -1 || dim === -1) {\n termIndices.push(i);\n }\n }\n return termIndices;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWluc3VtX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2JhY2tlbmRzL2VpbnN1bV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQVFILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ25CLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztBQUMxQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBRXZCOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLFVBQWtCO0lBS3ZFLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFFLGdDQUFnQztJQUN6RSxNQUFNLFNBQVMsR0FDWCxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzVELEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztLQUNsRTtTQUFNLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxLQUFLLEtBQUssQ0FBQyxDQUFDO0tBQzFFO0lBQ0QsTUFBTSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELE1BQU0sQ0FDRixXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMs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Q0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLE1BQWtCLEVBQUUsR0FBVztJQUN2RCxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN6RSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO0tBQ0Y7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBjb21wdXRpbmcgZWluc3VtICh0ZW5zb3IgY29udHJhY3Rpb24gYW5kIHN1bW1hdGlvblxuICogYmFzZWQgb24gRWluc3RlaW4gc3VtbWF0aW9uLilcbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5jb25zdCBBUlJPVyA9ICctPic7XG5jb25zdCBBUlJPV19SRUdFWCA9IC8tPi9nO1xuY29uc3QgQ09NTUEgPSAnLCc7XG5jb25zdCBFTExJUFNJUyA9ICcuLi4nO1xuXG4vKipcbiAqIFBhcnNlIGFuIGVxdWF0aW9uIGZvciBlaW5zdW0uXG4gKlxuICogQHBhcmFtIGVxdWF0aW9uIFRoZSBlaW5zdW0gZXF1YXRpb24gKGUuZy4sIFwiaWosamstPmlrXCIpLlxuICogQHBhcmFtIG51bVRlbnNvcnMgTnVtYmVyIG9mIHRlbnNvcnMgcHJvdmlkZWQgYWxvbmcgd2l0aCBgZXF1YXRpb25gLiBVc2VkIHRvXG4gKiAgIGNoZWNrIG1hdGNoaW5nIG51bWJlciBvZiBpbnB1dCB0ZW5zb3JzLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6XG4gKiAgIC0gYWxsRGltczogYWxsIGRpbWVuc2lvbiBuYW1lcyBhcyBzdHJpbmdzLlxuICogICAtIHN1bW1lZERpbXM6IGEgbGlzdCBvZiBhbGwgZGltZW5zaW9ucyBiZWluZyBzdW1tZWQgb3ZlciwgYXMgaW5kaWNlcyB0b1xuICogICAgIHRoZSBlbGVtZW50cyBvZiBgYWxsRGltc2AuXG4gKiAgIC0gaWREaW1zOiBpbmRpY2VzIG9mIHRoZSBkaW1lbnNpb25zIGluIGVhY2ggaW5wdXQgdGVuc29yLCBhcyBpbmRpY2VzIHRvXG4gKiAgICAgdGhlIGVsZW1lbnRzIG9mIGBhbGxEaW1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRWluc3VtRXF1YXRpb24oZXF1YXRpb246IHN0cmluZywgbnVtVGVuc29yczogbnVtYmVyKToge1xuICBhbGxEaW1zOiBzdHJpbmdbXSxcbiAgc3VtbWVkRGltczogbnVtYmVyW10sXG4gIGlkRGltczogbnVtYmVyW11bXSxcbn0ge1xuICBlcXVhdGlvbiA9IGVxdWF0aW9uLnJlcGxhY2UoL1xccy9nLCAnJyk7ICAvLyBSZW1vdmUgd2l0ZXNwYWNlIGluIGVxdWF0aW9uLlxuICBjb25zdCBudW1BcnJvd3MgPVxuICAgICAgKGVxdWF0aW9uLmxlbmd0aCAtIGVxdWF0aW9uLnJlcGxhY2UoQVJST1dfUkVHRVgsICcnKS5sZW5ndGgpIC9cbiAgICAgIEFSUk9XLmxlbmd0aDtcbiAgaWYgKG51bUFycm93cyA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VxdWF0aW9ucyB3aXRob3V0IGFuIGFycm93IGFyZSBub3Qgc3VwcG9ydGVkLicpO1xuICB9IGVsc2UgaWYgKG51bUFycm93cyA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVxdWF0aW9uIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBhcnJvdyAoXCIke0FSUk9XfVwiKS5gKTtcbiAgfVxuICBjb25zdCBbaW5wdXRTdHJpbmcsIG91dHB1dFN0cmluZ10gPSBlcXVhdGlvbi5zcGxpdChBUlJPVyk7XG4gIGFzc2VydChcbiAgICAgIGlucHV0U3RyaW5nLmluZGV4T2YoRUxMSVBTSVMpID09PSAtMSxcbiAgICAgICgpID0+IGBUaGUgZWxsaXBzaXMgbm90YXRpb24gKFwiJHtFTExJUFNJU31cIikgaXMgbm90IHN1cHBvcnRlZCB5ZXQuYCk7XG4gIGNvbnN0IGlucHV0VGVybXMgPSBpbnB1dFN0cmluZy5zcGxpdChDT01NQSk7XG4gIGNvbnN0IG51bUlucHV0cyA9IGlucHV0VGVybXMubGVuZ3RoO1xuICBpZiAobnVtVGVuc29ycyAhPT0gbnVtSW5wdXRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgJHtudW1JbnB1dHN9IGlucHV0IHRlbnNvcnMsIHJlY2VpdmVkICR7bnVtVGVuc29yc31gKTtcbiAgfVxuICBpZiAobnVtSW5wdXRzID4gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1N1cHBvcnQgZm9yIG1vcmUgdGhhbiAyIGlucHV0IHRlbnNvcnMgaXMgbm90IGltcGxlbWVudGVkIHlldC4nKTtcbiAgfVxuXG4gIGNvbnN0IGFsbERpbXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0U3RyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgZGltTmFtZSA9IG91dHB1dFN0cmluZ1tpXTtcbiAgICBpZiAoIWlucHV0VGVybXMuc29tZShpbnB1dFRlcm0gPT4gaW5wdXRUZXJtLmluZGV4T2YoZGltTmFtZSkgIT09IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBPdXRwdXQgc3Vic2NyaXB0cyBjb250YWluIHRoZSBsYWJlbCAke2RpbU5hbWV9IGAgK1xuICAgICAgICAgIGBub3QgcHJlc2VudCBpbiB0aGUgaW5wdXQgc3Vic2NyaXB0cy5gKTtcbiAgICB9XG4gICAgaWYgKGFsbERpbXMuaW5kZXhPZihkaW1OYW1lKSA9PT0gLTEpIHtcbiAgICAgIGFsbERpbXMucHVzaChkaW1OYW1lKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFN0cmluZy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGRpbU5hbWUgPSBpbnB1dFN0cmluZ1tpXTtcbiAgICBpZiAoYWxsRGltcy5pbmRleE9mKGRpbU5hbWUpID09PSAtMSAmJiBkaW1OYW1lICE9PSBDT01NQSkge1xuICAgICAgYWxsRGltcy5wdXNoKGRpbU5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlkRGltczogbnVtYmVyW11bXSA9IG5ldyBBcnJheTxudW1iZXJbXT4oaW5wdXRUZXJtcy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUlucHV0czsgKytpKSB7XG4gICAgaWYgKG5ldyBTZXQoaW5wdXRUZXJtc1tpXS5zcGxpdCgnJykpLnNpemUgIT09IGlucHV0VGVybXNbaV0ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZvdW5kIGR1cGxpY2F0ZSBheGVzIGluIGlucHV0IGNvbXBvbmVudCAke2lucHV0VGVybXNbaV19LiBgICtcbiAgICAgICAgICBgU3VwcG9ydCBmb3IgZHVwbGljYXRlIGF4ZXMgaW4gaW5wdXQgaXMgbm90IGltcGxlbWVudGVkIHlldC5gKTtcbiAgICB9XG4gICAgaWREaW1zW2ldID0gW107XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbnB1dFRlcm1zW2ldLmxlbmd0aDsgKytqKSB7XG4gICAgICBpZERpbXNbaV0ucHVzaChhbGxEaW1zLmluZGV4T2YoaW5wdXRUZXJtc1tpXVtqXSkpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG51bURpbXMgPSBhbGxEaW1zLmxlbmd0aDsgICAgICAgICAgLy8gTnVtYmVyIG9mIHVuaXF1ZSBkaW1lbnNpb25zLlxuICBjb25zdCBudW1PdXREaW1zID0gb3V0cHV0U3RyaW5nLmxlbmd0aDsgIC8vIE51bWJlciBvZiBvdXRwdXQgZGltZW5zaW9ucy5cbiAgY29uc3Qgc3VtbWVkRGltczogbnVtYmVyW10gPSBbXTsgICAgICAgICAvLyBEaW1lbnNpb25zIGJlaW5nIHN1bW1lZCBvdmVyLlxuICBmb3IgKGxldCBpID0gbnVtT3V0RGltczsgaSA8IG51bURpbXM7ICsraSkge1xuICAgIHN1bW1lZERpbXMucHVzaChpKTtcbiAgfVxuICByZXR1cm4ge2FsbERpbXMsIHN1bW1lZERpbXMsIGlkRGltc307XG59XG5cbi8qKlxuICogR2V0IHRoZSBwZXJtdXRhdGlvbiBmb3IgYSBnaXZlbiBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQHBhcmFtIG5EaW1zIFRvdGFsIG51bWJlciBvZiBkaW1lbnNpb24gb2YgYWxsIHRlbnNvcnMgaW52b2x2ZWQgaW4gdGhlIGVpbnN1bVxuICogICBvcGVyYXRpb24uXG4gKiBAcGFyYW0gaWREaW1zIERpbWVuc2lvbiBpbmRpY2VzIGludm9sdmUgaW4gdGhlIHRlbnNvciBpbiBxdWVzdGlvbi5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuICogICAtIHBlcm11dGF0aW9uSW5kaWNlczogSW5kaWNlcyB0byBwZXJtdXRlIHRoZSBheGVzIG9mIHRoZSB0ZW5zb3Igd2l0aC5cbiAqICAgLSBleHBhbmREaW1zOiBJbmRpY2VzIHRvIHRoZSBkaW1lbnNpb24gdGhhdCBuZWVkIHRvIGJlIGV4cGFuZGVkIGZyb20gdGhlXG4gKiAgICAgdGVuc29yIGFmdGVyIHBlcm11dGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWluc3VtUGVybXV0YXRpb24obkRpbXM6IG51bWJlciwgaWREaW1zOiBudW1iZXJbXSk6XG4gICAge3Blcm11dGF0aW9uSW5kaWNlczogbnVtYmVyW10sIGV4cGFuZERpbXM6IG51bWJlcltdfSB7XG4gIGxldCBwZXJtdXRhdGlvbkluZGljZXM6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4obkRpbXMpO1xuICBwZXJtdXRhdGlvbkluZGljZXMuZmlsbCgtMSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaWREaW1zLmxlbmd0aDsgKytpKSB7XG4gICAgcGVybXV0YXRpb25JbmRpY2VzW2lkRGltc1tpXV0gPSBpO1xuICB9XG4gIGNvbnN0IGV4cGFuZERpbXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbkRpbXM7ICsraSkge1xuICAgIGlmIChwZXJtdXRhdGlvbkluZGljZXNbaV0gPT09IC0xKSB7XG4gICAgICBleHBhbmREaW1zLnB1c2goaSk7XG4gICAgfVxuICB9XG4gIHBlcm11dGF0aW9uSW5kaWNlcyA9IHBlcm11dGF0aW9uSW5kaWNlcy5maWx0ZXIoZCA9PiBkICE9PSAtMSk7XG4gIHJldHVybiB7cGVybXV0YXRpb25JbmRpY2VzLCBleHBhbmREaW1zfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhhdCB0aGUgZGltZW5zaW9uIHNpemVzIGZyb20gZGlmZmVyZW50IGlucHV0IHRlbnNvcnMgbWF0Y2ggdGhlXG4gKiBlcXVhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrRWluc3VtRGltU2l6ZXMoXG4gICAgbkRpbXM6IG51bWJlciwgaWREaW1zOiBudW1iZXJbXVtdLCB0ZW5zb3JzOiBUZW5zb3JbXSkge1xuICBjb25zdCBkaW1TaXplczogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPihuRGltcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGVuc29ycy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IHNoYXBlOiBudW1iZXJbXSA9IHRlbnNvcnNbaV0uc2hhcGU7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBpZERpbXNbaV0ubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChkaW1TaXplc1tpZERpbXNbaV1bal1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGltU2l6ZXNbaWREaW1zW2ldW2pdXSA9IHNoYXBlW2pdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgZGltU2l6ZXNbaWREaW1zW2ldW2pdXSA9PT0gc2hhcGVbal0sXG4gICAgICAgICAgICAoKSA9PiBgRXhwZWN0ZWQgZGltZW5zaW9uICR7ZGltU2l6ZXNbaWREaW1zW2ldW2pdXX0gYXQgYXhpcyAke2p9IGAgK1xuICAgICAgICAgICAgICAgIGBvZiBpbnB1dCBzaGFwZWQgJHtKU09OLnN0cmluZ2lmeShzaGFwZSl9LCBgICtcbiAgICAgICAgICAgICAgICBgYnV0IGdvdCBkaW1lbnNpb24gJHtzaGFwZVtqXX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHBhdGggb2YgY29tcHV0YXRpb24gZm9yIGVpbnN1bS5cbiAqXG4gKiBAcGFyYW0gc3VtbWVkRGltcyBpbmRpY2VzIHRvIHRoZSBkaW1lbnNpb25zIGJlaW5nIHN1bW1lZCBvdmVyLlxuICogQHBhcmFtIGlkRGltcyBBIGxvb2sgdXAgdGFibGUgZm9yIHRoZSBkaW1lbnNpb25zIHByZXNlbnQgaW4gZWFjaCBpbnB1dFxuICogICAgIHRlbnNvci4gRWFjaCBjb25zaXR1ZW50IGFycmF5IGNvbnRhaW5zIGluZGljZXMgZm9yIHRoZSBkaW1lbnNpb25zIGluIHRoZVxuICogICAgIGNvcnJlc3BvbmRpbmcgaW5wdXQgdGVuc29yLlxuICpcbiAqIEByZXR1cm4gQSBtYXAgd2l0aCB0d28gZmllbGRzOlxuICogICAtIHBhdGg6IFRoZSBwYXRoIG9mIGNvbXB1dGF0aW9uLCB3aXRoIGVhY2ggZWxlbWVudCBpbmRpY2F0aW5nIHRoZSBkaW1lbnNpb25cbiAqICAgICBiZWluZyBzdW1tZWQgb3ZlciBhZnRlciB0aGUgZWxlbWVudC13aXNlIG11bHRpcGxpY2F0aW9uIGluIHRoYXQgc3RlcC5cbiAqICAgLSBzdGVwczogV2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgYHBhdGhgLiBFYWNoIGVsZW1lbnQgY29udGFpbnMgdGhlIGluZGljZXNcbiAqICAgICB0byB0aGUgaW5wdXQgdGVuc29ycyBiZWluZyB1c2VkIGZvciBlbGVtZW50LXdpc2UgbXVsdGlwbGljYXRpb24gaW4gdGhlXG4gKiAgICAgY29ycmVzcG9uZGluZyBzdGVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWluc3VtQ29tcHV0ZVBhdGgoc3VtbWVkRGltczogbnVtYmVyW10sIGlkRGltczogbnVtYmVyW11bXSk6XG4gICAge3BhdGg6IG51bWJlcltdLCBzdGVwczogbnVtYmVyW11bXX0ge1xuICBjb25zdCBwYXRoOiBudW1iZXJbXSA9IHN1bW1lZERpbXM7XG4gIGNvbnN0IHN0ZXBzOiBudW1iZXJbXVtdID0gW107XG4gIGxldCBuU3RlcHMgPSAwO1xuICBpZiAoc3VtbWVkRGltcy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBFaW5zdW0gdGhhdCBpbnZvbGVzIG5vIHN1bW1pbmc6IGUuZy4sIHRyYW5zcG9zZSBhbmQgb3V0ZXIgcHJvZHVjdC5cbiAgICBwYXRoLnB1c2goLTEpO1xuICB9XG4gIG5TdGVwcyA9IHN1bW1lZERpbXMubGVuZ3RoICsgMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuU3RlcHM7ICsraSkge1xuICAgIHN0ZXBzLnB1c2goW10pO1xuICB9XG4gIGNvbnN0IGNvbXB1dGVkVGVybUluZGljZXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IHN1bW1lZERpbSA9IHBhdGhbaV07XG4gICAgY29uc3QgdGVybUluZGljZXMgPSBmaW5kVGVybXNXaXRoRGltKGlkRGltcywgc3VtbWVkRGltKTtcbiAgICBmb3IgKGNvbnN0IHRlcm1JbmRleCBvZiB0ZXJtSW5kaWNlcykge1xuICAgICAgaWYgKGNvbXB1dGVkVGVybUluZGljZXMuaW5kZXhPZih0ZXJtSW5kZXgpID09PSAtMSkge1xuICAgICAgICBzdGVwc1tpXS5wdXNoKHRlcm1JbmRleCk7XG4gICAgICAgIGNvbXB1dGVkVGVybUluZGljZXMucHVzaCh0ZXJtSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge3BhdGgsIHN0ZXBzfTtcbn1cblxuLyoqIERldGVybWluZXMgaWYgYW4gYXhlcyBwZXJtdXRhdGlvbiBpcyB0aGUgaWRlbnRpdHkgcGVybXV0YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZGVudGl0eVBlcm11dGF0aW9uKHBlcm06IG51bWJlcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiBwZXJtLmV2ZXJ5KChkaW06IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gZGltID09PSBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRUZXJtc1dpdGhEaW0oaWREaW1zOiBudW1iZXJbXVtdLCBkaW06IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3QgdGVybUluZGljZXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaWREaW1zLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGlkRGltc1tpXS5sZW5ndGggPT09IDAgfHwgaWREaW1zW2ldLmluZGV4T2YoZGltKSAhPT0gLTEgfHwgZGltID09PSAtMSkge1xuICAgICAgdGVybUluZGljZXMucHVzaChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRlcm1JbmRpY2VzO1xufVxuIl19","import { assert } from '../util';\n/**\n * Prepare the split size array. When the input is a number, the axis is evenly\n * divided among the split size. When the input contains the negative value, the\n * rest of the axis is allocated toward that.\n */\nexport function prepareSplitSize(x, numOrSizeSplits, axis = 0) {\n let splitSizes = [];\n if (typeof (numOrSizeSplits) === 'number') {\n assert(x.shape[axis] % numOrSizeSplits === 0, () => 'Number of splits must evenly divide the axis.');\n splitSizes =\n new Array(numOrSizeSplits).fill(x.shape[axis] / numOrSizeSplits);\n }\n else {\n const numOfNegs = numOrSizeSplits.reduce((count, value) => {\n if (value === -1) {\n count += 1;\n }\n return count;\n }, 0);\n assert(numOfNegs <= 1, () => 'There should be only one negative value in split array.');\n const negIndex = numOrSizeSplits.indexOf(-1);\n // Allow the number of split array to be -1, which indicates the rest\n // of dimension is allocated to that split.\n if (negIndex !== -1) {\n const total = numOrSizeSplits.reduce((a, b) => b > 0 ? a + b : a);\n numOrSizeSplits[negIndex] = x.shape[axis] - total;\n }\n assert(x.shape[axis] === numOrSizeSplits.reduce((a, b) => a + b), () => 'The sum of sizes must match the size of the axis dimension.');\n splitSizes = numOrSizeSplits;\n }\n return splitSizes;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXRfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwbGl0X3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFL0I7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsQ0FBb0IsRUFBRSxlQUFnQyxFQUN0RCxJQUFJLEdBQUcsQ0FBQztJQUNWLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDekMsTUFBTSxDQUNGLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxLQUFLLENBQUMsRUFDckMsR0FBRyxFQUFFLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUMzRCxVQUFVO1lBQ04sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7S0FDdEU7U0FBTTtRQUNMLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssSUFBSSxDQUFDLENBQUM7YUFDWjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ04sTUFBTSxDQUNGLFNBQVMsSUFBSSxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMseURBQXlELENBQUMsQ0FBQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MscUVBQXFFO1FBQ3JFLDJDQUEyQztRQUMzQyxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNuQixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ25EO1FBQ0QsTUFBTSxDQUNGLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDekQsR0FBRyxFQUFFLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUN6RSxVQUFVLEdBQUcsZUFBZSxDQUFDO0tBQzlCO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7IFRlbnNvckluZm8gfSBmcm9tICcuLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiBQcmVwYXJlIHRoZSBzcGxpdCBzaXplIGFycmF5LiBXaGVuIHRoZSBpbnB1dCBpcyBhIG51bWJlciwgdGhlIGF4aXMgaXMgZXZlbmx5XG4gKiBkaXZpZGVkIGFtb25nIHRoZSBzcGxpdCBzaXplLiBXaGVuIHRoZSBpbnB1dCBjb250YWlucyB0aGUgbmVnYXRpdmUgdmFsdWUsIHRoZVxuICogcmVzdCBvZiB0aGUgYXhpcyBpcyBhbGxvY2F0ZWQgdG93YXJkIHRoYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3BsaXRTaXplKFxuICAgIHg6IFRlbnNvcnxUZW5zb3JJbmZvLCBudW1PclNpemVTcGxpdHM6IG51bWJlcltdfG51bWJlcixcbiAgICBheGlzID0gMCk6IG51bWJlcltdIHtcbiAgbGV0IHNwbGl0U2l6ZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiAobnVtT3JTaXplU3BsaXRzKSA9PT0gJ251bWJlcicpIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIHguc2hhcGVbYXhpc10gJSBudW1PclNpemVTcGxpdHMgPT09IDAsXG4gICAgICAgICgpID0+ICdOdW1iZXIgb2Ygc3BsaXRzIG11c3QgZXZlbmx5IGRpdmlkZSB0aGUgYXhpcy4nKTtcbiAgICBzcGxpdFNpemVzID1cbiAgICAgICAgbmV3IEFycmF5KG51bU9yU2l6ZVNwbGl0cykuZmlsbCh4LnNoYXBlW2F4aXNdIC8gbnVtT3JTaXplU3BsaXRzKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1PZk5lZ3MgPSBudW1PclNpemVTcGxpdHMucmVkdWNlKChjb3VudCwgdmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gLTEpIHtcbiAgICAgICAgY291bnQgKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LCAwKTtcbiAgICBhc3NlcnQoXG4gICAgICAgIG51bU9mTmVncyA8PSAxLFxuICAgICAgICAoKSA9PiAnVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIG5lZ2F0aXZlIHZhbHVlIGluIHNwbGl0IGFycmF5LicpO1xuICAgIGNvbnN0IG5lZ0luZGV4ID0gbnVtT3JTaXplU3BsaXRzLmluZGV4T2YoLTEpO1xuICAgIC8vIEFsbG93IHRoZSBudW1iZXIgb2Ygc3BsaXQgYXJyYXkgdG8gYmUgLTEsIHdoaWNoIGluZGljYXRlcyB0aGUgcmVzdFxuICAgIC8vIG9mIGRpbWVuc2lvbiBpcyBhbGxvY2F0ZWQgdG8gdGhhdCBzcGxpdC5cbiAgICBpZiAobmVnSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCB0b3RhbCA9IG51bU9yU2l6ZVNwbGl0cy5yZWR1Y2UoKGEsIGIpID0+IGIgPiAwID8gYSArIGIgOiBhKTtcbiAgICAgIG51bU9yU2l6ZVNwbGl0c1tuZWdJbmRleF0gPSB4LnNoYXBlW2F4aXNdIC0gdG90YWw7XG4gICAgfVxuICAgIGFzc2VydChcbiAgICAgICAgeC5zaGFwZVtheGlzXSA9PT0gbnVtT3JTaXplU3BsaXRzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpLFxuICAgICAgICAoKSA9PiAnVGhlIHN1bSBvZiBzaXplcyBtdXN0IG1hdGNoIHRoZSBzaXplIG9mIHRoZSBheGlzIGRpbWVuc2lvbi4nKTtcbiAgICBzcGxpdFNpemVzID0gbnVtT3JTaXplU3BsaXRzO1xuICB9XG5cbiAgcmV0dXJuIHNwbGl0U2l6ZXM7XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Generates sparse fill empty rows indices, dense shape mismatch error message.\n *\n * @param indicesLength The first dimension of indices.\n */\nexport function getSparseFillEmptyRowsIndicesDenseShapeMismatch(indicesLength) {\n return `Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${indicesLength}`;\n}\n/**\n * Generates sparse fill empty rows negative index error message.\n *\n * @param index The index with a negative value.\n * @param value The negative value.\n */\nexport function getSparseFillEmptyRowsNegativeIndexErrorMessage(index, value) {\n return `indices(${index}, 0) is invalid: ${value} < 0`;\n}\n/**\n * Generates sparse fill empty rows out of range index error message.\n *\n * @param index The index with an out of range value.\n * @param value The out of range value.\n * @param limit The upper limit for indices.\n */\nexport function getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(index, value, limit) {\n return `indices(${index}, 0) is invalid: ${value} >= ${limit}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX2ZpbGxfZW1wdHlfcm93c191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3BhcnNlL3NwYXJzZV9maWxsX2VtcHR5X3Jvd3NfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLCtDQUErQyxDQUMzRCxhQUFxQjtJQUN2QixPQUFPO3VCQUNjLGFBQWEsRUFBRSxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSwrQ0FBK0MsQ0FDM0QsS0FBYSxFQUFFLEtBQWE7SUFDOUIsT0FBTyxXQUFXLEtBQUssb0JBQW9CLEtBQUssTUFBTSxDQUFDO0FBQ3pELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaURBQWlELENBQzdELEtBQWEsRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUM3QyxPQUFPLFdBQVcsS0FBSyxvQkFBb0IsS0FBSyxPQUFPLEtBQUssRUFBRSxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSBmaWxsIGVtcHR5IHJvd3MgaW5kaWNlcywgZGVuc2Ugc2hhcGUgbWlzbWF0Y2ggZXJyb3IgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gaW5kaWNlc0xlbmd0aCBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIGluZGljZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VGaWxsRW1wdHlSb3dzSW5kaWNlc0RlbnNlU2hhcGVNaXNtYXRjaChcbiAgICBpbmRpY2VzTGVuZ3RoOiBudW1iZXIpIHtcbiAgcmV0dXJuIGBSZWNlaXZlZCBTcGFyc2VUZW5zb3Igd2l0aCBkZW5zZVNoYXBlWzBdID0gMCBidXRcbiAgaW5kaWNlcy5zaGFwZVswXSA9ICR7aW5kaWNlc0xlbmd0aH1gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2UgZmlsbCBlbXB0eSByb3dzIG5lZ2F0aXZlIGluZGV4IGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB3aXRoIGEgbmVnYXRpdmUgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG5lZ2F0aXZlIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BhcnNlRmlsbEVtcHR5Um93c05lZ2F0aXZlSW5kZXhFcnJvck1lc3NhZ2UoXG4gICAgaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuICByZXR1cm4gYGluZGljZXMoJHtpbmRleH0sIDApIGlzIGludmFsaWQ6ICR7dmFsdWV9IDwgMGA7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSBmaWxsIGVtcHR5IHJvd3Mgb3V0IG9mIHJhbmdlIGluZGV4IGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB3aXRoIGFuIG91dCBvZiByYW5nZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgb3V0IG9mIHJhbmdlIHZhbHVlLlxuICogQHBhcmFtIGxpbWl0IFRoZSB1cHBlciBsaW1pdCBmb3IgaW5kaWNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZUZpbGxFbXB0eVJvd3NPdXRPZlJhbmdlSW5kZXhFcnJvck1lc3NhZ2UoXG4gICAgaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlciwgbGltaXQ6IG51bWJlcikge1xuICByZXR1cm4gYGluZGljZXMoJHtpbmRleH0sIDApIGlzIGludmFsaWQ6ICR7dmFsdWV9ID49ICR7bGltaXR9YDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { sizeFromShape } from '../../util';\n/**\n * Generates sparse reshape multiple negative 1 output dimension error message.\n *\n * @param dim1 The first dimension with a negative 1 value.\n * @param dim2 The second dimension with a negative 1 value.\n */\nexport function getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(dim1, dim2) {\n return `only one output dimension may be -1, not both ${dim1} and ${dim2}`;\n}\n/**\n * Generates sparse reshape negative output dimension error message.\n *\n * @param dim The dimension with a negative value.\n * @param value The negative value.\n */\nexport function getSparseReshapeNegativeOutputDimErrorMessage(dim, value) {\n return `size ${dim} must be non-negative, not ${value}`;\n}\n/**\n * Generates sparse reshape empty tensor zero output dimension error message.\n *\n */\nexport function getSparseReshapeEmptyTensorZeroOutputDimErrorMessage() {\n return 'reshape cannot infer the missing input size for an empty tensor ' +\n 'unless all specified input sizes are non-zero';\n}\n/**\n * Generates sparse reshape input output multiple mismatch error message.\n *\n * @param inputShape the input shape.\n * @param outputShape the requested output shape.\n */\nexport function getSparseReshapeInputOutputMultipleErrorMessage(inputShape, outputShape) {\n const inputSize = sizeFromShape(inputShape);\n const outputSize = sizeFromShape(outputShape);\n return `Input to reshape is a SparseTensor with ${inputSize}\n dense values, but the requested shape requires a multiple of ${outputSize}. inputShape=${inputShape} outputShape= ${outputShape}`;\n}\n/**\n * Generates sparse reshape input output inequality error message.\n *\n * @param inputShape the input shape.\n * @param outputShape the requested output shape.\n */\nexport function getSparseReshapeInputOutputMismatchErrorMessage(inputShape, outputShape) {\n const inputSize = sizeFromShape(inputShape);\n const outputSize = sizeFromShape(outputShape);\n return `Input to reshape is a tensor with ${inputSize} dense values, but the requested shape has ${outputSize}. inputShape=${inputShape} outputShape=${outputShape}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3Jlc2hhcGVfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwYXJzZS9zcGFyc2VfcmVzaGFwZV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFekM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsd0RBQXdELENBQ3BFLElBQVksRUFBRSxJQUFZO0lBQzVCLE9BQU8saURBQWlELElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUM3RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsNkNBQTZDLENBQ3pELEdBQVcsRUFBRSxLQUFhO0lBQzVCLE9BQU8sUUFBUSxHQUFHLDhCQUE4QixLQUFLLEVBQUUsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9EQUFvRDtJQUNsRSxPQUFPLGtFQUFrRTtRQUNyRSwrQ0FBK0MsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsK0NBQStDLENBQzNELFVBQW9CLEVBQUUsV0FBcUI7SUFDN0MsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxPQUFPLDJDQUEyQyxTQUFTO2lFQUV2RCxVQUFVLGdCQUFnQixVQUFVLGlCQUFpQixXQUFXLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsK0NBQStDLENBQzNELFVBQW9CLEVBQUUsV0FBcUI7SUFDN0MsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxPQUFPLHFDQUNILFNBQVMsOENBQ1QsVUFBVSxnQkFBZ0IsVUFBVSxnQkFBZ0IsV0FBVyxFQUFFLENBQUM7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7c2l6ZUZyb21TaGFwZX0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSByZXNoYXBlIG11bHRpcGxlIG5lZ2F0aXZlIDEgb3V0cHV0IGRpbWVuc2lvbiBlcnJvciBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBkaW0xIFRoZSBmaXJzdCBkaW1lbnNpb24gd2l0aCBhIG5lZ2F0aXZlIDEgdmFsdWUuXG4gKiBAcGFyYW0gZGltMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiB3aXRoIGEgbmVnYXRpdmUgMSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZVJlc2hhcGVNdWx0aXBsZU5lZ2F0aXZlT25lT3V0cHV0RGltRXJyb3JNZXNzYWdlKFxuICAgIGRpbTE6IG51bWJlciwgZGltMjogbnVtYmVyKSB7XG4gIHJldHVybiBgb25seSBvbmUgb3V0cHV0IGRpbWVuc2lvbiBtYXkgYmUgLTEsIG5vdCBib3RoICR7ZGltMX0gYW5kICR7ZGltMn1gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2UgcmVzaGFwZSBuZWdhdGl2ZSBvdXRwdXQgZGltZW5zaW9uIGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGRpbSBUaGUgZGltZW5zaW9uIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgbmVnYXRpdmUgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VSZXNoYXBlTmVnYXRpdmVPdXRwdXREaW1FcnJvck1lc3NhZ2UoXG4gICAgZGltOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgcmV0dXJuIGBzaXplICR7ZGltfSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSwgbm90ICR7dmFsdWV9YDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgc3BhcnNlIHJlc2hhcGUgZW1wdHkgdGVuc29yIHplcm8gb3V0cHV0IGRpbWVuc2lvbiBlcnJvciBtZXNzYWdlLlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZVJlc2hhcGVFbXB0eVRlbnNvclplcm9PdXRwdXREaW1FcnJvck1lc3NhZ2UoKSB7XG4gIHJldHVybiAncmVzaGFwZSBjYW5ub3QgaW5mZXIgdGhlIG1pc3NpbmcgaW5wdXQgc2l6ZSBmb3IgYW4gZW1wdHkgdGVuc29yICcgK1xuICAgICAgJ3VubGVzcyBhbGwgc3BlY2lmaWVkIGlucHV0IHNpemVzIGFyZSBub24temVybyc7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSByZXNoYXBlIGlucHV0IG91dHB1dCBtdWx0aXBsZSBtaXNtYXRjaCBlcnJvciBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBpbnB1dFNoYXBlIHRoZSBpbnB1dCBzaGFwZS5cbiAqIEBwYXJhbSBvdXRwdXRTaGFwZSB0aGUgcmVxdWVzdGVkIG91dHB1dCBzaGFwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZVJlc2hhcGVJbnB1dE91dHB1dE11bHRpcGxlRXJyb3JNZXNzYWdlKFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLCBvdXRwdXRTaGFwZTogbnVtYmVyW10pIHtcbiAgY29uc3QgaW5wdXRTaXplID0gc2l6ZUZyb21TaGFwZShpbnB1dFNoYXBlKTtcbiAgY29uc3Qgb3V0cHV0U2l6ZSA9IHNpemVGcm9tU2hhcGUob3V0cHV0U2hhcGUpO1xuICByZXR1cm4gYElucHV0IHRvIHJlc2hhcGUgaXMgYSBTcGFyc2VUZW5zb3Igd2l0aCAke2lucHV0U2l6ZX1cbiAgZGVuc2UgdmFsdWVzLCBidXQgdGhlIHJlcXVlc3RlZCBzaGFwZSByZXF1aXJlcyBhIG11bHRpcGxlIG9mICR7XG4gICAgICBvdXRwdXRTaXplfS4gaW5wdXRTaGFwZT0ke2lucHV0U2hhcGV9IG91dHB1dFNoYXBlPSAke291dHB1dFNoYXBlfWA7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSByZXNoYXBlIGlucHV0IG91dHB1dCBpbmVxdWFsaXR5IGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGlucHV0U2hhcGUgdGhlIGlucHV0IHNoYXBlLlxuICogQHBhcmFtIG91dHB1dFNoYXBlIHRoZSByZXF1ZXN0ZWQgb3V0cHV0IHNoYXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BhcnNlUmVzaGFwZUlucHV0T3V0cHV0TWlzbWF0Y2hFcnJvck1lc3NhZ2UoXG4gICAgaW5wdXRTaGFwZTogbnVtYmVyW10sIG91dHB1dFNoYXBlOiBudW1iZXJbXSkge1xuICBjb25zdCBpbnB1dFNpemUgPSBzaXplRnJvbVNoYXBlKGlucHV0U2hhcGUpO1xuICBjb25zdCBvdXRwdXRTaXplID0gc2l6ZUZyb21TaGFwZShvdXRwdXRTaGFwZSk7XG4gIHJldHVybiBgSW5wdXQgdG8gcmVzaGFwZSBpcyBhIHRlbnNvciB3aXRoICR7XG4gICAgICBpbnB1dFNpemV9IGRlbnNlIHZhbHVlcywgYnV0IHRoZSByZXF1ZXN0ZWQgc2hhcGUgaGFzICR7XG4gICAgICBvdXRwdXRTaXplfS4gaW5wdXRTaGFwZT0ke2lucHV0U2hhcGV9IG91dHB1dFNoYXBlPSR7b3V0cHV0U2hhcGV9YDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Generates sparse segment reduction negative segment ids error message.\n *\n */\nexport function getSparseSegmentReductionNegativeSegmentIdsErrorMessage() {\n return `segment ids must be >= 0`;\n}\n/**\n * Generates sparse segment reduction non increasing segment ids error message.\n *\n */\nexport function getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage() {\n return `segment ids are not increasing`;\n}\n/**\n * Generates sparse segment reduction segment id out of range error message.\n *\n * @param segmentId The segment id index that is out of range.\n * @param outputRows Upper bound of valid segment id values.\n */\nexport function getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(segmentId, outputRows) {\n return `Segment id ${segmentId} out of range [0, ${outputRows}), possibly because segmentIds input is not sorted.`;\n}\n/**\n * Generates sparse segment reduction input indice out of range error message.\n *\n * @param index The index that holds the out of range value.\n * @param indexValue The value that is out of range.\n * @param inputRows Upper bound of valid index values.\n */\nexport function getSparseSegmentReductionIndicesOutOfRangeErrorMessage(index, indexValue, inputRows) {\n return `Bad: indices[${index}] == ${indexValue} out of range [0, ${inputRows})`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3NlZ21lbnRfcmVkdWN0aW9uX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGFyc2Uvc3BhcnNlX3NlZ21lbnRfcmVkdWN0aW9uX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHVEQUF1RDtJQUNyRSxPQUFPLDBCQUEwQixDQUFDO0FBQ3BDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsNERBQTREO0lBQzFFLE9BQU8sZ0NBQWdDLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdEQUF3RCxDQUNwRSxTQUFpQixFQUFFLFVBQWtCO0lBQ3ZDLE9BQU8sY0FBYyxTQUFTLHFCQUMxQixVQUFVLHFEQUFxRCxDQUFDO0FBQ3RFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsc0RBQXNELENBQ2xFLEtBQWEsRUFBRSxVQUFrQixFQUFFLFNBQWlCO0lBQ3RELE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxVQUFVLHFCQUMxQyxTQUFTLEdBQUcsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2Ugc2VnbWVudCByZWR1Y3Rpb24gbmVnYXRpdmUgc2VnbWVudCBpZHMgZXJyb3IgbWVzc2FnZS5cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uTmVnYXRpdmVTZWdtZW50SWRzRXJyb3JNZXNzYWdlKCkge1xuICByZXR1cm4gYHNlZ21lbnQgaWRzIG11c3QgYmUgPj0gMGA7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSBzZWdtZW50IHJlZHVjdGlvbiBub24gaW5jcmVhc2luZyBzZWdtZW50IGlkcyBlcnJvciBtZXNzYWdlLlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25Ob25JbmNyZWFzaW5nU2VnbWVudElkc0Vycm9yTWVzc2FnZSgpIHtcbiAgcmV0dXJuIGBzZWdtZW50IGlkcyBhcmUgbm90IGluY3JlYXNpbmdgO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2Ugc2VnbWVudCByZWR1Y3Rpb24gc2VnbWVudCBpZCBvdXQgb2YgcmFuZ2UgZXJyb3IgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gc2VnbWVudElkIFRoZSBzZWdtZW50IGlkIGluZGV4IHRoYXQgaXMgb3V0IG9mIHJhbmdlLlxuICogQHBhcmFtIG91dHB1dFJvd3MgVXBwZXIgYm91bmQgb2YgdmFsaWQgc2VnbWVudCBpZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uU2VnbWVudElkT3V0T2ZSYW5nZUVycm9yTWVzc2FnZShcbiAgICBzZWdtZW50SWQ6IG51bWJlciwgb3V0cHV0Um93czogbnVtYmVyKSB7XG4gIHJldHVybiBgU2VnbWVudCBpZCAke3NlZ21lbnRJZH0gb3V0IG9mIHJhbmdlIFswLCAke1xuICAgICAgb3V0cHV0Um93c30pLCBwb3NzaWJseSBiZWNhdXNlIHNlZ21lbnRJZHMgaW5wdXQgaXMgbm90IHNvcnRlZC5gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2Ugc2VnbWVudCByZWR1Y3Rpb24gaW5wdXQgaW5kaWNlIG91dCBvZiByYW5nZSBlcnJvciBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdGhhdCBob2xkcyB0aGUgb3V0IG9mIHJhbmdlIHZhbHVlLlxuICogQHBhcmFtIGluZGV4VmFsdWUgVGhlIHZhbHVlIHRoYXQgaXMgb3V0IG9mIHJhbmdlLlxuICogQHBhcmFtIGlucHV0Um93cyBVcHBlciBib3VuZCBvZiB2YWxpZCBpbmRleCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uSW5kaWNlc091dE9mUmFuZ2VFcnJvck1lc3NhZ2UoXG4gICAgaW5kZXg6IG51bWJlciwgaW5kZXhWYWx1ZTogbnVtYmVyLCBpbnB1dFJvd3M6IG51bWJlcikge1xuICByZXR1cm4gYEJhZDogaW5kaWNlc1ske2luZGV4fV0gPT0gJHtpbmRleFZhbHVlfSBvdXQgb2YgcmFuZ2UgWzAsICR7XG4gICAgICBpbnB1dFJvd3N9KWA7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { nearestDivisor } from '../util';\nimport { PARALLELIZE_THRESHOLD } from './reduce_util';\nexport function segOpComputeOptimalWindowSize(inSize, numSegments) {\n let done = false;\n let res;\n if (inSize <= PARALLELIZE_THRESHOLD) {\n res = inSize;\n done = true;\n }\n else {\n res = nearestDivisor(inSize, Math.floor(Math.sqrt(inSize)));\n }\n while (!done) {\n if (res > numSegments || res === inSize) {\n done = true;\n }\n else {\n res = nearestDivisor(inSize, res + 1);\n }\n }\n return res;\n}\nexport function computeOutShape(aShape, axis, numSegments) {\n const outShape = [];\n const rank = aShape.length;\n for (let dim = 0; dim < rank; dim++) {\n if (dim !== axis) {\n outShape.push(aShape[dim]);\n }\n else {\n outShape.push(numSegments);\n }\n }\n return outShape;\n}\nexport function collectGatherOpShapeInfo(x, indices, axis, batchDims) {\n const indicesRank = indices.shape.length;\n const xRank = x.shape.length;\n if (batchDims !== 0) {\n if (batchDims < -indicesRank || batchDims > indicesRank) {\n throw new Error(`Expect batchDims in the range of [-${indicesRank}, ${indicesRank}], but got ${batchDims}`);\n }\n }\n if (batchDims < 0) {\n batchDims += indicesRank;\n }\n if (batchDims > xRank) {\n throw new Error(`batchDims (${batchDims}) must be less than rank(x) (\n ${xRank}).`);\n }\n if (axis < batchDims) {\n throw new Error(`batchDims (${batchDims}) must be less than or equal to axis (${axis}).`);\n }\n for (let i = 0; i < batchDims; ++i) {\n if (x.shape[i] !== indices.shape[i]) {\n throw new Error(`x.shape[${i}]: ${x.shape[i]} should be equal to indices.shape[${i}]: ${indices.shape[i]}.`);\n }\n }\n const dimSize = x.shape[axis];\n const outputShape = [];\n let batchSize = 1;\n let outerSize = 1;\n let sliceSize = 1;\n for (let i = 0; i < batchDims; ++i) {\n outputShape.push(x.shape[i]);\n batchSize *= x.shape[i];\n }\n for (let i = batchDims; i < axis; i++) {\n outputShape.push(x.shape[i]);\n outerSize *= x.shape[i];\n }\n for (let i = batchDims; i < indicesRank; i++) {\n outputShape.push(indices.shape[i]);\n }\n for (let i = axis + 1; i < xRank; i++) {\n outputShape.push(x.shape[i]);\n sliceSize *= x.shape[i];\n }\n return { batchSize, sliceSize, outerSize, dimSize, outputShape };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2VnbWVudF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdkMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBU3BELE1BQU0sVUFBVSw2QkFBNkIsQ0FDekMsTUFBYyxFQUFFLFdBQW1CO0lBQ3JDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNqQixJQUFJLEdBQUcsQ0FBQztJQUVSLElBQUksTUFBTSxJQUFJLHFCQUFxQixFQUFFO1FBQ25DLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixJQUFJLEdBQUcsSUFBSSxDQUFDO0tBQ2I7U0FBTTtRQUNMLEdBQUcsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0Q7SUFFRCxPQUFPLENBQUMsSUFBSSxFQUFFO1FBQ1osSUFBSSxHQUFHLEdBQUcsV0FBVyxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7WUFDdkMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxHQUFHLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdkM7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQzNCLE1BQWdCLEVBQUUsSUFBWSxFQUFFLFdBQW1CO0lBQ3JELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNCLEtBQUssSUFBSSxH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QUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUMsQ0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgeyBUZW5zb3JJbmZvIH0gZnJvbSAnLi4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtuZWFyZXN0RGl2aXNvcn0gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7UEFSQUxMRUxJWkVfVEhSRVNIT0xEfSBmcm9tICcuL3JlZHVjZV91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWdPcEluZm8ge1xuICB3aW5kb3dTaXplOiBudW1iZXI7XG4gIGJhdGNoU2l6ZTogbnVtYmVyO1xuICBpblNpemU6IG51bWJlcjtcbiAgbnVtU2VnbWVudHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlZ09wQ29tcHV0ZU9wdGltYWxXaW5kb3dTaXplKFxuICAgIGluU2l6ZTogbnVtYmVyLCBudW1TZWdtZW50czogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgbGV0IHJlcztcblxuICBpZiAoaW5TaXplIDw9IFBBUkFMTEVMSVpFX1RIUkVTSE9MRCkge1xuICAgIHJlcyA9IGluU2l6ZTtcbiAgICBkb25lID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXMgPSBuZWFyZXN0RGl2aXNvcihpblNpemUsIE1hdGguZmxvb3IoTWF0aC5zcXJ0KGluU2l6ZSkpKTtcbiAgfVxuXG4gIHdoaWxlICghZG9uZSkge1xuICAgIGlmIChyZXMgPiBudW1TZWdtZW50cyB8fCByZXMgPT09IGluU2l6ZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IG5lYXJlc3REaXZpc29yKGluU2l6ZSwgcmVzICsgMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlT3V0U2hhcGUoXG4gICAgYVNoYXBlOiBudW1iZXJbXSwgYXhpczogbnVtYmVyLCBudW1TZWdtZW50czogbnVtYmVyKTogbnVtYmVyW10ge1xuICBjb25zdCBvdXRTaGFwZSA9IFtdO1xuICBjb25zdCByYW5rID0gYVNoYXBlLmxlbmd0aDtcbiAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgcmFuazsgZGltKyspIHtcbiAgICBpZiAoZGltICE9PSBheGlzKSB7XG4gICAgICBvdXRTaGFwZS5wdXNoKGFTaGFwZVtkaW1dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0U2hhcGUucHVzaChudW1TZWdtZW50cyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRTaGFwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYXRoZXJPcFNoYXBlSW5mbyB7XG4gIGJhdGNoU2l6ZTogbnVtYmVyO1xuICBzbGljZVNpemU6IG51bWJlcjtcbiAgb3V0ZXJTaXplOiBudW1iZXI7XG4gIGRpbVNpemU6IG51bWJlcjtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEdhdGhlck9wU2hhcGVJbmZvKFxuICAgIHg6IFRlbnNvckluZm8sIGluZGljZXM6IFRlbnNvckluZm8sIGF4aXM6IG51bWJlcixcbiAgICBiYXRjaERpbXM6IG51bWJlcik6IEdhdGhlck9wU2hhcGVJbmZvIHtcbiAgY29uc3QgaW5kaWNlc1JhbmsgPSBpbmRpY2VzLnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgeFJhbmsgPSB4LnNoYXBlLmxlbmd0aDtcblxuICBpZiAoYmF0Y2hEaW1zICE9PSAwKSB7XG4gICAgaWYgKGJhdGNoRGltcyA8IC1pbmRpY2VzUmFuayB8fCBiYXRjaERpbXMgPiBpbmRpY2VzUmFuaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgYmF0Y2hEaW1zIGluIHRoZSByYW5nZSBvZiBbLSR7aW5kaWNlc1Jhbmt9LCAke1xuICAgICAgICAgIGluZGljZXNSYW5rfV0sIGJ1dCBnb3QgJHtiYXRjaERpbXN9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJhdGNoRGltcyA8IDApIHtcbiAgICBiYXRjaERpbXMgKz0gaW5kaWNlc1Jhbms7XG4gIH1cblxuICBpZiAoYmF0Y2hEaW1zID4geFJhbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJhdGNoRGltcyAoJHtiYXRjaERpbXN9KSBtdXN0IGJlIGxlc3MgdGhhbiByYW5rKHgpIChcbiAgICAke3hSYW5rfSkuYCk7XG4gIH1cblxuICBpZiAoYXhpcyA8IGJhdGNoRGltcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmF0Y2hEaW1zICgke1xuICAgICAgICBiYXRjaERpbXN9KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBheGlzICgke2F4aXN9KS5gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmF0Y2hEaW1zOyArK2kpIHtcbiAgICBpZiAoeC5zaGFwZVtpXSAhPT0gaW5kaWNlcy5zaGFwZVtpXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB4LnNoYXBlWyR7aX1dOiAke3guc2hhcGVbaV19IHNob3VsZCBiZSBlcXVhbCB0byBpbmRpY2VzLnNoYXBlWyR7XG4gICAgICAgICAgICAgIGl9XTogJHtpbmRpY2VzLnNoYXBlW2ldfS5gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZGltU2l6ZSA9IHguc2hhcGVbYXhpc107XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIGxldCBiYXRjaFNpemUgPSAxO1xuICBsZXQgb3V0ZXJTaXplID0gMTtcbiAgbGV0IHNsaWNlU2l6ZSA9IDE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXRjaERpbXM7ICsraSkge1xuICAgIG91dHB1dFNoYXBlLnB1c2goeC5zaGFwZVtpXSk7XG4gICAgYmF0Y2hTaXplICo9IHguc2hhcGVbaV07XG4gIH1cblxuICBmb3IgKGxldCBpID0gYmF0Y2hEaW1zOyBpIDwgYXhpczsgaSsrKSB7XG4gICAgb3V0cHV0U2hhcGUucHVzaCh4LnNoYXBlW2ldKTtcbiAgICBvdXRlclNpemUgKj0geC5zaGFwZVtpXTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBiYXRjaERpbXM7IGkgPCBpbmRpY2VzUmFuazsgaSsrKSB7XG4gICAgb3V0cHV0U2hhcGUucHVzaChpbmRpY2VzLnNoYXBlW2ldKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBheGlzICsgMTsgaSA8IHhSYW5rOyBpKyspIHtcbiAgICBvdXRwdXRTaGFwZS5wdXNoKHguc2hhcGVbaV0pO1xuICAgIHNsaWNlU2l6ZSAqPSB4LnNoYXBlW2ldO1xuICB9XG5cbiAgcmV0dXJuIHtiYXRjaFNpemUsIHNsaWNlU2l6ZSwgb3V0ZXJTaXplLCBkaW1TaXplLCBvdXRwdXRTaGFwZX07XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { decodeString, encodeString } from '../util';\n// Utilities needed by backend consumers of tf-core.\nexport * from '../ops/axis_util';\nexport * from '../ops/broadcast_util';\nexport * from '../ops/concat_util';\nexport * from '../ops/conv_util';\nexport * from '../ops/fused_util';\nexport * from '../ops/fused_types';\nexport * from '../ops/ragged_to_dense_util';\nexport * from '../ops/reduce_util';\nimport * as slice_util from '../ops/slice_util';\nexport { slice_util };\nexport { upcastType } from '../types';\nexport * from '../ops/rotate_util';\nexport * from '../ops/array_ops_util';\nexport * from '../ops/gather_nd_util';\nexport * from '../ops/scatter_nd_util';\nexport * from '../ops/selu_util';\nexport * from '../ops/fused_util';\nexport * from '../ops/erf_util';\nexport * from '../log';\nexport * from '../backends/complex_util';\nexport * from '../backends/einsum_util';\nexport * from '../ops/split_util';\nexport * from '../ops/sparse/sparse_fill_empty_rows_util';\nexport * from '../ops/sparse/sparse_reshape_util';\nexport * from '../ops/sparse/sparse_segment_reduction_util';\nimport * as segment_util from '../ops/segment_util';\nexport { segment_util };\nexport function fromUint8ToStringArray(vals) {\n try {\n // Decode the bytes into string.\n return vals.map(val => decodeString(val));\n }\n catch (err) {\n throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${err}`);\n }\n}\nexport function fromStringArrayToUint8(strings) {\n return strings.map(s => encodeString(s));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9iYWNrZW5kcy9iYWNrZW5kX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFbkQsb0RBQW9EO0FBQ3BELGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUVuQyxPQUFPLEtBQUssVUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsQ0FBQztBQUVwQixPQUFPLEVBQTRCLFVBQVUsRUFBWSxNQUFNLFVBQVUsQ0FBQztBQUUxRSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDZDQUE2QyxDQUFDO0FBRTVELE9BQU8sS0FBSyxZQUFZLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxDQUFDO0FBRXRCLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUFrQjtJQUN2RCxJQUFJO1FBQ0YsZ0NBQWdDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzNDO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixNQUFNLElBQUksS0FBSyxDQUNYLDREQUE0RCxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ3hFO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFpQjtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2RlY29kZVN0cmluZywgZW5jb2RlU3RyaW5nfSBmcm9tICcuLi91dGlsJztcblxuLy8gVXRpbGl0aWVzIG5lZWRlZCBieSBiYWNrZW5kIGNvbnN1bWVycyBvZiB0Zi1jb3JlLlxuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2F4aXNfdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuLi9vcHMvYnJvYWRjYXN0X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2NvbmNhdF91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9jb252X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2Z1c2VkX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2Z1c2VkX3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9yYWdnZWRfdG9fZGVuc2VfdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuLi9vcHMvcmVkdWNlX3V0aWwnO1xuXG5pbXBvcnQgKiBhcyBzbGljZV91dGlsIGZyb20gJy4uL29wcy9zbGljZV91dGlsJztcbmV4cG9ydCB7c2xpY2VfdXRpbH07XG5cbmV4cG9ydCB7QmFja2VuZFZhbHVlcywgVHlwZWRBcnJheSwgdXBjYXN0VHlwZSwgUGl4ZWxEYXRhfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQge01lbW9yeUluZm8sIFRpbWluZ0luZm99IGZyb20gJy4uL2VuZ2luZSc7XG5leHBvcnQgKiBmcm9tICcuLi9vcHMvcm90YXRlX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2FycmF5X29wc191dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9nYXRoZXJfbmRfdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuLi9vcHMvc2NhdHRlcl9uZF91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9zZWx1X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2Z1c2VkX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2VyZl91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL2xvZyc7XG5leHBvcnQgKiBmcm9tICcuLi9iYWNrZW5kcy9jb21wbGV4X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vYmFja2VuZHMvZWluc3VtX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL3NwbGl0X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL3NwYXJzZS9zcGFyc2VfZmlsbF9lbXB0eV9yb3dzX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL3NwYXJzZS9zcGFyc2VfcmVzaGFwZV91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9zcGFyc2Uvc3BhcnNlX3NlZ21lbnRfcmVkdWN0aW9uX3V0aWwnO1xuXG5pbXBvcnQgKiBhcyBzZWdtZW50X3V0aWwgZnJvbSAnLi4vb3BzL3NlZ21lbnRfdXRpbCc7XG5leHBvcnQge3NlZ21lbnRfdXRpbH07XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVWludDhUb1N0cmluZ0FycmF5KHZhbHM6IFVpbnQ4QXJyYXlbXSkge1xuICB0cnkge1xuICAgIC8vIERlY29kZSB0aGUgYnl0ZXMgaW50byBzdHJpbmcuXG4gICAgcmV0dXJuIHZhbHMubWFwKHZhbCA9PiBkZWNvZGVTdHJpbmcodmFsKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBkZWNvZGUgZW5jb2RlZCBzdHJpbmcgYnl0ZXMgaW50byB1dGYtOCwgZXJyb3I6ICR7ZXJyfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU3RyaW5nQXJyYXlUb1VpbnQ4KHN0cmluZ3M6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBzdHJpbmdzLm1hcChzID0+IGVuY29kZVN0cmluZyhzKSk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Required side effectful code.\nimport './base_side_effects';\n// TODO(mattSoulanille): Move this to base_side_effects.ts\n// It is here for now because custom bundles need to avoid calling it, and they\n// only replace the index.js file, not the base_side_effects file.\nimport { registerOptimizers } from './optimizers/register_optimizers';\nregisterOptimizers();\n// All exports from this package should be in base.\nexport * from './base';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILGdDQUFnQztBQUNoQyxPQUFPLHFCQUFxQixDQUFDO0FBRTdCLDBEQUEwRDtBQUMxRCwrRUFBK0U7QUFDL0Usa0VBQWtFO0FBQ2xFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLGtCQUFrQixFQUFFLENBQUM7QUFFckIsbURBQW1EO0FBQ25ELGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBSZXF1aXJlZCBzaWRlIGVmZmVjdGZ1bCBjb2RlLlxuaW1wb3J0ICcuL2Jhc2Vfc2lkZV9lZmZlY3RzJztcblxuLy8gVE9ETyhtYXR0U291bGFuaWxsZSk6IE1vdmUgdGhpcyB0byBiYXNlX3NpZGVfZWZmZWN0cy50c1xuLy8gSXQgaXMgaGVyZSBmb3Igbm93IGJlY2F1c2UgY3VzdG9tIGJ1bmRsZXMgbmVlZCB0byBhdm9pZCBjYWxsaW5nIGl0LCBhbmQgdGhleVxuLy8gb25seSByZXBsYWNlIHRoZSBpbmRleC5qcyBmaWxlLCBub3QgdGhlIGJhc2Vfc2lkZV9lZmZlY3RzIGZpbGUuXG5pbXBvcnQge3JlZ2lzdGVyT3B0aW1pemVyc30gZnJvbSAnLi9vcHRpbWl6ZXJzL3JlZ2lzdGVyX29wdGltaXplcnMnO1xucmVnaXN0ZXJPcHRpbWl6ZXJzKCk7XG5cbi8vIEFsbCBleHBvcnRzIGZyb20gdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBpbiBiYXNlLlxuZXhwb3J0ICogZnJvbSAnLi9iYXNlJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nconst contexts = {};\nconst WEBGL_ATTRIBUTES = {\n alpha: false,\n antialias: false,\n premultipliedAlpha: false,\n preserveDrawingBuffer: false,\n depth: false,\n stencil: false,\n failIfMajorPerformanceCaveat: true\n};\nexport function clearWebGLContext(webGLVersion) {\n delete contexts[webGLVersion];\n}\nexport function setWebGLContext(webGLVersion, gl) {\n contexts[webGLVersion] = gl;\n}\nexport function getWebGLContext(webGLVersion, customCanvas) {\n if (!(webGLVersion in contexts) || customCanvas != null) {\n const newCtx = getWebGLRenderingContext(webGLVersion, customCanvas);\n if (newCtx !== null) {\n contexts[webGLVersion] = newCtx;\n }\n else {\n console.log('Could not get context for WebGL version', webGLVersion);\n return null;\n }\n }\n const gl = contexts[webGLVersion];\n if (gl == null || gl.isContextLost()) {\n delete contexts[webGLVersion];\n return getWebGLContext(webGLVersion);\n }\n gl.disable(gl.DEPTH_TEST);\n gl.disable(gl.STENCIL_TEST);\n gl.disable(gl.BLEND);\n gl.disable(gl.DITHER);\n gl.disable(gl.POLYGON_OFFSET_FILL);\n gl.disable(gl.SAMPLE_COVERAGE);\n gl.enable(gl.SCISSOR_TEST);\n gl.enable(gl.CULL_FACE);\n gl.cullFace(gl.BACK);\n return contexts[webGLVersion];\n}\nfunction createCanvas(webGLVersion) {\n // Use canvas element for Safari, since its offscreen canvas does not support\n // fencing.\n if (!env().getBool('IS_SAFARI') && typeof OffscreenCanvas !== 'undefined' &&\n webGLVersion === 2) {\n return new OffscreenCanvas(300, 150);\n }\n else if (typeof document !== 'undefined') {\n return document.createElement('canvas');\n }\n else {\n throw new Error('Cannot create a canvas in this context');\n }\n}\nfunction getWebGLRenderingContext(webGLVersion, customCanvas) {\n if (webGLVersion !== 1 && webGLVersion !== 2) {\n throw new Error('Cannot get WebGL rendering context, WebGL is disabled.');\n }\n const canvas = customCanvas == null ? createCanvas(webGLVersion) : customCanvas;\n canvas.addEventListener('webglcontextlost', (ev) => {\n ev.preventDefault();\n delete contexts[webGLVersion];\n }, false);\n if (env().getBool('SOFTWARE_WEBGL_ENABLED')) {\n WEBGL_ATTRIBUTES.failIfMajorPerformanceCaveat = false;\n }\n if (webGLVersion === 1) {\n return (\n // tslint:disable-next-line\n canvas.getContext('webgl', WEBGL_ATTRIBUTES) ||\n canvas\n .getContext('experimental-webgl', WEBGL_ATTRIBUTES));\n }\n return canvas.getContext('webgl2', WEBGL_ATTRIBUTES);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2NhbnZhc191dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxQyxNQUFNLFFBQVEsR0FBMkMsRUFBRSxDQUFDO0FBRTVELE1BQU0sZ0JBQWdCLEdBQTJCO0lBQy9DLEtBQUssRUFBRSxLQUFLO0lBQ1osU0FBUyxFQUFFLEtBQUs7SUFDaEIsa0JBQWtCLEVBQUUsS0FBSztJQUN6QixxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLEtBQUssRUFBRSxLQUFLO0lBQ1osT0FBTyxFQUFFLEtBQUs7SUFDZCw0QkFBNEIsRUFBRSxJQUFJO0NBQ25DLENBQUM7QUFFRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsWUFBb0I7SUFDcEQsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQzNCLFlBQW9CLEVBQUUsRUFBeUI7SUFDakQsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsWUFBb0IsRUFDcEIsWUFBZ0Q7SUFDbEQsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7UUFDdkQsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtZQUNuQixRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQ2pDO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxFQUFFLFlBQVksQ0FBQyxD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QztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3QgY29udGV4dHM6IHtba2V5OiBzdHJpbmddOiBXZWJHTFJlbmRlcmluZ0NvbnRleHR9ID0ge307XG5cbmNvbnN0IFdFQkdMX0FUVFJJQlVURVM6IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgPSB7XG4gIGFscGhhOiBmYWxzZSxcbiAgYW50aWFsaWFzOiBmYWxzZSxcbiAgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZSxcbiAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgZGVwdGg6IGZhbHNlLFxuICBzdGVuY2lsOiBmYWxzZSxcbiAgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogdHJ1ZVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyV2ViR0xDb250ZXh0KHdlYkdMVmVyc2lvbjogbnVtYmVyKSB7XG4gIGRlbGV0ZSBjb250ZXh0c1t3ZWJHTFZlcnNpb25dO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0V2ViR0xDb250ZXh0KFxuICAgIHdlYkdMVmVyc2lvbjogbnVtYmVyLCBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gIGNvbnRleHRzW3dlYkdMVmVyc2lvbl0gPSBnbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYkdMQ29udGV4dChcbiAgICB3ZWJHTFZlcnNpb246IG51bWJlcixcbiAgICBjdXN0b21DYW52YXM/OiBIVE1MQ2FudmFzRWxlbWVudHxPZmZzY3JlZW5DYW52YXMpOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQge1xuICBpZiAoISh3ZWJHTFZlcnNpb24gaW4gY29udGV4dHMpIHx8IGN1c3RvbUNhbnZhcyAhPSBudWxsKSB7XG4gICAgY29uc3QgbmV3Q3R4ID0gZ2V0V2ViR0xSZW5kZXJpbmdDb250ZXh0KHdlYkdMVmVyc2lvbiwgY3VzdG9tQ2FudmFzKTtcbiAgICBpZiAobmV3Q3R4ICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0c1t3ZWJHTFZlcnNpb25dID0gbmV3Q3R4O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnQ291bGQgbm90IGdldCBjb250ZXh0IGZvciBXZWJHTCB2ZXJzaW9uJywgd2ViR0xWZXJzaW9uKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBjb25zdCBnbCA9IGNvbnRleHRzW3dlYkdMVmVyc2lvbl07XG4gIGlmIChnbCA9PSBudWxsIHx8IGdsLmlzQ29udGV4dExvc3QoKSkge1xuICAgIGRlbGV0ZSBjb250ZXh0c1t3ZWJHTFZlcnNpb25dO1xuICAgIHJldHVybiBnZXRXZWJHTENvbnRleHQod2ViR0xWZXJzaW9uKTtcbiAgfVxuXG4gIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gIGdsLmRpc2FibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgZ2wuZGlzYWJsZShnbC5CTEVORCk7XG4gIGdsLmRpc2FibGUoZ2wuRElUSEVSKTtcbiAgZ2wuZGlzYWJsZShnbC5QT0xZR09OX09GRlNFVF9GSUxMKTtcbiAgZ2wuZGlzYWJsZShnbC5TQU1QTEVfQ09WRVJBR0UpO1xuICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgZ2wuZW5hYmxlKGdsLkNVTExfRkFDRSk7XG4gIGdsLmN1bGxGYWNlKGdsLkJBQ0spO1xuXG4gIHJldHVybiBjb250ZXh0c1t3ZWJHTFZlcnNpb25dO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDYW52YXMod2ViR0xWZXJzaW9uOiBudW1iZXIpIHtcbiAgLy8gVXNlIGNhbnZhcyBlbGVtZW50IGZvciBTYWZhcmksIHNpbmNlIGl0cyBvZmZzY3JlZW4gY2FudmFzIGRvZXMgbm90IHN1cHBvcnRcbiAgLy8gZmVuY2luZy5cbiAgaWYgKCFlbnYoKS5nZXRCb29sKCdJU19TQUZBUkknKSAmJiB0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgd2ViR0xWZXJzaW9uID09PSAyKSB7XG4gICAgcmV0dXJuIG5ldyBPZmZzY3JlZW5DYW52YXMoMzAwLCAxNTApO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGEgY2FudmFzIGluIHRoaXMgY29udGV4dCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdlYkdMUmVuZGVyaW5nQ29udGV4dChcbiAgICB3ZWJHTFZlcnNpb246IG51bWJlcixcbiAgICBjdXN0b21DYW52YXM/OiBIVE1MQ2FudmFzRWxlbWVudHxPZmZzY3JlZW5DYW52YXMpOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQge1xuICBpZiAod2ViR0xWZXJzaW9uICE9PSAxICYmIHdlYkdMVmVyc2lvbiAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBXZWJHTCByZW5kZXJpbmcgY29udGV4dCwgV2ViR0wgaXMgZGlzYWJsZWQuJyk7XG4gIH1cbiAgY29uc3QgY2FudmFzID1cbiAgICAgIGN1c3RvbUNhbnZhcyA9PSBudWxsID8gY3JlYXRlQ2FudmFzKHdlYkdMVmVyc2lvbikgOiBjdXN0b21DYW52YXM7XG5cbiAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCAoZXY6IEV2ZW50KSA9PiB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICBkZWxldGUgY29udGV4dHNbd2ViR0xWZXJzaW9uXTtcbiAgfSwgZmFsc2UpO1xuXG4gIGlmIChlbnYoKS5nZXRCb29sKCdTT0ZUV0FSRV9XRUJHTF9FTkFCTEVEJykpIHtcbiAgICBXRUJHTF9BVFRSSUJVVEVTLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh3ZWJHTFZlcnNpb24gPT09IDEpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgV0VCR0xfQVRUUklCVVRFUykgYXMgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHx8XG4gICAgICAgIChjYW52YXMgYXMgSFRNTENhbnZhc0VsZW1lbnQpXG4gICAgICAgICAgICAuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdFQkdMX0FUVFJJQlVURVMpIGFzIFdlYkdMUmVuZGVyaW5nQ29udGV4dCk7XG4gIH1cbiAgcmV0dXJuIGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbDInLCBXRUJHTF9BVFRSSUJVVEVTKSBhcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, util } from '@tensorflow/tfjs-core';\nexport var PackingScheme;\n(function (PackingScheme) {\n /**\n * All values in a single texel are densely packed without any constraints.\n *\n * This is how the shader encodes a tensor with shape = [2, 3, 4]\n * (indices are [batch, row, col]).\n *\n * 000|001 010|011 020|021\n * ------- ------- -------\n * 002|003 012|013 022|023\n *\n * 100|101 110|111 120|121\n * ------- ------- -------\n * 102|103 112|113 122|123\n *\n */\n PackingScheme[PackingScheme[\"DENSE\"] = 0] = \"DENSE\";\n /**\n * Single texels contain only values from the same batch, and from adjacent\n * rows and columns.\n *\n * This is how the shader encodes a tensor with shape = [2, 3, 5]\n * (indices are [batch, row, col]).\n *\n * 000|001 002|003 004|xxx 020|021 022|023 024|xxx\n * ------- ------- ------- ------- ------- -------\n * 010|011 012|013 014|xxx xxx|xxx xxx|xxx xxx|xxx\n *\n * 100|101 102|103 104|xxx 120|121 122|123 124|xxx\n * ------- ------- ------- ------- ------- -------\n * 110|111 112|113 114|xxx xxx|xxx xxx|xxx xxx|xxx\n *\n */\n PackingScheme[PackingScheme[\"SHARED_BATCH\"] = 1] = \"SHARED_BATCH\";\n})(PackingScheme || (PackingScheme = {}));\nexport var TextureUsage;\n(function (TextureUsage) {\n TextureUsage[TextureUsage[\"RENDER\"] = 0] = \"RENDER\";\n TextureUsage[TextureUsage[\"UPLOAD\"] = 1] = \"UPLOAD\";\n TextureUsage[TextureUsage[\"PIXELS\"] = 2] = \"PIXELS\";\n TextureUsage[TextureUsage[\"DOWNLOAD\"] = 3] = \"DOWNLOAD\";\n})(TextureUsage || (TextureUsage = {}));\nexport var PhysicalTextureType;\n(function (PhysicalTextureType) {\n PhysicalTextureType[PhysicalTextureType[\"UNPACKED_FLOAT16\"] = 0] = \"UNPACKED_FLOAT16\";\n PhysicalTextureType[PhysicalTextureType[\"UNPACKED_FLOAT32\"] = 1] = \"UNPACKED_FLOAT32\";\n PhysicalTextureType[PhysicalTextureType[\"PACKED_4X1_UNSIGNED_BYTE\"] = 2] = \"PACKED_4X1_UNSIGNED_BYTE\";\n PhysicalTextureType[PhysicalTextureType[\"PACKED_2X2_FLOAT32\"] = 3] = \"PACKED_2X2_FLOAT32\";\n PhysicalTextureType[PhysicalTextureType[\"PACKED_2X2_FLOAT16\"] = 4] = \"PACKED_2X2_FLOAT16\";\n})(PhysicalTextureType || (PhysicalTextureType = {}));\nexport function getUnpackedMatrixTextureShapeWidthHeight(rows, columns) {\n return [columns, rows];\n}\nexport function getUnpackedArraySizeFromMatrixSize(matrixSize, channelsPerTexture) {\n return matrixSize * channelsPerTexture;\n}\nexport function getColorMatrixTextureShapeWidthHeight(rows, columns) {\n return [columns * 4, rows];\n}\n/**\n * Get shape for densely packed RGBA texture.\n */\nexport function getDenseTexShape(shape) {\n const size = util.sizeFromShape(shape);\n const texelsNeeded = Math.ceil(size / 4);\n return util.sizeToSquarishShape(texelsNeeded);\n}\nexport function getMatrixSizeFromUnpackedArraySize(unpackedSize, channelsPerTexture) {\n if (unpackedSize % channelsPerTexture !== 0) {\n throw new Error(`unpackedSize (${unpackedSize}) must be a multiple of ` +\n `${channelsPerTexture}`);\n }\n return unpackedSize / channelsPerTexture;\n}\nexport function decodeMatrixFromUnpackedColorRGBAArray(unpackedArray, matrix, channels) {\n const requiredSize = unpackedArray.length * channels / 4;\n if (matrix.length < requiredSize) {\n throw new Error(`matrix length (${matrix.length}) must be >= ${requiredSize}`);\n }\n let dst = 0;\n for (let src = 0; src < unpackedArray.length; src += 4) {\n for (let c = 0; c < channels; c++) {\n matrix[dst++] = unpackedArray[src + c];\n }\n }\n}\nexport function getPackedMatrixTextureShapeWidthHeight(rows, columns) {\n return [\n Math.max(1, Math.ceil(columns / 2)), Math.max(1, Math.ceil(rows / 2))\n ];\n}\nexport function getPackedRGBAArraySizeFromMatrixShape(rows, columns) {\n const [w, h] = getPackedMatrixTextureShapeWidthHeight(rows, columns);\n return w * h * 4;\n}\nexport function getTextureConfig(\n// tslint:disable-next-line:no-any\ngl, textureHalfFloatExtension) {\n // tslint:disable-next-line:no-any\n const glany = gl;\n let internalFormatFloat;\n let internalFormatHalfFloat;\n let internalFormatPackedHalfFloat;\n let internalFormatPackedFloat;\n let textureFormatFloat;\n let downloadTextureFormat;\n let downloadUnpackNumChannels;\n let defaultNumChannels;\n let textureTypeHalfFloat;\n let textureTypeFloat;\n if (env().getNumber('WEBGL_VERSION') === 2) {\n internalFormatFloat = glany.R32F;\n internalFormatHalfFloat = glany.R16F;\n internalFormatPackedHalfFloat = glany.RGBA16F;\n internalFormatPackedFloat = glany.RGBA32F;\n textureFormatFloat = glany.RED;\n downloadUnpackNumChannels = 4;\n defaultNumChannels = 1;\n textureTypeHalfFloat = glany.HALF_FLOAT;\n textureTypeFloat = glany.FLOAT;\n downloadTextureFormat = glany.RGBA8;\n }\n else {\n internalFormatFloat = gl.RGBA;\n internalFormatHalfFloat = gl.RGBA;\n internalFormatPackedHalfFloat = gl.RGBA;\n internalFormatPackedFloat = glany.RGBA;\n textureFormatFloat = gl.RGBA;\n downloadUnpackNumChannels = 4;\n defaultNumChannels = 4;\n textureTypeHalfFloat = textureHalfFloatExtension != null ?\n textureHalfFloatExtension.HALF_FLOAT_OES :\n null;\n textureTypeFloat = gl.FLOAT;\n downloadTextureFormat = gl.RGBA;\n }\n return {\n internalFormatFloat,\n internalFormatHalfFloat,\n internalFormatPackedHalfFloat,\n internalFormatPackedFloat,\n textureFormatFloat,\n downloadTextureFormat,\n downloadUnpackNumChannels,\n defaultNumChannels,\n textureTypeHalfFloat,\n textureTypeFloat\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3RleF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBaUMsR0FBRyxFQUFjLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVGLE1BQU0sQ0FBTixJQUFZLGFBbUNYO0FBbkNELFdBQVksYUFBYTtJQUN2Qjs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILG1EQUFLLENBQUE7SUFFTDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxpRUFBWSxDQUFBO0FBQ2QsQ0FBQyxFQW5DVyxhQUFhLEtBQWIsYUFBYSxRQW1DeEI7QUFFRCxNQUFNLENBQU4sSUFBWSxZQUtYO0FBTEQsV0FBWSxZQUFZO0lBQ3RCLG1EQUFNLENBQUE7SUFDTixtREFBTSxDQUFBO0lBQ04sbURBQU0sQ0FBQTtJQUNOLHVEQUFRLENBQUE7QUFDVixDQUFDLEVBTFcsWUFBWSxLQUFaLFlBQVksUUFLdkI7QUFFRCxNQUFNLENBQU4sSUFBWSxtQkFNWDtBQU5ELFdBQVksbUJBQW1CO0lBQzdCLHFGQUFnQixDQUFBO0lBQ2hCLHFGQUFnQixDQUFBO0lBQ2hCLHFHQUF3QixDQUFBO0lBQ3hCLHlGQUFrQixDQUFBO0lBQ2xCLHlGQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFOVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBTTlCO0FBa0NELE1BQU0sVUFBVSx3Q0FBd0MsQ0FDcEQsSUFBWSxFQUFFLE9BQWU7SUFDL0IsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBTSxVQUFVLGtDQUFrQyxDQUM5QyxVQUFrQixFQUFFLGtCQUEwQjtJQUNoRCxPQUFPLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHFDQUFxQyxD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a0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQix5QkFBeUI7UUFDekIsa0JBQWtCO1FBQ2xCLG9CQUFvQjtRQUNwQixnQkFBZ0I7S0FDakIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEYXRhSWQsIERhdGFUeXBlLCBlbnYsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBlbnVtIFBhY2tpbmdTY2hlbWUge1xuICAvKipcbiAgICogQWxsIHZhbHVlcyBpbiBhIHNpbmdsZSB0ZXhlbCBhcmUgZGVuc2VseSBwYWNrZWQgd2l0aG91dCBhbnkgY29uc3RyYWludHMuXG4gICAqXG4gICAqIFRoaXMgaXMgaG93IHRoZSBzaGFkZXIgZW5jb2RlcyBhIHRlbnNvciB3aXRoIHNoYXBlID0gWzIsIDMsIDRdXG4gICAqIChpbmRpY2VzIGFyZSBbYmF0Y2gsIHJvdywgY29sXSkuXG4gICAqXG4gICAqIDAwMHwwMDEgICAwMTB8MDExICAgMDIwfDAyMVxuICAgKiAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS1cbiAgICogMDAyfDAwMyAgIDAxMnwwMTMgICAwMjJ8MDIzXG4gICAqXG4gICAqIDEwMHwxMDEgICAxMTB8MTExICAgMTIwfDEyMVxuICAgKiAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS1cbiAgICogMTAyfDEwMyAgIDExMnwxMTMgICAxMjJ8MTIzXG4gICAqXG4gICAqL1xuICBERU5TRSxcblxuICAvKipcbiAgICogU2luZ2xlIHRleGVscyBjb250YWluIG9ubHkgdmFsdWVzIGZyb20gdGhlIHNhbWUgYmF0Y2gsIGFuZCBmcm9tIGFkamFjZW50XG4gICAqIHJvd3MgYW5kIGNvbHVtbnMuXG4gICAqXG4gICAqIFRoaXMgaXMgaG93IHRoZSBzaGFkZXIgZW5jb2RlcyBhIHRlbnNvciB3aXRoIHNoYXBlID0gWzIsIDMsIDVdXG4gICAqIChpbmRpY2VzIGFyZSBbYmF0Y2gsIHJvdywgY29sXSkuXG4gICAqXG4gICAqIDAwMHwwMDEgICAwMDJ8MDAzICAgMDA0fHh4eCAgIDAyMHwwMjEgICAwMjJ8MDIzICAgMDI0fHh4eFxuICAgKiAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS1cbiAgICogMDEwfDAxMSAgIDAxMnwwMTMgICAwMTR8eHh4ICAgeHh4fHh4eCAgIHh4eHx4eHggICB4eHh8eHh4XG4gICAqXG4gICAqIDEwMHwxMDEgICAxMDJ8MTAzICAgMTA0fHh4eCAgIDEyMHwxMjEgICAxMjJ8MTIzICAgMTI0fHh4eFxuICAgKiAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS1cbiAgICogMTEwfDExMSAgIDExMnwxMTMgICAxMTR8eHh4ICAgeHh4fHh4eCAgIHh4eHx4eHggICB4eHh8eHh4XG4gICAqXG4gICAqL1xuICBTSEFSRURfQkFUQ0hcbn1cblxuZXhwb3J0IGVudW0gVGV4dHVyZVVzYWdlIHtcbiAgUkVOREVSLFxuICBVUExPQUQsXG4gIFBJWEVMUyxcbiAgRE9XTkxPQURcbn1cblxuZXhwb3J0IGVudW0gUGh5c2ljYWxUZXh0dXJlVHlwZSB7XG4gIFVOUEFDS0VEX0ZMT0FUMTYsXG4gIFVOUEFDS0VEX0ZMT0FUMzIsXG4gIFBBQ0tFRF80WDFfVU5TSUdORURfQllURSxcbiAgUEFDS0VEXzJYMl9GTE9BVDMyLFxuICBQQUNLRURfMlgyX0ZMT0FUMTZcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXh0dXJlIHtcbiAgdGV4dHVyZTogV2ViR0xUZXh0dXJlO1xuICB0ZXhTaGFwZTogW251bWJlciwgbnVtYmVyXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dHVyZURhdGEge1xuICAvLyBSZXF1aXJlZC5cbiAgc2hhcGU6IG51bWJlcltdO1xuICBkdHlwZTogRGF0YVR5cGU7XG5cbiAgLy8gT3B0aW9uYWwuXG4gIHZhbHVlcz86IGJhY2tlbmRfdXRpbC5CYWNrZW5kVmFsdWVzO1xuICB0ZXh0dXJlPzogVGV4dHVyZTtcbiAgLy8gRm9yIGNvbXBsZXggbnVtYmVycywgdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBhcmUgc3RvcmVkIGFzIHRoZWlyIG93blxuICAvLyBpbmRpdmlkdWFsIHRlbnNvckluZm9zLCB3aXRoIGEgcGFyZW50IGpvaW5pbmcgdGhlIHR3byB3aXRoIHRoZVxuICAvLyBjb21wbGV4VGVuc29ycyBmaWVsZC4gV2hlbiB0aGlzIGlzIGRlZmluZWQsIHRleHR1cmUgd2lsbCBiZSBudWxsLlxuICBjb21wbGV4VGVuc29ySW5mb3M/OiB7cmVhbDogVGVuc29ySW5mbywgaW1hZzogVGVuc29ySW5mb307XG4gIC8qKiBbcm93cywgY29sdW1uc10gc2hhcGUgb2YgdGhlIHRleHR1cmUuICovXG4gIHRleFNoYXBlPzogW251bWJlciwgbnVtYmVyXTtcbiAgdXNhZ2U/OiBUZXh0dXJlVXNhZ2U7XG4gIGlzUGFja2VkPzogYm9vbGVhbjtcblxuICByZWZDb3VudDogbnVtYmVyO1xuXG4gIC8vIEF2YWlsYWJsZSB3aGVuIHRoZSB0ZW5zb3IgaGFzIGJlZW4gc2xpY2VkLlxuICBzbGljZT86IHtcbiAgICAvLyBPZmZzZXQgaW4gdGhlICdmbGF0IGluZGV4JyBzcGFjZS5cbiAgICBmbGF0T2Zmc2V0OiBudW1iZXI7XG4gICAgLy8gVXNlZCBmb3IgY291bnRpbmcgaG93IG1hbnkgc2xpY2VkIHRlbnNvcnMgcG9pbnQgdG8gdGhlIHNhbWUgdGV4dHVyZS5cbiAgICBvcmlnRGF0YUlkOiBEYXRhSWQ7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbnBhY2tlZE1hdHJpeFRleHR1cmVTaGFwZVdpZHRoSGVpZ2h0KFxuICAgIHJvd3M6IG51bWJlciwgY29sdW1uczogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIHJldHVybiBbY29sdW1ucywgcm93c107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbnBhY2tlZEFycmF5U2l6ZUZyb21NYXRyaXhTaXplKFxuICAgIG1hdHJpeFNpemU6IG51bWJlciwgY2hhbm5lbHNQZXJUZXh0dXJlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbWF0cml4U2l6ZSAqIGNoYW5uZWxzUGVyVGV4dHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yTWF0cml4VGV4dHVyZVNoYXBlV2lkdGhIZWlnaHQoXG4gICAgcm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgcmV0dXJuIFtjb2x1bW5zICogNCwgcm93c107XG59XG5cbi8qKlxuICogR2V0IHNoYXBlIGZvciBkZW5zZWx5IHBhY2tlZCBSR0JBIHRleHR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZW5zZVRleFNoYXBlKHNoYXBlOiBudW1iZXJbXSk6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBzaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgY29uc3QgdGV4ZWxzTmVlZGVkID0gTWF0aC5jZWlsKHNpemUgLyA0KTtcbiAgcmV0dXJuIHV0aWwuc2l6ZVRvU3F1YXJpc2hTaGFwZSh0ZXhlbHNOZWVkZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0cml4U2l6ZUZyb21VbnBhY2tlZEFycmF5U2l6ZShcbiAgICB1bnBhY2tlZFNpemU6IG51bWJlciwgY2hhbm5lbHNQZXJUZXh0dXJlOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodW5wYWNrZWRTaXplICUgY2hhbm5lbHNQZXJUZXh0dXJlICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgdW5wYWNrZWRTaXplICgke3VucGFja2VkU2l6ZX0pIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBgICtcbiAgICAgICAgYCR7Y2hhbm5lbHNQZXJUZXh0dXJlfWApO1xuICB9XG4gIHJldHVybiB1bnBhY2tlZFNpemUgLyBjaGFubmVsc1BlclRleHR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVNYXRyaXhGcm9tVW5wYWNrZWRDb2xvclJHQkFBcnJheShcbiAgICB1bnBhY2tlZEFycmF5OiBGbG9hdDMyQXJyYXksIG1hdHJpeDogRmxvYXQzMkFycmF5LCBjaGFubmVsczogbnVtYmVyKSB7XG4gIGNvbnN0IHJlcXVpcmVkU2l6ZSA9IHVucGFja2VkQXJyYXkubGVuZ3RoICogY2hhbm5lbHMgLyA0O1xuICBpZiAobWF0cml4Lmxlbmd0aCA8IHJlcXVpcmVkU2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1hdHJpeCBsZW5ndGggKCR7bWF0cml4Lmxlbmd0aH0pIG11c3QgYmUgPj0gJHtyZXF1aXJlZFNpemV9YCk7XG4gIH1cbiAgbGV0IGRzdCA9IDA7XG4gIGZvciAobGV0IHNyYyA9IDA7IHNyYyA8IHVucGFja2VkQXJyYXkubGVuZ3RoOyBzcmMgKz0gNCkge1xuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykge1xuICAgICAgbWF0cml4W2RzdCsrXSA9IHVucGFja2VkQXJyYXlbc3JjICsgY107XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrZWRNYXRyaXhUZXh0dXJlU2hhcGVXaWR0aEhlaWdodChcbiAgICByb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICByZXR1cm4gW1xuICAgIE1hdGgubWF4KDEsIE1hdGguY2VpbChjb2x1bW5zIC8gMikpLCBNYXRoLm1heCgxLCBNYXRoLmNlaWwocm93cyAvIDIpKVxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2VkUkdCQUFycmF5U2l6ZUZyb21NYXRyaXhTaGFwZShcbiAgICByb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IFt3LCBoXSA9IGdldFBhY2tlZE1hdHJpeFRleHR1cmVTaGFwZVdpZHRoSGVpZ2h0KHJvd3MsIGNvbHVtbnMpO1xuICByZXR1cm4gdyAqIGggKiA0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRleHR1cmVDb25maWcge1xuICBpbnRlcm5hbEZvcm1hdEZsb2F0OiBudW1iZXI7XG4gIHRleHR1cmVGb3JtYXRGbG9hdDogbnVtYmVyO1xuICBpbnRlcm5hbEZvcm1hdFBhY2tlZEhhbGZGbG9hdDogbnVtYmVyO1xuICBpbnRlcm5hbEZvcm1hdEhhbGZGbG9hdDogbnVtYmVyO1xuICBpbnRlcm5hbEZvcm1hdFBhY2tlZEZsb2F0OiBudW1iZXI7XG5cbiAgLy8gVGhlIGZvcm1hdCB0byB1c2UgZHVyaW5nIGEgZ2wucmVhZFBpeGVscyBjYWxsLlxuICBkb3dubG9hZFRleHR1cmVGb3JtYXQ6IG51bWJlcjtcbiAgLy8gSG93IG1hbnkgY2hhbm5lbHMgbmVlZCB0byBiZSB1bnBhY2tlZCBhZnRlciBhIGdsLnJlYWRQaXhlbHMgY2FsbC5cbiAgZG93bmxvYWRVbnBhY2tOdW1DaGFubmVsczogbnVtYmVyO1xuXG4gIGRlZmF1bHROdW1DaGFubmVsczogbnVtYmVyO1xuICB0ZXh0dXJlVHlwZUhhbGZGbG9hdDogbnVtYmVyO1xuICB0ZXh0dXJlVHlwZUZsb2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0dXJlQ29uZmlnKFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCB0ZXh0dXJlSGFsZkZsb2F0RXh0ZW5zaW9uPzogYW55KTogVGV4dHVyZUNvbmZpZyB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgY29uc3QgZ2xhbnkgPSBnbCBhcyBhbnk7XG5cbiAgbGV0IGludGVybmFsRm9ybWF0RmxvYXQ6IG51bWJlcjtcbiAgbGV0IGludGVybmFsRm9ybWF0SGFsZkZsb2F0OiBudW1iZXI7XG4gIGxldCBpbnRlcm5hbEZvcm1hdFBhY2tlZEhhbGZGbG9hdDogbnVtYmVyO1xuICBsZXQgaW50ZXJuYWxGb3JtYXRQYWNrZWRGbG9hdDogbnVtYmVyO1xuICBsZXQgdGV4dHVyZUZvcm1hdEZsb2F0OiBudW1iZXI7XG5cbiAgbGV0IGRvd25sb2FkVGV4dHVyZUZvcm1hdDogbnVtYmVyO1xuICBsZXQgZG93bmxvYWRVbnBhY2tOdW1DaGFubmVsczogbnVtYmVyO1xuXG4gIGxldCBkZWZhdWx0TnVtQ2hhbm5lbHM6IG51bWJlcjtcbiAgbGV0IHRleHR1cmVUeXBlSGFsZkZsb2F0OiBudW1iZXI7XG4gIGxldCB0ZXh0dXJlVHlwZUZsb2F0OiBudW1iZXI7XG5cbiAgaWYgKGVudigpLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpID09PSAyKSB7XG4gICAgaW50ZXJuYWxGb3JtYXRGbG9hdCA9IGdsYW55LlIzMkY7XG4gICAgaW50ZXJuYWxGb3JtYXRIYWxmRmxvYXQgPSBnbGFueS5SMTZGO1xuICAgIGludGVybmFsRm9ybWF0UGFja2VkSGFsZkZsb2F0ID0gZ2xhbnkuUkdCQTE2RjtcbiAgICBpbnRlcm5hbEZvcm1hdFBhY2tlZEZsb2F0ID0gZ2xhbnkuUkdCQTMyRjtcbiAgICB0ZXh0dXJlRm9ybWF0RmxvYXQgPSBnbGFueS5SRUQ7XG4gICAgZG93bmxvYWRVbnBhY2tOdW1DaGFubmVscyA9IDQ7XG4gICAgZGVmYXVsdE51bUNoYW5uZWxzID0gMTtcbiAgICB0ZXh0dXJlVHlwZUhhbGZGbG9hdCA9IGdsYW55LkhBTEZfRkxPQVQ7XG4gICAgdGV4dHVyZVR5cGVGbG9hdCA9IGdsYW55LkZMT0FUO1xuICAgIGRvd25sb2FkVGV4dHVyZUZvcm1hdCA9IGdsYW55LlJHQkE4O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsRm9ybWF0RmxvYXQgPSBnbC5SR0JBO1xuICAgIGludGVybmFsRm9ybWF0SGFsZkZsb2F0ID0gZ2wuUkdCQTtcbiAgICBpbnRlcm5hbEZvcm1hdFBhY2tlZEhhbGZGbG9hdCA9IGdsLlJHQkE7XG4gICAgaW50ZXJuYWxGb3JtYXRQYWNrZWRGbG9hdCA9IGdsYW55LlJHQkE7XG4gICAgdGV4dHVyZUZvcm1hdEZsb2F0ID0gZ2wuUkdCQTtcbiAgICBkb3dubG9hZFVucGFja051bUNoYW5uZWxzID0gNDtcbiAgICBkZWZhdWx0TnVtQ2hhbm5lbHMgPSA0O1xuICAgIHRleHR1cmVUeXBlSGFsZkZsb2F0ID0gdGV4dHVyZUhhbGZGbG9hdEV4dGVuc2lvbiAhPSBudWxsID9cbiAgICAgICAgdGV4dHVyZUhhbGZGbG9hdEV4dGVuc2lvbi5IQUxGX0ZMT0FUX09FUyA6XG4gICAgICAgIG51bGw7XG4gICAgdGV4dHVyZVR5cGVGbG9hdCA9IGdsLkZMT0FUO1xuICAgIGRvd25sb2FkVGV4dHVyZUZvcm1hdCA9IGdsLlJHQkE7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGludGVybmFsRm9ybWF0RmxvYXQsXG4gICAgaW50ZXJuYWxGb3JtYXRIYWxmRmxvYXQsXG4gICAgaW50ZXJuYWxGb3JtYXRQYWNrZWRIYWxmRmxvYXQsXG4gICAgaW50ZXJuYWxGb3JtYXRQYWNrZWRGbG9hdCxcbiAgICB0ZXh0dXJlRm9ybWF0RmxvYXQsXG4gICAgZG93bmxvYWRUZXh0dXJlRm9ybWF0LFxuICAgIGRvd25sb2FkVW5wYWNrTnVtQ2hhbm5lbHMsXG4gICAgZGVmYXVsdE51bUNoYW5uZWxzLFxuICAgIHRleHR1cmVUeXBlSGFsZkZsb2F0LFxuICAgIHRleHR1cmVUeXBlRmxvYXRcbiAgfTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, util } from '@tensorflow/tfjs-core';\nimport { getWebGLContext } from './canvas_util';\nimport { getTextureConfig } from './tex_util';\nexport function callAndCheck(gl, func) {\n const returnValue = func();\n if (env().getBool('DEBUG')) {\n checkWebGLError(gl);\n }\n return returnValue;\n}\nfunction checkWebGLError(gl) {\n const error = gl.getError();\n if (error !== gl.NO_ERROR) {\n throw new Error('WebGL Error: ' + getWebGLErrorMessage(gl, error));\n }\n}\n// https://en.wikipedia.org/wiki/Half-precision_floating-point_format\nconst MIN_FLOAT16 = 5.96e-8;\nconst MAX_FLOAT16 = 65504;\nexport function canBeRepresented(num) {\n if (env().getBool('WEBGL_RENDER_FLOAT32_ENABLED') || num === 0 ||\n (MIN_FLOAT16 < Math.abs(num) && Math.abs(num) < MAX_FLOAT16)) {\n return true;\n }\n return false;\n}\nexport function getWebGLErrorMessage(gl, status) {\n switch (status) {\n case gl.NO_ERROR:\n return 'NO_ERROR';\n case gl.INVALID_ENUM:\n return 'INVALID_ENUM';\n case gl.INVALID_VALUE:\n return 'INVALID_VALUE';\n case gl.INVALID_OPERATION:\n return 'INVALID_OPERATION';\n case gl.INVALID_FRAMEBUFFER_OPERATION:\n return 'INVALID_FRAMEBUFFER_OPERATION';\n case gl.OUT_OF_MEMORY:\n return 'OUT_OF_MEMORY';\n case gl.CONTEXT_LOST_WEBGL:\n return 'CONTEXT_LOST_WEBGL';\n default:\n return `Unknown error code ${status}`;\n }\n}\nexport function getExtensionOrThrow(gl, extensionName) {\n return throwIfNull(gl, () => gl.getExtension(extensionName), 'Extension \"' + extensionName + '\" not supported on this browser.');\n}\nexport function createVertexShader(gl, vertexShaderSource) {\n const vertexShader = throwIfNull(gl, () => gl.createShader(gl.VERTEX_SHADER), 'Unable to create vertex WebGLShader.');\n callAndCheck(gl, () => gl.shaderSource(vertexShader, vertexShaderSource));\n callAndCheck(gl, () => gl.compileShader(vertexShader));\n if (gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS) === false) {\n console.log(gl.getShaderInfoLog(vertexShader));\n throw new Error('Failed to compile vertex shader.');\n }\n return vertexShader;\n}\nexport function createFragmentShader(gl, fragmentShaderSource) {\n const fragmentShader = throwIfNull(gl, () => gl.createShader(gl.FRAGMENT_SHADER), 'Unable to create fragment WebGLShader.');\n callAndCheck(gl, () => gl.shaderSource(fragmentShader, fragmentShaderSource));\n callAndCheck(gl, () => gl.compileShader(fragmentShader));\n if (env().get('ENGINE_COMPILE_ONLY')) {\n return fragmentShader;\n }\n if (gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS) === false) {\n logShaderSourceAndInfoLog(fragmentShaderSource, gl.getShaderInfoLog(fragmentShader));\n throw new Error('Failed to compile fragment shader.');\n }\n return fragmentShader;\n}\nconst lineNumberRegex = /ERROR: [0-9]+:([0-9]+):/g;\nexport function logShaderSourceAndInfoLog(shaderSource, shaderInfoLog) {\n const lineNumberRegexResult = lineNumberRegex.exec(shaderInfoLog);\n if (lineNumberRegexResult == null) {\n console.log(`Couldn't parse line number in error: ${shaderInfoLog}`);\n console.log(shaderSource);\n return;\n }\n const lineNumber = +lineNumberRegexResult[1];\n const shaderLines = shaderSource.split('\\n');\n const pad = shaderLines.length.toString().length + 2;\n const linesWithLineNumbers = shaderLines.map((line, lineNumber) => util.rightPad((lineNumber + 1).toString(), pad) + line);\n let maxLineLength = 0;\n for (let i = 0; i < linesWithLineNumbers.length; i++) {\n maxLineLength = Math.max(linesWithLineNumbers[i].length, maxLineLength);\n }\n const beforeErrorLines = linesWithLineNumbers.slice(0, lineNumber - 1);\n const errorLine = linesWithLineNumbers.slice(lineNumber - 1, lineNumber);\n const afterErrorLines = linesWithLineNumbers.slice(lineNumber);\n console.log(beforeErrorLines.join('\\n'));\n console.log(shaderInfoLog.split('\\n')[0]);\n console.log(`%c ${util.rightPad(errorLine[0], maxLineLength)}`, 'border:1px solid red; background-color:#e3d2d2; color:#a61717');\n console.log(afterErrorLines.join('\\n'));\n}\nexport function createProgram(gl) {\n return throwIfNull(gl, () => gl.createProgram(), 'Unable to create WebGLProgram.');\n}\nexport function linkProgram(gl, program) {\n callAndCheck(gl, () => gl.linkProgram(program));\n if (env().get('ENGINE_COMPILE_ONLY')) {\n return;\n }\n if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) {\n console.log(gl.getProgramInfoLog(program));\n throw new Error('Failed to link vertex and fragment shaders.');\n }\n}\n/// validateProgram is effectively \"If we `useProgram(program); drawArrays();`,\n/// give feedback in log about perf/correctness warnings or errors that would\n/// occur.\"\n/// So make sure we set up all vertex/texture/sampler/uniform data before\n/// calling validateProgram!\nexport function validateProgram(gl, program) {\n callAndCheck(gl, () => gl.validateProgram(program));\n if (gl.getProgramParameter(program, gl.VALIDATE_STATUS) === false) {\n console.log(gl.getProgramInfoLog(program));\n throw new Error('Shader program validation failed.');\n }\n}\nexport function createStaticVertexBuffer(gl, data) {\n const buffer = throwIfNull(gl, () => gl.createBuffer(), 'Unable to create WebGLBuffer');\n callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, buffer));\n callAndCheck(gl, () => gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW));\n return buffer;\n}\nexport function createStaticIndexBuffer(gl, data) {\n const buffer = throwIfNull(gl, () => gl.createBuffer(), 'Unable to create WebGLBuffer');\n callAndCheck(gl, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer));\n callAndCheck(gl, () => gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.STATIC_DRAW));\n return buffer;\n}\nexport function getNumChannels() {\n if (env().getNumber('WEBGL_VERSION') === 2) {\n return 1;\n }\n return 4;\n}\nexport function createTexture(gl) {\n return throwIfNull(gl, () => gl.createTexture(), 'Unable to create WebGLTexture.');\n}\nexport function validateTextureSize(width, height) {\n const maxTextureSize = env().getNumber('WEBGL_MAX_TEXTURE_SIZE');\n if ((width <= 0) || (height <= 0)) {\n const requested = `[${width}x${height}]`;\n throw new Error('Requested texture size ' + requested + ' is invalid.');\n }\n if ((width > maxTextureSize) || (height > maxTextureSize)) {\n const requested = `[${width}x${height}]`;\n const max = `[${maxTextureSize}x${maxTextureSize}]`;\n throw new Error('Requested texture size ' + requested +\n ' greater than WebGL maximum on this browser / GPU ' + max + '.');\n }\n}\nexport function createFramebuffer(gl) {\n return throwIfNull(gl, () => gl.createFramebuffer(), 'Unable to create WebGLFramebuffer.');\n}\nexport function bindVertexBufferToProgramAttribute(gl, program, attribute, buffer, arrayEntriesPerItem, itemStrideInBytes, itemOffsetInBytes) {\n const loc = gl.getAttribLocation(program, attribute);\n if (loc === -1) {\n // The GPU compiler decided to strip out this attribute because it's unused,\n // thus no need to bind.\n return false;\n }\n callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, buffer));\n callAndCheck(gl, () => gl.vertexAttribPointer(loc, arrayEntriesPerItem, gl.FLOAT, false, itemStrideInBytes, itemOffsetInBytes));\n callAndCheck(gl, () => gl.enableVertexAttribArray(loc));\n return true;\n}\nexport function bindTextureUnit(gl, texture, textureUnit) {\n validateTextureUnit(gl, textureUnit);\n callAndCheck(gl, () => gl.activeTexture(gl.TEXTURE0 + textureUnit));\n callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture));\n}\nexport function unbindTextureUnit(gl, textureUnit) {\n validateTextureUnit(gl, textureUnit);\n callAndCheck(gl, () => gl.activeTexture(gl.TEXTURE0 + textureUnit));\n callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null));\n}\nexport function getProgramUniformLocationOrThrow(gl, program, uniformName) {\n return throwIfNull(gl, () => gl.getUniformLocation(program, uniformName), 'uniform \"' + uniformName + '\" not present in program.');\n}\nexport function getProgramUniformLocation(gl, program, uniformName) {\n return gl.getUniformLocation(program, uniformName);\n}\nexport function bindTextureToProgramUniformSampler(gl, texture, uniformSamplerLocation, textureUnit) {\n callAndCheck(gl, () => bindTextureUnit(gl, texture, textureUnit));\n callAndCheck(gl, () => gl.uniform1i(uniformSamplerLocation, textureUnit));\n}\nexport function bindCanvasToFramebuffer(gl) {\n callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, null));\n callAndCheck(gl, () => gl.viewport(0, 0, gl.canvas.width, gl.canvas.height));\n callAndCheck(gl, () => gl.scissor(0, 0, gl.canvas.width, gl.canvas.height));\n}\nexport function bindColorTextureToFramebuffer(gl, texture, framebuffer) {\n callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer));\n callAndCheck(gl, () => gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0));\n}\nexport function unbindColorTextureFromFramebuffer(gl, framebuffer) {\n callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer));\n callAndCheck(gl, () => gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0));\n}\nexport function validateFramebuffer(gl) {\n const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error('Error binding framebuffer: ' + getFramebufferErrorMessage(gl, status));\n }\n}\nexport function getFramebufferErrorMessage(gl, status) {\n switch (status) {\n case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'FRAMEBUFFER_INCOMPLETE_ATTACHMENT';\n case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT';\n case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'FRAMEBUFFER_INCOMPLETE_DIMENSIONS';\n case gl.FRAMEBUFFER_UNSUPPORTED:\n return 'FRAMEBUFFER_UNSUPPORTED';\n default:\n return `unknown error ${status}`;\n }\n}\nfunction throwIfNull(gl, returnTOrNull, failureMessage) {\n const tOrNull = callAndCheck(gl, () => returnTOrNull());\n if (tOrNull == null) {\n throw new Error(failureMessage);\n }\n return tOrNull;\n}\nfunction validateTextureUnit(gl, textureUnit) {\n const maxTextureUnit = gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1;\n const glTextureUnit = textureUnit + gl.TEXTURE0;\n if (glTextureUnit < gl.TEXTURE0 || glTextureUnit > maxTextureUnit) {\n const textureUnitRange = `[gl.TEXTURE0, gl.TEXTURE${maxTextureUnit}]`;\n throw new Error(`textureUnit must be in ${textureUnitRange}.`);\n }\n}\nexport function getBatchDim(shape, dimsToSkip = 2) {\n return util.sizeFromShape(shape.slice(0, shape.length - dimsToSkip));\n}\nexport function getRowsCols(shape) {\n if (shape.length === 0) {\n throw Error('Cannot get rows and columns of an empty shape array.');\n }\n return [\n shape.length > 1 ? shape[shape.length - 2] : 1, shape[shape.length - 1]\n ];\n}\nexport function getShapeAs3D(shape) {\n let shapeAs3D = [1, 1, 1];\n const isScalar = shape.length === 0 || (shape.length === 1 && shape[0] === 1);\n if (!isScalar) {\n shapeAs3D =\n [getBatchDim(shape), ...getRowsCols(shape)];\n }\n return shapeAs3D;\n}\nexport function getTextureShapeFromLogicalShape(logShape, isPacked = false) {\n let maxTexSize = env().getNumber('WEBGL_MAX_TEXTURE_SIZE');\n let maxSizeForNarrowTex = env().getNumber('WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE');\n if (maxSizeForNarrowTex === Infinity &&\n env().getBool('WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE')) {\n maxSizeForNarrowTex = maxTexSize / 2;\n }\n if (isPacked) {\n maxTexSize = maxTexSize * 2;\n maxSizeForNarrowTex = maxSizeForNarrowTex * 2;\n // This logic ensures we accurately count the number of packed texels needed\n // to accommodate the tensor. We can only pack values in the same texel if\n // they are from adjacent pairs of rows/cols within the same batch. So if a\n // tensor has 3 rows, we pretend it has 4 rows in order to account for the\n // fact that the texels containing the third row are half empty.\n logShape = logShape.map((d, i) => i >= logShape.length - 2 ?\n util.nearestLargerEven(logShape[i]) :\n logShape[i]);\n // Packed texture height is at least 2 (the channel height of a single\n // texel).\n if (logShape.length === 1) {\n logShape = [2, logShape[0]];\n }\n }\n // If logical shape is 2, we don't squeeze, since we want to match physical.\n if (logShape.length !== 2) {\n const squeezeResult = util.squeezeShape(logShape);\n logShape = squeezeResult.newShape;\n }\n let size = util.sizeFromShape(logShape);\n let textureShape = null;\n if (logShape.length <= 1 && size <= maxTexSize) {\n textureShape = [1, size];\n }\n else if (logShape.length === 2 && logShape[0] <= maxTexSize &&\n logShape[1] <= maxTexSize) {\n textureShape = logShape;\n }\n else if (logShape.length === 3 && logShape[0] * logShape[1] <= maxTexSize &&\n logShape[2] <= maxTexSize) {\n textureShape = [logShape[0] * logShape[1], logShape[2]];\n }\n else if (logShape.length === 3 && logShape[0] <= maxTexSize &&\n logShape[1] * logShape[2] <= maxTexSize) {\n textureShape = [logShape[0], logShape[1] * logShape[2]];\n }\n else if (logShape.length === 4 &&\n logShape[0] * logShape[1] * logShape[2] <= maxTexSize &&\n logShape[3] <= maxTexSize) {\n textureShape = [logShape[0] * logShape[1] * logShape[2], logShape[3]];\n }\n else if (logShape.length === 4 && logShape[0] <= maxTexSize &&\n logShape[1] * logShape[2] * logShape[3] <= maxTexSize) {\n textureShape = [logShape[0], logShape[1] * logShape[2] * logShape[3]];\n }\n // true if one edge length is 1 (1 or 2, if packed), while another edge\n // length exceeds maxSizeForNarrowTex.\n const isLongNarrowTex = textureShape != null &&\n Math.max(...textureShape) > maxSizeForNarrowTex &&\n Math.min(...textureShape) <= (isPacked ? 2 : 1) &&\n Math.min(...textureShape) > 0;\n if (textureShape == null || isLongNarrowTex) {\n if (isPacked) {\n // For packed textures size equals the number of channels required to\n // accommodate the texture data. However in order to squarify such that\n // inner dimensions stay even, we rewrite size to equal the number of\n // texels. Then in the return statement we rehydrate the squarified\n // dimensions to channel units.\n const batchDim = getBatchDim(logShape);\n let rows = 2, cols = 2;\n if (logShape.length) {\n [rows, cols] = getRowsCols(logShape);\n }\n size = batchDim * (rows / 2) * (cols / 2);\n textureShape =\n util.sizeToSquarishShape(size).map(d => d * 2);\n }\n else {\n textureShape = util.sizeToSquarishShape(size);\n }\n }\n return textureShape;\n}\nfunction isEven(n) {\n return n % 2 === 0;\n}\n/**\n * This determines whether reshaping a packed texture requires rearranging\n * the data within the texture, assuming 2x2 packing.\n */\nexport function isReshapeFree(shape1, shape2) {\n shape1 = shape1.slice(-2);\n shape2 = shape2.slice(-2);\n if (util.arraysEqual(shape1, shape2)) {\n return true;\n }\n if (!shape1.length || !shape2.length) { // One of the shapes is a scalar.\n return true;\n }\n if (shape1[0] === 0 || shape1[1] === 0 || shape2[0] === 0 ||\n shape2[1] === 0) {\n return true;\n }\n if (shape1.length !== shape2.length) { // One of the shapes is a vector.\n const shape1Cols = shape1[shape1.length - 1];\n const shape2Cols = shape2[shape2.length - 1];\n if (shape1Cols === shape2Cols) {\n return true;\n }\n if (isEven(shape1Cols) && isEven(shape2Cols) &&\n (shape1[0] === 1 || shape2[0] === 1)) {\n return true;\n }\n }\n return shape1[1] === shape2[1] && isEven(shape1[0]) && isEven(shape2[0]);\n}\n// We cache webgl params because the environment gets reset between\n// unit tests and we don't want to constantly query the WebGLContext for\n// MAX_TEXTURE_SIZE.\nlet MAX_TEXTURE_SIZE;\nlet MAX_TEXTURES_IN_SHADER;\nexport function getWebGLMaxTextureSize(webGLVersion) {\n if (MAX_TEXTURE_SIZE == null) {\n const gl = getWebGLContext(webGLVersion);\n MAX_TEXTURE_SIZE = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n }\n return MAX_TEXTURE_SIZE;\n}\nexport function resetMaxTextureSize() {\n MAX_TEXTURE_SIZE = null;\n}\nexport function resetMaxTexturesInShader() {\n MAX_TEXTURES_IN_SHADER = null;\n}\nexport function getMaxTexturesInShader(webGLVersion) {\n if (MAX_TEXTURES_IN_SHADER == null) {\n const gl = getWebGLContext(webGLVersion);\n MAX_TEXTURES_IN_SHADER = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\n }\n // We cap at 16 to avoid spurious runtime \"memory exhausted\" error.\n return Math.min(16, MAX_TEXTURES_IN_SHADER);\n}\nexport function getWebGLDisjointQueryTimerVersion(webGLVersion) {\n if (webGLVersion === 0) {\n return 0;\n }\n let queryTimerVersion;\n const gl = getWebGLContext(webGLVersion);\n if (hasExtension(gl, 'EXT_disjoint_timer_query_webgl2') &&\n webGLVersion === 2) {\n queryTimerVersion = 2;\n }\n else if (hasExtension(gl, 'EXT_disjoint_timer_query')) {\n queryTimerVersion = 1;\n }\n else {\n queryTimerVersion = 0;\n }\n return queryTimerVersion;\n}\nexport function hasExtension(gl, extensionName) {\n const ext = gl.getExtension(extensionName);\n return ext != null;\n}\nexport function isWebGLVersionEnabled(webGLVersion) {\n try {\n const gl = getWebGLContext(webGLVersion);\n if (gl != null) {\n return true;\n }\n }\n catch (e) {\n console.log('Error when getting WebGL context: ', e);\n return false;\n }\n return false;\n}\nexport function isCapableOfRenderingToFloatTexture(webGLVersion) {\n if (webGLVersion === 0) {\n return false;\n }\n const gl = getWebGLContext(webGLVersion);\n if (webGLVersion === 1) {\n if (!hasExtension(gl, 'OES_texture_float')) {\n return false;\n }\n }\n else {\n if (!hasExtension(gl, 'EXT_color_buffer_float')) {\n return false;\n }\n }\n const isFrameBufferComplete = createFloatTextureAndBindToFramebuffer(gl);\n return isFrameBufferComplete;\n}\n/**\n * Check if we can download values from a float/half-float texture.\n *\n * Note that for performance reasons we use binding a texture to a framebuffer\n * as a proxy for ability to download float values later using readPixels. The\n * texture params of this texture will not match those in readPixels exactly\n * but if we are unable to bind some kind of float texture to the frameBuffer\n * then we definitely will not be able to read float values from it.\n */\nexport function isDownloadFloatTextureEnabled(webGLVersion) {\n if (webGLVersion === 0) {\n return false;\n }\n const gl = getWebGLContext(webGLVersion);\n if (webGLVersion === 1) {\n if (!hasExtension(gl, 'OES_texture_float')) {\n return false;\n }\n if (!hasExtension(gl, 'WEBGL_color_buffer_float')) {\n return false;\n }\n }\n else {\n if (hasExtension(gl, 'EXT_color_buffer_float')) {\n return createFloatTextureAndBindToFramebuffer(gl);\n }\n const COLOR_BUFFER_HALF_FLOAT = 'EXT_color_buffer_half_float';\n if (hasExtension(gl, COLOR_BUFFER_HALF_FLOAT)) {\n const textureHalfFloatExtension = gl.getExtension(COLOR_BUFFER_HALF_FLOAT);\n return createHalfFloatTextureAndBindToFramebuffer(gl, textureHalfFloatExtension);\n }\n return false;\n }\n const isFrameBufferComplete = createFloatTextureAndBindToFramebuffer(gl);\n return isFrameBufferComplete;\n}\nfunction createFloatTextureAndBindToFramebuffer(gl) {\n const texConfig = getTextureConfig(gl);\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n const width = 1;\n const height = 1;\n gl.texImage2D(gl.TEXTURE_2D, 0, texConfig.internalFormatFloat, width, height, 0, texConfig.textureFormatFloat, texConfig.textureTypeFloat, null);\n const frameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n const isFrameBufferComplete = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(frameBuffer);\n return isFrameBufferComplete;\n}\nfunction createHalfFloatTextureAndBindToFramebuffer(\n// tslint:disable-next-line:no-any\ngl, textureHalfFloatExtension) {\n const texConfig = getTextureConfig(gl, textureHalfFloatExtension);\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n const width = 1;\n const height = 1;\n gl.texImage2D(gl.TEXTURE_2D, 0, texConfig.internalFormatHalfFloat, width, height, 0, texConfig.textureFormatFloat, texConfig.textureTypeHalfFloat, null);\n const frameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n const isFrameBufferComplete = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(frameBuffer);\n return isFrameBufferComplete;\n}\nexport function isWebGLFenceEnabled(webGLVersion) {\n if (webGLVersion !== 2) {\n return false;\n }\n const gl = getWebGLContext(webGLVersion);\n // tslint:disable-next-line:no-any\n const isEnabled = gl.fenceSync != null;\n return isEnabled;\n}\nexport function assertNotComplex(tensor, opName) {\n if (!Array.isArray(tensor)) {\n tensor = [tensor];\n }\n tensor.forEach(t => {\n if (t != null) {\n util.assert(t.dtype !== 'complex64', () => `${opName} does not support complex64 tensors ` +\n 'in the WebGL backend.');\n }\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViZ2xfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvd2ViZ2xfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUFjLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRTVDLE1BQU0sVUFBVSxZQUFZLENBQUksRUFBeUIsRUFBRSxJQUFhO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLElBQUksRUFBRSxDQUFDO0lBQzNCLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzFCLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNyQjtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxFQUF5QjtJQUNoRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNwRTtBQUNILENBQUM7QUFFRCxxRUFBcUU7QUFDckUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDO0FBQzVCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztBQUUxQixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBVztJQUMxQyxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQzFELENBQUMsV0FBVyxHQUFH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Q0FBQyxJQUFJLFVBQVUsRUFBRTtRQUMzQyxZQUFZLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pEO1NBQU0sSUFDSCxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDckIsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVTtRQUNyRCxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzdCLFlBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3ZFO1NBQU0sSUFDSCxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVTtRQUNsRCxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUU7UUFDekQsWUFBWSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkU7SUFFRCx1RUFBdUU7SUFDdkUsc0NBQXNDO0lBQ3RDLE1BQU0sZUFBZSxHQUFHLFlBQVksSUFBSSxJQUFJO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxtQkFBbUI7UUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxD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TEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtlbnYsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Z2V0V2ViR0xDb250ZXh0fSBmcm9tICcuL2NhbnZhc191dGlsJztcbmltcG9ydCB7Z2V0VGV4dHVyZUNvbmZpZ30gZnJvbSAnLi90ZXhfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsQW5kQ2hlY2s8VD4oZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgZnVuYzogKCkgPT4gVCk6IFQge1xuICBjb25zdCByZXR1cm5WYWx1ZSA9IGZ1bmMoKTtcbiAgaWYgKGVudigpLmdldEJvb2woJ0RFQlVHJykpIHtcbiAgICBjaGVja1dlYkdMRXJyb3IoZ2wpO1xuICB9XG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tXZWJHTEVycm9yKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpIHtcbiAgY29uc3QgZXJyb3IgPSBnbC5nZXRFcnJvcigpO1xuICBpZiAoZXJyb3IgIT09IGdsLk5PX0VSUk9SKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXZWJHTCBFcnJvcjogJyArIGdldFdlYkdMRXJyb3JNZXNzYWdlKGdsLCBlcnJvcikpO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhbGYtcHJlY2lzaW9uX2Zsb2F0aW5nLXBvaW50X2Zvcm1hdFxuY29uc3QgTUlOX0ZMT0FUMTYgPSA1Ljk2ZS04O1xuY29uc3QgTUFYX0ZMT0FUMTYgPSA2NTUwNDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbkJlUmVwcmVzZW50ZWQobnVtOiBudW1iZXIpOiBib29sZWFuIHtcbiAgaWYgKGVudigpLmdldEJvb2woJ1dFQkdMX1JFTkRFUl9GTE9BVDMyX0VOQUJMRUQnKSB8fCBudW0gPT09IDAgfHxcbiAgICAgIChNSU5fRkxPQVQxNiA8IE1hdGguYWJzKG51bSkgJiYgTWF0aC5hYnMobnVtKSA8IE1BWF9GTE9BVDE2KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYkdMRXJyb3JNZXNzYWdlKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIGdsLk5PX0VSUk9SOlxuICAgICAgcmV0dXJuICdOT19FUlJPUic7XG4gICAgY2FzZSBnbC5JTlZBTElEX0VOVU06XG4gICAgICByZXR1cm4gJ0lOVkFMSURfRU5VTSc7XG4gICAgY2FzZSBnbC5JTlZBTElEX1ZBTFVFOlxuICAgICAgcmV0dXJuICdJTlZBTElEX1ZBTFVFJztcbiAgICBjYXNlIGdsLklOVkFMSURfT1BFUkFUSU9OOlxuICAgICAgcmV0dXJuICdJTlZBTElEX09QRVJBVElPTic7XG4gICAgY2FzZSBnbC5JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjpcbiAgICAgIHJldHVybiAnSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04nO1xuICAgIGNhc2UgZ2wuT1VUX09GX01FTU9SWTpcbiAgICAgIHJldHVybiAnT1VUX09GX01FTU9SWSc7XG4gICAgY2FzZSBnbC5DT05URVhUX0xPU1RfV0VCR0w6XG4gICAgICByZXR1cm4gJ0NPTlRFWFRfTE9TVF9XRUJHTCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBgVW5rbm93biBlcnJvciBjb2RlICR7c3RhdHVzfWA7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbk9yVGhyb3coXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgZXh0ZW5zaW9uTmFtZTogc3RyaW5nKToge30ge1xuICByZXR1cm4gdGhyb3dJZk51bGw8e30+KFxuICAgICAgZ2wsICgpID0+IGdsLmdldEV4dGVuc2lvbihleHRlbnNpb25OYW1lKSxcbiAgICAgICdFeHRlbnNpb24gXCInICsgZXh0ZW5zaW9uTmFtZSArICdcIiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgYnJvd3Nlci4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZlcnRleFNoYWRlcihcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2U6IHN0cmluZyk6IFdlYkdMU2hhZGVyIHtcbiAgY29uc3QgdmVydGV4U2hhZGVyOiBXZWJHTFNoYWRlciA9IHRocm93SWZOdWxsPFdlYkdMU2hhZGVyPihcbiAgICAgIGdsLCAoKSA9PiBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURFUiksXG4gICAgICAnVW5hYmxlIHRvIGNyZWF0ZSB2ZXJ0ZXggV2ViR0xTaGFkZXIuJyk7XG4gIGNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlKSk7XG4gIGNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKTtcbiAgaWYgKGdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PT0gZmFsc2UpIHtcbiAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHZlcnRleFNoYWRlcikpO1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbXBpbGUgdmVydGV4IHNoYWRlci4nKTtcbiAgfVxuICByZXR1cm4gdmVydGV4U2hhZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnRTaGFkZXIoXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgZnJhZ21lbnRTaGFkZXJTb3VyY2U6IHN0cmluZyk6IFdlYkdMU2hhZGVyIHtcbiAgY29uc3QgZnJhZ21lbnRTaGFkZXI6IFdlYkdMU2hhZGVyID0gdGhyb3dJZk51bGw8V2ViR0xTaGFkZXI+KFxuICAgICAgZ2wsICgpID0+IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpLFxuICAgICAgJ1VuYWJsZSB0byBjcmVhdGUgZnJhZ21lbnQgV2ViR0xTaGFkZXIuJyk7XG4gIGNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZSkpO1xuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKTtcbiAgaWYgKGVudigpLmdldCgnRU5HSU5FX0NPTVBJTEVfT05MWScpKSB7XG4gICAgcmV0dXJuIGZyYWdtZW50U2hhZGVyO1xuICB9XG4gIGlmIChnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoZnJhZ21lbnRTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PT0gZmFsc2UpIHtcbiAgICBsb2dTaGFkZXJTb3VyY2VBbmRJbmZvTG9nKFxuICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSwgZ2wuZ2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcikpO1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbXBpbGUgZnJhZ21lbnQgc2hhZGVyLicpO1xuICB9XG4gIHJldHVybiBmcmFnbWVudFNoYWRlcjtcbn1cblxuY29uc3QgbGluZU51bWJlclJlZ2V4ID0gL0VSUk9SOiBbMC05XSs6KFswLTldKyk6L2c7XG5leHBvcnQgZnVuY3Rpb24gbG9nU2hhZGVyU291cmNlQW5kSW5mb0xvZyhcbiAgICBzaGFkZXJTb3VyY2U6IHN0cmluZywgc2hhZGVySW5mb0xvZzogc3RyaW5nKSB7XG4gIGNvbnN0IGxpbmVOdW1iZXJSZWdleFJlc3VsdCA9IGxpbmVOdW1iZXJSZWdleC5leGVjKHNoYWRlckluZm9Mb2cpO1xuICBpZiAobGluZU51bWJlclJlZ2V4UmVzdWx0ID09IG51bGwpIHtcbiAgICBjb25zb2xlLmxvZyhgQ291bGRuJ3QgcGFyc2UgbGluZSBudW1iZXIgaW4gZXJyb3I6ICR7c2hhZGVySW5mb0xvZ31gKTtcbiAgICBjb25zb2xlLmxvZyhzaGFkZXJTb3VyY2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGxpbmVOdW1iZXIgPSArbGluZU51bWJlclJlZ2V4UmVzdWx0WzFdO1xuXG4gIGNvbnN0IHNoYWRlckxpbmVzID0gc2hhZGVyU291cmNlLnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgcGFkID0gc2hhZGVyTGluZXMubGVuZ3RoLnRvU3RyaW5nKCkubGVuZ3RoICsgMjtcbiAgY29uc3QgbGluZXNXaXRoTGluZU51bWJlcnMgPSBzaGFkZXJMaW5lcy5tYXAoXG4gICAgICAobGluZSwgbGluZU51bWJlcikgPT5cbiAgICAgICAgICB1dGlsLnJpZ2h0UGFkKChsaW5lTnVtYmVyICsgMSkudG9TdHJpbmcoKSwgcGFkKSArIGxpbmUpO1xuICBsZXQgbWF4TGluZUxlbmd0aCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNXaXRoTGluZU51bWJlcnMubGVuZ3RoOyBpKyspIHtcbiAgICBtYXhMaW5lTGVuZ3RoID0gTWF0aC5tYXgobGluZXNXaXRoTGluZU51bWJlcnNbaV0ubGVuZ3RoLCBtYXhMaW5lTGVuZ3RoKTtcbiAgfVxuXG4gIGNvbnN0IGJlZm9yZUVycm9yTGluZXMgPSBsaW5lc1dpdGhMaW5lTnVtYmVycy5zbGljZSgwLCBsaW5lTnVtYmVyIC0gMSk7XG4gIGNvbnN0IGVycm9yTGluZSA9IGxpbmVzV2l0aExpbmVOdW1iZXJzLnNsaWNlKGxpbmVOdW1iZXIgLSAxLCBsaW5lTnVtYmVyKTtcbiAgY29uc3QgYWZ0ZXJFcnJvckxpbmVzID0gbGluZXNXaXRoTGluZU51bWJlcnMuc2xpY2UobGluZU51bWJlcik7XG5cbiAgY29uc29sZS5sb2coYmVmb3JlRXJyb3JMaW5lcy5qb2luKCdcXG4nKSk7XG4gIGNvbnNvbGUubG9nKHNoYWRlckluZm9Mb2cuc3BsaXQoJ1xcbicpWzBdKTtcbiAgY29uc29sZS5sb2coXG4gICAgICBgJWMgJHt1dGlsLnJpZ2h0UGFkKGVycm9yTGluZVswXSwgbWF4TGluZUxlbmd0aCl9YCxcbiAgICAgICdib3JkZXI6MXB4IHNvbGlkIHJlZDsgYmFja2dyb3VuZC1jb2xvcjojZTNkMmQyOyBjb2xvcjojYTYxNzE3Jyk7XG4gIGNvbnNvbGUubG9nKGFmdGVyRXJyb3JMaW5lcy5qb2luKCdcXG4nKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9ncmFtKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpOiBXZWJHTFByb2dyYW0ge1xuICByZXR1cm4gdGhyb3dJZk51bGw8V2ViR0xQcm9ncmFtPihcbiAgICAgIGdsLCAoKSA9PiBnbC5jcmVhdGVQcm9ncmFtKCksICdVbmFibGUgdG8gY3JlYXRlIFdlYkdMUHJvZ3JhbS4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtQcm9ncmFtKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHByb2dyYW06IFdlYkdMUHJvZ3JhbSkge1xuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pKTtcbiAgaWYgKGVudigpLmdldCgnRU5HSU5FX0NPTVBJTEVfT05MWScpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSA9PT0gZmFsc2UpIHtcbiAgICBjb25zb2xlLmxvZyhnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gbGluayB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuJyk7XG4gIH1cbn1cblxuLy8vIHZhbGlkYXRlUHJvZ3JhbSBpcyBlZmZlY3RpdmVseSBcIklmIHdlIGB1c2VQcm9ncmFtKHByb2dyYW0pOyBkcmF3QXJyYXlzKCk7YCxcbi8vLyBnaXZlIGZlZWRiYWNrIGluIGxvZyBhYm91dCBwZXJmL2NvcnJlY3RuZXNzIHdhcm5pbmdzIG9yIGVycm9ycyB0aGF0IHdvdWxkXG4vLy8gb2NjdXIuXCJcbi8vLyBTbyBtYWtlIHN1cmUgd2Ugc2V0IHVwIGFsbCB2ZXJ0ZXgvdGV4dHVyZS9zYW1wbGVyL3VuaWZvcm0gZGF0YSBiZWZvcmVcbi8vLyBjYWxsaW5nIHZhbGlkYXRlUHJvZ3JhbSFcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVByb2dyYW0oXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcHJvZ3JhbTogV2ViR0xQcm9ncmFtKSB7XG4gIGNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pKTtcbiAgaWYgKGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSA9PT0gZmFsc2UpIHtcbiAgICBjb25zb2xlLmxvZyhnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTaGFkZXIgcHJvZ3JhbSB2YWxpZGF0aW9uIGZhaWxlZC4nKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RhdGljVmVydGV4QnVmZmVyKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIGRhdGE6IEZsb2F0MzJBcnJheSk6IFdlYkdMQnVmZmVyIHtcbiAgY29uc3QgYnVmZmVyOiBXZWJHTEJ1ZmZlciA9IHRocm93SWZOdWxsPFdlYkdMQnVmZmVyPihcbiAgICAgIGdsLCAoKSA9PiBnbC5jcmVhdGVCdWZmZXIoKSwgJ1VuYWJsZSB0byBjcmVhdGUgV2ViR0xCdWZmZXInKTtcbiAgY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKSk7XG4gIGNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGdsLlNUQVRJQ19EUkFXKSk7XG4gIHJldHVybiBidWZmZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGF0aWNJbmRleEJ1ZmZlcihcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBkYXRhOiBVaW50MTZBcnJheSk6IFdlYkdMQnVmZmVyIHtcbiAgY29uc3QgYnVmZmVyOiBXZWJHTEJ1ZmZlciA9IHRocm93SWZOdWxsPFdlYkdMQnVmZmVyPihcbiAgICAgIGdsLCAoKSA9PiBnbC5jcmVhdGVCdWZmZXIoKSwgJ1VuYWJsZSB0byBjcmVhdGUgV2ViR0xCdWZmZXInKTtcbiAgY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBidWZmZXIpKTtcbiAgY2FsbEFuZENoZWNrKFxuICAgICAgZ2wsICgpID0+IGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGdsLlNUQVRJQ19EUkFXKSk7XG4gIHJldHVybiBidWZmZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1DaGFubmVscygpOiBudW1iZXIge1xuICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykgPT09IDIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gNDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRleHR1cmUoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCk6IFdlYkdMVGV4dHVyZSB7XG4gIHJldHVybiB0aHJvd0lmTnVsbDxXZWJHTFRleHR1cmU+KFxuICAgICAgZ2wsICgpID0+IGdsLmNyZWF0ZVRleHR1cmUoKSwgJ1VuYWJsZSB0byBjcmVhdGUgV2ViR0xUZXh0dXJlLicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZXh0dXJlU2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICBjb25zdCBtYXhUZXh0dXJlU2l6ZSA9IGVudigpLmdldE51bWJlcignV0VCR0xfTUFYX1RFWFRVUkVfU0laRScpO1xuICBpZiAoKHdpZHRoIDw9IDApIHx8IChoZWlnaHQgPD0gMCkpIHtcbiAgICBjb25zdCByZXF1ZXN0ZWQgPSBgWyR7d2lkdGh9eCR7aGVpZ2h0fV1gO1xuICAgIHRocm93IG5ldyBFcnJvcignUmVxdWVzdGVkIHRleHR1cmUgc2l6ZSAnICsgcmVxdWVzdGVkICsgJyBpcyBpbnZhbGlkLicpO1xuICB9XG4gIGlmICgod2lkdGggPiBtYXhUZXh0dXJlU2l6ZSkgfHwgKGhlaWdodCA+IG1heFRleHR1cmVTaXplKSkge1xuICAgIGNvbnN0IHJlcXVlc3RlZCA9IGBbJHt3aWR0aH14JHtoZWlnaHR9XWA7XG4gICAgY29uc3QgbWF4ID0gYFske21heFRleHR1cmVTaXplfXgke21heFRleHR1cmVTaXplfV1gO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlcXVlc3RlZCB0ZXh0dXJlIHNpemUgJyArIHJlcXVlc3RlZCArXG4gICAgICAgICcgZ3JlYXRlciB0aGFuIFdlYkdMIG1heGltdW0gb24gdGhpcyBicm93c2VyIC8gR1BVICcgKyBtYXggKyAnLicpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcmFtZWJ1ZmZlcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KTogV2ViR0xGcmFtZWJ1ZmZlciB7XG4gIHJldHVybiB0aHJvd0lmTnVsbDxXZWJHTEZyYW1lYnVmZmVyPihcbiAgICAgIGdsLCAoKSA9PiBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpLCAnVW5hYmxlIHRvIGNyZWF0ZSBXZWJHTEZyYW1lYnVmZmVyLicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZFZlcnRleEJ1ZmZlclRvUHJvZ3JhbUF0dHJpYnV0ZShcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBwcm9ncmFtOiBXZWJHTFByb2dyYW0sIGF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXIsIGFycmF5RW50cmllc1Blckl0ZW06IG51bWJlciwgaXRlbVN0cmlkZUluQnl0ZXM6IG51bWJlcixcbiAgICBpdGVtT2Zmc2V0SW5CeXRlczogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGxvYyA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYnV0ZSk7XG4gIGlmIChsb2MgPT09IC0xKSB7XG4gICAgLy8gVGhlIEdQVSBjb21waWxlciBkZWNpZGVkIHRvIHN0cmlwIG91dCB0aGlzIGF0dHJpYnV0ZSBiZWNhdXNlIGl0J3MgdW51c2VkLFxuICAgIC8vIHRodXMgbm8gbmVlZCB0byBiaW5kLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpKTtcbiAgY2FsbEFuZENoZWNrKFxuICAgICAgZ2wsXG4gICAgICAoKSA9PiBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKFxuICAgICAgICAgIGxvYywgYXJyYXlFbnRyaWVzUGVySXRlbSwgZ2wuRkxPQVQsIGZhbHNlLCBpdGVtU3RyaWRlSW5CeXRlcyxcbiAgICAgICAgICBpdGVtT2Zmc2V0SW5CeXRlcykpO1xuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxvYykpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRUZXh0dXJlVW5pdChcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCB0ZXh0dXJlOiBXZWJHTFRleHR1cmUsIHRleHR1cmVVbml0OiBudW1iZXIpIHtcbiAgdmFsaWRhdGVUZXh0dXJlVW5pdChnbCwgdGV4dHVyZVVuaXQpO1xuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyB0ZXh0dXJlVW5pdCkpO1xuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuYmluZFRleHR1cmVVbml0KFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHRleHR1cmVVbml0OiBudW1iZXIpIHtcbiAgdmFsaWRhdGVUZXh0dXJlVW5pdChnbCwgdGV4dHVyZVVuaXQpO1xuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyB0ZXh0dXJlVW5pdCkpO1xuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2dyYW1Vbmlmb3JtTG9jYXRpb25PclRocm93KFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHByb2dyYW06IFdlYkdMUHJvZ3JhbSxcbiAgICB1bmlmb3JtTmFtZTogc3RyaW5nKTogV2ViR0xVbmlmb3JtTG9jYXRpb24ge1xuICByZXR1cm4gdGhyb3dJZk51bGw8V2ViR0xVbmlmb3JtTG9jYXRpb24+KFxuICAgICAgZ2wsICgpID0+IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtTmFtZSksXG4gICAgICAndW5pZm9ybSBcIicgKyB1bmlmb3JtTmFtZSArICdcIiBub3QgcHJlc2VudCBpbiBwcm9ncmFtLicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvZ3JhbVVuaWZvcm1Mb2NhdGlvbihcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBwcm9ncmFtOiBXZWJHTFByb2dyYW0sXG4gICAgdW5pZm9ybU5hbWU6IHN0cmluZyk6IFdlYkdMVW5pZm9ybUxvY2F0aW9uIHtcbiAgcmV0dXJuIGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kVGV4dHVyZVRvUHJvZ3JhbVVuaWZvcm1TYW1wbGVyKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHRleHR1cmU6IFdlYkdMVGV4dHVyZSxcbiAgICB1bmlmb3JtU2FtcGxlckxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiwgdGV4dHVyZVVuaXQ6IG51bWJlcikge1xuICBjYWxsQW5kQ2hlY2soZ2wsICgpID0+IGJpbmRUZXh0dXJlVW5pdChnbCwgdGV4dHVyZSwgdGV4dHVyZVVuaXQpKTtcbiAgY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC51bmlmb3JtMWkodW5pZm9ybVNhbXBsZXJMb2NhdGlvbiwgdGV4dHVyZVVuaXQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRDYW52YXNUb0ZyYW1lYnVmZmVyKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpIHtcbiAgY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpKTtcbiAgY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC52aWV3cG9ydCgwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpKTtcbiAgY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC5zY2lzc29yKDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZENvbG9yVGV4dHVyZVRvRnJhbWVidWZmZXIoXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgdGV4dHVyZTogV2ViR0xUZXh0dXJlLFxuICAgIGZyYW1lYnVmZmVyOiBXZWJHTEZyYW1lYnVmZmVyKSB7XG4gIGNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcikpO1xuICBjYWxsQW5kQ2hlY2soXG4gICAgICBnbCxcbiAgICAgICgpID0+IGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgICAgIGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSwgMCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5iaW5kQ29sb3JUZXh0dXJlRnJvbUZyYW1lYnVmZmVyKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIGZyYW1lYnVmZmVyOiBXZWJHTEZyYW1lYnVmZmVyKSB7XG4gIGNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcikpO1xuICBjYWxsQW5kQ2hlY2soXG4gICAgICBnbCxcbiAgICAgICgpID0+IGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgICAgIGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgbnVsbCwgMCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGcmFtZWJ1ZmZlcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gIGNvbnN0IHN0YXR1cyA9IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpO1xuICBpZiAoc3RhdHVzICE9PSBnbC5GUkFNRUJVRkZFUl9DT01QTEVURSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Vycm9yIGJpbmRpbmcgZnJhbWVidWZmZXI6ICcgKyBnZXRGcmFtZWJ1ZmZlckVycm9yTWVzc2FnZShnbCwgc3RhdHVzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZyYW1lYnVmZmVyRXJyb3JNZXNzYWdlKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIGdsLkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDpcbiAgICAgIHJldHVybiAnRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UJztcbiAgICBjYXNlIGdsLkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOlxuICAgICAgcmV0dXJuICdGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCc7XG4gICAgY2FzZSBnbC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM6XG4gICAgICByZXR1cm4gJ0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyc7XG4gICAgY2FzZSBnbC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDpcbiAgICAgIHJldHVybiAnRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYHVua25vd24gZXJyb3IgJHtzdGF0dXN9YDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmTnVsbDxUPihcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCByZXR1cm5UT3JOdWxsOiAoKSA9PiBUIHwgbnVsbCxcbiAgICBmYWlsdXJlTWVzc2FnZTogc3RyaW5nKTogVCB7XG4gIGNvbnN0IHRPck51bGw6IFR8bnVsbCA9IGNhbGxBbmRDaGVjayhnbCwgKCkgPT4gcmV0dXJuVE9yTnVsbCgpKTtcbiAgaWYgKHRPck51bGwgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihmYWlsdXJlTWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIHRPck51bGw7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGV4dHVyZVVuaXQoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgdGV4dHVyZVVuaXQ6IG51bWJlcikge1xuICBjb25zdCBtYXhUZXh0dXJlVW5pdCA9IGdsLk1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIC0gMTtcbiAgY29uc3QgZ2xUZXh0dXJlVW5pdCA9IHRleHR1cmVVbml0ICsgZ2wuVEVYVFVSRTA7XG4gIGlmIChnbFRleHR1cmVVbml0IDwgZ2wuVEVYVFVSRTAgfHwgZ2xUZXh0dXJlVW5pdCA+IG1heFRleHR1cmVVbml0KSB7XG4gICAgY29uc3QgdGV4dHVyZVVuaXRSYW5nZSA9IGBbZ2wuVEVYVFVSRTAsIGdsLlRFWFRVUkUke21heFRleHR1cmVVbml0fV1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgdGV4dHVyZVVuaXQgbXVzdCBiZSBpbiAke3RleHR1cmVVbml0UmFuZ2V9LmApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXRjaERpbShzaGFwZTogbnVtYmVyW10sIGRpbXNUb1NraXAgPSAyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHV0aWwuc2l6ZUZyb21TaGFwZShzaGFwZS5zbGljZSgwLCBzaGFwZS5sZW5ndGggLSBkaW1zVG9Ta2lwKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3dzQ29scyhzaGFwZTogbnVtYmVyW10pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IEVycm9yKCdDYW5ub3QgZ2V0IHJvd3MgYW5kIGNvbHVtbnMgb2YgYW4gZW1wdHkgc2hhcGUgYXJyYXkuJyk7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHNoYXBlLmxlbmd0aCA+IDEgPyBzaGFwZVtzaGFwZS5sZW5ndGggLSAyXSA6IDEsIHNoYXBlW3NoYXBlLmxlbmd0aCAtIDFdXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFwZUFzM0Qoc2hhcGU6IG51bWJlcltdKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgbGV0IHNoYXBlQXMzRDogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzEsIDEsIDFdO1xuICBjb25zdCBpc1NjYWxhciA9IHNoYXBlLmxlbmd0aCA9PT0gMCB8fCAoc2hhcGUubGVuZ3RoID09PSAxICYmIHNoYXBlWzBdID09PSAxKTtcbiAgaWYgKCFpc1NjYWxhcikge1xuICAgIHNoYXBlQXMzRCA9XG4gICAgICAgIFtnZXRCYXRjaERpbShzaGFwZSksIC4uLmdldFJvd3NDb2xzKHNoYXBlKV0gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICB9XG4gIHJldHVybiBzaGFwZUFzM0Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0dXJlU2hhcGVGcm9tTG9naWNhbFNoYXBlKFxuICAgIGxvZ1NoYXBlOiBudW1iZXJbXSwgaXNQYWNrZWQgPSBmYWxzZSk6IFtudW1iZXIsIG51bWJlcl0ge1xuICBsZXQgbWF4VGV4U2l6ZSA9IGVudigpLmdldE51bWJlcignV0VCR0xfTUFYX1RFWFRVUkVfU0laRScpO1xuICBsZXQgbWF4U2l6ZUZvck5hcnJvd1RleCA9XG4gICAgICBlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX01BWF9TSVpFX0ZPUl9OQVJST1dfVEVYVFVSRScpO1xuICBpZiAobWF4U2l6ZUZvck5hcnJvd1RleCA9PT0gSW5maW5pdHkgJiZcbiAgICAgIGVudigpLmdldEJvb2woJ1dFQkdMX0FVVE9fU1FVQVJJRllfTkFSUk9XX1RFWFRVUkVfU0hBUEUnKSkge1xuICAgIG1heFNpemVGb3JOYXJyb3dUZXggPSBtYXhUZXhTaXplIC8gMjtcbiAgfVxuXG4gIGlmIChpc1BhY2tlZCkge1xuICAgIG1heFRleFNpemUgPSBtYXhUZXhTaXplICogMjtcbiAgICBtYXhTaXplRm9yTmFycm93VGV4ID0gbWF4U2l6ZUZvck5hcnJvd1RleCAqIDI7XG5cbiAgICAvLyBUaGlzIGxvZ2ljIGVuc3VyZXMgd2UgYWNjdXJhdGVseSBjb3VudCB0aGUgbnVtYmVyIG9mIHBhY2tlZCB0ZXhlbHMgbmVlZGVkXG4gICAgLy8gdG8gYWNjb21tb2RhdGUgdGhlIHRlbnNvci4gV2UgY2FuIG9ubHkgcGFjayB2YWx1ZXMgaW4gdGhlIHNhbWUgdGV4ZWwgaWZcbiAgICAvLyB0aGV5IGFyZSBmcm9tIGFkamFjZW50IHBhaXJzIG9mIHJvd3MvY29scyB3aXRoaW4gdGhlIHNhbWUgYmF0Y2guIFNvIGlmIGFcbiAgICAvLyB0ZW5zb3IgaGFzIDMgcm93cywgd2UgcHJldGVuZCBpdCBoYXMgNCByb3dzIGluIG9yZGVyIHRvIGFjY291bnQgZm9yIHRoZVxuICAgIC8vIGZhY3QgdGhhdCB0aGUgdGV4ZWxzIGNvbnRhaW5pbmcgdGhlIHRoaXJkIHJvdyBhcmUgaGFsZiBlbXB0eS5cbiAgICBsb2dTaGFwZSA9IGxvZ1NoYXBlLm1hcChcbiAgICAgICAgKGQsIGkpID0+IGkgPj0gbG9nU2hhcGUubGVuZ3RoIC0gMiA/XG4gICAgICAgICAgICB1dGlsLm5lYXJlc3RMYXJnZXJFdmVuKGxvZ1NoYXBlW2ldKSA6XG4gICAgICAgICAgICBsb2dTaGFwZVtpXSk7XG5cbiAgICAvLyBQYWNrZWQgdGV4dHVyZSBoZWlnaHQgaXMgYXQgbGVhc3QgMiAodGhlIGNoYW5uZWwgaGVpZ2h0IG9mIGEgc2luZ2xlXG4gICAgLy8gdGV4ZWwpLlxuICAgIGlmIChsb2dTaGFwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxvZ1NoYXBlID0gWzIsIGxvZ1NoYXBlWzBdXTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiBsb2dpY2FsIHNoYXBlIGlzIDIsIHdlIGRvbid0IHNxdWVlemUsIHNpbmNlIHdlIHdhbnQgdG8gbWF0Y2ggcGh5c2ljYWwuXG4gIGlmIChsb2dTaGFwZS5sZW5ndGggIT09IDIpIHtcbiAgICBjb25zdCBzcXVlZXplUmVzdWx0ID0gdXRpbC5zcXVlZXplU2hhcGUobG9nU2hhcGUpO1xuICAgIGxvZ1NoYXBlID0gc3F1ZWV6ZVJlc3VsdC5uZXdTaGFwZTtcbiAgfVxuXG4gIGxldCBzaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKGxvZ1NoYXBlKTtcbiAgbGV0IHRleHR1cmVTaGFwZTogW251bWJlciwgbnVtYmVyXSA9IG51bGw7XG4gIGlmIChsb2dTaGFwZS5sZW5ndGggPD0gMSAmJiBzaXplIDw9IG1heFRleFNpemUpIHtcbiAgICB0ZXh0dXJlU2hhcGUgPSBbMSwgc2l6ZV07XG4gIH0gZWxzZSBpZiAoXG4gICAgICBsb2dTaGFwZS5sZW5ndGggPT09IDIgJiYgbG9nU2hhcGVbMF0gPD0gbWF4VGV4U2l6ZSAmJlxuICAgICAgbG9nU2hhcGVbMV0gPD0gbWF4VGV4U2l6ZSkge1xuICAgIHRleHR1cmVTaGFwZSA9IGxvZ1NoYXBlIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIH0gZWxzZSBpZiAoXG4gICAgICBsb2dTaGFwZS5sZW5ndGggPT09IDMgJiYgbG9nU2hhcGVbMF0gKiBsb2dTaGFwZVsxXSA8PSBtYXhUZXhTaXplICYmXG4gICAgICBsb2dTaGFwZVsyXSA8PSBtYXhUZXhTaXplKSB7XG4gICAgdGV4dHVyZVNoYXBlID0gW2xvZ1NoYXBlWzBdICogbG9nU2hhcGVbMV0sIGxvZ1NoYXBlWzJdXTtcbiAgfSBlbHNlIGlmIChcbiAgICAgIGxvZ1NoYXBlLmxlbmd0aCA9PT0gMyAmJiBsb2dTaGFwZVswXSA8PSBtYXhUZXhTaXplICYmXG4gICAgICBsb2dTaGFwZVsxXSAqIGxvZ1NoYXBlWzJdIDw9IG1heFRleFNpemUpIHtcbiAgICB0ZXh0dXJlU2hhcGUgPSBbbG9nU2hhcGVbMF0sIGxvZ1NoYXBlWzFdICogbG9nU2hhcGVbMl1dO1xuICB9IGVsc2UgaWYgKFxuICAgICAgbG9nU2hhcGUubGVuZ3RoID09PSA0ICYmXG4gICAgICBsb2dTaGFwZVswXSAqIGxvZ1NoYXBlWzFdICogbG9nU2hhcGVbMl0gPD0gbWF4VGV4U2l6ZSAmJlxuICAgICAgbG9nU2hhcGVbM10gPD0gbWF4VGV4U2l6ZSkge1xuICAgIHRleHR1cmVTaGFwZSA9IFtsb2dTaGFwZVswXSAqIGxvZ1NoYXBlWzFdICogbG9nU2hhcGVbMl0sIGxvZ1NoYXBlWzNdXTtcbiAgfSBlbHNlIGlmIChcbiAgICAgIGxvZ1NoYXBlLmxlbmd0aCA9PT0gNCAmJiBsb2dTaGFwZVswXSA8PSBtYXhUZXhTaXplICYmXG4gICAgICBsb2dTaGFwZVsxXSAqIGxvZ1NoYXBlWzJdICogbG9nU2hhcGVbM10gPD0gbWF4VGV4U2l6ZSkge1xuICAgIHRleHR1cmVTaGFwZSA9IFtsb2dTaGFwZVswXSwgbG9nU2hhcGVbMV0gKiBsb2dTaGFwZVsyXSAqIGxvZ1NoYXBlWzNdXTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgb25lIGVkZ2UgbGVuZ3RoIGlzIDEgKDEgb3IgMiwgaWYgcGFja2VkKSwgd2hpbGUgYW5vdGhlciBlZGdlXG4gIC8vIGxlbmd0aCBleGNlZWRzIG1heFNpemVGb3JOYXJyb3dUZXguXG4gIGNvbnN0IGlzTG9uZ05hcnJvd1RleCA9IHRleHR1cmVTaGFwZSAhPSBudWxsICYmXG4gICAgICBNYXRoLm1heCguLi50ZXh0dXJlU2hhcGUpID4gbWF4U2l6ZUZvck5hcnJvd1RleCAmJlxuICAgICAgTWF0aC5taW4oLi4udGV4dHVyZVNoYXBlKSA8PSAoaXNQYWNrZWQgPyAyIDogMSkgJiZcbiAgICAgIE1hdGgubWluKC4uLnRleHR1cmVTaGFwZSkgPiAwO1xuXG4gIGlmICh0ZXh0dXJlU2hhcGUgPT0gbnVsbCB8fCBpc0xvbmdOYXJyb3dUZXgpIHtcbiAgICBpZiAoaXNQYWNrZWQpIHtcbiAgICAgIC8vIEZvciBwYWNrZWQgdGV4dHVyZXMgc2l6ZSBlcXVhbHMgdGhlIG51bWJlciBvZiBjaGFubmVscyByZXF1aXJlZCB0b1xuICAgICAgLy8gYWNjb21tb2RhdGUgdGhlIHRleHR1cmUgZGF0YS4gSG93ZXZlciBpbiBvcmRlciB0byBzcXVhcmlmeSBzdWNoIHRoYXRcbiAgICAgIC8vIGlubmVyIGRpbWVuc2lvbnMgc3RheSBldmVuLCB3ZSByZXdyaXRlIHNpemUgdG8gZXF1YWwgdGhlIG51bWJlciBvZlxuICAgICAgLy8gdGV4ZWxzLiBUaGVuIGluIHRoZSByZXR1cm4gc3RhdGVtZW50IHdlIHJlaHlkcmF0ZSB0aGUgc3F1YXJpZmllZFxuICAgICAgLy8gZGltZW5zaW9ucyB0byBjaGFubmVsIHVuaXRzLlxuXG4gICAgICBjb25zdCBiYXRjaERpbSA9IGdldEJhdGNoRGltKGxvZ1NoYXBlKTtcbiAgICAgIGxldCByb3dzID0gMiwgY29scyA9IDI7XG4gICAgICBpZiAobG9nU2hhcGUubGVuZ3RoKSB7XG4gICAgICAgIFtyb3dzLCBjb2xzXSA9IGdldFJvd3NDb2xzKGxvZ1NoYXBlKTtcbiAgICAgIH1cbiAgICAgIHNpemUgPSBiYXRjaERpbSAqIChyb3dzIC8gMikgKiAoY29scyAvIDIpO1xuICAgICAgdGV4dHVyZVNoYXBlID1cbiAgICAgICAgICB1dGlsLnNpemVUb1NxdWFyaXNoU2hhcGUoc2l6ZSkubWFwKGQgPT4gZCAqIDIpIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHR1cmVTaGFwZSA9IHV0aWwuc2l6ZVRvU3F1YXJpc2hTaGFwZShzaXplKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGV4dHVyZVNoYXBlO1xufVxuXG5mdW5jdGlvbiBpc0V2ZW4objogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBuICUgMiA9PT0gMDtcbn1cblxuLyoqXG4gKiBUaGlzIGRldGVybWluZXMgd2hldGhlciByZXNoYXBpbmcgYSBwYWNrZWQgdGV4dHVyZSByZXF1aXJlcyByZWFycmFuZ2luZ1xuICogdGhlIGRhdGEgd2l0aGluIHRoZSB0ZXh0dXJlLCBhc3N1bWluZyAyeDIgcGFja2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzaGFwZUZyZWUoc2hhcGUxOiBudW1iZXJbXSwgc2hhcGUyOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBzaGFwZTEgPSBzaGFwZTEuc2xpY2UoLTIpO1xuICBzaGFwZTIgPSBzaGFwZTIuc2xpY2UoLTIpO1xuXG4gIGlmICh1dGlsLmFycmF5c0VxdWFsKHNoYXBlMSwgc2hhcGUyKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFzaGFwZTEubGVuZ3RoIHx8ICFzaGFwZTIubGVuZ3RoKSB7ICAvLyBPbmUgb2YgdGhlIHNoYXBlcyBpcyBhIHNjYWxhci5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzaGFwZTFbMF0gPT09IDAgfHwgc2hhcGUxWzFdID09PSAwIHx8IHNoYXBlMlswXSA9PT0gMCB8fFxuICAgICAgc2hhcGUyWzFdID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc2hhcGUxLmxlbmd0aCAhPT0gc2hhcGUyLmxlbmd0aCkgeyAgLy8gT25lIG9mIHRoZSBzaGFwZXMgaXMgYSB2ZWN0b3IuXG4gICAgY29uc3Qgc2hhcGUxQ29scyA9IHNoYXBlMVtzaGFwZTEubGVuZ3RoIC0gMV07XG4gICAgY29uc3Qgc2hhcGUyQ29scyA9IHNoYXBlMltzaGFwZTIubGVuZ3RoIC0gMV07XG4gICAgaWYgKHNoYXBlMUNvbHMgPT09IHNoYXBlMkNvbHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc0V2ZW4oc2hhcGUxQ29scykgJiYgaXNFdmVuKHNoYXBlMkNvbHMpICYmXG4gICAgICAgIChzaGFwZTFbMF0gPT09IDEgfHwgc2hhcGUyWzBdID09PSAxKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBzaGFwZTFbMV0gPT09IHNoYXBlMlsxXSAmJiBpc0V2ZW4oc2hhcGUxWzBdKSAmJiBpc0V2ZW4oc2hhcGUyWzBdKTtcbn1cblxuLy8gV2UgY2FjaGUgd2ViZ2wgcGFyYW1zIGJlY2F1c2UgdGhlIGVudmlyb25tZW50IGdldHMgcmVzZXQgYmV0d2VlblxuLy8gdW5pdCB0ZXN0cyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjb25zdGFudGx5IHF1ZXJ5IHRoZSBXZWJHTENvbnRleHQgZm9yXG4vLyBNQVhfVEVYVFVSRV9TSVpFLlxubGV0IE1BWF9URVhUVVJFX1NJWkU6IG51bWJlcjtcbmxldCBNQVhfVEVYVFVSRVNfSU5fU0hBREVSOiBudW1iZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWJHTE1heFRleHR1cmVTaXplKHdlYkdMVmVyc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKE1BWF9URVhUVVJFX1NJWkUgPT0gbnVsbCkge1xuICAgIGNvbnN0IGdsID0gZ2V0V2ViR0xDb250ZXh0KHdlYkdMVmVyc2lvbik7XG4gICAgTUFYX1RFWFRVUkVfU0laRSA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9TSVpFKTtcbiAgfVxuICByZXR1cm4gTUFYX1RFWFRVUkVfU0laRTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0TWF4VGV4dHVyZVNpemUoKSB7XG4gIE1BWF9URVhUVVJFX1NJWkUgPSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0TWF4VGV4dHVyZXNJblNoYWRlcigpIHtcbiAgTUFYX1RFWFRVUkVTX0lOX1NIQURFUiA9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXhUZXh0dXJlc0luU2hhZGVyKHdlYkdMVmVyc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKE1BWF9URVhUVVJFU19JTl9TSEFERVIgPT0gbnVsbCkge1xuICAgIGNvbnN0IGdsID0gZ2V0V2ViR0xDb250ZXh0KHdlYkdMVmVyc2lvbik7XG4gICAgTUFYX1RFWFRVUkVTX0lOX1NIQURFUiA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG4gIH1cbiAgLy8gV2UgY2FwIGF0IDE2IHRvIGF2b2lkIHNwdXJpb3VzIHJ1bnRpbWUgXCJtZW1vcnkgZXhoYXVzdGVkXCIgZXJyb3IuXG4gIHJldHVybiBNYXRoLm1pbigxNiwgTUFYX1RFWFRVUkVTX0lOX1NIQURFUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWJHTERpc2pvaW50UXVlcnlUaW1lclZlcnNpb24od2ViR0xWZXJzaW9uOiBudW1iZXIpOlxuICAgIG51bWJlciB7XG4gIGlmICh3ZWJHTFZlcnNpb24gPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBxdWVyeVRpbWVyVmVyc2lvbjogbnVtYmVyO1xuICBjb25zdCBnbCA9IGdldFdlYkdMQ29udGV4dCh3ZWJHTFZlcnNpb24pO1xuXG4gIGlmIChoYXNFeHRlbnNpb24oZ2wsICdFWFRfZGlzam9pbnRfdGltZXJfcXVlcnlfd2ViZ2wyJykgJiZcbiAgICAgIHdlYkdMVmVyc2lvbiA9PT0gMikge1xuICAgIHF1ZXJ5VGltZXJWZXJzaW9uID0gMjtcbiAgfSBlbHNlIGlmIChoYXNFeHRlbnNpb24oZ2wsICdFWFRfZGlzam9pbnRfdGltZXJfcXVlcnknKSkge1xuICAgIHF1ZXJ5VGltZXJWZXJzaW9uID0gMTtcbiAgfSBlbHNlIHtcbiAgICBxdWVyeVRpbWVyVmVyc2lvbiA9IDA7XG4gIH1cbiAgcmV0dXJuIHF1ZXJ5VGltZXJWZXJzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXh0ZW5zaW9uKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIGV4dGVuc2lvbk5hbWU6IHN0cmluZykge1xuICBjb25zdCBleHQgPSBnbC5nZXRFeHRlbnNpb24oZXh0ZW5zaW9uTmFtZSk7XG4gIHJldHVybiBleHQgIT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViR0xWZXJzaW9uRW5hYmxlZCh3ZWJHTFZlcnNpb246IDF8Mikge1xuICB0cnkge1xuICAgIGNvbnN0IGdsID0gZ2V0V2ViR0xDb250ZXh0KHdlYkdMVmVyc2lvbik7XG4gICAgaWYgKGdsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGVuIGdldHRpbmcgV2ViR0wgY29udGV4dDogJywgZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FwYWJsZU9mUmVuZGVyaW5nVG9GbG9hdFRleHR1cmUod2ViR0xWZXJzaW9uOiBudW1iZXIpOlxuICAgIGJvb2xlYW4ge1xuICBpZiAod2ViR0xWZXJzaW9uID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZ2wgPSBnZXRXZWJHTENvbnRleHQod2ViR0xWZXJzaW9uKTtcblxuICBpZiAod2ViR0xWZXJzaW9uID09PSAxKSB7XG4gICAgaWYgKCFoYXNFeHRlbnNpb24oZ2wsICdPRVNfdGV4dHVyZV9mbG9hdCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghaGFzRXh0ZW5zaW9uKGdsLCAnRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNGcmFtZUJ1ZmZlckNvbXBsZXRlID0gY3JlYXRlRmxvYXRUZXh0dXJlQW5kQmluZFRvRnJhbWVidWZmZXIoZ2wpO1xuICByZXR1cm4gaXNGcmFtZUJ1ZmZlckNvbXBsZXRlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHdlIGNhbiBkb3dubG9hZCB2YWx1ZXMgZnJvbSBhIGZsb2F0L2hhbGYtZmxvYXQgdGV4dHVyZS5cbiAqXG4gKiBOb3RlIHRoYXQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgd2UgdXNlIGJpbmRpbmcgYSB0ZXh0dXJlIHRvIGEgZnJhbWVidWZmZXJcbiAqIGFzIGEgcHJveHkgZm9yIGFiaWxpdHkgdG8gZG93bmxvYWQgZmxvYXQgdmFsdWVzIGxhdGVyIHVzaW5nIHJlYWRQaXhlbHMuIFRoZVxuICogdGV4dHVyZSBwYXJhbXMgb2YgdGhpcyB0ZXh0dXJlIHdpbGwgbm90IG1hdGNoIHRob3NlIGluIHJlYWRQaXhlbHMgZXhhY3RseVxuICogYnV0IGlmIHdlIGFyZSB1bmFibGUgdG8gYmluZCBzb21lIGtpbmQgb2YgZmxvYXQgdGV4dHVyZSB0byB0aGUgZnJhbWVCdWZmZXJcbiAqIHRoZW4gd2UgZGVmaW5pdGVseSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlYWQgZmxvYXQgdmFsdWVzIGZyb20gaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rvd25sb2FkRmxvYXRUZXh0dXJlRW5hYmxlZCh3ZWJHTFZlcnNpb246IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAod2ViR0xWZXJzaW9uID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZ2wgPSBnZXRXZWJHTENvbnRleHQod2ViR0xWZXJzaW9uKTtcblxuICBpZiAod2ViR0xWZXJzaW9uID09PSAxKSB7XG4gICAgaWYgKCFoYXNFeHRlbnNpb24oZ2wsICdPRVNfdGV4dHVyZV9mbG9hdCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghaGFzRXh0ZW5zaW9uKGdsLCAnV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhhc0V4dGVuc2lvbihnbCwgJ0VYVF9jb2xvcl9idWZmZXJfZmxvYXQnKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUZsb2F0VGV4dHVyZUFuZEJpbmRUb0ZyYW1lYnVmZmVyKGdsKTtcbiAgICB9XG5cbiAgICBjb25zdCBDT0xPUl9CVUZGRVJfSEFMRl9GTE9BVCA9ICdFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQnO1xuICAgIGlmIChoYXNFeHRlbnNpb24oZ2wsIENPTE9SX0JVRkZFUl9IQUxGX0ZMT0FUKSkge1xuICAgICAgY29uc3QgdGV4dHVyZUhhbGZGbG9hdEV4dGVuc2lvbiA9XG4gICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKENPTE9SX0JVRkZFUl9IQUxGX0ZMT0FUKTtcbiAgICAgIHJldHVybiBjcmVhdGVIYWxmRmxvYXRUZXh0dXJlQW5kQmluZFRvRnJhbWVidWZmZXIoXG4gICAgICAgICAgZ2wsIHRleHR1cmVIYWxmRmxvYXRFeHRlbnNpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGlzRnJhbWVCdWZmZXJDb21wbGV0ZSA9IGNyZWF0ZUZsb2F0VGV4dHVyZUFuZEJpbmRUb0ZyYW1lYnVmZmVyKGdsKTtcbiAgcmV0dXJuIGlzRnJhbWVCdWZmZXJDb21wbGV0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmxvYXRUZXh0dXJlQW5kQmluZFRvRnJhbWVidWZmZXIoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCk6XG4gICAgYm9vbGVhbiB7XG4gIGNvbnN0IHRleENvbmZpZyA9IGdldFRleHR1cmVDb25maWcoZ2wpO1xuXG4gIGNvbnN0IHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gIGNvbnN0IHdpZHRoID0gMTtcbiAgY29uc3QgaGVpZ2h0ID0gMTtcbiAgZ2wudGV4SW1hZ2UyRChcbiAgICAgIGdsLlRFWFRVUkVfMkQsIDAsIHRleENvbmZpZy5pbnRlcm5hbEZvcm1hdEZsb2F0LCB3aWR0aCwgaGVpZ2h0LCAwLFxuICAgICAgdGV4Q29uZmlnLnRleHR1cmVGb3JtYXRGbG9hdCwgdGV4Q29uZmlnLnRleHR1cmVUeXBlRmxvYXQsIG51bGwpO1xuXG4gIGNvbnN0IGZyYW1lQnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcbiAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmcmFtZUJ1ZmZlcik7XG4gIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCB0ZXh0dXJlLCAwKTtcblxuICBjb25zdCBpc0ZyYW1lQnVmZmVyQ29tcGxldGUgPVxuICAgICAgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgPT09IGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFO1xuXG4gIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpO1xuICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuICBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZUJ1ZmZlcik7XG5cbiAgcmV0dXJuIGlzRnJhbWVCdWZmZXJDb21wbGV0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGFsZkZsb2F0VGV4dHVyZUFuZEJpbmRUb0ZyYW1lYnVmZmVyKFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCB0ZXh0dXJlSGFsZkZsb2F0RXh0ZW5zaW9uOiBhbnkpOiBib29sZWFuIHtcbiAgY29uc3QgdGV4Q29uZmlnID0gZ2V0VGV4dHVyZUNvbmZpZyhnbCwgdGV4dHVyZUhhbGZGbG9hdEV4dGVuc2lvbik7XG4gIGNvbnN0IHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gIGNvbnN0IHdpZHRoID0gMTtcbiAgY29uc3QgaGVpZ2h0ID0gMTtcbiAgZ2wudGV4SW1hZ2UyRChcbiAgICAgIGdsLlRFWFRVUkVfMkQsIDAsIHRleENvbmZpZy5pbnRlcm5hbEZvcm1hdEhhbGZGbG9hdCwgd2lkdGgsIGhlaWdodCwgMCxcbiAgICAgIHRleENvbmZpZy50ZXh0dXJlRm9ybWF0RmxvYXQsIHRleENvbmZpZy50ZXh0dXJlVHlwZUhhbGZGbG9hdCwgbnVsbCk7XG5cbiAgY29uc3QgZnJhbWVCdWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZyYW1lQnVmZmVyKTtcbiAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoXG4gICAgICBnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIDApO1xuXG4gIGNvbnN0IGlzRnJhbWVCdWZmZXJDb21wbGV0ZSA9XG4gICAgICBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSA9PT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEU7XG5cbiAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG4gIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG4gIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7XG4gIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lQnVmZmVyKTtcblxuICByZXR1cm4gaXNGcmFtZUJ1ZmZlckNvbXBsZXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWJHTEZlbmNlRW5hYmxlZCh3ZWJHTFZlcnNpb246IG51bWJlcikge1xuICBpZiAod2ViR0xWZXJzaW9uICE9PSAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGdsID0gZ2V0V2ViR0xDb250ZXh0KHdlYkdMVmVyc2lvbik7XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBjb25zdCBpc0VuYWJsZWQgPSAoZ2wgYXMgYW55KS5mZW5jZVN5bmMgIT0gbnVsbDtcbiAgcmV0dXJuIGlzRW5hYmxlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5vdENvbXBsZXgoXG4gICAgdGVuc29yOiBUZW5zb3JJbmZvfFRlbnNvckluZm9bXSwgb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHRlbnNvcikpIHtcbiAgICB0ZW5zb3IgPSBbdGVuc29yXTtcbiAgfVxuICB0ZW5zb3IuZm9yRWFjaCh0ID0+IHtcbiAgICBpZiAodCAhPSBudWxsKSB7XG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICB0LmR0eXBlICE9PSAnY29tcGxleDY0JyxcbiAgICAgICAgICAoKSA9PiBgJHtvcE5hbWV9IGRvZXMgbm90IHN1cHBvcnQgY29tcGxleDY0IHRlbnNvcnMgYCArXG4gICAgICAgICAgICAgICdpbiB0aGUgV2ViR0wgYmFja2VuZC4nKTtcbiAgICB9XG4gIH0pO1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { device_util, env } from '@tensorflow/tfjs-core';\nimport { getMaxTexturesInShader, getWebGLDisjointQueryTimerVersion, getWebGLMaxTextureSize, isCapableOfRenderingToFloatTexture, isDownloadFloatTextureEnabled, isWebGLFenceEnabled, isWebGLVersionEnabled } from './webgl_util';\nconst ENV = env();\n/**\n * This file contains WebGL-specific flag registrations.\n */\n/**\n * True if WebGL is supported.\n */\nENV.registerFlag('HAS_WEBGL', () => ENV.getNumber('WEBGL_VERSION') > 0);\n/** 0: No WebGL, 1: WebGL 1.0, 2: WebGL 2.0. */\nENV.registerFlag('WEBGL_VERSION', () => {\n if (isWebGLVersionEnabled(2)) {\n return 2;\n }\n else if (isWebGLVersionEnabled(1)) {\n return 1;\n }\n return 0;\n});\n/** Whether to check for numerical representation problems. */\nENV.registerFlag('WEBGL_CHECK_NUMERICAL_PROBLEMS', () => false);\nENV.registerFlag('WEBGL_BUFFER_SUPPORTED', () => ENV.get('WEBGL_VERSION') === 2);\n/** Whether the WebGL backend will sometimes forward ops to the CPU. */\nENV.registerFlag('WEBGL_CPU_FORWARD', () => true);\n/** Whether the WebGL backend will always use f16 textures for rendering. */\nENV.registerFlag('WEBGL_FORCE_F16_TEXTURES', () => false);\n/** Whether to turn all packing related flags on. */\nENV.registerFlag('WEBGL_PACK', () => ENV.getBool('HAS_WEBGL'));\n/** Whether we will pack the batchnormalization op. */\nENV.registerFlag('WEBGL_PACK_NORMALIZATION', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will pack the clip op. */\nENV.registerFlag('WEBGL_PACK_CLIP', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will pack the depthwise conv op. */\nENV.registerFlag('WEBGL_PACK_DEPTHWISECONV', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will pack binary ops. */\nENV.registerFlag('WEBGL_PACK_BINARY_OPERATIONS', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will pack unary ops. */\nENV.registerFlag('WEBGL_PACK_UNARY_OPERATIONS', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will pack array ops. */\nENV.registerFlag('WEBGL_PACK_ARRAY_OPERATIONS', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will pack image ops. */\nENV.registerFlag('WEBGL_PACK_IMAGE_OPERATIONS', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will pack reduce ops. */\nENV.registerFlag('WEBGL_PACK_REDUCE', () => ENV.getBool('WEBGL_PACK'));\n/** Whether packed WebGL kernels lazily unpack their outputs. */\nENV.registerFlag('WEBGL_LAZILY_UNPACK', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will use the im2col algorithm to speed up convolutions. */\nENV.registerFlag('WEBGL_CONV_IM2COL', () => ENV.getBool('WEBGL_PACK'));\n/** Whether we will pack conv2dTranspose op. */\nENV.registerFlag('WEBGL_PACK_CONV2DTRANSPOSE', () => ENV.getBool('WEBGL_PACK'));\n/** The maximum texture dimension. */\nENV.registerFlag('WEBGL_MAX_TEXTURE_SIZE', () => getWebGLMaxTextureSize(ENV.getNumber('WEBGL_VERSION')));\n/** The maximum texture dimension. */\nENV.registerFlag('WEBGL_MAX_TEXTURES_IN_SHADER', () => getMaxTexturesInShader(ENV.getNumber('WEBGL_VERSION')));\n/**\n * The disjoint_query_timer extension version.\n * 0: disabled, 1: EXT_disjoint_timer_query, 2:\n * EXT_disjoint_timer_query_webgl2.\n * In Firefox with WebGL 2.0,\n * EXT_disjoint_timer_query_webgl2 is not available, so we must use the\n * WebGL 1.0 extension.\n */\nENV.registerFlag('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION', () => {\n const webGLVersion = ENV.getNumber('WEBGL_VERSION');\n if (webGLVersion === 0) {\n return 0;\n }\n return getWebGLDisjointQueryTimerVersion(webGLVersion);\n});\n/**\n * Whether the timer object from the disjoint_query_timer extension gives\n * timing information that is reliable.\n */\nENV.registerFlag('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE', () => ENV.getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') > 0 &&\n !device_util.isMobile());\n/**\n * Whether the device is physically capable of rendering to float32 textures.\n */\nENV.registerFlag('WEBGL_RENDER_FLOAT32_CAPABLE', () => isCapableOfRenderingToFloatTexture(ENV.getNumber('WEBGL_VERSION')));\n/**\n * Whether rendering to float32 textures is enabled. If disabled, renders to\n * float16 textures.\n */\nENV.registerFlag('WEBGL_RENDER_FLOAT32_ENABLED', () => {\n return ENV.getBool('WEBGL_FORCE_F16_TEXTURES') ?\n false :\n ENV.getBool('WEBGL_RENDER_FLOAT32_CAPABLE');\n});\n/**\n * Whether downloading float textures is enabled (16 or 32 bit). If disabled,\n * uses IEEE 754 encoding of the float32 values to 4 uint8 when downloading.\n */\nENV.registerFlag('WEBGL_DOWNLOAD_FLOAT_ENABLED', () => isDownloadFloatTextureEnabled(ENV.getNumber('WEBGL_VERSION')));\n/** Whether the fence API is available. */\nENV.registerFlag('WEBGL_FENCE_API_ENABLED', () => isWebGLFenceEnabled(ENV.getNumber('WEBGL_VERSION')));\n/**\n * Tensors with size <= than this will be uploaded as uniforms, not textures.\n */\nENV.registerFlag('WEBGL_SIZE_UPLOAD_UNIFORM', () => {\n // Use uniform uploads only when 32bit floats are supported. In\n // 16bit\n // environments there are problems with comparing a 16bit texture value\n // with a 32bit uniform value.\n const useUniforms = ENV.getBool('WEBGL_RENDER_FLOAT32_ENABLED');\n return useUniforms ? 4 : 0;\n});\n/**\n * If the total number of bytes allocated on the GPU is greater than this\n * number, we will aggressively delete textures upon disposal with\n * gl.deleteMatrixTexture, rather than making them available for reuse.\n *\n * Default value -1 indicates that we will never aggressively delete textures.\n */\nENV.registerFlag('WEBGL_DELETE_TEXTURE_THRESHOLD', () => {\n return -1;\n}, threshold => {\n if (!(typeof threshold === 'number')) {\n throw new Error('WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but ' +\n `got ${threshold}.`);\n }\n if (threshold < 0 && threshold !== -1) {\n throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never ` +\n `delete) or at least 0, but got ${threshold}.`);\n }\n});\n/**\n * Trigger a manual GL command flush if the threshold of time has passed since\n * previous Kernel execution. This can be useful for Andorid device where GL\n * command flush are delayed un til the end of javascript task. This value is\n * measured in millisecond. Typically you want to set this value to close to 1.\n *\n * Default value 1 for mobile chrome, and -1 for rest cases. -1 indicates that\n * we will not enforce manual flush and depend on system default flush schedule.\n */\nENV.registerFlag('WEBGL_FLUSH_THRESHOLD', () => {\n return device_util.isMobile() ? 1 : -1;\n}, threshold => {\n if (!(typeof threshold === 'number')) {\n throw new Error('WEBGL_FLUSH_THRESHOLD must be a number but got ' +\n `${threshold}.`);\n }\n if (threshold < 0 && threshold !== -1) {\n throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never ` +\n `manual flush) or at least 0, but got ${threshold}.`);\n }\n});\n/**\n * Threshold for input tensor size that determines whether WebGL backend will\n * delegate computation to CPU.\n *\n * Default value is 128.\n */\nENV.registerFlag('CPU_HANDOFF_SIZE_THRESHOLD', () => 128);\n/** Whether we will use shapes uniforms. */\nENV.registerFlag('WEBGL_USE_SHAPES_UNIFORMS', () => false);\n/**\n * Threshold for last dimension of input tensor that determines whether\n * WebGL backend for the Top K op will delegate computation to CPU. If input\n * is smaller than threshold then CPU will be used\n *\n * Default value is 100000.\n */\nENV.registerFlag('TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD', () => 100000);\n/**\n * Threshold for K that determines whether\n * WebGL backend for the Top K op will delegate computation to CPU. If k\n * is larger than threshold then CPU will be used\n *\n * Default value is 128.\n */\nENV.registerFlag('TOPK_K_CPU_HANDOFF_THRESHOLD', () => 128);\n/** Whether we will use the experimental conv op. */\nENV.registerFlag('WEBGL_EXP_CONV', () => false);\n/**\n * If the device performance is low or if no hardware GPU is available, whether\n * software WebGL will be used.\n */\nENV.registerFlag('SOFTWARE_WEBGL_ENABLED', () => ENV.getBool('IS_TEST'));\n/**\n * For narrow texture (physical height or physical width is 1), if the length of\n * any texture edges exceed the threshold, the texture will be reshaped to be\n * more squarish.\n *\n * This flag is used to help some GPUs that could not provide correct\n * interpolations for long skinny triangles. We found Mali GPU probably has this\n * problem: https://github.com/tensorflow/tfjs/issues/6775.\n */\nENV.registerFlag('WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE', () => Infinity);\n/**\n * If the flag is set to true, the max size of the narrow texture will be auto\n * computed and it will be considerred as a threshold to reshape the narrow\n * texture to be more squarish.\n *\n * This flag is used to help some GPUs that could not provide correct\n * interpolations for long skinny triangles. We found Mali GPU probably has this\n * problem: https://github.com/tensorflow/tfjs/issues/6775.\n */\nENV.registerFlag('WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE', () => false);\n/**\n * Whether to use the customized isnan. It's only useful for webgl2 since webgl1\n * doesn't have the builtin isnan.\n */\nENV.registerFlag('WEBGL2_ISNAN_CUSTOM', () => false);\n/** Experimental flag, whether enter compile only phase. */\nENV.registerFlag('ENGINE_COMPILE_ONLY', () => false);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3Nfd2ViZ2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2ZsYWdzX3dlYmdsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxXQUFXLEVBQUUsR0FBRyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFDLHNCQUFzQixFQUFFLGlDQUFpQyxFQUFFLHNCQUFzQixFQUFFLGtDQUFrQyxFQUFFLDZCQUE2QixFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTlOLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBRWxCOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXhFLCtDQUErQztBQUMvQyxHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFDckMsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM1QixPQUFPLENBQUMsQ0FBQztLQUNWO1NBQU0sSUFBSSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNuQyxPQUFPLENBQUMsQ0FBQztLQUNWO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUMsQ0FBQztBQUVILDhEQUE4RDtBQUM5RCxHQUFHLENBQUMsWUFBWSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWhFLEdBQUcsQ0FBQyxZQUFZLENBQ1osd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FB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QUFZLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZGV2aWNlX3V0aWwsIGVudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtnZXRNYXhUZXh0dXJlc0luU2hhZGVyLCBnZXRXZWJHTERpc2pvaW50UXVlcnlUaW1lclZlcnNpb24sIGdldFdlYkdMTWF4VGV4dHVyZVNpemUsIGlzQ2FwYWJsZU9mUmVuZGVyaW5nVG9GbG9hdFRleHR1cmUsIGlzRG93bmxvYWRGbG9hdFRleHR1cmVFbmFibGVkLCBpc1dlYkdMRmVuY2VFbmFibGVkLCBpc1dlYkdMVmVyc2lvbkVuYWJsZWR9IGZyb20gJy4vd2ViZ2xfdXRpbCc7XG5cbmNvbnN0IEVOViA9IGVudigpO1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBXZWJHTC1zcGVjaWZpYyBmbGFnIHJlZ2lzdHJhdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBUcnVlIGlmIFdlYkdMIGlzIHN1cHBvcnRlZC5cbiAqL1xuRU5WLnJlZ2lzdGVyRmxhZygnSEFTX1dFQkdMJywgKCkgPT4gRU5WLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpID4gMCk7XG5cbi8qKiAwOiBObyBXZWJHTCwgMTogV2ViR0wgMS4wLCAyOiBXZWJHTCAyLjAuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9WRVJTSU9OJywgKCkgPT4ge1xuICBpZiAoaXNXZWJHTFZlcnNpb25FbmFibGVkKDIpKSB7XG4gICAgcmV0dXJuIDI7XG4gIH0gZWxzZSBpZiAoaXNXZWJHTFZlcnNpb25FbmFibGVkKDEpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59KTtcblxuLyoqIFdoZXRoZXIgdG8gY2hlY2sgZm9yIG51bWVyaWNhbCByZXByZXNlbnRhdGlvbiBwcm9ibGVtcy4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1dFQkdMX0NIRUNLX05VTUVSSUNBTF9QUk9CTEVNUycsICgpID0+IGZhbHNlKTtcblxuRU5WLnJlZ2lzdGVyRmxhZyhcbiAgICAnV0VCR0xfQlVGRkVSX1NVUFBPUlRFRCcsICgpID0+IEVOVi5nZXQoJ1dFQkdMX1ZFUlNJT04nKSA9PT0gMik7XG5cbi8qKiBXaGV0aGVyIHRoZSBXZWJHTCBiYWNrZW5kIHdpbGwgc29tZXRpbWVzIGZvcndhcmQgb3BzIHRvIHRoZSBDUFUuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9DUFVfRk9SV0FSRCcsICgpID0+IHRydWUpO1xuXG4vKiogV2hldGhlciB0aGUgV2ViR0wgYmFja2VuZCB3aWxsIGFsd2F5cyB1c2UgZjE2IHRleHR1cmVzIGZvciByZW5kZXJpbmcuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9GT1JDRV9GMTZfVEVYVFVSRVMnLCAoKSA9PiBmYWxzZSk7XG5cbi8qKiBXaGV0aGVyIHRvIHR1cm4gYWxsIHBhY2tpbmcgcmVsYXRlZCBmbGFncyBvbi4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1dFQkdMX1BBQ0snLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnSEFTX1dFQkdMJykpO1xuXG4vKiogV2hldGhlciB3ZSB3aWxsIHBhY2sgdGhlIGJhdGNobm9ybWFsaXphdGlvbiBvcC4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1dFQkdMX1BBQ0tfTk9STUFMSVpBVElPTicsICgpID0+IEVOVi5nZXRCb29sKCdXRUJHTF9QQUNLJykpO1xuXG4vKiogV2hldGhlciB3ZSB3aWxsIHBhY2sgdGhlIGNsaXAgb3AuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9QQUNLX0NMSVAnLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnV0VCR0xfUEFDSycpKTtcblxuLyoqIFdoZXRoZXIgd2Ugd2lsbCBwYWNrIHRoZSBkZXB0aHdpc2UgY29udiBvcC4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1dFQkdMX1BBQ0tfREVQVEhXSVNFQ09OVicsICgpID0+IEVOVi5nZXRCb29sKCdXRUJHTF9QQUNLJykpO1xuXG4vKiogV2hldGhlciB3ZSB3aWxsIHBhY2sgYmluYXJ5IG9wcy4gKi9cbkVOVi5yZWdpc3RlckZsYWcoXG4gICAgJ1dFQkdMX1BBQ0tfQklOQVJZX09QRVJBVElPTlMnLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnV0VCR0xfUEFDSycpKTtcblxuLyoqIFdoZXRoZXIgd2Ugd2lsbCBwYWNrIHVuYXJ5IG9wcy4gKi9cbkVOVi5yZWdpc3RlckZsYWcoXG4gICAgJ1dFQkdMX1BBQ0tfVU5BUllfT1BFUkFUSU9OUycsICgpID0+IEVOVi5nZXRCb29sKCdXRUJHTF9QQUNLJykpO1xuXG4vKiogV2hldGhlciB3ZSB3aWxsIHBhY2sgYXJyYXkgb3BzLiAqL1xuRU5WLnJlZ2lzdGVyRmxhZyhcbiAgICAnV0VCR0xfUEFDS19BUlJBWV9PUEVSQVRJT05TJywgKCkgPT4gRU5WLmdldEJvb2woJ1dFQkdMX1BBQ0snKSk7XG5cbi8qKiBXaGV0aGVyIHdlIHdpbGwgcGFjayBpbWFnZSBvcHMuICovXG5FTlYucmVnaXN0ZXJGbGFnKFxuICAgICdXRUJHTF9QQUNLX0lNQUdFX09QRVJBVElPTlMnLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnV0VCR0xfUEFDSycpKTtcblxuLyoqIFdoZXRoZXIgd2Ugd2lsbCBwYWNrIHJlZHVjZSBvcHMuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9QQUNLX1JFRFVDRScsICgpID0+IEVOVi5nZXRCb29sKCdXRUJHTF9QQUNLJykpO1xuXG4vKiogV2hldGhlciBwYWNrZWQgV2ViR0wga2VybmVscyBsYXppbHkgdW5wYWNrIHRoZWlyIG91dHB1dHMuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9MQVpJTFlfVU5QQUNLJywgKCkgPT4gRU5WLmdldEJvb2woJ1dFQkdMX1BBQ0snKSk7XG5cbi8qKiBXaGV0aGVyIHdlIHdpbGwgdXNlIHRoZSBpbTJjb2wgYWxnb3JpdGhtIHRvIHNwZWVkIHVwIGNvbnZvbHV0aW9ucy4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1dFQkdMX0NPTlZfSU0yQ09MJywgKCkgPT4gRU5WLmdldEJvb2woJ1dFQkdMX1BBQ0snKSk7XG5cbi8qKiBXaGV0aGVyIHdlIHdpbGwgcGFjayBjb252MmRUcmFuc3Bvc2Ugb3AuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9QQUNLX0NPTlYyRFRSQU5TUE9TRScsICgpID0+IEVOVi5nZXRCb29sKCdXRUJHTF9QQUNLJykpO1xuXG4vKiogVGhlIG1heGltdW0gdGV4dHVyZSBkaW1lbnNpb24uICovXG5FTlYucmVnaXN0ZXJGbGFnKFxuICAgICdXRUJHTF9NQVhfVEVYVFVSRV9TSVpFJyxcbiAgICAoKSA9PiBnZXRXZWJHTE1heFRleHR1cmVTaXplKEVOVi5nZXROdW1iZXIoJ1dFQkdMX1ZFUlNJT04nKSkpO1xuXG4vKiogVGhlIG1heGltdW0gdGV4dHVyZSBkaW1lbnNpb24uICovXG5FTlYucmVnaXN0ZXJGbGFnKFxuICAgICdXRUJHTF9NQVhfVEVYVFVSRVNfSU5fU0hBREVSJyxcbiAgICAoKSA9PiBnZXRNYXhUZXh0dXJlc0luU2hhZGVyKEVOVi5nZXROdW1iZXIoJ1dFQkdMX1ZFUlNJT04nKSkpO1xuXG4vKipcbiAqIFRoZSBkaXNqb2ludF9xdWVyeV90aW1lciBleHRlbnNpb24gdmVyc2lvbi5cbiAqIDA6IGRpc2FibGVkLCAxOiBFWFRfZGlzam9pbnRfdGltZXJfcXVlcnksIDI6XG4gKiBFWFRfZGlzam9pbnRfdGltZXJfcXVlcnlfd2ViZ2wyLlxuICogSW4gRmlyZWZveCB3aXRoIFdlYkdMIDIuMCxcbiAqIEVYVF9kaXNqb2ludF90aW1lcl9xdWVyeV93ZWJnbDIgaXMgbm90IGF2YWlsYWJsZSwgc28gd2UgbXVzdCB1c2UgdGhlXG4gKiBXZWJHTCAxLjAgZXh0ZW5zaW9uLlxuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9ESVNKT0lOVF9RVUVSWV9USU1FUl9FWFRFTlNJT05fVkVSU0lPTicsICgpID0+IHtcbiAgY29uc3Qgd2ViR0xWZXJzaW9uID0gRU5WLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpO1xuXG4gIGlmICh3ZWJHTFZlcnNpb24gPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gZ2V0V2ViR0xEaXNqb2ludFF1ZXJ5VGltZXJWZXJzaW9uKHdlYkdMVmVyc2lvbik7XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSB0aW1lciBvYmplY3QgZnJvbSB0aGUgZGlzam9pbnRfcXVlcnlfdGltZXIgZXh0ZW5zaW9uIGdpdmVzXG4gKiB0aW1pbmcgaW5mb3JtYXRpb24gdGhhdCBpcyByZWxpYWJsZS5cbiAqL1xuRU5WLnJlZ2lzdGVyRmxhZyhcbiAgICAnV0VCR0xfRElTSk9JTlRfUVVFUllfVElNRVJfRVhURU5TSU9OX1JFTElBQkxFJyxcbiAgICAoKSA9PiBFTlYuZ2V0TnVtYmVyKCdXRUJHTF9ESVNKT0lOVF9RVUVSWV9USU1FUl9FWFRFTlNJT05fVkVSU0lPTicpID4gMCAmJlxuICAgICAgICAhZGV2aWNlX3V0aWwuaXNNb2JpbGUoKSk7XG5cbi8qKlxuICogV2hldGhlciB0aGUgZGV2aWNlIGlzIHBoeXNpY2FsbHkgY2FwYWJsZSBvZiByZW5kZXJpbmcgdG8gZmxvYXQzMiB0ZXh0dXJlcy5cbiAqL1xuRU5WLnJlZ2lzdGVyRmxhZyhcbiAgICAnV0VCR0xfUkVOREVSX0ZMT0FUMzJfQ0FQQUJMRScsXG4gICAgKCkgPT4gaXNDYXBhYmxlT2ZSZW5kZXJpbmdUb0Zsb2F0VGV4dHVyZShFTlYuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykpKTtcblxuLyoqXG4gKiBXaGV0aGVyIHJlbmRlcmluZyB0byBmbG9hdDMyIHRleHR1cmVzIGlzIGVuYWJsZWQuIElmIGRpc2FibGVkLCByZW5kZXJzIHRvXG4gKiBmbG9hdDE2IHRleHR1cmVzLlxuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9SRU5ERVJfRkxPQVQzMl9FTkFCTEVEJywgKCkgPT4ge1xuICByZXR1cm4gRU5WLmdldEJvb2woJ1dFQkdMX0ZPUkNFX0YxNl9URVhUVVJFUycpID9cbiAgICAgIGZhbHNlIDpcbiAgICAgIEVOVi5nZXRCb29sKCdXRUJHTF9SRU5ERVJfRkxPQVQzMl9DQVBBQkxFJyk7XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIGRvd25sb2FkaW5nIGZsb2F0IHRleHR1cmVzIGlzIGVuYWJsZWQgKDE2IG9yIDMyIGJpdCkuIElmIGRpc2FibGVkLFxuICogdXNlcyBJRUVFIDc1NCBlbmNvZGluZyBvZiB0aGUgZmxvYXQzMiB2YWx1ZXMgdG8gNCB1aW50OCB3aGVuIGRvd25sb2FkaW5nLlxuICovXG5FTlYucmVnaXN0ZXJGbGFnKFxuICAgICdXRUJHTF9ET1dOTE9BRF9GTE9BVF9FTkFCTEVEJyxcbiAgICAoKSA9PiBpc0Rvd25sb2FkRmxvYXRUZXh0dXJlRW5hYmxlZChFTlYuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykpKTtcblxuLyoqIFdoZXRoZXIgdGhlIGZlbmNlIEFQSSBpcyBhdmFpbGFibGUuICovXG5FTlYucmVnaXN0ZXJGbGFnKFxuICAgICdXRUJHTF9GRU5DRV9BUElfRU5BQkxFRCcsXG4gICAgKCkgPT4gaXNXZWJHTEZlbmNlRW5hYmxlZChFTlYuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykpKTtcblxuLyoqXG4gKiBUZW5zb3JzIHdpdGggc2l6ZSA8PSB0aGFuIHRoaXMgd2lsbCBiZSB1cGxvYWRlZCBhcyB1bmlmb3Jtcywgbm90IHRleHR1cmVzLlxuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9TSVpFX1VQTE9BRF9VTklGT1JNJywgKCkgPT4ge1xuICAvLyBVc2UgdW5pZm9ybSB1cGxvYWRzIG9ubHkgd2hlbiAzMmJpdCBmbG9hdHMgYXJlIHN1cHBvcnRlZC4gSW5cbiAgLy8gMTZiaXRcbiAgLy8gZW52aXJvbm1lbnRzIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIGNvbXBhcmluZyBhIDE2Yml0IHRleHR1cmUgdmFsdWVcbiAgLy8gd2l0aCBhIDMyYml0IHVuaWZvcm0gdmFsdWUuXG4gIGNvbnN0IHVzZVVuaWZvcm1zID0gRU5WLmdldEJvb2woJ1dFQkdMX1JFTkRFUl9GTE9BVDMyX0VOQUJMRUQnKTtcbiAgcmV0dXJuIHVzZVVuaWZvcm1zID8gNCA6IDA7XG59KTtcblxuLyoqXG4gKiBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBvbiB0aGUgR1BVIGlzIGdyZWF0ZXIgdGhhbiB0aGlzXG4gKiBudW1iZXIsIHdlIHdpbGwgYWdncmVzc2l2ZWx5IGRlbGV0ZSB0ZXh0dXJlcyB1cG9uIGRpc3Bvc2FsIHdpdGhcbiAqIGdsLmRlbGV0ZU1hdHJpeFRleHR1cmUsIHJhdGhlciB0aGFuIG1ha2luZyB0aGVtIGF2YWlsYWJsZSBmb3IgcmV1c2UuXG4gKlxuICogRGVmYXVsdCB2YWx1ZSAtMSBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGFnZ3Jlc3NpdmVseSBkZWxldGUgdGV4dHVyZXMuXG4gKi9cbkVOVi5yZWdpc3RlckZsYWcoXG4gICAgJ1dFQkdMX0RFTEVURV9URVhUVVJFX1RIUkVTSE9MRCcsXG4gICAgKCkgPT4ge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0sXG4gICAgdGhyZXNob2xkID0+IHtcbiAgICAgIGlmICghKHR5cGVvZiB0aHJlc2hvbGQgPT09ICdudW1iZXInKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dFQkdMX0RFTEVURV9URVhUVVJFX1RIUkVTSE9MRCBtdXN0IGJlIGEgbnVtYmVyIGJ1dCAnICtcbiAgICAgICAgICAgIGBnb3QgJHt0aHJlc2hvbGR9LmApO1xuICAgICAgfVxuICAgICAgaWYgKHRocmVzaG9sZCA8IDAgJiYgdGhyZXNob2xkICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgV0VCR0xfREVMRVRFX1RFWFRVUkVfVEhSRVNIT0xEIG11c3QgYmUgLTEgKGluZGljYXRpbmcgbmV2ZXIgYCArXG4gICAgICAgICAgICBgZGVsZXRlKSBvciBhdCBsZWFzdCAwLCBidXQgZ290ICR7dGhyZXNob2xkfS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuLyoqXG4gKiBUcmlnZ2VyIGEgbWFudWFsIEdMIGNvbW1hbmQgZmx1c2ggaWYgdGhlIHRocmVzaG9sZCBvZiB0aW1lIGhhcyBwYXNzZWQgc2luY2VcbiAqIHByZXZpb3VzIEtlcm5lbCBleGVjdXRpb24uIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgQW5kb3JpZCBkZXZpY2Ugd2hlcmUgR0xcbiAqIGNvbW1hbmQgZmx1c2ggYXJlIGRlbGF5ZWQgdW4gdGlsIHRoZSBlbmQgb2YgamF2YXNjcmlwdCB0YXNrLiBUaGlzIHZhbHVlIGlzXG4gKiBtZWFzdXJlZCBpbiBtaWxsaXNlY29uZC4gVHlwaWNhbGx5IHlvdSB3YW50IHRvIHNldCB0aGlzIHZhbHVlIHRvIGNsb3NlIHRvIDEuXG4gKlxuICogRGVmYXVsdCB2YWx1ZSAxIGZvciBtb2JpbGUgY2hyb21lLCBhbmQgLTEgZm9yIHJlc3QgY2FzZXMuIC0xIGluZGljYXRlcyB0aGF0XG4gKiB3ZSB3aWxsIG5vdCBlbmZvcmNlIG1hbnVhbCBmbHVzaCBhbmQgZGVwZW5kIG9uIHN5c3RlbSBkZWZhdWx0IGZsdXNoIHNjaGVkdWxlLlxuICovXG5FTlYucmVnaXN0ZXJGbGFnKFxuICAgICdXRUJHTF9GTFVTSF9USFJFU0hPTEQnLFxuICAgICgpID0+IHtcbiAgICAgIHJldHVybiBkZXZpY2VfdXRpbC5pc01vYmlsZSgpID8gMSA6IC0xO1xuICAgIH0sXG4gICAgdGhyZXNob2xkID0+IHtcbiAgICAgIGlmICghKHR5cGVvZiB0aHJlc2hvbGQgPT09ICdudW1iZXInKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dFQkdMX0ZMVVNIX1RIUkVTSE9MRCBtdXN0IGJlIGEgbnVtYmVyIGJ1dCBnb3QgJyArXG4gICAgICAgICAgICBgJHt0aHJlc2hvbGR9LmApO1xuICAgICAgfVxuICAgICAgaWYgKHRocmVzaG9sZCA8IDAgJiYgdGhyZXNob2xkICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgV0VCR0xfRkxVU0hfVEhSRVNIT0xEIG11c3QgYmUgLTEgKGluZGljYXRpbmcgbmV2ZXIgYCArXG4gICAgICAgICAgICBgbWFudWFsIGZsdXNoKSBvciBhdCBsZWFzdCAwLCBidXQgZ290ICR7dGhyZXNob2xkfS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuLyoqXG4gKiBUaHJlc2hvbGQgZm9yIGlucHV0IHRlbnNvciBzaXplIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIFdlYkdMIGJhY2tlbmQgd2lsbFxuICogZGVsZWdhdGUgY29tcHV0YXRpb24gdG8gQ1BVLlxuICpcbiAqIERlZmF1bHQgdmFsdWUgaXMgMTI4LlxuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdDUFVfSEFORE9GRl9TSVpFX1RIUkVTSE9MRCcsICgpID0+IDEyOCk7XG5cbi8qKiBXaGV0aGVyIHdlIHdpbGwgdXNlIHNoYXBlcyB1bmlmb3Jtcy4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1dFQkdMX1VTRV9TSEFQRVNfVU5JRk9STVMnLCAoKSA9PiBmYWxzZSk7XG5cbi8qKlxuICogVGhyZXNob2xkIGZvciBsYXN0IGRpbWVuc2lvbiBvZiBpbnB1dCB0ZW5zb3IgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXJcbiAqIFdlYkdMIGJhY2tlbmQgZm9yIHRoZSBUb3AgSyBvcCB3aWxsIGRlbGVnYXRlIGNvbXB1dGF0aW9uIHRvIENQVS4gSWYgaW5wdXRcbiAqIGlzIHNtYWxsZXIgdGhhbiB0aHJlc2hvbGQgdGhlbiBDUFUgd2lsbCBiZSB1c2VkXG4gKlxuICogRGVmYXVsdCB2YWx1ZSBpcyAxMDAwMDAuXG4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1RPUEtfTEFTVF9ESU1fQ1BVX0hBTkRPRkZfU0laRV9USFJFU0hPTEQnLCAoKSA9PiAxMDAwMDApO1xuXG4vKipcbiAqIFRocmVzaG9sZCBmb3IgSyB0aGF0IGRldGVybWluZXMgd2hldGhlclxuICogV2ViR0wgYmFja2VuZCBmb3IgdGhlIFRvcCBLIG9wIHdpbGwgZGVsZWdhdGUgY29tcHV0YXRpb24gdG8gQ1BVLiBJZiBrXG4gKiBpcyBsYXJnZXIgdGhhbiB0aHJlc2hvbGQgdGhlbiBDUFUgd2lsbCBiZSB1c2VkXG4gKlxuICogRGVmYXVsdCB2YWx1ZSBpcyAxMjguXG4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1RPUEtfS19DUFVfSEFORE9GRl9USFJFU0hPTEQnLCAoKSA9PiAxMjgpO1xuXG4vKiogV2hldGhlciB3ZSB3aWxsIHVzZSB0aGUgZXhwZXJpbWVudGFsIGNvbnYgb3AuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTF9FWFBfQ09OVicsICgpID0+IGZhbHNlKTtcblxuLyoqXG4gKiBJZiB0aGUgZGV2aWNlIHBlcmZvcm1hbmNlIGlzIGxvdyBvciBpZiBubyBoYXJkd2FyZSBHUFUgaXMgYXZhaWxhYmxlLCB3aGV0aGVyXG4gKiBzb2Z0d2FyZSBXZWJHTCB3aWxsIGJlIHVzZWQuXG4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1NPRlRXQVJFX1dFQkdMX0VOQUJMRUQnLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnSVNfVEVTVCcpKTtcblxuLyoqXG4gKiBGb3IgbmFycm93IHRleHR1cmUgKHBoeXNpY2FsIGhlaWdodCBvciBwaHlzaWNhbCB3aWR0aCBpcyAxKSwgaWYgdGhlIGxlbmd0aCBvZlxuICogYW55IHRleHR1cmUgZWRnZXMgZXhjZWVkIHRoZSB0aHJlc2hvbGQsIHRoZSB0ZXh0dXJlIHdpbGwgYmUgcmVzaGFwZWQgdG8gYmVcbiAqIG1vcmUgc3F1YXJpc2guXG4gKlxuICogVGhpcyBmbGFnIGlzIHVzZWQgdG8gaGVscCBzb21lIEdQVXMgdGhhdCBjb3VsZCBub3QgcHJvdmlkZSBjb3JyZWN0XG4gKiBpbnRlcnBvbGF0aW9ucyBmb3IgbG9uZyBza2lubnkgdHJpYW5nbGVzLiBXZSBmb3VuZCBNYWxpIEdQVSBwcm9iYWJseSBoYXMgdGhpc1xuICogcHJvYmxlbTogaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGZqcy9pc3N1ZXMvNjc3NS5cbiAqL1xuRU5WLnJlZ2lzdGVyRmxhZygnV0VCR0xfTUFYX1NJWkVfRk9SX05BUlJPV19URVhUVVJFJywgKCkgPT4gSW5maW5pdHkpO1xuXG4vKipcbiAqIElmIHRoZSBmbGFnIGlzIHNldCB0byB0cnVlLCB0aGUgbWF4IHNpemUgb2YgdGhlIG5hcnJvdyB0ZXh0dXJlIHdpbGwgYmUgYXV0b1xuICogY29tcHV0ZWQgYW5kIGl0IHdpbGwgYmUgY29uc2lkZXJyZWQgYXMgYSB0aHJlc2hvbGQgdG8gcmVzaGFwZSB0aGUgbmFycm93XG4gKiB0ZXh0dXJlIHRvIGJlIG1vcmUgc3F1YXJpc2guXG4gKlxuICogVGhpcyBmbGFnIGlzIHVzZWQgdG8gaGVscCBzb21lIEdQVXMgdGhhdCBjb3VsZCBub3QgcHJvdmlkZSBjb3JyZWN0XG4gKiBpbnRlcnBvbGF0aW9ucyBmb3IgbG9uZyBza2lubnkgdHJpYW5nbGVzLiBXZSBmb3VuZCBNYWxpIEdQVSBwcm9iYWJseSBoYXMgdGhpc1xuICogcHJvYmxlbTogaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGZqcy9pc3N1ZXMvNjc3NS5cbiAqL1xuRU5WLnJlZ2lzdGVyRmxhZygnV0VCR0xfQVVUT19TUVVBUklGWV9OQVJST1dfVEVYVFVSRV9TSEFQRScsICgpID0+IGZhbHNlKTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIHVzZSB0aGUgY3VzdG9taXplZCBpc25hbi4gSXQncyBvbmx5IHVzZWZ1bCBmb3Igd2ViZ2wyIHNpbmNlIHdlYmdsMVxuICogZG9lc24ndCBoYXZlIHRoZSBidWlsdGluIGlzbmFuLlxuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXRUJHTDJfSVNOQU5fQ1VTVE9NJywgKCkgPT4gZmFsc2UpO1xuXG4vKiogRXhwZXJpbWVudGFsIGZsYWcsIHdoZXRoZXIgZW50ZXIgY29tcGlsZSBvbmx5IHBoYXNlLiAqL1xuRU5WLnJlZ2lzdGVyRmxhZygnRU5HSU5FX0NPTVBJTEVfT05MWScsICgpID0+IGZhbHNlKTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nexport function getGlslDifferences() {\n let version;\n let attribute;\n let varyingVs;\n let varyingFs;\n let texture2D;\n let output;\n let defineOutput;\n let defineSpecialNaN;\n let defineSpecialInf;\n let defineRound;\n if (env().getNumber('WEBGL_VERSION') === 2) {\n version = '#version 300 es';\n attribute = 'in';\n varyingVs = 'out';\n varyingFs = 'in';\n texture2D = 'texture';\n output = 'outputColor';\n defineOutput = 'out vec4 outputColor;';\n // Use custom isnan definition to work across differences between\n // implementations on various platforms. While this should happen in ANGLE\n // we still see differences between android and windows (on chrome) when\n // using isnan directly. Since WebGL2 supports uint type and\n // floatBitsToUinT built-in function, we could implment isnan following\n // IEEE 754 rules.\n // NaN defination in IEEE 754-1985 is :\n // - sign = either 0 or 1.\n // - biased exponent = all 1 bits.\n // - fraction = anything except all 0 bits (since all 0 bits represents\n // infinity).\n // https://en.wikipedia.org/wiki/IEEE_754-1985#Representation_of_non-numbers\n defineSpecialNaN = env().getBool('WEBGL2_ISNAN_CUSTOM') ? `\n bool isnan_custom(float val) {\n uint floatToUint = floatBitsToUint(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\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 ` :\n '';\n // In webgl 2 we do not need to specify a custom isinf so there is no\n // need for a special INFINITY constant.\n defineSpecialInf = ``;\n 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 `;\n }\n else {\n version = '';\n attribute = 'attribute';\n varyingVs = 'varying';\n varyingFs = 'varying';\n texture2D = 'texture2D';\n output = 'gl_FragColor';\n defineOutput = '';\n // WebGL1 has no built in isnan so we define one here.\n 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 `;\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 `;\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 `;\n }\n return {\n version,\n attribute,\n varyingVs,\n varyingFs,\n texture2D,\n output,\n defineOutput,\n defineSpecialNaN,\n defineSpecialInf,\n defineRound\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xzbF92ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9nbHNsX3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBZTFDLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsSUFBSSxPQUFlLENBQUM7SUFDcEIsSUFBSSxTQUFpQixDQUFDO0lBQ3RCLElBQUksU0FBaUIsQ0FBQztJQUN0QixJQUFJLFNBQWlCLENBQUM7SUFDdEIsSUFBSSxTQUFpQixDQUFDO0lBQ3RCLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksWUFBb0IsQ0FBQztJQUN6QixJQUFJLGdCQUF3QixDQUFDO0lBQzdCLElBQUksZ0JBQXdCLENBQUM7SUFDN0IsSUFBSSxXQUFtQixDQUFDO0lBRXhCLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMxQyxPQUFPLEdBQUcsaUJBQWlCLENBQUM7UUFDNUIsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QixNQUFNLEdBQUcsYUFBYSxDQUFDO1FBQ3ZCLFlBQVksR0FBRyx1QkFBdUIsQ0FBQztRQUV2QyxpRUFBaUU7UUFDakUsMEVBQTBFO1FBQzFFLHdFQUF3RTtRQUN4RSw0REFBNEQ7UUFDNUQsdUVBQXVFO1FBQ3ZFLGtCQUFrQjtRQUNsQix1Q0FBdUM7UUFDdkMsNEJBQTRCO1FBQzVCLG9DQUFvQztRQUNwQyx5RUFBeUU7UUFDekUsZUFBZTtRQUNmLDRFQUE0RTtRQUM1RSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7OztLQVl6RCxDQUFDLENBQUM7WUFDdUQsRUFBRSxDQUFDO1FBQzdELHFFQUFxRTtRQUNyRSx3Q0FBd0M7UUFDeEMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLFdBQVcsR0FBRzs7Ozs7Ozs7O0tBU2IsQ0FBQztLQUNIO1NBQU07UUFDTCxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUN4QixTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdEIsU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUN4QixNQUFNLEdBQUcsY0FBYyxDQUFDO1FBQ3hCLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsc0RBQXNEO1FBQ3RELGdCQUFnQixHQUFHOzs7Ozs7OztLQVFsQixDQUFDO1FBQ0YsZ0JBQWdCLEdBQUc7Ozs7Ozs7OztLQVNsQixDQUFDO1FBQ0YsV0FBVyxHQUFHOzs7Ozs7OztLQVFiLENBQUM7S0FDSDtJQUVELE9BQU87UUFDTCxPQUFPO1FBQ1AsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULE1BQU07UUFDTixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixXQUFXO0tBQ1osQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge2Vudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IHR5cGUgR0xTTCA9IHtcbiAgdmVyc2lvbjogc3RyaW5nLFxuICBhdHRyaWJ1dGU6IHN0cmluZyxcbiAgdmFyeWluZ1ZzOiBzdHJpbmcsXG4gIHZhcnlpbmdGczogc3RyaW5nLFxuICB0ZXh0dXJlMkQ6IHN0cmluZyxcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIGRlZmluZU91dHB1dDogc3RyaW5nLFxuICBkZWZpbmVTcGVjaWFsTmFOOiBzdHJpbmcsXG4gIGRlZmluZVNwZWNpYWxJbmY6IHN0cmluZyxcbiAgZGVmaW5lUm91bmQ6IHN0cmluZ1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsc2xEaWZmZXJlbmNlcygpOiBHTFNMIHtcbiAgbGV0IHZlcnNpb246IHN0cmluZztcbiAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nO1xuICBsZXQgdmFyeWluZ1ZzOiBzdHJpbmc7XG4gIGxldCB2YXJ5aW5nRnM6IHN0cmluZztcbiAgbGV0IHRleHR1cmUyRDogc3RyaW5nO1xuICBsZXQgb3V0cHV0OiBzdHJpbmc7XG4gIGxldCBkZWZpbmVPdXRwdXQ6IHN0cmluZztcbiAgbGV0IGRlZmluZVNwZWNpYWxOYU46IHN0cmluZztcbiAgbGV0IGRlZmluZVNwZWNpYWxJbmY6IHN0cmluZztcbiAgbGV0IGRlZmluZVJvdW5kOiBzdHJpbmc7XG5cbiAgaWYgKGVudigpLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpID09PSAyKSB7XG4gICAgdmVyc2lvbiA9ICcjdmVyc2lvbiAzMDAgZXMnO1xuICAgIGF0dHJpYnV0ZSA9ICdpbic7XG4gICAgdmFyeWluZ1ZzID0gJ291dCc7XG4gICAgdmFyeWluZ0ZzID0gJ2luJztcbiAgICB0ZXh0dXJlMkQgPSAndGV4dHVyZSc7XG4gICAgb3V0cHV0ID0gJ291dHB1dENvbG9yJztcbiAgICBkZWZpbmVPdXRwdXQgPSAnb3V0IHZlYzQgb3V0cHV0Q29sb3I7JztcblxuICAgIC8vIFVzZSBjdXN0b20gaXNuYW4gZGVmaW5pdGlvbiB0byB3b3JrIGFjcm9zcyBkaWZmZXJlbmNlcyBiZXR3ZWVuXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIG9uIHZhcmlvdXMgcGxhdGZvcm1zLiBXaGlsZSB0aGlzIHNob3VsZCBoYXBwZW4gaW4gQU5HTEVcbiAgICAvLyB3ZSBzdGlsbCBzZWUgZGlmZmVyZW5jZXMgYmV0d2VlbiBhbmRyb2lkIGFuZCB3aW5kb3dzIChvbiBjaHJvbWUpIHdoZW5cbiAgICAvLyB1c2luZyBpc25hbiBkaXJlY3RseS4gU2luY2UgV2ViR0wyIHN1cHBvcnRzIHVpbnQgdHlwZSBhbmRcbiAgICAvLyBmbG9hdEJpdHNUb1VpblQgYnVpbHQtaW4gZnVuY3Rpb24sIHdlIGNvdWxkIGltcGxtZW50IGlzbmFuIGZvbGxvd2luZ1xuICAgIC8vIElFRUUgNzU0IHJ1bGVzLlxuICAgIC8vIE5hTiBkZWZpbmF0aW9uIGluIElFRUUgNzU0LTE5ODUgaXMgOlxuICAgIC8vICAgLSBzaWduID0gZWl0aGVyIDAgb3IgMS5cbiAgICAvLyAgIC0gYmlhc2VkIGV4cG9uZW50ID0gYWxsIDEgYml0cy5cbiAgICAvLyAgIC0gZnJhY3Rpb24gPSBhbnl0aGluZyBleGNlcHQgYWxsIDAgYml0cyAoc2luY2UgYWxsIDAgYml0cyByZXByZXNlbnRzXG4gICAgLy8gICBpbmZpbml0eSkuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSUVFRV83NTQtMTk4NSNSZXByZXNlbnRhdGlvbl9vZl9ub24tbnVtYmVyc1xuICAgIGRlZmluZVNwZWNpYWxOYU4gPSBlbnYoKS5nZXRCb29sKCdXRUJHTDJfSVNOQU5fQ1VTVE9NJykgPyBgXG4gICAgICBib29sIGlzbmFuX2N1c3RvbShmbG9hdCB2YWwpIHtcbiAgICAgICAgdWludCBmbG9hdFRvVWludCA9IGZsb2F0Qml0c1RvVWludCh2YWwpO1xuICAgICAgICByZXR1cm4gKGZsb2F0VG9VaW50ICYgMHg3ZmZmZmZmZnUpID4gMHg3ZjgwMDAwMHU7XG4gICAgICB9XG5cbiAgICAgIGJ2ZWM0IGlzbmFuX2N1c3RvbSh2ZWM0IHZhbCkge1xuICAgICAgICByZXR1cm4gYnZlYzQoaXNuYW5fY3VzdG9tKHZhbC54KSxcbiAgICAgICAgICBpc25hbl9jdXN0b20odmFsLnkpLCBpc25hbl9jdXN0b20odmFsLnopLCBpc25hbl9jdXN0b20odmFsLncpKTtcbiAgICAgIH1cblxuICAgICAgI2RlZmluZSBpc25hbih2YWx1ZSkgaXNuYW5fY3VzdG9tKHZhbHVlKVxuICAgIGAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJztcbiAgICAvLyBJbiB3ZWJnbCAyIHdlIGRvIG5vdCBuZWVkIHRvIHNwZWNpZnkgYSBjdXN0b20gaXNpbmYgc28gdGhlcmUgaXMgbm9cbiAgICAvLyBuZWVkIGZvciBhIHNwZWNpYWwgSU5GSU5JVFkgY29uc3RhbnQuXG4gICAgZGVmaW5lU3BlY2lhbEluZiA9IGBgO1xuICAgIGRlZmluZVJvdW5kID0gYFxuICAgICAgI2RlZmluZSByb3VuZCh2YWx1ZSkgbmV3Um91bmQodmFsdWUpXG4gICAgICBpbnQgbmV3Um91bmQoZmxvYXQgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGludChmbG9vcih2YWx1ZSArIDAuNSkpO1xuICAgICAgfVxuXG4gICAgICBpdmVjNCBuZXdSb3VuZCh2ZWM0IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpdmVjNChmbG9vcih2YWx1ZSArIHZlYzQoMC41KSkpO1xuICAgICAgfVxuICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgdmVyc2lvbiA9ICcnO1xuICAgIGF0dHJpYnV0ZSA9ICdhdHRyaWJ1dGUnO1xuICAgIHZhcnlpbmdWcyA9ICd2YXJ5aW5nJztcbiAgICB2YXJ5aW5nRnMgPSAndmFyeWluZyc7XG4gICAgdGV4dHVyZTJEID0gJ3RleHR1cmUyRCc7XG4gICAgb3V0cHV0ID0gJ2dsX0ZyYWdDb2xvcic7XG4gICAgZGVmaW5lT3V0cHV0ID0gJyc7XG4gICAgLy8gV2ViR0wxIGhhcyBubyBidWlsdCBpbiBpc25hbiBzbyB3ZSBkZWZpbmUgb25lIGhlcmUuXG4gICAgZGVmaW5lU3BlY2lhbE5hTiA9IGBcbiAgICAgICNkZWZpbmUgaXNuYW4odmFsdWUpIGlzbmFuX2N1c3RvbSh2YWx1ZSlcbiAgICAgIGJvb2wgaXNuYW5fY3VzdG9tKGZsb2F0IHZhbCkge1xuICAgICAgICByZXR1cm4gKHZhbCA+IDAuIHx8IHZhbCA8IDEuIHx8IHZhbCA9PSAwLikgPyBmYWxzZSA6IHRydWU7XG4gICAgICB9XG4gICAgICBidmVjNCBpc25hbl9jdXN0b20odmVjNCB2YWwpIHtcbiAgICAgICAgcmV0dXJuIGJ2ZWM0KGlzbmFuKHZhbC54KSwgaXNuYW4odmFsLnkpLCBpc25hbih2YWwueiksIGlzbmFuKHZhbC53KSk7XG4gICAgICB9XG4gICAgYDtcbiAgICBkZWZpbmVTcGVjaWFsSW5mID0gYFxuICAgICAgdW5pZm9ybSBmbG9hdCBJTkZJTklUWTtcblxuICAgICAgYm9vbCBpc2luZihmbG9hdCB2YWwpIHtcbiAgICAgICAgcmV0dXJuIGFicyh2YWwpID09IElORklOSVRZO1xuICAgICAgfVxuICAgICAgYnZlYzQgaXNpbmYodmVjNCB2YWwpIHtcbiAgICAgICAgcmV0dXJuIGVxdWFsKGFicyh2YWwpLCB2ZWM0KElORklOSVRZKSk7XG4gICAgICB9XG4gICAgYDtcbiAgICBkZWZpbmVSb3VuZCA9IGBcbiAgICAgIGludCByb3VuZChmbG9hdCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW50KGZsb29yKHZhbHVlICsgMC41KSk7XG4gICAgICB9XG5cbiAgICAgIGl2ZWM0IHJvdW5kKHZlYzQgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGl2ZWM0KGZsb29yKHZhbHVlICsgdmVjNCgwLjUpKSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbixcbiAgICBhdHRyaWJ1dGUsXG4gICAgdmFyeWluZ1ZzLFxuICAgIHZhcnlpbmdGcyxcbiAgICB0ZXh0dXJlMkQsXG4gICAgb3V0cHV0LFxuICAgIGRlZmluZU91dHB1dCxcbiAgICBkZWZpbmVTcGVjaWFsTmFOLFxuICAgIGRlZmluZVNwZWNpYWxJbmYsXG4gICAgZGVmaW5lUm91bmRcbiAgfTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\n/**\n * Produces GLSL code that derives logical coordinates from a flat\n * index. The code performs integer division with each stride and decrements\n * the index until the index equals the final dimension coordinate.\n */\nexport function getLogicalCoordinatesFromFlatIndex(coords, shape, index = 'index') {\n const strides = util.computeStrides(shape);\n return strides\n .map((stride, i) => {\n const line1 = `int ${coords[i]} = ${index} / ${stride}`;\n const line2 = i === strides.length - 1 ?\n `int ${coords[i + 1]} = ${index} - ${coords[i]} * ${stride}` :\n `index -= ${coords[i]} * ${stride}`;\n return `${line1}; ${line2};`;\n })\n .join('');\n}\nexport function getOutputLogicalCoordinatesFromFlatIndexByUniform(coords, shape, index = 'index') {\n const strides = util.computeStrides(shape);\n return strides\n .map((_, i) => {\n const line1 = `int ${coords[i]} = ${index} / outShapeStrides[${i}]`;\n const line2 = i === strides.length - 1 ?\n `int ${coords[i + 1]} = ${index} - ${coords[i]} * outShapeStrides[${i}]` :\n `index -= ${coords[i]} * outShapeStrides[${i}]`;\n return `${line1}; ${line2};`;\n })\n .join('');\n}\n// Produces GLSL code that computes strides.\nfunction symbolicallyComputeStrides(indicesArr, variableName) {\n const numCoords = indicesArr.length;\n const shape = indicesArr.map(d => `${variableName}[${d}]`);\n const strides = new Array(numCoords - 1);\n strides[numCoords - 2] = shape[numCoords - 1];\n for (let i = numCoords - 3; i >= 0; --i) {\n strides[i] = `(${strides[i + 1]} * ${shape[i + 1]})`;\n }\n return strides;\n}\nexport function getLogicalCoordinatesFromFlatIndexByUniform(coords, variableName, index = 'index') {\n const indicesArray = coords.map((_, i) => i);\n const strides = symbolicallyComputeStrides(indicesArray, variableName);\n return strides\n .map((_, i) => {\n const line1 = `int ${coords[i]} = ${index} / ${strides[i]}`;\n const line2 = i === strides.length - 1 ?\n `int ${coords[i + 1]} = ${index} - ${coords[i]} * ${strides[i]}` :\n `index -= ${coords[i]} * ${strides[i]}`;\n return `${line1}; ${line2};`;\n })\n .join('');\n}\nfunction buildVec(x) {\n if (x.length === 1) {\n return `${x[0]}`;\n }\n return `vec${x.length}(${x.join(',')})`;\n}\n/**\n * Produces GLSL code that computes the dot product of the input x and y\n * vectors. Handles splitting inputs into increments of vec4s when necessary.\n */\nexport function dotify(x, y) {\n if (x.length !== y.length) {\n throw new Error(`Vectors to be dotted must be of the same length -` +\n `got ${x.length} and ${y.length}`);\n }\n const slices = [];\n const nearestVec4 = Math.floor(x.length / 4);\n const nearestVec4Remainder = x.length % 4;\n for (let i = 0; i < nearestVec4; i++) {\n const xSlice = x.slice(i * 4, i * 4 + 4);\n const ySlice = y.slice(i * 4, i * 4 + 4);\n slices.push(`${buildVec(xSlice)}, ${buildVec(ySlice)}`);\n }\n if (nearestVec4Remainder !== 0) {\n let xSlice = x.slice(nearestVec4 * 4);\n let ySlice = y.slice(nearestVec4 * 4);\n if (xSlice.length === 1) {\n xSlice = xSlice.map(d => `float(${d})`);\n ySlice = ySlice.map(d => `float(${d})`);\n }\n slices.push(`${buildVec(xSlice)}, ${buildVec(ySlice)}`);\n }\n return slices.map((d, i) => `dot(${d})`).join('+');\n}\n/**\n * Produces GLSL that computes the flat index from 3D coordinates.\n */\nexport function getFlatIndexFrom3D(shape) {\n const strides = util.computeStrides(shape).map(d => d.toString());\n return `\n int getFlatIndex(ivec3 coords) {\n return coords.x * ${strides[0]} + coords.y * ${strides[1]} + coords.z;\n }\n`;\n}\nexport function getFlatIndexFrom3DOutput() {\n return `\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`;\n}\nexport const 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`;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZGVyX2NvbXBpbGVyX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3NoYWRlcl9jb21waWxlcl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGtDQUFrQyxDQUM5QyxNQUFnQixFQUFFLEtBQWUsRUFBRSxLQUFLLEdBQUcsT0FBTztJQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE9BQU8sT0FBTztTQUNULEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNqQixNQUFNLEtBQUssR0FBRyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sTUFBTSxFQUFFLENBQUM7UUFDeEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsT0FBTyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM5RCxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEdBQUcsS0FBSyxLQUFLLEtBQUssR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLGlEQUFpRCxDQUM3RCxNQUFnQixFQUFFLEtBQWUsRUFBRSxLQUFLLEdBQUcsT0FBTztJQUNwRCxNQUFNLE9BQU8sR0FBRyxJ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TSxvQkFBb0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge3V0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbi8qKlxuICogUHJvZHVjZXMgR0xTTCBjb2RlIHRoYXQgZGVyaXZlcyBsb2dpY2FsIGNvb3JkaW5hdGVzIGZyb20gYSBmbGF0XG4gKiBpbmRleC4gVGhlIGNvZGUgcGVyZm9ybXMgaW50ZWdlciBkaXZpc2lvbiB3aXRoIGVhY2ggc3RyaWRlIGFuZCBkZWNyZW1lbnRzXG4gKiB0aGUgaW5kZXggdW50aWwgdGhlIGluZGV4IGVxdWFscyB0aGUgZmluYWwgZGltZW5zaW9uIGNvb3JkaW5hdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4KFxuICAgIGNvb3Jkczogc3RyaW5nW10sIHNoYXBlOiBudW1iZXJbXSwgaW5kZXggPSAnaW5kZXgnKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoc2hhcGUpO1xuICByZXR1cm4gc3RyaWRlc1xuICAgICAgLm1hcCgoc3RyaWRlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmUxID0gYGludCAke2Nvb3Jkc1tpXX0gPSAke2luZGV4fSAvICR7c3RyaWRlfWA7XG4gICAgICAgIGNvbnN0IGxpbmUyID0gaSA9PT0gc3RyaWRlcy5sZW5ndGggLSAxID9cbiAgICAgICAgICAgIGBpbnQgJHtjb29yZHNbaSArIDFdfSA9ICR7aW5kZXh9IC0gJHtjb29yZHNbaV19ICogJHtzdHJpZGV9YCA6XG4gICAgICAgICAgICBgaW5kZXggLT0gJHtjb29yZHNbaV19ICogJHtzdHJpZGV9YDtcbiAgICAgICAgcmV0dXJuIGAke2xpbmUxfTsgJHtsaW5lMn07YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRwdXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4QnlVbmlmb3JtKFxuICAgIGNvb3Jkczogc3RyaW5nW10sIHNoYXBlOiBudW1iZXJbXSwgaW5kZXggPSAnaW5kZXgnKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoc2hhcGUpO1xuICByZXR1cm4gc3RyaWRlc1xuICAgICAgLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCBsaW5lMSA9IGBpbnQgJHtjb29yZHNbaV19ID0gJHtpbmRleH0gLyBvdXRTaGFwZVN0cmlkZXNbJHtpfV1gO1xuICAgICAgICBjb25zdCBsaW5lMiA9IGkgPT09IHN0cmlkZXMubGVuZ3RoIC0gMSA/XG4gICAgICAgICAgICBgaW50ICR7Y29vcmRzW2kgKyAxXX0gPSAke2luZGV4fSAtICR7Y29vcmRzW2ldfSAqIG91dFNoYXBlU3RyaWRlc1ske1xuICAgICAgICAgICAgICAgIGl9XWAgOlxuICAgICAgICAgICAgYGluZGV4IC09ICR7Y29vcmRzW2ldfSAqIG91dFNoYXBlU3RyaWRlc1ske2l9XWA7XG4gICAgICAgIHJldHVybiBgJHtsaW5lMX07ICR7bGluZTJ9O2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJycpO1xufVxuXG4vLyBQcm9kdWNlcyBHTFNMIGNvZGUgdGhhdCBjb21wdXRlcyBzdHJpZGVzLlxuZnVuY3Rpb24gc3ltYm9saWNhbGx5Q29tcHV0ZVN0cmlkZXMoXG4gICAgaW5kaWNlc0FycjogbnVtYmVyW10sIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBudW1Db29yZHMgPSBpbmRpY2VzQXJyLmxlbmd0aDtcbiAgY29uc3Qgc2hhcGUgPSBpbmRpY2VzQXJyLm1hcChkID0+IGAke3ZhcmlhYmxlTmFtZX1bJHtkfV1gKTtcbiAgY29uc3Qgc3RyaWRlcyA9IG5ldyBBcnJheShudW1Db29yZHMgLSAxKTtcbiAgc3RyaWRlc1tudW1Db29yZHMgLSAyXSA9IHNoYXBlW251bUNvb3JkcyAtIDFdO1xuICBmb3IgKGxldCBpID0gbnVtQ29vcmRzIC0gMzsgaSA+PSAwOyAtLWkpIHtcbiAgICBzdHJpZGVzW2ldID0gYCgke3N0cmlkZXNbaSArIDFdfSAqICR7c2hhcGVbaSArIDFdfSlgO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlkZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4QnlVbmlmb3JtKFxuICAgIGNvb3Jkczogc3RyaW5nW10sIHZhcmlhYmxlTmFtZTogc3RyaW5nLCBpbmRleCA9ICdpbmRleCcpOiBzdHJpbmcge1xuICBjb25zdCBpbmRpY2VzQXJyYXkgPSBjb29yZHMubWFwKChfLCBpKSA9PiBpKTtcbiAgY29uc3Qgc3RyaWRlcyA9IHN5bWJvbGljYWxseUNvbXB1dGVTdHJpZGVzKGluZGljZXNBcnJheSwgdmFyaWFibGVOYW1lKTtcbiAgcmV0dXJuIHN0cmlkZXNcbiAgICAgIC5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgY29uc3QgbGluZTEgPSBgaW50ICR7Y29vcmRzW2ldfSA9ICR7aW5kZXh9IC8gJHtzdHJpZGVzW2ldfWA7XG4gICAgICAgIGNvbnN0IGxpbmUyID0gaSA9PT0gc3RyaWRlcy5sZW5ndGggLSAxID9cbiAgICAgICAgICAgIGBpbnQgJHtjb29yZHNbaSArIDFdfSA9ICR7aW5kZXh9IC0gJHtjb29yZHNbaV19ICogJHtzdHJpZGVzW2ldfWAgOlxuICAgICAgICAgICAgYGluZGV4IC09ICR7Y29vcmRzW2ldfSAqICR7c3RyaWRlc1tpXX1gO1xuICAgICAgICByZXR1cm4gYCR7bGluZTF9OyAke2xpbmUyfTtgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRWZWMoeDogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAoeC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYCR7eFswXX1gO1xuICB9XG4gIHJldHVybiBgdmVjJHt4Lmxlbmd0aH0oJHt4LmpvaW4oJywnKX0pYDtcbn1cblxuLyoqXG4gKiBQcm9kdWNlcyBHTFNMIGNvZGUgdGhhdCBjb21wdXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdGhlIGlucHV0IHggYW5kIHlcbiAqIHZlY3RvcnMuIEhhbmRsZXMgc3BsaXR0aW5nIGlucHV0cyBpbnRvIGluY3JlbWVudHMgb2YgdmVjNHMgd2hlbiBuZWNlc3NhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3RpZnkoeDogc3RyaW5nW10sIHk6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFZlY3RvcnMgdG8gYmUgZG90dGVkIG11c3QgYmUgb2YgdGhlIHNhbWUgbGVuZ3RoIC1gICtcbiAgICAgICAgYGdvdCAke3gubGVuZ3RofSBhbmQgJHt5Lmxlbmd0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHNsaWNlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmVhcmVzdFZlYzQgPSBNYXRoLmZsb29yKHgubGVuZ3RoIC8gNCk7XG4gIGNvbnN0IG5lYXJlc3RWZWM0UmVtYWluZGVyID0geC5sZW5ndGggJSA0O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmVhcmVzdFZlYzQ7IGkrKykge1xuICAgIGNvbnN0IHhTbGljZSA9IHguc2xpY2UoaSAqIDQsIGkgKiA0ICsgNCk7XG4gICAgY29uc3QgeVNsaWNlID0geS5zbGljZShpICogNCwgaSAqIDQgKyA0KTtcbiAgICBzbGljZXMucHVzaChgJHtidWlsZFZlYyh4U2xpY2UpfSwgJHtidWlsZFZlYyh5U2xpY2UpfWApO1xuICB9XG5cbiAgaWYgKG5lYXJlc3RWZWM0UmVtYWluZGVyICE9PSAwKSB7XG4gICAgbGV0IHhTbGljZSA9IHguc2xpY2UobmVhcmVzdFZlYzQgKiA0KTtcbiAgICBsZXQgeVNsaWNlID0geS5zbGljZShuZWFyZXN0VmVjNCAqIDQpO1xuICAgIGlmICh4U2xpY2UubGVuZ3RoID09PSAxKSB7XG4gICAgICB4U2xpY2UgPSB4U2xpY2UubWFwKGQgPT4gYGZsb2F0KCR7ZH0pYCk7XG4gICAgICB5U2xpY2UgPSB5U2xpY2UubWFwKGQgPT4gYGZsb2F0KCR7ZH0pYCk7XG4gICAgfVxuICAgIHNsaWNlcy5wdXNoKGAke2J1aWxkVmVjKHhTbGljZSl9LCAke2J1aWxkVmVjKHlTbGljZSl9YCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2VzLm1hcCgoZCwgaSkgPT4gYGRvdCgke2R9KWApLmpvaW4oJysnKTtcbn1cblxuLyoqXG4gKiBQcm9kdWNlcyBHTFNMIHRoYXQgY29tcHV0ZXMgdGhlIGZsYXQgaW5kZXggZnJvbSAzRCBjb29yZGluYXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZsYXRJbmRleEZyb20zRChzaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoc2hhcGUpLm1hcChkID0+IGQudG9TdHJpbmcoKSk7XG5cbiAgcmV0dXJuIGBcbiAgaW50IGdldEZsYXRJbmRleChpdmVjMyBjb29yZHMpIHtcbiAgICByZXR1cm4gY29vcmRzLnggKiAke3N0cmlkZXNbMF19ICsgY29vcmRzLnkgKiAke3N0cmlkZXNbMV19ICsgY29vcmRzLno7XG4gIH1cbmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0SW5kZXhGcm9tM0RPdXRwdXQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcbiAgaW50IGdldEZsYXRJbmRleChpdmVjMyBjb29yZHMpIHtcbiAgICByZXR1cm4gY29vcmRzLnggKiBvdXRTaGFwZVN0cmlkZXNbMF0gKyBjb29yZHMueSAqIG91dFNoYXBlU3RyaWRlc1sxXSArIGNvb3Jkcy56O1xuICB9XG5gO1xufVxuXG5leHBvcnQgY29uc3QgRU5DT0RFX0ZMT0FUX1NOSVBQRVQgPSBgXG4gIGNvbnN0IGZsb2F0IEZMT0FUX01BWCA9IDEuNzAxNDExODRlMzg7XG4gIGNvbnN0IGZsb2F0IEZMT0FUX01JTiA9IDEuMTc1NDk0MzVlLTM4O1xuXG4gIGxvd3AgdmVjNCBlbmNvZGVfZmxvYXQoaGlnaHAgZmxvYXQgdikge1xuICAgIGlmIChpc25hbih2KSkge1xuICAgICAgcmV0dXJuIHZlYzQoMjU1LCAyNTUsIDI1NSwgMjU1KTtcbiAgICB9XG5cbiAgICBoaWdocCBmbG9hdCBhdiA9IGFicyh2KTtcblxuICAgIGlmKGF2IDwgRkxPQVRfTUlOKSB7XG4gICAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICAgIH0gZWxzZSBpZih2ID4gRkxPQVRfTUFYKSB7XG4gICAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMTI4LjAsIDEyNy4wKSAvIDI1NS4wO1xuICAgIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgICAgcmV0dXJuIHZlYzQoMC4wLCAwLjAsICAxMjguMCwgMjU1LjApIC8gMjU1LjA7XG4gICAgfVxuXG4gICAgaGlnaHAgdmVjNCBjID0gdmVjNCgwLDAsMCwwKTtcblxuICAgIGhpZ2hwIGZsb2F0IGUgPSBmbG9vcihsb2cyKGF2KSk7XG4gICAgaGlnaHAgZmxvYXQgbSA9IGV4cDIoZnJhY3QobG9nMihhdikpKSAtIDEuMDtcblxuICAgIGNbMl0gPSBmbG9vcigxMjguMCAqIG0pO1xuICAgIG0gLT0gY1syXSAvIDEyOC4wO1xuICAgIGNbMV0gPSBmbG9vcigzMjc2OC4wICogbSk7XG4gICAgbSAtPSBjWzFdIC8gMzI3NjguMDtcbiAgICBjWzBdID0gZmxvb3IoODM4ODYwOC4wICogbSk7XG5cbiAgICBoaWdocCBmbG9hdCBlYmlhcyA9IGUgKyAxMjcuMDtcbiAgICBjWzNdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xuICAgIGViaWFzIC09IGNbM10gKiAyLjA7XG4gICAgY1syXSArPSBmbG9vcihlYmlhcykgKiAxMjguMDtcblxuICAgIGNbM10gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xuXG4gICAgcmV0dXJuIGMgLyAyNTUuMDtcbiAgfVxuYDtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Please make sure the shaker key in makeShaderKey in gpgpu_math.ts is well\n// mapped if any shader source code is changed in this file.\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nconst { getBroadcastDims } = backend_util;\nimport { getGlslDifferences } from './glsl_version';\nimport * as shader_util from './shader_compiler_util';\nexport function makeShader(inputsInfo, outputShape, program) {\n const prefixSnippets = [];\n inputsInfo.forEach(x => {\n const size = util.sizeFromShape(x.shapeInfo.logicalShape);\n // Snippet when we decided to upload the values as uniform.\n if (x.shapeInfo.isUniform) {\n prefixSnippets.push(`uniform float ${x.name}${size > 1 ? `[${size}]` : ''};`);\n }\n else {\n prefixSnippets.push(`uniform sampler2D ${x.name};`);\n prefixSnippets.push(`uniform int offset${x.name};`);\n }\n if (program.enableShapeUniforms) {\n const { uniformShape } = getUniformInfoFromShape(program.packedInputs, x.shapeInfo.logicalShape, x.shapeInfo.texShape);\n switch (uniformShape.length) {\n case 1:\n prefixSnippets.push(`uniform int ${x.name}Shape;`);\n break;\n case 2:\n prefixSnippets.push(`uniform ivec2 ${x.name}Shape;`);\n break;\n case 3:\n prefixSnippets.push(`uniform ivec3 ${x.name}Shape;`);\n break;\n case 4:\n prefixSnippets.push(`uniform ivec4 ${x.name}Shape;`);\n break;\n default:\n break;\n }\n prefixSnippets.push(`uniform ivec2 ${x.name}TexShape;`);\n }\n });\n if (program.enableShapeUniforms) {\n switch (outputShape.logicalShape.length) {\n case 1:\n prefixSnippets.push(`uniform int outShape;`);\n break;\n case 2:\n prefixSnippets.push(`uniform ivec2 outShape;`);\n prefixSnippets.push(`uniform int outShapeStrides;`);\n break;\n case 3:\n prefixSnippets.push(`uniform ivec3 outShape;`);\n prefixSnippets.push(`uniform ivec2 outShapeStrides;`);\n break;\n case 4:\n prefixSnippets.push(`uniform ivec4 outShape;`);\n prefixSnippets.push(`uniform ivec3 outShapeStrides;`);\n break;\n default:\n break;\n }\n prefixSnippets.push(`uniform ivec2 outTexShape;`);\n }\n if (program.customUniforms) {\n program.customUniforms.forEach((d) => {\n prefixSnippets.push(`uniform ${d.type} ${d.name}${d.arrayIndex ? `[${d.arrayIndex}]` : ''};`);\n });\n }\n const inputPrefixSnippet = prefixSnippets.join('\\n');\n const inputSamplingSnippet = inputsInfo\n .map(x => getInputSamplingSnippet(x, outputShape, program.packedInputs, program.enableShapeUniforms))\n .join('\\n');\n const outTexShape = outputShape.texShape;\n const glsl = getGlslDifferences();\n const floatTextureSampleSnippet = getFloatTextureSampleSnippet(glsl);\n let outputSamplingSnippet;\n let floatTextureSetOutputSnippet;\n let shaderPrefix = getShaderPrefix(glsl);\n if (outputShape.isPacked) {\n outputSamplingSnippet = getPackedOutputSamplingSnippet(outputShape.logicalShape, outTexShape, program.enableShapeUniforms);\n floatTextureSetOutputSnippet = getFloatTextureSetRGBASnippet(glsl);\n }\n else {\n outputSamplingSnippet = getOutputSamplingSnippet(outputShape.logicalShape, outTexShape, program.enableShapeUniforms);\n floatTextureSetOutputSnippet = getFloatTextureSetRSnippet(glsl);\n }\n if (program.packedInputs) {\n shaderPrefix += SHADER_PACKED_PREFIX;\n }\n const source = [\n shaderPrefix, floatTextureSampleSnippet, floatTextureSetOutputSnippet,\n inputPrefixSnippet, outputSamplingSnippet, inputSamplingSnippet,\n program.userCode\n ].join('\\n');\n return source;\n}\nfunction getSamplerFromInInfo(inInfo, enableShapeUniforms = false) {\n const shape = inInfo.shapeInfo.logicalShape;\n switch (shape.length) {\n case 0:\n return getSamplerScalar(inInfo, enableShapeUniforms);\n case 1:\n return getSampler1D(inInfo, enableShapeUniforms);\n case 2:\n return getSampler2D(inInfo, enableShapeUniforms);\n case 3:\n return getSampler3D(inInfo, enableShapeUniforms);\n case 4:\n return getSampler4D(inInfo, enableShapeUniforms);\n case 5:\n return getSampler5D(inInfo);\n case 6:\n return getSampler6D(inInfo);\n default:\n throw new Error(`${shape.length}-D input sampling` +\n ` is not yet supported`);\n }\n}\nfunction getPackedSamplerFromInInfo(inInfo, enableShapeUniforms) {\n const shape = inInfo.shapeInfo.logicalShape;\n switch (shape.length) {\n case 0:\n return getPackedSamplerScalar(inInfo);\n case 1:\n return getPackedSampler1D(inInfo, enableShapeUniforms);\n case 2:\n return getPackedSampler2D(inInfo, enableShapeUniforms);\n case 3:\n return getPackedSampler3D(inInfo, enableShapeUniforms);\n default:\n return getPackedSamplerND(inInfo, enableShapeUniforms);\n }\n}\nfunction getInputSamplingSnippet(inInfo, outShapeInfo, usesPackedTextures = false, enableShapeUniforms) {\n let res = '';\n if (usesPackedTextures) {\n res += getPackedSamplerFromInInfo(inInfo, enableShapeUniforms);\n }\n else {\n res += getSamplerFromInInfo(inInfo, enableShapeUniforms);\n }\n const inShape = inInfo.shapeInfo.logicalShape;\n const outShape = outShapeInfo.logicalShape;\n if (inShape.length <= outShape.length) {\n if (usesPackedTextures) {\n res += getPackedSamplerAtOutputCoords(inInfo, outShapeInfo);\n }\n else {\n res += getSamplerAtOutputCoords(inInfo, outShapeInfo);\n }\n }\n return res;\n}\nfunction getPackedOutputSamplingSnippet(outShape, outTexShape, enableShapeUniforms) {\n switch (outShape.length) {\n case 0:\n return getOutputScalarCoords();\n case 1:\n return getOutputPacked1DCoords(outShape, outTexShape, enableShapeUniforms);\n case 2:\n return getOutputPacked2DCoords(outShape, outTexShape, enableShapeUniforms);\n case 3:\n return getOutputPacked3DCoords(outShape, outTexShape, enableShapeUniforms);\n default:\n return getOutputPackedNDCoords(outShape, outTexShape, enableShapeUniforms);\n }\n}\nfunction getOutputSamplingSnippet(outShape, outTexShape, enableShapeUniforms) {\n switch (outShape.length) {\n case 0:\n return getOutputScalarCoords();\n case 1:\n return getOutput1DCoords(outShape, outTexShape, enableShapeUniforms);\n case 2:\n return getOutput2DCoords(outShape, outTexShape, enableShapeUniforms);\n case 3:\n return getOutput3DCoords(outShape, outTexShape, enableShapeUniforms);\n case 4:\n return getOutput4DCoords(outShape, outTexShape, enableShapeUniforms);\n case 5:\n return getOutput5DCoords(outShape, outTexShape);\n case 6:\n return getOutput6DCoords(outShape, outTexShape);\n default:\n throw new Error(`${outShape.length}-D output sampling is not yet supported`);\n }\n}\nfunction getFloatTextureSampleSnippet(glsl) {\n return `\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${glsl.texture2D}(textureSampler, uv).r;\n }\n `;\n}\nfunction getFloatTextureSetRSnippet(glsl) {\n return `\n void setOutput(float val) {\n ${glsl.output} = vec4(val, 0, 0, 0);\n }\n `;\n}\nfunction getFloatTextureSetRGBASnippet(glsl) {\n return `\n void setOutput(vec4 val) {\n ${glsl.output} = val;\n }\n `;\n}\nfunction getShaderPrefix(glsl) {\n const 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 `;\n return SHADER_PREFIX;\n}\nconst 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`;\nconst 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`;\nconst 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`;\nconst 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`;\nfunction getOutputScalarCoords() {\n return `\n int getOutputCoords() {\n return 0;\n }\n `;\n}\nfunction getOutputPacked1DCoords(shape, texShape, enableShapeUniforms) {\n const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n if (packedTexShape[0] === 1) {\n if (enableShapeUniforms) {\n return `\n int getOutputCoords() {\n return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));\n }\n `;\n }\n return `\n int getOutputCoords() {\n return 2 * int(resultUV.x * ${packedTexShape[1]}.0);\n }\n `;\n }\n if (packedTexShape[1] === 1) {\n if (enableShapeUniforms) {\n return `\n int getOutputCoords() {\n return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));\n }\n `;\n }\n return `\n int getOutputCoords() {\n return 2 * int(resultUV.y * ${packedTexShape[0]}.0);\n }\n `;\n }\n if (enableShapeUniforms) {\n 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 `;\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 `;\n}\nfunction getOutput1DCoords(shape, texShape, enableShapeUniforms) {\n if (texShape[0] === 1) {\n if (enableShapeUniforms) {\n return `\n int getOutputCoords() {\n return int(resultUV.x * float(outTexShape[1]));\n }\n `;\n }\n return `\n int getOutputCoords() {\n return int(resultUV.x * ${texShape[1]}.0);\n }\n `;\n }\n if (texShape[1] === 1) {\n if (enableShapeUniforms) {\n return `\n int getOutputCoords() {\n return int(resultUV.y * float(outTexShape[0]));\n }\n `;\n }\n return `\n int getOutputCoords() {\n return int(resultUV.y * ${texShape[0]}.0);\n }\n `;\n }\n if (enableShapeUniforms) {\n 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 `;\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 `;\n}\nfunction getOutputPacked3DCoords(shape, texShape, enableShapeUniforms) {\n if (enableShapeUniforms) {\n 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 `;\n }\n const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n const texelsInLogicalRow = Math.ceil(shape[2] / 2);\n const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[1] / 2);\n 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 `;\n}\nfunction getOutput3DCoords(shape, texShape, enableShapeUniforms) {\n if (enableShapeUniforms) {\n const coordsFromIndexSnippet = shader_util.getOutputLogicalCoordinatesFromFlatIndexByUniform(['r', 'c', 'd'], shape);\n 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}\n return ivec3(r, c, d);\n }\n`;\n }\n const coordsFromIndexSnippet = shader_util.getLogicalCoordinatesFromFlatIndex(['r', 'c', 'd'], shape);\n 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 `;\n}\nfunction getOutputPackedNDCoords(shape, texShape, enableShapeUniforms) {\n if (enableShapeUniforms) {\n // TODO: support 5d and 6d\n 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 `;\n }\n const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n const texelsInLogicalRow = Math.ceil(shape[shape.length - 1] / 2);\n const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[shape.length - 2] / 2);\n let texelsInBatchN = texelsInBatch;\n let batches = ``;\n let coords = 'b, r, c';\n for (let b = 2; b < shape.length - 1; b++) {\n texelsInBatchN *= shape[shape.length - b - 1];\n batches = `\n int b${b} = index / ${texelsInBatchN};\n index -= b${b} * ${texelsInBatchN};\n ` + batches;\n coords = `b${b}, ` + coords;\n }\n 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 `;\n}\nfunction getOutput4DCoords(shape, texShape, enableShapeUniforms) {\n if (enableShapeUniforms) {\n const coordsFromIndexSnippet = shader_util.getOutputLogicalCoordinatesFromFlatIndexByUniform(['r', 'c', 'd', 'd2'], shape);\n 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}\n return ivec4(r, c, d, d2);\n }\n `;\n }\n const coordsFromIndexSnippet = shader_util.getLogicalCoordinatesFromFlatIndex(['r', 'c', 'd', 'd2'], shape);\n 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 `;\n}\nfunction getOutput5DCoords(shape, texShape) {\n const coordsFromIndexSnippet = shader_util.getLogicalCoordinatesFromFlatIndex(['r', 'c', 'd', 'd2', 'd3'], shape);\n 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 `;\n}\nfunction getOutput6DCoords(shape, texShape) {\n const coordsFromIndexSnippet = shader_util.getLogicalCoordinatesFromFlatIndex(['r', 'c', 'd', 'd2', 'd3', 'd4'], shape);\n 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 `;\n}\nfunction getOutputPacked2DCoords(shape, texShape, enableShapeUniforms) {\n const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n if (util.arraysEqual(shape, texShape)) {\n if (enableShapeUniforms) {\n 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 `;\n }\n return `\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\n }\n `;\n }\n // texels needed to accommodate a logical row\n const texelsInLogicalRow = Math.ceil(shape[1] / 2);\n /**\n * getOutputCoords\n *\n * resTexRC: The rows and columns of the texels. If you move over one\n * texel to the right in the packed texture, you are moving over one column\n * (not two).\n *\n * index: The texel index\n */\n if (enableShapeUniforms) {\n 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 `;\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 `;\n}\nfunction getOutput2DCoords(shape, texShape, enableShapeUniforms) {\n if (util.arraysEqual(shape, texShape)) {\n if (enableShapeUniforms) {\n return `\n ivec2 getOutputCoords() {\n return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1]));\n }\n `;\n }\n return `\n ivec2 getOutputCoords() {\n return ivec2(resultUV.yx * vec2(${texShape[0]}, ${texShape[1]}));\n }\n `;\n }\n if (shape[1] === 1) {\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (shape[0] === 1) {\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (enableShapeUniforms) {\n 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 `;\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 `;\n}\nfunction getFlatOffsetUniformName(texName) {\n return `offset${texName}`;\n}\nfunction getPackedSamplerScalar(inputInfo) {\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const glsl = getGlslDifferences();\n return `\n vec4 ${funcName}() {\n return ${glsl.texture2D}(${texName}, halfCR);\n }\n `;\n}\nfunction getSamplerScalar(inputInfo, enableShapeUniforms) {\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n if (inputInfo.shapeInfo.isUniform) {\n return `float ${funcName}() {return ${texName};}`;\n }\n const [texNumR, texNumC] = inputInfo.shapeInfo.texShape;\n if (texNumR === 1 && texNumC === 1) {\n return `\n float ${funcName}() {\n return sampleTexture(${texName}, halfCR);\n }\n `;\n }\n const offset = getFlatOffsetUniformName(texName);\n if (enableShapeUniforms) {\n return `\n float ${funcName}() {\n vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], ${offset});\n return sampleTexture(${texName}, uv);\n }\n `;\n }\n const [tNumR, tNumC] = inputInfo.shapeInfo.texShape;\n return `\n float ${funcName}() {\n vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, ${offset});\n return sampleTexture(${texName}, uv);\n }\n `;\n}\nfunction getPackedSampler1D(inputInfo, enableShapeUniforms) {\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const texShape = inputInfo.shapeInfo.texShape;\n const glsl = getGlslDifferences();\n if (enableShapeUniforms) {\n 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 `;\n }\n const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n return `\n vec4 ${funcName}(int index) {\n vec2 uv = packedUVfrom1D(\n ${packedTexShape[0]}, ${packedTexShape[1]}, index);\n return ${glsl.texture2D}(${texName}, uv);\n }\n `;\n}\nfunction getSampler1D(inputInfo, enableShapeUniforms) {\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n if (inputInfo.shapeInfo.isUniform) {\n // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n return `\n float ${funcName}(int index) {\n ${getUniformSampler(inputInfo)}\n }\n `;\n }\n const texShape = inputInfo.shapeInfo.texShape;\n const tNumR = texShape[0];\n const tNumC = texShape[1];\n if (tNumC === 1 && tNumR === 1) {\n return `\n float ${funcName}(int index) {\n return sampleTexture(${texName}, halfCR);\n }\n `;\n }\n const offset = getFlatOffsetUniformName(texName);\n if (tNumC === 1) {\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (tNumR === 1) {\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (enableShapeUniforms) {\n 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 `;\n }\n return `\n float ${funcName}(int index) {\n vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, index + ${offset});\n return sampleTexture(${texName}, uv);\n }\n `;\n}\nfunction getPackedSampler2D(inputInfo, enableShapeUniforms) {\n const shape = inputInfo.shapeInfo.logicalShape;\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const texShape = inputInfo.shapeInfo.texShape;\n const texNumR = texShape[0];\n const texNumC = texShape[1];\n const glsl = getGlslDifferences();\n if (texShape != null && util.arraysEqual(shape, texShape)) {\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (enableShapeUniforms) {\n 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 `;\n }\n const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n const valuesPerRow = Math.ceil(shape[1] / 2);\n 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 `;\n}\nfunction getSampler2D(inputInfo, enableShapeUniforms) {\n const shape = inputInfo.shapeInfo.logicalShape;\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const texShape = inputInfo.shapeInfo.texShape;\n if (texShape != null && util.arraysEqual(shape, texShape)) {\n if (enableShapeUniforms) {\n 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 `;\n }\n const texNumR = texShape[0];\n const texNumC = texShape[1];\n return `\n float ${funcName}(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0);\n return sampleTexture(${texName}, uv);\n }\n `;\n }\n const { newShape, keptDims } = util.squeezeShape(shape);\n const squeezedShape = newShape;\n if (squeezedShape.length < shape.length) {\n const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape);\n const params = ['row', 'col'];\n return `\n ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)}\n float ${funcName}(int row, int col) {\n return ${funcName}(${getSqueezedParams(params, keptDims)});\n }\n `;\n }\n if (inputInfo.shapeInfo.isUniform) {\n // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n 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 `;\n }\n const texNumR = texShape[0];\n const texNumC = texShape[1];\n const offset = getFlatOffsetUniformName(texName);\n if (texNumC === 1) {\n // index is used directly as physical (no risk of float16 overflow).\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (texNumR === 1) {\n // index is used directly as physical (no risk of float16 overflow).\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (enableShapeUniforms) {\n 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 `;\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`;\n}\nfunction getPackedSampler3D(inputInfo, enableShapeUniforms) {\n const shape = inputInfo.shapeInfo.logicalShape;\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const texShape = inputInfo.shapeInfo.texShape;\n const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n if (shape[0] === 1) {\n const squeezedShape = shape.slice(1);\n const keptDims = [1, 2];\n const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape);\n const params = ['b', 'row', 'col'];\n return `\n ${getPackedSamplerFromInInfo(newInputInfo, enableShapeUniforms)}\n vec4 ${funcName}(int b, int row, int col) {\n return ${funcName}(${getSqueezedParams(params, keptDims)});\n }\n `;\n }\n const glsl = getGlslDifferences();\n if (enableShapeUniforms) {\n 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 `;\n }\n const texNumR = packedTexShape[0];\n const texNumC = packedTexShape[1];\n const valuesPerRow = Math.ceil(shape[2] / 2);\n const texelsInBatch = valuesPerRow * Math.ceil(shape[1] / 2);\n 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 `;\n}\nfunction getSampler3D(inputInfo, enableShapeUniforms) {\n const shape = inputInfo.shapeInfo.logicalShape;\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const stride0 = shape[1] * shape[2];\n const stride1 = shape[2];\n const { newShape, keptDims } = util.squeezeShape(shape);\n const squeezedShape = newShape;\n if (squeezedShape.length < shape.length) {\n const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape);\n const params = ['row', 'col', 'depth'];\n return `\n ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)}\n float ${funcName}(int row, int col, int depth) {\n return ${funcName}(${getSqueezedParams(params, keptDims)});\n }\n `;\n }\n if (inputInfo.shapeInfo.isUniform) {\n // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n 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 `;\n }\n const texShape = inputInfo.shapeInfo.texShape;\n const texNumR = texShape[0];\n const texNumC = texShape[1];\n const flatOffset = inputInfo.shapeInfo.flatOffset;\n if (texNumC === stride0 && flatOffset == null) {\n // texC is used directly as physical (no risk of float16 overflow).\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (texNumC === stride1 && flatOffset == null) {\n // texR is used directly as physical (no risk of float16 overflow).\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n const offset = getFlatOffsetUniformName(texName);\n if (enableShapeUniforms) {\n 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 `;\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 `;\n}\nfunction getPackedSamplerND(inputInfo, enableShapeUniforms) {\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const glsl = getGlslDifferences();\n if (enableShapeUniforms) {\n // TODO: support 5d and 6d\n 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 `;\n }\n const shape = inputInfo.shapeInfo.logicalShape;\n const rank = shape.length;\n const texShape = inputInfo.shapeInfo.texShape;\n const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)];\n const texNumR = packedTexShape[0];\n const texNumC = packedTexShape[1];\n const valuesPerRow = Math.ceil(shape[rank - 1] / 2);\n let texelsInBatch = valuesPerRow * Math.ceil(shape[rank - 2] / 2);\n let params = `int b, int row, int col`;\n let index = `b * ${texelsInBatch} + (row / 2) * ${valuesPerRow} + (col / 2)`;\n for (let b = 2; b < rank - 1; b++) {\n params = `int b${b}, ` + params;\n texelsInBatch *= shape[rank - b - 1];\n index = `b${b} * ${texelsInBatch} + ` + index;\n }\n 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 `;\n}\nfunction getSampler4D(inputInfo, enableShapeUniforms) {\n const shape = inputInfo.shapeInfo.logicalShape;\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const stride2 = shape[3];\n const stride1 = shape[2] * stride2;\n const stride0 = shape[1] * stride1;\n const { newShape, keptDims } = util.squeezeShape(shape);\n if (newShape.length < shape.length) {\n const newInputInfo = squeezeInputInfo(inputInfo, newShape);\n const params = ['row', 'col', 'depth', 'depth2'];\n return `\n ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)}\n float ${funcName}(int row, int col, int depth, int depth2) {\n return ${funcName}(${getSqueezedParams(params, keptDims)});\n }\n `;\n }\n if (inputInfo.shapeInfo.isUniform) {\n // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n 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 `;\n }\n const flatOffset = inputInfo.shapeInfo.flatOffset;\n const texShape = inputInfo.shapeInfo.texShape;\n const texNumR = texShape[0];\n const texNumC = texShape[1];\n const stride2Str = `int stride2 = ${texName}Shape[3];`;\n const stride1Str = `int stride1 = ${texName}Shape[2] * stride2;`;\n const stride0Str = `int stride0 = ${texName}Shape[1] * stride1;`;\n if (texNumC === stride0 && flatOffset == null) {\n // texC is used directly as physical (no risk of float16 overflow).\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n if (texNumC === stride2 && flatOffset == null) {\n // texR is used directly as physical (no risk of float16 overflow).\n if (enableShapeUniforms) {\n 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 `;\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 `;\n }\n const offset = getFlatOffsetUniformName(texName);\n if (enableShapeUniforms) {\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 ${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 `;\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 `;\n}\nfunction getSampler5D(inputInfo) {\n const shape = inputInfo.shapeInfo.logicalShape;\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const stride3 = shape[4];\n const stride2 = shape[3] * stride3;\n const stride1 = shape[2] * stride2;\n const stride0 = shape[1] * stride1;\n const { newShape, keptDims } = util.squeezeShape(shape);\n if (newShape.length < shape.length) {\n const newInputInfo = squeezeInputInfo(inputInfo, newShape);\n const params = ['row', 'col', 'depth', 'depth2', 'depth3'];\n 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 `;\n }\n if (inputInfo.shapeInfo.isUniform) {\n // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n 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 `;\n }\n const flatOffset = inputInfo.shapeInfo.flatOffset;\n const texShape = inputInfo.shapeInfo.texShape;\n const texNumR = texShape[0];\n const texNumC = texShape[1];\n if (texNumC === stride0 && flatOffset == null) {\n // texC is used directly as physical (no risk of float16 overflow).\n 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 `;\n }\n if (texNumC === stride3 && flatOffset == null) {\n // texR is used directly as physical (no risk of float16 overflow).\n 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 `;\n }\n const offset = getFlatOffsetUniformName(texName);\n 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 `;\n}\nfunction getSampler6D(inputInfo) {\n const shape = inputInfo.shapeInfo.logicalShape;\n const texName = inputInfo.name;\n const funcName = 'get' + texName.charAt(0).toUpperCase() + texName.slice(1);\n const { newShape, keptDims } = util.squeezeShape(shape);\n if (newShape.length < shape.length) {\n const newInputInfo = squeezeInputInfo(inputInfo, newShape);\n const params = ['row', 'col', 'depth', 'depth2', 'depth3', 'depth4'];\n 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 `;\n }\n const stride4 = shape[5];\n const stride3 = shape[4] * stride4;\n const stride2 = shape[3] * stride3;\n const stride1 = shape[2] * stride2;\n const stride0 = shape[1] * stride1;\n if (inputInfo.shapeInfo.isUniform) {\n // Uniform arrays will be less than 65505 (no risk of float16 overflow).\n 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 `;\n }\n const flatOffset = inputInfo.shapeInfo.flatOffset;\n const texShape = inputInfo.shapeInfo.texShape;\n const texNumR = texShape[0];\n const texNumC = texShape[1];\n if (texNumC === stride0 && flatOffset == null) {\n // texC is used directly as physical (no risk of float16 overflow).\n 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 `;\n }\n if (texNumC === stride4 && flatOffset == null) {\n // texR is used directly as physical (no risk of float16 overflow).\n 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 `;\n }\n const offset = getFlatOffsetUniformName(texName);\n 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 `;\n}\nfunction getUniformSampler(inputInfo) {\n const texName = inputInfo.name;\n const inSize = util.sizeFromShape(inputInfo.shapeInfo.logicalShape);\n if (inSize < 2) {\n return `return ${texName};`;\n }\n return `\n for (int i = 0; i < ${inSize}; i++) {\n if (i == index) {\n return ${texName}[i];\n }\n }\n `;\n}\nfunction getPackedSamplerAtOutputCoords(inputInfo, outShapeInfo) {\n const texName = inputInfo.name;\n const texFuncSnippet = texName.charAt(0).toUpperCase() + texName.slice(1);\n const funcName = 'get' + texFuncSnippet + 'AtOutCoords';\n const inRank = inputInfo.shapeInfo.logicalShape.length;\n const outRank = outShapeInfo.logicalShape.length;\n const broadcastDims = getBroadcastDims(inputInfo.shapeInfo.logicalShape, outShapeInfo.logicalShape);\n const type = getCoordsDataType(outRank);\n const rankDiff = outRank - inRank;\n let coordsSnippet;\n const fields = ['x', 'y', 'z', 'w', 'u', 'v'];\n if (inRank === 0) {\n coordsSnippet = '';\n }\n else if (outRank < 2 && broadcastDims.length >= 1) {\n coordsSnippet = 'coords = 0;';\n }\n else {\n coordsSnippet =\n broadcastDims.map(d => `coords.${fields[d + rankDiff]} = 0;`)\n .join('\\n');\n }\n let unpackedCoordsSnippet = '';\n if (outRank < 2 && inRank > 0) {\n unpackedCoordsSnippet = 'coords';\n }\n else {\n unpackedCoordsSnippet = inputInfo.shapeInfo.logicalShape\n .map((s, i) => `coords.${fields[i + rankDiff]}`)\n .join(', ');\n }\n let output = `return outputValue;`;\n const inSize = util.sizeFromShape(inputInfo.shapeInfo.logicalShape);\n const isInputScalar = inSize === 1;\n const outSize = util.sizeFromShape(outShapeInfo.logicalShape);\n const isOutputScalar = outSize === 1;\n if (inRank === 1 && !isInputScalar && !isOutputScalar) {\n output = `\n return vec4(outputValue.xy, outputValue.xy);\n `;\n }\n else if (isInputScalar && !isOutputScalar) {\n if (outRank === 1) {\n output = `\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n `;\n }\n else {\n output = `\n return vec4(outputValue.x);\n `;\n }\n }\n else if (broadcastDims.length) {\n const rows = inRank - 2;\n const cols = inRank - 1;\n if (broadcastDims.indexOf(rows) > -1 && broadcastDims.indexOf(cols) > -1) {\n output = `return vec4(outputValue.x);`;\n }\n else if (broadcastDims.indexOf(rows) > -1) {\n output = `return vec4(outputValue.x, outputValue.y, ` +\n `outputValue.x, outputValue.y);`;\n }\n else if (broadcastDims.indexOf(cols) > -1) {\n output = `return vec4(outputValue.xx, outputValue.zz);`;\n }\n }\n return `\n vec4 ${funcName}() {\n ${type} coords = getOutputCoords();\n ${coordsSnippet}\n vec4 outputValue = get${texFuncSnippet}(${unpackedCoordsSnippet});\n ${output}\n }\n `;\n}\nfunction getSamplerAtOutputCoords(inputInfo, outShapeInfo) {\n const texName = inputInfo.name;\n const texFuncSnippet = texName.charAt(0).toUpperCase() + texName.slice(1);\n const funcName = 'get' + texFuncSnippet + 'AtOutCoords';\n const outTexShape = outShapeInfo.texShape;\n const inTexShape = inputInfo.shapeInfo.texShape;\n const inRank = inputInfo.shapeInfo.logicalShape.length;\n const outRank = outShapeInfo.logicalShape.length;\n if (!inputInfo.shapeInfo.isUniform && inRank === outRank &&\n inputInfo.shapeInfo.flatOffset == null &&\n util.arraysEqual(inTexShape, outTexShape)) {\n return `\n float ${funcName}() {\n return sampleTexture(${texName}, resultUV);\n }\n `;\n }\n const type = getCoordsDataType(outRank);\n const broadcastDims = getBroadcastDims(inputInfo.shapeInfo.logicalShape, outShapeInfo.logicalShape);\n const rankDiff = outRank - inRank;\n let coordsSnippet;\n const fields = ['x', 'y', 'z', 'w', 'u', 'v'];\n if (inRank === 0) {\n coordsSnippet = '';\n }\n else if (outRank < 2 && broadcastDims.length >= 1) {\n coordsSnippet = 'coords = 0;';\n }\n else {\n coordsSnippet =\n broadcastDims.map(d => `coords.${fields[d + rankDiff]} = 0;`)\n .join('\\n');\n }\n let unpackedCoordsSnippet = '';\n if (outRank < 2 && inRank > 0) {\n unpackedCoordsSnippet = 'coords';\n }\n else {\n unpackedCoordsSnippet = inputInfo.shapeInfo.logicalShape\n .map((s, i) => `coords.${fields[i + rankDiff]}`)\n .join(', ');\n }\n return `\n float ${funcName}() {\n ${type} coords = getOutputCoords();\n ${coordsSnippet}\n return get${texFuncSnippet}(${unpackedCoordsSnippet});\n }\n `;\n}\nexport function getCoordsDataType(rank) {\n if (rank <= 1) {\n return 'int';\n }\n else if (rank === 2) {\n return 'ivec2';\n }\n else if (rank === 3) {\n return 'ivec3';\n }\n else if (rank === 4) {\n return 'ivec4';\n }\n else if (rank === 5) {\n return 'ivec5';\n }\n else if (rank === 6) {\n return 'ivec6';\n }\n else {\n throw Error(`GPU for rank ${rank} is not yet supported`);\n }\n}\nexport function getUniformInfoFromShape(isPacked, shape, texShape) {\n const { newShape, keptDims } = util.squeezeShape(shape);\n const rank = shape.length;\n const useSqueezePackedShape = isPacked && rank === 3 && shape[0] === 1;\n const squeezeShape = useSqueezePackedShape ? shape.slice(1) : newShape;\n const useSqueezeShape = (!isPacked && rank > 1 && !util.arraysEqual(shape, texShape) &&\n newShape.length < rank) ||\n useSqueezePackedShape;\n const uniformShape = useSqueezeShape ? squeezeShape : shape;\n return { useSqueezeShape, uniformShape, keptDims };\n}\n/** Returns a new input info (a copy) that has a squeezed logical shape. */\nexport function squeezeInputInfo(inInfo, squeezedShape) {\n // Deep copy.\n const newInputInfo = JSON.parse(JSON.stringify(inInfo));\n newInputInfo.shapeInfo.logicalShape = squeezedShape;\n return newInputInfo;\n}\nfunction getSqueezedParams(params, keptDims) {\n return keptDims.map(d => params[d]).join(', ');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZGVyX2NvbXBpbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9zaGFkZXJfY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsNEVBQTRFO0FBQzVFLDREQUE0RDtBQUU1RCxPQUFPLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE1BQU0sRUFBQyxnQkFBZ0IsRUFBQyxHQUFHLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUMsa0JBQWtCLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEtBQUssV0FBVyxNQUFNLHdCQUF3QixDQUFDO0FBMEJ0RCxNQUFNLFVBQVUsVUFBVSxDQUN0QixVQUF1QixFQUFFLFdBQXNCLEVBQy9DLE9BQXNCO0lBQ3hCLE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztJQUNwQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUxRCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUN6QixjQUFjLENBQUMsSUFBSSxDQUNmLGlCQUFpQixDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDL0Q7YUFBTTtZQUNMLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEVBQUU7WUFDL0IsTUFBTSxFQUFDLFlBQVksRUFBQyxHQUFHLHVCQUF1QixDQUMxQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUUsUUFBUSxZQUFZLENBQUMsTUFBTSxFQUFFO2dCQUMzQixLQUFLLENBQUM7b0JBQ0osY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO29CQUNuRCxNQUFNO2dCQUNSLEtBQUssQ0FBQztvQkFDSixjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztvQkFDckQsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7b0JBQ3JELE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO29CQUNyRCxNQUFNO2dCQUNSO29CQUNFLE1BQU07YUFDVDtZQUNELGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtRQUMvQixRQUFRLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLEtBQUssQ0FBQztnQkFDSixjQUFjLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzdDLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osY0FBYyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUMvQyxjQUFjLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7Z0JBQ3BELE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osY0FBYyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUMvQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osY0FBYyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUMvQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxjQUFjLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7S0FDbkQ7SUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUU7UUFDMUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUMzQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztLQUNKO0lBQ0QsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJELE1BQU0sb0JBQW9CLEdBQUcsVUFBVTtTQUNMLEdBQUcsQ0FDQSxDQUFDLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUN4QixDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQ3BDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixFQUFFLENBQUM7SUFDbEMsTUFBTSx5QkFBeUIsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxJQUFJLHFCQUE2QixDQUFDO0lBQ2xDLElBQUksNEJBQW9DLENBQUM7SUFDekMsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpDLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRTtRQUN4QixxQkFBcUIsR0FBRyw4QkFBOEIsQ0FDbEQsV0FBVyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEUsNEJBQTRCLEdBQUcsNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDcEU7U0FBTTtRQUNMLHFCQUFxQixHQUFHLHdCQUF3QixDQUM1QyxXQUFXLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4RSw0QkFBNEIsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNqRTtJQUVELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtRQUN4QixZQUFZLElBQUksb0JBQW9CLENBQUM7S0FDdEM7SUFFRCxNQUFNLE1BQU0sR0FBRztRQUNiLFlBQVksRUFBRSx5QkFBeUIsRUFBRSw0QkFBNEI7UUFDckUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CO1FBQy9ELE9BQU8sQ0FBQyxRQUFRO0tBQ2pCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQ3pCLE1BQWlCLEVBQUUsbUJBQW1CLEdBQUcsS0FBSztJQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztJQUM1QyxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDcEIsS0FBSyxDQUFDO1lBQ0osT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN2RCxLQUFLLENBQUM7WUFDSixPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNuRCxLQUFLLENBQUM7WUFDSixPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNuRCxLQUFLLENBQUM7WUFDSixPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNuRCxLQUFLLENBQUM7WUFDSixPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNuRCxLQUFLLENBQUM7WUFDSixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUM7WUFDSixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQ1gsR0FBRyxLQUFLLENBQUMsTUFBTSxtQkFBbUI7Z0JBQ2xDLHVCQUF1QixDQUFDLENBQUM7S0FDaEM7QUFDSCxDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FDL0IsTUFBaUIsRUFBRSxtQkFBNEI7SUFDakQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDNUMsUUFBUSxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ3BCLEtBQUssQ0FBQztZQUNKLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsS0FBSyxDQUFDO1lBQ0osT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxLQUFLLENBQUM7WUFDSixPQUFPLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELEtBQUssQ0FBQztZQUNKLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDekQ7WUFDRSxPQUFPLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0tBQzFEO0FBQ0gsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzVCLE1BQWlCLEVBQUUsWUFBdUIsRUFBRSxrQkFBa0IsR0FBRyxLQUFLLEVBQ3RFLG1CQUE0QjtJQUM5QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixJQUFJLGtCQUFrQixFQUFFO1FBQ3RCLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztLQUNoRTtTQUFNO1FBQ0wsR0FBRyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDOUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUNyQyxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLEdBQUcsSUFBSSw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNMLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDdkQ7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsOEJBQThCLENBQ25DLFFBQWtCLEVBQUUsV0FBNkIsRUFDakQsbUJBQTRCO0lBQzlCLFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUN2QixLQUFLLENBQUM7WUFDSixPQUFPLHFCQUFxQixFQUFFLENBQUM7UUFDakMsS0FBSyxDQUFDO1lBQ0osT0FBTyx1QkFBdUIsQ0FDMUIsUUFBb0IsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUM5RCxLQUFLLENBQUM7WUFDSixPQUFPLHVCQUF1QixDQUMxQixRQUE0QixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RFLEtBQUssQ0FBQztZQUNKLE9BQU8sdUJBQXVCLENBQzFCLFFBQW9DLEVBQUUsV0FBVyxFQUNqRCxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNCO1lBQ0UsT0FBTyx1QkFBdUIsQ0FDMUIsUUFBUSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0tBQ25EO0FBQ0gsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQzdCLFFBQWtCLEVBQUUsV0FBNkIsRUFDakQsbUJBQTRCO0lBQzlCLFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUN2QixLQUFLLENBQUM7WUFDSixPQUFPLHFCQUFxQixFQUFFLENBQUM7UUFDakMsS0FBSyxDQUFDO1lBQ0osT0FBTyxpQkFBaUIsQ0FDcEIsUUFBb0IsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUM5RCxLQUFLLENBQUM7WUFDSixPQUFPLGlCQUFpQixDQUNwQixRQUE0QixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RFLEtBQUssQ0FBQztZQUNKLE9BQU8saUJBQWlCLENBQ3BCLFFBQW9DLEVBQUUsV0FBVyxFQUNqRCxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNCLEtBQUssQ0FBQztZQUNKLE9BQU8saUJBQWlCLENBQ3BCLFFBQTRDLEVBQUUsV0FBVyxFQUN6RCxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNCLEtBQUssQ0FBQztZQUNKLE9BQU8saUJBQWlCLENBQ3BCLFFBQW9ELEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsS0FBSyxDQUFDO1lBQ0osT0FBTyxpQkFBaUIsQ0FDcEIsUUFBNEQsRUFDNUQsV0FBVyxDQUFDLENBQUM7UUFDbkI7WUFDRSxNQUFNLElBQUksS0FBSyxDQUNYLEdBQUcsUUFBUSxDQUFDLE1BQU0seUNBQXlDLENBQUMsQ0FBQztLQUNwRTtBQUNILENBQUM7QUFFRCxTQUFTLDRCQUE0QixDQUFDLElBQVU7SUFDOUMsT0FBTzs7ZUFFTSxJQUFJLENBQUMsU0FBUzs7R0FFMUIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLElBQVU7SUFDNUMsT0FBTzs7UUFFRCxJQUFJLENBQUMsTUFBTTs7R0FFaEIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLDZCQUE2QixDQUFDLElBQVU7SUFDL0MsT0FBTzs7UUFFRCxJQUFJLENBQUMsTUFBTTs7R0FFaEIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFVO0lBQ2pDLE1BQU0sYUFBYSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU87Ozs7TUFJakMsSUFBSSxDQUFDLFNBQVM7TUFDZCxJQUFJLENBQUMsWUFBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1QmpCLElBQUksQ0FBQyxnQkFBZ0I7TUFDckIsSUFBSSxDQUFDLGdCQUFnQjtNQUNyQixJQUFJLENBQUMsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXlCaEIsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQixpQkFBaUI7R0FDcEIsQ0FBQztJQUVGLE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLGlCQUFpQixHQUFHOzs7Ozs7Ozs7Ozs7Q0FZekIsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUc7Ozs7Ozs7O0NBUXpCLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHOzs7Ozs7Ozs7Q0FTekIsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUc7Ozs7Ozs7Ozs7O0NBVzVCLENBQUM7QUFFRixTQUFTLHFCQUFxQjtJQUM1QixPQUFPOzs7O0dBSU4sQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUM1QixLQUFlLEVBQUUsUUFBMEIsRUFDM0MsbUJBQTRCO0lBQzlCLE1BQU0sY0FBYyxHQUNoQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzNCLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsT0FBTzs7OztLQUlSLENBQUM7U0FDRDtRQUVELE9BQU87O3NDQUUyQixjQUFjLENBQUMsQ0FBQyxDQUFDOztLQUVsRCxDQUFDO0tBQ0g7SUFFRCxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDM0IsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixPQUFPOzs7O0tBSVIsQ0FBQztTQUNEO1FBRUQsT0FBTzs7c0NBRTJCLGNBQWMsQ0FBQyxDQUFDLENBQUM7O0tBRWxELENBQUM7S0FDSDtJQUVELElBQUksbUJBQW1CLEVBQUU7UUFDdkIsT0FBTzs7Ozs7OztHQU9SLENBQUM7S0FDRDtJQUVELE9BQU87OztvQ0FHMkIsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUM7aUNBQzFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7O0dBRS9DLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FDdEIsS0FBZSxFQUFFLFFBQTBCLEVBQzNDLG1CQUE0QjtJQUM5QixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckIsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixPQUFPOzs7O0tBSVIsQ0FBQztTQUNEO1FBQ0QsT0FBTzs7a0NBRXVCLFFBQVEsQ0FBQyxDQUFDLENBQUM7O0tBRXhDLENBQUM7S0FDSDtJQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQixJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE9BQU87Ozs7S0FJUixDQUFDO1NBQ0Q7UUFDRCxPQUFPOztrQ0FFdUIsUUFBUSxDQUFDLENBQUMsQ0FBQzs7S0FFeEMsQ0FBQztLQUNIO0lBQ0QsSUFBSSxtQkFBbUIsRUFBRTtRQUN2QixPQUFPOzs7Ozs7R0FNUixDQUFDO0tBQ0Q7SUFDRCxPQUFPOzs7b0NBRzJCLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDOzRCQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDOztHQUVwQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzVCLEtBQStCLEVBQUUsUUFBMEIsRUFDM0QsbUJBQTRCO0lBQzlCLElBQUksbUJBQW1CLEVBQUU7UUFDdkIsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlIsQ0FBQztLQUNEO0lBRUQsTUFBTSxjQUFjLEdBQ2hCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sYUFBYSxHQUFHLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRW5FLE9BQU87OztvQ0FHMkIsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUM7aUNBQzFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7O3dCQUUxQixhQUFhO3FCQUNoQixhQUFhOzs2QkFFTCxrQkFBa0I7NEJBQ25CLGtCQUFrQjs7OztHQUkzQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQ3RCLEtBQStCLEVBQUUsUUFBMEIsRUFDM0QsbUJBQTRCO0lBQzlCLElBQUksbUJBQW1CLEVBQUU7UUFDdkIsTUFBTSxzQkFBc0IsR0FDeEIsV0FBVyxDQUFDLGlEQUFpRCxDQUN6RCxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFaEMsT0FBTzs7Ozs7TUFLTCxzQkFBc0I7OztDQUczQixDQUFDO0tBQ0M7SUFDRCxNQUFNLHNCQUFzQixHQUN4QixXQUFXLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNFLE9BQU87OztvQ0FHMkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUNBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEMsc0JBQXNCOzs7R0FHM0IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUM1QixLQUFlLEVBQUUsUUFBMEIsRUFDM0MsbUJBQTRCO0lBQzlCLElBQUksbUJBQW1CLEVBQUU7UUFDdkIsMEJBQTBCO1FBQzFCLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlIsQ0FBQztLQUNEO0lBQ0QsTUFBTSxjQUFjLEdBQ2hCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxhQUFhLEdBQ2Ysa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFDbkMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUV2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsY0FBYyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QyxPQUFPLEdBQUc7YUFDRCxDQUFDLGNBQWMsY0FBYztrQkFDeEIsQ0FBQyxNQUFNLGNBQWM7S0FDbEMsR0FBRyxPQUFPLENBQUM7UUFDWixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7S0FDN0I7SUFFRCxPQUFPO1VBQ0MsS0FBSyxDQUFDLE1BQU07O29DQUVjLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO2lDQUMxQyxjQUFjLENBQUMsQ0FBQyxDQUFDOztRQUUxQyxPQUFPOzt3QkFFUyxhQUFhO3FCQUNoQixhQUFhOzs2QkFFTCxrQkFBa0I7NEJBQ25CLGtCQUFrQjs7bUJBRTNCLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTs7R0FFdEMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN0QixLQUF1QyxFQUFFLFFBQTBCLEVBQ25FLG1CQUE0QjtJQUM5QixJQUFJLG1CQUFtQixFQUFFO1FBQ3ZCLE1BQU0sc0JBQXNCLEdBQ3hCLFdBQVcsQ0FBQyxpREFBaUQsQ0FDekQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0QyxPQUFPOzs7OztRQUtILHNCQUFzQjs7O0dBRzNCLENBQUM7S0FDRDtJQUNELE1BQU0sc0JBQXNCLEdBQUcsV0FBVyxDQUFDLGtDQUFrQyxDQUN6RSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWxDLE9BQU87OztlQUdNLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lDQUNULFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEMsc0JBQXNCOzs7R0FHM0IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN0QixLQUErQyxFQUMvQyxRQUEwQjtJQUM1QixNQUFNLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FDekUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFeEMsT0FBTzs7a0RBRXlDLFFBQVEsQ0FBQyxDQUFDLENBQUM7K0JBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUM7O2lDQUVULFFBQVEsQ0FBQyxDQUFDLENBQUM7O1FBRXBDLHNCQUFzQjs7Ozs7R0FLM0IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN0QixLQUF1RCxFQUN2RCxRQUEwQjtJQUM1QixNQUFNLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FDekUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTlDLE9BQU87OztlQUdNLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lDQUNULFFBQVEsQ0FBQyxDQUFDLENBQUM7O1FBRXBDLHNCQUFzQjs7Ozs7R0FLM0IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUM1QixLQUF1QixFQUFFLFFBQTBCLEVBQ25ELG1CQUE0QjtJQUM5QixNQUFNLGNBQWMsR0FDaEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDckMsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixPQUFPOzs7OztLQUtSLENBQUM7U0FDRDtRQUVELE9BQU87OzhDQUVtQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQ3ZELGNBQWMsQ0FBQyxDQUFDLENBQUM7O0tBRXBCLENBQUM7S0FDSDtJQUVELDZDQUE2QztJQUM3QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRW5EOzs7Ozs7OztPQVFHO0lBQ0gsSUFBSSxtQkFBbUIsRUFBRTtRQUN2QixPQUFPOzs7Ozs7Ozs7Ozs7O0dBYVIsQ0FBQztLQUNEO0lBRUQsT0FBTzs7O29DQUcyQixjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQzs7aUNBRTFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7NkJBQ3JCLGtCQUFrQjs0QkFDbkIsa0JBQWtCOzs7O0dBSTNDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FDdEIsS0FBdUIsRUFBRSxRQUEwQixFQUNuRCxtQkFBNEI7SUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtRQUNyQyxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE9BQU87Ozs7S0FJUixDQUFDO1NBQ0Q7UUFDRCxPQUFPOzswQ0FFK0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7O0tBRWhFLENBQUM7S0FDSDtJQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNsQixJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE9BQU87Ozs7Ozs7S0FPUixDQUFDO1NBQ0Q7UUFDRCxPQUFPOzs7c0NBRzJCLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO21DQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDOzs7S0FHekMsQ0FBQztLQUNIO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsT0FBTzs7Ozs7OztLQU9SLENBQUM7U0FDRDtRQUNELE9BQU87OztzQ0FHMkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7bUNBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztLQUd6QyxDQUFDO0tBQ0g7SUFDRCxJQUFJLG1CQUFtQixFQUFFO1FBQ3ZCLE9BQU87Ozs7Ozs7OztHQVNSLENBQUM7S0FDRDtJQUNELE9BQU87OztvQ0FHMkIsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUNBQzlCLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQ0osS0FBSyxDQUFDLENBQUMsQ0FBQzs7O0dBR2pDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxPQUFlO0lBQy9DLE9BQU8sU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxTQUFvQjtJQUNsRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQy9CLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztJQUNsQyxPQUFPO1dBQ0UsUUFBUTtlQUNKLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTzs7R0FFckMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUNyQixTQUFvQixFQUFFLG1CQUE0QjtJQUNwRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQy9CLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUNqQyxPQUFPLFNBQVMsUUFBUSxjQUFjLE9BQU8sSUFBSSxDQUFDO0tBQ25EO0lBQ0QsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUN4RCxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtRQUNsQyxPQUFPO2NBQ0csUUFBUTsrQkFDUyxPQUFPOztLQUVqQyxDQUFDO0tBQ0g7SUFFRCxNQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLG1CQUFtQixFQUFFO1FBQ3ZCLE9BQU87WUFDQyxRQUFROzZCQUNTLE9BQU8sZ0JBQWdCLE9BQU8sZ0JBQ25ELE1BQU07NkJBQ2UsT0FBTzs7R0FFakMsQ0FBQztLQUNEO0lBRUQsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUNwRCxPQUFPO1lBQ0csUUFBUTs2QkFDUyxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU07NkJBQzFCLE9BQU87O0dBRWpDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FDdkIsU0FBb0IsRUFBRSxtQkFBNEI7SUFDcEQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzlDLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixFQUFFLENBQUM7SUFDbEMsSUFBSSxtQkFBbUIsRUFBRTtRQUN2QixPQUFPO1dBQ0EsUUFBUTtnREFFWCxPQUFPLG1DQUFtQyxPQUFPOzs7ZUFHMUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPOztHQUVyQyxDQUFDO0tBQ0Q7SUFDRCxNQUFNLGNBQWMsR0FDaEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU87V0FDRSxRQUFROztVQUVULGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO2VBQ2xDLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTzs7R0FFckMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDakIsU0FBb0IsRUFBRSxtQkFBNEI7SUFDcEQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVFLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDakMsd0VBQXdFO1FBQ3hFLE9BQU87Y0FDRyxRQUFRO1VBQ1osaUJBQWlCLENBQUMsU0FBUyxDQUFDOztLQUVqQyxDQUFDO0tBQ0g7SUFFRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTFCLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQzlCLE9BQU87Y0FDRyxRQUFROytCQUNTLE9BQU87O0tBRWpDLENBQUM7S0FDSDtJQUNELE1BQU0sTUFBTSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsT0FBTztjQUNDLFFBQVE7NkNBQ3VCLE1BQU0sb0JBQ3pDLE9BQU87K0JBQ2MsT0FBTzs7S0FFakMsQ0FBQztTQUNEO1FBRUQsT0FBTztjQUNHLFFBQVE7NkNBQ3VCLE1BQU0sY0FBYyxLQUFLOytCQUN2QyxPQUFPOztLQUVqQyxDQUFDO0tBQ0g7SUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE9BQU87Y0FDQyxRQUFRO3dDQUNrQixNQUFNLG9CQUNwQyxPQUFPOytCQUNjLE9BQU87O0tBRWpDLENBQUM7U0FDRDtRQUVELE9BQU87Y0FDRyxRQUFRO3dDQUNrQixNQUFNLGNBQWMsS0FBSzsrQkFDbEMsT0FBTzs7S0FFakMsQ0FBQztLQUNIO0lBRUQsSUFBSSxtQkFBbUIsRUFBRTtRQUN2QixPQUFPO1lBQ0MsUUFBUTs2QkFDUyxPQUFPLGdCQUM1QixPQUFPLHdCQUF3QixNQUFNOzZCQUNoQixPQUFPOztHQUVqQyxDQUFDO0tBQ0Q7SUFFRCxPQUFPO1lBQ0csUUFBUTs2QkFDUyxLQUFLLEtBQUssS0FBSyxhQUFhLE1BQU07NkJBQ2xDLE9BQU87O0dBRWpDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FDdkIsU0FBb0IsRUFBRSxtQkFBNEI7SUFDcEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDL0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztJQUNsQyxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDekQsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixPQUFPO2FBQ0EsUUFBUTtxREFDZ0MsT0FBTyxnQkFDbEQsT0FBTzs7aUJBRUEsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPOztLQUVyQyxDQUFDO1NBQ0Q7UUFDRCxPQUFPO2FBQ0UsUUFBUTtxREFDZ0MsT0FBTyxPQUFPLE9BQU87O2lCQUV6RCxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU87O0tBRXJDLENBQUM7S0FDSDtJQUVELElBQUksbUJBQW1CLEVBQUU7UUFDdkIsT0FBTztXQUNBLFFBQVE7Z0RBRVgsT0FBTyxtQ0FBbUMsT0FBTzswQ0FDZixPQUFPOztlQUVsQyxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU87O0dBRXJDLENBQUM7S0FDRDtJQUNELE1BQU0sY0FBYyxHQUNoQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFN0MsT0FBTztXQUNFLFFBQVE7aUNBQ2MsWUFBWSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FDN0QsY0FBYyxDQUFDLENBQUMsQ0FBQztlQUNSLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTzs7R0FFckMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDakIsU0FBb0IsRUFBRSxtQkFBNEI7SUFDcEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDL0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBRTlDLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtRQUN6RCxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE9BQU87Y0FDQyxRQUFRO3FEQUMrQixPQUFPLGdCQUNsRCxPQUFPOytCQUNjLE9BQU87O0tBRWpDLENBQUM7U0FDRDtRQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTztZQUNDLFFBQVE7bURBQytCLE9BQU8sT0FBTyxPQUFPOzZCQUMzQyxPQUFPOztHQUVqQyxDQUFDO0tBQ0Q7SUFFRCxNQUFNLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0lBQy9CLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QixPQUFPO1FBQ0gsb0JBQW9CLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDO2NBQ2pELFFBQVE7aUJBQ0wsUUFBUSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7O0tBRTNELENBQUM7S0FDSDtJQUVELElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDakMsd0VBQXdFO1FBQ3hFLE9BQU87Y0FDRyxRQUFRO3FEQUMrQixLQUFLLENBQUMsQ0FBQyxDQUFDO1VBQ25ELGlCQUFpQixDQUFDLFNBQVMsQ0FBQzs7S0FFakMsQ0FBQztLQUNIO0lBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDakIsb0VBQW9FO1FBQ3BFLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsT0FBTztjQUNDLFFBQVE7MkNBQ3FCLE1BQU0sV0FDdkMsT0FBTztvREFDbUMsT0FBTzsrQkFDNUIsT0FBTzs7S0FFakMsQ0FBQztTQUNEO1FBQ0QsT0FBTztZQUNDLFFBQVE7eUNBQ3FCLE1BQU0sV0FBVyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRDQUN0QixPQUFPOzZCQUN0QixPQUFPOztHQUVqQyxDQUFDO0tBQ0Q7SUFDRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDakIsb0VBQW9FO1FBQ3BFLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsT0FBTztjQUNDLFFBQVE7MkNBQ3FCLE1BQU0sV0FDdkMsT0FBTzsrQ0FDOEIsT0FBTzsrQkFDdkIsT0FBTzs7S0FFakMsQ0FBQztTQUNEO1FBQ0QsT0FBTztZQUNDLFFBQVE7eUNBQ3FCLE1BQU0sV0FBVyxLQUFLLENBQUMsQ0FBQyxDQUFDO3VDQUMzQixPQUFPOzZCQUNqQixPQUFPOztHQUVqQyxDQUFDO0tBQ0Q7SUFFRCxJQUFJLG1CQUFtQixFQUFFO1FBQ3ZCLE9BQU87Y0FDRyxRQUFROzs0QkFFTSxPQUFPLG9CQUFvQixNQUFNOytCQUM5QixPQUFPLGdCQUM5QixPQUFPOytCQUNnQixPQUFPOztLQUVqQyxDQUFDO0tBQ0g7SUFDRCxPQUFPO1VBQ0MsUUFBUTs7d0JBRU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU07MkJBQ3ZCLE9BQU8sS0FBSyxPQUFPOzJCQUNuQixPQUFPOztDQUVqQyxDQUFDO0FBQ0YsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQ3ZCLFNBQW9CLEVBQUUsbUJBQTRCO0lBQ3BELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQy9DLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDL0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUM5QyxNQUFNLGNBQWMsR0FDaEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNsQixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsT0FBTztVQUNELDBCQUEwQixDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztlQUN4RCxRQUFRO21CQUNKLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDOztPQUUzRCxDQUFDO0tBQ0w7SUFFRCxNQUFNLElBQUksR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLElBQUksbUJBQW1CLEVBQUU7UUFDdkIsT0FBTztXQUNBLFFBQVE7Z0RBRVgsT0FBTyxtQ0FBbUMsT0FBTzswQ0FDZixPQUFPOzBEQUV6QyxPQUFPOzs7ZUFHQSxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU87O0dBRXJDLENBQUM7S0FDRDtJQUVELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxhQUFhLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTdELE9BQU87V0FDRSxRQUFROztVQUVULE9BQU8sS0FBSyxPQUFPLEtBQUssYUFBYSxLQUFLLFlBQVk7ZUFDakQsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPOztHQUVyQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNqQixTQUFvQixFQUFFLG1CQUE0QjtJQUNwRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztJQUMvQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQy9CLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekIsTUFBTSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztJQUMvQixJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUN2QyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLE9BQU87VUFDRCxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUM7Z0JBQ2pELFFBQVE7bUJBQ0wsUUFBUSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7O09BRTNELENBQUM7S0FDTDtJQUVELElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDakMsd0VBQXdFO1FBQ3hFLE9BQU87Y0FDRyxRQUFROztpQ0FFVyxPQUFPLEtBQUssT0FBTztVQUMxQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7O0tBRWpDLENBQUM7S0FDSDtJQUVELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7SUFDbEQsSUFBSSxPQUFPLEtBQUssT0FBTyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDN0MsbUVBQW1FO1FBQ25FLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsT0FBTztjQUNDLFFBQVE7d0JBQ0UsT0FBTzs7OzswQkFJTCxPQUFPLGdCQUFnQixPQUFPOytCQUN6QixPQUFPOztLQUVqQyxDQUFDO1NBQ0Q7UUFDRCxPQUFPO2dCQUNLLFFBQVE7O29EQUU0QixPQUFPOzs0QkFFL0IsT0FBTyxPQUFPLE9BQU87aUNBQ2hCLE9BQU87O09BRWpDLENBQUM7S0FDTDtJQUVELElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQzdDLG1FQUFtRTtRQUNuRSxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE9BQU87Y0FDQyxRQUFRO2dEQUMwQixPQUFPOzt1REFFQSxPQUFPLGdCQUNwRCxPQUFPOytCQUNjLE9BQU87O0tBRWpDLENBQUM7U0FDRDtRQUNELE9BQU87WUFDQyxRQUFROzhDQUMwQixLQUFLLENBQUMsQ0FBQyxDQUFDOztxREFFRCxPQUFPLE9BQU8sT0FBTzs2QkFDN0MsT0FBTzs7R0FFakMsQ0FBQztLQUNEO0lBRUQsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsSUFBSSxtQkFBbUIsRUFBRTtRQUN2QixPQUFPO1lBQ0MsUUFBUTs7c0JBRUUsT0FBTyxjQUFjLE9BQU87c0JBQzVCLE9BQU87NERBQytCLE1BQU07NkJBQ3JDLE9BQU8sZ0JBQWdCLE9BQU87NkJBQzlCLE9BQU87O0tBRS9CLENBQUM7S0FDSDtJQUNELE9BQU87Y0FDSyxRQUFROzs0QkFFTSxPQUFPLFlBQVksT0FBTyxjQUFjLE1BQU07K0JBQzNDLE9BQU8sS0FBSyxPQUFPOytCQUNuQixPQUFPOztHQUVuQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQ3ZCLFNBQW9CLEVBQUUsbUJBQTRCO0lBQ3BELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDL0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLElBQUksR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLElBQUksbUJBQW1CLEVBQUU7UUFDdkIsMEJBQTBCO1FBQzFCLE9BQU87V0FDQSxRQUFROzBDQUN1QixPQUFPOzBEQUV6QyxPQUFPOzt5QkFFVSxPQUFPOztnREFHeEIsT0FBTyxtQ0FBbUMsT0FBTzs7O21HQUlqRCxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU87O0dBRTlCLENBQUM7S0FDRDtJQUNELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDOUMsTUFBTSxjQUFjLEdBQ2hCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFJLGFBQWEsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLElBQUksTUFBTSxHQUFHLHlCQUF5QixDQUFDO0lBQ3ZDLElBQUksS0FBSyxHQUFHLE9BQU8sYUFBYSxrQkFBa0IsWUFBWSxjQUFjLENBQUM7SUFDN0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLGFBQWEsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sYUFBYSxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQy9DO0lBQ0QsT0FBTztXQUNFLFFBQVEsSUFBSSxNQUFNO29CQUNULEtBQUs7MkJBQ0UsT0FBTztrQ0FDQSxPQUFPO3FEQUNZLE9BQU8sS0FBSyxPQUFPO2VBQ3pELElBQUksQ0FBQyxTQUFTLElBQUksT0FBTzs7R0FFckMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDakIsU0FBb0IsRUFBRSxtQkFBNEI7SUFDcEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDL0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFFbkMsTUFBTSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE9BQU87UUFDSCxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUM7Y0FDakQsUUFBUTtpQkFDTCxRQUFRLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzs7S0FFM0QsQ0FBQztLQUNIO0lBRUQsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtRQUNqQyx3RUFBd0U7UUFDeEUsT0FBTztjQUNHLFFBQVE7O2lDQUVXLE9BQU8sS0FBSyxPQUFPLEtBQUssT0FBTztVQUN0RCxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7O0tBRWpDLENBQUM7S0FDSDtJQUVELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFNUIsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLE9BQU8sV0FBVyxDQUFDO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLGlCQUFpQixPQUFPLHFCQUFxQixDQUFDO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixPQUFPLHFCQUFxQixDQUFDO0lBQ2pFLElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQzdDLG1FQUFtRTtRQUNuRSxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE9BQU87Y0FDQyxRQUFRO1VBQ1osVUFBVTtVQUNWLFVBQVU7Ozs7OzswQkFNTSxPQUFPLGdCQUFnQixPQUFPOytCQUN6QixPQUFPOztLQUVqQyxDQUFDO1NBQ0Q7UUFDRCxPQUFPO2NBQ0csUUFBUTs7Ozt1QkFJQyxPQUFPLEtBQUssT0FBTzs7MEJBRWhCLE9BQU8sT0FBTyxPQUFPOytCQUNoQixPQUFPOztLQUVqQyxDQUFDO0tBQ0g7SUFDRCxJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtRQUM3QyxtRUFBbUU7UUFDbkUsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixPQUFPO2NBQ0MsUUFBUTs7Z0NBRVUsT0FBTyxjQUFjLE9BQU8sYUFDbEQsT0FBTzs7O3lCQUdRLE9BQU8sZ0JBQWdCLE9BQU87K0JBQ3hCLE9BQU87O0tBRWpDLENBQUM7U0FDRDtRQUNELE9BQU87Y0FDRyxRQUFROztnQ0FFVSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7Ozt5QkFHdkMsT0FBTyxPQUFPLE9BQU87K0JBQ2YsT0FBTzs7S0FFakMsQ0FBQztLQUNIO0lBRUQsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsSUFBSSxtQkFBbUIsRUFBRTtRQUN2QixPQUFPO1lBQ0MsUUFBUTs7UUFFWixVQUFVO1FBQ1YsVUFBVTtRQUNWLFVBQVU7Ozs2QkFHVyxPQUFPLGdCQUM1QixPQUFPLHdCQUF3QixNQUFNOzZCQUNoQixPQUFPOztHQUVqQyxDQUFDO0tBQ0Q7SUFDRCxPQUFPO1lBQ0csUUFBUTs7MEJBRU0sT0FBTyxZQUFZLE9BQU87b0JBQ2hDLE9BQU87NkJBQ0UsT0FBTyxLQUFLLE9BQU8sYUFBYSxNQUFNOzZCQUN0QyxPQUFPOztHQUVqQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLFNBQW9CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQy9DLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDL0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFFbkMsTUFBTSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRCxPQUFPO1FBQ0gsb0JBQW9CLENBQUMsWUFBWSxDQUFDO2NBQzVCLFFBQVE7aUJBQ0wsUUFBUSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7O0tBRTNELENBQUM7S0FDSDtJQUVELElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDakMsd0VBQXdFO1FBQ3hFLE9BQU87Y0FDRyxRQUFROzs7aUJBR0wsT0FBTyxLQUFLLE9BQU8sS0FBSyxPQUFPLEtBQUssT0FBTzs7VUFFbEQsaUJBQWlCLENBQUMsU0FBUyxDQUFDOztLQUVqQyxDQUFDO0tBQ0g7SUFFRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUNsRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVCLElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQzdDLG1FQUFtRTtRQUNuRSxPQUFPO2NBQ0csUUFBUTs7O2dDQUdVLE9BQU8sS0FBSyxPQUFPLEtBQUssT0FBTzs7MEJBRXJDLE9BQU8sT0FBTyxPQUFPOytCQUNoQixPQUFPOztLQUVqQyxDQUFDO0tBQ0g7SUFFRCxJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtRQUM3QyxtRUFBbUU7UUFDbkUsT0FBTztjQUNHLFFBQVE7OztpQkFHTCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQzlCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQzs7O3lCQUd4QixPQUFPLE9BQU8sT0FBTzsrQkFDZixPQUFPOztLQUVqQyxDQUFDO0tBQ0g7SUFFRCxNQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxPQUFPO1lBQ0csUUFBUTs7MEJBRU0sT0FBTyxZQUFZLE9BQU8sY0FBYyxPQUFPO3FCQUNwRCxPQUFPLGVBQWUsTUFBTTs2QkFDcEIsT0FBTyxLQUFLLE9BQU87NkJBQ25CLE9BQU87O0dBRWpDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsU0FBb0I7SUFDeEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDL0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVFLE1BQU0sRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNsQyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLE9BQU87UUFDSCxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7Y0FDNUIsUUFBUTs7aUJBRUwsUUFBUSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7O0tBRTNELENBQUM7S0FDSDtJQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBRW5DLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDakMsd0VBQXdFO1FBQ3hFLE9BQU87Y0FDRyxRQUFROzs7O2lCQUlMLE9BQU8sS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFLLE9BQU87OzttQkFHekMsT0FBTztVQUNoQixpQkFBaUIsQ0FBQyxTQUFTLENBQUM7O0tBRWpDLENBQUM7S0FDSDtJQUVELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsSUFBSSxPQUFPLEtBQUssT0FBTyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDN0MsbUVBQW1FO1FBQ25FLE9BQU87Y0FDRyxRQUFROzs7O2lCQUlMLE9BQU8sS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFLLE9BQU87OzswQkFHbEMsT0FBTyxPQUFPLE9BQU87K0JBQ2hCLE9BQU87O0tBRWpDLENBQUM7S0FDSDtJQUNELElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQzdDLG1FQUFtRTtRQUNuRSxPQUFPO2NBQ0csUUFBUTs7O2lCQUdMLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ3pDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDOUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ25CLEtBQUssQ0FBQyxDQUFDLENBQUM7Ozt5QkFHQSxPQUFPLE9BQU8sT0FBTzsrQkFDZixPQUFPOztLQUVqQyxDQUFDO0tBQ0g7SUFDRCxNQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxPQUFPO1lBQ0csUUFBUTs7OzBCQUdNLE9BQU8sWUFBWSxPQUFPLGNBQWMsT0FBTztxQkFDcEQsT0FBTyxlQUFlLE9BQU8sZUFBZSxNQUFNOzZCQUMxQyxPQUFPLEtBQUssT0FBTzs2QkFDbkIsT0FBTzs7R0FFakMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFNBQW9CO0lBQzdDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXBFLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNkLE9BQU8sVUFBVSxPQUFPLEdBQUcsQ0FBQztLQUM3QjtJQUVELE9BQU87MEJBQ2lCLE1BQU07O2lCQUVmLE9BQU87OztHQUdyQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsOEJBQThCLENBQ25DLFNBQW9CLEVBQUUsWUFBdUI7SUFDL0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFDeEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ3ZELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBRWpELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUNsQyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFakUsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUNsQyxJQUFJLGFBQXFCLENBQUM7SUFDMUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTlDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNoQixhQUFhLEdBQUcsRUFBRSxDQUFDO0tBQ3BCO1NBQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQ25ELGFBQWEsR0FBRyxhQUFhLENBQUM7S0FDL0I7U0FBTTtRQUNMLGFBQWE7WUFDVCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7aUJBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNyQjtJQUNELElBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQy9CLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzdCLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztLQUNsQztTQUFNO1FBQ0wscUJBQXFCLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZO2FBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO2FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN6QztJQUVELElBQUksTUFBTSxHQUFHLHFCQUFxQixDQUFDO0lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRSxNQUFNLGFBQWEsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlELE1BQU0sY0FBYyxHQUFHLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFFckMsSUFBSSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ3JELE1BQU0sR0FBRzs7S0FFUixDQUFDO0tBQ0g7U0FBTSxJQUFJLGFBQWEsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUMzQyxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDakIsTUFBTSxHQUFHOztPQUVSLENBQUM7U0FDSDthQUFNO1lBQ0wsTUFBTSxHQUFHOztPQUVSLENBQUM7U0FDSDtLQUNGO1NBQU0sSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQy9CLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUV4QixJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN4RSxNQUFNLEdBQUcsNkJBQTZCLENBQUM7U0FDeEM7YUFBTSxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDM0MsTUFBTSxHQUFHLDRDQUE0QztnQkFDakQsZ0NBQWdDLENBQUM7U0FDdEM7YUFBTSxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDM0MsTUFBTSxHQUFHLDhDQUE4QyxDQUFDO1NBQ3pEO0tBQ0Y7SUFFRCxPQUFPO1dBQ0UsUUFBUTtRQUNYLElBQUk7UUFDSixhQUFhOzhCQUNTLGNBQWMsSUFBSSxxQkFBcUI7UUFDN0QsTUFBTTs7R0FFWCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQzdCLFNBQW9CLEVBQUUsWUFBdUI7SUFDL0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFDeEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUNoRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFFakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLE1BQU0sS0FBSyxPQUFPO1FBQ3BELFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLElBQUk7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDN0MsT0FBTztjQUNHLFFBQVE7K0JBQ1MsT0FBTzs7S0FFakMsQ0FBQztLQUNIO0lBRUQsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQ2xDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRSxNQUFNLFFBQVEsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ2xDLElBQUksYUFBcUIsQ0FBQztJQUMxQixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFOUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2hCLGFBQWEsR0FBRyxFQUFFLENBQUM7S0FDcEI7U0FBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7UUFDbkQsYUFBYSxHQUFHLGFBQWEsQ0FBQztLQUMvQjtTQUFNO1FBQ0wsYUFBYTtZQUNULGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztpQkFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCO0lBQ0QsSUFBSSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7SUFDL0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDN0IscUJBQXFCLEdBQUcsUUFBUSxDQUFDO0tBQ2xDO1NBQU07UUFDTCxxQkFBcUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVk7YUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7YUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsT0FBTztZQUNHLFFBQVE7UUFDWixJQUFJO1FBQ0osYUFBYTtrQkFDSCxjQUFjLElBQUkscUJBQXFCOztHQUV0RCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFZO0lBQzVDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtRQUNiLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxPQUFPLENBQUM7S0FDaEI7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxPQUFPLENBQUM7S0FDaEI7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxPQUFPLENBQUM7S0FDaEI7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxPQUFPLENBQUM7S0FDaEI7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxPQUFPLENBQUM7S0FDaEI7U0FBTTtRQUNMLE1BQU0sS0FBSyxDQUFDLGdCQUFnQixJQUFJLHVCQUF1QixDQUFDLENBQUM7S0FDMUQ7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxRQUFpQixFQUFFLEtBQWUsRUFBRSxRQUFrQjtJQUN4RCxNQUFNLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMxQixNQUFNLHFCQUFxQixHQUFHLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkUsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN2RSxNQUFNLGVBQWUsR0FDakIsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQzNELFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLHFCQUFxQixDQUFDO0lBQzFCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDNUQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLE1BQWlCLEVBQUUsYUFBdUI7SUFDNUMsYUFBYTtJQUNiLE1BQU0sWUFBWSxHQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFlBQVksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQztJQUNwRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFnQixFQUFFLFFBQWtCO0lBQzdELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBQbGVhc2UgbWFrZSBzdXJlIHRoZSBzaGFrZXIga2V5IGluIG1ha2VTaGFkZXJLZXkgaW4gZ3BncHVfbWF0aC50cyBpcyB3ZWxsXG4vLyBtYXBwZWQgaWYgYW55IHNoYWRlciBzb3VyY2UgY29kZSBpcyBjaGFuZ2VkIGluIHRoaXMgZmlsZS5cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5jb25zdCB7Z2V0QnJvYWRjYXN0RGltc30gPSBiYWNrZW5kX3V0aWw7XG5pbXBvcnQge2dldEdsc2xEaWZmZXJlbmNlcywgR0xTTH0gZnJvbSAnLi9nbHNsX3ZlcnNpb24nO1xuaW1wb3J0ICogYXMgc2hhZGVyX3V0aWwgZnJvbSAnLi9zaGFkZXJfY29tcGlsZXJfdXRpbCc7XG5cbmV4cG9ydCB0eXBlIFNoYXBlSW5mbyA9IHtcbiAgbG9naWNhbFNoYXBlOiBudW1iZXJbXSxcbiAgdGV4U2hhcGU6IFtudW1iZXIsIG51bWJlcl0sXG4gIGlzVW5pZm9ybTogYm9vbGVhbixcbiAgaXNQYWNrZWQ6IGJvb2xlYW4sXG4gIGZsYXRPZmZzZXQ6IG51bWJlclxufTtcblxuZXhwb3J0IHR5cGUgSW5wdXRJbmZvID0ge1xuICBuYW1lOiBzdHJpbmcsXG4gIHNoYXBlSW5mbzogU2hhcGVJbmZvXG59O1xuXG5leHBvcnQgdHlwZSBVbmlmb3JtVHlwZSA9XG4gICAgJ2Zsb2F0J3wndmVjMid8J3ZlYzMnfCd2ZWM0J3wnaW50J3wnaXZlYzInfCdpdmVjMyd8J2l2ZWM0JztcblxuaW50ZXJmYWNlIFByb2dyYW1QYXJhbXMge1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBlbmFibGVTaGFwZVVuaWZvcm1zPzogYm9vbGVhbjtcbiAgcGFja2VkSW5wdXRzPzogYm9vbGVhbjtcbiAgY3VzdG9tVW5pZm9ybXM/OlxuICAgICAgQXJyYXk8e25hbWU6IHN0cmluZzsgYXJyYXlJbmRleD86IG51bWJlcjsgdHlwZTogVW5pZm9ybVR5cGU7fT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlU2hhZGVyKFxuICAgIGlucHV0c0luZm86IElucHV0SW5mb1tdLCBvdXRwdXRTaGFwZTogU2hhcGVJbmZvLFxuICAgIHByb2dyYW06IFByb2dyYW1QYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCBwcmVmaXhTbmlwcGV0czogc3RyaW5nW10gPSBbXTtcbiAgaW5wdXRzSW5mby5mb3JFYWNoKHggPT4ge1xuICAgIGNvbnN0IHNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZUluZm8ubG9naWNhbFNoYXBlKTtcblxuICAgIC8vIFNuaXBwZXQgd2hlbiB3ZSBkZWNpZGVkIHRvIHVwbG9hZCB0aGUgdmFsdWVzIGFzIHVuaWZvcm0uXG4gICAgaWYgKHguc2hhcGVJbmZvLmlzVW5pZm9ybSkge1xuICAgICAgcHJlZml4U25pcHBldHMucHVzaChcbiAgICAgICAgICBgdW5pZm9ybSBmbG9hdCAke3gubmFtZX0ke3NpemUgPiAxID8gYFske3NpemV9XWAgOiAnJ307YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gc2FtcGxlcjJEICR7eC5uYW1lfTtgKTtcbiAgICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gaW50IG9mZnNldCR7eC5uYW1lfTtgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvZ3JhbS5lbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICBjb25zdCB7dW5pZm9ybVNoYXBlfSA9IGdldFVuaWZvcm1JbmZvRnJvbVNoYXBlKFxuICAgICAgICAgIHByb2dyYW0ucGFja2VkSW5wdXRzLCB4LnNoYXBlSW5mby5sb2dpY2FsU2hhcGUsIHguc2hhcGVJbmZvLnRleFNoYXBlKTtcbiAgICAgIHN3aXRjaCAodW5pZm9ybVNoYXBlLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcHJlZml4U25pcHBldHMucHVzaChgdW5pZm9ybSBpbnQgJHt4Lm5hbWV9U2hhcGU7YCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBwcmVmaXhTbmlwcGV0cy5wdXNoKGB1bmlmb3JtIGl2ZWMyICR7eC5uYW1lfVNoYXBlO2ApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcHJlZml4U25pcHBldHMucHVzaChgdW5pZm9ybSBpdmVjMyAke3gubmFtZX1TaGFwZTtgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gaXZlYzQgJHt4Lm5hbWV9U2hhcGU7YCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmVmaXhTbmlwcGV0cy5wdXNoKGB1bmlmb3JtIGl2ZWMyICR7eC5uYW1lfVRleFNoYXBlO2ApO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHByb2dyYW0uZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgIHN3aXRjaCAob3V0cHV0U2hhcGUubG9naWNhbFNoYXBlLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBwcmVmaXhTbmlwcGV0cy5wdXNoKGB1bmlmb3JtIGludCBvdXRTaGFwZTtgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gaXZlYzIgb3V0U2hhcGU7YCk7XG4gICAgICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gaW50IG91dFNoYXBlU3RyaWRlcztgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gaXZlYzMgb3V0U2hhcGU7YCk7XG4gICAgICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gaXZlYzIgb3V0U2hhcGVTdHJpZGVzO2ApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDpcbiAgICAgICAgcHJlZml4U25pcHBldHMucHVzaChgdW5pZm9ybSBpdmVjNCBvdXRTaGFwZTtgKTtcbiAgICAgICAgcHJlZml4U25pcHBldHMucHVzaChgdW5pZm9ybSBpdmVjMyBvdXRTaGFwZVN0cmlkZXM7YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gaXZlYzIgb3V0VGV4U2hhcGU7YCk7XG4gIH1cbiAgaWYgKHByb2dyYW0uY3VzdG9tVW5pZm9ybXMpIHtcbiAgICBwcm9ncmFtLmN1c3RvbVVuaWZvcm1zLmZvckVhY2goKGQpID0+IHtcbiAgICAgIHByZWZpeFNuaXBwZXRzLnB1c2goYHVuaWZvcm0gJHtkLnR5cGV9ICR7ZC5uYW1lfSR7XG4gICAgICAgICAgZC5hcnJheUluZGV4ID8gYFske2QuYXJyYXlJbmRleH1dYCA6ICcnfTtgKTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBpbnB1dFByZWZpeFNuaXBwZXQgPSBwcmVmaXhTbmlwcGV0cy5qb2luKCdcXG4nKTtcblxuICBjb25zdCBpbnB1dFNhbXBsaW5nU25pcHBldCA9IGlucHV0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPT4gZ2V0SW5wdXRTYW1wbGluZ1NuaXBwZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgb3V0cHV0U2hhcGUsIHByb2dyYW0ucGFja2VkSW5wdXRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0uZW5hYmxlU2hhcGVVbmlmb3JtcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgY29uc3Qgb3V0VGV4U2hhcGUgPSBvdXRwdXRTaGFwZS50ZXhTaGFwZTtcbiAgY29uc3QgZ2xzbCA9IGdldEdsc2xEaWZmZXJlbmNlcygpO1xuICBjb25zdCBmbG9hdFRleHR1cmVTYW1wbGVTbmlwcGV0ID0gZ2V0RmxvYXRUZXh0dXJlU2FtcGxlU25pcHBldChnbHNsKTtcbiAgbGV0IG91dHB1dFNhbXBsaW5nU25pcHBldDogc3RyaW5nO1xuICBsZXQgZmxvYXRUZXh0dXJlU2V0T3V0cHV0U25pcHBldDogc3RyaW5nO1xuICBsZXQgc2hhZGVyUHJlZml4ID0gZ2V0U2hhZGVyUHJlZml4KGdsc2wpO1xuXG4gIGlmIChvdXRwdXRTaGFwZS5pc1BhY2tlZCkge1xuICAgIG91dHB1dFNhbXBsaW5nU25pcHBldCA9IGdldFBhY2tlZE91dHB1dFNhbXBsaW5nU25pcHBldChcbiAgICAgICAgb3V0cHV0U2hhcGUubG9naWNhbFNoYXBlLCBvdXRUZXhTaGFwZSwgcHJvZ3JhbS5lbmFibGVTaGFwZVVuaWZvcm1zKTtcbiAgICBmbG9hdFRleHR1cmVTZXRPdXRwdXRTbmlwcGV0ID0gZ2V0RmxvYXRUZXh0dXJlU2V0UkdCQVNuaXBwZXQoZ2xzbCk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0U2FtcGxpbmdTbmlwcGV0ID0gZ2V0T3V0cHV0U2FtcGxpbmdTbmlwcGV0KFxuICAgICAgICBvdXRwdXRTaGFwZS5sb2dpY2FsU2hhcGUsIG91dFRleFNoYXBlLCBwcm9ncmFtLmVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICAgIGZsb2F0VGV4dHVyZVNldE91dHB1dFNuaXBwZXQgPSBnZXRGbG9hdFRleHR1cmVTZXRSU25pcHBldChnbHNsKTtcbiAgfVxuXG4gIGlmIChwcm9ncmFtLnBhY2tlZElucHV0cykge1xuICAgIHNoYWRlclByZWZpeCArPSBTSEFERVJfUEFDS0VEX1BSRUZJWDtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IFtcbiAgICBzaGFkZXJQcmVmaXgsIGZsb2F0VGV4dHVyZVNhbXBsZVNuaXBwZXQsIGZsb2F0VGV4dHVyZVNldE91dHB1dFNuaXBwZXQsXG4gICAgaW5wdXRQcmVmaXhTbmlwcGV0LCBvdXRwdXRTYW1wbGluZ1NuaXBwZXQsIGlucHV0U2FtcGxpbmdTbmlwcGV0LFxuICAgIHByb2dyYW0udXNlckNvZGVcbiAgXS5qb2luKCdcXG4nKTtcbiAgcmV0dXJuIHNvdXJjZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2FtcGxlckZyb21JbkluZm8oXG4gICAgaW5JbmZvOiBJbnB1dEluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMgPSBmYWxzZSk6IHN0cmluZyB7XG4gIGNvbnN0IHNoYXBlID0gaW5JbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGU7XG4gIHN3aXRjaCAoc2hhcGUubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGdldFNhbXBsZXJTY2FsYXIoaW5JbmZvLCBlbmFibGVTaGFwZVVuaWZvcm1zKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZ2V0U2FtcGxlcjFEKGluSW5mbywgZW5hYmxlU2hhcGVVbmlmb3Jtcyk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGdldFNhbXBsZXIyRChpbkluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBnZXRTYW1wbGVyM0QoaW5JbmZvLCBlbmFibGVTaGFwZVVuaWZvcm1zKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gZ2V0U2FtcGxlcjREKGluSW5mbywgZW5hYmxlU2hhcGVVbmlmb3Jtcyk7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIGdldFNhbXBsZXI1RChpbkluZm8pO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBnZXRTYW1wbGVyNkQoaW5JbmZvKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAke3NoYXBlLmxlbmd0aH0tRCBpbnB1dCBzYW1wbGluZ2AgK1xuICAgICAgICAgIGAgaXMgbm90IHlldCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQYWNrZWRTYW1wbGVyRnJvbUluSW5mbyhcbiAgICBpbkluZm86IElucHV0SW5mbywgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHNoYXBlID0gaW5JbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGU7XG4gIHN3aXRjaCAoc2hhcGUubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGdldFBhY2tlZFNhbXBsZXJTY2FsYXIoaW5JbmZvKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZ2V0UGFja2VkU2FtcGxlcjFEKGluSW5mbywgZW5hYmxlU2hhcGVVbmlmb3Jtcyk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGdldFBhY2tlZFNhbXBsZXIyRChpbkluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBnZXRQYWNrZWRTYW1wbGVyM0QoaW5JbmZvLCBlbmFibGVTaGFwZVVuaWZvcm1zKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGdldFBhY2tlZFNhbXBsZXJORChpbkluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldElucHV0U2FtcGxpbmdTbmlwcGV0KFxuICAgIGluSW5mbzogSW5wdXRJbmZvLCBvdXRTaGFwZUluZm86IFNoYXBlSW5mbywgdXNlc1BhY2tlZFRleHR1cmVzID0gZmFsc2UsXG4gICAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGxldCByZXMgPSAnJztcbiAgaWYgKHVzZXNQYWNrZWRUZXh0dXJlcykge1xuICAgIHJlcyArPSBnZXRQYWNrZWRTYW1wbGVyRnJvbUluSW5mbyhpbkluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICB9IGVsc2Uge1xuICAgIHJlcyArPSBnZXRTYW1wbGVyRnJvbUluSW5mbyhpbkluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICB9XG5cbiAgY29uc3QgaW5TaGFwZSA9IGluSW5mby5zaGFwZUluZm8ubG9naWNhbFNoYXBlO1xuICBjb25zdCBvdXRTaGFwZSA9IG91dFNoYXBlSW5mby5sb2dpY2FsU2hhcGU7XG4gIGlmIChpblNoYXBlLmxlbmd0aCA8PSBvdXRTaGFwZS5sZW5ndGgpIHtcbiAgICBpZiAodXNlc1BhY2tlZFRleHR1cmVzKSB7XG4gICAgICByZXMgKz0gZ2V0UGFja2VkU2FtcGxlckF0T3V0cHV0Q29vcmRzKGluSW5mbywgb3V0U2hhcGVJbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzICs9IGdldFNhbXBsZXJBdE91dHB1dENvb3JkcyhpbkluZm8sIG91dFNoYXBlSW5mbyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGdldFBhY2tlZE91dHB1dFNhbXBsaW5nU25pcHBldChcbiAgICBvdXRTaGFwZTogbnVtYmVyW10sIG91dFRleFNoYXBlOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKG91dFNoYXBlLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBnZXRPdXRwdXRTY2FsYXJDb29yZHMoKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZ2V0T3V0cHV0UGFja2VkMURDb29yZHMoXG4gICAgICAgICAgb3V0U2hhcGUgYXMgW251bWJlcl0sIG91dFRleFNoYXBlLCBlbmFibGVTaGFwZVVuaWZvcm1zKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gZ2V0T3V0cHV0UGFja2VkMkRDb29yZHMoXG4gICAgICAgICAgb3V0U2hhcGUgYXMgW251bWJlciwgbnVtYmVyXSwgb3V0VGV4U2hhcGUsIGVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBnZXRPdXRwdXRQYWNrZWQzRENvb3JkcyhcbiAgICAgICAgICBvdXRTaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG91dFRleFNoYXBlLFxuICAgICAgICAgIGVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZ2V0T3V0cHV0UGFja2VkTkRDb29yZHMoXG4gICAgICAgICAgb3V0U2hhcGUsIG91dFRleFNoYXBlLCBlbmFibGVTaGFwZVVuaWZvcm1zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRPdXRwdXRTYW1wbGluZ1NuaXBwZXQoXG4gICAgb3V0U2hhcGU6IG51bWJlcltdLCBvdXRUZXhTaGFwZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvdXRTaGFwZS5sZW5ndGgpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gZ2V0T3V0cHV0U2NhbGFyQ29vcmRzKCk7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGdldE91dHB1dDFEQ29vcmRzKFxuICAgICAgICAgIG91dFNoYXBlIGFzIFtudW1iZXJdLCBvdXRUZXhTaGFwZSwgZW5hYmxlU2hhcGVVbmlmb3Jtcyk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGdldE91dHB1dDJEQ29vcmRzKFxuICAgICAgICAgIG91dFNoYXBlIGFzIFtudW1iZXIsIG51bWJlcl0sIG91dFRleFNoYXBlLCBlbmFibGVTaGFwZVVuaWZvcm1zKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gZ2V0T3V0cHV0M0RDb29yZHMoXG4gICAgICAgICAgb3V0U2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBvdXRUZXhTaGFwZSxcbiAgICAgICAgICBlbmFibGVTaGFwZVVuaWZvcm1zKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gZ2V0T3V0cHV0NERDb29yZHMoXG4gICAgICAgICAgb3V0U2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG91dFRleFNoYXBlLFxuICAgICAgICAgIGVuYWJsZVNoYXBlVW5pZm9ybXMpO1xuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiBnZXRPdXRwdXQ1RENvb3JkcyhcbiAgICAgICAgICBvdXRTaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBvdXRUZXhTaGFwZSk7XG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuIGdldE91dHB1dDZEQ29vcmRzKFxuICAgICAgICAgIG91dFNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICBvdXRUZXhTaGFwZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtvdXRTaGFwZS5sZW5ndGh9LUQgb3V0cHV0IHNhbXBsaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RmxvYXRUZXh0dXJlU2FtcGxlU25pcHBldChnbHNsOiBHTFNMKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcbiAgICBmbG9hdCBzYW1wbGVUZXh0dXJlKHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlciwgdmVjMiB1dikge1xuICAgICAgcmV0dXJuICR7Z2xzbC50ZXh0dXJlMkR9KHRleHR1cmVTYW1wbGVyLCB1dikucjtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGdldEZsb2F0VGV4dHVyZVNldFJTbmlwcGV0KGdsc2w6IEdMU0wpOiBzdHJpbmcge1xuICByZXR1cm4gYFxuICAgIHZvaWQgc2V0T3V0cHV0KGZsb2F0IHZhbCkge1xuICAgICAgJHtnbHNsLm91dHB1dH0gPSB2ZWM0KHZhbCwgMCwgMCwgMCk7XG4gICAgfVxuICBgO1xufVxuXG5mdW5jdGlvbiBnZXRGbG9hdFRleHR1cmVTZXRSR0JBU25pcHBldChnbHNsOiBHTFNMKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcbiAgICB2b2lkIHNldE91dHB1dCh2ZWM0IHZhbCkge1xuICAgICAgJHtnbHNsLm91dHB1dH0gPSB2YWw7XG4gICAgfVxuICBgO1xufVxuXG5mdW5jdGlvbiBnZXRTaGFkZXJQcmVmaXgoZ2xzbDogR0xTTCk6IHN0cmluZyB7XG4gIGNvbnN0IFNIQURFUl9QUkVGSVggPSBgJHtnbHNsLnZlcnNpb259XG4gICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuICAgIHByZWNpc2lvbiBoaWdocCBpbnQ7XG4gICAgcHJlY2lzaW9uIGhpZ2hwIHNhbXBsZXIyRDtcbiAgICAke2dsc2wudmFyeWluZ0ZzfSB2ZWMyIHJlc3VsdFVWO1xuICAgICR7Z2xzbC5kZWZpbmVPdXRwdXR9XG4gICAgY29uc3QgdmVjMiBoYWxmQ1IgPSB2ZWMyKDAuNSwgMC41KTtcblxuICAgIHN0cnVjdCBpdmVjNVxuICAgIHtcbiAgICAgIGludCB4O1xuICAgICAgaW50IHk7XG4gICAgICBpbnQgejtcbiAgICAgIGludCB3O1xuICAgICAgaW50IHU7XG4gICAgfTtcblxuICAgIHN0cnVjdCBpdmVjNlxuICAgIHtcbiAgICAgIGludCB4O1xuICAgICAgaW50IHk7XG4gICAgICBpbnQgejtcbiAgICAgIGludCB3O1xuICAgICAgaW50IHU7XG4gICAgICBpbnQgdjtcbiAgICB9O1xuXG4gICAgdW5pZm9ybSBmbG9hdCBOQU47XG4gICAgJHtnbHNsLmRlZmluZVNwZWNpYWxOYU59XG4gICAgJHtnbHNsLmRlZmluZVNwZWNpYWxJbmZ9XG4gICAgJHtnbHNsLmRlZmluZVJvdW5kfVxuXG4gICAgaW50IGltb2QoaW50IHgsIGludCB5KSB7XG4gICAgICByZXR1cm4geCAtIHkgKiAoeCAvIHkpO1xuICAgIH1cblxuICAgIGludCBpZGl2KGludCBhLCBpbnQgYiwgZmxvYXQgc2lnbikge1xuICAgICAgaW50IHJlcyA9IGEgLyBiO1xuICAgICAgaW50IG1vZCA9IGltb2QoYSwgYik7XG4gICAgICBpZiAoc2lnbiA8IDAuICYmIG1vZCAhPSAwKSB7XG4gICAgICAgIHJlcyAtPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvL0Jhc2VkIG9uIHRoZSB3b3JrIG9mIERhdmUgSG9za2luc1xuICAgIC8vaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3LzRkalNSV1xuICAgICNkZWZpbmUgSEFTSFNDQUxFMSA0NDMuODk3NVxuICAgIGZsb2F0IHJhbmRvbShmbG9hdCBzZWVkKXtcbiAgICAgIHZlYzIgcCA9IHJlc3VsdFVWICogc2VlZDtcbiAgICAgIHZlYzMgcDMgID0gZnJhY3QodmVjMyhwLnh5eCkgKiBIQVNIU0NBTEUxKTtcbiAgICAgIHAzICs9IGRvdChwMywgcDMueXp4ICsgMTkuMTkpO1xuICAgICAgcmV0dXJuIGZyYWN0KChwMy54ICsgcDMueSkgKiBwMy56KTtcbiAgICB9XG5cbiAgICAke1NBTVBMRV8xRF9TTklQUEVUfVxuICAgICR7U0FNUExFXzJEX1NOSVBQRVR9XG4gICAgJHtTQU1QTEVfM0RfU05JUFBFVH1cbiAgYDtcblxuICByZXR1cm4gU0hBREVSX1BSRUZJWDtcbn1cblxuY29uc3QgU0FNUExFXzFEX1NOSVBQRVQgPSBgXG52ZWMyIHV2RnJvbUZsYXQoaW50IHRleE51bVIsIGludCB0ZXhOdW1DLCBpbnQgaW5kZXgpIHtcbiAgaW50IHRleFIgPSBpbmRleCAvIHRleE51bUM7XG4gIGludCB0ZXhDID0gaW5kZXggLSB0ZXhSICogdGV4TnVtQztcbiAgcmV0dXJuICh2ZWMyKHRleEMsIHRleFIpICsgaGFsZkNSKSAvIHZlYzIodGV4TnVtQywgdGV4TnVtUik7XG59XG52ZWMyIHBhY2tlZFVWZnJvbTFEKGludCB0ZXhOdW1SLCBpbnQgdGV4TnVtQywgaW50IGluZGV4KSB7XG4gIGludCB0ZXhlbEluZGV4ID0gaW5kZXggLyAyO1xuICBpbnQgdGV4UiA9IHRleGVsSW5kZXggLyB0ZXhOdW1DO1xuICBpbnQgdGV4QyA9IHRleGVsSW5kZXggLSB0ZXhSICogdGV4TnVtQztcbiAgcmV0dXJuICh2ZWMyKHRleEMsIHRleFIpICsgaGFsZkNSKSAvIHZlYzIodGV4TnVtQywgdGV4TnVtUik7XG59XG5gO1xuXG5jb25zdCBTQU1QTEVfMkRfU05JUFBFVCA9IGBcbnZlYzIgcGFja2VkVVZmcm9tMkQoaW50IHRleGVsc0luTG9naWNhbFJvdywgaW50IHRleE51bVIsXG4gIGludCB0ZXhOdW1DLCBpbnQgcm93LCBpbnQgY29sKSB7XG4gIGludCB0ZXhlbEluZGV4ID0gKHJvdyAvIDIpICogdGV4ZWxzSW5Mb2dpY2FsUm93ICsgKGNvbCAvIDIpO1xuICBpbnQgdGV4UiA9IHRleGVsSW5kZXggLyB0ZXhOdW1DO1xuICBpbnQgdGV4QyA9IHRleGVsSW5kZXggLSB0ZXhSICogdGV4TnVtQztcbiAgcmV0dXJuICh2ZWMyKHRleEMsIHRleFIpICsgaGFsZkNSKSAvIHZlYzIodGV4TnVtQywgdGV4TnVtUik7XG59XG5gO1xuXG5jb25zdCBTQU1QTEVfM0RfU05JUFBFVCA9IGBcbnZlYzIgcGFja2VkVVZmcm9tM0QoaW50IHRleE51bVIsIGludCB0ZXhOdW1DLFxuICAgIGludCB0ZXhlbHNJbkJhdGNoLCBpbnQgdGV4ZWxzSW5Mb2dpY2FsUm93LCBpbnQgYixcbiAgICBpbnQgcm93LCBpbnQgY29sKSB7XG4gIGludCBpbmRleCA9IGIgKiB0ZXhlbHNJbkJhdGNoICsgKHJvdyAvIDIpICogdGV4ZWxzSW5Mb2dpY2FsUm93ICsgKGNvbCAvIDIpO1xuICBpbnQgdGV4UiA9IGluZGV4IC8gdGV4TnVtQztcbiAgaW50IHRleEMgPSBpbmRleCAtIHRleFIgKiB0ZXhOdW1DO1xuICByZXR1cm4gKHZlYzIodGV4QywgdGV4UikgKyBoYWxmQ1IpIC8gdmVjMih0ZXhOdW1DLCB0ZXhOdW1SKTtcbn1cbmA7XG5cbmNvbnN0IFNIQURFUl9QQUNLRURfUFJFRklYID0gYFxuICBmbG9hdCBnZXRDaGFubmVsKHZlYzQgZnJhZywgdmVjMiBpbm5lckRpbXMpIHtcbiAgICB2ZWMyIG1vZENvb3JkID0gbW9kKGlubmVyRGltcywgMi4pO1xuICAgIHJldHVybiBtb2RDb29yZC54ID09IDAuID9cbiAgICAgIChtb2RDb29yZC55ID09IDAuID8gZnJhZy5yIDogZnJhZy5nKSA6XG4gICAgICAobW9kQ29vcmQueSA9PSAwLiA/IGZyYWcuYiA6IGZyYWcuYSk7XG4gIH1cbiAgZmxvYXQgZ2V0Q2hhbm5lbCh2ZWM0IGZyYWcsIGludCBkaW0pIHtcbiAgICBmbG9hdCBtb2RDb29yZCA9IG1vZChmbG9hdChkaW0pLCAyLik7XG4gICAgcmV0dXJuIG1vZENvb3JkID09IDAuID8gZnJhZy5yIDogZnJhZy5nO1xuICB9XG5gO1xuXG5mdW5jdGlvbiBnZXRPdXRwdXRTY2FsYXJDb29yZHMoKSB7XG4gIHJldHVybiBgXG4gICAgaW50IGdldE91dHB1dENvb3JkcygpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0UGFja2VkMURDb29yZHMoXG4gICAgc2hhcGU6IFtudW1iZXJdLCB0ZXhTaGFwZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgcGFja2VkVGV4U2hhcGUgPVxuICAgICAgW01hdGguY2VpbCh0ZXhTaGFwZVswXSAvIDIpLCBNYXRoLmNlaWwodGV4U2hhcGVbMV0gLyAyKV07XG4gIGlmIChwYWNrZWRUZXhTaGFwZVswXSA9PT0gMSkge1xuICAgIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgaW50IGdldE91dHB1dENvb3JkcygpIHtcbiAgICAgICAgcmV0dXJuIDIgKiBpbnQocmVzdWx0VVYueCAqIGNlaWwoZmxvYXQob3V0VGV4U2hhcGVbMV0pIC8gMi4wKSk7XG4gICAgICB9XG4gICAgYDtcbiAgICB9XG5cbiAgICByZXR1cm4gYFxuICAgICAgaW50IGdldE91dHB1dENvb3JkcygpIHtcbiAgICAgICAgcmV0dXJuIDIgKiBpbnQocmVzdWx0VVYueCAqICR7cGFja2VkVGV4U2hhcGVbMV19LjApO1xuICAgICAgfVxuICAgIGA7XG4gIH1cblxuICBpZiAocGFja2VkVGV4U2hhcGVbMV0gPT09IDEpIHtcbiAgICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIGludCBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICAgIHJldHVybiAyICogaW50KHJlc3VsdFVWLnkgKiBjZWlsKGZsb2F0KG91dFRleFNoYXBlWzBdKSAvIDIuMCkpO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcbiAgICAgIGludCBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICAgIHJldHVybiAyICogaW50KHJlc3VsdFVWLnkgKiAke3BhY2tlZFRleFNoYXBlWzBdfS4wKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG5cbiAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICByZXR1cm4gYFxuICAgIGludCBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiBwYWNrZWRUZXhTaGFwZSA9IGl2ZWMyKGNlaWwoZmxvYXQob3V0VGV4U2hhcGVbMF0pIC8gMi4wKSwgY2VpbChmbG9hdChvdXRUZXhTaGFwZVsxXSkgLyAyLjApKTtcbiAgICAgIGl2ZWMyIHJlc1RleFJDID0gaXZlYzIocmVzdWx0VVYueXggKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMyKHBhY2tlZFRleFNoYXBlWzBdLCBwYWNrZWRUZXhTaGFwZVsxXSkpO1xuICAgICAgcmV0dXJuIDIgKiAocmVzVGV4UkMueCAqIHBhY2tlZFRleFNoYXBlWzFdICsgcmVzVGV4UkMueSk7XG4gICAgfVxuICBgO1xuICB9XG5cbiAgcmV0dXJuIGBcbiAgICBpbnQgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgaXZlYzIgcmVzVGV4UkMgPSBpdmVjMihyZXN1bHRVVi55eCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIoJHtwYWNrZWRUZXhTaGFwZVswXX0sICR7cGFja2VkVGV4U2hhcGVbMV19KSk7XG4gICAgICByZXR1cm4gMiAqIChyZXNUZXhSQy54ICogJHtwYWNrZWRUZXhTaGFwZVsxXX0gKyByZXNUZXhSQy55KTtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGdldE91dHB1dDFEQ29vcmRzKFxuICAgIHNoYXBlOiBbbnVtYmVyXSwgdGV4U2hhcGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmICh0ZXhTaGFwZVswXSA9PT0gMSkge1xuICAgIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgaW50IGdldE91dHB1dENvb3JkcygpIHtcbiAgICAgICAgcmV0dXJuIGludChyZXN1bHRVVi54ICogZmxvYXQob3V0VGV4U2hhcGVbMV0pKTtcbiAgICAgIH1cbiAgICBgO1xuICAgIH1cbiAgICByZXR1cm4gYFxuICAgICAgaW50IGdldE91dHB1dENvb3JkcygpIHtcbiAgICAgICAgcmV0dXJuIGludChyZXN1bHRVVi54ICogJHt0ZXhTaGFwZVsxXX0uMCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuICBpZiAodGV4U2hhcGVbMV0gPT09IDEpIHtcbiAgICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIGludCBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICAgIHJldHVybiBpbnQocmVzdWx0VVYueSAqIGZsb2F0KG91dFRleFNoYXBlWzBdKSk7XG4gICAgICB9XG4gICAgYDtcbiAgICB9XG4gICAgcmV0dXJuIGBcbiAgICAgIGludCBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICAgIHJldHVybiBpbnQocmVzdWx0VVYueSAqICR7dGV4U2hhcGVbMF19LjApO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbiAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICByZXR1cm4gYFxuICAgIGludCBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMihvdXRUZXhTaGFwZVswXSwgb3V0VGV4U2hhcGVbMV0pKTtcbiAgICAgIHJldHVybiByZXNUZXhSQy54ICogb3V0VGV4U2hhcGVbMV0gKyByZXNUZXhSQy55O1xuICAgIH1cbiAgYDtcbiAgfVxuICByZXR1cm4gYFxuICAgIGludCBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigke3RleFNoYXBlWzBdfSwgJHt0ZXhTaGFwZVsxXX0pKTtcbiAgICAgIHJldHVybiByZXNUZXhSQy54ICogJHt0ZXhTaGFwZVsxXX0gKyByZXNUZXhSQy55O1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0UGFja2VkM0RDb29yZHMoXG4gICAgc2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgdGV4U2hhcGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgcmV0dXJuIGBcbiAgICBpdmVjMyBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiBwYWNrZWRUZXhTaGFwZSA9IGl2ZWMyKGNlaWwoZmxvYXQob3V0VGV4U2hhcGVbMF0pIC8gMi4wKSwgY2VpbChmbG9hdChvdXRUZXhTaGFwZVsxXSkgLyAyLjApKTtcbiAgICAgIGludCB0ZXhlbHNJbkxvZ2ljYWxSb3cgPSBpbnQoY2VpbChmbG9hdChvdXRTaGFwZVsyXSkgLyAyLjApKTtcbiAgICAgIGludCB0ZXhlbHNJbkJhdGNoID0gdGV4ZWxzSW5Mb2dpY2FsUm93ICogaW50KGNlaWwoZmxvYXQob3V0U2hhcGVbMV0pIC8gMi4wKSk7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMihwYWNrZWRUZXhTaGFwZVswXSwgcGFja2VkVGV4U2hhcGVbMV0pKTtcbiAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiBwYWNrZWRUZXhTaGFwZVsxXSArIHJlc1RleFJDLnk7XG5cbiAgICAgIGludCBiID0gaW5kZXggLyB0ZXhlbHNJbkJhdGNoO1xuICAgICAgaW5kZXggLT0gYiAqIHRleGVsc0luQmF0Y2g7XG5cbiAgICAgIGludCByID0gMiAqIChpbmRleCAvIHRleGVsc0luTG9naWNhbFJvdyk7XG4gICAgICBpbnQgYyA9IGltb2QoaW5kZXgsIHRleGVsc0luTG9naWNhbFJvdykgKiAyO1xuXG4gICAgICByZXR1cm4gaXZlYzMoYiwgciwgYyk7XG4gICAgfVxuICBgO1xuICB9XG5cbiAgY29uc3QgcGFja2VkVGV4U2hhcGUgPVxuICAgICAgW01hdGguY2VpbCh0ZXhTaGFwZVswXSAvIDIpLCBNYXRoLmNlaWwodGV4U2hhcGVbMV0gLyAyKV07XG4gIGNvbnN0IHRleGVsc0luTG9naWNhbFJvdyA9IE1hdGguY2VpbChzaGFwZVsyXSAvIDIpO1xuICBjb25zdCB0ZXhlbHNJbkJhdGNoID0gdGV4ZWxzSW5Mb2dpY2FsUm93ICogTWF0aC5jZWlsKHNoYXBlWzFdIC8gMik7XG5cbiAgcmV0dXJuIGBcbiAgICBpdmVjMyBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigke3BhY2tlZFRleFNoYXBlWzBdfSwgJHtwYWNrZWRUZXhTaGFwZVsxXX0pKTtcbiAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiAke3BhY2tlZFRleFNoYXBlWzFdfSArIHJlc1RleFJDLnk7XG5cbiAgICAgIGludCBiID0gaW5kZXggLyAke3RleGVsc0luQmF0Y2h9O1xuICAgICAgaW5kZXggLT0gYiAqICR7dGV4ZWxzSW5CYXRjaH07XG5cbiAgICAgIGludCByID0gMiAqIChpbmRleCAvICR7dGV4ZWxzSW5Mb2dpY2FsUm93fSk7XG4gICAgICBpbnQgYyA9IGltb2QoaW5kZXgsICR7dGV4ZWxzSW5Mb2dpY2FsUm93fSkgKiAyO1xuXG4gICAgICByZXR1cm4gaXZlYzMoYiwgciwgYyk7XG4gICAgfVxuICBgO1xufVxuXG5mdW5jdGlvbiBnZXRPdXRwdXQzRENvb3JkcyhcbiAgICBzaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCB0ZXhTaGFwZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICBjb25zdCBjb29yZHNGcm9tSW5kZXhTbmlwcGV0ID1cbiAgICAgICAgc2hhZGVyX3V0aWwuZ2V0T3V0cHV0TG9naWNhbENvb3JkaW5hdGVzRnJvbUZsYXRJbmRleEJ5VW5pZm9ybShcbiAgICAgICAgICAgIFsncicsICdjJywgJ2QnXSwgc2hhcGUpO1xuXG4gICAgcmV0dXJuIGBcbiAgaXZlYzMgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgIGl2ZWMyIHJlc1RleFJDID0gaXZlYzIocmVzdWx0VVYueXggKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMihvdXRUZXhTaGFwZVswXSwgb3V0VGV4U2hhcGVbMV0pKTtcbiAgICBpbnQgaW5kZXggPSByZXNUZXhSQy54ICogb3V0VGV4U2hhcGVbMV0gKyByZXNUZXhSQy55O1xuICAgICR7Y29vcmRzRnJvbUluZGV4U25pcHBldH1cbiAgICByZXR1cm4gaXZlYzMociwgYywgZCk7XG4gIH1cbmA7XG4gIH1cbiAgY29uc3QgY29vcmRzRnJvbUluZGV4U25pcHBldCA9XG4gICAgICBzaGFkZXJfdXRpbC5nZXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4KFsncicsICdjJywgJ2QnXSwgc2hhcGUpO1xuXG4gIHJldHVybiBgXG4gICAgaXZlYzMgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgaXZlYzIgcmVzVGV4UkMgPSBpdmVjMihyZXN1bHRVVi55eCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIoJHt0ZXhTaGFwZVswXX0sICR7dGV4U2hhcGVbMV19KSk7XG4gICAgICBpbnQgaW5kZXggPSByZXNUZXhSQy54ICogJHt0ZXhTaGFwZVsxXX0gKyByZXNUZXhSQy55O1xuICAgICAgJHtjb29yZHNGcm9tSW5kZXhTbmlwcGV0fVxuICAgICAgcmV0dXJuIGl2ZWMzKHIsIGMsIGQpO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0UGFja2VkTkRDb29yZHMoXG4gICAgc2hhcGU6IG51bWJlcltdLCB0ZXhTaGFwZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICAvLyBUT0RPOiBzdXBwb3J0IDVkIGFuZCA2ZFxuICAgIHJldHVybiBgXG4gICAgaXZlYzQgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgaXZlYzIgcGFja2VkVGV4U2hhcGUgPSBpdmVjMihjZWlsKGZsb2F0KG91dFRleFNoYXBlWzBdKSAvIDIuMCksIGNlaWwoZmxvYXQob3V0VGV4U2hhcGVbMV0pIC8gMi4wKSk7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMihwYWNrZWRUZXhTaGFwZVswXSwgcGFja2VkVGV4U2hhcGVbMV0pKTtcbiAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiBwYWNrZWRUZXhTaGFwZVsxXSArIHJlc1RleFJDLnk7XG5cbiAgICAgIGludCB0ZXhlbHNJbkxvZ2ljYWxSb3cgPSBpbnQoY2VpbChmbG9hdChvdXRTaGFwZVszXSkgLyAyLjApKTtcbiAgICAgIGludCB0ZXhlbHNJbkJhdGNoID0gdGV4ZWxzSW5Mb2dpY2FsUm93ICogaW50KGNlaWwoZmxvYXQob3V0U2hhcGVbMl0pIC8gMi4wKSk7XG4gICAgICBpbnQgdGV4ZWxzSW5CYXRjaE4gPSB0ZXhlbHNJbkJhdGNoICogb3V0U2hhcGVbMV07XG5cbiAgICAgIGludCBiMiA9IGluZGV4IC8gdGV4ZWxzSW5CYXRjaE47XG4gICAgICBpbmRleCAtPSBiMiAqIHRleGVsc0luQmF0Y2hOO1xuXG4gICAgICBpbnQgYiA9IGluZGV4IC8gdGV4ZWxzSW5CYXRjaDtcbiAgICAgIGluZGV4IC09IGIgKiB0ZXhlbHNJbkJhdGNoO1xuXG4gICAgICBpbnQgciA9IDIgKiAoaW5kZXggLyB0ZXhlbHNJbkxvZ2ljYWxSb3cpO1xuICAgICAgaW50IGMgPSBpbW9kKGluZGV4LCB0ZXhlbHNJbkxvZ2ljYWxSb3cpICogMjtcblxuICAgICAgcmV0dXJuIGl2ZWM0KGIyLCBiLCByLCBjKTtcbiAgICB9XG4gIGA7XG4gIH1cbiAgY29uc3QgcGFja2VkVGV4U2hhcGUgPVxuICAgICAgW01hdGguY2VpbCh0ZXhTaGFwZVswXSAvIDIpLCBNYXRoLmNlaWwodGV4U2hhcGVbMV0gLyAyKV07XG5cbiAgY29uc3QgdGV4ZWxzSW5Mb2dpY2FsUm93ID0gTWF0aC5jZWlsKHNoYXBlW3NoYXBlLmxlbmd0aCAtIDFdIC8gMik7XG4gIGNvbnN0IHRleGVsc0luQmF0Y2ggPVxuICAgICAgdGV4ZWxzSW5Mb2dpY2FsUm93ICogTWF0aC5jZWlsKHNoYXBlW3NoYXBlLmxlbmd0aCAtIDJdIC8gMik7XG4gIGxldCB0ZXhlbHNJbkJhdGNoTiA9IHRleGVsc0luQmF0Y2g7XG4gIGxldCBiYXRjaGVzID0gYGA7XG4gIGxldCBjb29yZHMgPSAnYiwgciwgYyc7XG5cbiAgZm9yIChsZXQgYiA9IDI7IGIgPCBzaGFwZS5sZW5ndGggLSAxOyBiKyspIHtcbiAgICB0ZXhlbHNJbkJhdGNoTiAqPSBzaGFwZVtzaGFwZS5sZW5ndGggLSBiIC0gMV07XG4gICAgYmF0Y2hlcyA9IGBcbiAgICAgIGludCBiJHtifSA9IGluZGV4IC8gJHt0ZXhlbHNJbkJhdGNoTn07XG4gICAgICBpbmRleCAtPSBiJHtifSAqICR7dGV4ZWxzSW5CYXRjaE59O1xuICAgIGAgKyBiYXRjaGVzO1xuICAgIGNvb3JkcyA9IGBiJHtifSwgYCArIGNvb3JkcztcbiAgfVxuXG4gIHJldHVybiBgXG4gICAgaXZlYyR7c2hhcGUubGVuZ3RofSBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigke3BhY2tlZFRleFNoYXBlWzBdfSwgJHtwYWNrZWRUZXhTaGFwZVsxXX0pKTtcbiAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiAke3BhY2tlZFRleFNoYXBlWzFdfSArIHJlc1RleFJDLnk7XG5cbiAgICAgICR7YmF0Y2hlc31cblxuICAgICAgaW50IGIgPSBpbmRleCAvICR7dGV4ZWxzSW5CYXRjaH07XG4gICAgICBpbmRleCAtPSBiICogJHt0ZXhlbHNJbkJhdGNofTtcblxuICAgICAgaW50IHIgPSAyICogKGluZGV4IC8gJHt0ZXhlbHNJbkxvZ2ljYWxSb3d9KTtcbiAgICAgIGludCBjID0gaW1vZChpbmRleCwgJHt0ZXhlbHNJbkxvZ2ljYWxSb3d9KSAqIDI7XG5cbiAgICAgIHJldHVybiBpdmVjJHtzaGFwZS5sZW5ndGh9KCR7Y29vcmRzfSk7XG4gICAgfVxuICBgO1xufVxuXG5mdW5jdGlvbiBnZXRPdXRwdXQ0RENvb3JkcyhcbiAgICBzaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHRleFNoYXBlOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgIGNvbnN0IGNvb3Jkc0Zyb21JbmRleFNuaXBwZXQgPVxuICAgICAgICBzaGFkZXJfdXRpbC5nZXRPdXRwdXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4QnlVbmlmb3JtKFxuICAgICAgICAgICAgWydyJywgJ2MnLCAnZCcsICdkMiddLCBzaGFwZSk7XG5cbiAgICByZXR1cm4gYFxuICAgIGl2ZWM0IGdldE91dHB1dENvb3JkcygpIHtcbiAgICAgIGl2ZWMyIHJlc1RleFJDID0gaXZlYzIocmVzdWx0VVYueXggKlxuICAgICAgICB2ZWMyKG91dFRleFNoYXBlWzBdLCBvdXRUZXhTaGFwZVsxXSkpO1xuICAgICAgaW50IGluZGV4ID0gcmVzVGV4UkMueCAqIG91dFRleFNoYXBlWzFdICsgcmVzVGV4UkMueTtcbiAgICAgICR7Y29vcmRzRnJvbUluZGV4U25pcHBldH1cbiAgICAgIHJldHVybiBpdmVjNChyLCBjLCBkLCBkMik7XG4gICAgfVxuICBgO1xuICB9XG4gIGNvbnN0IGNvb3Jkc0Zyb21JbmRleFNuaXBwZXQgPSBzaGFkZXJfdXRpbC5nZXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4KFxuICAgICAgWydyJywgJ2MnLCAnZCcsICdkMiddLCBzaGFwZSk7XG5cbiAgcmV0dXJuIGBcbiAgICBpdmVjNCBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgdmVjMigke3RleFNoYXBlWzBdfSwgJHt0ZXhTaGFwZVsxXX0pKTtcbiAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiAke3RleFNoYXBlWzFdfSArIHJlc1RleFJDLnk7XG4gICAgICAke2Nvb3Jkc0Zyb21JbmRleFNuaXBwZXR9XG4gICAgICByZXR1cm4gaXZlYzQociwgYywgZCwgZDIpO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0NURDb29yZHMoXG4gICAgc2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgdGV4U2hhcGU6IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcge1xuICBjb25zdCBjb29yZHNGcm9tSW5kZXhTbmlwcGV0ID0gc2hhZGVyX3V0aWwuZ2V0TG9naWNhbENvb3JkaW5hdGVzRnJvbUZsYXRJbmRleChcbiAgICAgIFsncicsICdjJywgJ2QnLCAnZDInLCAnZDMnXSwgc2hhcGUpO1xuXG4gIHJldHVybiBgXG4gICAgaXZlYzUgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgaXZlYzIgcmVzVGV4UkMgPSBpdmVjMihyZXN1bHRVVi55eCAqIHZlYzIoJHt0ZXhTaGFwZVswXX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dGV4U2hhcGVbMV19KSk7XG5cbiAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiAke3RleFNoYXBlWzFdfSArIHJlc1RleFJDLnk7XG5cbiAgICAgICR7Y29vcmRzRnJvbUluZGV4U25pcHBldH1cblxuICAgICAgaXZlYzUgb3V0U2hhcGUgPSBpdmVjNShyLCBjLCBkLCBkMiwgZDMpO1xuICAgICAgcmV0dXJuIG91dFNoYXBlO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0NkRDb29yZHMoXG4gICAgc2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICB0ZXhTaGFwZTogW251bWJlciwgbnVtYmVyXSk6IHN0cmluZyB7XG4gIGNvbnN0IGNvb3Jkc0Zyb21JbmRleFNuaXBwZXQgPSBzaGFkZXJfdXRpbC5nZXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4KFxuICAgICAgWydyJywgJ2MnLCAnZCcsICdkMicsICdkMycsICdkNCddLCBzaGFwZSk7XG5cbiAgcmV0dXJuIGBcbiAgICBpdmVjNiBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgdmVjMigke3RleFNoYXBlWzBdfSwgJHt0ZXhTaGFwZVsxXX0pKTtcbiAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiAke3RleFNoYXBlWzFdfSArIHJlc1RleFJDLnk7XG5cbiAgICAgICR7Y29vcmRzRnJvbUluZGV4U25pcHBldH1cblxuICAgICAgaXZlYzYgcmVzdWx0ID0gaXZlYzYociwgYywgZCwgZDIsIGQzLCBkNCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0UGFja2VkMkRDb29yZHMoXG4gICAgc2hhcGU6IFtudW1iZXIsIG51bWJlcl0sIHRleFNoYXBlOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBwYWNrZWRUZXhTaGFwZSA9XG4gICAgICBbTWF0aC5jZWlsKHRleFNoYXBlWzBdIC8gMiksIE1hdGguY2VpbCh0ZXhTaGFwZVsxXSAvIDIpXTtcbiAgaWYgKHV0aWwuYXJyYXlzRXF1YWwoc2hhcGUsIHRleFNoYXBlKSkge1xuICAgIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgaXZlYzIgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgICBpdmVjMiBwYWNrZWRUZXhTaGFwZSA9IGl2ZWMyKGNlaWwoZmxvYXQob3V0VGV4U2hhcGVbMF0pIC8gMi4wKSwgY2VpbChmbG9hdChvdXRUZXhTaGFwZVsxXSkgLyAyLjApKTtcbiAgICAgICAgcmV0dXJuIDIgKiBpdmVjMihyZXN1bHRVVi55eCAqIHZlYzIocGFja2VkVGV4U2hhcGVbMF0sIHBhY2tlZFRleFNoYXBlWzFdKSk7XG4gICAgICB9XG4gICAgYDtcbiAgICB9XG5cbiAgICByZXR1cm4gYFxuICAgICAgaXZlYzIgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgICByZXR1cm4gMiAqIGl2ZWMyKHJlc3VsdFVWLnl4ICogdmVjMigke3BhY2tlZFRleFNoYXBlWzBdfSwgJHtcbiAgICAgICAgcGFja2VkVGV4U2hhcGVbMV19KSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIC8vIHRleGVscyBuZWVkZWQgdG8gYWNjb21tb2RhdGUgYSBsb2dpY2FsIHJvd1xuICBjb25zdCB0ZXhlbHNJbkxvZ2ljYWxSb3cgPSBNYXRoLmNlaWwoc2hhcGVbMV0gLyAyKTtcblxuICAvKipcbiAgICogZ2V0T3V0cHV0Q29vcmRzXG4gICAqXG4gICAqIHJlc1RleFJDOiBUaGUgcm93cyBhbmQgY29sdW1ucyBvZiB0aGUgdGV4ZWxzLiBJZiB5b3UgbW92ZSBvdmVyIG9uZVxuICAgKiB0ZXhlbCB0byB0aGUgcmlnaHQgaW4gdGhlIHBhY2tlZCB0ZXh0dXJlLCB5b3UgYXJlIG1vdmluZyBvdmVyIG9uZSBjb2x1bW5cbiAgICogKG5vdCB0d28pLlxuICAgKlxuICAgKiBpbmRleDogVGhlIHRleGVsIGluZGV4XG4gICAqL1xuICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgIHJldHVybiBgXG4gICAgaXZlYzIgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgaXZlYzIgcGFja2VkVGV4U2hhcGUgPSBpdmVjMihjZWlsKGZsb2F0KG91dFRleFNoYXBlWzBdKSAvIDIuMCksIGNlaWwoZmxvYXQob3V0VGV4U2hhcGVbMV0pIC8gMi4wKSk7XG4gICAgICBpbnQgdGV4ZWxzSW5Mb2dpY2FsUm93ID0gaW50KGNlaWwoZmxvYXQob3V0U2hhcGVbMV0pIC8gMi4wKSk7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMihwYWNrZWRUZXhTaGFwZVswXSwgcGFja2VkVGV4U2hhcGVbMV0pKTtcblxuICAgICAgaW50IGluZGV4ID0gcmVzVGV4UkMueCAqIHBhY2tlZFRleFNoYXBlWzFdICsgcmVzVGV4UkMueTtcbiAgICAgIGludCByID0gMiAqIChpbmRleCAvIHRleGVsc0luTG9naWNhbFJvdyk7XG4gICAgICBpbnQgYyA9IGltb2QoaW5kZXgsIHRleGVsc0luTG9naWNhbFJvdykgKiAyO1xuXG4gICAgICByZXR1cm4gaXZlYzIociwgYyk7XG4gICAgfVxuICBgO1xuICB9XG5cbiAgcmV0dXJuIGBcbiAgICBpdmVjMiBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigke3BhY2tlZFRleFNoYXBlWzBdfSwgJHtwYWNrZWRUZXhTaGFwZVsxXX0pKTtcblxuICAgICAgaW50IGluZGV4ID0gcmVzVGV4UkMueCAqICR7cGFja2VkVGV4U2hhcGVbMV19ICsgcmVzVGV4UkMueTtcbiAgICAgIGludCByID0gMiAqIChpbmRleCAvICR7dGV4ZWxzSW5Mb2dpY2FsUm93fSk7XG4gICAgICBpbnQgYyA9IGltb2QoaW5kZXgsICR7dGV4ZWxzSW5Mb2dpY2FsUm93fSkgKiAyO1xuXG4gICAgICByZXR1cm4gaXZlYzIociwgYyk7XG4gICAgfVxuICBgO1xufVxuXG5mdW5jdGlvbiBnZXRPdXRwdXQyRENvb3JkcyhcbiAgICBzaGFwZTogW251bWJlciwgbnVtYmVyXSwgdGV4U2hhcGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmICh1dGlsLmFycmF5c0VxdWFsKHNoYXBlLCB0ZXhTaGFwZSkpIHtcbiAgICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIGl2ZWMyIGdldE91dHB1dENvb3JkcygpIHtcbiAgICAgICAgcmV0dXJuIGl2ZWMyKHJlc3VsdFVWLnl4ICogdmVjMihvdXRUZXhTaGFwZVswXSwgb3V0VGV4U2hhcGVbMV0pKTtcbiAgICAgIH1cbiAgICBgO1xuICAgIH1cbiAgICByZXR1cm4gYFxuICAgICAgaXZlYzIgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgICByZXR1cm4gaXZlYzIocmVzdWx0VVYueXggKiB2ZWMyKCR7dGV4U2hhcGVbMF19LCAke3RleFNoYXBlWzFdfSkpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbiAgaWYgKHNoYXBlWzFdID09PSAxKSB7XG4gICAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICAgIHJldHVybiBgXG4gICAgICBpdmVjMiBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICAgIGl2ZWMyIHJlc1RleFJDID0gaXZlYzIocmVzdWx0VVYueXggKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIob3V0VGV4U2hhcGVbMF0sIG91dFRleFNoYXBlWzFdKSk7XG4gICAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiBvdXRUZXhTaGFwZVsxXSArIHJlc1RleFJDLnk7XG4gICAgICAgIHJldHVybiBpdmVjMihpbmRleCwgMCk7XG4gICAgICB9XG4gICAgYDtcbiAgICB9XG4gICAgcmV0dXJuIGBcbiAgICAgIGl2ZWMyIGdldE91dHB1dENvb3JkcygpIHtcbiAgICAgICAgaXZlYzIgcmVzVGV4UkMgPSBpdmVjMihyZXN1bHRVVi55eCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigke3RleFNoYXBlWzBdfSwgJHt0ZXhTaGFwZVsxXX0pKTtcbiAgICAgICAgaW50IGluZGV4ID0gcmVzVGV4UkMueCAqICR7dGV4U2hhcGVbMV19ICsgcmVzVGV4UkMueTtcbiAgICAgICAgcmV0dXJuIGl2ZWMyKGluZGV4LCAwKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG4gIGlmIChzaGFwZVswXSA9PT0gMSkge1xuICAgIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgaXZlYzIgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMyKG91dFRleFNoYXBlWzBdLCBvdXRUZXhTaGFwZVsxXSkpO1xuICAgICAgICBpbnQgaW5kZXggPSByZXNUZXhSQy54ICogb3V0VGV4U2hhcGVbMV0gKyByZXNUZXhSQy55O1xuICAgICAgICByZXR1cm4gaXZlYzIoMCwgaW5kZXgpO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuICAgIHJldHVybiBgXG4gICAgICBpdmVjMiBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICAgIGl2ZWMyIHJlc1RleFJDID0gaXZlYzIocmVzdWx0VVYueXggKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIoJHt0ZXhTaGFwZVswXX0sICR7dGV4U2hhcGVbMV19KSk7XG4gICAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiAke3RleFNoYXBlWzFdfSArIHJlc1RleFJDLnk7XG4gICAgICAgIHJldHVybiBpdmVjMigwLCBpbmRleCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgIHJldHVybiBgXG4gICAgaXZlYzIgZ2V0T3V0cHV0Q29vcmRzKCkge1xuICAgICAgaXZlYzIgcmVzVGV4UkMgPSBpdmVjMihyZXN1bHRVVi55eCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIob3V0VGV4U2hhcGVbMF0sIG91dFRleFNoYXBlWzFdKSk7XG4gICAgICBpbnQgaW5kZXggPSByZXNUZXhSQy54ICogb3V0VGV4U2hhcGVbMV0gKyByZXNUZXhSQy55O1xuICAgICAgaW50IHIgPSBpbmRleCAvIG91dFNoYXBlWzFdO1xuICAgICAgaW50IGMgPSBpbmRleCAtIHIgKiBvdXRTaGFwZVsxXTtcbiAgICAgIHJldHVybiBpdmVjMihyLCBjKTtcbiAgICB9XG4gIGA7XG4gIH1cbiAgcmV0dXJuIGBcbiAgICBpdmVjMiBnZXRPdXRwdXRDb29yZHMoKSB7XG4gICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigke3RleFNoYXBlWzBdfSwgJHt0ZXhTaGFwZVsxXX0pKTtcbiAgICAgIGludCBpbmRleCA9IHJlc1RleFJDLnggKiAke3RleFNoYXBlWzFdfSArIHJlc1RleFJDLnk7XG4gICAgICBpbnQgciA9IGluZGV4IC8gJHtzaGFwZVsxXX07XG4gICAgICBpbnQgYyA9IGluZGV4IC0gciAqICR7c2hhcGVbMV19O1xuICAgICAgcmV0dXJuIGl2ZWMyKHIsIGMpO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0RmxhdE9mZnNldFVuaWZvcm1OYW1lKHRleE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgb2Zmc2V0JHt0ZXhOYW1lfWA7XG59XG5cbmZ1bmN0aW9uIGdldFBhY2tlZFNhbXBsZXJTY2FsYXIoaW5wdXRJbmZvOiBJbnB1dEluZm8pOiBzdHJpbmcge1xuICBjb25zdCB0ZXhOYW1lID0gaW5wdXRJbmZvLm5hbWU7XG4gIGNvbnN0IGZ1bmNOYW1lID0gJ2dldCcgKyB0ZXhOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4TmFtZS5zbGljZSgxKTtcbiAgY29uc3QgZ2xzbCA9IGdldEdsc2xEaWZmZXJlbmNlcygpO1xuICByZXR1cm4gYFxuICAgIHZlYzQgJHtmdW5jTmFtZX0oKSB7XG4gICAgICByZXR1cm4gJHtnbHNsLnRleHR1cmUyRH0oJHt0ZXhOYW1lfSwgaGFsZkNSKTtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGdldFNhbXBsZXJTY2FsYXIoXG4gICAgaW5wdXRJbmZvOiBJbnB1dEluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCB0ZXhOYW1lID0gaW5wdXRJbmZvLm5hbWU7XG4gIGNvbnN0IGZ1bmNOYW1lID0gJ2dldCcgKyB0ZXhOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4TmFtZS5zbGljZSgxKTtcbiAgaWYgKGlucHV0SW5mby5zaGFwZUluZm8uaXNVbmlmb3JtKSB7XG4gICAgcmV0dXJuIGBmbG9hdCAke2Z1bmNOYW1lfSgpIHtyZXR1cm4gJHt0ZXhOYW1lfTt9YDtcbiAgfVxuICBjb25zdCBbdGV4TnVtUiwgdGV4TnVtQ10gPSBpbnB1dEluZm8uc2hhcGVJbmZvLnRleFNoYXBlO1xuICBpZiAodGV4TnVtUiA9PT0gMSAmJiB0ZXhOdW1DID09PSAxKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KCkge1xuICAgICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCBoYWxmQ1IpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cblxuICBjb25zdCBvZmZzZXQgPSBnZXRGbGF0T2Zmc2V0VW5pZm9ybU5hbWUodGV4TmFtZSk7XG4gIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgcmV0dXJuIGBcbiAgICBmbG9hdCAke2Z1bmNOYW1lfSgpIHtcbiAgICAgIHZlYzIgdXYgPSB1dkZyb21GbGF0KCR7dGV4TmFtZX1UZXhTaGFwZVswXSwgJHt0ZXhOYW1lfVRleFNoYXBlWzFdLCAke1xuICAgICAgICBvZmZzZXR9KTtcbiAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG4gIH1cblxuICBjb25zdCBbdE51bVIsIHROdW1DXSA9IGlucHV0SW5mby5zaGFwZUluZm8udGV4U2hhcGU7XG4gIHJldHVybiBgXG4gICAgZmxvYXQgJHtmdW5jTmFtZX0oKSB7XG4gICAgICB2ZWMyIHV2ID0gdXZGcm9tRmxhdCgke3ROdW1SfSwgJHt0TnVtQ30sICR7b2Zmc2V0fSk7XG4gICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgfVxuICBgO1xufVxuXG5mdW5jdGlvbiBnZXRQYWNrZWRTYW1wbGVyMUQoXG4gICAgaW5wdXRJbmZvOiBJbnB1dEluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCB0ZXhOYW1lID0gaW5wdXRJbmZvLm5hbWU7XG4gIGNvbnN0IGZ1bmNOYW1lID0gJ2dldCcgKyB0ZXhOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4TmFtZS5zbGljZSgxKTtcbiAgY29uc3QgdGV4U2hhcGUgPSBpbnB1dEluZm8uc2hhcGVJbmZvLnRleFNoYXBlO1xuICBjb25zdCBnbHNsID0gZ2V0R2xzbERpZmZlcmVuY2VzKCk7XG4gIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgcmV0dXJuIGBcbiAgICB2ZWM0ICR7ZnVuY05hbWV9KGludCBpbmRleCkge1xuICAgICAgaXZlYzIgcGFja2VkVGV4U2hhcGUgPSBpdmVjMihjZWlsKGZsb2F0KCR7XG4gICAgICAgIHRleE5hbWV9VGV4U2hhcGVbMF0pIC8gMi4wKSwgY2VpbChmbG9hdCgke3RleE5hbWV9VGV4U2hhcGVbMV0pIC8gMi4wKSk7XG4gICAgICB2ZWMyIHV2ID0gcGFja2VkVVZmcm9tMUQoXG4gICAgICAgIHBhY2tlZFRleFNoYXBlWzBdLCBwYWNrZWRUZXhTaGFwZVsxXSwgaW5kZXgpO1xuICAgICAgcmV0dXJuICR7Z2xzbC50ZXh0dXJlMkR9KCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG4gIH1cbiAgY29uc3QgcGFja2VkVGV4U2hhcGUgPVxuICAgICAgW01hdGguY2VpbCh0ZXhTaGFwZVswXSAvIDIpLCBNYXRoLmNlaWwodGV4U2hhcGVbMV0gLyAyKV07XG4gIHJldHVybiBgXG4gICAgdmVjNCAke2Z1bmNOYW1lfShpbnQgaW5kZXgpIHtcbiAgICAgIHZlYzIgdXYgPSBwYWNrZWRVVmZyb20xRChcbiAgICAgICAgJHtwYWNrZWRUZXhTaGFwZVswXX0sICR7cGFja2VkVGV4U2hhcGVbMV19LCBpbmRleCk7XG4gICAgICByZXR1cm4gJHtnbHNsLnRleHR1cmUyRH0oJHt0ZXhOYW1lfSwgdXYpO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0U2FtcGxlcjFEKFxuICAgIGlucHV0SW5mbzogSW5wdXRJbmZvLCBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgdGV4TmFtZSA9IGlucHV0SW5mby5uYW1lO1xuICBjb25zdCBmdW5jTmFtZSA9ICdnZXQnICsgdGV4TmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleE5hbWUuc2xpY2UoMSk7XG5cbiAgaWYgKGlucHV0SW5mby5zaGFwZUluZm8uaXNVbmlmb3JtKSB7XG4gICAgLy8gVW5pZm9ybSBhcnJheXMgd2lsbCBiZSBsZXNzIHRoYW4gNjU1MDUgKG5vIHJpc2sgb2YgZmxvYXQxNiBvdmVyZmxvdykuXG4gICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCBpbmRleCkge1xuICAgICAgICAke2dldFVuaWZvcm1TYW1wbGVyKGlucHV0SW5mbyl9XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIGNvbnN0IHRleFNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby50ZXhTaGFwZTtcbiAgY29uc3QgdE51bVIgPSB0ZXhTaGFwZVswXTtcbiAgY29uc3QgdE51bUMgPSB0ZXhTaGFwZVsxXTtcblxuICBpZiAodE51bUMgPT09IDEgJiYgdE51bVIgPT09IDEpIHtcbiAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IGluZGV4KSB7XG4gICAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIGhhbGZDUik7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuICBjb25zdCBvZmZzZXQgPSBnZXRGbGF0T2Zmc2V0VW5pZm9ybU5hbWUodGV4TmFtZSk7XG4gIGlmICh0TnVtQyA9PT0gMSkge1xuICAgIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IGluZGV4KSB7XG4gICAgICAgIHZlYzIgdXYgPSB2ZWMyKDAuNSwgKGZsb2F0KGluZGV4ICsgJHtvZmZzZXR9KSArIDAuNSkgLyBmbG9hdCgke1xuICAgICAgICAgIHRleE5hbWV9VGV4U2hhcGVbMF0pKTtcbiAgICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCBpbmRleCkge1xuICAgICAgICB2ZWMyIHV2ID0gdmVjMigwLjUsIChmbG9hdChpbmRleCArICR7b2Zmc2V0fSkgKyAwLjUpIC8gJHt0TnVtUn0uMCk7XG4gICAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG4gIGlmICh0TnVtUiA9PT0gMSkge1xuICAgIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IGluZGV4KSB7XG4gICAgICAgIHZlYzIgdXYgPSB2ZWMyKChmbG9hdChpbmRleCArICR7b2Zmc2V0fSkgKyAwLjUpIC8gZmxvYXQoJHtcbiAgICAgICAgICB0ZXhOYW1lfVRleFNoYXBlWzFdKSwgMC41KTtcbiAgICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCBpbmRleCkge1xuICAgICAgICB2ZWMyIHV2ID0gdmVjMigoZmxvYXQoaW5kZXggKyAke29mZnNldH0pICsgMC41KSAvICR7dE51bUN9LjAsIDAuNSk7XG4gICAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG5cbiAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICByZXR1cm4gYFxuICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCBpbmRleCkge1xuICAgICAgdmVjMiB1diA9IHV2RnJvbUZsYXQoJHt0ZXhOYW1lfVRleFNoYXBlWzBdLCAke1xuICAgICAgICB0ZXhOYW1lfVRleFNoYXBlWzFdLCBpbmRleCArICR7b2Zmc2V0fSk7XG4gICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgfVxuICBgO1xuICB9XG5cbiAgcmV0dXJuIGBcbiAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgaW5kZXgpIHtcbiAgICAgIHZlYzIgdXYgPSB1dkZyb21GbGF0KCR7dE51bVJ9LCAke3ROdW1DfSwgaW5kZXggKyAke29mZnNldH0pO1xuICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2VkU2FtcGxlcjJEKFxuICAgIGlucHV0SW5mbzogSW5wdXRJbmZvLCBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2hhcGUgPSBpbnB1dEluZm8uc2hhcGVJbmZvLmxvZ2ljYWxTaGFwZTtcbiAgY29uc3QgdGV4TmFtZSA9IGlucHV0SW5mby5uYW1lO1xuICBjb25zdCBmdW5jTmFtZSA9ICdnZXQnICsgdGV4TmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleE5hbWUuc2xpY2UoMSk7XG4gIGNvbnN0IHRleFNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby50ZXhTaGFwZTtcblxuICBjb25zdCB0ZXhOdW1SID0gdGV4U2hhcGVbMF07XG4gIGNvbnN0IHRleE51bUMgPSB0ZXhTaGFwZVsxXTtcbiAgY29uc3QgZ2xzbCA9IGdldEdsc2xEaWZmZXJlbmNlcygpO1xuICBpZiAodGV4U2hhcGUgIT0gbnVsbCAmJiB1dGlsLmFycmF5c0VxdWFsKHNoYXBlLCB0ZXhTaGFwZSkpIHtcbiAgICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIHZlYzQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgICB2ZWMyIHV2ID0gKHZlYzIoY29sLCByb3cpICsgaGFsZkNSKSAvIHZlYzIoJHt0ZXhOYW1lfVRleFNoYXBlWzFdLCAke1xuICAgICAgICAgIHRleE5hbWV9VGV4U2hhcGVbMF0pO1xuXG4gICAgICAgIHJldHVybiAke2dsc2wudGV4dHVyZTJEfSgke3RleE5hbWV9LCB1dik7XG4gICAgICB9XG4gICAgYDtcbiAgICB9XG4gICAgcmV0dXJuIGBcbiAgICAgIHZlYzQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgICB2ZWMyIHV2ID0gKHZlYzIoY29sLCByb3cpICsgaGFsZkNSKSAvIHZlYzIoJHt0ZXhOdW1DfS4wLCAke3RleE51bVJ9LjApO1xuXG4gICAgICAgIHJldHVybiAke2dsc2wudGV4dHVyZTJEfSgke3RleE5hbWV9LCB1dik7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgcmV0dXJuIGBcbiAgICB2ZWM0ICR7ZnVuY05hbWV9KGludCByb3csIGludCBjb2wpIHtcbiAgICAgIGl2ZWMyIHBhY2tlZFRleFNoYXBlID0gaXZlYzIoY2VpbChmbG9hdCgke1xuICAgICAgICB0ZXhOYW1lfVRleFNoYXBlWzBdKSAvIDIuMCksIGNlaWwoZmxvYXQoJHt0ZXhOYW1lfVRleFNoYXBlWzFdKSAvIDIuMCkpO1xuICAgICAgaW50IHZhbHVlc1BlclJvdyA9IGludChjZWlsKGZsb2F0KCR7dGV4TmFtZX1TaGFwZVsxXSkgLyAyLjApKTtcbiAgICAgIHZlYzIgdXYgPSBwYWNrZWRVVmZyb20yRCh2YWx1ZXNQZXJSb3csIHBhY2tlZFRleFNoYXBlWzBdLCBwYWNrZWRUZXhTaGFwZVsxXSwgcm93LCBjb2wpO1xuICAgICAgcmV0dXJuICR7Z2xzbC50ZXh0dXJlMkR9KCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG4gIH1cbiAgY29uc3QgcGFja2VkVGV4U2hhcGUgPVxuICAgICAgW01hdGguY2VpbCh0ZXhTaGFwZVswXSAvIDIpLCBNYXRoLmNlaWwodGV4U2hhcGVbMV0gLyAyKV07XG4gIGNvbnN0IHZhbHVlc1BlclJvdyA9IE1hdGguY2VpbChzaGFwZVsxXSAvIDIpO1xuXG4gIHJldHVybiBgXG4gICAgdmVjNCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sKSB7XG4gICAgICB2ZWMyIHV2ID0gcGFja2VkVVZmcm9tMkQoJHt2YWx1ZXNQZXJSb3d9LCAke3BhY2tlZFRleFNoYXBlWzBdfSwgJHtcbiAgICAgIHBhY2tlZFRleFNoYXBlWzFdfSwgcm93LCBjb2wpO1xuICAgICAgcmV0dXJuICR7Z2xzbC50ZXh0dXJlMkR9KCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGdldFNhbXBsZXIyRChcbiAgICBpbnB1dEluZm86IElucHV0SW5mbywgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGU7XG4gIGNvbnN0IHRleE5hbWUgPSBpbnB1dEluZm8ubmFtZTtcbiAgY29uc3QgZnVuY05hbWUgPSAnZ2V0JyArIHRleE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXhOYW1lLnNsaWNlKDEpO1xuICBjb25zdCB0ZXhTaGFwZSA9IGlucHV0SW5mby5zaGFwZUluZm8udGV4U2hhcGU7XG5cbiAgaWYgKHRleFNoYXBlICE9IG51bGwgJiYgdXRpbC5hcnJheXNFcXVhbChzaGFwZSwgdGV4U2hhcGUpKSB7XG4gICAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICAgIHJldHVybiBgXG4gICAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sKSB7XG4gICAgICAgIHZlYzIgdXYgPSAodmVjMihjb2wsIHJvdykgKyBoYWxmQ1IpIC8gdmVjMigke3RleE5hbWV9VGV4U2hhcGVbMV0sICR7XG4gICAgICAgICAgdGV4TmFtZX1UZXhTaGFwZVswXSk7XG4gICAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICAgIH1cbiAgICBgO1xuICAgIH1cblxuICAgIGNvbnN0IHRleE51bVIgPSB0ZXhTaGFwZVswXTtcbiAgICBjb25zdCB0ZXhOdW1DID0gdGV4U2hhcGVbMV07XG4gICAgcmV0dXJuIGBcbiAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sKSB7XG4gICAgICB2ZWMyIHV2ID0gKHZlYzIoY29sLCByb3cpICsgaGFsZkNSKSAvIHZlYzIoJHt0ZXhOdW1DfS4wLCAke3RleE51bVJ9LjApO1xuICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgIH1cbiAgYDtcbiAgfVxuXG4gIGNvbnN0IHtuZXdTaGFwZSwga2VwdERpbXN9ID0gdXRpbC5zcXVlZXplU2hhcGUoc2hhcGUpO1xuICBjb25zdCBzcXVlZXplZFNoYXBlID0gbmV3U2hhcGU7XG4gIGlmIChzcXVlZXplZFNoYXBlLmxlbmd0aCA8IHNoYXBlLmxlbmd0aCkge1xuICAgIGNvbnN0IG5ld0lucHV0SW5mbyA9IHNxdWVlemVJbnB1dEluZm8oaW5wdXRJbmZvLCBzcXVlZXplZFNoYXBlKTtcbiAgICBjb25zdCBwYXJhbXMgPSBbJ3JvdycsICdjb2wnXTtcbiAgICByZXR1cm4gYFxuICAgICAgJHtnZXRTYW1wbGVyRnJvbUluSW5mbyhuZXdJbnB1dEluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMpfVxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgICByZXR1cm4gJHtmdW5jTmFtZX0oJHtnZXRTcXVlZXplZFBhcmFtcyhwYXJhbXMsIGtlcHREaW1zKX0pO1xuICAgICAgfVxuICAgIGA7XG4gIH1cblxuICBpZiAoaW5wdXRJbmZvLnNoYXBlSW5mby5pc1VuaWZvcm0pIHtcbiAgICAvLyBVbmlmb3JtIGFycmF5cyB3aWxsIGJlIGxlc3MgdGhhbiA2NTUwNSAobm8gcmlzayBvZiBmbG9hdDE2IG92ZXJmbG93KS5cbiAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgICBpbnQgaW5kZXggPSByb3VuZChkb3QodmVjMihyb3csIGNvbCksIHZlYzIoJHtzaGFwZVsxXX0sIDEpKSk7XG4gICAgICAgICR7Z2V0VW5pZm9ybVNhbXBsZXIoaW5wdXRJbmZvKX1cbiAgICAgIH1cbiAgICBgO1xuICB9XG5cbiAgY29uc3QgdGV4TnVtUiA9IHRleFNoYXBlWzBdO1xuICBjb25zdCB0ZXhOdW1DID0gdGV4U2hhcGVbMV07XG4gIGNvbnN0IG9mZnNldCA9IGdldEZsYXRPZmZzZXRVbmlmb3JtTmFtZSh0ZXhOYW1lKTtcbiAgaWYgKHRleE51bUMgPT09IDEpIHtcbiAgICAvLyBpbmRleCBpcyB1c2VkIGRpcmVjdGx5IGFzIHBoeXNpY2FsIChubyByaXNrIG9mIGZsb2F0MTYgb3ZlcmZsb3cpLlxuICAgIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgICBmbG9hdCBpbmRleCA9IGRvdCh2ZWMzKHJvdywgY29sLCAke29mZnNldH0pLCB2ZWMzKCR7XG4gICAgICAgICAgdGV4TmFtZX1TaGFwZVsxXSwgMSwgMSkpO1xuICAgICAgICB2ZWMyIHV2ID0gdmVjMigwLjUsIChpbmRleCArIDAuNSkgLyBmbG9hdCgke3RleE5hbWV9VGV4U2hhcGVbMF0pKTtcbiAgICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuICAgIHJldHVybiBgXG4gICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgZmxvYXQgaW5kZXggPSBkb3QodmVjMyhyb3csIGNvbCwgJHtvZmZzZXR9KSwgdmVjMygke3NoYXBlWzFdfSwgMSwgMSkpO1xuICAgICAgdmVjMiB1diA9IHZlYzIoMC41LCAoaW5kZXggKyAwLjUpIC8gJHt0ZXhOdW1SfS4wKTtcbiAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG4gIH1cbiAgaWYgKHRleE51bVIgPT09IDEpIHtcbiAgICAvLyBpbmRleCBpcyB1c2VkIGRpcmVjdGx5IGFzIHBoeXNpY2FsIChubyByaXNrIG9mIGZsb2F0MTYgb3ZlcmZsb3cpLlxuICAgIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgICBmbG9hdCBpbmRleCA9IGRvdCh2ZWMzKHJvdywgY29sLCAke29mZnNldH0pLCB2ZWMzKCR7XG4gICAgICAgICAgdGV4TmFtZX1TaGFwZVsxXSwgMSwgMSkpO1xuICAgICAgICB2ZWMyIHV2ID0gdmVjMigoaW5kZXggKyAwLjUpIC8gZmxvYXQoJHt0ZXhOYW1lfVRleFNoYXBlWzFdKSwgMC41KTtcbiAgICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuICAgIHJldHVybiBgXG4gICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgZmxvYXQgaW5kZXggPSBkb3QodmVjMyhyb3csIGNvbCwgJHtvZmZzZXR9KSwgdmVjMygke3NoYXBlWzFdfSwgMSwgMSkpO1xuICAgICAgdmVjMiB1diA9IHZlYzIoKGluZGV4ICsgMC41KSAvICR7dGV4TnVtQ30uMCwgMC41KTtcbiAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG4gIH1cblxuICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgIHJldHVybiBgXG4gICAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sKSB7XG4gICAgICAgIC8vIEV4cGxpY2l0bHkgdXNlIGludGVnZXIgb3BlcmF0aW9ucyBhcyBkb3QoKSBvbmx5IHdvcmtzIG9uIGZsb2F0cy5cbiAgICAgICAgaW50IGluZGV4ID0gcm93ICogJHt0ZXhOYW1lfVNoYXBlWzFdICsgY29sICsgJHtvZmZzZXR9O1xuICAgICAgICB2ZWMyIHV2ID0gdXZGcm9tRmxhdCgke3RleE5hbWV9VGV4U2hhcGVbMF0sICR7XG4gICAgICAgIHRleE5hbWV9VGV4U2hhcGVbMV0sIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbiAgcmV0dXJuIGBcbiAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCkge1xuICAgIC8vIEV4cGxpY2l0bHkgdXNlIGludGVnZXIgb3BlcmF0aW9ucyBhcyBkb3QoKSBvbmx5IHdvcmtzIG9uIGZsb2F0cy5cbiAgICBpbnQgaW5kZXggPSByb3cgKiAke3NoYXBlWzFdfSArIGNvbCArICR7b2Zmc2V0fTtcbiAgICB2ZWMyIHV2ID0gdXZGcm9tRmxhdCgke3RleE51bVJ9LCAke3RleE51bUN9LCBpbmRleCk7XG4gICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICB9XG5gO1xufVxuXG5mdW5jdGlvbiBnZXRQYWNrZWRTYW1wbGVyM0QoXG4gICAgaW5wdXRJbmZvOiBJbnB1dEluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBzaGFwZSA9IGlucHV0SW5mby5zaGFwZUluZm8ubG9naWNhbFNoYXBlO1xuICBjb25zdCB0ZXhOYW1lID0gaW5wdXRJbmZvLm5hbWU7XG4gIGNvbnN0IGZ1bmNOYW1lID0gJ2dldCcgKyB0ZXhOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4TmFtZS5zbGljZSgxKTtcbiAgY29uc3QgdGV4U2hhcGUgPSBpbnB1dEluZm8uc2hhcGVJbmZvLnRleFNoYXBlO1xuICBjb25zdCBwYWNrZWRUZXhTaGFwZSA9XG4gICAgICBbTWF0aC5jZWlsKHRleFNoYXBlWzBdIC8gMiksIE1hdGguY2VpbCh0ZXhTaGFwZVsxXSAvIDIpXTtcblxuICBpZiAoc2hhcGVbMF0gPT09IDEpIHtcbiAgICBjb25zdCBzcXVlZXplZFNoYXBlID0gc2hhcGUuc2xpY2UoMSk7XG4gICAgY29uc3Qga2VwdERpbXMgPSBbMSwgMl07XG4gICAgY29uc3QgbmV3SW5wdXRJbmZvID0gc3F1ZWV6ZUlucHV0SW5mbyhpbnB1dEluZm8sIHNxdWVlemVkU2hhcGUpO1xuICAgIGNvbnN0IHBhcmFtcyA9IFsnYicsICdyb3cnLCAnY29sJ107XG4gICAgcmV0dXJuIGBcbiAgICAgICAgJHtnZXRQYWNrZWRTYW1wbGVyRnJvbUluSW5mbyhuZXdJbnB1dEluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMpfVxuICAgICAgICB2ZWM0ICR7ZnVuY05hbWV9KGludCBiLCBpbnQgcm93LCBpbnQgY29sKSB7XG4gICAgICAgICAgcmV0dXJuICR7ZnVuY05hbWV9KCR7Z2V0U3F1ZWV6ZWRQYXJhbXMocGFyYW1zLCBrZXB0RGltcyl9KTtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgfVxuXG4gIGNvbnN0IGdsc2wgPSBnZXRHbHNsRGlmZmVyZW5jZXMoKTtcbiAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICByZXR1cm4gYFxuICAgIHZlYzQgJHtmdW5jTmFtZX0oaW50IGIsIGludCByb3csIGludCBjb2wpIHtcbiAgICAgIGl2ZWMyIHBhY2tlZFRleFNoYXBlID0gaXZlYzIoY2VpbChmbG9hdCgke1xuICAgICAgICB0ZXhOYW1lfVRleFNoYXBlWzBdKSAvIDIuMCksIGNlaWwoZmxvYXQoJHt0ZXhOYW1lfVRleFNoYXBlWzFdKSAvIDIuMCkpO1xuICAgICAgaW50IHZhbHVlc1BlclJvdyA9IGludChjZWlsKGZsb2F0KCR7dGV4TmFtZX1TaGFwZVsyXSkgLyAyLjApKTtcbiAgICAgIGludCB0ZXhlbHNJbkJhdGNoID0gdmFsdWVzUGVyUm93ICogaW50KGNlaWwoZmxvYXQoJHtcbiAgICAgICAgdGV4TmFtZX1TaGFwZVsxXSkgLyAyLjApKTtcbiAgICAgIHZlYzIgdXYgPSBwYWNrZWRVVmZyb20zRChcbiAgICAgICAgcGFja2VkVGV4U2hhcGVbMF0sIHBhY2tlZFRleFNoYXBlWzFdLCB0ZXhlbHNJbkJhdGNoLCB2YWx1ZXNQZXJSb3csIGIsIHJvdywgY29sKTtcbiAgICAgIHJldHVybiAke2dsc2wudGV4dHVyZTJEfSgke3RleE5hbWV9LCB1dik7XG4gICAgfVxuICBgO1xuICB9XG5cbiAgY29uc3QgdGV4TnVtUiA9IHBhY2tlZFRleFNoYXBlWzBdO1xuICBjb25zdCB0ZXhOdW1DID0gcGFja2VkVGV4U2hhcGVbMV07XG5cbiAgY29uc3QgdmFsdWVzUGVyUm93ID0gTWF0aC5jZWlsKHNoYXBlWzJdIC8gMik7XG4gIGNvbnN0IHRleGVsc0luQmF0Y2ggPSB2YWx1ZXNQZXJSb3cgKiBNYXRoLmNlaWwoc2hhcGVbMV0gLyAyKTtcblxuICByZXR1cm4gYFxuICAgIHZlYzQgJHtmdW5jTmFtZX0oaW50IGIsIGludCByb3csIGludCBjb2wpIHtcbiAgICAgIHZlYzIgdXYgPSBwYWNrZWRVVmZyb20zRChcbiAgICAgICAgJHt0ZXhOdW1SfSwgJHt0ZXhOdW1DfSwgJHt0ZXhlbHNJbkJhdGNofSwgJHt2YWx1ZXNQZXJSb3d9LCBiLCByb3csIGNvbCk7XG4gICAgICByZXR1cm4gJHtnbHNsLnRleHR1cmUyRH0oJHt0ZXhOYW1lfSwgdXYpO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0U2FtcGxlcjNEKFxuICAgIGlucHV0SW5mbzogSW5wdXRJbmZvLCBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2hhcGUgPSBpbnB1dEluZm8uc2hhcGVJbmZvLmxvZ2ljYWxTaGFwZTtcbiAgY29uc3QgdGV4TmFtZSA9IGlucHV0SW5mby5uYW1lO1xuICBjb25zdCBmdW5jTmFtZSA9ICdnZXQnICsgdGV4TmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleE5hbWUuc2xpY2UoMSk7XG4gIGNvbnN0IHN0cmlkZTAgPSBzaGFwZVsxXSAqIHNoYXBlWzJdO1xuICBjb25zdCBzdHJpZGUxID0gc2hhcGVbMl07XG5cbiAgY29uc3Qge25ld1NoYXBlLCBrZXB0RGltc30gPSB1dGlsLnNxdWVlemVTaGFwZShzaGFwZSk7XG4gIGNvbnN0IHNxdWVlemVkU2hhcGUgPSBuZXdTaGFwZTtcbiAgaWYgKHNxdWVlemVkU2hhcGUubGVuZ3RoIDwgc2hhcGUubGVuZ3RoKSB7XG4gICAgY29uc3QgbmV3SW5wdXRJbmZvID0gc3F1ZWV6ZUlucHV0SW5mbyhpbnB1dEluZm8sIHNxdWVlemVkU2hhcGUpO1xuICAgIGNvbnN0IHBhcmFtcyA9IFsncm93JywgJ2NvbCcsICdkZXB0aCddO1xuICAgIHJldHVybiBgXG4gICAgICAgICR7Z2V0U2FtcGxlckZyb21JbkluZm8obmV3SW5wdXRJbmZvLCBlbmFibGVTaGFwZVVuaWZvcm1zKX1cbiAgICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoKSB7XG4gICAgICAgICAgcmV0dXJuICR7ZnVuY05hbWV9KCR7Z2V0U3F1ZWV6ZWRQYXJhbXMocGFyYW1zLCBrZXB0RGltcyl9KTtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgfVxuXG4gIGlmIChpbnB1dEluZm8uc2hhcGVJbmZvLmlzVW5pZm9ybSkge1xuICAgIC8vIFVuaWZvcm0gYXJyYXlzIHdpbGwgYmUgbGVzcyB0aGFuIDY1NTA1IChubyByaXNrIG9mIGZsb2F0MTYgb3ZlcmZsb3cpLlxuICAgIHJldHVybiBgXG4gICAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgpIHtcbiAgICAgICAgaW50IGluZGV4ID0gcm91bmQoZG90KHZlYzMocm93LCBjb2wsIGRlcHRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMygke3N0cmlkZTB9LCAke3N0cmlkZTF9LCAxKSkpO1xuICAgICAgICAke2dldFVuaWZvcm1TYW1wbGVyKGlucHV0SW5mbyl9XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIGNvbnN0IHRleFNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby50ZXhTaGFwZTtcbiAgY29uc3QgdGV4TnVtUiA9IHRleFNoYXBlWzBdO1xuICBjb25zdCB0ZXhOdW1DID0gdGV4U2hhcGVbMV07XG4gIGNvbnN0IGZsYXRPZmZzZXQgPSBpbnB1dEluZm8uc2hhcGVJbmZvLmZsYXRPZmZzZXQ7XG4gIGlmICh0ZXhOdW1DID09PSBzdHJpZGUwICYmIGZsYXRPZmZzZXQgPT0gbnVsbCkge1xuICAgIC8vIHRleEMgaXMgdXNlZCBkaXJlY3RseSBhcyBwaHlzaWNhbCAobm8gcmlzayBvZiBmbG9hdDE2IG92ZXJmbG93KS5cbiAgICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCByb3csIGludCBjb2wsIGludCBkZXB0aCkge1xuICAgICAgICBpbnQgc3RyaWRlMSA9ICR7dGV4TmFtZX1TaGFwZVsyXTtcbiAgICAgICAgZmxvYXQgdGV4UiA9IGZsb2F0KHJvdyk7XG4gICAgICAgIGZsb2F0IHRleEMgPSBkb3QodmVjMihjb2wsIGRlcHRoKSwgdmVjMihzdHJpZGUxLCAxKSk7XG4gICAgICAgIHZlYzIgdXYgPSAodmVjMih0ZXhDLCB0ZXhSKSArIGhhbGZDUikgL1xuICAgICAgICAgICAgICAgICAgIHZlYzIoJHt0ZXhOYW1lfVRleFNoYXBlWzFdLCAke3RleE5hbWV9VGV4U2hhcGVbMF0pO1xuICAgICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgICB9XG4gICAgYDtcbiAgICB9XG4gICAgcmV0dXJuIGBcbiAgICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoKSB7XG4gICAgICAgICAgZmxvYXQgdGV4UiA9IGZsb2F0KHJvdyk7XG4gICAgICAgICAgZmxvYXQgdGV4QyA9IGRvdCh2ZWMyKGNvbCwgZGVwdGgpLCB2ZWMyKCR7c3RyaWRlMX0sIDEpKTtcbiAgICAgICAgICB2ZWMyIHV2ID0gKHZlYzIodGV4QywgdGV4UikgKyBoYWxmQ1IpIC9cbiAgICAgICAgICAgICAgICAgICAgIHZlYzIoJHt0ZXhOdW1DfS4wLCAke3RleE51bVJ9LjApO1xuICAgICAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgfVxuXG4gIGlmICh0ZXhOdW1DID09PSBzdHJpZGUxICYmIGZsYXRPZmZzZXQgPT0gbnVsbCkge1xuICAgIC8vIHRleFIgaXMgdXNlZCBkaXJlY3RseSBhcyBwaHlzaWNhbCAobm8gcmlzayBvZiBmbG9hdDE2IG92ZXJmbG93KS5cbiAgICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCByb3csIGludCBjb2wsIGludCBkZXB0aCkge1xuICAgICAgICBmbG9hdCB0ZXhSID0gZG90KHZlYzIocm93LCBjb2wpLCB2ZWMyKCR7dGV4TmFtZX1TaGFwZVsxXSwgMSkpO1xuICAgICAgICBmbG9hdCB0ZXhDID0gZmxvYXQoZGVwdGgpO1xuICAgICAgICB2ZWMyIHV2ID0gKHZlYzIodGV4QywgdGV4UikgKyBoYWxmQ1IpIC8gdmVjMigke3RleE5hbWV9VGV4U2hhcGVbMV0sICR7XG4gICAgICAgICAgdGV4TmFtZX1UZXhTaGFwZVswXSk7XG4gICAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICAgIH1cbiAgICBgO1xuICAgIH1cbiAgICByZXR1cm4gYFxuICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCByb3csIGludCBjb2wsIGludCBkZXB0aCkge1xuICAgICAgZmxvYXQgdGV4UiA9IGRvdCh2ZWMyKHJvdywgY29sKSwgdmVjMigke3NoYXBlWzFdfSwgMSkpO1xuICAgICAgZmxvYXQgdGV4QyA9IGZsb2F0KGRlcHRoKTtcbiAgICAgIHZlYzIgdXYgPSAodmVjMih0ZXhDLCB0ZXhSKSArIGhhbGZDUikgLyB2ZWMyKCR7dGV4TnVtQ30uMCwgJHt0ZXhOdW1SfS4wKTtcbiAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG4gIH1cblxuICBjb25zdCBvZmZzZXQgPSBnZXRGbGF0T2Zmc2V0VW5pZm9ybU5hbWUodGV4TmFtZSk7XG4gIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgcmV0dXJuIGBcbiAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgpIHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgdXNlIGludGVnZXIgb3BlcmF0aW9ucyBhcyBkb3QoKSBvbmx5IHdvcmtzIG9uIGZsb2F0cy5cbiAgICAgIGludCBzdHJpZGUwID0gJHt0ZXhOYW1lfVNoYXBlWzFdICogJHt0ZXhOYW1lfVNoYXBlWzJdO1xuICAgICAgaW50IHN0cmlkZTEgPSAke3RleE5hbWV9U2hhcGVbMl07XG4gICAgICBpbnQgaW5kZXggPSByb3cgKiBzdHJpZGUwICsgY29sICogc3RyaWRlMSArIGRlcHRoICsgJHtvZmZzZXR9O1xuICAgICAgdmVjMiB1diA9IHV2RnJvbUZsYXQoJHt0ZXhOYW1lfVRleFNoYXBlWzBdLCAke3RleE5hbWV9VGV4U2hhcGVbMV0sIGluZGV4KTtcbiAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gICAgYDtcbiAgfVxuICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoKSB7XG4gICAgICAgIC8vIEV4cGxpY2l0bHkgdXNlIGludGVnZXIgb3BlcmF0aW9ucyBhcyBkb3QoKSBvbmx5IHdvcmtzIG9uIGZsb2F0cy5cbiAgICAgICAgaW50IGluZGV4ID0gcm93ICogJHtzdHJpZGUwfSArIGNvbCAqICR7c3RyaWRlMX0gKyBkZXB0aCArICR7b2Zmc2V0fTtcbiAgICAgICAgdmVjMiB1diA9IHV2RnJvbUZsYXQoJHt0ZXhOdW1SfSwgJHt0ZXhOdW1DfSwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGdldFBhY2tlZFNhbXBsZXJORChcbiAgICBpbnB1dEluZm86IElucHV0SW5mbywgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHRleE5hbWUgPSBpbnB1dEluZm8ubmFtZTtcbiAgY29uc3QgZnVuY05hbWUgPSAnZ2V0JyArIHRleE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXhOYW1lLnNsaWNlKDEpO1xuICBjb25zdCBnbHNsID0gZ2V0R2xzbERpZmZlcmVuY2VzKCk7XG4gIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgLy8gVE9ETzogc3VwcG9ydCA1ZCBhbmQgNmRcbiAgICByZXR1cm4gYFxuICAgIHZlYzQgJHtmdW5jTmFtZX0oaW50IGIyLCBpbnQgYiwgaW50IHJvdywgaW50IGNvbCkge1xuICAgICAgaW50IHZhbHVlc1BlclJvdyA9IGludChjZWlsKGZsb2F0KCR7dGV4TmFtZX1TaGFwZVszXSkgLyAyLjApKTtcbiAgICAgIGludCB0ZXhlbHNJbkJhdGNoID0gdmFsdWVzUGVyUm93ICogaW50KGNlaWwoZmxvYXQoJHtcbiAgICAgICAgdGV4TmFtZX1TaGFwZVsyXSkgLyAyLjApKTtcbiAgICAgIGludCBpbmRleCA9IGIgKiB0ZXhlbHNJbkJhdGNoICsgKHJvdyAvIDIpICogdmFsdWVzUGVyUm93ICsgKGNvbCAvIDIpO1xuICAgICAgdGV4ZWxzSW5CYXRjaCAqPSAke3RleE5hbWV9U2hhcGVbMV07XG4gICAgICBpbmRleCA9IGIyICogdGV4ZWxzSW5CYXRjaCArIGluZGV4O1xuICAgICAgaXZlYzIgcGFja2VkVGV4U2hhcGUgPSBpdmVjMihjZWlsKGZsb2F0KCR7XG4gICAgICAgIHRleE5hbWV9VGV4U2hhcGVbMF0pIC8gMi4wKSwgY2VpbChmbG9hdCgke3RleE5hbWV9VGV4U2hhcGVbMV0pIC8gMi4wKSk7XG4gICAgICBpbnQgdGV4UiA9IGluZGV4IC8gcGFja2VkVGV4U2hhcGVbMV07XG4gICAgICBpbnQgdGV4QyA9IGluZGV4IC0gdGV4UiAqIHBhY2tlZFRleFNoYXBlWzFdO1xuICAgICAgdmVjMiB1diA9ICh2ZWMyKHRleEMsIHRleFIpICsgaGFsZkNSKSAvIHZlYzIocGFja2VkVGV4U2hhcGVbMV0sIHBhY2tlZFRleFNoYXBlWzBdKTsgcmV0dXJuICR7XG4gICAgICAgIGdsc2wudGV4dHVyZTJEfSgke3RleE5hbWV9LCB1dik7XG4gICAgfVxuICBgO1xuICB9XG4gIGNvbnN0IHNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGU7XG4gIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGg7XG4gIGNvbnN0IHRleFNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby50ZXhTaGFwZTtcbiAgY29uc3QgcGFja2VkVGV4U2hhcGUgPVxuICAgICAgW01hdGguY2VpbCh0ZXhTaGFwZVswXSAvIDIpLCBNYXRoLmNlaWwodGV4U2hhcGVbMV0gLyAyKV07XG4gIGNvbnN0IHRleE51bVIgPSBwYWNrZWRUZXhTaGFwZVswXTtcbiAgY29uc3QgdGV4TnVtQyA9IHBhY2tlZFRleFNoYXBlWzFdO1xuXG4gIGNvbnN0IHZhbHVlc1BlclJvdyA9IE1hdGguY2VpbChzaGFwZVtyYW5rIC0gMV0gLyAyKTtcbiAgbGV0IHRleGVsc0luQmF0Y2ggPSB2YWx1ZXNQZXJSb3cgKiBNYXRoLmNlaWwoc2hhcGVbcmFuayAtIDJdIC8gMik7XG4gIGxldCBwYXJhbXMgPSBgaW50IGIsIGludCByb3csIGludCBjb2xgO1xuICBsZXQgaW5kZXggPSBgYiAqICR7dGV4ZWxzSW5CYXRjaH0gKyAocm93IC8gMikgKiAke3ZhbHVlc1BlclJvd30gKyAoY29sIC8gMilgO1xuICBmb3IgKGxldCBiID0gMjsgYiA8IHJhbmsgLSAxOyBiKyspIHtcbiAgICBwYXJhbXMgPSBgaW50IGIke2J9LCBgICsgcGFyYW1zO1xuICAgIHRleGVsc0luQmF0Y2ggKj0gc2hhcGVbcmFuayAtIGIgLSAxXTtcbiAgICBpbmRleCA9IGBiJHtifSAqICR7dGV4ZWxzSW5CYXRjaH0gKyBgICsgaW5kZXg7XG4gIH1cbiAgcmV0dXJuIGBcbiAgICB2ZWM0ICR7ZnVuY05hbWV9KCR7cGFyYW1zfSkge1xuICAgICAgaW50IGluZGV4ID0gJHtpbmRleH07XG4gICAgICBpbnQgdGV4UiA9IGluZGV4IC8gJHt0ZXhOdW1DfTtcbiAgICAgIGludCB0ZXhDID0gaW5kZXggLSB0ZXhSICogJHt0ZXhOdW1DfTtcbiAgICAgIHZlYzIgdXYgPSAodmVjMih0ZXhDLCB0ZXhSKSArIGhhbGZDUikgLyB2ZWMyKCR7dGV4TnVtQ30sICR7dGV4TnVtUn0pO1xuICAgICAgcmV0dXJuICR7Z2xzbC50ZXh0dXJlMkR9KCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGdldFNhbXBsZXI0RChcbiAgICBpbnB1dEluZm86IElucHV0SW5mbywgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGU7XG4gIGNvbnN0IHRleE5hbWUgPSBpbnB1dEluZm8ubmFtZTtcbiAgY29uc3QgZnVuY05hbWUgPSAnZ2V0JyArIHRleE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXhOYW1lLnNsaWNlKDEpO1xuICBjb25zdCBzdHJpZGUyID0gc2hhcGVbM107XG4gIGNvbnN0IHN0cmlkZTEgPSBzaGFwZVsyXSAqIHN0cmlkZTI7XG4gIGNvbnN0IHN0cmlkZTAgPSBzaGFwZVsxXSAqIHN0cmlkZTE7XG5cbiAgY29uc3Qge25ld1NoYXBlLCBrZXB0RGltc30gPSB1dGlsLnNxdWVlemVTaGFwZShzaGFwZSk7XG4gIGlmIChuZXdTaGFwZS5sZW5ndGggPCBzaGFwZS5sZW5ndGgpIHtcbiAgICBjb25zdCBuZXdJbnB1dEluZm8gPSBzcXVlZXplSW5wdXRJbmZvKGlucHV0SW5mbywgbmV3U2hhcGUpO1xuICAgIGNvbnN0IHBhcmFtcyA9IFsncm93JywgJ2NvbCcsICdkZXB0aCcsICdkZXB0aDInXTtcbiAgICByZXR1cm4gYFxuICAgICAgJHtnZXRTYW1wbGVyRnJvbUluSW5mbyhuZXdJbnB1dEluZm8sIGVuYWJsZVNoYXBlVW5pZm9ybXMpfVxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoLCBpbnQgZGVwdGgyKSB7XG4gICAgICAgIHJldHVybiAke2Z1bmNOYW1lfSgke2dldFNxdWVlemVkUGFyYW1zKHBhcmFtcywga2VwdERpbXMpfSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIGlmIChpbnB1dEluZm8uc2hhcGVJbmZvLmlzVW5pZm9ybSkge1xuICAgIC8vIFVuaWZvcm0gYXJyYXlzIHdpbGwgYmUgbGVzcyB0aGFuIDY1NTA1IChubyByaXNrIG9mIGZsb2F0MTYgb3ZlcmZsb3cpLlxuICAgIHJldHVybiBgXG4gICAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgsIGludCBkZXB0aDIpIHtcbiAgICAgICAgaW50IGluZGV4ID0gcm91bmQoZG90KHZlYzQocm93LCBjb2wsIGRlcHRoLCBkZXB0aDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWM0KCR7c3RyaWRlMH0sICR7c3RyaWRlMX0sICR7c3RyaWRlMn0sIDEpKSk7XG4gICAgICAgICR7Z2V0VW5pZm9ybVNhbXBsZXIoaW5wdXRJbmZvKX1cbiAgICAgIH1cbiAgICBgO1xuICB9XG5cbiAgY29uc3QgZmxhdE9mZnNldCA9IGlucHV0SW5mby5zaGFwZUluZm8uZmxhdE9mZnNldDtcbiAgY29uc3QgdGV4U2hhcGUgPSBpbnB1dEluZm8uc2hhcGVJbmZvLnRleFNoYXBlO1xuICBjb25zdCB0ZXhOdW1SID0gdGV4U2hhcGVbMF07XG4gIGNvbnN0IHRleE51bUMgPSB0ZXhTaGFwZVsxXTtcblxuICBjb25zdCBzdHJpZGUyU3RyID0gYGludCBzdHJpZGUyID0gJHt0ZXhOYW1lfVNoYXBlWzNdO2A7XG4gIGNvbnN0IHN0cmlkZTFTdHIgPSBgaW50IHN0cmlkZTEgPSAke3RleE5hbWV9U2hhcGVbMl0gKiBzdHJpZGUyO2A7XG4gIGNvbnN0IHN0cmlkZTBTdHIgPSBgaW50IHN0cmlkZTAgPSAke3RleE5hbWV9U2hhcGVbMV0gKiBzdHJpZGUxO2A7XG4gIGlmICh0ZXhOdW1DID09PSBzdHJpZGUwICYmIGZsYXRPZmZzZXQgPT0gbnVsbCkge1xuICAgIC8vIHRleEMgaXMgdXNlZCBkaXJlY3RseSBhcyBwaHlzaWNhbCAobm8gcmlzayBvZiBmbG9hdDE2IG92ZXJmbG93KS5cbiAgICBpZiAoZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCByb3csIGludCBjb2wsIGludCBkZXB0aCwgaW50IGRlcHRoMikge1xuICAgICAgICAke3N0cmlkZTJTdHJ9XG4gICAgICAgICR7c3RyaWRlMVN0cn1cbiAgICAgICAgZmxvYXQgdGV4UiA9IGZsb2F0KHJvdyk7XG4gICAgICAgIGZsb2F0IHRleEMgPVxuICAgICAgICAgICAgZG90KHZlYzMoY29sLCBkZXB0aCwgZGVwdGgyKSxcbiAgICAgICAgICAgICAgICB2ZWMzKHN0cmlkZTEsIHN0cmlkZTIsIDEpKTtcbiAgICAgICAgdmVjMiB1diA9ICh2ZWMyKHRleEMsIHRleFIpICsgaGFsZkNSKSAvXG4gICAgICAgICAgICAgICAgICAgdmVjMigke3RleE5hbWV9VGV4U2hhcGVbMV0sICR7dGV4TmFtZX1UZXhTaGFwZVswXSk7XG4gICAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICAgIH1cbiAgICBgO1xuICAgIH1cbiAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoLCBpbnQgZGVwdGgyKSB7XG4gICAgICAgIGZsb2F0IHRleFIgPSBmbG9hdChyb3cpO1xuICAgICAgICBmbG9hdCB0ZXhDID1cbiAgICAgICAgICAgIGRvdCh2ZWMzKGNvbCwgZGVwdGgsIGRlcHRoMiksXG4gICAgICAgICAgICAgICAgdmVjMygke3N0cmlkZTF9LCAke3N0cmlkZTJ9LCAxKSk7XG4gICAgICAgIHZlYzIgdXYgPSAodmVjMih0ZXhDLCB0ZXhSKSArIGhhbGZDUikgL1xuICAgICAgICAgICAgICAgICAgIHZlYzIoJHt0ZXhOdW1DfS4wLCAke3RleE51bVJ9LjApO1xuICAgICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuICBpZiAodGV4TnVtQyA9PT0gc3RyaWRlMiAmJiBmbGF0T2Zmc2V0ID09IG51bGwpIHtcbiAgICAvLyB0ZXhSIGlzIHVzZWQgZGlyZWN0bHkgYXMgcGh5c2ljYWwgKG5vIHJpc2sgb2YgZmxvYXQxNiBvdmVyZmxvdykuXG4gICAgaWYgKGVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICAgIHJldHVybiBgXG4gICAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgsIGludCBkZXB0aDIpIHtcbiAgICAgICAgZmxvYXQgdGV4UiA9IGRvdCh2ZWMzKHJvdywgY29sLCBkZXB0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmVjMygke3RleE5hbWV9U2hhcGVbMV0gKiAke3RleE5hbWV9U2hhcGVbMl0sICR7XG4gICAgICAgICAgdGV4TmFtZX1TaGFwZVsyXSwgMSkpO1xuICAgICAgICBmbG9hdCB0ZXhDID0gZmxvYXQoZGVwdGgyKTtcbiAgICAgICAgdmVjMiB1diA9ICh2ZWMyKHRleEMsIHRleFIpICsgaGFsZkNSKSAvXG4gICAgICAgICAgICAgICAgICB2ZWMyKCR7dGV4TmFtZX1UZXhTaGFwZVsxXSwgJHt0ZXhOYW1lfVRleFNoYXBlWzBdKTtcbiAgICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuICAgIHJldHVybiBgXG4gICAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgsIGludCBkZXB0aDIpIHtcbiAgICAgICAgZmxvYXQgdGV4UiA9IGRvdCh2ZWMzKHJvdywgY29sLCBkZXB0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmVjMygke3NoYXBlWzFdICogc2hhcGVbMl19LCAke3NoYXBlWzJdfSwgMSkpO1xuICAgICAgICBmbG9hdCB0ZXhDID0gZmxvYXQoZGVwdGgyKTtcbiAgICAgICAgdmVjMiB1diA9ICh2ZWMyKHRleEMsIHRleFIpICsgaGFsZkNSKSAvXG4gICAgICAgICAgICAgICAgICB2ZWMyKCR7dGV4TnVtQ30uMCwgJHt0ZXhOdW1SfS4wKTtcbiAgICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cblxuICBjb25zdCBvZmZzZXQgPSBnZXRGbGF0T2Zmc2V0VW5pZm9ybU5hbWUodGV4TmFtZSk7XG4gIGlmIChlbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgcmV0dXJuIGBcbiAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgsIGludCBkZXB0aDIpIHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgdXNlIGludGVnZXIgb3BlcmF0aW9ucyBhcyBkb3QoKSBvbmx5IHdvcmtzIG9uIGZsb2F0cy5cbiAgICAgICR7c3RyaWRlMlN0cn1cbiAgICAgICR7c3RyaWRlMVN0cn1cbiAgICAgICR7c3RyaWRlMFN0cn1cbiAgICAgIGludCBpbmRleCA9IHJvdyAqIHN0cmlkZTAgKyBjb2wgKiBzdHJpZGUxICtcbiAgICAgICAgICBkZXB0aCAqIHN0cmlkZTIgKyBkZXB0aDI7XG4gICAgICB2ZWMyIHV2ID0gdXZGcm9tRmxhdCgke3RleE5hbWV9VGV4U2hhcGVbMF0sICR7XG4gICAgICAgIHRleE5hbWV9VGV4U2hhcGVbMV0sIGluZGV4ICsgJHtvZmZzZXR9KTtcbiAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG4gIH1cbiAgcmV0dXJuIGBcbiAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgsIGludCBkZXB0aDIpIHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgdXNlIGludGVnZXIgb3BlcmF0aW9ucyBhcyBkb3QoKSBvbmx5IHdvcmtzIG9uIGZsb2F0cy5cbiAgICAgIGludCBpbmRleCA9IHJvdyAqICR7c3RyaWRlMH0gKyBjb2wgKiAke3N0cmlkZTF9ICtcbiAgICAgICAgICBkZXB0aCAqICR7c3RyaWRlMn0gKyBkZXB0aDI7XG4gICAgICB2ZWMyIHV2ID0gdXZGcm9tRmxhdCgke3RleE51bVJ9LCAke3RleE51bUN9LCBpbmRleCArICR7b2Zmc2V0fSk7XG4gICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgfVxuICBgO1xufVxuXG5mdW5jdGlvbiBnZXRTYW1wbGVyNUQoaW5wdXRJbmZvOiBJbnB1dEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBzaGFwZSA9IGlucHV0SW5mby5zaGFwZUluZm8ubG9naWNhbFNoYXBlO1xuICBjb25zdCB0ZXhOYW1lID0gaW5wdXRJbmZvLm5hbWU7XG4gIGNvbnN0IGZ1bmNOYW1lID0gJ2dldCcgKyB0ZXhOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4TmFtZS5zbGljZSgxKTtcbiAgY29uc3Qgc3RyaWRlMyA9IHNoYXBlWzRdO1xuICBjb25zdCBzdHJpZGUyID0gc2hhcGVbM10gKiBzdHJpZGUzO1xuICBjb25zdCBzdHJpZGUxID0gc2hhcGVbMl0gKiBzdHJpZGUyO1xuICBjb25zdCBzdHJpZGUwID0gc2hhcGVbMV0gKiBzdHJpZGUxO1xuXG4gIGNvbnN0IHtuZXdTaGFwZSwga2VwdERpbXN9ID0gdXRpbC5zcXVlZXplU2hhcGUoc2hhcGUpO1xuICBpZiAobmV3U2hhcGUubGVuZ3RoIDwgc2hhcGUubGVuZ3RoKSB7XG4gICAgY29uc3QgbmV3SW5wdXRJbmZvID0gc3F1ZWV6ZUlucHV0SW5mbyhpbnB1dEluZm8sIG5ld1NoYXBlKTtcbiAgICBjb25zdCBwYXJhbXMgPSBbJ3JvdycsICdjb2wnLCAnZGVwdGgnLCAnZGVwdGgyJywgJ2RlcHRoMyddO1xuICAgIHJldHVybiBgXG4gICAgICAke2dldFNhbXBsZXJGcm9tSW5JbmZvKG5ld0lucHV0SW5mbyl9XG4gICAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgsIGludCBkZXB0aDIsIGludCBkZXB0aDMpIHtcbiAgICAgICAgcmV0dXJuICR7ZnVuY05hbWV9KCR7Z2V0U3F1ZWV6ZWRQYXJhbXMocGFyYW1zLCBrZXB0RGltcyl9KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG5cbiAgaWYgKGlucHV0SW5mby5zaGFwZUluZm8uaXNVbmlmb3JtKSB7XG4gICAgLy8gVW5pZm9ybSBhcnJheXMgd2lsbCBiZSBsZXNzIHRoYW4gNjU1MDUgKG5vIHJpc2sgb2YgZmxvYXQxNiBvdmVyZmxvdykuXG4gICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCByb3csIGludCBjb2wsIGludCBkZXB0aCwgaW50IGRlcHRoMiwgaW50IGRlcHRoMykge1xuICAgICAgICBmbG9hdCBpbmRleCA9IGRvdChcbiAgICAgICAgICB2ZWM0KHJvdywgY29sLCBkZXB0aCwgZGVwdGgyKSxcbiAgICAgICAgICB2ZWM0KCR7c3RyaWRlMH0sICR7c3RyaWRlMX0sICR7c3RyaWRlMn0sICR7c3RyaWRlM30pKSArXG4gICAgICAgICAgZGVwdGgzO1xuICAgICAgICAke2dldFVuaWZvcm1TYW1wbGVyKGlucHV0SW5mbyl9XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIGNvbnN0IGZsYXRPZmZzZXQgPSBpbnB1dEluZm8uc2hhcGVJbmZvLmZsYXRPZmZzZXQ7XG4gIGNvbnN0IHRleFNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby50ZXhTaGFwZTtcbiAgY29uc3QgdGV4TnVtUiA9IHRleFNoYXBlWzBdO1xuICBjb25zdCB0ZXhOdW1DID0gdGV4U2hhcGVbMV07XG5cbiAgaWYgKHRleE51bUMgPT09IHN0cmlkZTAgJiYgZmxhdE9mZnNldCA9PSBudWxsKSB7XG4gICAgLy8gdGV4QyBpcyB1c2VkIGRpcmVjdGx5IGFzIHBoeXNpY2FsIChubyByaXNrIG9mIGZsb2F0MTYgb3ZlcmZsb3cpLlxuICAgIHJldHVybiBgXG4gICAgICBmbG9hdCAke2Z1bmNOYW1lfShpbnQgcm93LCBpbnQgY29sLCBpbnQgZGVwdGgsIGludCBkZXB0aDIsIGludCBkZXB0aDMpIHtcbiAgICAgICAgaW50IHRleFIgPSByb3c7XG4gICAgICAgIGZsb2F0IHRleEMgPSBkb3QodmVjNChjb2wsIGRlcHRoLCBkZXB0aDIsIGRlcHRoMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCgke3N0cmlkZTF9LCAke3N0cmlkZTJ9LCAke3N0cmlkZTN9LCAxKSk7XG4gICAgICAgIHZlYzIgdXYgPSAodmVjMih0ZXhDLCB0ZXhSKSArIGhhbGZDUikgL1xuICAgICAgICAgICAgICAgICAgIHZlYzIoJHt0ZXhOdW1DfS4wLCAke3RleE51bVJ9LjApO1xuICAgICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIGlmICh0ZXhOdW1DID09PSBzdHJpZGUzICYmIGZsYXRPZmZzZXQgPT0gbnVsbCkge1xuICAgIC8vIHRleFIgaXMgdXNlZCBkaXJlY3RseSBhcyBwaHlzaWNhbCAobm8gcmlzayBvZiBmbG9hdDE2IG92ZXJmbG93KS5cbiAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoLCBpbnQgZGVwdGgyLCBpbnQgZGVwdGgzKSB7XG4gICAgICAgIGZsb2F0IHRleFIgPSBkb3QoXG4gICAgICAgICAgdmVjNChyb3csIGNvbCwgZGVwdGgsIGRlcHRoMiksXG4gICAgICAgICAgdmVjNCgke3NoYXBlWzFdICogc2hhcGVbMl0gKiBzaGFwZVszXX0sXG4gICAgICAgICAgICAgICAke3NoYXBlWzJdICogc2hhcGVbM119LCAke3NoYXBlWzNdfSwgMSkpO1xuICAgICAgICBpbnQgdGV4QyA9IGRlcHRoMztcbiAgICAgICAgdmVjMiB1diA9ICh2ZWMyKHRleEMsIHRleFIpICsgaGFsZkNSKSAvXG4gICAgICAgICAgICAgICAgICB2ZWMyKCR7dGV4TnVtQ30uMCwgJHt0ZXhOdW1SfS4wKTtcbiAgICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cblxuICBjb25zdCBvZmZzZXQgPSBnZXRGbGF0T2Zmc2V0VW5pZm9ybU5hbWUodGV4TmFtZSk7XG4gIHJldHVybiBgXG4gICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoLCBpbnQgZGVwdGgyLCBpbnQgZGVwdGgzKSB7XG4gICAgICAvLyBFeHBsaWNpdGx5IHVzZSBpbnRlZ2VyIG9wZXJhdGlvbnMgYXMgZG90KCkgb25seSB3b3JrcyBvbiBmbG9hdHMuXG4gICAgICBpbnQgaW5kZXggPSByb3cgKiAke3N0cmlkZTB9ICsgY29sICogJHtzdHJpZGUxfSArIGRlcHRoICogJHtzdHJpZGUyfSArXG4gICAgICAgICAgZGVwdGgyICogJHtzdHJpZGUzfSArIGRlcHRoMyArICR7b2Zmc2V0fTtcbiAgICAgIHZlYzIgdXYgPSB1dkZyb21GbGF0KCR7dGV4TnVtUn0sICR7dGV4TnVtQ30sIGluZGV4KTtcbiAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHV2KTtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGdldFNhbXBsZXI2RChpbnB1dEluZm86IElucHV0SW5mbyk6IHN0cmluZyB7XG4gIGNvbnN0IHNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGU7XG4gIGNvbnN0IHRleE5hbWUgPSBpbnB1dEluZm8ubmFtZTtcbiAgY29uc3QgZnVuY05hbWUgPSAnZ2V0JyArIHRleE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXhOYW1lLnNsaWNlKDEpO1xuXG4gIGNvbnN0IHtuZXdTaGFwZSwga2VwdERpbXN9ID0gdXRpbC5zcXVlZXplU2hhcGUoc2hhcGUpO1xuICBpZiAobmV3U2hhcGUubGVuZ3RoIDwgc2hhcGUubGVuZ3RoKSB7XG4gICAgY29uc3QgbmV3SW5wdXRJbmZvID0gc3F1ZWV6ZUlucHV0SW5mbyhpbnB1dEluZm8sIG5ld1NoYXBlKTtcbiAgICBjb25zdCBwYXJhbXMgPSBbJ3JvdycsICdjb2wnLCAnZGVwdGgnLCAnZGVwdGgyJywgJ2RlcHRoMycsICdkZXB0aDQnXTtcbiAgICByZXR1cm4gYFxuICAgICAgJHtnZXRTYW1wbGVyRnJvbUluSW5mbyhuZXdJbnB1dEluZm8pfVxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoLFxuICAgICAgICAgICAgICAgICAgICBpbnQgZGVwdGgyLCBpbnQgZGVwdGgzLCBpbnQgZGVwdGg0KSB7XG4gICAgICAgIHJldHVybiAke2Z1bmNOYW1lfSgke2dldFNxdWVlemVkUGFyYW1zKHBhcmFtcywga2VwdERpbXMpfSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIGNvbnN0IHN0cmlkZTQgPSBzaGFwZVs1XTtcbiAgY29uc3Qgc3RyaWRlMyA9IHNoYXBlWzRdICogc3RyaWRlNDtcbiAgY29uc3Qgc3RyaWRlMiA9IHNoYXBlWzNdICogc3RyaWRlMztcbiAgY29uc3Qgc3RyaWRlMSA9IHNoYXBlWzJdICogc3RyaWRlMjtcbiAgY29uc3Qgc3RyaWRlMCA9IHNoYXBlWzFdICogc3RyaWRlMTtcblxuICBpZiAoaW5wdXRJbmZvLnNoYXBlSW5mby5pc1VuaWZvcm0pIHtcbiAgICAvLyBVbmlmb3JtIGFycmF5cyB3aWxsIGJlIGxlc3MgdGhhbiA2NTUwNSAobm8gcmlzayBvZiBmbG9hdDE2IG92ZXJmbG93KS5cbiAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoLFxuICAgICAgICAgICAgICAgICAgaW50IGRlcHRoMiwgaW50IGRlcHRoMywgaW50IGRlcHRoNCkge1xuICAgICAgICBpbnQgaW5kZXggPSByb3VuZChkb3QoXG4gICAgICAgICAgdmVjNChyb3csIGNvbCwgZGVwdGgsIGRlcHRoMiksXG4gICAgICAgICAgdmVjNCgke3N0cmlkZTB9LCAke3N0cmlkZTF9LCAke3N0cmlkZTJ9LCAke3N0cmlkZTN9KSkgK1xuICAgICAgICAgIGRvdChcbiAgICAgICAgICAgIHZlYzIoZGVwdGgzLCBkZXB0aDQpLFxuICAgICAgICAgICAgdmVjMigke3N0cmlkZTR9LCAxKSkpO1xuICAgICAgICAke2dldFVuaWZvcm1TYW1wbGVyKGlucHV0SW5mbyl9XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIGNvbnN0IGZsYXRPZmZzZXQgPSBpbnB1dEluZm8uc2hhcGVJbmZvLmZsYXRPZmZzZXQ7XG4gIGNvbnN0IHRleFNoYXBlID0gaW5wdXRJbmZvLnNoYXBlSW5mby50ZXhTaGFwZTtcbiAgY29uc3QgdGV4TnVtUiA9IHRleFNoYXBlWzBdO1xuICBjb25zdCB0ZXhOdW1DID0gdGV4U2hhcGVbMV07XG4gIGlmICh0ZXhOdW1DID09PSBzdHJpZGUwICYmIGZsYXRPZmZzZXQgPT0gbnVsbCkge1xuICAgIC8vIHRleEMgaXMgdXNlZCBkaXJlY3RseSBhcyBwaHlzaWNhbCAobm8gcmlzayBvZiBmbG9hdDE2IG92ZXJmbG93KS5cbiAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoLFxuICAgICAgICAgICAgICAgICAgICBpbnQgZGVwdGgyLCBpbnQgZGVwdGgzLCBpbnQgZGVwdGg0KSB7XG4gICAgICAgIGludCB0ZXhSID0gcm93O1xuICAgICAgICBmbG9hdCB0ZXhDID0gZG90KHZlYzQoY29sLCBkZXB0aCwgZGVwdGgyLCBkZXB0aDMpLFxuICAgICAgICAgIHZlYzQoJHtzdHJpZGUxfSwgJHtzdHJpZGUyfSwgJHtzdHJpZGUzfSwgJHtzdHJpZGU0fSkpICtcbiAgICAgICAgICAgICAgIGZsb2F0KGRlcHRoNCk7XG4gICAgICAgIHZlYzIgdXYgPSAodmVjMih0ZXhDLCB0ZXhSKSArIGhhbGZDUikgL1xuICAgICAgICAgICAgICAgICAgIHZlYzIoJHt0ZXhOdW1DfS4wLCAke3RleE51bVJ9LjApO1xuICAgICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuICBpZiAodGV4TnVtQyA9PT0gc3RyaWRlNCAmJiBmbGF0T2Zmc2V0ID09IG51bGwpIHtcbiAgICAvLyB0ZXhSIGlzIHVzZWQgZGlyZWN0bHkgYXMgcGh5c2ljYWwgKG5vIHJpc2sgb2YgZmxvYXQxNiBvdmVyZmxvdykuXG4gICAgcmV0dXJuIGBcbiAgICAgIGZsb2F0ICR7ZnVuY05hbWV9KGludCByb3csIGludCBjb2wsIGludCBkZXB0aCxcbiAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoMiwgaW50IGRlcHRoMywgaW50IGRlcHRoNCkge1xuICAgICAgICBmbG9hdCB0ZXhSID0gZG90KHZlYzQocm93LCBjb2wsIGRlcHRoLCBkZXB0aDIpLFxuICAgICAgICAgIHZlYzQoJHtzaGFwZVsxXSAqIHNoYXBlWzJdICogc2hhcGVbM10gKiBzaGFwZVs0XX0sXG4gICAgICAgICAgICAgICAke3NoYXBlWzJdICogc2hhcGVbM10gKiBzaGFwZVs0XX0sXG4gICAgICAgICAgICAgICAke3NoYXBlWzNdICogc2hhcGVbNF19LFxuICAgICAgICAgICAgICAgJHtzaGFwZVs0XX0pKSArIGZsb2F0KGRlcHRoMyk7XG4gICAgICAgIGludCB0ZXhDID0gZGVwdGg0O1xuICAgICAgICB2ZWMyIHV2ID0gKHZlYzIodGV4QywgdGV4UikgKyBoYWxmQ1IpIC9cbiAgICAgICAgICAgICAgICAgIHZlYzIoJHt0ZXhOdW1DfS4wLCAke3RleE51bVJ9LjApO1xuICAgICAgICByZXR1cm4gc2FtcGxlVGV4dHVyZSgke3RleE5hbWV9LCB1dik7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuICBjb25zdCBvZmZzZXQgPSBnZXRGbGF0T2Zmc2V0VW5pZm9ybU5hbWUodGV4TmFtZSk7XG4gIHJldHVybiBgXG4gICAgZmxvYXQgJHtmdW5jTmFtZX0oaW50IHJvdywgaW50IGNvbCwgaW50IGRlcHRoLFxuICAgICAgICAgICAgICAgICAgaW50IGRlcHRoMiwgaW50IGRlcHRoMywgaW50IGRlcHRoNCkge1xuICAgICAgLy8gRXhwbGljaXRseSB1c2UgaW50ZWdlciBvcGVyYXRpb25zIGFzIGRvdCgpIG9ubHkgd29ya3Mgb24gZmxvYXRzLlxuICAgICAgaW50IGluZGV4ID0gcm93ICogJHtzdHJpZGUwfSArIGNvbCAqICR7c3RyaWRlMX0gKyBkZXB0aCAqICR7c3RyaWRlMn0gK1xuICAgICAgICAgIGRlcHRoMiAqICR7c3RyaWRlM30gKyBkZXB0aDMgKiAke3N0cmlkZTR9ICsgZGVwdGg0ICsgJHtvZmZzZXR9O1xuICAgICAgdmVjMiB1diA9IHV2RnJvbUZsYXQoJHt0ZXhOdW1SfSwgJHt0ZXhOdW1DfSwgaW5kZXgpO1xuICAgICAgcmV0dXJuIHNhbXBsZVRleHR1cmUoJHt0ZXhOYW1lfSwgdXYpO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0VW5pZm9ybVNhbXBsZXIoaW5wdXRJbmZvOiBJbnB1dEluZm8pOiBzdHJpbmcge1xuICBjb25zdCB0ZXhOYW1lID0gaW5wdXRJbmZvLm5hbWU7XG4gIGNvbnN0IGluU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dEluZm8uc2hhcGVJbmZvLmxvZ2ljYWxTaGFwZSk7XG5cbiAgaWYgKGluU2l6ZSA8IDIpIHtcbiAgICByZXR1cm4gYHJldHVybiAke3RleE5hbWV9O2A7XG4gIH1cblxuICByZXR1cm4gYFxuICAgIGZvciAoaW50IGkgPSAwOyBpIDwgJHtpblNpemV9OyBpKyspIHtcbiAgICAgIGlmIChpID09IGluZGV4KSB7XG4gICAgICAgIHJldHVybiAke3RleE5hbWV9W2ldO1xuICAgICAgfVxuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2VkU2FtcGxlckF0T3V0cHV0Q29vcmRzKFxuICAgIGlucHV0SW5mbzogSW5wdXRJbmZvLCBvdXRTaGFwZUluZm86IFNoYXBlSW5mbykge1xuICBjb25zdCB0ZXhOYW1lID0gaW5wdXRJbmZvLm5hbWU7XG4gIGNvbnN0IHRleEZ1bmNTbmlwcGV0ID0gdGV4TmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleE5hbWUuc2xpY2UoMSk7XG4gIGNvbnN0IGZ1bmNOYW1lID0gJ2dldCcgKyB0ZXhGdW5jU25pcHBldCArICdBdE91dENvb3Jkcyc7XG4gIGNvbnN0IGluUmFuayA9IGlucHV0SW5mby5zaGFwZUluZm8ubG9naWNhbFNoYXBlLmxlbmd0aDtcbiAgY29uc3Qgb3V0UmFuayA9IG91dFNoYXBlSW5mby5sb2dpY2FsU2hhcGUubGVuZ3RoO1xuXG4gIGNvbnN0IGJyb2FkY2FzdERpbXMgPSBnZXRCcm9hZGNhc3REaW1zKFxuICAgICAgaW5wdXRJbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGUsIG91dFNoYXBlSW5mby5sb2dpY2FsU2hhcGUpO1xuXG4gIGNvbnN0IHR5cGUgPSBnZXRDb29yZHNEYXRhVHlwZShvdXRSYW5rKTtcbiAgY29uc3QgcmFua0RpZmYgPSBvdXRSYW5rIC0gaW5SYW5rO1xuICBsZXQgY29vcmRzU25pcHBldDogc3RyaW5nO1xuICBjb25zdCBmaWVsZHMgPSBbJ3gnLCAneScsICd6JywgJ3cnLCAndScsICd2J107XG5cbiAgaWYgKGluUmFuayA9PT0gMCkge1xuICAgIGNvb3Jkc1NuaXBwZXQgPSAnJztcbiAgfSBlbHNlIGlmIChvdXRSYW5rIDwgMiAmJiBicm9hZGNhc3REaW1zLmxlbmd0aCA+PSAxKSB7XG4gICAgY29vcmRzU25pcHBldCA9ICdjb29yZHMgPSAwOyc7XG4gIH0gZWxzZSB7XG4gICAgY29vcmRzU25pcHBldCA9XG4gICAgICAgIGJyb2FkY2FzdERpbXMubWFwKGQgPT4gYGNvb3Jkcy4ke2ZpZWxkc1tkICsgcmFua0RpZmZdfSA9IDA7YClcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgfVxuICBsZXQgdW5wYWNrZWRDb29yZHNTbmlwcGV0ID0gJyc7XG4gIGlmIChvdXRSYW5rIDwgMiAmJiBpblJhbmsgPiAwKSB7XG4gICAgdW5wYWNrZWRDb29yZHNTbmlwcGV0ID0gJ2Nvb3Jkcyc7XG4gIH0gZWxzZSB7XG4gICAgdW5wYWNrZWRDb29yZHNTbmlwcGV0ID0gaW5wdXRJbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgocywgaSkgPT4gYGNvb3Jkcy4ke2ZpZWxkc1tpICsgcmFua0RpZmZdfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgbGV0IG91dHB1dCA9IGByZXR1cm4gb3V0cHV0VmFsdWU7YDtcbiAgY29uc3QgaW5TaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKGlucHV0SW5mby5zaGFwZUluZm8ubG9naWNhbFNoYXBlKTtcbiAgY29uc3QgaXNJbnB1dFNjYWxhciA9IGluU2l6ZSA9PT0gMTtcbiAgY29uc3Qgb3V0U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShvdXRTaGFwZUluZm8ubG9naWNhbFNoYXBlKTtcbiAgY29uc3QgaXNPdXRwdXRTY2FsYXIgPSBvdXRTaXplID09PSAxO1xuXG4gIGlmIChpblJhbmsgPT09IDEgJiYgIWlzSW5wdXRTY2FsYXIgJiYgIWlzT3V0cHV0U2NhbGFyKSB7XG4gICAgb3V0cHV0ID0gYFxuICAgICAgcmV0dXJuIHZlYzQob3V0cHV0VmFsdWUueHksIG91dHB1dFZhbHVlLnh5KTtcbiAgICBgO1xuICB9IGVsc2UgaWYgKGlzSW5wdXRTY2FsYXIgJiYgIWlzT3V0cHV0U2NhbGFyKSB7XG4gICAgaWYgKG91dFJhbmsgPT09IDEpIHtcbiAgICAgIG91dHB1dCA9IGBcbiAgICAgICAgcmV0dXJuIHZlYzQob3V0cHV0VmFsdWUueCwgb3V0cHV0VmFsdWUueCwgMC4sIDAuKTtcbiAgICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dCA9IGBcbiAgICAgICAgcmV0dXJuIHZlYzQob3V0cHV0VmFsdWUueCk7XG4gICAgICBgO1xuICAgIH1cbiAgfSBlbHNlIGlmIChicm9hZGNhc3REaW1zLmxlbmd0aCkge1xuICAgIGNvbnN0IHJvd3MgPSBpblJhbmsgLSAyO1xuICAgIGNvbnN0IGNvbHMgPSBpblJhbmsgLSAxO1xuXG4gICAgaWYgKGJyb2FkY2FzdERpbXMuaW5kZXhPZihyb3dzKSA+IC0xICYmIGJyb2FkY2FzdERpbXMuaW5kZXhPZihjb2xzKSA+IC0xKSB7XG4gICAgICBvdXRwdXQgPSBgcmV0dXJuIHZlYzQob3V0cHV0VmFsdWUueCk7YDtcbiAgICB9IGVsc2UgaWYgKGJyb2FkY2FzdERpbXMuaW5kZXhPZihyb3dzKSA+IC0xKSB7XG4gICAgICBvdXRwdXQgPSBgcmV0dXJuIHZlYzQob3V0cHV0VmFsdWUueCwgb3V0cHV0VmFsdWUueSwgYCArXG4gICAgICAgICAgYG91dHB1dFZhbHVlLngsIG91dHB1dFZhbHVlLnkpO2A7XG4gICAgfSBlbHNlIGlmIChicm9hZGNhc3REaW1zLmluZGV4T2YoY29scykgPiAtMSkge1xuICAgICAgb3V0cHV0ID0gYHJldHVybiB2ZWM0KG91dHB1dFZhbHVlLnh4LCBvdXRwdXRWYWx1ZS56eik7YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYFxuICAgIHZlYzQgJHtmdW5jTmFtZX0oKSB7XG4gICAgICAke3R5cGV9IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgJHtjb29yZHNTbmlwcGV0fVxuICAgICAgdmVjNCBvdXRwdXRWYWx1ZSA9IGdldCR7dGV4RnVuY1NuaXBwZXR9KCR7dW5wYWNrZWRDb29yZHNTbmlwcGV0fSk7XG4gICAgICAke291dHB1dH1cbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGdldFNhbXBsZXJBdE91dHB1dENvb3JkcyhcbiAgICBpbnB1dEluZm86IElucHV0SW5mbywgb3V0U2hhcGVJbmZvOiBTaGFwZUluZm8pIHtcbiAgY29uc3QgdGV4TmFtZSA9IGlucHV0SW5mby5uYW1lO1xuICBjb25zdCB0ZXhGdW5jU25pcHBldCA9IHRleE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXhOYW1lLnNsaWNlKDEpO1xuICBjb25zdCBmdW5jTmFtZSA9ICdnZXQnICsgdGV4RnVuY1NuaXBwZXQgKyAnQXRPdXRDb29yZHMnO1xuICBjb25zdCBvdXRUZXhTaGFwZSA9IG91dFNoYXBlSW5mby50ZXhTaGFwZTtcbiAgY29uc3QgaW5UZXhTaGFwZSA9IGlucHV0SW5mby5zaGFwZUluZm8udGV4U2hhcGU7XG4gIGNvbnN0IGluUmFuayA9IGlucHV0SW5mby5zaGFwZUluZm8ubG9naWNhbFNoYXBlLmxlbmd0aDtcbiAgY29uc3Qgb3V0UmFuayA9IG91dFNoYXBlSW5mby5sb2dpY2FsU2hhcGUubGVuZ3RoO1xuXG4gIGlmICghaW5wdXRJbmZvLnNoYXBlSW5mby5pc1VuaWZvcm0gJiYgaW5SYW5rID09PSBvdXRSYW5rICYmXG4gICAgICBpbnB1dEluZm8uc2hhcGVJbmZvLmZsYXRPZmZzZXQgPT0gbnVsbCAmJlxuICAgICAgdXRpbC5hcnJheXNFcXVhbChpblRleFNoYXBlLCBvdXRUZXhTaGFwZSkpIHtcbiAgICByZXR1cm4gYFxuICAgICAgZmxvYXQgJHtmdW5jTmFtZX0oKSB7XG4gICAgICAgIHJldHVybiBzYW1wbGVUZXh0dXJlKCR7dGV4TmFtZX0sIHJlc3VsdFVWKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG5cbiAgY29uc3QgdHlwZSA9IGdldENvb3Jkc0RhdGFUeXBlKG91dFJhbmspO1xuICBjb25zdCBicm9hZGNhc3REaW1zID0gZ2V0QnJvYWRjYXN0RGltcyhcbiAgICAgIGlucHV0SW5mby5zaGFwZUluZm8ubG9naWNhbFNoYXBlLCBvdXRTaGFwZUluZm8ubG9naWNhbFNoYXBlKTtcbiAgY29uc3QgcmFua0RpZmYgPSBvdXRSYW5rIC0gaW5SYW5rO1xuICBsZXQgY29vcmRzU25pcHBldDogc3RyaW5nO1xuICBjb25zdCBmaWVsZHMgPSBbJ3gnLCAneScsICd6JywgJ3cnLCAndScsICd2J107XG5cbiAgaWYgKGluUmFuayA9PT0gMCkge1xuICAgIGNvb3Jkc1NuaXBwZXQgPSAnJztcbiAgfSBlbHNlIGlmIChvdXRSYW5rIDwgMiAmJiBicm9hZGNhc3REaW1zLmxlbmd0aCA+PSAxKSB7XG4gICAgY29vcmRzU25pcHBldCA9ICdjb29yZHMgPSAwOyc7XG4gIH0gZWxzZSB7XG4gICAgY29vcmRzU25pcHBldCA9XG4gICAgICAgIGJyb2FkY2FzdERpbXMubWFwKGQgPT4gYGNvb3Jkcy4ke2ZpZWxkc1tkICsgcmFua0RpZmZdfSA9IDA7YClcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgfVxuICBsZXQgdW5wYWNrZWRDb29yZHNTbmlwcGV0ID0gJyc7XG4gIGlmIChvdXRSYW5rIDwgMiAmJiBpblJhbmsgPiAwKSB7XG4gICAgdW5wYWNrZWRDb29yZHNTbmlwcGV0ID0gJ2Nvb3Jkcyc7XG4gIH0gZWxzZSB7XG4gICAgdW5wYWNrZWRDb29yZHNTbmlwcGV0ID0gaW5wdXRJbmZvLnNoYXBlSW5mby5sb2dpY2FsU2hhcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgocywgaSkgPT4gYGNvb3Jkcy4ke2ZpZWxkc1tpICsgcmFua0RpZmZdfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgcmV0dXJuIGBcbiAgICBmbG9hdCAke2Z1bmNOYW1lfSgpIHtcbiAgICAgICR7dHlwZX0gY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAke2Nvb3Jkc1NuaXBwZXR9XG4gICAgICByZXR1cm4gZ2V0JHt0ZXhGdW5jU25pcHBldH0oJHt1bnBhY2tlZENvb3Jkc1NuaXBwZXR9KTtcbiAgICB9XG4gIGA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb29yZHNEYXRhVHlwZShyYW5rOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAocmFuayA8PSAxKSB7XG4gICAgcmV0dXJuICdpbnQnO1xuICB9IGVsc2UgaWYgKHJhbmsgPT09IDIpIHtcbiAgICByZXR1cm4gJ2l2ZWMyJztcbiAgfSBlbHNlIGlmIChyYW5rID09PSAzKSB7XG4gICAgcmV0dXJuICdpdmVjMyc7XG4gIH0gZWxzZSBpZiAocmFuayA9PT0gNCkge1xuICAgIHJldHVybiAnaXZlYzQnO1xuICB9IGVsc2UgaWYgKHJhbmsgPT09IDUpIHtcbiAgICByZXR1cm4gJ2l2ZWM1JztcbiAgfSBlbHNlIGlmIChyYW5rID09PSA2KSB7XG4gICAgcmV0dXJuICdpdmVjNic7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoYEdQVSBmb3IgcmFuayAke3Jhbmt9IGlzIG5vdCB5ZXQgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaWZvcm1JbmZvRnJvbVNoYXBlKFxuICAgIGlzUGFja2VkOiBib29sZWFuLCBzaGFwZTogbnVtYmVyW10sIHRleFNoYXBlOiBudW1iZXJbXSkge1xuICBjb25zdCB7bmV3U2hhcGUsIGtlcHREaW1zfSA9IHV0aWwuc3F1ZWV6ZVNoYXBlKHNoYXBlKTtcbiAgY29uc3QgcmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgY29uc3QgdXNlU3F1ZWV6ZVBhY2tlZFNoYXBlID0gaXNQYWNrZWQgJiYgcmFuayA9PT0gMyAmJiBzaGFwZVswXSA9PT0gMTtcbiAgY29uc3Qgc3F1ZWV6ZVNoYXBlID0gdXNlU3F1ZWV6ZVBhY2tlZFNoYXBlID8gc2hhcGUuc2xpY2UoMSkgOiBuZXdTaGFwZTtcbiAgY29uc3QgdXNlU3F1ZWV6ZVNoYXBlID1cbiAgICAgICghaXNQYWNrZWQgJiYgcmFuayA+IDEgJiYgIXV0aWwuYXJyYXlzRXF1YWwoc2hhcGUsIHRleFNoYXBlKSAmJlxuICAgICAgIG5ld1NoYXBlLmxlbmd0aCA8IHJhbmspIHx8XG4gICAgICB1c2VTcXVlZXplUGFja2VkU2hhcGU7XG4gIGNvbnN0IHVuaWZvcm1TaGFwZSA9IHVzZVNxdWVlemVTaGFwZSA/IHNxdWVlemVTaGFwZSA6IHNoYXBlO1xuICByZXR1cm4ge3VzZVNxdWVlemVTaGFwZSwgdW5pZm9ybVNoYXBlLCBrZXB0RGltc307XG59XG5cbi8qKiBSZXR1cm5zIGEgbmV3IGlucHV0IGluZm8gKGEgY29weSkgdGhhdCBoYXMgYSBzcXVlZXplZCBsb2dpY2FsIHNoYXBlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNxdWVlemVJbnB1dEluZm8oXG4gICAgaW5JbmZvOiBJbnB1dEluZm8sIHNxdWVlemVkU2hhcGU6IG51bWJlcltdKTogSW5wdXRJbmZvIHtcbiAgLy8gRGVlcCBjb3B5LlxuICBjb25zdCBuZXdJbnB1dEluZm86IElucHV0SW5mbyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5JbmZvKSk7XG4gIG5ld0lucHV0SW5mby5zaGFwZUluZm8ubG9naWNhbFNoYXBlID0gc3F1ZWV6ZWRTaGFwZTtcbiAgcmV0dXJuIG5ld0lucHV0SW5mbztcbn1cblxuZnVuY3Rpb24gZ2V0U3F1ZWV6ZWRQYXJhbXMocGFyYW1zOiBzdHJpbmdbXSwga2VwdERpbXM6IG51bWJlcltdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGtlcHREaW1zLm1hcChkID0+IHBhcmFtc1tkXSkuam9pbignLCAnKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, env, util } from '@tensorflow/tfjs-core';\nimport * as shader_compiler from './shader_compiler';\nimport { createFragmentShader } from './webgl_util';\nexport function compileProgram(gpgpu, program, inputs, output) {\n const inputInfos = inputs.map((input, i) => {\n const shapeInfo = {\n logicalShape: input.shape,\n texShape: input.isUniform ? null : input.texData.texShape,\n isUniform: input.isUniform,\n isPacked: input.isUniform ? false : input.texData.isPacked,\n flatOffset: null\n };\n if (input.texData != null && input.texData.slice != null &&\n input.texData.slice.flatOffset > 0) {\n shapeInfo.flatOffset = input.texData.slice.flatOffset;\n }\n return { name: program.variableNames[i], shapeInfo };\n });\n const inShapeInfos = inputInfos.map(x => x.shapeInfo);\n const outShapeInfo = {\n logicalShape: output.shape,\n texShape: output.texData.texShape,\n isUniform: false,\n isPacked: output.texData.isPacked,\n flatOffset: null\n };\n const source = shader_compiler.makeShader(inputInfos, outShapeInfo, program);\n const fragmentShader = createFragmentShader(gpgpu.gl, source);\n const webGLProgram = gpgpu.createProgram(fragmentShader);\n if (!env().get('ENGINE_COMPILE_ONLY')) {\n gpgpu.buildVao(webGLProgram);\n return Object.assign({ program,\n fragmentShader,\n source,\n webGLProgram,\n inShapeInfos,\n outShapeInfo }, getUniformLocations(gpgpu, program, webGLProgram));\n }\n else {\n return {\n program,\n fragmentShader,\n source,\n webGLProgram,\n inShapeInfos,\n outShapeInfo,\n variablesLocations: null,\n customUniformLocations: null,\n infLoc: null,\n nanLoc: null,\n outShapeLocation: null,\n outShapeStridesLocation: null,\n outTexShapeLocation: null\n };\n }\n}\nexport function getUniformLocations(gpgpu, program, webGLProgram) {\n const variablesLocations = [];\n const customUniformLocations = [];\n let outShapeLocation;\n let outTexShapeLocation;\n let outShapeStridesLocation;\n let infLoc = null;\n let nanLoc = null;\n // Add special uniforms (NAN, INFINITY)\n nanLoc = gpgpu.getUniformLocation(webGLProgram, 'NAN', false);\n if (env().getNumber('WEBGL_VERSION') === 1) {\n infLoc = gpgpu.getUniformLocation(webGLProgram, 'INFINITY', false);\n }\n // Add user-defined uniforms\n const shouldThrow = false;\n for (const varName of program.variableNames) {\n const varLocs = {\n name: varName,\n uniform: gpgpu.getUniformLocation(webGLProgram, varName, shouldThrow),\n offset: gpgpu.getUniformLocation(webGLProgram, `offset${varName}`, shouldThrow),\n };\n if (program.enableShapeUniforms) {\n varLocs.shape = gpgpu.getUniformLocation(webGLProgram, `${varName}Shape`, shouldThrow);\n varLocs.texShape = gpgpu.getUniformLocation(webGLProgram, `${varName}TexShape`, shouldThrow);\n }\n variablesLocations.push(varLocs);\n }\n if (program.enableShapeUniforms) {\n outShapeLocation =\n gpgpu.getUniformLocation(webGLProgram, 'outShape', shouldThrow);\n outShapeStridesLocation =\n gpgpu.getUniformLocation(webGLProgram, 'outShapeStrides', shouldThrow);\n outTexShapeLocation =\n gpgpu.getUniformLocation(webGLProgram, 'outTexShape', shouldThrow);\n }\n if (program.customUniforms) {\n for (const d of program.customUniforms) {\n customUniformLocations.push(gpgpu.getUniformLocation(webGLProgram, d.name, shouldThrow));\n }\n }\n return {\n variablesLocations,\n customUniformLocations,\n infLoc,\n nanLoc,\n outShapeLocation,\n outShapeStridesLocation,\n outTexShapeLocation\n };\n}\nfunction validateBinaryAndProgram(shapeInfos, inputs) {\n if (shapeInfos.length !== inputs.length) {\n throw Error(`Binary was compiled with ${shapeInfos.length} inputs, but ` +\n `was executed with ${inputs.length} inputs`);\n }\n shapeInfos.forEach((s, i) => {\n const shapeA = s.logicalShape;\n const input = inputs[i];\n const shapeB = input.shape;\n if (!util.arraysEqual(shapeA, shapeB)) {\n throw Error(`Binary was compiled with different shapes than ` +\n `the current args. Shapes ${shapeA} and ${shapeB} must match`);\n }\n // The input is uploaded as uniform.\n if (s.isUniform && input.isUniform) {\n return;\n }\n const texShapeA = s.texShape;\n const texShapeB = input.isUniform ? null : input.texData.texShape;\n if (!util.arraysEqual(texShapeA, texShapeB)) {\n throw Error(`Binary was compiled with different texture shapes than the` +\n ` current args. Shape ${texShapeA} and ${texShapeB} must match`);\n }\n });\n}\nexport function runProgram(gpgpu, binary, inputs, output, customUniformValues) {\n if (!binary.program.enableShapeUniforms) {\n validateBinaryAndProgram(binary.inShapeInfos, inputs);\n validateBinaryAndProgram([binary.outShapeInfo], [output]);\n }\n const outTex = output.texData.texture;\n const outTexShape = output.texData.texShape;\n if (output.texData.isPacked) {\n gpgpu.setOutputPackedMatrixTexture(outTex.texture, outTexShape[0], outTexShape[1]);\n }\n else {\n gpgpu.setOutputMatrixTexture(outTex.texture, outTexShape[0], outTexShape[1]);\n }\n gpgpu.setProgram(binary.webGLProgram);\n gpgpu.bindVertexArray(binary.webGLProgram.vao);\n // Set special uniforms (NAN, INFINITY)\n if (env().getNumber('WEBGL_VERSION') === 1) {\n if (binary.infLoc !== null) {\n gpgpu.gl.uniform1f(binary.infLoc, Infinity);\n }\n }\n if (binary.nanLoc !== null) {\n gpgpu.gl.uniform1f(binary.nanLoc, NaN);\n }\n // Set user-defined inputs\n for (let i = 0; i < inputs.length; ++i) {\n const input = inputs[i];\n const { uniform: varLoc, offset: varOffsetLoc, shape: varShapeLoc, texShape: varTexShapeLoc, } = binary.variablesLocations[i];\n if (varShapeLoc) {\n const { uniformShape } = shader_compiler.getUniformInfoFromShape(binary.program.packedInputs, input.shape, input.texData.texShape);\n switch (uniformShape.length) {\n case 1:\n gpgpu.gl.uniform1iv(varShapeLoc, new Int32Array(uniformShape));\n break;\n case 2:\n gpgpu.gl.uniform2iv(varShapeLoc, new Int32Array(uniformShape));\n break;\n case 3:\n gpgpu.gl.uniform3iv(varShapeLoc, new Int32Array(uniformShape));\n break;\n case 4:\n gpgpu.gl.uniform4iv(varShapeLoc, new Int32Array(uniformShape));\n break;\n default:\n break;\n }\n }\n if (varTexShapeLoc) {\n gpgpu.gl.uniform2i(varTexShapeLoc, input.texData.texShape[0], input.texData.texShape[1]);\n }\n if (varLoc == null) {\n // The compiler inferred that this variable is not used in this shader.\n continue;\n }\n if (input.isUniform) {\n // Upload the values of the tensor as uniform.\n if (util.sizeFromShape(input.shape) < 2) {\n gpgpu.gl.uniform1f(varLoc, input.uniformValues[0]);\n }\n else {\n let vals = input.uniformValues;\n if (!(vals instanceof Float32Array)) {\n vals = new Float32Array(vals);\n }\n gpgpu.gl.uniform1fv(varLoc, vals);\n }\n continue;\n }\n // If the input was sliced, upload the flat offset index.\n if (input.texData.slice != null && varOffsetLoc != null) {\n gpgpu.gl.uniform1i(varOffsetLoc, input.texData.slice.flatOffset);\n }\n gpgpu.setInputMatrixTexture(input.texData.texture.texture, varLoc, i);\n }\n const outShapeLoc = binary.outShapeLocation;\n if (outShapeLoc) {\n switch (output.shape.length) {\n case 1:\n gpgpu.gl.uniform1iv(outShapeLoc, new Int32Array(output.shape));\n break;\n case 2:\n gpgpu.gl.uniform2iv(outShapeLoc, new Int32Array(output.shape));\n break;\n case 3:\n gpgpu.gl.uniform3iv(outShapeLoc, new Int32Array(output.shape));\n break;\n case 4:\n gpgpu.gl.uniform4iv(outShapeLoc, new Int32Array(output.shape));\n break;\n default:\n break;\n }\n }\n if (binary.outShapeStridesLocation) {\n const strides = util.computeStrides(output.shape);\n switch (output.shape.length) {\n case 2:\n gpgpu.gl.uniform1iv(binary.outShapeStridesLocation, new Int32Array(strides));\n break;\n case 3:\n gpgpu.gl.uniform2iv(binary.outShapeStridesLocation, new Int32Array(strides));\n break;\n case 4:\n gpgpu.gl.uniform3iv(binary.outShapeStridesLocation, new Int32Array(strides));\n break;\n default:\n break;\n }\n }\n if (binary.outTexShapeLocation) {\n gpgpu.gl.uniform2i(binary.outTexShapeLocation, output.texData.texShape[0], output.texData.texShape[1]);\n }\n if (binary.program.customUniforms && customUniformValues) {\n for (let i = 0; i < binary.program.customUniforms.length; ++i) {\n const d = binary.program.customUniforms[i];\n const customLoc = binary.customUniformLocations[i];\n const customValue = customUniformValues[i];\n if (d.type === 'float') {\n gpgpu.gl.uniform1fv(customLoc, customValue);\n }\n else if (d.type === 'vec2') {\n gpgpu.gl.uniform2fv(customLoc, customValue);\n }\n else if (d.type === 'vec3') {\n gpgpu.gl.uniform3fv(customLoc, customValue);\n }\n else if (d.type === 'vec4') {\n gpgpu.gl.uniform4fv(customLoc, customValue);\n }\n else if (d.type === 'int') {\n gpgpu.gl.uniform1iv(customLoc, customValue);\n }\n else if (d.type === 'ivec2') {\n gpgpu.gl.uniform2iv(customLoc, customValue);\n }\n else if (d.type === 'ivec3') {\n gpgpu.gl.uniform3iv(customLoc, customValue);\n }\n else if (d.type === 'ivec4') {\n gpgpu.gl.uniform4iv(customLoc, customValue);\n }\n else {\n throw Error(`uniform type ${d.type} is not supported yet.`);\n }\n }\n }\n gpgpu.executeProgram();\n}\nexport function makeShaderKey(program, inputs, output) {\n let keyInputs = '';\n inputs.concat(output).forEach(x => {\n const hasOffset = x.texData != null && x.texData.slice != null &&\n x.texData.slice.flatOffset > 0;\n // TODO: Remove the condition of !x.isUniform.\n if (program.enableShapeUniforms && !x.isUniform) {\n const xTexShape = x.texData.texShape;\n const { useSqueezeShape, uniformShape, keptDims } = shader_compiler.getUniformInfoFromShape(program.packedInputs, x.shape, xTexShape);\n let rank1 = '', rank2 = '', rank34 = '';\n if (uniformShape.length === 1 && program.packedInputs) {\n const packedTexShape = [Math.ceil(xTexShape[0] / 2), Math.ceil(xTexShape[1] / 2)];\n rank1 = `${packedTexShape[0] > 1}_${packedTexShape[1] > 1}`;\n }\n else if (uniformShape.length === 2 && !program.packedInputs) {\n rank2 = `${uniformShape[0] > 1}_${uniformShape[1] > 1}`;\n }\n else if (uniformShape.length > 2 && !program.packedInputs) {\n const strides = util.computeStrides(uniformShape);\n rank34 = `${strides[0] === xTexShape[1]}_${strides[strides.length - 1] === xTexShape[1]}`;\n }\n const xRank = x.shape.length;\n const isLogicalShapTexShapeEqual = uniformShape.length === 2 && util.arraysEqual(x.shape, xTexShape);\n const isScalar = util.sizeFromShape(x.shape) === 1;\n const broadcastDims = backend_util.getBroadcastDims(x.shape, output.shape);\n const isInOutTexShapeEqual = !program.packedInputs &&\n xRank === output.shape.length &&\n util.arraysEqual(xTexShape, output.texData.texShape);\n const isTexShapeGreaterThanOne = program.packedInputs || uniformShape.length > 2 ?\n '' :\n `${xTexShape[0] > 1}_${xTexShape[1] > 1}`;\n // These key components are needed due to shader_compiler is embedding\n // them in the shader.\n // |xRank| is used to determine the coords length. See\n // get[Packed]SamplerAtOutputCoords.\n // |isInOutTexShapeEqual| is used to determine whether going to an\n // optimization path in getSamplerAtOutputCoords.\n // |useSqueezeShape| is extracted from squeezeInputInfo of\n // getSampler[2|3|4]D/getPackedSampler3D.\n // |isScalar| is extracted from isInputScalar/isOutputScalar in\n // getPackedSamplerAtOutputCoords.\n // |broadcastDims| is extracted from get[Packed]SamplerAtOutputCoords.\n // |isLogicalShapTexShapeEqual| is used in\n // getOutput[Packed]2DCoords/get[Packed]Sampler2D.\n // |rank1| is used in getOutputPacked1DCoords.\n // |rank2| is used in getOutput2DCoords.\n // |rank34| is used in getSampler3D/getSampler4D.\n // |isTexShapeGreaterThanOne| are used in\n // getSampler[Scalar|1D|2D]/getOutput1DCoords.\n keyInputs += `${xRank}_${isInOutTexShapeEqual}_${useSqueezeShape ? keptDims : ''}_${uniformShape.length}_${isScalar}_${broadcastDims}_${isLogicalShapTexShapeEqual}_${rank1}_${rank2}_${rank34}_${isTexShapeGreaterThanOne}_${hasOffset}`;\n }\n else {\n const texShape = x.isUniform ? 'uniform' : x.texData.texShape;\n keyInputs += `${x.shape}_${texShape}_${hasOffset}`;\n }\n });\n const keyUserCode = program.userCode;\n let key = program.constructor.name;\n // Fast string concat. See https://jsperf.com/string-concatenation/14.\n key += '_' + keyInputs + '_' + keyUserCode +\n `${env().getNumber('WEBGL_VERSION')}`;\n return key;\n}\nexport function useShapeUniforms(rank) {\n // TODO: Remove the limitaion of rank <= 4.\n return env().getBool('WEBGL_USE_SHAPES_UNIFORMS') && rank <= 4;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3BncHVfbWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvZ3BncHVfbWF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBc0IsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbEYsT0FBTyxLQUFLLGVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxjQUFjLENBQUM7QUE0RGxELE1BQU0sVUFBVSxjQUFjLENBQzFCLEtBQW1CLEVBQUUsT0FBcUIsRUFBRSxNQUFvQixFQUNoRSxNQUFrQjtJQUNwQixNQUFNLFVBQVUsR0FBZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0RCxNQUFNLFNBQVMsR0FBYztZQUMzQixZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDekIsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRO1lBQ3pELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVE7WUFDMUQsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztRQUNGLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSTtZQUNwRCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLFNBQVMsQ0FBQyxVQUFVLEdB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Q0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUM5RCxTQUFTLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztTQUNwRDtJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNyQyxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUNuQyxzRUFBc0U7SUFDdEUsR0FBRyxJQUFJLEdBQUcsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLFdBQVc7UUFDdEMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztJQUMxQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBWTtJQUMzQywyQ0FBMkM7SUFDM0MsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBlbnYsIFRlbnNvciwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtHUEdQVUNvbnRleHQsIEdQR1BVQ29udGV4dFByb2dyYW19IGZyb20gJy4vZ3BncHVfY29udGV4dCc7XG5pbXBvcnQgKiBhcyBzaGFkZXJfY29tcGlsZXIgZnJvbSAnLi9zaGFkZXJfY29tcGlsZXInO1xuaW1wb3J0IHtJbnB1dEluZm8sIFNoYXBlSW5mbywgVW5pZm9ybVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcbmltcG9ydCB7UGFja2luZ1NjaGVtZSwgVGV4dHVyZURhdGEsIFRleHR1cmVVc2FnZX0gZnJvbSAnLi90ZXhfdXRpbCc7XG5pbXBvcnQge2NyZWF0ZUZyYWdtZW50U2hhZGVyfSBmcm9tICcuL3dlYmdsX3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXM6IHN0cmluZ1tdO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIGVuYWJsZVNoYXBlVW5pZm9ybXM/OiBib29sZWFuO1xuICAvKiogSWYgdHJ1ZSwgdGhpcyBwcm9ncmFtIGV4cGVjdHMgcGFja2VkIGlucHV0IHRleHR1cmVzLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgcGFja2VkSW5wdXRzPzogYm9vbGVhbjtcbiAgLyoqIElmIHRydWUsIHRoaXMgcHJvZ3JhbSBwcm9kdWNlcyBhIHBhY2tlZCB0ZXh0dXJlLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgcGFja2VkT3V0cHV0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFmZmVjdHMgd2hhdCB0eXBlIG9mIHRleHR1cmUgd2UgYWxsb2NhdGUgZm9yIHRoZSBvdXRwdXQuIERlZmF1bHRzIHRvXG4gICAqIGBUZXh0dXJlVXNhZ2UuUkVOREVSYC5cbiAgICovXG4gIG91dFRleFVzYWdlPzogVGV4dHVyZVVzYWdlO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc2NoZW1lIHRvIHVzZSB3aGVuIHBhY2tpbmcgdGV4ZWxzIGZvciB0aGUgb3V0cHV0IHZhbHVlcy5cbiAgICogU2VlIGBQYWNraW5nU2NoZW1lYCBmb3IgZGV0YWlscy4gRGVmYXVsdHMgdG8gYFBhY2tpbmdTY2hlbWUuU0hBUkVEX0JBVENIYC5cbiAgICovXG4gIG91dFBhY2tpbmdTY2hlbWU/OiBQYWNraW5nU2NoZW1lO1xuICBjdXN0b21Vbmlmb3Jtcz86XG4gICAgICBBcnJheTx7bmFtZTogc3RyaW5nOyBhcnJheUluZGV4PzogbnVtYmVyOyB0eXBlOiBVbmlmb3JtVHlwZTt9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHUEdQVUJpbmFyeSBleHRlbmRzIEdQR1BVQmluYXJ5TG9jYXRpb25zIHtcbiAgd2ViR0xQcm9ncmFtOiBHUEdQVUNvbnRleHRQcm9ncmFtO1xuICBwcm9ncmFtOiBHUEdQVVByb2dyYW07XG4gIHNvdXJjZTogc3RyaW5nO1xuICBmcmFnbWVudFNoYWRlcjogV2ViR0xTaGFkZXI7XG4gIGluU2hhcGVJbmZvczogU2hhcGVJbmZvW107XG4gIG91dFNoYXBlSW5mbzogU2hhcGVJbmZvO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdQR1BVQmluYXJ5TG9jYXRpb25zIHtcbiAgY3VzdG9tVW5pZm9ybUxvY2F0aW9ucz86IFdlYkdMVW5pZm9ybUxvY2F0aW9uW107XG4gIGluZkxvYzogV2ViR0xVbmlmb3JtTG9jYXRpb247XG4gIG5hbkxvYzogV2ViR0xVbmlmb3JtTG9jYXRpb247XG4gIG91dFNoYXBlTG9jYXRpb24/OiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjtcbiAgb3V0U2hhcGVTdHJpZGVzTG9jYXRpb24/OiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjtcbiAgb3V0VGV4U2hhcGVMb2NhdGlvbj86IFdlYkdMVW5pZm9ybUxvY2F0aW9uO1xuICB2YXJpYWJsZXNMb2NhdGlvbnM/OiBHUEdQVVZhcmlhYmxlTG9jYXRpb25zW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR1BHUFVWYXJpYWJsZUxvY2F0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdW5pZm9ybTogV2ViR0xVbmlmb3JtTG9jYXRpb247XG4gIG9mZnNldDogV2ViR0xVbmlmb3JtTG9jYXRpb247XG4gIHNoYXBlPzogV2ViR0xVbmlmb3JtTG9jYXRpb247XG4gIHRleFNoYXBlPzogV2ViR0xVbmlmb3JtTG9jYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRGF0YSB7XG4gIHNoYXBlOiBudW1iZXJbXTtcbiAgdGV4RGF0YTogVGV4dHVyZURhdGE7XG4gIGlzVW5pZm9ybTogYm9vbGVhbjtcbiAgLy8gQXZhaWxhYmxlIHdoZW4gd2UgZGVjaWRlIHRvIHVwbG9hZCBhcyB1bmlmb3JtIGluc3RlYWQgb2YgdGV4dHVyZS5cbiAgdW5pZm9ybVZhbHVlcz86IFR5cGVkQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlUHJvZ3JhbTxUIGV4dGVuZHMgVGVuc29yLCBLIGV4dGVuZHMgVGVuc29yPihcbiAgICBncGdwdTogR1BHUFVDb250ZXh0LCBwcm9ncmFtOiBHUEdQVVByb2dyYW0sIGlucHV0czogVGVuc29yRGF0YVtdLFxuICAgIG91dHB1dDogVGVuc29yRGF0YSk6IEdQR1BVQmluYXJ5IHtcbiAgY29uc3QgaW5wdXRJbmZvczogSW5wdXRJbmZvW10gPSBpbnB1dHMubWFwKChpbnB1dCwgaSkgPT4ge1xuICAgIGNvbnN0IHNoYXBlSW5mbzogU2hhcGVJbmZvID0ge1xuICAgICAgbG9naWNhbFNoYXBlOiBpbnB1dC5zaGFwZSxcbiAgICAgIHRleFNoYXBlOiBpbnB1dC5pc1VuaWZvcm0gPyBudWxsIDogaW5wdXQudGV4RGF0YS50ZXhTaGFwZSxcbiAgICAgIGlzVW5pZm9ybTogaW5wdXQuaXNVbmlmb3JtLFxuICAgICAgaXNQYWNrZWQ6IGlucHV0LmlzVW5pZm9ybSA/IGZhbHNlIDogaW5wdXQudGV4RGF0YS5pc1BhY2tlZCxcbiAgICAgIGZsYXRPZmZzZXQ6IG51bGxcbiAgICB9O1xuICAgIGlmIChpbnB1dC50ZXhEYXRhICE9IG51bGwgJiYgaW5wdXQudGV4RGF0YS5zbGljZSAhPSBudWxsICYmXG4gICAgICAgIGlucHV0LnRleERhdGEuc2xpY2UuZmxhdE9mZnNldCA+IDApIHtcbiAgICAgIHNoYXBlSW5mby5mbGF0T2Zmc2V0ID0gaW5wdXQudGV4RGF0YS5zbGljZS5mbGF0T2Zmc2V0O1xuICAgIH1cbiAgICByZXR1cm4ge25hbWU6IHByb2dyYW0udmFyaWFibGVOYW1lc1tpXSwgc2hhcGVJbmZvfTtcbiAgfSk7XG4gIGNvbnN0IGluU2hhcGVJbmZvcyA9IGlucHV0SW5mb3MubWFwKHggPT4geC5zaGFwZUluZm8pO1xuICBjb25zdCBvdXRTaGFwZUluZm86IFNoYXBlSW5mbyA9IHtcbiAgICBsb2dpY2FsU2hhcGU6IG91dHB1dC5zaGFwZSxcbiAgICB0ZXhTaGFwZTogb3V0cHV0LnRleERhdGEudGV4U2hhcGUsXG4gICAgaXNVbmlmb3JtOiBmYWxzZSxcbiAgICBpc1BhY2tlZDogb3V0cHV0LnRleERhdGEuaXNQYWNrZWQsXG4gICAgZmxhdE9mZnNldDogbnVsbFxuICB9O1xuICBjb25zdCBzb3VyY2UgPSBzaGFkZXJfY29tcGlsZXIubWFrZVNoYWRlcihpbnB1dEluZm9zLCBvdXRTaGFwZUluZm8sIHByb2dyYW0pO1xuICBjb25zdCBmcmFnbWVudFNoYWRlciA9IGNyZWF0ZUZyYWdtZW50U2hhZGVyKGdwZ3B1LmdsLCBzb3VyY2UpO1xuICBjb25zdCB3ZWJHTFByb2dyYW0gPSBncGdwdS5jcmVhdGVQcm9ncmFtKGZyYWdtZW50U2hhZGVyKTtcblxuICBpZiAoIWVudigpLmdldCgnRU5HSU5FX0NPTVBJTEVfT05MWScpKSB7XG4gICAgZ3BncHUuYnVpbGRWYW8od2ViR0xQcm9ncmFtKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvZ3JhbSxcbiAgICAgIGZyYWdtZW50U2hhZGVyLFxuICAgICAgc291cmNlLFxuICAgICAgd2ViR0xQcm9ncmFtLFxuICAgICAgaW5TaGFwZUluZm9zLFxuICAgICAgb3V0U2hhcGVJbmZvLFxuICAgICAgLi4uZ2V0VW5pZm9ybUxvY2F0aW9ucyhncGdwdSwgcHJvZ3JhbSwgd2ViR0xQcm9ncmFtKVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2dyYW0sXG4gICAgICBmcmFnbWVudFNoYWRlcixcbiAgICAgIHNvdXJjZSxcbiAgICAgIHdlYkdMUHJvZ3JhbSxcbiAgICAgIGluU2hhcGVJbmZvcyxcbiAgICAgIG91dFNoYXBlSW5mbyxcbiAgICAgIHZhcmlhYmxlc0xvY2F0aW9uczogbnVsbCxcbiAgICAgIGN1c3RvbVVuaWZvcm1Mb2NhdGlvbnM6IG51bGwsXG4gICAgICBpbmZMb2M6IG51bGwsXG4gICAgICBuYW5Mb2M6IG51bGwsXG4gICAgICBvdXRTaGFwZUxvY2F0aW9uOiBudWxsLFxuICAgICAgb3V0U2hhcGVTdHJpZGVzTG9jYXRpb246IG51bGwsXG4gICAgICBvdXRUZXhTaGFwZUxvY2F0aW9uOiBudWxsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pZm9ybUxvY2F0aW9ucyhcbiAgICBncGdwdTogR1BHUFVDb250ZXh0LCBwcm9ncmFtOiBHUEdQVVByb2dyYW0sXG4gICAgd2ViR0xQcm9ncmFtOiBXZWJHTFByb2dyYW0pOiBHUEdQVUJpbmFyeUxvY2F0aW9ucyB7XG4gIGNvbnN0IHZhcmlhYmxlc0xvY2F0aW9uczogR1BHUFVWYXJpYWJsZUxvY2F0aW9uc1tdID0gW107XG4gIGNvbnN0IGN1c3RvbVVuaWZvcm1Mb2NhdGlvbnM6IFdlYkdMVW5pZm9ybUxvY2F0aW9uW10gPSBbXTtcbiAgbGV0IG91dFNoYXBlTG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uO1xuICBsZXQgb3V0VGV4U2hhcGVMb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb247XG4gIGxldCBvdXRTaGFwZVN0cmlkZXNMb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb247XG4gIGxldCBpbmZMb2M6IFdlYkdMVW5pZm9ybUxvY2F0aW9uID0gbnVsbDtcbiAgbGV0IG5hbkxvYzogV2ViR0xVbmlmb3JtTG9jYXRpb24gPSBudWxsO1xuXG4gIC8vIEFkZCBzcGVjaWFsIHVuaWZvcm1zIChOQU4sIElORklOSVRZKVxuICBuYW5Mb2MgPSBncGdwdS5nZXRVbmlmb3JtTG9jYXRpb24od2ViR0xQcm9ncmFtLCAnTkFOJywgZmFsc2UpO1xuICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykgPT09IDEpIHtcbiAgICBpbmZMb2MgPSBncGdwdS5nZXRVbmlmb3JtTG9jYXRpb24od2ViR0xQcm9ncmFtLCAnSU5GSU5JVFknLCBmYWxzZSk7XG4gIH1cblxuICAvLyBBZGQgdXNlci1kZWZpbmVkIHVuaWZvcm1zXG4gIGNvbnN0IHNob3VsZFRocm93ID0gZmFsc2U7XG4gIGZvciAoY29uc3QgdmFyTmFtZSBvZiBwcm9ncmFtLnZhcmlhYmxlTmFtZXMpIHtcbiAgICBjb25zdCB2YXJMb2NzOiBHUEdQVVZhcmlhYmxlTG9jYXRpb25zID0ge1xuICAgICAgbmFtZTogdmFyTmFtZSxcbiAgICAgIHVuaWZvcm06IGdwZ3B1LmdldFVuaWZvcm1Mb2NhdGlvbih3ZWJHTFByb2dyYW0sIHZhck5hbWUsIHNob3VsZFRocm93KSxcbiAgICAgIG9mZnNldDogZ3BncHUuZ2V0VW5pZm9ybUxvY2F0aW9uKFxuICAgICAgICAgIHdlYkdMUHJvZ3JhbSwgYG9mZnNldCR7dmFyTmFtZX1gLCBzaG91bGRUaHJvdyksXG4gICAgfTtcbiAgICBpZiAocHJvZ3JhbS5lbmFibGVTaGFwZVVuaWZvcm1zKSB7XG4gICAgICB2YXJMb2NzLnNoYXBlID0gZ3BncHUuZ2V0VW5pZm9ybUxvY2F0aW9uKFxuICAgICAgICAgIHdlYkdMUHJvZ3JhbSwgYCR7dmFyTmFtZX1TaGFwZWAsIHNob3VsZFRocm93KTtcbiAgICAgIHZhckxvY3MudGV4U2hhcGUgPSBncGdwdS5nZXRVbmlmb3JtTG9jYXRpb24oXG4gICAgICAgICAgd2ViR0xQcm9ncmFtLCBgJHt2YXJOYW1lfVRleFNoYXBlYCwgc2hvdWxkVGhyb3cpO1xuICAgIH1cblxuICAgIHZhcmlhYmxlc0xvY2F0aW9ucy5wdXNoKHZhckxvY3MpO1xuICB9XG5cbiAgaWYgKHByb2dyYW0uZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgIG91dFNoYXBlTG9jYXRpb24gPVxuICAgICAgICBncGdwdS5nZXRVbmlmb3JtTG9jYXRpb24od2ViR0xQcm9ncmFtLCAnb3V0U2hhcGUnLCBzaG91bGRUaHJvdyk7XG4gICAgb3V0U2hhcGVTdHJpZGVzTG9jYXRpb24gPVxuICAgICAgICBncGdwdS5nZXRVbmlmb3JtTG9jYXRpb24od2ViR0xQcm9ncmFtLCAnb3V0U2hhcGVTdHJpZGVzJywgc2hvdWxkVGhyb3cpO1xuICAgIG91dFRleFNoYXBlTG9jYXRpb24gPVxuICAgICAgICBncGdwdS5nZXRVbmlmb3JtTG9jYXRpb24od2ViR0xQcm9ncmFtLCAnb3V0VGV4U2hhcGUnLCBzaG91bGRUaHJvdyk7XG4gIH1cblxuICBpZiAocHJvZ3JhbS5jdXN0b21Vbmlmb3Jtcykge1xuICAgIGZvciAoY29uc3QgZCBvZiBwcm9ncmFtLmN1c3RvbVVuaWZvcm1zKSB7XG4gICAgICBjdXN0b21Vbmlmb3JtTG9jYXRpb25zLnB1c2goXG4gICAgICAgICAgZ3BncHUuZ2V0VW5pZm9ybUxvY2F0aW9uKHdlYkdMUHJvZ3JhbSwgZC5uYW1lLCBzaG91bGRUaHJvdykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFyaWFibGVzTG9jYXRpb25zLFxuICAgIGN1c3RvbVVuaWZvcm1Mb2NhdGlvbnMsXG4gICAgaW5mTG9jLFxuICAgIG5hbkxvYyxcbiAgICBvdXRTaGFwZUxvY2F0aW9uLFxuICAgIG91dFNoYXBlU3RyaWRlc0xvY2F0aW9uLFxuICAgIG91dFRleFNoYXBlTG9jYXRpb25cbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVCaW5hcnlBbmRQcm9ncmFtKFxuICAgIHNoYXBlSW5mb3M6IFNoYXBlSW5mb1tdLCBpbnB1dHM6IFRlbnNvckRhdGFbXSkge1xuICBpZiAoc2hhcGVJbmZvcy5sZW5ndGggIT09IGlucHV0cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEJpbmFyeSB3YXMgY29tcGlsZWQgd2l0aCAke3NoYXBlSW5mb3MubGVuZ3RofSBpbnB1dHMsIGJ1dCBgICtcbiAgICAgICAgYHdhcyBleGVjdXRlZCB3aXRoICR7aW5wdXRzLmxlbmd0aH0gaW5wdXRzYCk7XG4gIH1cblxuICBzaGFwZUluZm9zLmZvckVhY2goKHMsIGkpID0+IHtcbiAgICBjb25zdCBzaGFwZUEgPSBzLmxvZ2ljYWxTaGFwZTtcbiAgICBjb25zdCBpbnB1dCA9IGlucHV0c1tpXTtcbiAgICBjb25zdCBzaGFwZUIgPSBpbnB1dC5zaGFwZTtcblxuICAgIGlmICghdXRpbC5hcnJheXNFcXVhbChzaGFwZUEsIHNoYXBlQikpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIGBCaW5hcnkgd2FzIGNvbXBpbGVkIHdpdGggZGlmZmVyZW50IHNoYXBlcyB0aGFuIGAgK1xuICAgICAgICAgIGB0aGUgY3VycmVudCBhcmdzLiBTaGFwZXMgJHtzaGFwZUF9IGFuZCAke3NoYXBlQn0gbXVzdCBtYXRjaGApO1xuICAgIH1cbiAgICAvLyBUaGUgaW5wdXQgaXMgdXBsb2FkZWQgYXMgdW5pZm9ybS5cbiAgICBpZiAocy5pc1VuaWZvcm0gJiYgaW5wdXQuaXNVbmlmb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGV4U2hhcGVBID0gcy50ZXhTaGFwZTtcbiAgICBjb25zdCB0ZXhTaGFwZUIgPSBpbnB1dC5pc1VuaWZvcm0gPyBudWxsIDogaW5wdXQudGV4RGF0YS50ZXhTaGFwZTtcbiAgICBpZiAoIXV0aWwuYXJyYXlzRXF1YWwodGV4U2hhcGVBLCB0ZXhTaGFwZUIpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBgQmluYXJ5IHdhcyBjb21waWxlZCB3aXRoIGRpZmZlcmVudCB0ZXh0dXJlIHNoYXBlcyB0aGFuIHRoZWAgK1xuICAgICAgICAgIGAgY3VycmVudCBhcmdzLiBTaGFwZSAke3RleFNoYXBlQX0gYW5kICR7dGV4U2hhcGVCfSBtdXN0IG1hdGNoYCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blByb2dyYW08VCBleHRlbmRzIFRlbnNvciwgSyBleHRlbmRzIFRlbnNvcj4oXG4gICAgZ3BncHU6IEdQR1BVQ29udGV4dCwgYmluYXJ5OiBHUEdQVUJpbmFyeSwgaW5wdXRzOiBUZW5zb3JEYXRhW10sXG4gICAgb3V0cHV0OiBUZW5zb3JEYXRhLCBjdXN0b21Vbmlmb3JtVmFsdWVzPzogbnVtYmVyW11bXSk6IHZvaWQge1xuICBpZiAoIWJpbmFyeS5wcm9ncmFtLmVuYWJsZVNoYXBlVW5pZm9ybXMpIHtcbiAgICB2YWxpZGF0ZUJpbmFyeUFuZFByb2dyYW0oYmluYXJ5LmluU2hhcGVJbmZvcywgaW5wdXRzKTtcbiAgICB2YWxpZGF0ZUJpbmFyeUFuZFByb2dyYW0oW2JpbmFyeS5vdXRTaGFwZUluZm9dLCBbb3V0cHV0XSk7XG4gIH1cblxuICBjb25zdCBvdXRUZXggPSBvdXRwdXQudGV4RGF0YS50ZXh0dXJlO1xuICBjb25zdCBvdXRUZXhTaGFwZSA9IG91dHB1dC50ZXhEYXRhLnRleFNoYXBlO1xuICBpZiAob3V0cHV0LnRleERhdGEuaXNQYWNrZWQpIHtcbiAgICBncGdwdS5zZXRPdXRwdXRQYWNrZWRNYXRyaXhUZXh0dXJlKFxuICAgICAgICBvdXRUZXgudGV4dHVyZSwgb3V0VGV4U2hhcGVbMF0sIG91dFRleFNoYXBlWzFdKTtcbiAgfSBlbHNlIHtcbiAgICBncGdwdS5zZXRPdXRwdXRNYXRyaXhUZXh0dXJlKFxuICAgICAgICBvdXRUZXgudGV4dHVyZSwgb3V0VGV4U2hhcGVbMF0sIG91dFRleFNoYXBlWzFdKTtcbiAgfVxuICBncGdwdS5zZXRQcm9ncmFtKGJpbmFyeS53ZWJHTFByb2dyYW0pO1xuICBncGdwdS5iaW5kVmVydGV4QXJyYXkoYmluYXJ5LndlYkdMUHJvZ3JhbS52YW8pO1xuXG4gIC8vIFNldCBzcGVjaWFsIHVuaWZvcm1zIChOQU4sIElORklOSVRZKVxuICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykgPT09IDEpIHtcbiAgICBpZiAoYmluYXJ5LmluZkxvYyAhPT0gbnVsbCkge1xuICAgICAgZ3BncHUuZ2wudW5pZm9ybTFmKGJpbmFyeS5pbmZMb2MsIEluZmluaXR5KTtcbiAgICB9XG4gIH1cbiAgaWYgKGJpbmFyeS5uYW5Mb2MgIT09IG51bGwpIHtcbiAgICBncGdwdS5nbC51bmlmb3JtMWYoYmluYXJ5Lm5hbkxvYywgTmFOKTtcbiAgfVxuXG4gIC8vIFNldCB1c2VyLWRlZmluZWQgaW5wdXRzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgaW5wdXQgPSBpbnB1dHNbaV07XG4gICAgY29uc3Qge1xuICAgICAgdW5pZm9ybTogdmFyTG9jLFxuICAgICAgb2Zmc2V0OiB2YXJPZmZzZXRMb2MsXG4gICAgICBzaGFwZTogdmFyU2hhcGVMb2MsXG4gICAgICB0ZXhTaGFwZTogdmFyVGV4U2hhcGVMb2MsXG4gICAgfSA9IGJpbmFyeS52YXJpYWJsZXNMb2NhdGlvbnNbaV07XG5cbiAgICBpZiAodmFyU2hhcGVMb2MpIHtcbiAgICAgIGNvbnN0IHt1bmlmb3JtU2hhcGV9ID0gc2hhZGVyX2NvbXBpbGVyLmdldFVuaWZvcm1JbmZvRnJvbVNoYXBlKFxuICAgICAgICAgIGJpbmFyeS5wcm9ncmFtLnBhY2tlZElucHV0cywgaW5wdXQuc2hhcGUsIGlucHV0LnRleERhdGEudGV4U2hhcGUpO1xuICAgICAgc3dpdGNoICh1bmlmb3JtU2hhcGUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBncGdwdS5nbC51bmlmb3JtMWl2KHZhclNoYXBlTG9jLCBuZXcgSW50MzJBcnJheSh1bmlmb3JtU2hhcGUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGdwZ3B1LmdsLnVuaWZvcm0yaXYodmFyU2hhcGVMb2MsIG5ldyBJbnQzMkFycmF5KHVuaWZvcm1TaGFwZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTNpdih2YXJTaGFwZUxvYywgbmV3IEludDMyQXJyYXkodW5pZm9ybVNoYXBlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBncGdwdS5nbC51bmlmb3JtNGl2KHZhclNoYXBlTG9jLCBuZXcgSW50MzJBcnJheSh1bmlmb3JtU2hhcGUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFyVGV4U2hhcGVMb2MpIHtcbiAgICAgIGdwZ3B1LmdsLnVuaWZvcm0yaShcbiAgICAgICAgICB2YXJUZXhTaGFwZUxvYywgaW5wdXQudGV4RGF0YS50ZXhTaGFwZVswXSwgaW5wdXQudGV4RGF0YS50ZXhTaGFwZVsxXSk7XG4gICAgfVxuXG4gICAgaWYgKHZhckxvYyA9PSBudWxsKSB7XG4gICAgICAvLyBUaGUgY29tcGlsZXIgaW5mZXJyZWQgdGhhdCB0aGlzIHZhcmlhYmxlIGlzIG5vdCB1c2VkIGluIHRoaXMgc2hhZGVyLlxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0LmlzVW5pZm9ybSkge1xuICAgICAgLy8gVXBsb2FkIHRoZSB2YWx1ZXMgb2YgdGhlIHRlbnNvciBhcyB1bmlmb3JtLlxuICAgICAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZSkgPCAyKSB7XG4gICAgICAgIGdwZ3B1LmdsLnVuaWZvcm0xZih2YXJMb2MsIGlucHV0LnVuaWZvcm1WYWx1ZXNbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHZhbHMgPSBpbnB1dC51bmlmb3JtVmFsdWVzO1xuICAgICAgICBpZiAoISh2YWxzIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkge1xuICAgICAgICAgIHZhbHMgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHMpO1xuICAgICAgICB9XG4gICAgICAgIGdwZ3B1LmdsLnVuaWZvcm0xZnYodmFyTG9jLCB2YWxzKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpbnB1dCB3YXMgc2xpY2VkLCB1cGxvYWQgdGhlIGZsYXQgb2Zmc2V0IGluZGV4LlxuICAgIGlmIChpbnB1dC50ZXhEYXRhLnNsaWNlICE9IG51bGwgJiYgdmFyT2Zmc2V0TG9jICE9IG51bGwpIHtcbiAgICAgIGdwZ3B1LmdsLnVuaWZvcm0xaSh2YXJPZmZzZXRMb2MsIGlucHV0LnRleERhdGEuc2xpY2UuZmxhdE9mZnNldCk7XG4gICAgfVxuXG4gICAgZ3BncHUuc2V0SW5wdXRNYXRyaXhUZXh0dXJlKGlucHV0LnRleERhdGEudGV4dHVyZS50ZXh0dXJlLCB2YXJMb2MsIGkpO1xuICB9XG5cbiAgY29uc3Qgb3V0U2hhcGVMb2MgPSBiaW5hcnkub3V0U2hhcGVMb2NhdGlvbjtcbiAgaWYgKG91dFNoYXBlTG9jKSB7XG4gICAgc3dpdGNoIChvdXRwdXQuc2hhcGUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGdwZ3B1LmdsLnVuaWZvcm0xaXYob3V0U2hhcGVMb2MsIG5ldyBJbnQzMkFycmF5KG91dHB1dC5zaGFwZSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTJpdihvdXRTaGFwZUxvYywgbmV3IEludDMyQXJyYXkob3V0cHV0LnNoYXBlKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBncGdwdS5nbC51bmlmb3JtM2l2KG91dFNoYXBlTG9jLCBuZXcgSW50MzJBcnJheShvdXRwdXQuc2hhcGUpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIGdwZ3B1LmdsLnVuaWZvcm00aXYob3V0U2hhcGVMb2MsIG5ldyBJbnQzMkFycmF5KG91dHB1dC5zaGFwZSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmluYXJ5Lm91dFNoYXBlU3RyaWRlc0xvY2F0aW9uKSB7XG4gICAgY29uc3Qgc3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMob3V0cHV0LnNoYXBlKTtcbiAgICBzd2l0Y2ggKG91dHB1dC5zaGFwZS5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTFpdihcbiAgICAgICAgICAgIGJpbmFyeS5vdXRTaGFwZVN0cmlkZXNMb2NhdGlvbiwgbmV3IEludDMyQXJyYXkoc3RyaWRlcykpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTJpdihcbiAgICAgICAgICAgIGJpbmFyeS5vdXRTaGFwZVN0cmlkZXNMb2NhdGlvbiwgbmV3IEludDMyQXJyYXkoc3RyaWRlcykpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDpcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTNpdihcbiAgICAgICAgICAgIGJpbmFyeS5vdXRTaGFwZVN0cmlkZXNMb2NhdGlvbiwgbmV3IEludDMyQXJyYXkoc3RyaWRlcykpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmluYXJ5Lm91dFRleFNoYXBlTG9jYXRpb24pIHtcbiAgICBncGdwdS5nbC51bmlmb3JtMmkoXG4gICAgICAgIGJpbmFyeS5vdXRUZXhTaGFwZUxvY2F0aW9uLCBvdXRwdXQudGV4RGF0YS50ZXhTaGFwZVswXSxcbiAgICAgICAgb3V0cHV0LnRleERhdGEudGV4U2hhcGVbMV0pO1xuICB9XG5cbiAgaWYgKGJpbmFyeS5wcm9ncmFtLmN1c3RvbVVuaWZvcm1zICYmIGN1c3RvbVVuaWZvcm1WYWx1ZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbmFyeS5wcm9ncmFtLmN1c3RvbVVuaWZvcm1zLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBkID0gYmluYXJ5LnByb2dyYW0uY3VzdG9tVW5pZm9ybXNbaV07XG4gICAgICBjb25zdCBjdXN0b21Mb2MgPSBiaW5hcnkuY3VzdG9tVW5pZm9ybUxvY2F0aW9uc1tpXTtcbiAgICAgIGNvbnN0IGN1c3RvbVZhbHVlID0gY3VzdG9tVW5pZm9ybVZhbHVlc1tpXTtcbiAgICAgIGlmIChkLnR5cGUgPT09ICdmbG9hdCcpIHtcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTFmdihjdXN0b21Mb2MsIGN1c3RvbVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZC50eXBlID09PSAndmVjMicpIHtcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTJmdihjdXN0b21Mb2MsIGN1c3RvbVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZC50eXBlID09PSAndmVjMycpIHtcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTNmdihjdXN0b21Mb2MsIGN1c3RvbVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZC50eXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTRmdihjdXN0b21Mb2MsIGN1c3RvbVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZC50eXBlID09PSAnaW50Jykge1xuICAgICAgICBncGdwdS5nbC51bmlmb3JtMWl2KGN1c3RvbUxvYywgY3VzdG9tVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChkLnR5cGUgPT09ICdpdmVjMicpIHtcbiAgICAgICAgZ3BncHUuZ2wudW5pZm9ybTJpdihjdXN0b21Mb2MsIGN1c3RvbVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZC50eXBlID09PSAnaXZlYzMnKSB7XG4gICAgICAgIGdwZ3B1LmdsLnVuaWZvcm0zaXYoY3VzdG9tTG9jLCBjdXN0b21WYWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGQudHlwZSA9PT0gJ2l2ZWM0Jykge1xuICAgICAgICBncGdwdS5nbC51bmlmb3JtNGl2KGN1c3RvbUxvYywgY3VzdG9tVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYHVuaWZvcm0gdHlwZSAke2QudHlwZX0gaXMgbm90IHN1cHBvcnRlZCB5ZXQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdwZ3B1LmV4ZWN1dGVQcm9ncmFtKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlU2hhZGVyS2V5KFxuICAgIHByb2dyYW06IEdQR1BVUHJvZ3JhbSwgaW5wdXRzOiBUZW5zb3JEYXRhW10sIG91dHB1dDogVGVuc29yRGF0YSk6IHN0cmluZyB7XG4gIGxldCBrZXlJbnB1dHMgPSAnJztcbiAgaW5wdXRzLmNvbmNhdChvdXRwdXQpLmZvckVhY2goeCA9PiB7XG4gICAgY29uc3QgaGFzT2Zmc2V0ID0geC50ZXhEYXRhICE9IG51bGwgJiYgeC50ZXhEYXRhLnNsaWNlICE9IG51bGwgJiZcbiAgICAgICAgeC50ZXhEYXRhLnNsaWNlLmZsYXRPZmZzZXQgPiAwO1xuICAgIC8vIFRPRE86IFJlbW92ZSB0aGUgY29uZGl0aW9uIG9mICF4LmlzVW5pZm9ybS5cbiAgICBpZiAocHJvZ3JhbS5lbmFibGVTaGFwZVVuaWZvcm1zICYmICF4LmlzVW5pZm9ybSkge1xuICAgICAgY29uc3QgeFRleFNoYXBlID0geC50ZXhEYXRhLnRleFNoYXBlO1xuICAgICAgY29uc3Qge3VzZVNxdWVlemVTaGFwZSwgdW5pZm9ybVNoYXBlLCBrZXB0RGltc30gPVxuICAgICAgICAgIHNoYWRlcl9jb21waWxlci5nZXRVbmlmb3JtSW5mb0Zyb21TaGFwZShcbiAgICAgICAgICAgICAgcHJvZ3JhbS5wYWNrZWRJbnB1dHMsIHguc2hhcGUsIHhUZXhTaGFwZSk7XG4gICAgICBsZXQgcmFuazEgPSAnJywgcmFuazIgPSAnJywgcmFuazM0ID0gJyc7XG4gICAgICBpZiAodW5pZm9ybVNoYXBlLmxlbmd0aCA9PT0gMSAmJiBwcm9ncmFtLnBhY2tlZElucHV0cykge1xuICAgICAgICBjb25zdCBwYWNrZWRUZXhTaGFwZSA9XG4gICAgICAgICAgICBbTWF0aC5jZWlsKHhUZXhTaGFwZVswXSAvIDIpLCBNYXRoLmNlaWwoeFRleFNoYXBlWzFdIC8gMildO1xuICAgICAgICByYW5rMSA9IGAke3BhY2tlZFRleFNoYXBlWzBdID4gMX1fJHtwYWNrZWRUZXhTaGFwZVsxXSA+IDF9YDtcbiAgICAgIH0gZWxzZSBpZiAodW5pZm9ybVNoYXBlLmxlbmd0aCA9PT0gMiAmJiAhcHJvZ3JhbS5wYWNrZWRJbnB1dHMpIHtcbiAgICAgICAgcmFuazIgPSBgJHt1bmlmb3JtU2hhcGVbMF0gPiAxfV8ke3VuaWZvcm1TaGFwZVsxXSA+IDF9YDtcbiAgICAgIH0gZWxzZSBpZiAodW5pZm9ybVNoYXBlLmxlbmd0aCA+IDIgJiYgIXByb2dyYW0ucGFja2VkSW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKHVuaWZvcm1TaGFwZSk7XG4gICAgICAgIHJhbmszNCA9IGAke3N0cmlkZXNbMF0gPT09IHhUZXhTaGFwZVsxXX1fJHtcbiAgICAgICAgICAgIHN0cmlkZXNbc3RyaWRlcy5sZW5ndGggLSAxXSA9PT0geFRleFNoYXBlWzFdfWA7XG4gICAgICB9XG4gICAgICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuICAgICAgY29uc3QgaXNMb2dpY2FsU2hhcFRleFNoYXBlRXF1YWwgPVxuICAgICAgICAgIHVuaWZvcm1TaGFwZS5sZW5ndGggPT09IDIgJiYgdXRpbC5hcnJheXNFcXVhbCh4LnNoYXBlLCB4VGV4U2hhcGUpO1xuICAgICAgY29uc3QgaXNTY2FsYXIgPSB1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZSkgPT09IDE7XG4gICAgICBjb25zdCBicm9hZGNhc3REaW1zID1cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0QnJvYWRjYXN0RGltcyh4LnNoYXBlLCBvdXRwdXQuc2hhcGUpO1xuICAgICAgY29uc3QgaXNJbk91dFRleFNoYXBlRXF1YWwgPSAhcHJvZ3JhbS5wYWNrZWRJbnB1dHMgJiZcbiAgICAgICAgICB4UmFuayA9PT0gb3V0cHV0LnNoYXBlLmxlbmd0aCAmJlxuICAgICAgICAgIHV0aWwuYXJyYXlzRXF1YWwoeFRleFNoYXBlLCBvdXRwdXQudGV4RGF0YS50ZXhTaGFwZSk7XG4gICAgICBjb25zdCBpc1RleFNoYXBlR3JlYXRlclRoYW5PbmUgPVxuICAgICAgICAgIHByb2dyYW0ucGFja2VkSW5wdXRzIHx8IHVuaWZvcm1TaGFwZS5sZW5ndGggPiAyID9cbiAgICAgICAgICAnJyA6XG4gICAgICAgICAgYCR7eFRleFNoYXBlWzBdID4gMX1fJHt4VGV4U2hhcGVbMV0gPiAxfWA7XG4gICAgICAvLyBUaGVzZSBrZXkgY29tcG9uZW50cyBhcmUgbmVlZGVkIGR1ZSB0byBzaGFkZXJfY29tcGlsZXIgaXMgZW1iZWRkaW5nXG4gICAgICAvLyB0aGVtIGluIHRoZSBzaGFkZXIuXG4gICAgICAvLyB8eFJhbmt8IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb29yZHMgbGVuZ3RoLiBTZWVcbiAgICAgIC8vIGdldFtQYWNrZWRdU2FtcGxlckF0T3V0cHV0Q29vcmRzLlxuICAgICAgLy8gfGlzSW5PdXRUZXhTaGFwZUVxdWFsfCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGdvaW5nIHRvIGFuXG4gICAgICAvLyBvcHRpbWl6YXRpb24gcGF0aCBpbiBnZXRTYW1wbGVyQXRPdXRwdXRDb29yZHMuXG4gICAgICAvLyB8dXNlU3F1ZWV6ZVNoYXBlfCBpcyBleHRyYWN0ZWQgZnJvbSBzcXVlZXplSW5wdXRJbmZvIG9mXG4gICAgICAvLyBnZXRTYW1wbGVyWzJ8M3w0XUQvZ2V0UGFja2VkU2FtcGxlcjNELlxuICAgICAgLy8gfGlzU2NhbGFyfCBpcyBleHRyYWN0ZWQgZnJvbSBpc0lucHV0U2NhbGFyL2lzT3V0cHV0U2NhbGFyIGluXG4gICAgICAvLyBnZXRQYWNrZWRTYW1wbGVyQXRPdXRwdXRDb29yZHMuXG4gICAgICAvLyB8YnJvYWRjYXN0RGltc3wgaXMgZXh0cmFjdGVkIGZyb20gZ2V0W1BhY2tlZF1TYW1wbGVyQXRPdXRwdXRDb29yZHMuXG4gICAgICAvLyB8aXNMb2dpY2FsU2hhcFRleFNoYXBlRXF1YWx8IGlzIHVzZWQgaW5cbiAgICAgIC8vIGdldE91dHB1dFtQYWNrZWRdMkRDb29yZHMvZ2V0W1BhY2tlZF1TYW1wbGVyMkQuXG4gICAgICAvLyB8cmFuazF8IGlzIHVzZWQgaW4gZ2V0T3V0cHV0UGFja2VkMURDb29yZHMuXG4gICAgICAvLyB8cmFuazJ8IGlzIHVzZWQgaW4gZ2V0T3V0cHV0MkRDb29yZHMuXG4gICAgICAvLyB8cmFuazM0fCBpcyB1c2VkIGluIGdldFNhbXBsZXIzRC9nZXRTYW1wbGVyNEQuXG4gICAgICAvLyB8aXNUZXhTaGFwZUdyZWF0ZXJUaGFuT25lfCBhcmUgdXNlZCBpblxuICAgICAgLy8gZ2V0U2FtcGxlcltTY2FsYXJ8MUR8MkRdL2dldE91dHB1dDFEQ29vcmRzLlxuICAgICAga2V5SW5wdXRzICs9IGAke3hSYW5rfV8ke2lzSW5PdXRUZXhTaGFwZUVxdWFsfV8ke1xuICAgICAgICAgIHVzZVNxdWVlemVTaGFwZSA/IGtlcHREaW1zIDogJyd9XyR7dW5pZm9ybVNoYXBlLmxlbmd0aH1fJHtpc1NjYWxhcn1fJHtcbiAgICAgICAgICBicm9hZGNhc3REaW1zfV8ke2lzTG9naWNhbFNoYXBUZXhTaGFwZUVxdWFsfV8ke3JhbmsxfV8ke3JhbmsyfV8ke1xuICAgICAgICAgIHJhbmszNH1fJHtpc1RleFNoYXBlR3JlYXRlclRoYW5PbmV9XyR7aGFzT2Zmc2V0fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRleFNoYXBlID0geC5pc1VuaWZvcm0gPyAndW5pZm9ybScgOiB4LnRleERhdGEudGV4U2hhcGU7XG4gICAgICBrZXlJbnB1dHMgKz0gYCR7eC5zaGFwZX1fJHt0ZXhTaGFwZX1fJHtoYXNPZmZzZXR9YDtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBrZXlVc2VyQ29kZSA9IHByb2dyYW0udXNlckNvZGU7XG4gIGxldCBrZXkgPSBwcm9ncmFtLmNvbnN0cnVjdG9yLm5hbWU7XG4gIC8vIEZhc3Qgc3RyaW5nIGNvbmNhdC4gU2VlIGh0dHBzOi8vanNwZXJmLmNvbS9zdHJpbmctY29uY2F0ZW5hdGlvbi8xNC5cbiAga2V5ICs9ICdfJyArIGtleUlucHV0cyArICdfJyArIGtleVVzZXJDb2RlICtcbiAgICAgIGAke2VudigpLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpfWA7XG4gIHJldHVybiBrZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTaGFwZVVuaWZvcm1zKHJhbms6IG51bWJlcikge1xuICAvLyBUT0RPOiBSZW1vdmUgdGhlIGxpbWl0YWlvbiBvZiByYW5rIDw9IDQuXG4gIHJldHVybiBlbnYoKS5nZXRCb29sKCdXRUJHTF9VU0VfU0hBUEVTX1VOSUZPUk1TJykgJiYgcmFuayA8PSA0O1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from './glsl_version';\nimport { useShapeUniforms } from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\nimport { PackingScheme } from './tex_util';\nexport class DecodeMatrixProgram {\n constructor(outputShape) {\n this.variableNames = ['A'];\n this.packedInputs = false;\n this.packedOutput = true;\n this.outPackingScheme = PackingScheme.DENSE;\n this.customUniforms = [{ name: 'texShape', type: 'ivec2' }];\n const glsl = getGlslDifferences();\n this.outputShape = outputShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n this.userCode = `\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms ?\n shader_util.getOutputLogicalCoordinatesFromFlatIndexByUniform(['r', 'c', 'd'], outputShape) :\n shader_util.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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlX21hdHJpeF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2RlY29kZV9tYXRyaXhfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEtBQUssV0FBVyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFekMsTUFBTSxPQUFPLG1CQUFtQjtJQVU5QixZQUFZLFdBQXFDO1FBVGpELGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUd0QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixxQkFBZ0IsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBRXZDLG1CQUFjLEdBQUcsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRzdELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLFFBQVEsR0FBRzs7VUFHWixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN0QixXQUFXLENBQUMsaURBQWlELENBQ3pELENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ25DLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FDMUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztVQWdCbkMsSUFBSSxDQUFDLE1BQU07O0tBRWhCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Z2V0R2xzbERpZmZlcmVuY2VzfSBmcm9tICcuL2dsc2xfdmVyc2lvbic7XG5pbXBvcnQge0dQR1BVUHJvZ3JhbSwgdXNlU2hhcGVVbmlmb3Jtc30gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCAqIGFzIHNoYWRlcl91dGlsIGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyX3V0aWwnO1xuaW1wb3J0IHtQYWNraW5nU2NoZW1lfSBmcm9tICcuL3RleF91dGlsJztcblxuZXhwb3J0IGNsYXNzIERlY29kZU1hdHJpeFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIG91dHB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHBhY2tlZElucHV0cyA9IGZhbHNlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuICBvdXRQYWNraW5nU2NoZW1lID0gUGFja2luZ1NjaGVtZS5ERU5TRTtcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcbiAgY3VzdG9tVW5pZm9ybXMgPSBbe25hbWU6ICd0ZXhTaGFwZScsIHR5cGU6ICdpdmVjMicgYXMgY29uc3QgfV07XG5cbiAgY29uc3RydWN0b3Iob3V0cHV0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgIGNvbnN0IGdsc2wgPSBnZXRHbHNsRGlmZmVyZW5jZXMoKTtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gb3V0cHV0U2hhcGU7XG4gICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID0gdXNlU2hhcGVVbmlmb3Jtcyh0aGlzLm91dHB1dFNoYXBlLmxlbmd0aCk7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgaXZlYzMgb3V0Q29vcmRzRnJvbUZsYXRJbmRleChpbnQgaW5kZXgpIHtcbiAgICAgICAgJHtcbiAgICAgICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID9cbiAgICAgICAgICAgIHNoYWRlcl91dGlsLmdldE91dHB1dExvZ2ljYWxDb29yZGluYXRlc0Zyb21GbGF0SW5kZXhCeVVuaWZvcm0oXG4gICAgICAgICAgICAgICAgWydyJywgJ2MnLCAnZCddLCBvdXRwdXRTaGFwZSkgOlxuICAgICAgICAgICAgc2hhZGVyX3V0aWwuZ2V0TG9naWNhbENvb3JkaW5hdGVzRnJvbUZsYXRJbmRleChcbiAgICAgICAgICAgICAgICBbJ3InLCAnYycsICdkJ10sIG91dHB1dFNoYXBlKX1cbiAgICAgICAgcmV0dXJuIGl2ZWMzKHIsIGMsIGQpO1xuICAgICAgfVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWMyIHJlc1RleFJDID0gaXZlYzIocmVzdWx0VVYueXggKiB2ZWMyKHRleFNoYXBlWzBdLCB0ZXhTaGFwZVsxXSkpO1xuICAgICAgICBpbnQgaW5kZXggPSA0ICogKHJlc1RleFJDLnggKiB0ZXhTaGFwZVsxXSArIHJlc1RleFJDLnkpO1xuXG4gICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLik7XG5cbiAgICAgICAgZm9yIChpbnQgaT0wOyBpPDQ7IGkrKykge1xuICAgICAgICAgIGludCBmbGF0SW5kZXggPSBpbmRleCArIGk7XG4gICAgICAgICAgaXZlYzMgcmMgPSBvdXRDb29yZHNGcm9tRmxhdEluZGV4KGZsYXRJbmRleCk7XG4gICAgICAgICAgcmVzdWx0W2ldID0gZ2V0QShyYy54LCByYy55LCByYy56KTtcbiAgICAgICAgfVxuXG4gICAgICAgICR7Z2xzbC5vdXRwdXR9ID0gcmVzdWx0O1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from './glsl_version';\nimport { useShapeUniforms } from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\nimport { PackingScheme } from './tex_util';\nexport class DecodeMatrixPackedProgram {\n constructor(outputShape) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outPackingScheme = PackingScheme.DENSE;\n this.customUniforms = [{ name: 'texShape', type: 'ivec2' }];\n const glsl = getGlslDifferences();\n this.outputShape = outputShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n this.userCode = `\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms ?\n shader_util.getOutputLogicalCoordinatesFromFlatIndexByUniform(['r', 'c', 'd'], outputShape) :\n shader_util.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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlX21hdHJpeF9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9kZWNvZGVfbWF0cml4X3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFlLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sS0FBSyxXQUFXLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUV6QyxNQUFNLE9BQU8seUJBQXlCO0lBVXBDLFlBQVksV0FBcUM7UUFUakQsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLHFCQUFnQixHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFFdkMsbUJBQWMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFHN0QsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUMsUUFBUSxHQUFHOztVQUdaLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3RCLFdBQVcsQ0FBQyxpREFBaUQsQ0FDekQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbkMsV0FBVyxDQUFDLGtDQUFrQyxDQUMxQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O1VBZ0JuQyxJQUFJLENBQUMsTUFBTTs7S0FFaEIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtnZXRHbHNsRGlmZmVyZW5jZXN9IGZyb20gJy4vZ2xzbF92ZXJzaW9uJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtLCB1c2VTaGFwZVVuaWZvcm1zfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0ICogYXMgc2hhZGVyX3V0aWwgZnJvbSAnLi9zaGFkZXJfY29tcGlsZXJfdXRpbCc7XG5pbXBvcnQge1BhY2tpbmdTY2hlbWV9IGZyb20gJy4vdGV4X3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgRGVjb2RlTWF0cml4UGFja2VkUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgcGFja2VkSW5wdXRzID0gdHJ1ZTtcbiAgcGFja2VkT3V0cHV0ID0gdHJ1ZTtcbiAgb3V0cHV0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgb3V0UGFja2luZ1NjaGVtZSA9IFBhY2tpbmdTY2hlbWUuREVOU0U7XG4gIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW47XG4gIGN1c3RvbVVuaWZvcm1zID0gW3tuYW1lOiAndGV4U2hhcGUnLCB0eXBlOiAnaXZlYzInIGFzIGNvbnN0IH1dO1xuXG4gIGNvbnN0cnVjdG9yKG91dHB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICBjb25zdCBnbHNsID0gZ2V0R2xzbERpZmZlcmVuY2VzKCk7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlO1xuICAgIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA9IHVzZVNoYXBlVW5pZm9ybXModGhpcy5vdXRwdXRTaGFwZS5sZW5ndGgpO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGl2ZWMzIG91dENvb3Jkc0Zyb21GbGF0SW5kZXgoaW50IGluZGV4KSB7XG4gICAgICAgICR7XG4gICAgICAgIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA/XG4gICAgICAgICAgICBzaGFkZXJfdXRpbC5nZXRPdXRwdXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4QnlVbmlmb3JtKFxuICAgICAgICAgICAgICAgIFsncicsICdjJywgJ2QnXSwgb3V0cHV0U2hhcGUpIDpcbiAgICAgICAgICAgIHNoYWRlcl91dGlsLmdldExvZ2ljYWxDb29yZGluYXRlc0Zyb21GbGF0SW5kZXgoXG4gICAgICAgICAgICAgICAgWydyJywgJ2MnLCAnZCddLCBvdXRwdXRTaGFwZSl9XG4gICAgICAgIHJldHVybiBpdmVjMyhyLCBjLCBkKTtcbiAgICAgIH1cblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjMiByZXNUZXhSQyA9IGl2ZWMyKHJlc3VsdFVWLnl4ICogdmVjMih0ZXhTaGFwZVswXSwgdGV4U2hhcGVbMV0pKTtcbiAgICAgICAgaW50IGluZGV4ID0gNCAqIChyZXNUZXhSQy54ICogdGV4U2hhcGVbMV0gKyByZXNUZXhSQy55KTtcblxuICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4pO1xuXG4gICAgICAgIGZvciAoaW50IGk9MDsgaTw0OyBpKyspIHtcbiAgICAgICAgICBpbnQgZmxhdEluZGV4ID0gaW5kZXggKyBpO1xuICAgICAgICAgIGl2ZWMzIHJjID0gb3V0Q29vcmRzRnJvbUZsYXRJbmRleChmbGF0SW5kZXgpO1xuICAgICAgICAgIHJlc3VsdFtpXSA9IGdldENoYW5uZWwoZ2V0QShyYy54LCByYy55LCByYy56KSwgdmVjMihyYy55LCByYy56KSk7XG4gICAgICAgIH1cblxuICAgICAgICAke2dsc2wub3V0cHV0fSA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from './glsl_version';\nimport { ENCODE_FLOAT_SNIPPET } from './shader_compiler_util';\nimport { TextureUsage } from './tex_util';\nexport class EncodeFloatProgram {\n constructor(outputShape) {\n this.variableNames = ['A'];\n this.outTexUsage = TextureUsage.DOWNLOAD;\n const glsl = getGlslDifferences();\n this.outputShape = outputShape;\n this.userCode = `\n ${ENCODE_FLOAT_SNIPPET}\n\n void main() {\n float x = getAAtOutCoords();\n ${glsl.output} = encode_float(x);\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlX2Zsb2F0X2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvZW5jb2RlX2Zsb2F0X2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXhDLE1BQU0sT0FBTyxrQkFBa0I7SUFNN0IsWUFBWSxXQUFxQjtRQUxqQyxrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFHdEIsZ0JBQVcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBR2xDLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRztRQUNaLG9CQUFvQjs7OztVQUlsQixJQUFJLENBQUMsTUFBTTs7S0FFaEIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtnZXRHbHNsRGlmZmVyZW5jZXN9IGZyb20gJy4vZ2xzbF92ZXJzaW9uJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtFTkNPREVfRkxPQVRfU05JUFBFVH0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXJfdXRpbCc7XG5pbXBvcnQge1RleHR1cmVVc2FnZX0gZnJvbSAnLi90ZXhfdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVGbG9hdFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgb3V0VGV4VXNhZ2UgPSBUZXh0dXJlVXNhZ2UuRE9XTkxPQUQ7XG5cbiAgY29uc3RydWN0b3Iob3V0cHV0U2hhcGU6IG51bWJlcltdKSB7XG4gICAgY29uc3QgZ2xzbCA9IGdldEdsc2xEaWZmZXJlbmNlcygpO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgJHtFTkNPREVfRkxPQVRfU05JUFBFVH1cblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBmbG9hdCB4ID0gZ2V0QUF0T3V0Q29vcmRzKCk7XG4gICAgICAgICR7Z2xzbC5vdXRwdXR9ID0gZW5jb2RlX2Zsb2F0KHgpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from './glsl_version';\nimport { ENCODE_FLOAT_SNIPPET } from './shader_compiler_util';\nimport { TextureUsage } from './tex_util';\nexport class EncodeFloatPackedProgram {\n constructor(outputShape) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = false;\n this.outTexUsage = TextureUsage.DOWNLOAD;\n const glsl = getGlslDifferences();\n this.outputShape = outputShape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlX2Zsb2F0X3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2VuY29kZV9mbG9hdF9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFeEMsTUFBTSxPQUFPLHdCQUF3QjtJQVFuQyxZQUFZLFdBQXFDO1FBUGpELGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUd0QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixnQkFBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFHbEMsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHO1FBQ1osb0JBQW9COzs7OztVQUtsQixJQUFJLENBQUMsTUFBTTs7S0FFaEIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtnZXRHbHNsRGlmZmVyZW5jZXN9IGZyb20gJy4vZ2xzbF92ZXJzaW9uJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtFTkNPREVfRkxPQVRfU05JUFBFVH0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXJfdXRpbCc7XG5pbXBvcnQge1RleHR1cmVVc2FnZX0gZnJvbSAnLi90ZXhfdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVGbG9hdFBhY2tlZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgcGFja2VkSW5wdXRzID0gdHJ1ZTtcbiAgcGFja2VkT3V0cHV0ID0gZmFsc2U7XG4gIG91dFRleFVzYWdlID0gVGV4dHVyZVVzYWdlLkRPV05MT0FEO1xuXG4gIGNvbnN0cnVjdG9yKG91dHB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICBjb25zdCBnbHNsID0gZ2V0R2xzbERpZmZlcmVuY2VzKCk7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlO1xuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAke0VOQ09ERV9GTE9BVF9TTklQUEVUfVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWMzIGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBmbG9hdCB4ID0gZ2V0Q2hhbm5lbChnZXRBQXRPdXRDb29yZHMoKSwgdmVjMihjb29yZHMueSwgY29vcmRzLnopKTtcbiAgICAgICAgJHtnbHNsLm91dHB1dH0gPSBlbmNvZGVfZmxvYXQoeCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from './glsl_version';\nimport { useShapeUniforms } from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\nconst CHANNEL_CHAR_TO_INDEX_MAP = {\n 'R': 0,\n 'G': 1,\n 'B': 2,\n 'A': 3\n};\nexport class EncodeMatrixProgram {\n constructor(outputShape, inputIsUnsignedByte = false, usedChannels = 'RGBA') {\n this.variableNames = ['A'];\n this.customUniforms = [{ name: 'texShape', type: 'ivec2' }];\n const glsl = getGlslDifferences();\n this.outputShape = outputShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n let output = `result`;\n if (inputIsUnsignedByte) {\n output = `floor(result * 255. + 0.5)`;\n }\n let mainLoop = '';\n for (let usedChannelIndex = 0; usedChannelIndex < usedChannels.length; usedChannelIndex++) {\n const curChannel = usedChannels[usedChannelIndex];\n mainLoop += `\n if(offset == ${usedChannelIndex}) {\n result = values[${CHANNEL_CHAR_TO_INDEX_MAP[curChannel]}];\n }`;\n }\n this.userCode = `\n ${this.enableShapeUniforms ? shader_util.getFlatIndexFrom3DOutput() :\n shader_util.getFlatIndexFrom3D(outputShape)}\n\n void main() {\n ivec3 coords = getOutputCoords();\n int flatIndex = getFlatIndex(coords);\n float result = 0.;\n int offset = imod(flatIndex, ${usedChannels.length});\n\n flatIndex = idiv(flatIndex, ${usedChannels.length}, 1.);\n\n int r = flatIndex / texShape[1];\n if (r < texShape[0]) {\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 ${mainLoop}\n }\n ${glsl.output} = vec4(${output}, 0., 0., 0.);\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlX21hdHJpeF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2VuY29kZV9tYXRyaXhfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEtBQUssV0FBVyxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE1BQU0seUJBQXlCLEdBQTJCO0lBQ3hELEdBQUcsRUFBRSxDQUFDO0lBQ04sR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztJQUNOLEdBQUcsRUFBRSxDQUFDO0NBQ1AsQ0FBQztBQUVGLE1BQU0sT0FBTyxtQkFBbUI7SUFPOUIsWUFDSSxXQUFxQyxFQUFFLG1CQUFtQixHQUFHLEtBQUssRUFDbEUsWUFBWSxHQUFHLE1BQU07UUFSekIsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSXRCLG1CQUFjLEdBQUcsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUUsQ0FBQyxDQUFDO1FBSzdELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckUsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsTUFBTSxHQUFHLDRCQUE0QixDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFDaEUsZ0JBQWdCLEVBQUUsRUFBRTtZQUN2QixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNsRCxRQUFRLElBQUk7eUJBQ08sZ0JBQWdCOzhCQUNYLHlCQUF5QixDQUFDLFVBQVUsQ0FBQztZQUN2RCxDQUFDO1NBQ1I7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO1FBRVosSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7Ozs7Ozt1Q0FNdkMsWUFBWSxDQUFDLE1BQU07O3NDQUVwQixZQUFZLENBQUMsTUFBTTs7Ozs7OzBCQU0vQixJQUFJLENBQUMsU0FBUztZQUM1QixRQUFROztVQUVWLElBQUksQ0FBQyxNQUFNLFdBQVcsTUFBTTs7S0FFakMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtnZXRHbHNsRGlmZmVyZW5jZXN9IGZyb20gJy4vZ2xzbF92ZXJzaW9uJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtLCB1c2VTaGFwZVVuaWZvcm1zfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0ICogYXMgc2hhZGVyX3V0aWwgZnJvbSAnLi9zaGFkZXJfY29tcGlsZXJfdXRpbCc7XG5cbmNvbnN0IENIQU5ORUxfQ0hBUl9UT19JTkRFWF9NQVA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICdSJzogMCxcbiAgJ0cnOiAxLFxuICAnQic6IDIsXG4gICdBJzogM1xufTtcblxuZXhwb3J0IGNsYXNzIEVuY29kZU1hdHJpeFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcbiAgY3VzdG9tVW5pZm9ybXMgPSBbe25hbWU6ICd0ZXhTaGFwZScsIHR5cGU6ICdpdmVjMicgYXMgY29uc3QgfV07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBvdXRwdXRTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBpbnB1dElzVW5zaWduZWRCeXRlID0gZmFsc2UsXG4gICAgICB1c2VkQ2hhbm5lbHMgPSAnUkdCQScpIHtcbiAgICBjb25zdCBnbHNsID0gZ2V0R2xzbERpZmZlcmVuY2VzKCk7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlO1xuICAgIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA9IHVzZVNoYXBlVW5pZm9ybXModGhpcy5vdXRwdXRTaGFwZS5sZW5ndGgpO1xuXG4gICAgbGV0IG91dHB1dCA9IGByZXN1bHRgO1xuICAgIGlmIChpbnB1dElzVW5zaWduZWRCeXRlKSB7XG4gICAgICBvdXRwdXQgPSBgZmxvb3IocmVzdWx0ICogMjU1LiArIDAuNSlgO1xuICAgIH1cblxuICAgIGxldCBtYWluTG9vcCA9ICcnO1xuICAgIGZvciAobGV0IHVzZWRDaGFubmVsSW5kZXggPSAwOyB1c2VkQ2hhbm5lbEluZGV4IDwgdXNlZENoYW5uZWxzLmxlbmd0aDtcbiAgICAgICAgIHVzZWRDaGFubmVsSW5kZXgrKykge1xuICAgICAgY29uc3QgY3VyQ2hhbm5lbCA9IHVzZWRDaGFubmVsc1t1c2VkQ2hhbm5lbEluZGV4XTtcbiAgICAgIG1haW5Mb29wICs9IGBcbiAgICAgICAgICBpZihvZmZzZXQgPT0gJHt1c2VkQ2hhbm5lbEluZGV4fSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWVzWyR7Q0hBTk5FTF9DSEFSX1RPX0lOREVYX01BUFtjdXJDaGFubmVsXX1dO1xuICAgICAgICAgIH1gO1xuICAgIH1cblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAke1xuICAgICAgICB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPyBzaGFkZXJfdXRpbC5nZXRGbGF0SW5kZXhGcm9tM0RPdXRwdXQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlcl91dGlsLmdldEZsYXRJbmRleEZyb20zRChvdXRwdXRTaGFwZSl9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzMgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBmbGF0SW5kZXggPSBnZXRGbGF0SW5kZXgoY29vcmRzKTtcbiAgICAgICAgZmxvYXQgcmVzdWx0ID0gMC47XG4gICAgICAgIGludCBvZmZzZXQgPSBpbW9kKGZsYXRJbmRleCwgJHt1c2VkQ2hhbm5lbHMubGVuZ3RofSk7XG5cbiAgICAgICAgZmxhdEluZGV4ID0gaWRpdihmbGF0SW5kZXgsICR7dXNlZENoYW5uZWxzLmxlbmd0aH0sIDEuKTtcblxuICAgICAgICBpbnQgciA9IGZsYXRJbmRleCAvIHRleFNoYXBlWzFdO1xuICAgICAgICBpZiAociA8IHRleFNoYXBlWzBdKSB7XG4gICAgICAgICAgaW50IGMgPSBpbW9kKGZsYXRJbmRleCwgdGV4U2hhcGVbMV0pO1xuICAgICAgICAgIHZlYzIgdXYgPSAodmVjMihjLCByKSArIGhhbGZDUikgLyB2ZWMyKHRleFNoYXBlWzFdLCB0ZXhTaGFwZVswXSk7XG4gICAgICAgICAgdmVjNCB2YWx1ZXMgPSAke2dsc2wudGV4dHVyZTJEfShBLCB1dik7XG4gICAgICAgICAgJHttYWluTG9vcH1cbiAgICAgICAgfVxuICAgICAgICAke2dsc2wub3V0cHV0fSA9IHZlYzQoJHtvdXRwdXR9LCAwLiwgMC4sIDAuKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from './glsl_version';\nimport { useShapeUniforms } from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\n/*\nThis is how the shader encodes a tensor with shape = [2, 3, 5]\n(indices are [batch, row, col]).\n\n000|001 002|003 004|xxx 020|021 022|023 024|xxx\n------- ------- ------- ------- ------- -------\n010|011 012|013 014|xxx xxx|xxx xxx|xxx xxx|xxx\n\n100|101 102|103 104|xxx 120|121 122|123 124|xxx\n------- ------- ------- ------- ------- -------\n110|111 112|113 114|xxx xxx|xxx xxx|xxx xxx|xxx\n\nSingle texels contain only values from the same batch, and from adjacent rows\nand columns.\n */\nexport class EncodeMatrixPackedProgram {\n constructor(outputShape, inputIsUnsignedByte = false) {\n this.variableNames = ['A'];\n this.packedInputs = false;\n this.packedOutput = true;\n this.customUniforms = [{ name: 'texShape', type: 'ivec2' }];\n const glsl = getGlslDifferences();\n this.outputShape = outputShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n let mainLoop = '';\n let output = 'result';\n if (inputIsUnsignedByte) {\n output = 'floor(result * 255. + 0.5)';\n }\n for (let row = 0; row <= 1; row++) {\n for (let col = 0; col <= 1; col++) {\n const channel = row * 2 + col;\n 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 `;\n }\n }\n this.userCode = `\n ${this.enableShapeUniforms ? shader_util.getFlatIndexFrom3DOutput() :\n shader_util.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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlX21hdHJpeF9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9lbmNvZGVfbWF0cml4X3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFlLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sS0FBSyxXQUFXLE1BQU0sd0JBQXdCLENBQUM7QUFFdEQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxNQUFNLE9BQU8seUJBQXlCO0lBU3BDLFlBQ0ksV0FBcUMsRUFBRSxtQkFBbUIsR0FBRyxLQUFLO1FBVHRFLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUd0QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUVwQixtQkFBYyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFLENBQUMsQ0FBQztRQUk3RCxNQUFNLElBQUksR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJFLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdEIsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLEdBQUcsNEJBQTRCLENBQUM7U0FDdkM7UUFFRCxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2pDLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUU5QixRQUFRLElBQUk7O2dDQUVZLEdBQUcsTUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFOzhCQUM1QyxHQUFHO2lDQUNBLEdBQUcsTUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUMxQyxHQUFHOzs7Ozs7Ozs7O3VCQVVaLElBQUksQ0FBQyxTQUFTOzs7dUJBR2QsT0FBTzs7dUJBRVAsT0FBTzs7dUJBRVAsT0FBTzs7dUJBRVAsT0FBTzs7OztTQUlyQixDQUFDO2FBQ0g7U0FDRjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7VUFFWixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDeEMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7WUFXbEUsUUFBUTs7WUFFUixJQUFJLENBQUMsTUFBTSxNQUFNLE1BQU07O0tBRTlCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Z2V0R2xzbERpZmZlcmVuY2VzfSBmcm9tICcuL2dsc2xfdmVyc2lvbic7XG5pbXBvcnQge0dQR1BVUHJvZ3JhbSwgdXNlU2hhcGVVbmlmb3Jtc30gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCAqIGFzIHNoYWRlcl91dGlsIGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyX3V0aWwnO1xuXG4vKlxuVGhpcyBpcyBob3cgdGhlIHNoYWRlciBlbmNvZGVzIGEgdGVuc29yIHdpdGggc2hhcGUgPSBbMiwgMywgNV1cbihpbmRpY2VzIGFyZSBbYmF0Y2gsIHJvdywgY29sXSkuXG5cbjAwMHwwMDEgICAwMDJ8MDAzICAgMDA0fHh4eCAgIDAyMHwwMjEgICAwMjJ8MDIzICAgMDI0fHh4eFxuLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tXG4wMTB8MDExICAgMDEyfDAxMyAgIDAxNHx4eHggICB4eHh8eHh4ICAgeHh4fHh4eCAgIHh4eHx4eHhcblxuMTAwfDEwMSAgIDEwMnwxMDMgICAxMDR8eHh4ICAgMTIwfDEyMSAgIDEyMnwxMjMgICAxMjR8eHh4XG4tLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS1cbjExMHwxMTEgICAxMTJ8MTEzICAgMTE0fHh4eCAgIHh4eHx4eHggICB4eHh8eHh4ICAgeHh4fHh4eFxuXG5TaW5nbGUgdGV4ZWxzIGNvbnRhaW4gb25seSB2YWx1ZXMgZnJvbSB0aGUgc2FtZSBiYXRjaCwgYW5kIGZyb20gYWRqYWNlbnQgcm93c1xuYW5kIGNvbHVtbnMuXG4gKi9cblxuZXhwb3J0IGNsYXNzIEVuY29kZU1hdHJpeFBhY2tlZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgcGFja2VkSW5wdXRzID0gZmFsc2U7XG4gIHBhY2tlZE91dHB1dCA9IHRydWU7XG4gIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW47XG4gIGN1c3RvbVVuaWZvcm1zID0gW3tuYW1lOiAndGV4U2hhcGUnLCB0eXBlOiAnaXZlYzInIGFzIGNvbnN0IH1dO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgb3V0cHV0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgaW5wdXRJc1Vuc2lnbmVkQnl0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgZ2xzbCA9IGdldEdsc2xEaWZmZXJlbmNlcygpO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPSB1c2VTaGFwZVVuaWZvcm1zKHRoaXMub3V0cHV0U2hhcGUubGVuZ3RoKTtcblxuICAgIGxldCBtYWluTG9vcCA9ICcnO1xuICAgIGxldCBvdXRwdXQgPSAncmVzdWx0JztcbiAgICBpZiAoaW5wdXRJc1Vuc2lnbmVkQnl0ZSkge1xuICAgICAgb3V0cHV0ID0gJ2Zsb29yKHJlc3VsdCAqIDI1NS4gKyAwLjUpJztcbiAgICB9XG5cbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPD0gMTsgcm93KyspIHtcbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8PSAxOyBjb2wrKykge1xuICAgICAgICBjb25zdCBjaGFubmVsID0gcm93ICogMiArIGNvbDtcblxuICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgbG9jYWxDb29yZHMgPSBjb29yZHM7XG4gICAgICAgICAgaWYobG9jYWxDb29yZHNbMl0gKyAke2NvbH0gPCAke1xuICAgICAgICAgICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID8gJ291dFNoYXBlWzJdJyA6IGAke291dHB1dFNoYXBlWzJdfWB9KSB7XG4gICAgICAgICAgbG9jYWxDb29yZHNbMl0gKz0gJHtjb2x9O1xuICAgICAgICAgIGlmIChsb2NhbENvb3Jkc1sxXSArICR7cm93fSA8ICR7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPyAnb3V0U2hhcGVbMV0nIDogYCR7b3V0cHV0U2hhcGVbMV19YH0pIHtcbiAgICAgICAgICAgIGxvY2FsQ29vcmRzWzFdICs9ICR7cm93fTtcblxuICAgICAgICAgICAgZmxhdEluZGV4ID0gZ2V0RmxhdEluZGV4KGxvY2FsQ29vcmRzKTtcbiAgICAgICAgICAgIG9mZnNldCA9IGltb2QoZmxhdEluZGV4LCA0KTtcblxuICAgICAgICAgICAgZmxhdEluZGV4ID0gaWRpdihmbGF0SW5kZXgsIDQsIDEuKTtcblxuICAgICAgICAgICAgaW50IHIgPSBmbGF0SW5kZXggLyB0ZXhTaGFwZVsxXTtcbiAgICAgICAgICAgIGludCBjID0gaW1vZChmbGF0SW5kZXgsIHRleFNoYXBlWzFdKTtcbiAgICAgICAgICAgIHZlYzIgdXYgPSAodmVjMihjLCByKSArIGhhbGZDUikgLyB2ZWMyKHRleFNoYXBlWzFdLCB0ZXhTaGFwZVswXSk7XG4gICAgICAgICAgICB2YWx1ZXMgPSAke2dsc2wudGV4dHVyZTJEfShBLCB1dik7XG5cbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gMCkge1xuICAgICAgICAgICAgICByZXN1bHRbJHtjaGFubmVsfV0gPSB2YWx1ZXNbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAxKSB7XG4gICAgICAgICAgICAgIHJlc3VsdFske2NoYW5uZWx9XSA9IHZhbHVlc1sxXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHtcbiAgICAgICAgICAgICAgcmVzdWx0WyR7Y2hhbm5lbH1dID0gdmFsdWVzWzJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0WyR7Y2hhbm5lbH1dID0gdmFsdWVzWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAgICR7XG4gICAgICAgIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA/IHNoYWRlcl91dGlsLmdldEZsYXRJbmRleEZyb20zRE91dHB1dCgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyX3V0aWwuZ2V0RmxhdEluZGV4RnJvbTNEKG91dHB1dFNoYXBlKX1cblxuICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgaXZlYzMgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG5cbiAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4pO1xuICAgICAgICAgIGludCBmbGF0SW5kZXgsIHIsIGMsIG9mZnNldDtcbiAgICAgICAgICBpdmVjMyBsb2NhbENvb3JkcztcbiAgICAgICAgICB2ZWMyIHV2O1xuICAgICAgICAgIHZlYzQgdmFsdWVzO1xuXG4gICAgICAgICAgJHttYWluTG9vcH1cblxuICAgICAgICAgICR7Z2xzbC5vdXRwdXR9ID0gJHtvdXRwdXR9O1xuICAgICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nimport { getGlslDifferences } from './glsl_version';\nimport * as tex_util from './tex_util';\nimport * as webgl_util from './webgl_util';\nexport function createVertexShader(gl) {\n const glsl = getGlslDifferences();\n const 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 }`;\n return webgl_util.createVertexShader(gl, vertexShaderSource);\n}\nexport function createVertexBuffer(gl) {\n // [x y z u v] * [upper-left, lower-left, upper-right, lower-right]\n const vertexArray = new Float32Array([-1, 1, 0, 0, 1, -1, -1, 0, 0, 0, 1, 1, 0, 1, 1, 1, -1, 0, 1, 0]);\n return webgl_util.createStaticVertexBuffer(gl, vertexArray);\n}\nexport function createIndexBuffer(gl) {\n // OpenGL (and WebGL) have \"CCW == front\" winding\n const triangleVertexIndices = new Uint16Array([0, 1, 2, 2, 1, 3]);\n return webgl_util.createStaticIndexBuffer(gl, triangleVertexIndices);\n}\nfunction createAndConfigureTexture(gl, width, height, internalFormat, textureFormat, textureType) {\n webgl_util.validateTextureSize(width, height);\n const texture = webgl_util.createTexture(gl);\n const tex2d = gl.TEXTURE_2D;\n webgl_util.callAndCheck(gl, () => gl.bindTexture(tex2d, texture));\n webgl_util.callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE));\n webgl_util.callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE));\n webgl_util.callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_MIN_FILTER, gl.NEAREST));\n webgl_util.callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_MAG_FILTER, gl.NEAREST));\n if (env().getNumber('WEBGL_VERSION') === 1) {\n webgl_util.callAndCheck(gl, () => gl.texImage2D(tex2d, 0, internalFormat, width, height, 0, textureFormat, textureType, null));\n }\n else {\n webgl_util.callAndCheck(gl, () => gl\n .texStorage2D(tex2d, 1, internalFormat, width, height));\n }\n webgl_util.callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null));\n return { texture, texShape: [height, width] };\n}\nexport function getInternalFormatForFloat32MatrixTexture(textureConfig) {\n return textureConfig.internalFormatFloat;\n}\nexport function createFloat32MatrixTexture(gl, rows, columns, textureConfig) {\n const [width, height] = tex_util.getUnpackedMatrixTextureShapeWidthHeight(rows, columns);\n return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat32MatrixTexture(textureConfig), textureConfig.textureFormatFloat, gl.FLOAT);\n}\nexport function getInternalFormatForFloat16MatrixTexture(textureConfig) {\n return textureConfig.internalFormatHalfFloat;\n}\nexport function createFloat16MatrixTexture(gl, rows, columns, textureConfig) {\n const [width, height] = tex_util.getUnpackedMatrixTextureShapeWidthHeight(rows, columns);\n return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat16MatrixTexture(textureConfig), textureConfig.textureFormatFloat, textureConfig.textureTypeHalfFloat);\n}\nexport function getInternalFormatForUnsignedBytesMatrixTexture(textureConfig) {\n return textureConfig.downloadTextureFormat;\n}\nexport function createUnsignedBytesMatrixTexture(gl, rows, columns, textureConfig) {\n const [width, height] = tex_util.getUnpackedMatrixTextureShapeWidthHeight(rows, columns);\n return createAndConfigureTexture(gl, width, height, getInternalFormatForUnsignedBytesMatrixTexture(textureConfig), gl.RGBA, gl.UNSIGNED_BYTE);\n}\nexport function getInternalFormatForPackedMatrixTexture(textureConfig) {\n return textureConfig.internalFormatPackedFloat;\n}\nexport function createPackedMatrixTexture(gl, rows, columns, textureConfig) {\n const [width, height] = tex_util.getPackedMatrixTextureShapeWidthHeight(rows, columns);\n return createAndConfigureTexture(gl, width, height, getInternalFormatForPackedMatrixTexture(textureConfig), gl.RGBA, gl.FLOAT);\n}\nexport function getInternalFormatForFloat16PackedMatrixTexture(textureConfig) {\n return textureConfig.internalFormatPackedHalfFloat;\n}\nexport function createFloat16PackedMatrixTexture(gl, rows, columns, textureConfig) {\n const [width, height] = tex_util.getPackedMatrixTextureShapeWidthHeight(rows, columns);\n return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat16PackedMatrixTexture(textureConfig), gl.RGBA, textureConfig.textureTypeHalfFloat);\n}\nexport function bindVertexProgramAttributeStreams(gl, program, vertexBuffer) {\n const posOffset = 0; // x is the first buffer element\n const uvOffset = 3 * 4; // uv comes after [x y z]\n const stride = (3 * 4) + (2 * 4); // xyz + uv, each entry is 4-byte float.\n webgl_util.callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer));\n const success = webgl_util.bindVertexBufferToProgramAttribute(gl, program, 'clipSpacePos', vertexBuffer, 3, stride, posOffset);\n return success &&\n webgl_util.bindVertexBufferToProgramAttribute(gl, program, 'uv', vertexBuffer, 2, stride, uvOffset);\n}\nexport function uploadDenseMatrixToTexture(gl, texture, width, height, data, textureConfig) {\n webgl_util.callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture));\n let dataForUpload, texelDataType, internalFormat;\n if (data instanceof Uint8Array) {\n dataForUpload = new Uint8Array(width * height * 4);\n texelDataType = gl.UNSIGNED_BYTE;\n internalFormat = gl.RGBA;\n }\n else {\n dataForUpload = new Float32Array(width * height * 4);\n texelDataType = gl.FLOAT;\n internalFormat = textureConfig.internalFormatPackedFloat;\n }\n dataForUpload.set(data);\n if (env().getNumber('WEBGL_VERSION') === 2) {\n webgl_util.callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, gl.RGBA, texelDataType, dataForUpload));\n }\n else {\n webgl_util.callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, width, height, 0, gl.RGBA, texelDataType, dataForUpload));\n }\n webgl_util.callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null));\n}\nexport function uploadPixelDataToTexture(gl, texture, pixels) {\n webgl_util.callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture));\n if (pixels.data instanceof Uint8Array) {\n if (env().getNumber('WEBGL_VERSION') === 2) {\n webgl_util.callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, pixels.width, pixels.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.data));\n }\n else {\n webgl_util.callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, pixels.width, pixels.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels.data));\n }\n }\n else {\n if (env().getNumber('WEBGL_VERSION') === 2) {\n webgl_util.callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels));\n }\n else {\n webgl_util.callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, pixels));\n }\n }\n webgl_util.callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null));\n}\nexport function createBufferFromOutputTexture(gl2, rows, columns, textureConfig) {\n // Create and bind the buffer.\n const buffer = gl2.createBuffer();\n webgl_util.callAndCheck(gl2, () => gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer));\n // Initialize the buffer to the size of the texture in bytes.\n const bytesPerFloat = 4;\n const valuesPerTexel = 4;\n const bufferSizeBytes = bytesPerFloat * valuesPerTexel * rows * columns;\n webgl_util.callAndCheck(gl2, () => gl2.bufferData(gl2.PIXEL_PACK_BUFFER, bufferSizeBytes, gl2.STREAM_READ));\n // Enqueue a command on the GPU command queue to copy of texture into the\n // buffer.\n webgl_util.callAndCheck(gl2, () => gl2.readPixels(0, 0, columns, rows, gl2.RGBA, gl2.FLOAT, 0));\n webgl_util.callAndCheck(gl2, () => gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null));\n return buffer;\n}\nexport function downloadFloat32MatrixFromBuffer(gl, buffer, size) {\n const gl2 = gl;\n const downloadTarget = new Float32Array(size);\n gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer);\n gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER, 0, downloadTarget);\n gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null);\n return downloadTarget;\n}\nexport function downloadByteEncodedFloatMatrixFromOutputTexture(gl, rows, columns, textureConfig) {\n const [w, h] = tex_util.getUnpackedMatrixTextureShapeWidthHeight(rows, columns);\n const numChannels = 4;\n const downloadTarget = new Uint8Array(tex_util.getUnpackedArraySizeFromMatrixSize(rows * columns, numChannels));\n webgl_util.callAndCheck(gl, () => gl.readPixels(0, 0, w, h, textureConfig.downloadTextureFormat, gl.UNSIGNED_BYTE, downloadTarget));\n // By wrapping the buffer in a Float32Array, we use native browser IEEE 754\n // decoding of the 4 bytes that back each 32 bit float.\n return new Float32Array(downloadTarget.buffer);\n}\nexport function downloadPackedMatrixFromBuffer(gl, buffer, batch, rows, cols, physicalRows, physicalCols, textureConfig) {\n const gl2 = gl;\n const downloadTarget = new Float32Array(tex_util.getPackedRGBAArraySizeFromMatrixShape(physicalRows, physicalCols));\n gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer);\n gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER, 0, downloadTarget);\n gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null);\n return downloadTarget;\n}\nexport function downloadMatrixFromPackedOutputTexture(gl, physicalRows, physicalCols) {\n const packedRGBA = new Float32Array(physicalRows * physicalCols * 4);\n webgl_util.callAndCheck(gl, () => gl.readPixels(0, 0, physicalCols, physicalRows, gl.RGBA, gl.FLOAT, packedRGBA));\n return packedRGBA;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3BncHVfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvZ3BncHVfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUF3QixNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxRQUFRLE1BQU0sWUFBWSxDQUFDO0FBRXZDLE9BQU8sS0FBSyxVQUFVLE1BQU0sY0FBYyxDQUFDO0FBRTNDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUF5QjtJQUMxRCxNQUFNLElBQUksR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTzs7TUFFdEMsSUFBSSxDQUFDLFNBQVM7TUFDZCxJQUFJLENBQUMsU0FBUztNQUNkLElBQUksQ0FBQyxTQUFTOzs7OztNQUtkLENBQUM7SUFDTCxPQUFPLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEVBQXlCO0lBQzFELG1FQUFtRTtJQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FDaEMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxD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QUFNLFVBQVUscUNBQXFDLENBQ2pELEVBQXlCLEVBQUUsWUFBb0IsRUFDL0MsWUFBb0I7SUFDdEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxZQUFZLENBQUMsWUFBWSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRSxVQUFVLENBQUMsWUFBWSxDQUNuQixFQUFFLEVBQ0YsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FDZixDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFMUUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtlbnYsIFBpeGVsRGF0YSwgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtnZXRHbHNsRGlmZmVyZW5jZXN9IGZyb20gJy4vZ2xzbF92ZXJzaW9uJztcbmltcG9ydCAqIGFzIHRleF91dGlsIGZyb20gJy4vdGV4X3V0aWwnO1xuaW1wb3J0IHtUZXh0dXJlLCBUZXh0dXJlQ29uZmlnfSBmcm9tICcuL3RleF91dGlsJztcbmltcG9ydCAqIGFzIHdlYmdsX3V0aWwgZnJvbSAnLi93ZWJnbF91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZlcnRleFNoYWRlcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KTogV2ViR0xTaGFkZXIge1xuICBjb25zdCBnbHNsID0gZ2V0R2xzbERpZmZlcmVuY2VzKCk7XG4gIGNvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAke2dsc2wudmVyc2lvbn1cbiAgICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4gICAgJHtnbHNsLmF0dHJpYnV0ZX0gdmVjMyBjbGlwU3BhY2VQb3M7XG4gICAgJHtnbHNsLmF0dHJpYnV0ZX0gdmVjMiB1djtcbiAgICAke2dsc2wudmFyeWluZ1ZzfSB2ZWMyIHJlc3VsdFVWO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBTcGFjZVBvcywgMSk7XG4gICAgICByZXN1bHRVViA9IHV2O1xuICAgIH1gO1xuICByZXR1cm4gd2ViZ2xfdXRpbC5jcmVhdGVWZXJ0ZXhTaGFkZXIoZ2wsIHZlcnRleFNoYWRlclNvdXJjZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWZXJ0ZXhCdWZmZXIoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCk6IFdlYkdMQnVmZmVyIHtcbiAgLy8gW3ggeSB6IHUgdl0gKiBbdXBwZXItbGVmdCwgbG93ZXItbGVmdCwgdXBwZXItcmlnaHQsIGxvd2VyLXJpZ2h0XVxuICBjb25zdCB2ZXJ0ZXhBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoXG4gICAgICBbLTEsIDEsIDAsIDAsIDEsIC0xLCAtMSwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgLTEsIDAsIDEsIDBdKTtcbiAgcmV0dXJuIHdlYmdsX3V0aWwuY3JlYXRlU3RhdGljVmVydGV4QnVmZmVyKGdsLCB2ZXJ0ZXhBcnJheSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbmRleEJ1ZmZlcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KTogV2ViR0xCdWZmZXIge1xuICAvLyBPcGVuR0wgKGFuZCBXZWJHTCkgaGF2ZSBcIkNDVyA9PSBmcm9udFwiIHdpbmRpbmdcbiAgY29uc3QgdHJpYW5nbGVWZXJ0ZXhJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFswLCAxLCAyLCAyLCAxLCAzXSk7XG4gIHJldHVybiB3ZWJnbF91dGlsLmNyZWF0ZVN0YXRpY0luZGV4QnVmZmVyKGdsLCB0cmlhbmdsZVZlcnRleEluZGljZXMpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbmRDb25maWd1cmVUZXh0dXJlKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLFxuICAgIGludGVybmFsRm9ybWF0OiBudW1iZXIsIHRleHR1cmVGb3JtYXQ6IG51bWJlcixcbiAgICB0ZXh0dXJlVHlwZTogbnVtYmVyKTogVGV4dHVyZSB7XG4gIHdlYmdsX3V0aWwudmFsaWRhdGVUZXh0dXJlU2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgdGV4dHVyZSA9IHdlYmdsX3V0aWwuY3JlYXRlVGV4dHVyZShnbCk7XG5cbiAgY29uc3QgdGV4MmQgPSBnbC5URVhUVVJFXzJEO1xuICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuYmluZFRleHR1cmUodGV4MmQsIHRleHR1cmUpKTtcbiAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICBnbCwgKCkgPT4gZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpKTtcbiAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICBnbCwgKCkgPT4gZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpKTtcbiAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICBnbCwgKCkgPT4gZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKSk7XG4gIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKFxuICAgICAgZ2wsICgpID0+IGdsLnRleFBhcmFtZXRlcmkodGV4MmQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCkpO1xuICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykgPT09IDEpIHtcbiAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgZ2wsXG4gICAgICAgICgpID0+IGdsLnRleEltYWdlMkQoXG4gICAgICAgICAgICB0ZXgyZCwgMCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIHRleHR1cmVGb3JtYXQsXG4gICAgICAgICAgICB0ZXh0dXJlVHlwZSwgbnVsbCkpO1xuICB9IGVsc2Uge1xuICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKFxuICAgICAgICBnbCxcbiAgICAgICAgKCkgPT4gKGdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICAgICAgICAudGV4U3RvcmFnZTJEKHRleDJkLCAxLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCkpO1xuICB9XG4gIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKSk7XG5cbiAgcmV0dXJuIHt0ZXh0dXJlLCB0ZXhTaGFwZTogW2hlaWdodCwgd2lkdGhdfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsRm9ybWF0Rm9yRmxvYXQzMk1hdHJpeFRleHR1cmUoXG4gICAgdGV4dHVyZUNvbmZpZzogVGV4dHVyZUNvbmZpZykge1xuICByZXR1cm4gdGV4dHVyZUNvbmZpZy5pbnRlcm5hbEZvcm1hdEZsb2F0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmxvYXQzMk1hdHJpeFRleHR1cmUoXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIsXG4gICAgdGV4dHVyZUNvbmZpZzogVGV4dHVyZUNvbmZpZyk6IFRleHR1cmUge1xuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPVxuICAgICAgdGV4X3V0aWwuZ2V0VW5wYWNrZWRNYXRyaXhUZXh0dXJlU2hhcGVXaWR0aEhlaWdodChyb3dzLCBjb2x1bW5zKTtcbiAgcmV0dXJuIGNyZWF0ZUFuZENvbmZpZ3VyZVRleHR1cmUoXG4gICAgICBnbCwgd2lkdGgsIGhlaWdodCxcbiAgICAgIGdldEludGVybmFsRm9ybWF0Rm9yRmxvYXQzMk1hdHJpeFRleHR1cmUodGV4dHVyZUNvbmZpZyksXG4gICAgICB0ZXh0dXJlQ29uZmlnLnRleHR1cmVGb3JtYXRGbG9hdCwgZ2wuRkxPQVQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJuYWxGb3JtYXRGb3JGbG9hdDE2TWF0cml4VGV4dHVyZShcbiAgICB0ZXh0dXJlQ29uZmlnOiBUZXh0dXJlQ29uZmlnKSB7XG4gIHJldHVybiB0ZXh0dXJlQ29uZmlnLmludGVybmFsRm9ybWF0SGFsZkZsb2F0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmxvYXQxNk1hdHJpeFRleHR1cmUoXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIsXG4gICAgdGV4dHVyZUNvbmZpZzogVGV4dHVyZUNvbmZpZyk6IFRleHR1cmUge1xuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPVxuICAgICAgdGV4X3V0aWwuZ2V0VW5wYWNrZWRNYXRyaXhUZXh0dXJlU2hhcGVXaWR0aEhlaWdodChyb3dzLCBjb2x1bW5zKTtcbiAgcmV0dXJuIGNyZWF0ZUFuZENvbmZpZ3VyZVRleHR1cmUoXG4gICAgICBnbCwgd2lkdGgsIGhlaWdodCxcbiAgICAgIGdldEludGVybmFsRm9ybWF0Rm9yRmxvYXQxNk1hdHJpeFRleHR1cmUodGV4dHVyZUNvbmZpZyksXG4gICAgICB0ZXh0dXJlQ29uZmlnLnRleHR1cmVGb3JtYXRGbG9hdCwgdGV4dHVyZUNvbmZpZy50ZXh0dXJlVHlwZUhhbGZGbG9hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbEZvcm1hdEZvclVuc2lnbmVkQnl0ZXNNYXRyaXhUZXh0dXJlKFxuICAgIHRleHR1cmVDb25maWc6IFRleHR1cmVDb25maWcpIHtcbiAgcmV0dXJuIHRleHR1cmVDb25maWcuZG93bmxvYWRUZXh0dXJlRm9ybWF0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5zaWduZWRCeXRlc01hdHJpeFRleHR1cmUoXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIsXG4gICAgdGV4dHVyZUNvbmZpZzogVGV4dHVyZUNvbmZpZyk6IFRleHR1cmUge1xuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPVxuICAgICAgdGV4X3V0aWwuZ2V0VW5wYWNrZWRNYXRyaXhUZXh0dXJlU2hhcGVXaWR0aEhlaWdodChyb3dzLCBjb2x1bW5zKTtcbiAgcmV0dXJuIGNyZWF0ZUFuZENvbmZpZ3VyZVRleHR1cmUoXG4gICAgICBnbCwgd2lkdGgsIGhlaWdodCxcbiAgICAgIGdldEludGVybmFsRm9ybWF0Rm9yVW5zaWduZWRCeXRlc01hdHJpeFRleHR1cmUodGV4dHVyZUNvbmZpZyksIGdsLlJHQkEsXG4gICAgICBnbC5VTlNJR05FRF9CWVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsRm9ybWF0Rm9yUGFja2VkTWF0cml4VGV4dHVyZShcbiAgICB0ZXh0dXJlQ29uZmlnOiBUZXh0dXJlQ29uZmlnKSB7XG4gIHJldHVybiB0ZXh0dXJlQ29uZmlnLmludGVybmFsRm9ybWF0UGFja2VkRmxvYXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYWNrZWRNYXRyaXhUZXh0dXJlKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHJvd3M6IG51bWJlciwgY29sdW1uczogbnVtYmVyLFxuICAgIHRleHR1cmVDb25maWc6IFRleHR1cmVDb25maWcpOiBUZXh0dXJlIHtcbiAgY29uc3QgW3dpZHRoLCBoZWlnaHRdID1cbiAgICAgIHRleF91dGlsLmdldFBhY2tlZE1hdHJpeFRleHR1cmVTaGFwZVdpZHRoSGVpZ2h0KHJvd3MsIGNvbHVtbnMpO1xuICByZXR1cm4gY3JlYXRlQW5kQ29uZmlndXJlVGV4dHVyZShcbiAgICAgIGdsLCB3aWR0aCwgaGVpZ2h0LCBnZXRJbnRlcm5hbEZvcm1hdEZvclBhY2tlZE1hdHJpeFRleHR1cmUodGV4dHVyZUNvbmZpZyksXG4gICAgICBnbC5SR0JBLCBnbC5GTE9BVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbEZvcm1hdEZvckZsb2F0MTZQYWNrZWRNYXRyaXhUZXh0dXJlKFxuICAgIHRleHR1cmVDb25maWc6IFRleHR1cmVDb25maWcpIHtcbiAgcmV0dXJuIHRleHR1cmVDb25maWcuaW50ZXJuYWxGb3JtYXRQYWNrZWRIYWxmRmxvYXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG9hdDE2UGFja2VkTWF0cml4VGV4dHVyZShcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCByb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcixcbiAgICB0ZXh0dXJlQ29uZmlnOiBUZXh0dXJlQ29uZmlnKTogVGV4dHVyZSB7XG4gIGNvbnN0IFt3aWR0aCwgaGVpZ2h0XSA9XG4gICAgICB0ZXhfdXRpbC5nZXRQYWNrZWRNYXRyaXhUZXh0dXJlU2hhcGVXaWR0aEhlaWdodChyb3dzLCBjb2x1bW5zKTtcbiAgcmV0dXJuIGNyZWF0ZUFuZENvbmZpZ3VyZVRleHR1cmUoXG4gICAgICBnbCwgd2lkdGgsIGhlaWdodCxcbiAgICAgIGdldEludGVybmFsRm9ybWF0Rm9yRmxvYXQxNlBhY2tlZE1hdHJpeFRleHR1cmUodGV4dHVyZUNvbmZpZyksIGdsLlJHQkEsXG4gICAgICB0ZXh0dXJlQ29uZmlnLnRleHR1cmVUeXBlSGFsZkZsb2F0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRWZXJ0ZXhQcm9ncmFtQXR0cmlidXRlU3RyZWFtcyhcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBwcm9ncmFtOiBXZWJHTFByb2dyYW0sXG4gICAgdmVydGV4QnVmZmVyOiBXZWJHTEJ1ZmZlcik6IGJvb2xlYW4ge1xuICBjb25zdCBwb3NPZmZzZXQgPSAwOyAgICAgICAgICAgICAgIC8vIHggaXMgdGhlIGZpcnN0IGJ1ZmZlciBlbGVtZW50XG4gIGNvbnN0IHV2T2Zmc2V0ID0gMyAqIDQ7ICAgICAgICAgICAgLy8gdXYgY29tZXMgYWZ0ZXIgW3ggeSB6XVxuICBjb25zdCBzdHJpZGUgPSAoMyAqIDQpICsgKDIgKiA0KTsgIC8vIHh5eiArIHV2LCBlYWNoIGVudHJ5IGlzIDQtYnl0ZSBmbG9hdC5cbiAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICBnbCwgKCkgPT4gZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleEJ1ZmZlcikpO1xuICBjb25zdCBzdWNjZXNzID0gd2ViZ2xfdXRpbC5iaW5kVmVydGV4QnVmZmVyVG9Qcm9ncmFtQXR0cmlidXRlKFxuICAgICAgZ2wsIHByb2dyYW0sICdjbGlwU3BhY2VQb3MnLCB2ZXJ0ZXhCdWZmZXIsIDMsIHN0cmlkZSwgcG9zT2Zmc2V0KTtcbiAgcmV0dXJuIHN1Y2Nlc3MgJiZcbiAgICAgIHdlYmdsX3V0aWwuYmluZFZlcnRleEJ1ZmZlclRvUHJvZ3JhbUF0dHJpYnV0ZShcbiAgICAgICAgICBnbCwgcHJvZ3JhbSwgJ3V2JywgdmVydGV4QnVmZmVyLCAyLCBzdHJpZGUsIHV2T2Zmc2V0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZERlbnNlTWF0cml4VG9UZXh0dXJlKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHRleHR1cmU6IFdlYkdMVGV4dHVyZSwgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlciwgZGF0YTogVHlwZWRBcnJheSwgdGV4dHVyZUNvbmZpZzogVGV4dHVyZUNvbmZpZykge1xuICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSkpO1xuXG4gIGxldCBkYXRhRm9yVXBsb2FkOiBUeXBlZEFycmF5LCB0ZXhlbERhdGFUeXBlOiBudW1iZXIsIGludGVybmFsRm9ybWF0OiBudW1iZXI7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIGRhdGFGb3JVcGxvYWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xuICAgIHRleGVsRGF0YVR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuICAgIGludGVybmFsRm9ybWF0ID0gZ2wuUkdCQTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhRm9yVXBsb2FkID0gbmV3IEZsb2F0MzJBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xuICAgIHRleGVsRGF0YVR5cGUgPSBnbC5GTE9BVDtcbiAgICBpbnRlcm5hbEZvcm1hdCA9IHRleHR1cmVDb25maWcuaW50ZXJuYWxGb3JtYXRQYWNrZWRGbG9hdDtcbiAgfVxuXG4gIGRhdGFGb3JVcGxvYWQuc2V0KGRhdGEpO1xuICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykgPT09IDIpIHtcbiAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgZ2wsXG4gICAgICAgICgpID0+IGdsLnRleFN1YkltYWdlMkQoXG4gICAgICAgICAgICBnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCB0ZXhlbERhdGFUeXBlLFxuICAgICAgICAgICAgZGF0YUZvclVwbG9hZCkpO1xuICB9IGVsc2Uge1xuICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKFxuICAgICAgICBnbCxcbiAgICAgICAgKCkgPT4gZ2wudGV4SW1hZ2UyRChcbiAgICAgICAgICAgIGdsLlRFWFRVUkVfMkQsIDAsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLFxuICAgICAgICAgICAgdGV4ZWxEYXRhVHlwZSwgZGF0YUZvclVwbG9hZCkpO1xuICB9XG5cbiAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZFBpeGVsRGF0YVRvVGV4dHVyZShcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCB0ZXh0dXJlOiBXZWJHTFRleHR1cmUsXG4gICAgcGl4ZWxzOiBQaXhlbERhdGF8SW1hZ2VEYXRhfEhUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1lbnR8XG4gICAgSFRNTFZpZGVvRWxlbWVudHxJbWFnZUJpdG1hcCkge1xuICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSkpO1xuICBpZiAoKHBpeGVscyBhcyBQaXhlbERhdGEpLmRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgaWYgKGVudigpLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpID09PSAyKSB7XG4gICAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgICBnbCxcbiAgICAgICAgICAoKSA9PiBnbC50ZXhTdWJJbWFnZTJEKFxuICAgICAgICAgICAgICBnbC5URVhUVVJFXzJELCAwLCAwLCAwLCBwaXhlbHMud2lkdGgsIHBpeGVscy5oZWlnaHQsIGdsLlJHQkEsXG4gICAgICAgICAgICAgIGdsLlVOU0lHTkVEX0JZVEUsIChwaXhlbHMgYXMgUGl4ZWxEYXRhKS5kYXRhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKFxuICAgICAgICAgIGdsLFxuICAgICAgICAgICgpID0+IGdsLnRleEltYWdlMkQoXG4gICAgICAgICAgICAgIGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIHBpeGVscy53aWR0aCwgcGl4ZWxzLmhlaWdodCwgMCxcbiAgICAgICAgICAgICAgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgKHBpeGVscyBhcyBQaXhlbERhdGEpLmRhdGEpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVudigpLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpID09PSAyKSB7XG4gICAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgICBnbCxcbiAgICAgICAgICAoKSA9PiBnbC50ZXhTdWJJbWFnZTJEKFxuICAgICAgICAgICAgICBnbC5URVhUVVJFXzJELCAwLCAwLCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLFxuICAgICAgICAgICAgICAocGl4ZWxzIGFzIEltYWdlRGF0YSB8IEhUTUxJbWFnZUVsZW1lbnQgfCBIVE1MQ2FudmFzRWxlbWVudCB8XG4gICAgICAgICAgICAgICBIVE1MVmlkZW9FbGVtZW50IHwgSW1hZ2VCaXRtYXApKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKFxuICAgICAgICAgIGdsLFxuICAgICAgICAgICgpID0+IGdsLnRleEltYWdlMkQoXG4gICAgICAgICAgICAgIGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsXG4gICAgICAgICAgICAgIHBpeGVscyBhcyBJbWFnZURhdGEgfCBIVE1MSW1hZ2VFbGVtZW50IHwgSFRNTENhbnZhc0VsZW1lbnQgfFxuICAgICAgICAgICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCB8IEltYWdlQml0bWFwKSk7XG4gICAgfVxuICB9XG5cbiAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlckZyb21PdXRwdXRUZXh0dXJlKFxuICAgIGdsMjogV2ViR0wyUmVuZGVyaW5nQ29udGV4dCwgcm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIsXG4gICAgdGV4dHVyZUNvbmZpZzogVGV4dHVyZUNvbmZpZyk6IFdlYkdMQnVmZmVyIHtcbiAgLy8gQ3JlYXRlIGFuZCBiaW5kIHRoZSBidWZmZXIuXG4gIGNvbnN0IGJ1ZmZlciA9IGdsMi5jcmVhdGVCdWZmZXIoKTtcbiAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICBnbDIsICgpID0+IGdsMi5iaW5kQnVmZmVyKGdsMi5QSVhFTF9QQUNLX0JVRkZFUiwgYnVmZmVyKSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgYnVmZmVyIHRvIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlIGluIGJ5dGVzLlxuICBjb25zdCBieXRlc1BlckZsb2F0ID0gNDtcbiAgY29uc3QgdmFsdWVzUGVyVGV4ZWwgPSA0O1xuICBjb25zdCBidWZmZXJTaXplQnl0ZXMgPSBieXRlc1BlckZsb2F0ICogdmFsdWVzUGVyVGV4ZWwgKiByb3dzICogY29sdW1ucztcblxuICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgIGdsMixcbiAgICAgICgpID0+IGdsMi5idWZmZXJEYXRhKFxuICAgICAgICAgIGdsMi5QSVhFTF9QQUNLX0JVRkZFUiwgYnVmZmVyU2l6ZUJ5dGVzLCBnbDIuU1RSRUFNX1JFQUQpKTtcblxuICAvLyBFbnF1ZXVlIGEgY29tbWFuZCBvbiB0aGUgR1BVIGNvbW1hbmQgcXVldWUgdG8gY29weSBvZiB0ZXh0dXJlIGludG8gdGhlXG4gIC8vIGJ1ZmZlci5cbiAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICBnbDIsICgpID0+IGdsMi5yZWFkUGl4ZWxzKDAsIDAsIGNvbHVtbnMsIHJvd3MsIGdsMi5SR0JBLCBnbDIuRkxPQVQsIDApKTtcblxuICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgIGdsMiwgKCkgPT4gZ2wyLmJpbmRCdWZmZXIoZ2wyLlBJWEVMX1BBQ0tfQlVGRkVSLCBudWxsKSk7XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkRmxvYXQzMk1hdHJpeEZyb21CdWZmZXIoXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgYnVmZmVyOiBXZWJHTEJ1ZmZlcixcbiAgICBzaXplOiBudW1iZXIpOiBGbG9hdDMyQXJyYXkge1xuICBjb25zdCBnbDIgPSBnbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O1xuXG4gIGNvbnN0IGRvd25sb2FkVGFyZ2V0ID0gbmV3IEZsb2F0MzJBcnJheShzaXplKTtcblxuICBnbDIuYmluZEJ1ZmZlcihnbDIuUElYRUxfUEFDS19CVUZGRVIsIGJ1ZmZlcik7XG4gIGdsMi5nZXRCdWZmZXJTdWJEYXRhKGdsMi5QSVhFTF9QQUNLX0JVRkZFUiwgMCwgZG93bmxvYWRUYXJnZXQpO1xuICBnbDIuYmluZEJ1ZmZlcihnbDIuUElYRUxfUEFDS19CVUZGRVIsIG51bGwpO1xuXG4gIHJldHVybiBkb3dubG9hZFRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkQnl0ZUVuY29kZWRGbG9hdE1hdHJpeEZyb21PdXRwdXRUZXh0dXJlKFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHJvd3M6IG51bWJlciwgY29sdW1uczogbnVtYmVyLFxuICAgIHRleHR1cmVDb25maWc6IFRleHR1cmVDb25maWcpIHtcbiAgY29uc3QgW3csIGhdID1cbiAgICAgIHRleF91dGlsLmdldFVucGFja2VkTWF0cml4VGV4dHVyZVNoYXBlV2lkdGhIZWlnaHQocm93cywgY29sdW1ucyk7XG5cbiAgY29uc3QgbnVtQ2hhbm5lbHMgPSA0O1xuICBjb25zdCBkb3dubG9hZFRhcmdldCA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgdGV4X3V0aWwuZ2V0VW5wYWNrZWRBcnJheVNpemVGcm9tTWF0cml4U2l6ZShyb3dzICogY29sdW1ucywgbnVtQ2hhbm5lbHMpKTtcblxuICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgIGdsLFxuICAgICAgKCkgPT4gZ2wucmVhZFBpeGVscyhcbiAgICAgICAgICAwLCAwLCB3LCBoLCB0ZXh0dXJlQ29uZmlnLmRvd25sb2FkVGV4dHVyZUZvcm1hdCwgZ2wuVU5TSUdORURfQllURSxcbiAgICAgICAgICBkb3dubG9hZFRhcmdldCkpO1xuXG4gIC8vIEJ5IHdyYXBwaW5nIHRoZSBidWZmZXIgaW4gYSBGbG9hdDMyQXJyYXksIHdlIHVzZSBuYXRpdmUgYnJvd3NlciBJRUVFIDc1NFxuICAvLyBkZWNvZGluZyBvZiB0aGUgNCBieXRlcyB0aGF0IGJhY2sgZWFjaCAzMiBiaXQgZmxvYXQuXG4gIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGRvd25sb2FkVGFyZ2V0LmJ1ZmZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZFBhY2tlZE1hdHJpeEZyb21CdWZmZXIoXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgYnVmZmVyOiBXZWJHTEJ1ZmZlciwgYmF0Y2g6IG51bWJlciwgcm93czogbnVtYmVyLFxuICAgIGNvbHM6IG51bWJlciwgcGh5c2ljYWxSb3dzOiBudW1iZXIsIHBoeXNpY2FsQ29sczogbnVtYmVyLFxuICAgIHRleHR1cmVDb25maWc6IFRleHR1cmVDb25maWcpOiBGbG9hdDMyQXJyYXkge1xuICBjb25zdCBnbDIgPSBnbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O1xuXG4gIGNvbnN0IGRvd25sb2FkVGFyZ2V0ID1cbiAgICAgIG5ldyBGbG9hdDMyQXJyYXkodGV4X3V0aWwuZ2V0UGFja2VkUkdCQUFycmF5U2l6ZUZyb21NYXRyaXhTaGFwZShcbiAgICAgICAgICBwaHlzaWNhbFJvd3MsIHBoeXNpY2FsQ29scykpO1xuXG4gIGdsMi5iaW5kQnVmZmVyKGdsMi5QSVhFTF9QQUNLX0JVRkZFUiwgYnVmZmVyKTtcbiAgZ2wyLmdldEJ1ZmZlclN1YkRhdGEoZ2wyLlBJWEVMX1BBQ0tfQlVGRkVSLCAwLCBkb3dubG9hZFRhcmdldCk7XG4gIGdsMi5iaW5kQnVmZmVyKGdsMi5QSVhFTF9QQUNLX0JVRkZFUiwgbnVsbCk7XG5cbiAgcmV0dXJuIGRvd25sb2FkVGFyZ2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRNYXRyaXhGcm9tUGFja2VkT3V0cHV0VGV4dHVyZShcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBwaHlzaWNhbFJvd3M6IG51bWJlcixcbiAgICBwaHlzaWNhbENvbHM6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gIGNvbnN0IHBhY2tlZFJHQkEgPSBuZXcgRmxvYXQzMkFycmF5KHBoeXNpY2FsUm93cyAqIHBoeXNpY2FsQ29scyAqIDQpO1xuICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgIGdsLFxuICAgICAgKCkgPT4gZ2wucmVhZFBpeGVscyhcbiAgICAgICAgICAwLCAwLCBwaHlzaWNhbENvbHMsIHBoeXNpY2FsUm93cywgZ2wuUkdCQSwgZ2wuRkxPQVQsIHBhY2tlZFJHQkEpKTtcblxuICByZXR1cm4gcGFja2VkUkdCQTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, util } from '@tensorflow/tfjs-core';\nimport { getWebGLContext, setWebGLContext } from './canvas_util';\nimport * as gpgpu_util from './gpgpu_util';\nimport * as tex_util from './tex_util';\nimport * as webgl_util from './webgl_util';\nexport class GPGPUContext {\n constructor(gl) {\n this.outputTexture = null;\n this.program = null;\n this.disposed = false;\n this.itemsToPoll = [];\n const glVersion = env().getNumber('WEBGL_VERSION');\n if (gl != null) {\n this.gl = gl;\n setWebGLContext(glVersion, gl);\n }\n else {\n this.gl = getWebGLContext(glVersion);\n }\n gl = this.gl;\n if (env().getNumber('WEBGL_VERSION') === 2) {\n const gl2 = gl;\n this.createVertexArray = () => {\n return webgl_util.callAndCheck(gl2, () => gl2.createVertexArray());\n };\n this.bindVertexArray = (vao) => {\n return webgl_util.callAndCheck(gl2, () => gl2.bindVertexArray(vao));\n };\n this.deleteVertexArray = (vao) => {\n return webgl_util.callAndCheck(gl2, () => gl2.deleteVertexArray(vao));\n };\n this.getVertexArray = () => {\n return webgl_util.callAndCheck(gl2, () => gl2.getParameter(gl2.VERTEX_ARRAY_BINDING));\n };\n }\n else if (gl != null) {\n const ext = gl.getExtension('OES_vertex_array_object');\n if (ext == null) {\n throw new Error('All WebGL1 implementations are expected to offer' +\n ' OES_vertex_array_object.');\n }\n this.createVertexArray = () => {\n return webgl_util.callAndCheck(gl, () => ext.createVertexArrayOES());\n };\n this.bindVertexArray = (vao) => {\n return webgl_util.callAndCheck(gl, () => ext.bindVertexArrayOES(vao));\n };\n this.deleteVertexArray = (vao) => {\n return webgl_util.callAndCheck(gl, () => ext.deleteVertexArrayOES(vao));\n };\n this.getVertexArray = () => {\n return webgl_util.callAndCheck(gl, () => gl.getParameter(ext.VERTEX_ARRAY_BINDING_OES));\n };\n }\n // WebGL 2.0 enables texture floats without an extension.\n let COLOR_BUFFER_FLOAT = 'WEBGL_color_buffer_float';\n const COLOR_BUFFER_HALF_FLOAT = 'EXT_color_buffer_half_float';\n this.parallelCompilationExtension =\n this.gl.getExtension('KHR_parallel_shader_compile');\n if (env().getNumber('WEBGL_VERSION') === 1) {\n const TEXTURE_FLOAT = 'OES_texture_float';\n const TEXTURE_HALF_FLOAT = 'OES_texture_half_float';\n this.textureFloatExtension =\n webgl_util.getExtensionOrThrow(this.gl, TEXTURE_FLOAT);\n if (webgl_util.hasExtension(this.gl, TEXTURE_HALF_FLOAT)) {\n this.textureHalfFloatExtension =\n webgl_util.getExtensionOrThrow(this.gl, TEXTURE_HALF_FLOAT);\n }\n else if (env().get('WEBGL_FORCE_F16_TEXTURES')) {\n throw new Error('GL context does not support half float textures, yet the ' +\n 'environment flag WEBGL_FORCE_F16_TEXTURES is set to true.');\n }\n this.colorBufferFloatExtension = this.gl.getExtension(COLOR_BUFFER_FLOAT);\n if (webgl_util.hasExtension(this.gl, COLOR_BUFFER_HALF_FLOAT)) {\n this.colorBufferHalfFloatExtension =\n webgl_util.getExtensionOrThrow(this.gl, COLOR_BUFFER_HALF_FLOAT);\n }\n else if (env().get('WEBGL_FORCE_F16_TEXTURES')) {\n throw new Error('GL context does not support color renderable half floats, yet ' +\n 'the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.');\n }\n }\n else {\n COLOR_BUFFER_FLOAT = 'EXT_color_buffer_float';\n if (webgl_util.hasExtension(this.gl, COLOR_BUFFER_FLOAT)) {\n this.colorBufferFloatExtension =\n this.gl.getExtension(COLOR_BUFFER_FLOAT);\n }\n else if (webgl_util.hasExtension(this.gl, COLOR_BUFFER_HALF_FLOAT)) {\n this.colorBufferHalfFloatExtension =\n this.gl.getExtension(COLOR_BUFFER_HALF_FLOAT);\n }\n else {\n throw new Error('GL context does not support color renderable floats');\n }\n }\n this.vertexBuffer = gpgpu_util.createVertexBuffer(this.gl);\n this.indexBuffer = gpgpu_util.createIndexBuffer(this.gl);\n this.framebuffer = webgl_util.createFramebuffer(this.gl);\n this.textureConfig =\n tex_util.getTextureConfig(this.gl, this.textureHalfFloatExtension);\n }\n get debug() {\n return env().getBool('DEBUG');\n }\n dispose() {\n if (this.disposed) {\n return;\n }\n if (this.program != null) {\n console.warn('Disposing a GPGPUContext that still has a bound WebGLProgram.' +\n ' This is probably a resource leak, delete the program with ' +\n 'GPGPUContext.deleteProgram before disposing.');\n }\n if (this.outputTexture != null) {\n console.warn('Disposing a GPGPUContext that still has a bound output matrix ' +\n 'texture. This is probably a resource leak, delete the output ' +\n 'matrix texture with GPGPUContext.deleteMatrixTexture before ' +\n 'disposing.');\n }\n const gl = this.gl;\n webgl_util.callAndCheck(gl, () => gl.finish());\n webgl_util.callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, null));\n webgl_util.callAndCheck(gl, () => gl.deleteFramebuffer(this.framebuffer));\n webgl_util.callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, null));\n webgl_util.callAndCheck(gl, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null));\n webgl_util.callAndCheck(gl, () => gl.deleteBuffer(this.indexBuffer));\n this.disposed = true;\n }\n createFloat32MatrixTexture(rows, columns) {\n this.throwIfDisposed();\n return gpgpu_util.createFloat32MatrixTexture(this.gl, rows, columns, this.textureConfig);\n }\n createFloat16MatrixTexture(rows, columns) {\n this.throwIfDisposed();\n return gpgpu_util.createFloat16MatrixTexture(this.gl, rows, columns, this.textureConfig);\n }\n createUnsignedBytesMatrixTexture(rows, columns) {\n this.throwIfDisposed();\n return gpgpu_util.createUnsignedBytesMatrixTexture(this.gl, rows, columns, this.textureConfig);\n }\n uploadPixelDataToTexture(texture, pixels) {\n this.throwIfDisposed();\n gpgpu_util.uploadPixelDataToTexture(this.gl, texture, pixels);\n }\n uploadDenseMatrixToTexture(texture, width, height, data) {\n this.throwIfDisposed();\n gpgpu_util.uploadDenseMatrixToTexture(this.gl, texture, width, height, data, this.textureConfig);\n }\n createFloat16PackedMatrixTexture(rows, columns) {\n this.throwIfDisposed();\n return gpgpu_util.createFloat16PackedMatrixTexture(this.gl, rows, columns, this.textureConfig);\n }\n createPackedMatrixTexture(rows, columns) {\n this.throwIfDisposed();\n return gpgpu_util.createPackedMatrixTexture(this.gl, rows, columns, this.textureConfig);\n }\n deleteMatrixTexture(texture) {\n this.throwIfDisposed();\n if (this.outputTexture === texture) {\n webgl_util.unbindColorTextureFromFramebuffer(this.gl, this.framebuffer);\n this.outputTexture = null;\n }\n webgl_util.callAndCheck(this.gl, () => this.gl.deleteTexture(texture));\n }\n downloadByteEncodedFloatMatrixFromOutputTexture(texture, rows, columns) {\n return this.downloadMatrixDriver(texture, () => gpgpu_util.downloadByteEncodedFloatMatrixFromOutputTexture(this.gl, rows, columns, this.textureConfig));\n }\n downloadPackedMatrixFromBuffer(buffer, batch, rows, columns, physicalRows, physicalCols) {\n return gpgpu_util.downloadPackedMatrixFromBuffer(this.gl, buffer, batch, rows, columns, physicalRows, physicalCols, this.textureConfig);\n }\n downloadFloat32MatrixFromBuffer(buffer, size) {\n return gpgpu_util.downloadFloat32MatrixFromBuffer(this.gl, buffer, size);\n }\n createBufferFromTexture(texture, rows, columns) {\n this.bindTextureToFrameBuffer(texture);\n const result = gpgpu_util.createBufferFromOutputTexture(this.gl, rows, columns, this.textureConfig);\n this.unbindTextureToFrameBuffer();\n return result;\n }\n createAndWaitForFence() {\n const fenceContext = this.createFence(this.gl);\n return this.pollFence(fenceContext);\n }\n createFence(gl) {\n let query;\n let isFencePassed;\n if (env().getBool('WEBGL_FENCE_API_ENABLED')) {\n const gl2 = gl;\n const sync = gl2.fenceSync(gl2.SYNC_GPU_COMMANDS_COMPLETE, 0);\n gl.flush();\n isFencePassed = () => {\n const status = gl2.clientWaitSync(sync, 0, 0);\n return status === gl2.ALREADY_SIGNALED ||\n status === gl2.CONDITION_SATISFIED;\n };\n query = sync;\n }\n else if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') > 0) {\n query = this.beginQuery();\n this.endQuery();\n isFencePassed = () => this.isQueryAvailable(query, env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION'));\n }\n else {\n // If we have no way to fence, return true immediately. This will fire in\n // WebGL 1.0 when there is no disjoint query timer. In this case, because\n // the fence passes immediately, we'll immediately ask for a download of\n // the texture, which will cause the UI thread to hang.\n isFencePassed = () => true;\n }\n return { query, isFencePassed };\n }\n downloadMatrixFromPackedTexture(texture, physicalRows, physicalCols) {\n return this.downloadMatrixDriver(texture, () => gpgpu_util.downloadMatrixFromPackedOutputTexture(this.gl, physicalRows, physicalCols));\n }\n createProgram(fragmentShader) {\n this.throwIfDisposed();\n const gl = this.gl;\n if (this.vertexShader == null) {\n this.vertexShader = gpgpu_util.createVertexShader(gl);\n }\n const program = webgl_util.createProgram(gl);\n webgl_util.callAndCheck(gl, () => gl.attachShader(program, this.vertexShader));\n webgl_util.callAndCheck(gl, () => gl.attachShader(program, fragmentShader));\n webgl_util.linkProgram(gl, program);\n const program2 = Object.assign(program, { vao: this.createVertexArray() });\n if (this.debug) {\n webgl_util.validateProgram(gl, program2);\n }\n return program2;\n }\n buildVao(program) {\n this.setProgram(program);\n this.bindVertexArray(program.vao);\n const gl = this.gl;\n // Bind index buffer, and vertex buffers based on program attrib\n // locations.\n webgl_util.callAndCheck(gl, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer));\n gpgpu_util.bindVertexProgramAttributeStreams(gl, program, this.vertexBuffer);\n }\n deleteProgram(program) {\n this.throwIfDisposed();\n if (program === this.program) {\n this.program = null;\n }\n if (program != null) {\n webgl_util.callAndCheck(this.gl, () => this.gl.deleteProgram(program));\n this.deleteVertexArray(program.vao);\n }\n }\n setProgram(program) {\n this.throwIfDisposed();\n this.program = program;\n if (this.program != null) {\n if (this.debug) {\n webgl_util.validateProgram(this.gl, this.program);\n }\n }\n webgl_util.callAndCheck(this.gl, () => this.gl.useProgram(program));\n }\n getUniformLocation(program, uniformName, shouldThrow = true) {\n this.throwIfDisposed();\n if (shouldThrow) {\n return webgl_util.getProgramUniformLocationOrThrow(this.gl, program, uniformName);\n }\n else {\n return webgl_util.getProgramUniformLocation(this.gl, program, uniformName);\n }\n }\n getAttributeLocation(program, attribute) {\n this.throwIfDisposed();\n return webgl_util.callAndCheck(this.gl, () => this.gl.getAttribLocation(program, attribute));\n }\n getUniformLocationNoThrow(program, uniformName) {\n this.throwIfDisposed();\n return this.gl.getUniformLocation(program, uniformName);\n }\n setInputMatrixTexture(inputMatrixTexture, uniformLocation, textureUnit) {\n this.throwIfDisposed();\n this.throwIfNoProgram();\n webgl_util.bindTextureToProgramUniformSampler(this.gl, inputMatrixTexture, uniformLocation, textureUnit);\n }\n setOutputMatrixTexture(outputMatrixTexture, rows, columns) {\n this.setOutputMatrixTextureDriver(outputMatrixTexture, columns, rows);\n }\n setOutputPackedMatrixTexture(outputPackedMatrixTexture, rows, columns) {\n this.throwIfDisposed();\n const [width, height] = tex_util.getPackedMatrixTextureShapeWidthHeight(rows, columns);\n this.setOutputMatrixTextureDriver(outputPackedMatrixTexture, width, height);\n }\n setOutputMatrixWriteRegion(startRow, numRows, startColumn, numColumns) {\n this.setOutputMatrixWriteRegionDriver(startColumn, startRow, numColumns, numRows);\n }\n setOutputPackedMatrixWriteRegion(startRow, numRows, startColumn, numColumns) {\n throw new Error('setOutputPackedMatrixWriteRegion not implemented.');\n }\n debugValidate() {\n if (this.program != null) {\n webgl_util.validateProgram(this.gl, this.program);\n }\n webgl_util.validateFramebuffer(this.gl);\n }\n executeProgram() {\n this.throwIfDisposed();\n this.throwIfNoProgram();\n const gl = this.gl;\n if (this.debug) {\n const boundVao = this.getVertexArray();\n console.assert(boundVao === this.program.vao, 'VAO changed between setProgram and executeProgram!');\n this.debugValidate();\n }\n webgl_util.callAndCheck(gl, () => gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0));\n }\n blockUntilAllProgramsCompleted() {\n this.throwIfDisposed();\n webgl_util.callAndCheck(this.gl, () => this.gl.finish());\n }\n getQueryTimerExtension() {\n if (this.disjointQueryTimerExtension == null) {\n this.disjointQueryTimerExtension =\n webgl_util.getExtensionOrThrow(this.gl, env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') === 2 ?\n 'EXT_disjoint_timer_query_webgl2' :\n 'EXT_disjoint_timer_query');\n }\n return this.disjointQueryTimerExtension;\n }\n getQueryTimerExtensionWebGL2() {\n return this.getQueryTimerExtension();\n }\n getQueryTimerExtensionWebGL1() {\n return this.getQueryTimerExtension();\n }\n beginQuery() {\n if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') === 2) {\n const gl2 = this.gl;\n const ext = this.getQueryTimerExtensionWebGL2();\n const query = gl2.createQuery();\n gl2.beginQuery(ext.TIME_ELAPSED_EXT, query);\n return query;\n }\n const ext = this.getQueryTimerExtensionWebGL1();\n const query = ext.createQueryEXT();\n ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query);\n return query;\n }\n endQuery() {\n if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION') === 2) {\n const gl2 = this.gl;\n const ext = this.getQueryTimerExtensionWebGL2();\n gl2.endQuery(ext.TIME_ELAPSED_EXT);\n return;\n }\n const ext = this.getQueryTimerExtensionWebGL1();\n ext.endQueryEXT(ext.TIME_ELAPSED_EXT);\n }\n async waitForQueryAndGetTime(query) {\n await util.repeatedTry(() => this.disposed || // while testing contexts are created / disposed\n // in rapid succession, so without this check we\n // may poll for the query timer indefinitely\n this.isQueryAvailable(query, env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION')));\n return this.getQueryTime(query, env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION'));\n }\n getQueryTime(query, queryTimerVersion) {\n if (queryTimerVersion === 0) {\n return null;\n }\n if (queryTimerVersion === 2) {\n const gl2 = this.gl;\n const timeElapsedNanos = gl2.getQueryParameter(query, gl2.QUERY_RESULT);\n // Return milliseconds.\n return timeElapsedNanos / 1000000;\n }\n else {\n const ext = this.getQueryTimerExtensionWebGL1();\n const timeElapsedNanos = ext.getQueryObjectEXT(query, ext.QUERY_RESULT_EXT);\n // Return milliseconds.\n return timeElapsedNanos / 1000000;\n }\n }\n isQueryAvailable(query, queryTimerVersion) {\n if (queryTimerVersion === 0) {\n return true;\n }\n if (queryTimerVersion === 2) {\n const gl2 = this.gl;\n const ext = this.getQueryTimerExtensionWebGL2();\n const available = gl2.getQueryParameter(query, gl2.QUERY_RESULT_AVAILABLE);\n if (this.disjoint == null) {\n this.disjoint = this.gl.getParameter(ext.GPU_DISJOINT_EXT);\n }\n return available && !this.disjoint;\n }\n else {\n const ext = this.getQueryTimerExtensionWebGL1();\n const available = ext.getQueryObjectEXT(query, ext.QUERY_RESULT_AVAILABLE_EXT);\n if (this.disjoint == null) {\n this.disjoint = this.gl.getParameter(ext.GPU_DISJOINT_EXT);\n }\n return available && !this.disjoint;\n }\n }\n pollFence(fenceContext) {\n return new Promise(resolve => {\n this.addItemToPoll(() => fenceContext.isFencePassed(), () => resolve());\n });\n }\n pollItems() {\n // Find the last query that has finished.\n const index = linearSearchLastTrue(this.itemsToPoll.map(x => x.isDoneFn));\n for (let i = 0; i <= index; ++i) {\n const { resolveFn } = this.itemsToPoll[i];\n resolveFn();\n }\n this.itemsToPoll = this.itemsToPoll.slice(index + 1);\n }\n addItemToPoll(isDoneFn, resolveFn) {\n this.itemsToPoll.push({ isDoneFn, resolveFn });\n if (this.itemsToPoll.length > 1) {\n // We already have a running loop that polls.\n return;\n }\n // Start a new loop that polls.\n let scheduleFn = undefined;\n if ('setTimeoutCustom' in env().platform) {\n scheduleFn = env().platform.setTimeoutCustom.bind(env().platform);\n }\n util.repeatedTry(() => {\n this.pollItems();\n // End the loop if no more items to poll.\n return this.itemsToPoll.length === 0;\n }, () => 0, null, scheduleFn);\n }\n bindTextureToFrameBuffer(texture) {\n this.throwIfDisposed();\n webgl_util.bindColorTextureToFramebuffer(this.gl, texture, this.framebuffer);\n if (this.debug) {\n webgl_util.validateFramebuffer(this.gl);\n }\n }\n unbindTextureToFrameBuffer() {\n if (this.outputTexture != null) {\n webgl_util.bindColorTextureToFramebuffer(this.gl, this.outputTexture, this.framebuffer);\n if (this.debug) {\n webgl_util.validateFramebuffer(this.gl);\n }\n }\n else {\n webgl_util.unbindColorTextureFromFramebuffer(this.gl, this.framebuffer);\n }\n }\n downloadMatrixDriver(texture, downloadAndDecode) {\n this.bindTextureToFrameBuffer(texture);\n const result = downloadAndDecode();\n this.unbindTextureToFrameBuffer();\n return result;\n }\n setOutputMatrixTextureDriver(outputMatrixTextureMaybePacked, width, height) {\n this.throwIfDisposed();\n const gl = this.gl;\n webgl_util.bindColorTextureToFramebuffer(gl, outputMatrixTextureMaybePacked, this.framebuffer);\n if (this.debug) {\n webgl_util.validateFramebuffer(gl);\n }\n this.outputTexture = outputMatrixTextureMaybePacked;\n webgl_util.callAndCheck(gl, () => gl.viewport(0, 0, width, height));\n webgl_util.callAndCheck(gl, () => gl.scissor(0, 0, width, height));\n }\n setOutputMatrixWriteRegionDriver(x, y, width, height) {\n this.throwIfDisposed();\n webgl_util.callAndCheck(this.gl, () => this.gl.scissor(x, y, width, height));\n }\n throwIfDisposed() {\n if (this.disposed) {\n throw new Error('Attempted to use disposed GPGPUContext.');\n }\n }\n throwIfNoProgram() {\n if (this.program == null) {\n throw new Error('No GPU program is currently set.');\n }\n }\n}\n/**\n * Finds the index of the last true element using linear search.\n * Note: We can't do binary search because Chrome expects us to explicitly\n * test all fences before download:\n * https://github.com/tensorflow/tfjs/issues/1145\n */\nexport function linearSearchLastTrue(arr) {\n let i = 0;\n for (; i < arr.length; ++i) {\n const isDone = arr[i]();\n if (!isDone) {\n break;\n }\n }\n return i - 1;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3BncHVfY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvZ3BncHVfY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUF5QixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZUFBZSxFQUFFLGVBQWUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEtBQUssVUFBVSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEtBQUssUUFBUSxNQUFNLFlBQVksQ0FBQztBQUd2QyxPQUFPLEtBQUssVUFBVSxNQUFNLGNBQWMsQ0FBQztBQWEzQyxNQUFNLE9BQU8sWUFBWTtJQXdCdkIsWUFBWSxFQUEwQjtRQVp0QyxrQkFBYSxHQUFzQixJQUFJLENBQUM7UUFDeEMsWUFBTyxHQUE2QixJQUFJLENBQUM7UUFDakMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQThoQmpCLGdCQUFXLEdBQWUsRUFBRSxDQUFDO1FBbmhCbkMsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtZQUNkLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2IsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoQzthQUFNO1lBQ0wsSUFBSSxDQUFDLEVBQUUsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdEM7UUFDRCxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUViLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQyxNQUFNLEdBQUcsR0FBRyxFQUE0QixDQUFDO1lBQ3pD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LENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2VudiwgUGl4ZWxEYXRhLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2dldFdlYkdMQ29udGV4dCwgc2V0V2ViR0xDb250ZXh0fSBmcm9tICcuL2NhbnZhc191dGlsJztcbmltcG9ydCAqIGFzIGdwZ3B1X3V0aWwgZnJvbSAnLi9ncGdwdV91dGlsJztcbmltcG9ydCAqIGFzIHRleF91dGlsIGZyb20gJy4vdGV4X3V0aWwnO1xuaW1wb3J0IHtUZXh0dXJlLCBUZXh0dXJlQ29uZmlnfSBmcm9tICcuL3RleF91dGlsJztcbmltcG9ydCB7V2ViR0wxRGlzam9pbnRRdWVyeVRpbWVyRXh0ZW5zaW9uLCBXZWJHTDJEaXNqb2ludFF1ZXJ5VGltZXJFeHRlbnNpb24sIFdlYkdMUGFyYWxsZWxDb21waWxhdGlvbkV4dGVuc2lvbn0gZnJvbSAnLi93ZWJnbF90eXBlcyc7XG5pbXBvcnQgKiBhcyB3ZWJnbF91dGlsIGZyb20gJy4vd2ViZ2xfdXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVuY2VDb250ZXh0IHtcbiAgcXVlcnk6IFdlYkdMUXVlcnl8V2ViR0xTeW5jO1xuICBpc0ZlbmNlUGFzc2VkKCk6IGJvb2xlYW47XG59XG5cbnR5cGUgV2ViR0xWYW8gPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0fFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR1BHUFVDb250ZXh0UHJvZ3JhbSBleHRlbmRzIFdlYkdMUHJvZ3JhbSB7XG4gIHZhbzogV2ViR0xWYW87XG59XG5cbmV4cG9ydCBjbGFzcyBHUEdQVUNvbnRleHQge1xuICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0O1xuICB0ZXh0dXJlRmxvYXRFeHRlbnNpb246IHt9O1xuICB0ZXh0dXJlSGFsZkZsb2F0RXh0ZW5zaW9uOiB7fTtcbiAgY29sb3JCdWZmZXJGbG9hdEV4dGVuc2lvbjoge307XG4gIGNvbG9yQnVmZmVySGFsZkZsb2F0RXh0ZW5zaW9uOiB7fTtcbiAgZGlzam9pbnRRdWVyeVRpbWVyRXh0ZW5zaW9uOiBXZWJHTDJEaXNqb2ludFF1ZXJ5VGltZXJFeHRlbnNpb258XG4gICAgICBXZWJHTDFEaXNqb2ludFF1ZXJ5VGltZXJFeHRlbnNpb247XG4gIHBhcmFsbGVsQ29tcGlsYXRpb25FeHRlbnNpb246IFdlYkdMUGFyYWxsZWxDb21waWxhdGlvbkV4dGVuc2lvbjtcbiAgdmVydGV4QnVmZmVyOiBXZWJHTEJ1ZmZlcjtcbiAgaW5kZXhCdWZmZXI6IFdlYkdMQnVmZmVyO1xuICBmcmFtZWJ1ZmZlcjogV2ViR0xGcmFtZWJ1ZmZlcjtcbiAgb3V0cHV0VGV4dHVyZTogV2ViR0xUZXh0dXJlfG51bGwgPSBudWxsO1xuICBwcm9ncmFtOiBHUEdQVUNvbnRleHRQcm9ncmFtfG51bGwgPSBudWxsO1xuICBwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG4gIHByaXZhdGUgZGlzam9pbnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgdmVydGV4U2hhZGVyOiBXZWJHTFNoYWRlcjtcbiAgdGV4dHVyZUNvbmZpZzogVGV4dHVyZUNvbmZpZztcblxuICBjcmVhdGVWZXJ0ZXhBcnJheTogKCkgPT4gV2ViR0xWYW8gfCBudWxsO1xuICBiaW5kVmVydGV4QXJyYXk6ICh2YW86IFdlYkdMVmFvfG51bGwpID0+IHZvaWQ7XG4gIGRlbGV0ZVZlcnRleEFycmF5OiAodmFvOiBXZWJHTFZhb3xudWxsKSA9PiB2b2lkO1xuICBnZXRWZXJ0ZXhBcnJheTogKCkgPT4gV2ViR0xWYW8gfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGdsPzogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgY29uc3QgZ2xWZXJzaW9uID0gZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJyk7XG4gICAgaWYgKGdsICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZ2wgPSBnbDtcbiAgICAgIHNldFdlYkdMQ29udGV4dChnbFZlcnNpb24sIGdsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nbCA9IGdldFdlYkdMQ29udGV4dChnbFZlcnNpb24pO1xuICAgIH1cbiAgICBnbCA9IHRoaXMuZ2w7XG5cbiAgICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykgPT09IDIpIHtcbiAgICAgIGNvbnN0IGdsMiA9IGdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ7XG4gICAgICB0aGlzLmNyZWF0ZVZlcnRleEFycmF5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soZ2wyLCAoKSA9PiBnbDIuY3JlYXRlVmVydGV4QXJyYXkoKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5iaW5kVmVydGV4QXJyYXkgPSAodmFvOiBXZWJHTFZhb3xudWxsKSA9PiB7XG4gICAgICAgIHJldHVybiB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgICAgIGdsMiwgKCkgPT4gZ2wyLmJpbmRWZXJ0ZXhBcnJheSh2YW8gYXMgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdCkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZGVsZXRlVmVydGV4QXJyYXkgPSAodmFvOiBXZWJHTFZhb3xudWxsKSA9PiB7XG4gICAgICAgIHJldHVybiB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgICAgIGdsMiwgKCkgPT4gZ2wyLmRlbGV0ZVZlcnRleEFycmF5KHZhbyBhcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0KSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRWZXJ0ZXhBcnJheSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKFxuICAgICAgICAgICAgZ2wyLCAoKSA9PiBnbDIuZ2V0UGFyYW1ldGVyKGdsMi5WRVJURVhfQVJSQVlfQklORElORykpO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGdsICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGV4dCA9IGdsLmdldEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcbiAgICAgIGlmIChleHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQWxsIFdlYkdMMSBpbXBsZW1lbnRhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIG9mZmVyJyArXG4gICAgICAgICAgICAnIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0LicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVWZXJ0ZXhBcnJheSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5iaW5kVmVydGV4QXJyYXkgPSAodmFvOiBXZWJHTFZhb3xudWxsKSA9PiB7XG4gICAgICAgIHJldHVybiB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgICAgIGdsLCAoKSA9PiBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbyBhcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5kZWxldGVWZXJ0ZXhBcnJheSA9ICh2YW86IFdlYkdMVmFvfG51bGwpID0+IHtcbiAgICAgICAgcmV0dXJuIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKFxuICAgICAgICAgICAgZ2wsXG4gICAgICAgICAgICAoKSA9PiBleHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvIGFzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldFZlcnRleEFycmF5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICAgICAgICBnbCwgKCkgPT4gZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gV2ViR0wgMi4wIGVuYWJsZXMgdGV4dHVyZSBmbG9hdHMgd2l0aG91dCBhbiBleHRlbnNpb24uXG4gICAgbGV0IENPTE9SX0JVRkZFUl9GTE9BVCA9ICdXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQnO1xuICAgIGNvbnN0IENPTE9SX0JVRkZFUl9IQUxGX0ZMT0FUID0gJ0VYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCc7XG4gICAgdGhpcy5wYXJhbGxlbENvbXBpbGF0aW9uRXh0ZW5zaW9uID1cbiAgICAgICAgdGhpcy5nbC5nZXRFeHRlbnNpb24oJ0tIUl9wYXJhbGxlbF9zaGFkZXJfY29tcGlsZScpO1xuICAgIGlmIChlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX1ZFUlNJT04nKSA9PT0gMSkge1xuICAgICAgY29uc3QgVEVYVFVSRV9GTE9BVCA9ICdPRVNfdGV4dHVyZV9mbG9hdCc7XG4gICAgICBjb25zdCBURVhUVVJFX0hBTEZfRkxPQVQgPSAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCc7XG5cbiAgICAgIHRoaXMudGV4dHVyZUZsb2F0RXh0ZW5zaW9uID1cbiAgICAgICAgICB3ZWJnbF91dGlsLmdldEV4dGVuc2lvbk9yVGhyb3codGhpcy5nbCwgVEVYVFVSRV9GTE9BVCk7XG4gICAgICBpZiAod2ViZ2xfdXRpbC5oYXNFeHRlbnNpb24odGhpcy5nbCwgVEVYVFVSRV9IQUxGX0ZMT0FUKSkge1xuICAgICAgICB0aGlzLnRleHR1cmVIYWxmRmxvYXRFeHRlbnNpb24gPVxuICAgICAgICAgICAgd2ViZ2xfdXRpbC5nZXRFeHRlbnNpb25PclRocm93KHRoaXMuZ2wsIFRFWFRVUkVfSEFMRl9GTE9BVCk7XG4gICAgICB9IGVsc2UgaWYgKGVudigpLmdldCgnV0VCR0xfRk9SQ0VfRjE2X1RFWFRVUkVTJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0dMIGNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBoYWxmIGZsb2F0IHRleHR1cmVzLCB5ZXQgdGhlICcgK1xuICAgICAgICAgICAgJ2Vudmlyb25tZW50IGZsYWcgV0VCR0xfRk9SQ0VfRjE2X1RFWFRVUkVTIGlzIHNldCB0byB0cnVlLicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbG9yQnVmZmVyRmxvYXRFeHRlbnNpb24gPSB0aGlzLmdsLmdldEV4dGVuc2lvbihDT0xPUl9CVUZGRVJfRkxPQVQpO1xuICAgICAgaWYgKHdlYmdsX3V0aWwuaGFzRXh0ZW5zaW9uKHRoaXMuZ2wsIENPTE9SX0JVRkZFUl9IQUxGX0ZMT0FUKSkge1xuICAgICAgICB0aGlzLmNvbG9yQnVmZmVySGFsZkZsb2F0RXh0ZW5zaW9uID1cbiAgICAgICAgICAgIHdlYmdsX3V0aWwuZ2V0RXh0ZW5zaW9uT3JUaHJvdyh0aGlzLmdsLCBDT0xPUl9CVUZGRVJfSEFMRl9GTE9BVCk7XG4gICAgICB9IGVsc2UgaWYgKGVudigpLmdldCgnV0VCR0xfRk9SQ0VfRjE2X1RFWFRVUkVTJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0dMIGNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBjb2xvciByZW5kZXJhYmxlIGhhbGYgZmxvYXRzLCB5ZXQgJyArXG4gICAgICAgICAgICAndGhlIGVudmlyb25tZW50IGZsYWcgV0VCR0xfRk9SQ0VfRjE2X1RFWFRVUkVTIGlzIHNldCB0byB0cnVlLicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBDT0xPUl9CVUZGRVJfRkxPQVQgPSAnRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCc7XG4gICAgICBpZiAod2ViZ2xfdXRpbC5oYXNFeHRlbnNpb24odGhpcy5nbCwgQ09MT1JfQlVGRkVSX0ZMT0FUKSkge1xuICAgICAgICB0aGlzLmNvbG9yQnVmZmVyRmxvYXRFeHRlbnNpb24gPVxuICAgICAgICAgICAgdGhpcy5nbC5nZXRFeHRlbnNpb24oQ09MT1JfQlVGRkVSX0ZMT0FUKTtcbiAgICAgIH0gZWxzZSBpZiAod2ViZ2xfdXRpbC5oYXNFeHRlbnNpb24odGhpcy5nbCwgQ09MT1JfQlVGRkVSX0hBTEZfRkxPQVQpKSB7XG4gICAgICAgIHRoaXMuY29sb3JCdWZmZXJIYWxmRmxvYXRFeHRlbnNpb24gPVxuICAgICAgICAgICAgdGhpcy5nbC5nZXRFeHRlbnNpb24oQ09MT1JfQlVGRkVSX0hBTEZfRkxPQVQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHTCBjb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgY29sb3IgcmVuZGVyYWJsZSBmbG9hdHMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdwZ3B1X3V0aWwuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZ2wpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBncGdwdV91dGlsLmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuZ2wpO1xuICAgIHRoaXMuZnJhbWVidWZmZXIgPSB3ZWJnbF91dGlsLmNyZWF0ZUZyYW1lYnVmZmVyKHRoaXMuZ2wpO1xuXG4gICAgdGhpcy50ZXh0dXJlQ29uZmlnID1cbiAgICAgICAgdGV4X3V0aWwuZ2V0VGV4dHVyZUNvbmZpZyh0aGlzLmdsLCB0aGlzLnRleHR1cmVIYWxmRmxvYXRFeHRlbnNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVidWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGVudigpLmdldEJvb2woJ0RFQlVHJyk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9ncmFtICE9IG51bGwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnRGlzcG9zaW5nIGEgR1BHUFVDb250ZXh0IHRoYXQgc3RpbGwgaGFzIGEgYm91bmQgV2ViR0xQcm9ncmFtLicgK1xuICAgICAgICAgICcgVGhpcyBpcyBwcm9iYWJseSBhIHJlc291cmNlIGxlYWssIGRlbGV0ZSB0aGUgcHJvZ3JhbSB3aXRoICcgK1xuICAgICAgICAgICdHUEdQVUNvbnRleHQuZGVsZXRlUHJvZ3JhbSBiZWZvcmUgZGlzcG9zaW5nLicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vdXRwdXRUZXh0dXJlICE9IG51bGwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnRGlzcG9zaW5nIGEgR1BHUFVDb250ZXh0IHRoYXQgc3RpbGwgaGFzIGEgYm91bmQgb3V0cHV0IG1hdHJpeCAnICtcbiAgICAgICAgICAndGV4dHVyZS4gIFRoaXMgaXMgcHJvYmFibHkgYSByZXNvdXJjZSBsZWFrLCBkZWxldGUgdGhlIG91dHB1dCAnICtcbiAgICAgICAgICAnbWF0cml4IHRleHR1cmUgd2l0aCBHUEdQVUNvbnRleHQuZGVsZXRlTWF0cml4VGV4dHVyZSBiZWZvcmUgJyArXG4gICAgICAgICAgJ2Rpc3Bvc2luZy4nKTtcbiAgICB9XG4gICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC5maW5pc2goKSk7XG4gICAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCkpO1xuICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKSk7XG4gICAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBudWxsKSk7XG4gICAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICAgIGdsLCAoKSA9PiBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBudWxsKSk7XG4gICAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKSk7XG4gICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRmxvYXQzMk1hdHJpeFRleHR1cmUocm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIpOiBUZXh0dXJlIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIHJldHVybiBncGdwdV91dGlsLmNyZWF0ZUZsb2F0MzJNYXRyaXhUZXh0dXJlKFxuICAgICAgICB0aGlzLmdsLCByb3dzLCBjb2x1bW5zLCB0aGlzLnRleHR1cmVDb25maWcpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUZsb2F0MTZNYXRyaXhUZXh0dXJlKHJvd3M6IG51bWJlciwgY29sdW1uczogbnVtYmVyKTogVGV4dHVyZSB7XG4gICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICByZXR1cm4gZ3BncHVfdXRpbC5jcmVhdGVGbG9hdDE2TWF0cml4VGV4dHVyZShcbiAgICAgICAgdGhpcy5nbCwgcm93cywgY29sdW1ucywgdGhpcy50ZXh0dXJlQ29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVVbnNpZ25lZEJ5dGVzTWF0cml4VGV4dHVyZShyb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcik6XG4gICAgICBUZXh0dXJlIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIHJldHVybiBncGdwdV91dGlsLmNyZWF0ZVVuc2lnbmVkQnl0ZXNNYXRyaXhUZXh0dXJlKFxuICAgICAgICB0aGlzLmdsLCByb3dzLCBjb2x1bW5zLCB0aGlzLnRleHR1cmVDb25maWcpO1xuICB9XG5cbiAgcHVibGljIHVwbG9hZFBpeGVsRGF0YVRvVGV4dHVyZShcbiAgICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZSxcbiAgICAgIHBpeGVsczogUGl4ZWxEYXRhfEltYWdlRGF0YXxIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fFxuICAgICAgSW1hZ2VCaXRtYXApIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIGdwZ3B1X3V0aWwudXBsb2FkUGl4ZWxEYXRhVG9UZXh0dXJlKHRoaXMuZ2wsIHRleHR1cmUsIHBpeGVscyk7XG4gIH1cblxuICBwdWJsaWMgdXBsb2FkRGVuc2VNYXRyaXhUb1RleHR1cmUoXG4gICAgICB0ZXh0dXJlOiBXZWJHTFRleHR1cmUsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkYXRhOiBUeXBlZEFycmF5KSB7XG4gICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICBncGdwdV91dGlsLnVwbG9hZERlbnNlTWF0cml4VG9UZXh0dXJlKFxuICAgICAgICB0aGlzLmdsLCB0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCBkYXRhLCB0aGlzLnRleHR1cmVDb25maWcpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUZsb2F0MTZQYWNrZWRNYXRyaXhUZXh0dXJlKHJvd3M6IG51bWJlciwgY29sdW1uczogbnVtYmVyKTpcbiAgICAgIFRleHR1cmUge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgcmV0dXJuIGdwZ3B1X3V0aWwuY3JlYXRlRmxvYXQxNlBhY2tlZE1hdHJpeFRleHR1cmUoXG4gICAgICAgIHRoaXMuZ2wsIHJvd3MsIGNvbHVtbnMsIHRoaXMudGV4dHVyZUNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlUGFja2VkTWF0cml4VGV4dHVyZShyb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcik6IFRleHR1cmUge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgcmV0dXJuIGdwZ3B1X3V0aWwuY3JlYXRlUGFja2VkTWF0cml4VGV4dHVyZShcbiAgICAgICAgdGhpcy5nbCwgcm93cywgY29sdW1ucywgdGhpcy50ZXh0dXJlQ29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVNYXRyaXhUZXh0dXJlKHRleHR1cmU6IFdlYkdMVGV4dHVyZSkge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgaWYgKHRoaXMub3V0cHV0VGV4dHVyZSA9PT0gdGV4dHVyZSkge1xuICAgICAgd2ViZ2xfdXRpbC51bmJpbmRDb2xvclRleHR1cmVGcm9tRnJhbWVidWZmZXIodGhpcy5nbCwgdGhpcy5mcmFtZWJ1ZmZlcik7XG4gICAgICB0aGlzLm91dHB1dFRleHR1cmUgPSBudWxsO1xuICAgIH1cbiAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayh0aGlzLmdsLCAoKSA9PiB0aGlzLmdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSkpO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkQnl0ZUVuY29kZWRGbG9hdE1hdHJpeEZyb21PdXRwdXRUZXh0dXJlKFxuICAgICAgdGV4dHVyZTogV2ViR0xUZXh0dXJlLCByb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZG93bmxvYWRNYXRyaXhEcml2ZXIoXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgICgpID0+IGdwZ3B1X3V0aWwuZG93bmxvYWRCeXRlRW5jb2RlZEZsb2F0TWF0cml4RnJvbU91dHB1dFRleHR1cmUoXG4gICAgICAgICAgICB0aGlzLmdsLCByb3dzLCBjb2x1bW5zLCB0aGlzLnRleHR1cmVDb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZFBhY2tlZE1hdHJpeEZyb21CdWZmZXIoXG4gICAgICBidWZmZXI6IFdlYkdMQnVmZmVyLCBiYXRjaDogbnVtYmVyLCByb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcixcbiAgICAgIHBoeXNpY2FsUm93czogbnVtYmVyLCBwaHlzaWNhbENvbHM6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gICAgcmV0dXJuIGdwZ3B1X3V0aWwuZG93bmxvYWRQYWNrZWRNYXRyaXhGcm9tQnVmZmVyKFxuICAgICAgICB0aGlzLmdsLCBidWZmZXIsIGJhdGNoLCByb3dzLCBjb2x1bW5zLCBwaHlzaWNhbFJvd3MsIHBoeXNpY2FsQ29scyxcbiAgICAgICAgdGhpcy50ZXh0dXJlQ29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZEZsb2F0MzJNYXRyaXhGcm9tQnVmZmVyKGJ1ZmZlcjogV2ViR0xCdWZmZXIsIHNpemU6IG51bWJlcik6XG4gICAgICBGbG9hdDMyQXJyYXkge1xuICAgIHJldHVybiBncGdwdV91dGlsLmRvd25sb2FkRmxvYXQzMk1hdHJpeEZyb21CdWZmZXIodGhpcy5nbCwgYnVmZmVyLCBzaXplKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVCdWZmZXJGcm9tVGV4dHVyZShcbiAgICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZSwgcm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIpOiBXZWJHTEJ1ZmZlciB7XG4gICAgdGhpcy5iaW5kVGV4dHVyZVRvRnJhbWVCdWZmZXIodGV4dHVyZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gZ3BncHVfdXRpbC5jcmVhdGVCdWZmZXJGcm9tT3V0cHV0VGV4dHVyZShcbiAgICAgICAgdGhpcy5nbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LCByb3dzLCBjb2x1bW5zLCB0aGlzLnRleHR1cmVDb25maWcpO1xuICAgIHRoaXMudW5iaW5kVGV4dHVyZVRvRnJhbWVCdWZmZXIoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUFuZFdhaXRGb3JGZW5jZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmZW5jZUNvbnRleHQgPSB0aGlzLmNyZWF0ZUZlbmNlKHRoaXMuZ2wpO1xuICAgIHJldHVybiB0aGlzLnBvbGxGZW5jZShmZW5jZUNvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGZW5jZShnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KTogRmVuY2VDb250ZXh0IHtcbiAgICBsZXQgcXVlcnk6IFdlYkdMUXVlcnl8V2ViR0xTeW5jO1xuICAgIGxldCBpc0ZlbmNlUGFzc2VkOiAoKSA9PiBib29sZWFuO1xuXG4gICAgaWYgKGVudigpLmdldEJvb2woJ1dFQkdMX0ZFTkNFX0FQSV9FTkFCTEVEJykpIHtcbiAgICAgIGNvbnN0IGdsMiA9IGdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ7XG5cbiAgICAgIGNvbnN0IHN5bmMgPSBnbDIuZmVuY2VTeW5jKGdsMi5TWU5DX0dQVV9DT01NQU5EU19DT01QTEVURSwgMCk7XG4gICAgICBnbC5mbHVzaCgpO1xuXG4gICAgICBpc0ZlbmNlUGFzc2VkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBnbDIuY2xpZW50V2FpdFN5bmMoc3luYywgMCwgMCk7XG4gICAgICAgIHJldHVybiBzdGF0dXMgPT09IGdsMi5BTFJFQURZX1NJR05BTEVEIHx8XG4gICAgICAgICAgICBzdGF0dXMgPT09IGdsMi5DT05ESVRJT05fU0FUSVNGSUVEO1xuICAgICAgfTtcblxuICAgICAgcXVlcnkgPSBzeW5jO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGVudigpLmdldE51bWJlcignV0VCR0xfRElTSk9JTlRfUVVFUllfVElNRVJfRVhURU5TSU9OX1ZFUlNJT04nKSA+IDApIHtcbiAgICAgIHF1ZXJ5ID0gdGhpcy5iZWdpblF1ZXJ5KCk7XG4gICAgICB0aGlzLmVuZFF1ZXJ5KCk7XG4gICAgICBpc0ZlbmNlUGFzc2VkID0gKCkgPT4gdGhpcy5pc1F1ZXJ5QXZhaWxhYmxlKFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIGVudigpLmdldE51bWJlcignV0VCR0xfRElTSk9JTlRfUVVFUllfVElNRVJfRVhURU5TSU9OX1ZFUlNJT04nKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgbm8gd2F5IHRvIGZlbmNlLCByZXR1cm4gdHJ1ZSBpbW1lZGlhdGVseS4gVGhpcyB3aWxsIGZpcmUgaW5cbiAgICAgIC8vIFdlYkdMIDEuMCB3aGVuIHRoZXJlIGlzIG5vIGRpc2pvaW50IHF1ZXJ5IHRpbWVyLiBJbiB0aGlzIGNhc2UsIGJlY2F1c2VcbiAgICAgIC8vIHRoZSBmZW5jZSBwYXNzZXMgaW1tZWRpYXRlbHksIHdlJ2xsIGltbWVkaWF0ZWx5IGFzayBmb3IgYSBkb3dubG9hZCBvZlxuICAgICAgLy8gdGhlIHRleHR1cmUsIHdoaWNoIHdpbGwgY2F1c2UgdGhlIFVJIHRocmVhZCB0byBoYW5nLlxuICAgICAgaXNGZW5jZVBhc3NlZCA9ICgpID0+IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtxdWVyeSwgaXNGZW5jZVBhc3NlZH07XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRNYXRyaXhGcm9tUGFja2VkVGV4dHVyZShcbiAgICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZSwgcGh5c2ljYWxSb3dzOiBudW1iZXIsXG4gICAgICBwaHlzaWNhbENvbHM6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZG93bmxvYWRNYXRyaXhEcml2ZXIoXG4gICAgICAgIHRleHR1cmUsXG4gICAgICAgICgpID0+IGdwZ3B1X3V0aWwuZG93bmxvYWRNYXRyaXhGcm9tUGFja2VkT3V0cHV0VGV4dHVyZShcbiAgICAgICAgICAgIHRoaXMuZ2wsIHBoeXNpY2FsUm93cywgcGh5c2ljYWxDb2xzKSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlUHJvZ3JhbShmcmFnbWVudFNoYWRlcjogV2ViR0xTaGFkZXIpOiBHUEdQVUNvbnRleHRQcm9ncmFtIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICBpZiAodGhpcy52ZXJ0ZXhTaGFkZXIgPT0gbnVsbCkge1xuICAgICAgdGhpcy52ZXJ0ZXhTaGFkZXIgPSBncGdwdV91dGlsLmNyZWF0ZVZlcnRleFNoYWRlcihnbCk7XG4gICAgfVxuICAgIGNvbnN0IHByb2dyYW06IFdlYkdMUHJvZ3JhbSA9IHdlYmdsX3V0aWwuY3JlYXRlUHJvZ3JhbShnbCk7XG4gICAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICAgIGdsLCAoKSA9PiBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdGhpcy52ZXJ0ZXhTaGFkZXIpKTtcbiAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKSk7XG4gICAgd2ViZ2xfdXRpbC5saW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSk7XG5cbiAgICBjb25zdCBwcm9ncmFtMiA9IE9iamVjdC5hc3NpZ24ocHJvZ3JhbSwge3ZhbzogdGhpcy5jcmVhdGVWZXJ0ZXhBcnJheSgpfSk7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIHdlYmdsX3V0aWwudmFsaWRhdGVQcm9ncmFtKGdsLCBwcm9ncmFtMik7XG4gICAgfVxuICAgIHJldHVybiBwcm9ncmFtMjtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFZhbyhwcm9ncmFtOiBHUEdQVUNvbnRleHRQcm9ncmFtKSB7XG4gICAgdGhpcy5zZXRQcm9ncmFtKHByb2dyYW0pO1xuICAgIHRoaXMuYmluZFZlcnRleEFycmF5KHByb2dyYW0udmFvKTtcbiAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgLy8gQmluZCBpbmRleCBidWZmZXIsIGFuZCB2ZXJ0ZXggYnVmZmVycyBiYXNlZCBvbiBwcm9ncmFtIGF0dHJpYlxuICAgIC8vIGxvY2F0aW9ucy5cbiAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgZ2wsICgpID0+IGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpKTtcbiAgICBncGdwdV91dGlsLmJpbmRWZXJ0ZXhQcm9ncmFtQXR0cmlidXRlU3RyZWFtcyhcbiAgICAgICAgZ2wsIHByb2dyYW0sIHRoaXMudmVydGV4QnVmZmVyKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVQcm9ncmFtKHByb2dyYW06IEdQR1BVQ29udGV4dFByb2dyYW0pIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIGlmIChwcm9ncmFtID09PSB0aGlzLnByb2dyYW0pIHtcbiAgICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9ncmFtICE9IG51bGwpIHtcbiAgICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKHRoaXMuZ2wsICgpID0+IHRoaXMuZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKSk7XG4gICAgICB0aGlzLmRlbGV0ZVZlcnRleEFycmF5KHByb2dyYW0udmFvKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0UHJvZ3JhbShwcm9ncmFtOiBHUEdQVUNvbnRleHRQcm9ncmFtfG51bGwpIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIHRoaXMucHJvZ3JhbSA9IHByb2dyYW07XG5cbiAgICBpZiAodGhpcy5wcm9ncmFtICE9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHdlYmdsX3V0aWwudmFsaWRhdGVQcm9ncmFtKHRoaXMuZ2wsIHRoaXMucHJvZ3JhbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKHRoaXMuZ2wsICgpID0+IHRoaXMuZ2wudXNlUHJvZ3JhbShwcm9ncmFtKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5pZm9ybUxvY2F0aW9uKFxuICAgICAgcHJvZ3JhbTogV2ViR0xQcm9ncmFtLCB1bmlmb3JtTmFtZTogc3RyaW5nLFxuICAgICAgc2hvdWxkVGhyb3cgPSB0cnVlKTogV2ViR0xVbmlmb3JtTG9jYXRpb24ge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICByZXR1cm4gd2ViZ2xfdXRpbC5nZXRQcm9ncmFtVW5pZm9ybUxvY2F0aW9uT3JUaHJvdyhcbiAgICAgICAgICB0aGlzLmdsLCBwcm9ncmFtLCB1bmlmb3JtTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB3ZWJnbF91dGlsLmdldFByb2dyYW1Vbmlmb3JtTG9jYXRpb24oXG4gICAgICAgICAgdGhpcy5nbCwgcHJvZ3JhbSwgdW5pZm9ybU5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRyaWJ1dGVMb2NhdGlvbihwcm9ncmFtOiBXZWJHTFByb2dyYW0sIGF0dHJpYnV0ZTogc3RyaW5nKTpcbiAgICAgIG51bWJlciB7XG4gICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICByZXR1cm4gd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soXG4gICAgICAgIHRoaXMuZ2wsICgpID0+IHRoaXMuZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgYXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5pZm9ybUxvY2F0aW9uTm9UaHJvdyhwcm9ncmFtOiBXZWJHTFByb2dyYW0sIHVuaWZvcm1OYW1lOiBzdHJpbmcpOlxuICAgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24ge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1OYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnB1dE1hdHJpeFRleHR1cmUoXG4gICAgICBpbnB1dE1hdHJpeFRleHR1cmU6IFdlYkdMVGV4dHVyZSwgdW5pZm9ybUxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbixcbiAgICAgIHRleHR1cmVVbml0OiBudW1iZXIpIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIHRoaXMudGhyb3dJZk5vUHJvZ3JhbSgpO1xuICAgIHdlYmdsX3V0aWwuYmluZFRleHR1cmVUb1Byb2dyYW1Vbmlmb3JtU2FtcGxlcihcbiAgICAgICAgdGhpcy5nbCwgaW5wdXRNYXRyaXhUZXh0dXJlLCB1bmlmb3JtTG9jYXRpb24sIHRleHR1cmVVbml0KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRPdXRwdXRNYXRyaXhUZXh0dXJlKFxuICAgICAgb3V0cHV0TWF0cml4VGV4dHVyZTogV2ViR0xUZXh0dXJlLCByb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcikge1xuICAgIHRoaXMuc2V0T3V0cHV0TWF0cml4VGV4dHVyZURyaXZlcihvdXRwdXRNYXRyaXhUZXh0dXJlLCBjb2x1bW5zLCByb3dzKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRPdXRwdXRQYWNrZWRNYXRyaXhUZXh0dXJlKFxuICAgICAgb3V0cHV0UGFja2VkTWF0cml4VGV4dHVyZTogV2ViR0xUZXh0dXJlLCByb3dzOiBudW1iZXIsIGNvbHVtbnM6IG51bWJlcikge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgY29uc3QgW3dpZHRoLCBoZWlnaHRdID1cbiAgICAgICAgdGV4X3V0aWwuZ2V0UGFja2VkTWF0cml4VGV4dHVyZVNoYXBlV2lkdGhIZWlnaHQocm93cywgY29sdW1ucyk7XG4gICAgdGhpcy5zZXRPdXRwdXRNYXRyaXhUZXh0dXJlRHJpdmVyKG91dHB1dFBhY2tlZE1hdHJpeFRleHR1cmUsIHdpZHRoLCBoZWlnaHQpO1xuICB9XG5cbiAgcHVibGljIHNldE91dHB1dE1hdHJpeFdyaXRlUmVnaW9uKFxuICAgICAgc3RhcnRSb3c6IG51bWJlciwgbnVtUm93czogbnVtYmVyLCBzdGFydENvbHVtbjogbnVtYmVyLFxuICAgICAgbnVtQ29sdW1uczogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRPdXRwdXRNYXRyaXhXcml0ZVJlZ2lvbkRyaXZlcihcbiAgICAgICAgc3RhcnRDb2x1bW4sIHN0YXJ0Um93LCBudW1Db2x1bW5zLCBudW1Sb3dzKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRPdXRwdXRQYWNrZWRNYXRyaXhXcml0ZVJlZ2lvbihcbiAgICAgIHN0YXJ0Um93OiBudW1iZXIsIG51bVJvd3M6IG51bWJlciwgc3RhcnRDb2x1bW46IG51bWJlcixcbiAgICAgIG51bUNvbHVtbnM6IG51bWJlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0T3V0cHV0UGFja2VkTWF0cml4V3JpdGVSZWdpb24gbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgcHVibGljIGRlYnVnVmFsaWRhdGUoKSB7XG4gICAgaWYgKHRoaXMucHJvZ3JhbSAhPSBudWxsKSB7XG4gICAgICB3ZWJnbF91dGlsLnZhbGlkYXRlUHJvZ3JhbSh0aGlzLmdsLCB0aGlzLnByb2dyYW0pO1xuICAgIH1cbiAgICB3ZWJnbF91dGlsLnZhbGlkYXRlRnJhbWVidWZmZXIodGhpcy5nbCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZVByb2dyYW0oKSB7XG4gICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICB0aGlzLnRocm93SWZOb1Byb2dyYW0oKTtcbiAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIGNvbnN0IGJvdW5kVmFvID0gdGhpcy5nZXRWZXJ0ZXhBcnJheSgpO1xuICAgICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgICAgYm91bmRWYW8gPT09IHRoaXMucHJvZ3JhbS52YW8sXG4gICAgICAgICAgJ1ZBTyBjaGFuZ2VkIGJldHdlZW4gc2V0UHJvZ3JhbSBhbmQgZXhlY3V0ZVByb2dyYW0hJyk7XG5cbiAgICAgIHRoaXMuZGVidWdWYWxpZGF0ZSgpO1xuICAgIH1cbiAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgZ2wsICgpID0+IGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKSk7XG4gIH1cblxuICBwdWJsaWMgYmxvY2tVbnRpbEFsbFByb2dyYW1zQ29tcGxldGVkKCkge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2sodGhpcy5nbCwgKCkgPT4gdGhpcy5nbC5maW5pc2goKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5VGltZXJFeHRlbnNpb24oKTogV2ViR0wxRGlzam9pbnRRdWVyeVRpbWVyRXh0ZW5zaW9uXG4gICAgICB8V2ViR0wyRGlzam9pbnRRdWVyeVRpbWVyRXh0ZW5zaW9uIHtcbiAgICBpZiAodGhpcy5kaXNqb2ludFF1ZXJ5VGltZXJFeHRlbnNpb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5kaXNqb2ludFF1ZXJ5VGltZXJFeHRlbnNpb24gPVxuICAgICAgICAgIHdlYmdsX3V0aWwuZ2V0RXh0ZW5zaW9uT3JUaHJvdyhcbiAgICAgICAgICAgICAgdGhpcy5nbCxcbiAgICAgICAgICAgICAgZW52KCkuZ2V0TnVtYmVyKFxuICAgICAgICAgICAgICAgICAgJ1dFQkdMX0RJU0pPSU5UX1FVRVJZX1RJTUVSX0VYVEVOU0lPTl9WRVJTSU9OJykgPT09IDIgP1xuICAgICAgICAgICAgICAgICAgJ0VYVF9kaXNqb2ludF90aW1lcl9xdWVyeV93ZWJnbDInIDpcbiAgICAgICAgICAgICAgICAgICdFWFRfZGlzam9pbnRfdGltZXJfcXVlcnknKSBhc1xuICAgICAgICAgICAgICBXZWJHTDFEaXNqb2ludFF1ZXJ5VGltZXJFeHRlbnNpb24gfFxuICAgICAgICAgIFdlYkdMMkRpc2pvaW50UXVlcnlUaW1lckV4dGVuc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGlzam9pbnRRdWVyeVRpbWVyRXh0ZW5zaW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeVRpbWVyRXh0ZW5zaW9uV2ViR0wyKCk6IFdlYkdMMkRpc2pvaW50UXVlcnlUaW1lckV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlUaW1lckV4dGVuc2lvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeVRpbWVyRXh0ZW5zaW9uV2ViR0wxKCk6IFdlYkdMMURpc2pvaW50UXVlcnlUaW1lckV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlUaW1lckV4dGVuc2lvbigpIGFzIFdlYkdMMURpc2pvaW50UXVlcnlUaW1lckV4dGVuc2lvbjtcbiAgfVxuXG4gIGJlZ2luUXVlcnkoKTogV2ViR0xRdWVyeSB7XG4gICAgaWYgKGVudigpLmdldE51bWJlcignV0VCR0xfRElTSk9JTlRfUVVFUllfVElNRVJfRVhURU5TSU9OX1ZFUlNJT04nKSA9PT0gMikge1xuICAgICAgY29uc3QgZ2wyID0gdGhpcy5nbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O1xuICAgICAgY29uc3QgZXh0ID0gdGhpcy5nZXRRdWVyeVRpbWVyRXh0ZW5zaW9uV2ViR0wyKCk7XG5cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2wyLmNyZWF0ZVF1ZXJ5KCk7XG4gICAgICBnbDIuYmVnaW5RdWVyeShleHQuVElNRV9FTEFQU0VEX0VYVCwgcXVlcnkpO1xuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbiAgICBjb25zdCBleHQgPSB0aGlzLmdldFF1ZXJ5VGltZXJFeHRlbnNpb25XZWJHTDEoKTtcbiAgICBjb25zdCBxdWVyeSA9IGV4dC5jcmVhdGVRdWVyeUVYVCgpIGFzIFdlYkdMUXVlcnk7XG4gICAgZXh0LmJlZ2luUXVlcnlFWFQoZXh0LlRJTUVfRUxBUFNFRF9FWFQsIHF1ZXJ5KTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBlbmRRdWVyeSgpIHtcbiAgICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9ESVNKT0lOVF9RVUVSWV9USU1FUl9FWFRFTlNJT05fVkVSU0lPTicpID09PSAyKSB7XG4gICAgICBjb25zdCBnbDIgPSB0aGlzLmdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ7XG4gICAgICBjb25zdCBleHQgPSB0aGlzLmdldFF1ZXJ5VGltZXJFeHRlbnNpb25XZWJHTDIoKTtcbiAgICAgIGdsMi5lbmRRdWVyeShleHQuVElNRV9FTEFQU0VEX0VYVCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4dCA9IHRoaXMuZ2V0UXVlcnlUaW1lckV4dGVuc2lvbldlYkdMMSgpO1xuICAgIGV4dC5lbmRRdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgd2FpdEZvclF1ZXJ5QW5kR2V0VGltZShxdWVyeTogV2ViR0xRdWVyeSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdXRpbC5yZXBlYXRlZFRyeShcbiAgICAgICAgKCkgPT4gdGhpcy5kaXNwb3NlZCB8fCAgLy8gd2hpbGUgdGVzdGluZyBjb250ZXh0cyBhcmUgY3JlYXRlZCAvIGRpc3Bvc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHJhcGlkIHN1Y2Nlc3Npb24sIHNvIHdpdGhvdXQgdGhpcyBjaGVjayB3ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXkgcG9sbCBmb3IgdGhlIHF1ZXJ5IHRpbWVyIGluZGVmaW5pdGVseVxuICAgICAgICAgICAgdGhpcy5pc1F1ZXJ5QXZhaWxhYmxlKFxuICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgIGVudigpLmdldE51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgJ1dFQkdMX0RJU0pPSU5UX1FVRVJZX1RJTUVSX0VYVEVOU0lPTl9WRVJTSU9OJykpKTtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVyeVRpbWUoXG4gICAgICAgIHF1ZXJ5LCBlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX0RJU0pPSU5UX1FVRVJZX1RJTUVSX0VYVEVOU0lPTl9WRVJTSU9OJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeVRpbWUocXVlcnk6IFdlYkdMUXVlcnksIHF1ZXJ5VGltZXJWZXJzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChxdWVyeVRpbWVyVmVyc2lvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5VGltZXJWZXJzaW9uID09PSAyKSB7XG4gICAgICBjb25zdCBnbDIgPSB0aGlzLmdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ7XG5cbiAgICAgIGNvbnN0IHRpbWVFbGFwc2VkTmFub3MgPSBnbDIuZ2V0UXVlcnlQYXJhbWV0ZXIocXVlcnksIGdsMi5RVUVSWV9SRVNVTFQpO1xuICAgICAgLy8gUmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAgICAgIHJldHVybiB0aW1lRWxhcHNlZE5hbm9zIC8gMTAwMDAwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXh0ID0gdGhpcy5nZXRRdWVyeVRpbWVyRXh0ZW5zaW9uV2ViR0wxKCk7XG5cbiAgICAgIGNvbnN0IHRpbWVFbGFwc2VkTmFub3MgPVxuICAgICAgICAgIGV4dC5nZXRRdWVyeU9iamVjdEVYVChxdWVyeSwgZXh0LlFVRVJZX1JFU1VMVF9FWFQpO1xuICAgICAgLy8gUmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAgICAgIHJldHVybiB0aW1lRWxhcHNlZE5hbm9zIC8gMTAwMDAwMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUXVlcnlBdmFpbGFibGUocXVlcnk6IFdlYkdMUXVlcnksIHF1ZXJ5VGltZXJWZXJzaW9uOiBudW1iZXIpOlxuICAgICAgYm9vbGVhbiB7XG4gICAgaWYgKHF1ZXJ5VGltZXJWZXJzaW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlUaW1lclZlcnNpb24gPT09IDIpIHtcbiAgICAgIGNvbnN0IGdsMiA9IHRoaXMuZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDtcbiAgICAgIGNvbnN0IGV4dCA9IHRoaXMuZ2V0UXVlcnlUaW1lckV4dGVuc2lvbldlYkdMMigpO1xuXG4gICAgICBjb25zdCBhdmFpbGFibGUgPVxuICAgICAgICAgIGdsMi5nZXRRdWVyeVBhcmFtZXRlcihxdWVyeSwgZ2wyLlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpO1xuICAgICAgaWYgKHRoaXMuZGlzam9pbnQgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmRpc2pvaW50ID0gdGhpcy5nbC5nZXRQYXJhbWV0ZXIoZXh0LkdQVV9ESVNKT0lOVF9FWFQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXZhaWxhYmxlICYmICF0aGlzLmRpc2pvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleHQgPSB0aGlzLmdldFF1ZXJ5VGltZXJFeHRlbnNpb25XZWJHTDEoKTtcblxuICAgICAgY29uc3QgYXZhaWxhYmxlID1cbiAgICAgICAgICBleHQuZ2V0UXVlcnlPYmplY3RFWFQocXVlcnksIGV4dC5RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVCk7XG4gICAgICBpZiAodGhpcy5kaXNqb2ludCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZGlzam9pbnQgPSB0aGlzLmdsLmdldFBhcmFtZXRlcihleHQuR1BVX0RJU0pPSU5UX0VYVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdmFpbGFibGUgJiYgIXRoaXMuZGlzam9pbnQ7XG4gICAgfVxuICB9XG5cbiAgcG9sbEZlbmNlKGZlbmNlQ29udGV4dDogRmVuY2VDb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5hZGRJdGVtVG9Qb2xsKCgpID0+IGZlbmNlQ29udGV4dC5pc0ZlbmNlUGFzc2VkKCksICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGl0ZW1zVG9Qb2xsOiBQb2xsSXRlbVtdID0gW107XG5cbiAgcG9sbEl0ZW1zKCk6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIGxhc3QgcXVlcnkgdGhhdCBoYXMgZmluaXNoZWQuXG4gICAgY29uc3QgaW5kZXggPSBsaW5lYXJTZWFyY2hMYXN0VHJ1ZSh0aGlzLml0ZW1zVG9Qb2xsLm1hcCh4ID0+IHguaXNEb25lRm4pKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBpbmRleDsgKytpKSB7XG4gICAgICBjb25zdCB7cmVzb2x2ZUZufSA9IHRoaXMuaXRlbXNUb1BvbGxbaV07XG4gICAgICByZXNvbHZlRm4oKTtcbiAgICB9XG4gICAgdGhpcy5pdGVtc1RvUG9sbCA9IHRoaXMuaXRlbXNUb1BvbGwuc2xpY2UoaW5kZXggKyAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkSXRlbVRvUG9sbChpc0RvbmVGbjogKCkgPT4gYm9vbGVhbiwgcmVzb2x2ZUZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5pdGVtc1RvUG9sbC5wdXNoKHtpc0RvbmVGbiwgcmVzb2x2ZUZufSk7XG4gICAgaWYgKHRoaXMuaXRlbXNUb1BvbGwubGVuZ3RoID4gMSkge1xuICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgcnVubmluZyBsb29wIHRoYXQgcG9sbHMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN0YXJ0IGEgbmV3IGxvb3AgdGhhdCBwb2xscy5cbiAgICBsZXQgc2NoZWR1bGVGbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAoJ3NldFRpbWVvdXRDdXN0b20nIGluIGVudigpLnBsYXRmb3JtKSB7XG4gICAgICBzY2hlZHVsZUZuID0gZW52KCkucGxhdGZvcm0uc2V0VGltZW91dEN1c3RvbS5iaW5kKGVudigpLnBsYXRmb3JtKTtcbiAgICB9XG4gICAgdXRpbC5yZXBlYXRlZFRyeSgoKSA9PiB7XG4gICAgICB0aGlzLnBvbGxJdGVtcygpO1xuICAgICAgLy8gRW5kIHRoZSBsb29wIGlmIG5vIG1vcmUgaXRlbXMgdG8gcG9sbC5cbiAgICAgIHJldHVybiB0aGlzLml0ZW1zVG9Qb2xsLmxlbmd0aCA9PT0gMDtcbiAgICB9LCAoKSA9PiAwLCBudWxsLCBzY2hlZHVsZUZuKTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZFRleHR1cmVUb0ZyYW1lQnVmZmVyKHRleHR1cmU6IFdlYkdMVGV4dHVyZSkge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgd2ViZ2xfdXRpbC5iaW5kQ29sb3JUZXh0dXJlVG9GcmFtZWJ1ZmZlcihcbiAgICAgICAgdGhpcy5nbCwgdGV4dHVyZSwgdGhpcy5mcmFtZWJ1ZmZlcik7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIHdlYmdsX3V0aWwudmFsaWRhdGVGcmFtZWJ1ZmZlcih0aGlzLmdsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVuYmluZFRleHR1cmVUb0ZyYW1lQnVmZmVyKCkge1xuICAgIGlmICh0aGlzLm91dHB1dFRleHR1cmUgIT0gbnVsbCkge1xuICAgICAgd2ViZ2xfdXRpbC5iaW5kQ29sb3JUZXh0dXJlVG9GcmFtZWJ1ZmZlcihcbiAgICAgICAgICB0aGlzLmdsLCB0aGlzLm91dHB1dFRleHR1cmUsIHRoaXMuZnJhbWVidWZmZXIpO1xuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgd2ViZ2xfdXRpbC52YWxpZGF0ZUZyYW1lYnVmZmVyKHRoaXMuZ2wpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3ZWJnbF91dGlsLnVuYmluZENvbG9yVGV4dHVyZUZyb21GcmFtZWJ1ZmZlcih0aGlzLmdsLCB0aGlzLmZyYW1lYnVmZmVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkTWF0cml4RHJpdmVyKFxuICAgICAgdGV4dHVyZTogV2ViR0xUZXh0dXJlLFxuICAgICAgZG93bmxvYWRBbmREZWNvZGU6ICgpID0+IEZsb2F0MzJBcnJheSk6IEZsb2F0MzJBcnJheSB7XG4gICAgdGhpcy5iaW5kVGV4dHVyZVRvRnJhbWVCdWZmZXIodGV4dHVyZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gZG93bmxvYWRBbmREZWNvZGUoKTtcbiAgICB0aGlzLnVuYmluZFRleHR1cmVUb0ZyYW1lQnVmZmVyKCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRPdXRwdXRNYXRyaXhUZXh0dXJlRHJpdmVyKFxuICAgICAgb3V0cHV0TWF0cml4VGV4dHVyZU1heWJlUGFja2VkOiBXZWJHTFRleHR1cmUsIHdpZHRoOiBudW1iZXIsXG4gICAgICBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgIHdlYmdsX3V0aWwuYmluZENvbG9yVGV4dHVyZVRvRnJhbWVidWZmZXIoXG4gICAgICAgIGdsLCBvdXRwdXRNYXRyaXhUZXh0dXJlTWF5YmVQYWNrZWQsIHRoaXMuZnJhbWVidWZmZXIpO1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICB3ZWJnbF91dGlsLnZhbGlkYXRlRnJhbWVidWZmZXIoZ2wpO1xuICAgIH1cbiAgICB0aGlzLm91dHB1dFRleHR1cmUgPSBvdXRwdXRNYXRyaXhUZXh0dXJlTWF5YmVQYWNrZWQ7XG4gICAgd2ViZ2xfdXRpbC5jYWxsQW5kQ2hlY2soZ2wsICgpID0+IGdsLnZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpKTtcbiAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhnbCwgKCkgPT4gZ2wuc2Npc3NvcigwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7XG4gIH1cblxuICBwcml2YXRlIHNldE91dHB1dE1hdHJpeFdyaXRlUmVnaW9uRHJpdmVyKFxuICAgICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICB3ZWJnbF91dGlsLmNhbGxBbmRDaGVjayhcbiAgICAgICAgdGhpcy5nbCwgKCkgPT4gdGhpcy5nbC5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpKTtcbiAgfVxuXG4gIHByaXZhdGUgdGhyb3dJZkRpc3Bvc2VkKCkge1xuICAgIGlmICh0aGlzLmRpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byB1c2UgZGlzcG9zZWQgR1BHUFVDb250ZXh0LicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdGhyb3dJZk5vUHJvZ3JhbSgpIHtcbiAgICBpZiAodGhpcy5wcm9ncmFtID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gR1BVIHByb2dyYW0gaXMgY3VycmVudGx5IHNldC4nKTtcbiAgICB9XG4gIH1cbn1cblxudHlwZSBQb2xsSXRlbSA9IHtcbiAgaXNEb25lRm46ICgpID0+IGJvb2xlYW4sXG4gIHJlc29sdmVGbjogKCkgPT4gdm9pZFxufTtcblxuLyoqXG4gKiBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgdHJ1ZSBlbGVtZW50IHVzaW5nIGxpbmVhciBzZWFyY2guXG4gKiBOb3RlOiBXZSBjYW4ndCBkbyBiaW5hcnkgc2VhcmNoIGJlY2F1c2UgQ2hyb21lIGV4cGVjdHMgdXMgdG8gZXhwbGljaXRseVxuICogdGVzdCBhbGwgZmVuY2VzIGJlZm9yZSBkb3dubG9hZDpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMvaXNzdWVzLzExNDVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhclNlYXJjaExhc3RUcnVlKGFycjogQXJyYXk8KCkgPT4gYm9vbGVhbj4pOiBudW1iZXIge1xuICBsZXQgaSA9IDA7XG4gIGZvciAoOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgaXNEb25lID0gYXJyW2ldKCk7XG4gICAgaWYgKCFpc0RvbmUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaSAtIDE7XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function assertNotComplex(tensor, opName) {\n if (!Array.isArray(tensor)) {\n tensor = [tensor];\n }\n tensor.forEach(t => {\n if (t != null) {\n util.assert(t.dtype !== 'complex64', () => `${opName} does not support complex64 tensors in the CPU backend.`);\n }\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3B1X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9jcHVfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxVQUFVLGdCQUFnQixDQUM1QixNQUErQixFQUFFLE1BQWM7SUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDMUIsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkI7SUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQ1AsQ0FBQyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQ3ZCLEdBQUcsRUFBRSxDQUFDLEdBQ0YsTUFBTSx5REFBeUQsQ0FBQyxDQUFDO1NBQzFFO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb3RDb21wbGV4KFxuICAgIHRlbnNvcjogVGVuc29ySW5mb3xUZW5zb3JJbmZvW10sIG9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh0ZW5zb3IpKSB7XG4gICAgdGVuc29yID0gW3RlbnNvcl07XG4gIH1cbiAgdGVuc29yLmZvckVhY2godCA9PiB7XG4gICAgaWYgKHQgIT0gbnVsbCkge1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgdC5kdHlwZSAhPT0gJ2NvbXBsZXg2NCcsXG4gICAgICAgICAgKCkgPT4gYCR7XG4gICAgICAgICAgICAgIG9wTmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBjb21wbGV4NjQgdGVuc29ycyBpbiB0aGUgQ1BVIGJhY2tlbmQuYCk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Abs, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function simpleAbsImpl(vals) {\n const resultValues = new Float32Array(vals.length);\n for (let i = 0; i < vals.length; ++i) {\n resultValues[i] = Math.abs(vals[i]);\n }\n return resultValues;\n}\nexport const abs = (args) => {\n const { x } = args.inputs;\n const cpuBackend = args.backend;\n assertNotComplex(x, 'abs');\n let resultValues = new Float32Array(util.sizeFromShape(x.shape));\n const values = cpuBackend.data.get(x.dataId).values;\n resultValues = simpleAbsImpl(values);\n return cpuBackend.makeOutput(resultValues, x.shape, x.dtype);\n};\nexport const absConfig = {\n kernelName: Abs,\n backendName: 'cpu',\n kernelFunc: abs,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BYnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBbUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHakcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBZ0I7SUFDNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3BDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3JDO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQWtELEVBQUUsRUFBRTtJQUN4RSxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBRWhDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUzQixJQUFJLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ2xFLFlBQVksR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFckMsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FicywgQWJzSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlQWJzSW1wbCh2YWxzOiBUeXBlZEFycmF5KTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3QgcmVzdWx0VmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSh2YWxzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7ICsraSkge1xuICAgIHJlc3VsdFZhbHVlc1tpXSA9IE1hdGguYWJzKHZhbHNbaV0pO1xuICB9XG4gIHJldHVybiByZXN1bHRWYWx1ZXM7XG59XG5cbmV4cG9ydCBjb25zdCBhYnMgPSAoYXJnczoge2lucHV0czogQWJzSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVX0pID0+IHtcbiAgY29uc3Qge3h9ID0gYXJncy5pbnB1dHM7XG4gIGNvbnN0IGNwdUJhY2tlbmQgPSBhcmdzLmJhY2tlbmQ7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnYWJzJyk7XG5cbiAgbGV0IHJlc3VsdFZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkodXRpbC5zaXplRnJvbVNoYXBlKHguc2hhcGUpKTtcbiAgY29uc3QgdmFsdWVzID0gY3B1QmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIHJlc3VsdFZhbHVlcyA9IHNpbXBsZUFic0ltcGwodmFsdWVzKTtcblxuICByZXR1cm4gY3B1QmFja2VuZC5tYWtlT3V0cHV0KHJlc3VsdFZhbHVlcywgeC5zaGFwZSwgeC5kdHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWJzQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFicyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhYnMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\n/**\n * Template that creates implementation for binary ops. Supports broadcast.\n */\nexport function createSimpleBinaryKernelImpl(op) {\n return (aShape, bShape, aVals, bVals, dtype) => {\n const newShape = backend_util.assertAndGetBroadcastShape(aShape, bShape);\n const resultRank = newShape.length;\n const resultStrides = util.computeStrides(newShape);\n const resultSize = util.sizeFromShape(newShape);\n const result = util.getTypedArrayFromDType(dtype, resultSize);\n const aRank = aShape.length;\n const bRank = bShape.length;\n const aStrides = util.computeStrides(aShape);\n const bStrides = util.computeStrides(bShape);\n const aBroadcastDims = backend_util.getBroadcastDims(aShape, newShape);\n const bBroadcastDims = backend_util.getBroadcastDims(bShape, newShape);\n if (aBroadcastDims.length + bBroadcastDims.length === 0) {\n for (let i = 0; i < result.length; ++i) {\n result[i] = op(aVals[i % aVals.length], bVals[i % bVals.length]);\n }\n }\n else {\n for (let i = 0; i < result.length; ++i) {\n const loc = util.indexToLoc(i, resultRank, resultStrides);\n const aLoc = loc.slice(-aRank);\n aBroadcastDims.forEach(d => aLoc[d] = 0);\n const aIndex = util.locToIndex(aLoc, aRank, aStrides);\n const bLoc = loc.slice(-bRank);\n bBroadcastDims.forEach(d => bLoc[d] = 0);\n const bIndex = util.locToIndex(bLoc, bRank, bStrides);\n result[i] = op(aVals[aIndex], bVals[bIndex]);\n }\n }\n return [result, newShape];\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5X2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy91dGlscy9iaW5hcnlfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFxRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUk1Rzs7R0FFRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxFQUF5QjtJQUVwRSxPQUFPLENBQUMsTUFBZ0IsRUFBRSxNQUFnQixFQUFFLEtBQWlCLEVBQ3JELEtBQWlCLEVBQUUsS0FBZSxFQUEwQixFQUFFO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFekUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEQsTUFBTSxNQUFNLEdBQ1IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQXdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFdEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDbEU7U0FDRjthQUFNO1lBQ0wsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ3RDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFFMUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBRXRELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUV0RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUM5QztTQUNGO1FBRUQsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGF0YVR5cGUsIERhdGFWYWx1ZXMsIE51bWVyaWNEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtTaW1wbGVCaW5hcnlLZXJuZWxJbXBsLCBTaW1wbGVCaW5hcnlPcGVyYXRpb259IGZyb20gJy4vYmluYXJ5X3R5cGVzJztcblxuLyoqXG4gKiBUZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgaW1wbGVtZW50YXRpb24gZm9yIGJpbmFyeSBvcHMuIFN1cHBvcnRzIGJyb2FkY2FzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGwob3A6IFNpbXBsZUJpbmFyeU9wZXJhdGlvbik6XG4gICAgU2ltcGxlQmluYXJ5S2VybmVsSW1wbCB7XG4gIHJldHVybiAoYVNoYXBlOiBudW1iZXJbXSwgYlNoYXBlOiBudW1iZXJbXSwgYVZhbHM6IERhdGFWYWx1ZXMsXG4gICAgICAgICAgYlZhbHM6IERhdGFWYWx1ZXMsIGR0eXBlOiBEYXRhVHlwZSk6IFtUeXBlZEFycmF5LCBudW1iZXJbXV0gPT4ge1xuICAgIGNvbnN0IG5ld1NoYXBlID0gYmFja2VuZF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKGFTaGFwZSwgYlNoYXBlKTtcblxuICAgIGNvbnN0IHJlc3VsdFJhbmsgPSBuZXdTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgcmVzdWx0U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMobmV3U2hhcGUpO1xuICAgIGNvbnN0IHJlc3VsdFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUobmV3U2hhcGUpO1xuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgdXRpbC5nZXRUeXBlZEFycmF5RnJvbURUeXBlKGR0eXBlIGFzIE51bWVyaWNEYXRhVHlwZSwgcmVzdWx0U2l6ZSk7XG5cbiAgICBjb25zdCBhUmFuayA9IGFTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgYlJhbmsgPSBiU2hhcGUubGVuZ3RoO1xuXG4gICAgY29uc3QgYVN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGFTaGFwZSk7XG4gICAgY29uc3QgYlN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGJTaGFwZSk7XG5cbiAgICBjb25zdCBhQnJvYWRjYXN0RGltcyA9IGJhY2tlbmRfdXRpbC5nZXRCcm9hZGNhc3REaW1zKGFTaGFwZSwgbmV3U2hhcGUpO1xuICAgIGNvbnN0IGJCcm9hZGNhc3REaW1zID0gYmFja2VuZF91dGlsLmdldEJyb2FkY2FzdERpbXMoYlNoYXBlLCBuZXdTaGFwZSk7XG5cbiAgICBpZiAoYUJyb2FkY2FzdERpbXMubGVuZ3RoICsgYkJyb2FkY2FzdERpbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkge1xuICAgICAgICByZXN1bHRbaV0gPSBvcChhVmFsc1tpICUgYVZhbHMubGVuZ3RoXSwgYlZhbHNbaSAlIGJWYWxzLmxlbmd0aF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBsb2MgPSB1dGlsLmluZGV4VG9Mb2MoaSwgcmVzdWx0UmFuaywgcmVzdWx0U3RyaWRlcyk7XG5cbiAgICAgICAgY29uc3QgYUxvYyA9IGxvYy5zbGljZSgtYVJhbmspO1xuICAgICAgICBhQnJvYWRjYXN0RGltcy5mb3JFYWNoKGQgPT4gYUxvY1tkXSA9IDApO1xuICAgICAgICBjb25zdCBhSW5kZXggPSB1dGlsLmxvY1RvSW5kZXgoYUxvYywgYVJhbmssIGFTdHJpZGVzKTtcblxuICAgICAgICBjb25zdCBiTG9jID0gbG9jLnNsaWNlKC1iUmFuayk7XG4gICAgICAgIGJCcm9hZGNhc3REaW1zLmZvckVhY2goZCA9PiBiTG9jW2RdID0gMCk7XG4gICAgICAgIGNvbnN0IGJJbmRleCA9IHV0aWwubG9jVG9JbmRleChiTG9jLCBiUmFuaywgYlN0cmlkZXMpO1xuXG4gICAgICAgIHJlc3VsdFtpXSA9IG9wKGFWYWxzW2FJbmRleF0sIGJWYWxzW2JJbmRleF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbcmVzdWx0LCBuZXdTaGFwZV07XG4gIH07XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Complex } from '@tensorflow/tfjs-core';\nexport function complex(args) {\n const { inputs, backend } = args;\n const { real, imag } = inputs;\n const realVals = backend.data.get(real.dataId).values;\n const imagVals = backend.data.get(imag.dataId).values;\n const complexInfo = backend.makeTensorInfo(real.shape, 'complex64');\n const complex = backend.data.get(complexInfo.dataId);\n // The complex tensor owns the underlying real and imag tensorInfos, only the\n // complex tensor tracks refCount, when complexData is disposed the\n // underlying tensorData will be disposed.\n complex.complexTensorInfos = {\n real: backend.makeTensorInfo(real.shape, 'float32', realVals),\n imag: backend.makeTensorInfo(imag.shape, 'float32', imagVals)\n };\n return complexInfo;\n}\nexport const complexConfig = {\n kernelName: Complex,\n backendName: 'cpu',\n kernelFunc: complex\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ29tcGxleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFrRSxNQUFNLHVCQUF1QixDQUFDO0FBSS9HLE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBc0Q7SUFFNUUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFNUIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDcEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFFcEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVyRCw2RUFBNkU7SUFDN0UsbUVBQW1FO0lBQ25FLDBDQUEwQztJQUMxQyxPQUFPLENBQUMsa0JBQWtCLEdBQUc7UUFDM0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO1FBQzdELElBQUksRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQztLQUM5RCxDQUFDO0lBRUYsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q29tcGxleCwgQ29tcGxleElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4KGFyZ3M6IHtpbnB1dHM6IENvbXBsZXhJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3JlYWwsIGltYWd9ID0gaW5wdXRzO1xuXG4gIGNvbnN0IHJlYWxWYWxzID0gYmFja2VuZC5kYXRhLmdldChyZWFsLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IGltYWdWYWxzID0gYmFja2VuZC5kYXRhLmdldChpbWFnLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgY29tcGxleEluZm8gPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlYWwuc2hhcGUsICdjb21wbGV4NjQnKTtcblxuICBjb25zdCBjb21wbGV4ID0gYmFja2VuZC5kYXRhLmdldChjb21wbGV4SW5mby5kYXRhSWQpO1xuXG4gIC8vIFRoZSBjb21wbGV4IHRlbnNvciBvd25zIHRoZSB1bmRlcmx5aW5nIHJlYWwgYW5kIGltYWcgdGVuc29ySW5mb3MsIG9ubHkgdGhlXG4gIC8vIGNvbXBsZXggdGVuc29yIHRyYWNrcyByZWZDb3VudCwgd2hlbiBjb21wbGV4RGF0YSBpcyBkaXNwb3NlZCB0aGVcbiAgLy8gdW5kZXJseWluZyB0ZW5zb3JEYXRhIHdpbGwgYmUgZGlzcG9zZWQuXG4gIGNvbXBsZXguY29tcGxleFRlbnNvckluZm9zID0ge1xuICAgIHJlYWw6IGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVhbC5zaGFwZSwgJ2Zsb2F0MzInLCByZWFsVmFscyksXG4gICAgaW1hZzogYmFja2VuZC5tYWtlVGVuc29ySW5mbyhpbWFnLnNoYXBlLCAnZmxvYXQzMicsIGltYWdWYWxzKVxuICB9O1xuXG4gIHJldHVybiBjb21wbGV4SW5mbztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBsZXhDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29tcGxleCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjb21wbGV4IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { complex } from '../kernels/Complex';\n/**\n * Generates a tensorInfo with all zeros value.\n * @param backend cpu backend.\n * @param shape Shape for the zeros tensor.\n * @param dtype Optional. If set, the result has this dtype.\n */\nexport function zeros(backend, shape, dtype = 'float32') {\n if (dtype === 'complex64') {\n const real = zeros(backend, shape, 'float32');\n const imag = zeros(backend, shape, 'float32');\n return complex({ inputs: { real, imag }, backend });\n }\n const values = util.makeZerosTypedArray(util.sizeFromShape(shape), dtype);\n return backend.makeTensorInfo(shape, dtype, values);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVyb3NfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL3V0aWxzL3plcm9zX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF1QixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFM0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUNqQixPQUF1QixFQUFFLEtBQWUsRUFDeEMsUUFBa0IsU0FBUztJQUM3QixJQUFJLEtBQUssS0FBSyxXQUFXLEVBQUU7UUFDekIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUMsT0FBTyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztLQUNqRDtJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4uL2tlcm5lbHMvQ29tcGxleCc7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdGVuc29ySW5mbyB3aXRoIGFsbCB6ZXJvcyB2YWx1ZS5cbiAqIEBwYXJhbSBiYWNrZW5kIGNwdSBiYWNrZW5kLlxuICogQHBhcmFtIHNoYXBlIFNoYXBlIGZvciB0aGUgemVyb3MgdGVuc29yLlxuICogQHBhcmFtIGR0eXBlIE9wdGlvbmFsLiBJZiBzZXQsIHRoZSByZXN1bHQgaGFzIHRoaXMgZHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvcyhcbiAgICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgc2hhcGU6IG51bWJlcltdLFxuICAgIGR0eXBlOiBEYXRhVHlwZSA9ICdmbG9hdDMyJyk6IFRlbnNvckluZm8ge1xuICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgY29uc3QgcmVhbCA9IHplcm9zKGJhY2tlbmQsIHNoYXBlLCAnZmxvYXQzMicpO1xuICAgIGNvbnN0IGltYWcgPSB6ZXJvcyhiYWNrZW5kLCBzaGFwZSwgJ2Zsb2F0MzInKTtcblxuICAgIHJldHVybiBjb21wbGV4KHtpbnB1dHM6IHtyZWFsLCBpbWFnfSwgYmFja2VuZH0pO1xuICB9XG5cbiAgY29uc3QgdmFsdWVzID0gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KHV0aWwuc2l6ZUZyb21TaGFwZShzaGFwZSksIGR0eXBlKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhzaGFwZSwgZHR5cGUsIHZhbHVlcyk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Identity } from '@tensorflow/tfjs-core';\nexport function identity(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n backend.incRef(x.dataId);\n return { dataId: x.dataId, shape: x.shape, dtype: x.dtype };\n}\nexport const identityConfig = {\n kernelName: Identity,\n backendName: 'cpu',\n kernelFunc: identity\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0lkZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQXVELE1BQU0sdUJBQXVCLENBQUM7QUFJckcsTUFBTSxVQUFVLFFBQVEsQ0FDcEIsSUFBdUQ7SUFDekQsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUVuQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6QixPQUFPLEVBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsUUFBaUM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtJZGVudGl0eSwgSWRlbnRpdHlJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoXG4gICAgYXJnczoge2lucHV0czogSWRlbnRpdHlJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcblxuICBiYWNrZW5kLmluY1JlZih4LmRhdGFJZCk7XG5cbiAgcmV0dXJuIHtkYXRhSWQ6IHguZGF0YUlkLCBzaGFwZTogeC5zaGFwZSwgZHR5cGU6IHguZHR5cGV9O1xufVxuXG5leHBvcnQgY29uc3QgaWRlbnRpdHlDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogSWRlbnRpdHksXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogaWRlbnRpdHkgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Real } from '@tensorflow/tfjs-core';\nexport function real(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n const real = backend.data.get(input.dataId).complexTensorInfos.real;\n const realVal = backend.data.get(real.dataId).values;\n // When complex tensor is disposed, its underlying parts will be disposed too.\n // Make new tensor out of the real value of the complex. This makes sure the\n // value is still accessible even if complex tensor is disposed.\n return backend.makeTensorInfo(real.shape, real.dtype, realVal);\n}\nexport const realConfig = {\n kernelName: Real,\n backendName: 'cpu',\n kernelFunc: real\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLElBQUksRUFBeUIsTUFBTSx1QkFBdUIsQ0FBQztBQUk3RixNQUFNLFVBQVUsSUFBSSxDQUFDLElBQW1EO0lBRXRFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFdkIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztJQUNwRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXJELDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsZ0VBQWdFO0lBQ2hFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZWFsLCBSZWFsSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFsKGFyZ3M6IHtpbnB1dHM6IFJlYWxJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2lucHV0fSA9IGlucHV0cztcblxuICBjb25zdCByZWFsID0gYmFja2VuZC5kYXRhLmdldChpbnB1dC5kYXRhSWQpLmNvbXBsZXhUZW5zb3JJbmZvcy5yZWFsO1xuICBjb25zdCByZWFsVmFsID0gYmFja2VuZC5kYXRhLmdldChyZWFsLmRhdGFJZCkudmFsdWVzO1xuXG4gIC8vIFdoZW4gY29tcGxleCB0ZW5zb3IgaXMgZGlzcG9zZWQsIGl0cyB1bmRlcmx5aW5nIHBhcnRzIHdpbGwgYmUgZGlzcG9zZWQgdG9vLlxuICAvLyBNYWtlIG5ldyB0ZW5zb3Igb3V0IG9mIHRoZSByZWFsIHZhbHVlIG9mIHRoZSBjb21wbGV4LiBUaGlzIG1ha2VzIHN1cmUgdGhlXG4gIC8vIHZhbHVlIGlzIHN0aWxsIGFjY2Vzc2libGUgZXZlbiBpZiBjb21wbGV4IHRlbnNvciBpcyBkaXNwb3NlZC5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVhbC5zaGFwZSwgcmVhbC5kdHlwZSwgcmVhbFZhbCk7XG59XG5cbmV4cG9ydCBjb25zdCByZWFsQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlYWwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmVhbCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cast, util } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { zeros } from '../utils/zeros_impl';\nimport { complex } from './Complex';\nimport { identity } from './Identity';\nimport { real } from './Real';\nexport function castImpl(values, shape, inputType, dtype) {\n if (dtype === 'int32') {\n const resultValues = Int32Array.from(values);\n return [shape, 'int32', resultValues];\n }\n if (dtype === 'bool') {\n // This is essentially the result of notEqual(x, 0). We avoid using\n // kernel notEqual to avoid circular dependency, i.e. binary_utils ->\n // cast -> notEqual -> binary_utils.\n const zero = util.toTypedArray([0], inputType);\n const [resultData, resultShape] = createSimpleBinaryKernelImpl((a, b) => (a !== b) ? 1 : 0)(shape, [], values, zero, 'bool');\n return [resultShape, 'bool', resultData];\n }\n throw new Error(`Error in Cast: failed to cast ${inputType} to ${dtype}`);\n}\nexport function cast(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { dtype } = attrs;\n // Casting to complex64.\n if (dtype === 'complex64') {\n if (x.dtype === 'complex64') {\n return identity({ inputs: { x }, backend });\n }\n const zerosTensorInfo = zeros(backend, x.shape, x.dtype);\n const floatX = cast({ inputs: { x }, backend, attrs: { dtype: 'float32' } });\n const result = complex({ inputs: { real: floatX, imag: zerosTensorInfo }, backend });\n backend.disposeIntermediateTensorInfo(zerosTensorInfo);\n backend.disposeIntermediateTensorInfo(floatX);\n return result;\n }\n // Casting from complex64\n if (x.dtype === 'complex64') {\n const realPart = real({ inputs: { input: x }, backend });\n const result = cast({ inputs: { x: realPart }, backend, attrs: { dtype } });\n backend.disposeIntermediateTensorInfo(realPart);\n return result;\n }\n if (!util.hasEncodingLoss(x.dtype, dtype)) {\n // We don't change the underlying data, since we cast to higher\n // precision.\n const result = identity({ inputs: { x }, backend });\n return { dataId: result.dataId, shape: result.shape, dtype };\n }\n const values = backend.data.get(x.dataId).values;\n const [resultShape, resultType, resultData] = castImpl(values, x.shape, x.dtype, dtype);\n return backend.makeTensorInfo(resultShape, resultType, resultData);\n}\nexport const castConfig = {\n kernelName: Cast,\n backendName: 'cpu',\n kernelFunc: cast\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsSUFBSSxFQUFxRixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdwSSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsTUFBTSxVQUFVLFFBQVEsQ0FDcEIsTUFBa0IsRUFBRSxLQUFlLEVBQUUsU0FBbUIsRUFDeEQsS0FBZTtJQUNqQixJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDckIsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztLQUN2QztJQUVELElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtRQUNwQixtRUFBbUU7UUFDbkUscUVBQXFFO1FBQ3JFLG9DQUFvQztRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFL0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsR0FBRyw0QkFBNEIsQ0FDMUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxD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QUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtDYXN0LCBDYXN0QXR0cnMsIENhc3RJbnB1dHMsIERhdGFUeXBlLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuaW1wb3J0IHt6ZXJvc30gZnJvbSAnLi4vdXRpbHMvemVyb3NfaW1wbCc7XG5cbmltcG9ydCB7Y29tcGxleH0gZnJvbSAnLi9Db21wbGV4JztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4vSWRlbnRpdHknO1xuaW1wb3J0IHtyZWFsfSBmcm9tICcuL1JlYWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FzdEltcGwoXG4gICAgdmFsdWVzOiBUeXBlZEFycmF5LCBzaGFwZTogbnVtYmVyW10sIGlucHV0VHlwZTogRGF0YVR5cGUsXG4gICAgZHR5cGU6IERhdGFUeXBlKTogW251bWJlcltdLCBEYXRhVHlwZSwgVHlwZWRBcnJheV0ge1xuICBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICBjb25zdCByZXN1bHRWYWx1ZXMgPSBJbnQzMkFycmF5LmZyb20odmFsdWVzKTtcbiAgICByZXR1cm4gW3NoYXBlLCAnaW50MzInLCByZXN1bHRWYWx1ZXNdO1xuICB9XG5cbiAgaWYgKGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAvLyBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSByZXN1bHQgb2Ygbm90RXF1YWwoeCwgMCkuIFdlIGF2b2lkIHVzaW5nXG4gICAgLy8ga2VybmVsIG5vdEVxdWFsIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3ksIGkuZS4gYmluYXJ5X3V0aWxzIC0+XG4gICAgLy8gY2FzdCAtPiBub3RFcXVhbCAtPiBiaW5hcnlfdXRpbHMuXG4gICAgY29uc3QgemVybyA9IHV0aWwudG9UeXBlZEFycmF5KFswXSwgaW5wdXRUeXBlKTtcblxuICAgIGNvbnN0IFtyZXN1bHREYXRhLCByZXN1bHRTaGFwZV0gPSBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKFxuICAgICAgICAoYSwgYikgPT4gKGEgIT09IGIpID8gMSA6IDApKHNoYXBlLCBbXSwgdmFsdWVzLCB6ZXJvLCAnYm9vbCcpO1xuXG4gICAgcmV0dXJuIFtyZXN1bHRTaGFwZSwgJ2Jvb2wnLCByZXN1bHREYXRhXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIENhc3Q6IGZhaWxlZCB0byBjYXN0ICR7aW5wdXRUeXBlfSB0byAke2R0eXBlfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FzdChcbiAgICBhcmdzOiB7aW5wdXRzOiBDYXN0SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IENhc3RBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtkdHlwZX0gPSBhdHRycztcblxuICAvLyBDYXN0aW5nIHRvIGNvbXBsZXg2NC5cbiAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGlmICh4LmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICAgcmV0dXJuIGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHplcm9zVGVuc29ySW5mbyA9IHplcm9zKGJhY2tlbmQsIHguc2hhcGUsIHguZHR5cGUpO1xuICAgIGNvbnN0IGZsb2F0WCA9IGNhc3Qoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge2R0eXBlOiAnZmxvYXQzMid9fSk7XG5cbiAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICBjb21wbGV4KHtpbnB1dHM6IHtyZWFsOiBmbG9hdFgsIGltYWc6IHplcm9zVGVuc29ySW5mb30sIGJhY2tlbmR9KTtcblxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oemVyb3NUZW5zb3JJbmZvKTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGZsb2F0WCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ2FzdGluZyBmcm9tIGNvbXBsZXg2NFxuICBpZiAoeC5kdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICBjb25zdCByZWFsUGFydCA9IHJlYWwoe2lucHV0czoge2lucHV0OiB4fSwgYmFja2VuZH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGNhc3Qoe2lucHV0czoge3g6IHJlYWxQYXJ0fSwgYmFja2VuZCwgYXR0cnM6IHtkdHlwZX19KTtcblxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbFBhcnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghdXRpbC5oYXNFbmNvZGluZ0xvc3MoeC5kdHlwZSwgZHR5cGUpKSB7XG4gICAgLy8gV2UgZG9uJ3QgY2hhbmdlIHRoZSB1bmRlcmx5aW5nIGRhdGEsIHNpbmNlIHdlIGNhc3QgdG8gaGlnaGVyXG4gICAgLy8gcHJlY2lzaW9uLlxuICAgIGNvbnN0IHJlc3VsdCA9IGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICAgIHJldHVybiB7ZGF0YUlkOiByZXN1bHQuZGF0YUlkLCBzaGFwZTogcmVzdWx0LnNoYXBlLCBkdHlwZX07XG4gIH1cblxuICBjb25zdCB2YWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgW3Jlc3VsdFNoYXBlLCByZXN1bHRUeXBlLCByZXN1bHREYXRhXSA9XG4gICAgICBjYXN0SW1wbCh2YWx1ZXMsIHguc2hhcGUsIHguZHR5cGUsIGR0eXBlKTtcbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsIHJlc3VsdFR5cGUsIHJlc3VsdERhdGEpO1xufVxuXG5leHBvcnQgY29uc3QgY2FzdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDYXN0LFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGNhc3QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { cast } from '../kernels/Cast';\nimport { complex } from '../kernels/Complex';\n/**\n * Template that creates a `KernelFunc` for binary ops.\n * @param name Kernel name.\n * @param binaryKernelImpl A `SimpleBinaryKernelImpl` for the kernel.\n * @param binaryKernelComplexImpl Optional. If exists, represents a\n * `ComplexBinaryKernelImpl` for the kernel, will be used when input dtype\n * is `complex64`.\n * @param dtype Optional. If set, the result has this dtype. Otherwise, the\n * result has the same dtype as the first input. This is mainly used in\n * comparison kernels, such as Equal, Less, Greater, etc.\n */\nexport function binaryKernelFunc(name, simpleImpl, complexImpl, dtype) {\n if (complexImpl == null) {\n return ({ inputs, backend }) => {\n const { a, b } = inputs;\n const cpuBackend = backend;\n assertNotComplex([a, b], name);\n const aVals = cpuBackend.data.get(a.dataId).values;\n const bVals = cpuBackend.data.get(b.dataId).values;\n const decodedAVals = a.dtype === 'string' ?\n // tslint:disable-next-line: no-any\n backend_util.fromUint8ToStringArray(aVals) :\n aVals;\n const decodedBVals = a.dtype === 'string' ?\n // tslint:disable-next-line: no-any\n backend_util.fromUint8ToStringArray(bVals) :\n bVals;\n const $dtype = dtype || a.dtype;\n const [resultData, resultShape] = simpleImpl(a.shape, b.shape, decodedAVals, decodedBVals, $dtype);\n return cpuBackend.makeTensorInfo(resultShape, $dtype, resultData);\n };\n }\n return ({ inputs, backend }) => {\n const { a, b } = inputs;\n const cpuBackend = backend;\n if (a.dtype === 'complex64' || b.dtype === 'complex64') {\n const $aComplex = cast({ inputs: { x: a }, backend: cpuBackend, attrs: { dtype: 'complex64' } });\n const $aComplexVals = cpuBackend.data.get($aComplex.dataId);\n const aReal = $aComplexVals.complexTensorInfos.real;\n const aImag = $aComplexVals.complexTensorInfos.imag;\n const aRealVals = cpuBackend.data.get(aReal.dataId).values;\n const aImagVals = cpuBackend.data.get(aImag.dataId).values;\n const $bComplex = cast({ inputs: { x: b }, backend: cpuBackend, attrs: { dtype: 'complex64' } });\n const $bComplexVals = cpuBackend.data.get($bComplex.dataId);\n const bReal = $bComplexVals.complexTensorInfos.real;\n const bImag = $bComplexVals.complexTensorInfos.imag;\n const bRealVals = cpuBackend.data.get(bReal.dataId).values;\n const bImagVals = cpuBackend.data.get(bImag.dataId).values;\n const [resultRealData, resultImagData, resultShape] = complexImpl(a.shape, b.shape, aRealVals, aImagVals, bRealVals, bImagVals);\n const resultReal = cpuBackend.makeTensorInfo(resultShape, 'float32', resultRealData);\n const resultImag = cpuBackend.makeTensorInfo(resultShape, 'float32', resultImagData);\n const result = complex({ inputs: { real: resultReal, imag: resultImag }, backend: cpuBackend });\n cpuBackend.disposeIntermediateTensorInfo($aComplex);\n cpuBackend.disposeIntermediateTensorInfo($bComplex);\n cpuBackend.disposeIntermediateTensorInfo(resultReal);\n cpuBackend.disposeIntermediateTensorInfo(resultImag);\n return result;\n }\n else {\n const aVals = cpuBackend.data.get(a.dataId).values;\n const bVals = cpuBackend.data.get(b.dataId).values;\n const $dtype = dtype || a.dtype;\n const [resultData, resultShape] = simpleImpl(a.shape, b.shape, aVals, bVals, $dtype);\n return cpuBackend.makeTensorInfo(resultShape, $dtype, resultData);\n }\n };\n}\n/**\n * Template that creates the complex type implementation for binary ops.\n * Supports broadcast.\n */\nexport function createComplexBinaryKernelImpl(op) {\n return (aShape, bShape, aRealVals, aImagVals, bRealVals, bImagVals) => {\n const resultShape = backend_util.assertAndGetBroadcastShape(aShape, bShape);\n const resultSize = util.sizeFromShape(resultShape);\n const resultRank = resultShape.length;\n const resultStrides = util.computeStrides(resultShape);\n const resultRealVals = util.getTypedArrayFromDType('float32', resultSize);\n const resultImagVals = util.getTypedArrayFromDType('float32', resultSize);\n const aBroadcastDims = backend_util.getBroadcastDims(aShape, resultShape);\n const bBroadcastDims = backend_util.getBroadcastDims(bShape, resultShape);\n const aVals = backend_util.mergeRealAndImagArrays(aRealVals, aImagVals);\n const bVals = backend_util.mergeRealAndImagArrays(bRealVals, bImagVals);\n const aRank = aShape.length;\n const aStrides = util.computeStrides(aShape);\n const bRank = bShape.length;\n const bStrides = util.computeStrides(bShape);\n if (aBroadcastDims.length + bBroadcastDims.length === 0) {\n for (let i = 0; i < resultRealVals.length; i++) {\n const aIdx = i % aVals.length;\n const bIdx = i % bVals.length;\n const result = op(aVals[aIdx * 2], aVals[aIdx * 2 + 1], bVals[bIdx * 2], bVals[bIdx * 2 + 1]);\n resultRealVals[i] = result.real;\n resultImagVals[i] = result.imag;\n }\n }\n else {\n for (let i = 0; i < resultRealVals.length; i++) {\n const loc = util.indexToLoc(i, resultRank, resultStrides);\n const aLoc = loc.slice(-aRank);\n aBroadcastDims.forEach(d => aLoc[d] = 0);\n const aIndex = util.locToIndex(aLoc, aRank, aStrides);\n const bLoc = loc.slice(-bRank);\n bBroadcastDims.forEach(d => bLoc[d] = 0);\n const bIndex = util.locToIndex(bLoc, bRank, bStrides);\n const opResult = op(aVals[aIndex * 2], aVals[aIndex * 2 + 1], bVals[bIndex * 2], bVals[bIndex * 2 + 1]);\n resultRealVals[i] = opResult.real;\n resultImagVals[i] = opResult.imag;\n }\n }\n return [resultRealVals, resultImagVals, resultShape];\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5X3V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMvdXRpbHMvYmluYXJ5X3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWtELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSTNDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLElBQVksRUFBRSxVQUFrQyxFQUNoRCxXQUFxQyxFQUFFLEtBQWdCO0lBQ3pELElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtRQUN2QixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEVBQUUsRUFBRTtZQUMzQixNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQXNCLENBQUM7WUFDdEMsTUFBTSxVQUFVLEdBQUcsT0FBeUIsQ0FBQztZQUU3QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUvQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztZQUNqRSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztZQUVqRSxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxD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QUFLLENBQUMsQ0FBQztnQkFDL0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUV0RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxRQUFRLEdBQ1YsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDM0QsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFOUIsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQ25DO1NBQ0Y7UUFDRCxPQUFPLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQmluYXJ5SW5wdXRzLCBEYXRhVHlwZSwgS2VybmVsRnVuYywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4uL2tlcm5lbHMvQ2FzdCc7XG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4uL2tlcm5lbHMvQ29tcGxleCc7XG5cbmltcG9ydCB7Q29tcGxleEJpbmFyeUtlcm5lbEltcGwsIENvbXBsZXhCaW5hcnlPcGVyYXRpb24sIFNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4vYmluYXJ5X3R5cGVzJztcblxuLyoqXG4gKiBUZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgYSBgS2VybmVsRnVuY2AgZm9yIGJpbmFyeSBvcHMuXG4gKiBAcGFyYW0gbmFtZSBLZXJuZWwgbmFtZS5cbiAqIEBwYXJhbSBiaW5hcnlLZXJuZWxJbXBsIEEgYFNpbXBsZUJpbmFyeUtlcm5lbEltcGxgIGZvciB0aGUga2VybmVsLlxuICogQHBhcmFtIGJpbmFyeUtlcm5lbENvbXBsZXhJbXBsIE9wdGlvbmFsLiBJZiBleGlzdHMsIHJlcHJlc2VudHMgYVxuICogICAgIGBDb21wbGV4QmluYXJ5S2VybmVsSW1wbGAgZm9yIHRoZSBrZXJuZWwsIHdpbGwgYmUgdXNlZCB3aGVuIGlucHV0IGR0eXBlXG4gKiAgICAgaXMgYGNvbXBsZXg2NGAuXG4gKiBAcGFyYW0gZHR5cGUgT3B0aW9uYWwuIElmIHNldCwgdGhlIHJlc3VsdCBoYXMgdGhpcyBkdHlwZS4gT3RoZXJ3aXNlLCB0aGVcbiAqICAgICByZXN1bHQgaGFzIHRoZSBzYW1lIGR0eXBlIGFzIHRoZSBmaXJzdCBpbnB1dC4gVGhpcyBpcyBtYWlubHkgdXNlZCBpblxuICogICAgIGNvbXBhcmlzb24ga2VybmVscywgc3VjaCBhcyBFcXVhbCwgTGVzcywgR3JlYXRlciwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluYXJ5S2VybmVsRnVuYyhcbiAgICBuYW1lOiBzdHJpbmcsIHNpbXBsZUltcGw6IFNpbXBsZUJpbmFyeUtlcm5lbEltcGwsXG4gICAgY29tcGxleEltcGw/OiBDb21wbGV4QmluYXJ5S2VybmVsSW1wbCwgZHR5cGU/OiBEYXRhVHlwZSk6IEtlcm5lbEZ1bmMge1xuICBpZiAoY29tcGxleEltcGwgPT0gbnVsbCkge1xuICAgIHJldHVybiAoe2lucHV0cywgYmFja2VuZH0pID0+IHtcbiAgICAgIGNvbnN0IHthLCBifSA9IGlucHV0cyBhcyBCaW5hcnlJbnB1dHM7XG4gICAgICBjb25zdCBjcHVCYWNrZW5kID0gYmFja2VuZCBhcyBNYXRoQmFja2VuZENQVTtcblxuICAgICAgYXNzZXJ0Tm90Q29tcGxleChbYSwgYl0sIG5hbWUpO1xuXG4gICAgICBjb25zdCBhVmFscyA9IGNwdUJhY2tlbmQuZGF0YS5nZXQoYS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICAgICAgY29uc3QgYlZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KGIuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICAgICAgY29uc3QgZGVjb2RlZEFWYWxzID0gYS5kdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gICAgICAgICAgYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkoYVZhbHMgYXMgYW55IGFzIFVpbnQ4QXJyYXlbXSkgOlxuICAgICAgICAgIGFWYWxzO1xuICAgICAgY29uc3QgZGVjb2RlZEJWYWxzID0gYS5kdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gICAgICAgICAgYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkoYlZhbHMgYXMgYW55IGFzIFVpbnQ4QXJyYXlbXSkgOlxuICAgICAgICAgIGJWYWxzO1xuICAgICAgY29uc3QgJGR0eXBlID0gZHR5cGUgfHwgYS5kdHlwZTtcblxuICAgICAgY29uc3QgW3Jlc3VsdERhdGEsIHJlc3VsdFNoYXBlXSA9XG4gICAgICAgICAgc2ltcGxlSW1wbChhLnNoYXBlLCBiLnNoYXBlLCBkZWNvZGVkQVZhbHMsIGRlY29kZWRCVmFscywgJGR0eXBlKTtcblxuICAgICAgcmV0dXJuIGNwdUJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsICRkdHlwZSwgcmVzdWx0RGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAoe2lucHV0cywgYmFja2VuZH0pID0+IHtcbiAgICBjb25zdCB7YSwgYn0gPSBpbnB1dHMgYXMgQmluYXJ5SW5wdXRzO1xuICAgIGNvbnN0IGNwdUJhY2tlbmQgPSBiYWNrZW5kIGFzIE1hdGhCYWNrZW5kQ1BVO1xuXG4gICAgaWYgKGEuZHR5cGUgPT09ICdjb21wbGV4NjQnIHx8IGIuZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICBjb25zdCAkYUNvbXBsZXggPSBjYXN0KFxuICAgICAgICAgIHtpbnB1dHM6IHt4OiBhfSwgYmFja2VuZDogY3B1QmFja2VuZCwgYXR0cnM6IHtkdHlwZTogJ2NvbXBsZXg2NCd9fSk7XG5cbiAgICAgIGNvbnN0ICRhQ29tcGxleFZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KCRhQ29tcGxleC5kYXRhSWQpO1xuXG4gICAgICBjb25zdCBhUmVhbCA9ICRhQ29tcGxleFZhbHMuY29tcGxleFRlbnNvckluZm9zLnJlYWw7XG4gICAgICBjb25zdCBhSW1hZyA9ICRhQ29tcGxleFZhbHMuY29tcGxleFRlbnNvckluZm9zLmltYWc7XG5cbiAgICAgIGNvbnN0IGFSZWFsVmFscyA9XG4gICAgICAgICAgY3B1QmFja2VuZC5kYXRhLmdldChhUmVhbC5kYXRhSWQpLnZhbHVlcyBhcyBGbG9hdDMyQXJyYXk7XG4gICAgICBjb25zdCBhSW1hZ1ZhbHMgPVxuICAgICAgICAgIGNwdUJhY2tlbmQuZGF0YS5nZXQoYUltYWcuZGF0YUlkKS52YWx1ZXMgYXMgRmxvYXQzMkFycmF5O1xuXG4gICAgICBjb25zdCAkYkNvbXBsZXggPSBjYXN0KFxuICAgICAgICAgIHtpbnB1dHM6IHt4OiBifSwgYmFja2VuZDogY3B1QmFja2VuZCwgYXR0cnM6IHtkdHlwZTogJ2NvbXBsZXg2NCd9fSk7XG5cbiAgICAgIGNvbnN0ICRiQ29tcGxleFZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KCRiQ29tcGxleC5kYXRhSWQpO1xuXG4gICAgICBjb25zdCBiUmVhbCA9ICRiQ29tcGxleFZhbHMuY29tcGxleFRlbnNvckluZm9zLnJlYWw7XG4gICAgICBjb25zdCBiSW1hZyA9ICRiQ29tcGxleFZhbHMuY29tcGxleFRlbnNvckluZm9zLmltYWc7XG5cbiAgICAgIGNvbnN0IGJSZWFsVmFscyA9XG4gICAgICAgICAgY3B1QmFja2VuZC5kYXRhLmdldChiUmVhbC5kYXRhSWQpLnZhbHVlcyBhcyBGbG9hdDMyQXJyYXk7XG4gICAgICBjb25zdCBiSW1hZ1ZhbHMgPVxuICAgICAgICAgIGNwdUJhY2tlbmQuZGF0YS5nZXQoYkltYWcuZGF0YUlkKS52YWx1ZXMgYXMgRmxvYXQzMkFycmF5O1xuXG4gICAgICBjb25zdCBbcmVzdWx0UmVhbERhdGEsIHJlc3VsdEltYWdEYXRhLCByZXN1bHRTaGFwZV0gPSBjb21wbGV4SW1wbChcbiAgICAgICAgICBhLnNoYXBlLCBiLnNoYXBlLCBhUmVhbFZhbHMsIGFJbWFnVmFscywgYlJlYWxWYWxzLCBiSW1hZ1ZhbHMpO1xuXG4gICAgICBjb25zdCByZXN1bHRSZWFsID1cbiAgICAgICAgICBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlc3VsdFNoYXBlLCAnZmxvYXQzMicsIHJlc3VsdFJlYWxEYXRhKTtcblxuICAgICAgY29uc3QgcmVzdWx0SW1hZyA9XG4gICAgICAgICAgY3B1QmFja2VuZC5tYWtlVGVuc29ySW5mbyhyZXN1bHRTaGFwZSwgJ2Zsb2F0MzInLCByZXN1bHRJbWFnRGF0YSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBsZXgoXG4gICAgICAgICAge2lucHV0czoge3JlYWw6IHJlc3VsdFJlYWwsIGltYWc6IHJlc3VsdEltYWd9LCBiYWNrZW5kOiBjcHVCYWNrZW5kfSk7XG5cbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJGFDb21wbGV4KTtcbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJGJDb21wbGV4KTtcbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzdWx0UmVhbCk7XG4gICAgICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlc3VsdEltYWcpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhVmFscyA9IGNwdUJhY2tlbmQuZGF0YS5nZXQoYS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICAgICAgY29uc3QgYlZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KGIuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICAgICAgY29uc3QgJGR0eXBlID0gZHR5cGUgfHwgYS5kdHlwZTtcblxuICAgICAgY29uc3QgW3Jlc3VsdERhdGEsIHJlc3VsdFNoYXBlXSA9XG4gICAgICAgICAgc2ltcGxlSW1wbChhLnNoYXBlLCBiLnNoYXBlLCBhVmFscywgYlZhbHMsICRkdHlwZSk7XG5cbiAgICAgIHJldHVybiBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlc3VsdFNoYXBlLCAkZHR5cGUsIHJlc3VsdERhdGEpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBUZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgdGhlIGNvbXBsZXggdHlwZSBpbXBsZW1lbnRhdGlvbiBmb3IgYmluYXJ5IG9wcy5cbiAqIFN1cHBvcnRzIGJyb2FkY2FzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBsZXhCaW5hcnlLZXJuZWxJbXBsKG9wOiBDb21wbGV4QmluYXJ5T3BlcmF0aW9uKTpcbiAgICBDb21wbGV4QmluYXJ5S2VybmVsSW1wbCB7XG4gIHJldHVybiAoYVNoYXBlOiBudW1iZXJbXSwgYlNoYXBlOiBudW1iZXJbXSwgYVJlYWxWYWxzOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgYUltYWdWYWxzOiBGbG9hdDMyQXJyYXksIGJSZWFsVmFsczogRmxvYXQzMkFycmF5LFxuICAgICAgICAgIGJJbWFnVmFsczogRmxvYXQzMkFycmF5KTogW1R5cGVkQXJyYXksIFR5cGVkQXJyYXksIG51bWJlcltdXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0U2hhcGUgPSBiYWNrZW5kX3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoYVNoYXBlLCBiU2hhcGUpO1xuICAgIGNvbnN0IHJlc3VsdFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUocmVzdWx0U2hhcGUpO1xuICAgIGNvbnN0IHJlc3VsdFJhbmsgPSByZXN1bHRTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgcmVzdWx0U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMocmVzdWx0U2hhcGUpO1xuXG4gICAgY29uc3QgcmVzdWx0UmVhbFZhbHMgPSB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUoJ2Zsb2F0MzInLCByZXN1bHRTaXplKTtcbiAgICBjb25zdCByZXN1bHRJbWFnVmFscyA9IHV0aWwuZ2V0VHlwZWRBcnJheUZyb21EVHlwZSgnZmxvYXQzMicsIHJlc3VsdFNpemUpO1xuXG4gICAgY29uc3QgYUJyb2FkY2FzdERpbXMgPSBiYWNrZW5kX3V0aWwuZ2V0QnJvYWRjYXN0RGltcyhhU2hhcGUsIHJlc3VsdFNoYXBlKTtcbiAgICBjb25zdCBiQnJvYWRjYXN0RGltcyA9IGJhY2tlbmRfdXRpbC5nZXRCcm9hZGNhc3REaW1zKGJTaGFwZSwgcmVzdWx0U2hhcGUpO1xuXG4gICAgY29uc3QgYVZhbHMgPSBiYWNrZW5kX3V0aWwubWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhhUmVhbFZhbHMsIGFJbWFnVmFscyk7XG4gICAgY29uc3QgYlZhbHMgPSBiYWNrZW5kX3V0aWwubWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhiUmVhbFZhbHMsIGJJbWFnVmFscyk7XG5cbiAgICBjb25zdCBhUmFuayA9IGFTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgYVN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGFTaGFwZSk7XG5cbiAgICBjb25zdCBiUmFuayA9IGJTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgYlN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGJTaGFwZSk7XG5cbiAgICBpZiAoYUJyb2FkY2FzdERpbXMubGVuZ3RoICsgYkJyb2FkY2FzdERpbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFJlYWxWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFJZHggPSBpICUgYVZhbHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBiSWR4ID0gaSAlIGJWYWxzLmxlbmd0aDtcblxuICAgICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICAgICAgb3AoYVZhbHNbYUlkeCAqIDJdLCBhVmFsc1thSWR4ICogMiArIDFdLCBiVmFsc1tiSWR4ICogMl0sXG4gICAgICAgICAgICAgICBiVmFsc1tiSWR4ICogMiArIDFdKTtcblxuICAgICAgICByZXN1bHRSZWFsVmFsc1tpXSA9IHJlc3VsdC5yZWFsO1xuICAgICAgICByZXN1bHRJbWFnVmFsc1tpXSA9IHJlc3VsdC5pbWFnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFJlYWxWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxvYyA9IHV0aWwuaW5kZXhUb0xvYyhpLCByZXN1bHRSYW5rLCByZXN1bHRTdHJpZGVzKTtcblxuICAgICAgICBjb25zdCBhTG9jID0gbG9jLnNsaWNlKC1hUmFuayk7XG4gICAgICAgIGFCcm9hZGNhc3REaW1zLmZvckVhY2goZCA9PiBhTG9jW2RdID0gMCk7XG4gICAgICAgIGNvbnN0IGFJbmRleCA9IHV0aWwubG9jVG9JbmRleChhTG9jLCBhUmFuaywgYVN0cmlkZXMpO1xuXG4gICAgICAgIGNvbnN0IGJMb2MgPSBsb2Muc2xpY2UoLWJSYW5rKTtcbiAgICAgICAgYkJyb2FkY2FzdERpbXMuZm9yRWFjaChkID0+IGJMb2NbZF0gPSAwKTtcbiAgICAgICAgY29uc3QgYkluZGV4ID0gdXRpbC5sb2NUb0luZGV4KGJMb2MsIGJSYW5rLCBiU3RyaWRlcyk7XG5cbiAgICAgICAgY29uc3Qgb3BSZXN1bHQgPVxuICAgICAgICAgICAgb3AoYVZhbHNbYUluZGV4ICogMl0sIGFWYWxzW2FJbmRleCAqIDIgKyAxXSwgYlZhbHNbYkluZGV4ICogMl0sXG4gICAgICAgICAgICAgICBiVmFsc1tiSW5kZXggKiAyICsgMV0pO1xuXG4gICAgICAgIHJlc3VsdFJlYWxWYWxzW2ldID0gb3BSZXN1bHQucmVhbDtcbiAgICAgICAgcmVzdWx0SW1hZ1ZhbHNbaV0gPSBvcFJlc3VsdC5pbWFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3Jlc3VsdFJlYWxWYWxzLCByZXN1bHRJbWFnVmFscywgcmVzdWx0U2hhcGVdO1xuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Add } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc, createComplexBinaryKernelImpl } from '../utils/binary_utils';\nexport const addImpl = createSimpleBinaryKernelImpl(((a, b) => a + b));\nexport const addComplexImpl = createComplexBinaryKernelImpl(((aReal, aImag, bReal, bImag) => {\n return { real: aReal + bReal, imag: aImag + bImag };\n}));\nexport const add = binaryKernelFunc(Add, addImpl, addComplexImpl);\nexport const addConfig = {\n kernelName: Add,\n backendName: 'cpu',\n kernelFunc: add\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDaEIsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDdkIsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzVELE9BQU8sRUFBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFUixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBZGQsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmMsIGNyZWF0ZUNvbXBsZXhCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgYWRkSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYikpO1xuZXhwb3J0IGNvbnN0IGFkZENvbXBsZXhJbXBsID1cbiAgICBjcmVhdGVDb21wbGV4QmluYXJ5S2VybmVsSW1wbCgoKGFSZWFsLCBhSW1hZywgYlJlYWwsIGJJbWFnKSA9PiB7XG4gICAgICByZXR1cm4ge3JlYWw6IGFSZWFsICsgYlJlYWwsIGltYWc6IGFJbWFnICsgYkltYWd9O1xuICAgIH0pKTtcblxuZXhwb3J0IGNvbnN0IGFkZCA9IGJpbmFyeUtlcm5lbEZ1bmMoQWRkLCBhZGRJbXBsLCBhZGRDb21wbGV4SW1wbCk7XG5cbmV4cG9ydCBjb25zdCBhZGRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQWRkLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGFkZFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer, util } from '@tensorflow/tfjs-core';\nexport function bincountImpl(xVals, weightsVals, weightsDtype, weightsShape, size) {\n const weightsSize = util.sizeFromShape(weightsShape);\n const outVals = util.makeZerosTypedArray(size, weightsDtype);\n for (let i = 0; i < xVals.length; i++) {\n const value = xVals[i];\n if (value < 0) {\n throw new Error('Input x must be non-negative!');\n }\n if (value >= size) {\n continue;\n }\n if (weightsSize > 0) {\n outVals[value] += weightsVals[i];\n }\n else {\n outVals[value] += 1;\n }\n }\n return outVals;\n}\nexport function bincountReduceImpl(xBuf, weightsBuf, size, binaryOutput = false) {\n const numRows = xBuf.shape[0];\n const numCols = xBuf.shape[1];\n const outBuf = buffer([numRows, size], weightsBuf.dtype);\n for (let i = 0; i < numRows; i++) {\n for (let j = 0; j < numCols; j++) {\n const value = xBuf.get(i, j);\n if (value < 0) {\n throw new Error('Input x must be non-negative!');\n }\n if (value >= size) {\n continue;\n }\n if (binaryOutput) {\n outBuf.set(1, i, value);\n }\n else {\n if (weightsBuf.size > 0) {\n outBuf.set(outBuf.get(i, value) + weightsBuf.get(i, j), i, value);\n }\n else {\n outBuf.set(outBuf.get(i, value) + 1, i, value);\n }\n }\n }\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluY291bnRfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQmluY291bnRfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUE0QyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RixNQUFNLFVBQVUsWUFBWSxDQUN4QixLQUFpQixFQUFFLFdBQXVCLEVBQUUsWUFBc0IsRUFDbEUsWUFBc0IsRUFBRSxJQUFZO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQWUsQ0FBQztJQUUzRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2pCLFNBQVM7U0FDVjtRQUVELElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JCO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUM5QixJQUFxQixFQUFFLFVBQTJCLEVBQUUsSUFBWSxFQUNoRSxZQUFZLEdBQUcsS0FBSztJQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQzthQUNsRDtZQUVELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsU0FBUzthQUNWO1lBRUQsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QjtpQkFBTTtnQkFDTCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO29CQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbkU7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNoRDthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sTUFBeUIsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgRGF0YVR5cGUsIFJhbmssIFRlbnNvckJ1ZmZlciwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmNvdW50SW1wbChcbiAgICB4VmFsczogVHlwZWRBcnJheSwgd2VpZ2h0c1ZhbHM6IFR5cGVkQXJyYXksIHdlaWdodHNEdHlwZTogRGF0YVR5cGUsXG4gICAgd2VpZ2h0c1NoYXBlOiBudW1iZXJbXSwgc2l6ZTogbnVtYmVyKTogVHlwZWRBcnJheSB7XG4gIGNvbnN0IHdlaWdodHNTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHdlaWdodHNTaGFwZSk7XG4gIGNvbnN0IG91dFZhbHMgPSB1dGlsLm1ha2VaZXJvc1R5cGVkQXJyYXkoc2l6ZSwgd2VpZ2h0c0R0eXBlKSBhcyBUeXBlZEFycmF5O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZSA9IHhWYWxzW2ldO1xuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgeCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSEnKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPj0gc2l6ZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHdlaWdodHNTaXplID4gMCkge1xuICAgICAgb3V0VmFsc1t2YWx1ZV0gKz0gd2VpZ2h0c1ZhbHNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dFZhbHNbdmFsdWVdICs9IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dFZhbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5jb3VudFJlZHVjZUltcGw8UiBleHRlbmRzIFJhbms+KFxuICAgIHhCdWY6IFRlbnNvckJ1ZmZlcjxSPiwgd2VpZ2h0c0J1ZjogVGVuc29yQnVmZmVyPFI+LCBzaXplOiBudW1iZXIsXG4gICAgYmluYXJ5T3V0cHV0ID0gZmFsc2UpOiBUZW5zb3JCdWZmZXI8Uj4ge1xuICBjb25zdCBudW1Sb3dzID0geEJ1Zi5zaGFwZVswXTtcbiAgY29uc3QgbnVtQ29scyA9IHhCdWYuc2hhcGVbMV07XG5cbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKFtudW1Sb3dzLCBzaXplXSwgd2VpZ2h0c0J1Zi5kdHlwZSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUNvbHM7IGorKykge1xuICAgICAgY29uc3QgdmFsdWUgPSB4QnVmLmdldChpLCBqKTtcbiAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCB4IG11c3QgYmUgbm9uLW5lZ2F0aXZlIScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPj0gc2l6ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJpbmFyeU91dHB1dCkge1xuICAgICAgICBvdXRCdWYuc2V0KDEsIGksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh3ZWlnaHRzQnVmLnNpemUgPiAwKSB7XG4gICAgICAgICAgb3V0QnVmLnNldChvdXRCdWYuZ2V0KGksIHZhbHVlKSArIHdlaWdodHNCdWYuZ2V0KGksIGopLCBpLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0QnVmLnNldChvdXRCdWYuZ2V0KGksIHZhbHVlKSArIDEsIGksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRCdWYgYXMgVGVuc29yQnVmZmVyPFI+O1xufVxuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { BitwiseAnd } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const bitwiseAndImpl = createSimpleBinaryKernelImpl(((a, b) => a & b));\nexport const bitwiseAnd = binaryKernelFunc(BitwiseAnd, bitwiseAndImpl);\nexport const bitwiseAndConfig = {\n kernelName: BitwiseAnd,\n backendName: 'cpu',\n kernelFunc: bitwiseAnd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0d2lzZUFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQml0d2lzZUFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFL0QsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN2Qiw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFcEUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBaUI7SUFDNUMsVUFBVSxFQUFFLFVBQVU7SUFDdEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFVBQVU7Q0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtCaXR3aXNlQW5kLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgYml0d2lzZUFuZEltcGwgPVxuICAgIGNyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGwoKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSAmIGIpKTtcblxuZXhwb3J0IGNvbnN0IGJpdHdpc2VBbmQgPSBiaW5hcnlLZXJuZWxGdW5jKEJpdHdpc2VBbmQsIGJpdHdpc2VBbmRJbXBsKTtcblxuZXhwb3J0IGNvbnN0IGJpdHdpc2VBbmRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQml0d2lzZUFuZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBiaXR3aXNlQW5kXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\n/**\n * Template that creates implementation for unary op.\n */\nexport function createSimpleUnaryImpl(op) {\n return (values, dtype, attrs) => {\n const newValues = util.getArrayFromDType(dtype, values.length);\n for (let i = 0; i < values.length; ++i) {\n newValues[i] = op(values[i], attrs);\n }\n return newValues;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hcnlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL3V0aWxzL3VuYXJ5X2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTNDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNDLEVBQThCO0lBRWxFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzlCLE1BQU0sU0FBUyxHQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHt1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge1NpbXBsZVVuYXJ5SW1wbCwgU2ltcGxlVW5hcnlPcGVyYXRpb259IGZyb20gJy4vdW5hcnlfdHlwZXMnO1xuXG4vKipcbiAqIFRlbXBsYXRlIHRoYXQgY3JlYXRlcyBpbXBsZW1lbnRhdGlvbiBmb3IgdW5hcnkgb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW1wbGVVbmFyeUltcGw8SSBleHRlbmRzIG51bWJlciB8IHN0cmluZyA9IG51bWJlcixcbiAgTyBleHRlbmRzIG51bWJlciB8IHN0cmluZyA9IG51bWJlcj4ob3A6IFNpbXBsZVVuYXJ5T3BlcmF0aW9uPEksIE8+KTpcbiAgICBTaW1wbGVVbmFyeUltcGw8SSwgTz4ge1xuICByZXR1cm4gKHZhbHVlcywgZHR5cGUsIGF0dHJzKSA9PiB7XG4gICAgY29uc3QgbmV3VmFsdWVzID1cbiAgICAgICAgdXRpbC5nZXRBcnJheUZyb21EVHlwZShkdHlwZSwgdmFsdWVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIG5ld1ZhbHVlc1tpXSA9IG9wKHZhbHVlc1tpXSwgYXR0cnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3VmFsdWVzO1xuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { createSimpleUnaryImpl } from './unary_impl';\n/**\n * Template that creates a `KernelFunc` for unary ops.\n * @param name Kernel name.\n * @param op A `SimpleUnaryOperation` for the kernel.\n * @param dtype Optional. If set, the result has this dtype. Otherwise, the\n * result has the same dtype as the input. This is mainly used in certain\n * kernels that return bool type, such as isFinite, isInf, etc.\n */\nexport function unaryKernelFunc(name, op, dtype) {\n const impl = createSimpleUnaryImpl(op);\n return unaryKernelFuncFromImpl(name, impl, dtype);\n}\n/**\n * Template that creates a `KernelFunc` for unary ops from the given\n * `SimpleUnaryImpl`..\n * @param name Kernel name.\n * @param unaryImpl A `SimpleUnaryImpl` that implements the op.\n * @param dtype Optional. If set, the result has this dtype. Otherwise, the\n * result has the same dtype as the input. This is mainly used in certain\n * kernels that return bool type, such as isFinite, isInf, etc.\n */\nexport function unaryKernelFuncFromImpl(name, unaryImpl, dtype) {\n return ({ inputs, attrs, backend }) => {\n const { x } = inputs;\n assertNotComplex(x, name);\n const cpuBackend = backend;\n const values = cpuBackend.data.get(x.dataId).values;\n let decoded;\n if (x.dtype === 'string') {\n if (!Array.isArray(values)) {\n throw new Error('String tensor\\'s value was not an instance of Array');\n }\n decoded = backend_util.fromUint8ToStringArray(values);\n }\n else {\n decoded = values;\n }\n const $dtype = dtype || x.dtype;\n const newValues = unaryImpl(decoded, $dtype, attrs);\n return cpuBackend.makeTensorInfo(x.shape, $dtype, newValues);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hcnlfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy91dGlscy91bmFyeV91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUF1QyxNQUFNLHVCQUF1QixDQUFDO0FBR3pGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFJbkQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxlQUFlLENBRTdCLElBQVksRUFBRSxFQUE4QixFQUM1QyxLQUFzQjtJQUV0QixNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBTyxFQUFFLENBQUMsQ0FBQztJQUU3QyxPQUFPLHVCQUF1QixDQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUVyQyxJQUFZLEVBQUUsU0FBZ0MsRUFDOUMsS0FBc0I7SUFFdEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsRUFBRSxFQUFFO1FBQ2xDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFxQixDQUFDO1FBQ2xDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQixNQUFNLFVBQVUsR0FBRyxPQUF5QixDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEQsSUFBSSxPQUFxQixDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQzthQUN4RTtZQUNELE9BQU8sR0FBRyxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUN0QyxDQUFDO1NBQ2hCO2FBQU07WUFDTCxPQUFPLEdBQUcsTUFBaUMsQ0FBQztTQUM3QztRQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBdUIsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERhdGFUeXBlRm9yLCBLZXJuZWxGdW5jLCBVbmFyeUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge2NyZWF0ZVNpbXBsZVVuYXJ5SW1wbH0gZnJvbSAnLi91bmFyeV9pbXBsJztcblxuaW1wb3J0IHtTaW1wbGVVbmFyeUltcGwsIFNpbXBsZVVuYXJ5T3BlcmF0aW9ufSBmcm9tICcuL3VuYXJ5X3R5cGVzJztcblxuLyoqXG4gKiBUZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgYSBgS2VybmVsRnVuY2AgZm9yIHVuYXJ5IG9wcy5cbiAqIEBwYXJhbSBuYW1lIEtlcm5lbCBuYW1lLlxuICogQHBhcmFtIG9wIEEgYFNpbXBsZVVuYXJ5T3BlcmF0aW9uYCBmb3IgdGhlIGtlcm5lbC5cbiAqIEBwYXJhbSBkdHlwZSBPcHRpb25hbC4gSWYgc2V0LCB0aGUgcmVzdWx0IGhhcyB0aGlzIGR0eXBlLiBPdGhlcndpc2UsIHRoZVxuICogICAgIHJlc3VsdCBoYXMgdGhlIHNhbWUgZHR5cGUgYXMgdGhlIGlucHV0LiBUaGlzIGlzIG1haW5seSB1c2VkIGluIGNlcnRhaW5cbiAqICAgICBrZXJuZWxzIHRoYXQgcmV0dXJuIGJvb2wgdHlwZSwgc3VjaCBhcyBpc0Zpbml0ZSwgaXNJbmYsIGV0Yy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuYXJ5S2VybmVsRnVuYzxJIGV4dGVuZHMgbnVtYmVyIHwgc3RyaW5nID0gbnVtYmVyLFxuICBPIGV4dGVuZHMgbnVtYmVyIHwgc3RyaW5nID0gbnVtYmVyPihcbiAgbmFtZTogc3RyaW5nLCBvcDogU2ltcGxlVW5hcnlPcGVyYXRpb248SSwgTz4sXG4gIGR0eXBlPzogRGF0YVR5cGVGb3I8Tz4pOiBLZXJuZWxGdW5jIHtcblxuICBjb25zdCBpbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsPEksIE8+KG9wKTtcblxuICByZXR1cm4gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGw8SSwgTz4obmFtZSwgaW1wbCwgZHR5cGUpO1xufVxuXG4vKipcbiAqIFRlbXBsYXRlIHRoYXQgY3JlYXRlcyBhIGBLZXJuZWxGdW5jYCBmb3IgdW5hcnkgb3BzIGZyb20gdGhlIGdpdmVuXG4gKiBgU2ltcGxlVW5hcnlJbXBsYC4uXG4gKiBAcGFyYW0gbmFtZSBLZXJuZWwgbmFtZS5cbiAqIEBwYXJhbSB1bmFyeUltcGwgQSBgU2ltcGxlVW5hcnlJbXBsYCB0aGF0IGltcGxlbWVudHMgdGhlIG9wLlxuICogQHBhcmFtIGR0eXBlIE9wdGlvbmFsLiBJZiBzZXQsIHRoZSByZXN1bHQgaGFzIHRoaXMgZHR5cGUuIE90aGVyd2lzZSwgdGhlXG4gKiAgICAgcmVzdWx0IGhhcyB0aGUgc2FtZSBkdHlwZSBhcyB0aGUgaW5wdXQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW4gY2VydGFpblxuICogICAgIGtlcm5lbHMgdGhhdCByZXR1cm4gYm9vbCB0eXBlLCBzdWNoIGFzIGlzRmluaXRlLCBpc0luZiwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGw8SSBleHRlbmRzIG51bWJlciB8IHN0cmluZyA9IG51bWJlcixcbiAgTyBleHRlbmRzIG51bWJlciB8IHN0cmluZyA9IG51bWJlcj4oXG4gIG5hbWU6IHN0cmluZywgdW5hcnlJbXBsOiBTaW1wbGVVbmFyeUltcGw8SSwgTz4sXG4gIGR0eXBlPzogRGF0YVR5cGVGb3I8Tz4pOiBLZXJuZWxGdW5jIHtcblxuICByZXR1cm4gKHtpbnB1dHMsIGF0dHJzLCBiYWNrZW5kfSkgPT4ge1xuICAgIGNvbnN0IHt4fSA9IGlucHV0cyBhcyBVbmFyeUlucHV0cztcbiAgICBhc3NlcnROb3RDb21wbGV4KHgsIG5hbWUpO1xuXG4gICAgY29uc3QgY3B1QmFja2VuZCA9IGJhY2tlbmQgYXMgTWF0aEJhY2tlbmRDUFU7XG4gICAgY29uc3QgdmFsdWVzID0gY3B1QmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzO1xuICAgIGxldCBkZWNvZGVkOiBBcnJheUxpa2U8ST47XG4gICAgaWYgKHguZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyB0ZW5zb3JcXCdzIHZhbHVlIHdhcyBub3QgYW4gaW5zdGFuY2Ugb2YgQXJyYXknKTtcbiAgICAgIH1cbiAgICAgIGRlY29kZWQgPSBiYWNrZW5kX3V0aWwuZnJvbVVpbnQ4VG9TdHJpbmdBcnJheSh2YWx1ZXMpIGFzIHVua25vd24gYXNcbiAgICAgICAgQXJyYXlMaWtlPEk+O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvZGVkID0gdmFsdWVzIGFzIHVua25vd24gYXMgQXJyYXlMaWtlPEk+O1xuICAgIH1cblxuICAgIGNvbnN0ICRkdHlwZSA9IGR0eXBlIHx8IHguZHR5cGUgYXMgRGF0YVR5cGVGb3I8Tz47XG4gICAgY29uc3QgbmV3VmFsdWVzID0gdW5hcnlJbXBsKGRlY29kZWQsICRkdHlwZSwgYXR0cnMpO1xuICAgIHJldHVybiBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHguc2hhcGUsICRkdHlwZSwgbmV3VmFsdWVzKTtcbiAgfTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Ceil } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const ceilImpl = createSimpleUnaryImpl((xi) => Math.ceil(xi));\nexport const ceil = unaryKernelFuncFromImpl(Ceil, ceilImpl);\nexport const ceilConfig = {\n kernelName: Ceil,\n backendName: 'cpu',\n kernelFunc: ceil,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2VpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ2VpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0NlaWwsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVVbmFyeUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X2ltcGwnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgY2VpbEltcGwgPSBjcmVhdGVTaW1wbGVVbmFyeUltcGwoKHhpKSA9PiBNYXRoLmNlaWwoeGkpKTtcbmV4cG9ydCBjb25zdCBjZWlsID0gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGwoQ2VpbCwgY2VpbEltcGwpO1xuXG5leHBvcnQgY29uc3QgY2VpbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDZWlsLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGNlaWwsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nexport function concatImpl(inputs, outShape, dtype, simplyConcat) {\n const outVals = util.getArrayFromDType(dtype, util.sizeFromShape(outShape));\n if (simplyConcat && dtype !== 'string') {\n // Use built-in TypedArray.set() method for speed.\n let offset = 0;\n inputs.forEach(input => {\n const size = util.sizeFromShape(input.shape);\n outVals.set(input.vals, offset);\n offset += size;\n });\n }\n else {\n let colOffset = 0;\n inputs.forEach(input => {\n const decodedData = dtype === 'string' ?\n backend_util.fromUint8ToStringArray(input.vals) :\n input.vals;\n let tIdx = 0;\n for (let row = 0; row < input.shape[0]; ++row) {\n const resIdx = row * outShape[1] + colOffset;\n for (let col = 0; col < input.shape[1]; ++col) {\n outVals[resIdx + col] = decodedData[tIdx++];\n }\n }\n colOffset += input.shape[1];\n });\n }\n return outVals;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uY2F0X2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0NvbmNhdF9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQXVDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTlGLE1BQU0sVUFBVSxVQUFVLENBQ3RCLE1BQXFELEVBQUUsUUFBa0IsRUFDekUsS0FBZSxFQUFFLFlBQXFCO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTVFLElBQUksWUFBWSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUMsT0FBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUQsTUFBTSxJQUFJLElBQUksQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztLQUNKO1NBQU07UUFDTCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixNQUFNLFdBQVcsR0FBRyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBQ3BDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsSUFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLEtBQUssQ0FBQyxJQUFrQixDQUFDO1lBRTdCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztZQUViLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUM3QyxNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDN0MsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7b0JBQzdDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQzdDO2FBQ0Y7WUFFRCxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEJhY2tlbmRWYWx1ZXMsIERhdGFUeXBlLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0SW1wbChcbiAgICBpbnB1dHM6IEFycmF5PHt2YWxzOiBCYWNrZW5kVmFsdWVzLCBzaGFwZTogbnVtYmVyW119Piwgb3V0U2hhcGU6IG51bWJlcltdLFxuICAgIGR0eXBlOiBEYXRhVHlwZSwgc2ltcGx5Q29uY2F0OiBib29sZWFuKTogVHlwZWRBcnJheXxzdHJpbmdbXSB7XG4gIGNvbnN0IG91dFZhbHMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKGR0eXBlLCB1dGlsLnNpemVGcm9tU2hhcGUob3V0U2hhcGUpKTtcblxuICBpZiAoc2ltcGx5Q29uY2F0ICYmIGR0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiBUeXBlZEFycmF5LnNldCgpIG1ldGhvZCBmb3Igc3BlZWQuXG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZSk7XG5cbiAgICAgIChvdXRWYWxzIGFzIFR5cGVkQXJyYXkpLnNldChpbnB1dC52YWxzIGFzIFR5cGVkQXJyYXksIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgY29sT2Zmc2V0ID0gMDtcblxuICAgIGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gZHR5cGUgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZnJvbVVpbnQ4VG9TdHJpbmdBcnJheShpbnB1dC52YWxzIGFzIFVpbnQ4QXJyYXlbXSkgOlxuICAgICAgICAgIGlucHV0LnZhbHMgYXMgVHlwZWRBcnJheTtcblxuICAgICAgbGV0IHRJZHggPSAwO1xuXG4gICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBpbnB1dC5zaGFwZVswXTsgKytyb3cpIHtcbiAgICAgICAgY29uc3QgcmVzSWR4ID0gcm93ICogb3V0U2hhcGVbMV0gKyBjb2xPZmZzZXQ7XG4gICAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGlucHV0LnNoYXBlWzFdOyArK2NvbCkge1xuICAgICAgICAgIG91dFZhbHNbcmVzSWR4ICsgY29sXSA9IGRlY29kZWREYXRhW3RJZHgrK107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29sT2Zmc2V0ICs9IGlucHV0LnNoYXBlWzFdO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG91dFZhbHM7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Equal } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const equalImpl = createSimpleBinaryKernelImpl((a, b) => (a === b) ? 1 : 0);\nexport const equal = binaryKernelFunc(Equal, equalImpl, null /* complexImpl */, 'bool');\nexport const equalConfig = {\n kernelName: Equal,\n backendName: 'cpu',\n kernelFunc: equal\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0VxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLDRCQUE0QixDQUFDLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUNkLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFcXVhbCwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGVxdWFsSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IChhID09PSBiKSA/IDEgOiAwKTtcbmV4cG9ydCBjb25zdCBlcXVhbCA9XG4gICAgYmluYXJ5S2VybmVsRnVuYyhFcXVhbCwgZXF1YWxJbXBsLCBudWxsIC8qIGNvbXBsZXhJbXBsICovLCAnYm9vbCcpO1xuXG5leHBvcnQgY29uc3QgZXF1YWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRXF1YWwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogZXF1YWxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Exp } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const expImpl = createSimpleUnaryImpl((xi) => Math.exp(xi));\nexport const exp = unaryKernelFuncFromImpl(Exp, expImpl, 'float32');\nexport const expConfig = {\n kernelName: Exp,\n backendName: 'cpu',\n kernelFunc: exp,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9FeHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBRztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFeHAsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVVbmFyeUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X2ltcGwnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhwSW1wbCA9IGNyZWF0ZVNpbXBsZVVuYXJ5SW1wbCgoeGkpID0+IE1hdGguZXhwKHhpKSk7XG5leHBvcnQgY29uc3QgZXhwID0gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGwoRXhwLCBleHBJbXBsLCAnZmxvYXQzMicpO1xuXG5leHBvcnQgY29uc3QgZXhwQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEV4cCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBleHAsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Expm1 } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const expm1Impl = createSimpleUnaryImpl((xi) => Math.expm1(xi));\nexport const expm1 = unaryKernelFuncFromImpl(Expm1, expm1Impl);\nexport const expm1Config = {\n kernelName: Expm1,\n backendName: 'cpu',\n kernelFunc: expm1,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwbTEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0V4cG0xLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RXhwbTEsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVVbmFyeUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X2ltcGwnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhwbTFJbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsKCh4aSkgPT4gTWF0aC5leHBtMSh4aSkpO1xuZXhwb3J0IGNvbnN0IGV4cG0xID0gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGwoRXhwbTEsIGV4cG0xSW1wbCk7XG5cbmV4cG9ydCBjb25zdCBleHBtMUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFeHBtMSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBleHBtMSxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Floor } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const floorImpl = createSimpleUnaryImpl((xi) => Math.floor(xi));\nexport const floor = unaryKernelFuncFromImpl(Floor, floorImpl);\nexport const floorConfig = {\n kernelName: Floor,\n backendName: 'cpu',\n kernelFunc: floor,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0Zsb29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Rmxvb3IsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVVbmFyeUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X2ltcGwnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZmxvb3JJbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsKCh4aSkgPT4gTWF0aC5mbG9vcih4aSkpO1xuZXhwb3J0IGNvbnN0IGZsb29yID0gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGwoRmxvb3IsIGZsb29ySW1wbCk7XG5cbmV4cG9ydCBjb25zdCBmbG9vckNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBGbG9vcixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBmbG9vcixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\nexport function gatherNdImpl(indicesData, paramsBuf, dtype, numSlices, sliceRank, sliceSize, strides, paramsShape, paramsSize) {\n const outBuf = buffer([numSlices, sliceSize], dtype);\n for (let i = 0; i < numSlices; i++) {\n const index = [];\n let flattenIndex = 0;\n for (let j = 0; j < sliceRank; j++) {\n const dim = indicesData[i * sliceRank + j];\n flattenIndex += dim * strides[j];\n index.push(dim);\n }\n if (flattenIndex < 0 || flattenIndex >= paramsSize / sliceSize) {\n throw new Error(`Invalid indices: ${index} does not index into ${paramsShape}`);\n }\n for (let k = 0; k < sliceSize; k++) {\n outBuf.values[i * sliceSize + k] =\n paramsBuf.get(...paramsBuf.indexToLoc(flattenIndex * sliceSize + k));\n }\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyTmRfSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvR2F0aGVyTmRfSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUEyQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE1BQU0sVUFBVSxZQUFZLENBQ3hCLFdBQXVCLEVBQUUsU0FBMEIsRUFBRSxLQUFlLEVBQ3BFLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUFFLE9BQWlCLEVBQzFFLFdBQXFCLEVBQUUsVUFBa0I7SUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXJELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNDLFlBQVksSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakI7UUFDRCxJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksWUFBWSxJQUFJLFVBQVUsR0FBRyxTQUFTLEVBQUU7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FDWCxvQkFBb0IsS0FBSyx3QkFBd0IsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUNyRTtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFFO0tBQ0Y7SUFFRCxPQUFPLE1BQXlCLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtidWZmZXIsIERhdGFUeXBlLCBSYW5rLCBUZW5zb3JCdWZmZXIsIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJOZEltcGw8UiBleHRlbmRzIFJhbms+KFxuICAgIGluZGljZXNEYXRhOiBUeXBlZEFycmF5LCBwYXJhbXNCdWY6IFRlbnNvckJ1ZmZlcjxSPiwgZHR5cGU6IERhdGFUeXBlLFxuICAgIG51bVNsaWNlczogbnVtYmVyLCBzbGljZVJhbms6IG51bWJlciwgc2xpY2VTaXplOiBudW1iZXIsIHN0cmlkZXM6IG51bWJlcltdLFxuICAgIHBhcmFtc1NoYXBlOiBudW1iZXJbXSwgcGFyYW1zU2l6ZTogbnVtYmVyKTogVGVuc29yQnVmZmVyPFI+IHtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKFtudW1TbGljZXMsIHNsaWNlU2l6ZV0sIGR0eXBlKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVNsaWNlczsgaSsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBbXTtcbiAgICBsZXQgZmxhdHRlbkluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNsaWNlUmFuazsgaisrKSB7XG4gICAgICBjb25zdCBkaW0gPSBpbmRpY2VzRGF0YVtpICogc2xpY2VSYW5rICsgal07XG4gICAgICBmbGF0dGVuSW5kZXggKz0gZGltICogc3RyaWRlc1tqXTtcbiAgICAgIGluZGV4LnB1c2goZGltKTtcbiAgICB9XG4gICAgaWYgKGZsYXR0ZW5JbmRleCA8IDAgfHwgZmxhdHRlbkluZGV4ID49IHBhcmFtc1NpemUgLyBzbGljZVNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBpbmRpY2VzOiAke2luZGV4fSBkb2VzIG5vdCBpbmRleCBpbnRvICR7cGFyYW1zU2hhcGV9YCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBzbGljZVNpemU7IGsrKykge1xuICAgICAgb3V0QnVmLnZhbHVlc1tpICogc2xpY2VTaXplICsga10gPVxuICAgICAgICAgIHBhcmFtc0J1Zi5nZXQoLi4ucGFyYW1zQnVmLmluZGV4VG9Mb2MoZmxhdHRlbkluZGV4ICogc2xpY2VTaXplICsgaykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRCdWYgYXMgVGVuc29yQnVmZmVyPFI+O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\nexport function gatherV2Impl(xBuf, indicesBuf, flattenOutputShape) {\n const outBuf = buffer(flattenOutputShape, xBuf.dtype);\n for (let i = 0; i < outBuf.size; ++i) {\n const newLoc = outBuf.indexToLoc(i);\n const originalLoc = newLoc.slice();\n const batchIdx = originalLoc[0];\n const indicesIdx = originalLoc[2];\n const indicesIndex = indicesBuf.locToIndex([batchIdx, indicesIdx]);\n originalLoc[2] = indicesBuf.values[indicesIndex];\n const originalIndex = xBuf.locToIndex(originalLoc);\n if (0 <= originalIndex && originalIndex < xBuf.values.length) {\n outBuf.values[i] = xBuf.values[originalIndex];\n } // Else, index is out of bounds, so leave the default zero val in outBuf.\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyVjJfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvR2F0aGVyVjJfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUErQixNQUFNLHVCQUF1QixDQUFDO0FBRTNFLE1BQU0sVUFBVSxZQUFZLENBQ3hCLElBQXdCLEVBQUUsVUFBOEIsRUFDeEQsa0JBQTRCO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQyxNQUFNLFdBQVcsR0FBYSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFXLENBQUM7UUFFM0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsSUFBSSxhQUFhLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMvQyxDQUFDLHlFQUF5RTtLQUM1RTtJQUVELE9BQU8sTUFBNEIsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgRGF0YVR5cGUsIFJhbmssIFRlbnNvckJ1ZmZlcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdhdGhlclYySW1wbDxSIGV4dGVuZHMgUmFuaywgRCBleHRlbmRzIERhdGFUeXBlPihcbiAgICB4QnVmOiBUZW5zb3JCdWZmZXI8UiwgRD4sIGluZGljZXNCdWY6IFRlbnNvckJ1ZmZlcjxSLCBEPixcbiAgICBmbGF0dGVuT3V0cHV0U2hhcGU6IG51bWJlcltdKTogVGVuc29yQnVmZmVyPFIsIEQ+IHtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKGZsYXR0ZW5PdXRwdXRTaGFwZSwgeEJ1Zi5kdHlwZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0QnVmLnNpemU7ICsraSkge1xuICAgIGNvbnN0IG5ld0xvYyA9IG91dEJ1Zi5pbmRleFRvTG9jKGkpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxMb2M6IG51bWJlcltdID0gbmV3TG9jLnNsaWNlKCk7XG4gICAgY29uc3QgYmF0Y2hJZHggPSBvcmlnaW5hbExvY1swXTtcbiAgICBjb25zdCBpbmRpY2VzSWR4ID0gb3JpZ2luYWxMb2NbMl07XG4gICAgY29uc3QgaW5kaWNlc0luZGV4ID0gaW5kaWNlc0J1Zi5sb2NUb0luZGV4KFtiYXRjaElkeCwgaW5kaWNlc0lkeF0pO1xuICAgIG9yaWdpbmFsTG9jWzJdID0gaW5kaWNlc0J1Zi52YWx1ZXNbaW5kaWNlc0luZGV4XSBhcyBudW1iZXI7XG5cbiAgICBjb25zdCBvcmlnaW5hbEluZGV4ID0geEJ1Zi5sb2NUb0luZGV4KG9yaWdpbmFsTG9jKTtcblxuICAgIGlmICgwIDw9IG9yaWdpbmFsSW5kZXggJiYgb3JpZ2luYWxJbmRleCA8IHhCdWYudmFsdWVzLmxlbmd0aCkge1xuICAgICAgb3V0QnVmLnZhbHVlc1tpXSA9IHhCdWYudmFsdWVzW29yaWdpbmFsSW5kZXhdO1xuICAgIH0gLy8gRWxzZSwgaW5kZXggaXMgb3V0IG9mIGJvdW5kcywgc28gbGVhdmUgdGhlIGRlZmF1bHQgemVybyB2YWwgaW4gb3V0QnVmLlxuICB9XG5cbiAgcmV0dXJuIG91dEJ1ZiBhcyBUZW5zb3JCdWZmZXI8UiwgRD47XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Greater } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const greaterImpl = createSimpleBinaryKernelImpl((a, b) => (a > b) ? 1 : 0);\nexport const greater = binaryKernelFunc(Greater, greaterImpl, null /* complexImpl */, 'bool');\nexport const greaterConfig = {\n kernelName: Greater,\n backendName: 'cpu',\n kernelFunc: greater\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JlYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvR3JlYXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUNwQiw0QkFBNEIsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDaEIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsT0FBTztDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dyZWF0ZXIsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBncmVhdGVySW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IChhID4gYikgPyAxIDogMCk7XG5leHBvcnQgY29uc3QgZ3JlYXRlciA9XG4gICAgYmluYXJ5S2VybmVsRnVuYyhHcmVhdGVyLCBncmVhdGVySW1wbCwgbnVsbCAvKiBjb21wbGV4SW1wbCAqLywgJ2Jvb2wnKTtcblxuZXhwb3J0IGNvbnN0IGdyZWF0ZXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogR3JlYXRlcixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBncmVhdGVyXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { GreaterEqual } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const greaterEqualImpl = createSimpleBinaryKernelImpl((a, b) => (a >= b) ? 1 : 0);\nexport const greaterEqual = binaryKernelFunc(GreaterEqual, greaterEqualImpl, null /* complexImpl */, 'bool');\nexport const greaterEqualConfig = {\n kernelName: GreaterEqual,\n backendName: 'cpu',\n kernelFunc: greaterEqual\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JlYXRlckVxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9HcmVhdGVyRXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUN6Qiw0QkFBNEIsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FDeEMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBaUI7SUFDOUMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFlBQVk7Q0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHcmVhdGVyRXF1YWwsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBncmVhdGVyRXF1YWxJbXBsID1cbiAgICBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPj0gYikgPyAxIDogMCk7XG5leHBvcnQgY29uc3QgZ3JlYXRlckVxdWFsID0gYmluYXJ5S2VybmVsRnVuYyhcbiAgICBHcmVhdGVyRXF1YWwsIGdyZWF0ZXJFcXVhbEltcGwsIG51bGwgLyogY29tcGxleEltcGwgKi8sICdib29sJyk7XG5cbmV4cG9ydCBjb25zdCBncmVhdGVyRXF1YWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogR3JlYXRlckVxdWFsLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGdyZWF0ZXJFcXVhbFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Less } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const lessImpl = createSimpleBinaryKernelImpl((a, b) => (a < b) ? 1 : 0);\nexport const less = binaryKernelFunc(Less, lessImpl, null /* complexImpl */, 'bool');\nexport const lessConfig = {\n kernelName: Less,\n backendName: 'cpu',\n kernelFunc: less\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTGVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUNqQiw0QkFBNEIsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FDYixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBMZXNzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGxlc3NJbXBsID1cbiAgICBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPCBiKSA/IDEgOiAwKTtcbmV4cG9ydCBjb25zdCBsZXNzID1cbiAgICBiaW5hcnlLZXJuZWxGdW5jKExlc3MsIGxlc3NJbXBsLCBudWxsIC8qIGNvbXBsZXhJbXBsICovLCAnYm9vbCcpO1xuXG5leHBvcnQgY29uc3QgbGVzc0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMZXNzLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGxlc3Ncbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LessEqual } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const lessEqualImpl = createSimpleBinaryKernelImpl((a, b) => (a <= b) ? 1 : 0);\nexport const lessEqual = binaryKernelFunc(LessEqual, lessEqualImpl, null /* complexImpl */, 'bool');\nexport const lessEqualConfig = {\n kernelName: LessEqual,\n backendName: 'cpu',\n kernelFunc: lessEqual\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVzc0VxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9MZXNzRXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FDdEIsNEJBQTRCLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRS9FLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUI7SUFDM0MsVUFBVSxFQUFFLFNBQVM7SUFDckIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFNBQVM7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIExlc3NFcXVhbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBsZXNzRXF1YWxJbXBsID1cbiAgICBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPD0gYikgPyAxIDogMCk7XG5leHBvcnQgY29uc3QgbGVzc0VxdWFsID1cbiAgICBiaW5hcnlLZXJuZWxGdW5jKExlc3NFcXVhbCwgbGVzc0VxdWFsSW1wbCwgbnVsbCAvKiBjb21wbGV4SW1wbCAqLywgJ2Jvb2wnKTtcblxuZXhwb3J0IGNvbnN0IGxlc3NFcXVhbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMZXNzRXF1YWwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbGVzc0VxdWFsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function linSpaceImpl(start, stop, num) {\n const step = (stop - start) / (num - 1);\n const values = util.makeZerosTypedArray(num, 'float32');\n values[0] = start;\n for (let i = 1; i < values.length; i++) {\n values[i] = values[i - 1] + step;\n }\n return values;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluU3BhY2VfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTGluU3BhY2VfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxVQUFVLFlBQVksQ0FDeEIsS0FBYSxFQUFFLElBQVksRUFBRSxHQUFXO0lBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDbEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1R5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5TcGFjZUltcGwoXG4gICAgc3RhcnQ6IG51bWJlciwgc3RvcDogbnVtYmVyLCBudW06IG51bWJlcik6IFR5cGVkQXJyYXkge1xuICBjb25zdCBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyAobnVtIC0gMSk7XG5cbiAgY29uc3QgdmFsdWVzID0gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KG51bSwgJ2Zsb2F0MzInKTtcbiAgdmFsdWVzWzBdID0gc3RhcnQ7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWVzW2ldID0gdmFsdWVzW2kgLSAxXSArIHN0ZXA7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Log } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const logImpl = createSimpleUnaryImpl((xi) => Math.log(xi));\nexport const log = unaryKernelFuncFromImpl(Log, logImpl);\nexport const logConfig = {\n kernelName: Log,\n backendName: 'cpu',\n kernelFunc: log,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Mb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxHQUFHO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTG9nfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZVVuYXJ5SW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfaW1wbCc7XG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY0Zyb21JbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBsb2dJbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsKCh4aSkgPT4gTWF0aC5sb2coeGkpKTtcbmV4cG9ydCBjb25zdCBsb2cgPSB1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbChMb2csIGxvZ0ltcGwpO1xuXG5leHBvcnQgY29uc3QgbG9nQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExvZyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBsb2csXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function maxImpl(aVals, reduceSize, outShape, dtype) {\n const vals = util.getTypedArrayFromDType(dtype, util.sizeFromShape(outShape));\n for (let i = 0; i < vals.length; ++i) {\n const offset = i * reduceSize;\n let max = aVals[offset];\n for (let j = 0; j < reduceSize; ++j) {\n const value = aVals[offset + j];\n if (Number.isNaN(value) ||\n value > max) { // comparison with NaN always return false\n max = value;\n }\n }\n vals[i] = max;\n }\n return vals;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4X2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL01heF9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBd0MsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFbEYsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsS0FBaUIsRUFBRSxVQUFrQixFQUFFLFFBQWtCLEVBQ3pELEtBQWU7SUFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUNwQyxLQUF3QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUU1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ25DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDbkIsS0FBSyxHQUFHLEdBQUcsRUFBRSxFQUFHLDBDQUEwQztnQkFDNUQsR0FBRyxHQUFHLEtBQUssQ0FBQzthQUNiO1NBQ0Y7UUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIE51bWVyaWNEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1heEltcGwoXG4gICAgYVZhbHM6IFR5cGVkQXJyYXksIHJlZHVjZVNpemU6IG51bWJlciwgb3V0U2hhcGU6IG51bWJlcltdLFxuICAgIGR0eXBlOiBEYXRhVHlwZSk6IFR5cGVkQXJyYXkge1xuICBjb25zdCB2YWxzID0gdXRpbC5nZXRUeXBlZEFycmF5RnJvbURUeXBlKFxuICAgICAgZHR5cGUgYXMgTnVtZXJpY0RhdGFUeXBlLCB1dGlsLnNpemVGcm9tU2hhcGUob3V0U2hhcGUpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBvZmZzZXQgPSBpICogcmVkdWNlU2l6ZTtcbiAgICBsZXQgbWF4ID0gYVZhbHNbb2Zmc2V0XTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlZHVjZVNpemU7ICsraikge1xuICAgICAgY29uc3QgdmFsdWUgPSBhVmFsc1tvZmZzZXQgKyBqXTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpIHx8XG4gICAgICAgICAgdmFsdWUgPiBtYXgpIHsgIC8vIGNvbXBhcmlzb24gd2l0aCBOYU4gYWx3YXlzIHJldHVybiBmYWxzZVxuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsc1tpXSA9IG1heDtcbiAgfVxuICByZXR1cm4gdmFscztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Maximum } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const maximumImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => Math.max(aValue, bValue)));\nexport const maximum = binaryKernelFunc(Maximum, maximumImpl);\nexport const maximumConfig = {\n kernelName: Maximum,\n backendName: 'cpu',\n kernelFunc: maximum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4aW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTWF4aW11bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUNuRCxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFnQixFQUFFLE1BQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxPQUFPO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBNYXhpbXVtfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG1heGltdW1JbXBsID0gY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbChcbiAgICAoKGFWYWx1ZSwgYlZhbHVlKSA9PiBNYXRoLm1heChhVmFsdWUgYXMgbnVtYmVyLCBiVmFsdWUgYXMgbnVtYmVyKSkpO1xuZXhwb3J0IGNvbnN0IG1heGltdW0gPSBiaW5hcnlLZXJuZWxGdW5jKE1heGltdW0sIG1heGltdW1JbXBsKTtcblxuZXhwb3J0IGNvbnN0IG1heGltdW1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4aW11bSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBtYXhpbXVtXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Minimum } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const minimumImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => Math.min(aValue, bValue)));\nexport const minimum = binaryKernelFunc(Minimum, minimumImpl);\nexport const minimumConfig = {\n kernelName: Minimum,\n backendName: 'cpu',\n kernelFunc: minimum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTWluaW11bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUNuRCxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFnQixFQUFFLE1BQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxPQUFPO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBNaW5pbXVtfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG1pbmltdW1JbXBsID0gY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbChcbiAgICAoKGFWYWx1ZSwgYlZhbHVlKSA9PiBNYXRoLm1pbihhVmFsdWUgYXMgbnVtYmVyLCBiVmFsdWUgYXMgbnVtYmVyKSkpO1xuZXhwb3J0IGNvbnN0IG1pbmltdW0gPSBiaW5hcnlLZXJuZWxGdW5jKE1pbmltdW0sIG1pbmltdW1JbXBsKTtcblxuZXhwb3J0IGNvbnN0IG1pbmltdW1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWluaW11bSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBtaW5pbXVtXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Multiply } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc, createComplexBinaryKernelImpl } from '../utils/binary_utils';\nexport const multiplyImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => aValue * bValue));\nexport const multiplyComplexImpl = createComplexBinaryKernelImpl(((aReal, aImag, bReal, bImag) => {\n return {\n real: aReal * bReal - aImag * bImag,\n imag: aReal * bImag + aImag * bReal\n };\n}));\nexport const multiply = binaryKernelFunc(Multiply, multiplyImpl, multiplyComplexImpl);\nexport const multiplyConfig = {\n kernelName: Multiply,\n backendName: 'cpu',\n kernelFunc: multiply\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlwbHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL011bHRpcGx5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsNkJBQTZCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsNEJBQTRCLENBQ3BELENBQUMsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FDNUIsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzVELE9BQU87UUFDTCxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSztRQUNuQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSztLQUNwQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVSLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FDakIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBRWxFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIE11bHRpcGx5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmMsIGNyZWF0ZUNvbXBsZXhCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgbXVsdGlwbHlJbXBsID0gY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbChcbiAgICAoKGFWYWx1ZTogbnVtYmVyLCBiVmFsdWU6IG51bWJlcikgPT4gYVZhbHVlICogYlZhbHVlKSk7XG5leHBvcnQgY29uc3QgbXVsdGlwbHlDb21wbGV4SW1wbCA9XG4gICAgY3JlYXRlQ29tcGxleEJpbmFyeUtlcm5lbEltcGwoKChhUmVhbCwgYUltYWcsIGJSZWFsLCBiSW1hZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVhbDogYVJlYWwgKiBiUmVhbCAtIGFJbWFnICogYkltYWcsXG4gICAgICAgIGltYWc6IGFSZWFsICogYkltYWcgKyBhSW1hZyAqIGJSZWFsXG4gICAgICB9O1xuICAgIH0pKTtcblxuZXhwb3J0IGNvbnN0IG11bHRpcGx5ID1cbiAgICBiaW5hcnlLZXJuZWxGdW5jKE11bHRpcGx5LCBtdWx0aXBseUltcGwsIG11bHRpcGx5Q29tcGxleEltcGwpO1xuXG5leHBvcnQgY29uc3QgbXVsdGlwbHlDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTXVsdGlwbHksXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbXVsdGlwbHlcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Neg, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { multiplyImpl } from './Multiply';\nexport function negImpl(xVals, xShape, xDtype) {\n const minusOne = util.createScalarValue(-1, xDtype);\n return multiplyImpl([], xShape, minusOne, xVals, xDtype);\n}\nexport function neg(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n assertNotComplex(x, 'neg');\n const xVals = backend.data.get(x.dataId).values;\n const [res, newShape] = negImpl(xVals, x.shape, x.dtype);\n return backend.makeTensorInfo(newShape, x.dtype, res);\n}\nexport const negConfig = {\n kernelName: Neg,\n backendName: 'cpu',\n kernelFunc: neg\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9OZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFxQyxHQUFHLEVBQXVDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXhDLE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBaUIsRUFBRSxNQUFnQixFQUFFLE1BQWdCO0lBRTNFLE1BQU0sUUFBUSxHQUNWLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQXlCLEVBQUUsTUFBTSxDQUFlLENBQUM7SUFDN0UsT0FBTyxZQUFZLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQW9EO0lBRXRFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbkIsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQzlELE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6RCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBOZWcsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIFVuYXJ5SW5wdXRzLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcbmltcG9ydCB7bXVsdGlwbHlJbXBsfSBmcm9tICcuL011bHRpcGx5JztcblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ0ltcGwoeFZhbHM6IFR5cGVkQXJyYXksIHhTaGFwZTogbnVtYmVyW10sIHhEdHlwZTogRGF0YVR5cGUpOlxuICAgIFtUeXBlZEFycmF5LCBudW1iZXJbXV0ge1xuICBjb25zdCBtaW51c09uZSA9XG4gICAgICB1dGlsLmNyZWF0ZVNjYWxhclZhbHVlKC0xIGFzIHVua25vd24gYXMgJ2Zsb2F0MzInLCB4RHR5cGUpIGFzIFR5cGVkQXJyYXk7XG4gIHJldHVybiBtdWx0aXBseUltcGwoW10sIHhTaGFwZSwgbWludXNPbmUsIHhWYWxzLCB4RHR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnKGFyZ3M6IHtpbnB1dHM6IFVuYXJ5SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVX0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcblxuICBhc3NlcnROb3RDb21wbGV4KHgsICduZWcnKTtcblxuICBjb25zdCB4VmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBbcmVzLCBuZXdTaGFwZV0gPSBuZWdJbXBsKHhWYWxzLCB4LnNoYXBlLCB4LmR0eXBlKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhuZXdTaGFwZSwgeC5kdHlwZSwgcmVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5lZ0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBOZWcsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbmVnIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { NotEqual } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const notEqualImpl = createSimpleBinaryKernelImpl(((a, b) => (a !== b) ? 1 : 0));\nexport const notEqual = binaryKernelFunc(NotEqual, notEqualImpl, null /* complexOp */, 'bool');\nexport const notEqualConfig = {\n kernelName: NotEqual,\n backendName: 'cpu',\n kernelFunc: notEqual\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90RXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL05vdEVxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQ3JCLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FDakIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIE5vdEVxdWFsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG5vdEVxdWFsSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoKGEsIGIpID0+IChhICE9PSBiKSA/IDEgOiAwKSk7XG5leHBvcnQgY29uc3Qgbm90RXF1YWwgPVxuICAgIGJpbmFyeUtlcm5lbEZ1bmMoTm90RXF1YWwsIG5vdEVxdWFsSW1wbCwgbnVsbCAvKiBjb21wbGV4T3AgKi8sICdib29sJyk7XG5cbmV4cG9ydCBjb25zdCBub3RFcXVhbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBOb3RFcXVhbCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBub3RFcXVhbFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function transposeImpl(xVals, xShape, dtype, perm, newShape) {\n const xRank = xShape.length;\n const xSize = util.sizeFromShape(xShape);\n const xStrides = util.computeStrides(xShape);\n const newStrides = util.computeStrides(newShape);\n const result = util.getTypedArrayFromDType(dtype, util.sizeFromShape(newShape));\n for (let i = 0; i < xSize; ++i) {\n const loc = util.indexToLoc(i, xRank, xStrides);\n // Permute location.\n const newLoc = new Array(loc.length);\n for (let i = 0; i < newLoc.length; i++) {\n newLoc[i] = loc[perm[i]];\n }\n const newIndex = util.locToIndex(newLoc, xRank, newStrides);\n result[newIndex] = xVals[i];\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3NlX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1RyYW5zcG9zZV9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzQyxNQUFNLFVBQVUsYUFBYSxDQUN6QixLQUFpQixFQUFFLE1BQWdCLEVBQUUsS0FBZSxFQUFFLElBQWMsRUFDcEUsUUFBa0I7SUFDcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ3RDLEtBQXdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWhELG9CQUFvQjtRQUNwQixNQUFNLE1BQU0sR0FBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgTnVtZXJpY0RhdGFUeXBlLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHt1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlSW1wbChcbiAgICB4VmFsczogVHlwZWRBcnJheSwgeFNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLCBwZXJtOiBudW1iZXJbXSxcbiAgICBuZXdTaGFwZTogbnVtYmVyW10pOiBUeXBlZEFycmF5IHtcbiAgY29uc3QgeFJhbmsgPSB4U2hhcGUubGVuZ3RoO1xuICBjb25zdCB4U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSh4U2hhcGUpO1xuICBjb25zdCB4U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoeFNoYXBlKTtcbiAgY29uc3QgbmV3U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMobmV3U2hhcGUpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHV0aWwuZ2V0VHlwZWRBcnJheUZyb21EVHlwZShcbiAgICAgIGR0eXBlIGFzIE51bWVyaWNEYXRhVHlwZSwgdXRpbC5zaXplRnJvbVNoYXBlKG5ld1NoYXBlKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4U2l6ZTsgKytpKSB7XG4gICAgY29uc3QgbG9jID0gdXRpbC5pbmRleFRvTG9jKGksIHhSYW5rLCB4U3RyaWRlcyk7XG5cbiAgICAvLyBQZXJtdXRlIGxvY2F0aW9uLlxuICAgIGNvbnN0IG5ld0xvYzogbnVtYmVyW10gPSBuZXcgQXJyYXkobG9jLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdMb2MubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld0xvY1tpXSA9IGxvY1twZXJtW2ldXTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IHV0aWwubG9jVG9JbmRleChuZXdMb2MsIHhSYW5rLCBuZXdTdHJpZGVzKTtcbiAgICByZXN1bHRbbmV3SW5kZXhdID0geFZhbHNbaV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Prod, upcastType, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { transpose } from './Transpose';\nexport function prodImpl(xShape, xDtype, xVals, reductionAxes) {\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(xShape, reductionAxes);\n const outDtype = upcastType(xDtype, 'int32');\n const outVals = util.makeZerosTypedArray(util.sizeFromShape(outShape), outDtype);\n const reduceSize = util.sizeFromShape(reduceShape);\n for (let i = 0; i < outVals.length; ++i) {\n const offset = i * reduceSize;\n let prod = 1;\n for (let j = 0; j < reduceSize; ++j) {\n prod *= xVals[offset + j];\n }\n outVals[i] = prod;\n }\n return { outVals, outShape, outDtype };\n}\nexport function prod(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n assertNotComplex(x, 'prod');\n const xRank = x.shape.length;\n const axes = util.parseAxisParam(axis, x.shape);\n const permutation = backend_util.getAxesPermutation(axes, xRank);\n let reductionAxes = axes;\n let permutedX = x;\n const intermediateTensorInfos = [];\n if (permutation != null) {\n permutedX = transpose({ inputs: { x }, backend, attrs: { perm: permutation } });\n intermediateTensorInfos.push(permutedX);\n reductionAxes = backend_util.getInnerMostAxes(reductionAxes.length, xRank);\n }\n const xVals = backend.data.get(permutedX.dataId).values;\n const { outVals, outShape, outDtype } = prodImpl(permutedX.shape, permutedX.dtype, xVals, reductionAxes);\n let resultShape = outShape;\n if (keepDims) {\n resultShape = backend_util.expandShapeToKeepDim(outShape, axes);\n }\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return backend.makeTensorInfo(resultShape, outDtype, outVals);\n}\nexport const prodConfig = {\n kernelName: Prod,\n backendName: 'cpu',\n kernelFunc: prod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUHJvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFzQyxJQUFJLEVBQWlELFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc5SixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFnQixFQUFFLE1BQWdCLEVBQUUsS0FBaUIsRUFDckQsYUFBdUI7SUFFekIsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FDekIsWUFBWSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQWUsQ0FBQztJQUMxRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNuQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDbkI7SUFFRCxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FDaEIsSUFBcUU7SUFFdkUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTVCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbEIsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDbkMsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1FBQ3ZCLFNBQVMsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxFQUFDLENBQUMsQ0FBQztRQUMxRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsYUFBYSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzVFO0lBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDdEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLEdBQy9CLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXJFLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUMzQixJQUFJLFFBQVEsRUFBRTtRQUNaLFdBQVcsR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2pFO0lBRUQsdUJBQXVCLENBQUMsT0FBTyxDQUMzQixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5ELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGF0YVR5cGUsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUHJvZCwgUHJvZEF0dHJzLCBQcm9kSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1cGNhc3RUeXBlLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kSW1wbChcbiAgICB4U2hhcGU6IG51bWJlcltdLCB4RHR5cGU6IERhdGFUeXBlLCB4VmFsczogVHlwZWRBcnJheSxcbiAgICByZWR1Y3Rpb25BeGVzOiBudW1iZXJbXSk6XG4gICAge291dFZhbHM6IFR5cGVkQXJyYXksIG91dFNoYXBlOiBudW1iZXJbXSwgb3V0RHR5cGU6IERhdGFUeXBlfSB7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKHhTaGFwZSwgcmVkdWN0aW9uQXhlcyk7XG4gIGNvbnN0IG91dER0eXBlID0gdXBjYXN0VHlwZSh4RHR5cGUsICdpbnQzMicpO1xuICBjb25zdCBvdXRWYWxzID0gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgIHV0aWwuc2l6ZUZyb21TaGFwZShvdXRTaGFwZSksIG91dER0eXBlKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCByZWR1Y2VTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG91dFZhbHMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBvZmZzZXQgPSBpICogcmVkdWNlU2l6ZTtcbiAgICBsZXQgcHJvZCA9IDE7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWR1Y2VTaXplOyArK2opIHtcbiAgICAgIHByb2QgKj0geFZhbHNbb2Zmc2V0ICsgal07XG4gICAgfVxuICAgIG91dFZhbHNbaV0gPSBwcm9kO1xuICB9XG5cbiAgcmV0dXJuIHtvdXRWYWxzLCBvdXRTaGFwZSwgb3V0RHR5cGV9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZChcbiAgICBhcmdzOiB7aW5wdXRzOiBQcm9kSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFByb2RBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KHgsICdwcm9kJyk7XG5cbiAgY29uc3QgeFJhbmsgPSB4LnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgYXhlcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSk7XG5cbiAgY29uc3QgcGVybXV0YXRpb24gPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIHhSYW5rKTtcbiAgbGV0IHJlZHVjdGlvbkF4ZXMgPSBheGVzO1xuICBsZXQgcGVybXV0ZWRYID0geDtcbiAgY29uc3QgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MgPSBbXTtcbiAgaWYgKHBlcm11dGF0aW9uICE9IG51bGwpIHtcbiAgICBwZXJtdXRlZFggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGF0aW9ufX0pO1xuICAgIGludGVybWVkaWF0ZVRlbnNvckluZm9zLnB1c2gocGVybXV0ZWRYKTtcbiAgICByZWR1Y3Rpb25BeGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMocmVkdWN0aW9uQXhlcy5sZW5ndGgsIHhSYW5rKTtcbiAgfVxuXG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5kYXRhLmdldChwZXJtdXRlZFguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qge291dFZhbHMsIG91dFNoYXBlLCBvdXREdHlwZX0gPVxuICAgICAgcHJvZEltcGwocGVybXV0ZWRYLnNoYXBlLCBwZXJtdXRlZFguZHR5cGUsIHhWYWxzLCByZWR1Y3Rpb25BeGVzKTtcblxuICBsZXQgcmVzdWx0U2hhcGUgPSBvdXRTaGFwZTtcbiAgaWYgKGtlZXBEaW1zKSB7XG4gICAgcmVzdWx0U2hhcGUgPSBiYWNrZW5kX3V0aWwuZXhwYW5kU2hhcGVUb0tlZXBEaW0ob3V0U2hhcGUsIGF4ZXMpO1xuICB9XG5cbiAgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MuZm9yRWFjaChcbiAgICAgIHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsIG91dER0eXBlLCBvdXRWYWxzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUHJvZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBwcm9kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nfunction validateIndices(indices, indicesShape, numParams) {\n indices.forEach((index, i) => {\n if (index < 0 || index >= numParams) {\n const locString = util.indexToLoc(i, indicesShape.length, util.computeStrides(indicesShape))\n .join(',');\n throw new Error(`indices[${locString}] = ${index} is not in [0, ${numParams})`);\n }\n });\n}\nfunction validateSplits(paramsNestedSplits, numParamsDenseValues) {\n // Validate\n for (let dim = 0; dim < paramsNestedSplits.length; ++dim) {\n const splits = paramsNestedSplits[dim];\n const lastSplit = (dim === paramsNestedSplits.length - 1) ?\n numParamsDenseValues :\n paramsNestedSplits[dim + 1].length;\n if (splits.length === 0) {\n throw new Error('Ragged splits may not be empty');\n }\n if (splits[0] < 0) {\n throw new Error('Ragged splits must be non-negative');\n }\n if (splits[splits.length - 1] > lastSplit) {\n throw new Error('Ragged splits must not point past values');\n }\n for (let i = 1; i < splits.length; ++i) {\n if (splits[i - 1] > splits[i]) {\n throw new Error('Ragged splits must be sorted in ascending order');\n }\n }\n }\n}\n// Construct the `splits` output tensors, encoded using a nested vector.\n// Also find the slices of values that need to be copied, and store them\n// in `valueSlices`. The total number of values that will be copied (which\n// we need for allocating the output values tensor) is stored in `numValues`.\nfunction makeSplits(indices, indicesShape, paramsNestedSplits, numParamsDenseValues) {\n const valueSlices = [];\n let numValues = 0;\n const numSplits = indicesShape.length - 1 + paramsNestedSplits.length;\n const outSplits = new Array(numSplits).fill(null).map(() => [0]);\n validateSplits(paramsNestedSplits, numParamsDenseValues);\n // Add `splits` that come from all but the last dimension of the dense\n // Tensor `indices`. In particular, for each dimension D, we add a\n // splits tensor whose values are:\n // range(reduceProd(splits.shape[:D]) + 1) * splits.shape[D+1]\n // E.g., if indices.shape=[2, 3, 4] then we will add splits tensors:\n // [0, 3, 6] # length=2+1, stride=3\n // [0, 4, 8, 12, 16, 20, 24] # length=2*3+1, stride=4\n let nrows = 1;\n for (let dim = 0; dim < indicesShape.length - 1; ++dim) {\n nrows *= indicesShape[dim];\n const rowLength = indicesShape[dim + 1];\n for (let i = 1; i < nrows + 1; ++i) {\n outSplits[dim].push(i * rowLength);\n }\n }\n // Add `splits` that come from `paramsNestedSplits`. Starting with the\n // outermost ragged dimension (i.e., the first `splits` tensor), we work\n // our way in, finding the range of values that should be copied. As we\n // go, we update the output `splits` for each dimension with the appropriate\n // values. In particular, the *lengths* of the slices from `param_splits`\n // should be copied to generate corresponding slice lengths in the output\n // splits. E.g., if we are copying a ragged row with length 4, then we\n // should add a new split point to outSplits that is 4 greater than the\n // previous split point in outSplits.\n for (let i = 0; i < indices.length; ++i) {\n let start = indices[i];\n let limit = indices[i] + 1;\n // Copy splits.\n for (let dim = 0; dim < paramsNestedSplits.length; ++dim) {\n const splits = paramsNestedSplits[dim];\n const outDim = dim + indicesShape.length - 1;\n if (outDim >= 0) {\n const outSplitsOutDim = outSplits[outDim];\n const delta = outSplitsOutDim[outSplitsOutDim.length - 1] - splits[start];\n for (let j = start; j < limit; ++j) {\n outSplits[outDim].push(splits[j + 1] + delta);\n }\n }\n start = splits[start];\n limit = splits[limit];\n }\n if (limit !== start) {\n valueSlices.push([start, limit]);\n numValues += limit - start;\n }\n }\n return { outSplits, valueSlices, numValues };\n}\nfunction getSplits(outSplits) {\n const splitsOut = [];\n for (let i = 0; i < outSplits.length; ++i) {\n const numSplits = outSplits[i].length;\n const splits = util.getArrayFromDType('int32', numSplits);\n splitsOut.push(splits);\n outSplits[i].forEach((value, j) => splits[j] = value);\n }\n return splitsOut;\n}\nfunction computeFlatOuterDims(orig, numOutDims) {\n const outDims = orig.slice(0, numOutDims);\n while (outDims.length < numOutDims) {\n outDims.push(1);\n }\n for (let inDim = numOutDims; inDim < orig.length; inDim++) {\n outDims[numOutDims - 1] *= orig[inDim];\n }\n return outDims;\n}\n// For each slice in `(start, limit)` in `valueSlices`, append\n// `paramsDenseValues[start,...,limit] to `values`. `valueSize` indicates\n// the number of scalars contained in each value paramsDenseValues[i].\nfunction writeValueSlices(paramsDenseValues, paramsDenseValuesShape, valueSlices, valueSize, values, valuesShape) {\n const denseM = computeFlatOuterDims(paramsDenseValuesShape, 2)[1];\n const valuesM = computeFlatOuterDims(valuesShape, 2)[1];\n let outPos = 0;\n for (const slice of valueSlices) {\n for (let i = slice[0]; i < slice[1]; ++i) {\n for (let j = 0; j < valueSize; ++j) {\n values[outPos * valuesM + j] = paramsDenseValues[i * denseM + j];\n }\n ++outPos;\n }\n }\n}\nfunction getValues(paramsDenseValues, paramsDenseValuesShape, paramsDenseValuesDType, valueSlices, numValues) {\n const valuesShape = paramsDenseValuesShape.slice();\n valuesShape[0] = numValues;\n const valuesOut = util.getArrayFromDType(paramsDenseValuesDType, util.sizeFromShape(valuesShape));\n const numElements = paramsDenseValues.length;\n const valueSize = numElements === 0 ? 0 : (numElements / paramsDenseValuesShape[0]);\n writeValueSlices(paramsDenseValues, paramsDenseValuesShape, valueSlices, valueSize, valuesOut, valuesShape);\n return [valuesOut, valuesShape];\n}\nexport function raggedGatherImpl(paramsNestedSplits, paramsNestedSplitsShapes, paramsDenseValues, paramsDenseValuesShape, paramsDenseValuesDType, indices, indicesShape, outputRaggedRank) {\n if (paramsNestedSplits.length === 0) {\n throw new Error('paramsNestedSplits must be non empty');\n }\n if (paramsNestedSplitsShapes[0].length === 0) {\n throw new Error('Split tensors must not be scalars');\n }\n const numParams = paramsNestedSplitsShapes[0][0] - 1;\n validateIndices(indices, indicesShape, numParams);\n if (paramsDenseValuesShape.length === 0) {\n throw new Error('params.rank must be nonzero');\n }\n const numParamsDenseValues = paramsDenseValuesShape[0];\n // Calculate the `splits`, and store the value slices that we need to\n // copy in `valueSlices`.\n const { outSplits, valueSlices, numValues } = makeSplits(indices, indicesShape, paramsNestedSplits, numParamsDenseValues);\n // Write the output tensors.\n const outputNestedSplits = getSplits(outSplits);\n const outputDenseValues = getValues(paramsDenseValues, paramsDenseValuesShape, paramsDenseValuesDType, valueSlices, numValues);\n return [outputNestedSplits, outputDenseValues[0], outputDenseValues[1]];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkR2F0aGVyX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JhZ2dlZEdhdGhlcl9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBdUIsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFakUsU0FBUyxlQUFlLENBQ3BCLE9BQW1CLEVBQUUsWUFBc0IsRUFBRSxTQUFpQjtJQUNoRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBYSxFQUFFLENBQVMsRUFBRSxFQUFFO1FBQzNDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1lBQ25DLE1BQU0sU0FBUyxHQUNYLElBQUksQ0FBQyxVQUFVLENBQ1AsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDN0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gsV0FBVyxTQUFTLE9BQU8sS0FBSyxrQkFBa0IsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNuQixrQkFBZ0MsRUFBRSxvQkFBNEI7SUFDaEUsV0FBVztJQUNYLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDeEQsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEtBQUssa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQs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TUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQy9CLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUNqRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFNUIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZnVuY3Rpb24gdmFsaWRhdGVJbmRpY2VzKFxuICAgIGluZGljZXM6IFR5cGVkQXJyYXksIGluZGljZXNTaGFwZTogbnVtYmVyW10sIG51bVBhcmFtczogbnVtYmVyKSB7XG4gIGluZGljZXMuZm9yRWFjaCgoaW5kZXg6IG51bWJlciwgaTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBudW1QYXJhbXMpIHtcbiAgICAgIGNvbnN0IGxvY1N0cmluZyA9XG4gICAgICAgICAgdXRpbC5pbmRleFRvTG9jKFxuICAgICAgICAgICAgICAgICAgaSwgaW5kaWNlc1NoYXBlLmxlbmd0aCwgdXRpbC5jb21wdXRlU3RyaWRlcyhpbmRpY2VzU2hhcGUpKVxuICAgICAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBpbmRpY2VzWyR7bG9jU3RyaW5nfV0gPSAke2luZGV4fSBpcyBub3QgaW4gWzAsICR7bnVtUGFyYW1zfSlgKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNwbGl0cyhcbiAgICBwYXJhbXNOZXN0ZWRTcGxpdHM6IFR5cGVkQXJyYXlbXSwgbnVtUGFyYW1zRGVuc2VWYWx1ZXM6IG51bWJlcikge1xuICAvLyBWYWxpZGF0ZVxuICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBwYXJhbXNOZXN0ZWRTcGxpdHMubGVuZ3RoOyArK2RpbSkge1xuICAgIGNvbnN0IHNwbGl0cyA9IHBhcmFtc05lc3RlZFNwbGl0c1tkaW1dO1xuICAgIGNvbnN0IGxhc3RTcGxpdCA9IChkaW0gPT09IHBhcmFtc05lc3RlZFNwbGl0cy5sZW5ndGggLSAxKSA/XG4gICAgICAgIG51bVBhcmFtc0RlbnNlVmFsdWVzIDpcbiAgICAgICAgcGFyYW1zTmVzdGVkU3BsaXRzW2RpbSArIDFdLmxlbmd0aDtcbiAgICBpZiAoc3BsaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYWdnZWQgc3BsaXRzIG1heSBub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKHNwbGl0c1swXSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmFnZ2VkIHNwbGl0cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgIH1cbiAgICBpZiAoc3BsaXRzW3NwbGl0cy5sZW5ndGggLSAxXSA+IGxhc3RTcGxpdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYWdnZWQgc3BsaXRzIG11c3Qgbm90IHBvaW50IHBhc3QgdmFsdWVzJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoc3BsaXRzW2kgLSAxXSA+IHNwbGl0c1tpXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JhZ2dlZCBzcGxpdHMgbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvbnN0cnVjdCB0aGUgYHNwbGl0c2Agb3V0cHV0IHRlbnNvcnMsIGVuY29kZWQgdXNpbmcgYSBuZXN0ZWQgdmVjdG9yLlxuLy8gQWxzbyBmaW5kIHRoZSBzbGljZXMgb2YgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBjb3BpZWQsIGFuZCBzdG9yZSB0aGVtXG4vLyBpbiBgdmFsdWVTbGljZXNgLiAgVGhlIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMgdGhhdCB3aWxsIGJlIGNvcGllZCAod2hpY2hcbi8vIHdlIG5lZWQgZm9yIGFsbG9jYXRpbmcgdGhlIG91dHB1dCB2YWx1ZXMgdGVuc29yKSBpcyBzdG9yZWQgaW4gYG51bVZhbHVlc2AuXG5mdW5jdGlvbiBtYWtlU3BsaXRzKFxuICAgIGluZGljZXM6IFR5cGVkQXJyYXksIGluZGljZXNTaGFwZTogbnVtYmVyW10sXG4gICAgcGFyYW1zTmVzdGVkU3BsaXRzOiBUeXBlZEFycmF5W10sIG51bVBhcmFtc0RlbnNlVmFsdWVzOiBudW1iZXIpIHtcbiAgY29uc3QgdmFsdWVTbGljZXM6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+ID0gW107XG4gIGxldCBudW1WYWx1ZXMgPSAwO1xuXG4gIGNvbnN0IG51bVNwbGl0cyA9IGluZGljZXNTaGFwZS5sZW5ndGggLSAxICsgcGFyYW1zTmVzdGVkU3BsaXRzLmxlbmd0aDtcbiAgY29uc3Qgb3V0U3BsaXRzID0gbmV3IEFycmF5KG51bVNwbGl0cykuZmlsbChudWxsKS5tYXAoKCkgPT4gWzBdKTtcblxuICB2YWxpZGF0ZVNwbGl0cyhwYXJhbXNOZXN0ZWRTcGxpdHMsIG51bVBhcmFtc0RlbnNlVmFsdWVzKTtcblxuICAvLyBBZGQgYHNwbGl0c2AgdGhhdCBjb21lIGZyb20gYWxsIGJ1dCB0aGUgbGFzdCBkaW1lbnNpb24gb2YgdGhlIGRlbnNlXG4gIC8vIFRlbnNvciBgaW5kaWNlc2AuICBJbiBwYXJ0aWN1bGFyLCBmb3IgZWFjaCBkaW1lbnNpb24gRCwgd2UgYWRkIGFcbiAgLy8gc3BsaXRzIHRlbnNvciB3aG9zZSB2YWx1ZXMgYXJlOlxuICAvLyAgIHJhbmdlKHJlZHVjZVByb2Qoc3BsaXRzLnNoYXBlWzpEXSkgKyAxKSAqIHNwbGl0cy5zaGFwZVtEKzFdXG4gIC8vIEUuZy4sIGlmIGluZGljZXMuc2hhcGU9WzIsIDMsIDRdIHRoZW4gd2Ugd2lsbCBhZGQgc3BsaXRzIHRlbnNvcnM6XG4gIC8vICAgWzAsIDMsIDZdICAgICAgICAgICAgICAgICAgICAjIGxlbmd0aD0yKzEsIHN0cmlkZT0zXG4gIC8vICAgWzAsIDQsIDgsIDEyLCAxNiwgMjAsIDI0XSAgICAjIGxlbmd0aD0yKjMrMSwgc3RyaWRlPTRcbiAgbGV0IG5yb3dzID0gMTtcbiAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgaW5kaWNlc1NoYXBlLmxlbmd0aCAtIDE7ICsrZGltKSB7XG4gICAgbnJvd3MgKj0gaW5kaWNlc1NoYXBlW2RpbV07XG4gICAgY29uc3Qgcm93TGVuZ3RoID0gaW5kaWNlc1NoYXBlW2RpbSArIDFdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnJvd3MgKyAxOyArK2kpIHtcbiAgICAgIG91dFNwbGl0c1tkaW1dLnB1c2goaSAqIHJvd0xlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGBzcGxpdHNgIHRoYXQgY29tZSBmcm9tIGBwYXJhbXNOZXN0ZWRTcGxpdHNgLiAgU3RhcnRpbmcgd2l0aCB0aGVcbiAgLy8gb3V0ZXJtb3N0IHJhZ2dlZCBkaW1lbnNpb24gKGkuZS4sIHRoZSBmaXJzdCBgc3BsaXRzYCB0ZW5zb3IpLCB3ZSB3b3JrXG4gIC8vIG91ciB3YXkgaW4sIGZpbmRpbmcgdGhlIHJhbmdlIG9mIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBjb3BpZWQuICBBcyB3ZVxuICAvLyBnbywgd2UgdXBkYXRlIHRoZSBvdXRwdXQgYHNwbGl0c2AgZm9yIGVhY2ggZGltZW5zaW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlXG4gIC8vIHZhbHVlcy4gIEluIHBhcnRpY3VsYXIsIHRoZSAqbGVuZ3Rocyogb2YgdGhlIHNsaWNlcyBmcm9tIGBwYXJhbV9zcGxpdHNgXG4gIC8vIHNob3VsZCBiZSBjb3BpZWQgdG8gZ2VuZXJhdGUgY29ycmVzcG9uZGluZyBzbGljZSBsZW5ndGhzIGluIHRoZSBvdXRwdXRcbiAgLy8gc3BsaXRzLiAgRS5nLiwgaWYgd2UgYXJlIGNvcHlpbmcgYSByYWdnZWQgcm93IHdpdGggbGVuZ3RoIDQsIHRoZW4gd2VcbiAgLy8gc2hvdWxkIGFkZCBhIG5ldyBzcGxpdCBwb2ludCB0byBvdXRTcGxpdHMgdGhhdCBpcyA0IGdyZWF0ZXIgdGhhbiB0aGVcbiAgLy8gcHJldmlvdXMgc3BsaXQgcG9pbnQgaW4gb3V0U3BsaXRzLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgc3RhcnQgPSBpbmRpY2VzW2ldO1xuICAgIGxldCBsaW1pdCA9IGluZGljZXNbaV0gKyAxO1xuXG4gICAgLy8gQ29weSBzcGxpdHMuXG4gICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgcGFyYW1zTmVzdGVkU3BsaXRzLmxlbmd0aDsgKytkaW0pIHtcbiAgICAgIGNvbnN0IHNwbGl0cyA9IHBhcmFtc05lc3RlZFNwbGl0c1tkaW1dO1xuICAgICAgY29uc3Qgb3V0RGltID0gZGltICsgaW5kaWNlc1NoYXBlLmxlbmd0aCAtIDE7XG4gICAgICBpZiAob3V0RGltID49IDApIHtcbiAgICAgICAgY29uc3Qgb3V0U3BsaXRzT3V0RGltID0gb3V0U3BsaXRzW291dERpbV07XG4gICAgICAgIGNvbnN0IGRlbHRhID1cbiAgICAgICAgICAgIG91dFNwbGl0c091dERpbVtvdXRTcGxpdHNPdXREaW0ubGVuZ3RoIC0gMV0gLSBzcGxpdHNbc3RhcnRdO1xuICAgICAgICBmb3IgKGxldCBqID0gc3RhcnQ7IGogPCBsaW1pdDsgKytqKSB7XG4gICAgICAgICAgb3V0U3BsaXRzW291dERpbV0ucHVzaChzcGxpdHNbaiArIDFdICsgZGVsdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFydCA9IHNwbGl0c1tzdGFydF07XG4gICAgICBsaW1pdCA9IHNwbGl0c1tsaW1pdF07XG4gICAgfVxuICAgIGlmIChsaW1pdCAhPT0gc3RhcnQpIHtcbiAgICAgIHZhbHVlU2xpY2VzLnB1c2goW3N0YXJ0LCBsaW1pdF0pO1xuICAgICAgbnVtVmFsdWVzICs9IGxpbWl0IC0gc3RhcnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtvdXRTcGxpdHMsIHZhbHVlU2xpY2VzLCBudW1WYWx1ZXN9O1xufVxuXG5mdW5jdGlvbiBnZXRTcGxpdHMob3V0U3BsaXRzOiBudW1iZXJbXVtdKSB7XG4gIGNvbnN0IHNwbGl0c091dDogVHlwZWRBcnJheVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0U3BsaXRzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbnVtU3BsaXRzID0gb3V0U3BsaXRzW2ldLmxlbmd0aDtcbiAgICBjb25zdCBzcGxpdHMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKCdpbnQzMicsIG51bVNwbGl0cykgYXMgVHlwZWRBcnJheTtcbiAgICBzcGxpdHNPdXQucHVzaChzcGxpdHMpO1xuXG4gICAgb3V0U3BsaXRzW2ldLmZvckVhY2goKHZhbHVlLCBqOiBudW1iZXIpID0+IHNwbGl0c1tqXSA9IHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBzcGxpdHNPdXQ7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGbGF0T3V0ZXJEaW1zKG9yaWc6IG51bWJlcltdLCBudW1PdXREaW1zOiBudW1iZXIpIHtcbiAgY29uc3Qgb3V0RGltcyA9IG9yaWcuc2xpY2UoMCwgbnVtT3V0RGltcyk7XG4gIHdoaWxlIChvdXREaW1zLmxlbmd0aCA8IG51bU91dERpbXMpIHtcbiAgICBvdXREaW1zLnB1c2goMSk7XG4gIH1cblxuICBmb3IgKGxldCBpbkRpbSA9IG51bU91dERpbXM7IGluRGltIDwgb3JpZy5sZW5ndGg7IGluRGltKyspIHtcbiAgICBvdXREaW1zW251bU91dERpbXMgLSAxXSAqPSBvcmlnW2luRGltXTtcbiAgfVxuXG4gIHJldHVybiBvdXREaW1zO1xufVxuLy8gRm9yIGVhY2ggc2xpY2UgaW4gYChzdGFydCwgbGltaXQpYCBpbiBgdmFsdWVTbGljZXNgLCBhcHBlbmRcbi8vIGBwYXJhbXNEZW5zZVZhbHVlc1tzdGFydCwuLi4sbGltaXRdIHRvIGB2YWx1ZXNgLiAgYHZhbHVlU2l6ZWAgaW5kaWNhdGVzXG4vLyB0aGUgbnVtYmVyIG9mIHNjYWxhcnMgY29udGFpbmVkIGluIGVhY2ggdmFsdWUgcGFyYW1zRGVuc2VWYWx1ZXNbaV0uXG5mdW5jdGlvbiB3cml0ZVZhbHVlU2xpY2VzKFxuICAgIHBhcmFtc0RlbnNlVmFsdWVzOiBUeXBlZEFycmF5LCBwYXJhbXNEZW5zZVZhbHVlc1NoYXBlOiBudW1iZXJbXSxcbiAgICB2YWx1ZVNsaWNlczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIHZhbHVlU2l6ZTogbnVtYmVyLCB2YWx1ZXM6IFR5cGVkQXJyYXksXG4gICAgdmFsdWVzU2hhcGU6IG51bWJlcltdKSB7XG4gIGNvbnN0IGRlbnNlTSA9IGNvbXB1dGVGbGF0T3V0ZXJEaW1zKHBhcmFtc0RlbnNlVmFsdWVzU2hhcGUsIDIpWzFdO1xuICBjb25zdCB2YWx1ZXNNID0gY29tcHV0ZUZsYXRPdXRlckRpbXModmFsdWVzU2hhcGUsIDIpWzFdO1xuXG4gIGxldCBvdXRQb3MgPSAwO1xuICBmb3IgKGNvbnN0IHNsaWNlIG9mIHZhbHVlU2xpY2VzKSB7XG4gICAgZm9yIChsZXQgaSA9IHNsaWNlWzBdOyBpIDwgc2xpY2VbMV07ICsraSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZVNpemU7ICsraikge1xuICAgICAgICB2YWx1ZXNbb3V0UG9zICogdmFsdWVzTSArIGpdID0gcGFyYW1zRGVuc2VWYWx1ZXNbaSAqIGRlbnNlTSArIGpdO1xuICAgICAgfVxuICAgICAgKytvdXRQb3M7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlcyhcbiAgICBwYXJhbXNEZW5zZVZhbHVlczogVHlwZWRBcnJheSwgcGFyYW1zRGVuc2VWYWx1ZXNTaGFwZTogbnVtYmVyW10sXG4gICAgcGFyYW1zRGVuc2VWYWx1ZXNEVHlwZTogRGF0YVR5cGUsIHZhbHVlU2xpY2VzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBudW1WYWx1ZXM6IG51bWJlcik6IFtUeXBlZEFycmF5LCBudW1iZXJbXV0ge1xuICBjb25zdCB2YWx1ZXNTaGFwZSA9IHBhcmFtc0RlbnNlVmFsdWVzU2hhcGUuc2xpY2UoKTtcbiAgdmFsdWVzU2hhcGVbMF0gPSBudW1WYWx1ZXM7XG5cbiAgY29uc3QgdmFsdWVzT3V0ID0gdXRpbC5nZXRBcnJheUZyb21EVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc0RlbnNlVmFsdWVzRFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnNpemVGcm9tU2hhcGUodmFsdWVzU2hhcGUpKSBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IG51bUVsZW1lbnRzID0gcGFyYW1zRGVuc2VWYWx1ZXMubGVuZ3RoO1xuICBjb25zdCB2YWx1ZVNpemUgPVxuICAgICAgbnVtRWxlbWVudHMgPT09IDAgPyAwIDogKG51bUVsZW1lbnRzIC8gcGFyYW1zRGVuc2VWYWx1ZXNTaGFwZVswXSk7XG4gIHdyaXRlVmFsdWVTbGljZXMoXG4gICAgICBwYXJhbXNEZW5zZVZhbHVlcywgcGFyYW1zRGVuc2VWYWx1ZXNTaGFwZSwgdmFsdWVTbGljZXMsIHZhbHVlU2l6ZSxcbiAgICAgIHZhbHVlc091dCwgdmFsdWVzU2hhcGUpO1xuXG4gIHJldHVybiBbdmFsdWVzT3V0LCB2YWx1ZXNTaGFwZV07XG59XG5leHBvcnQgZnVuY3Rpb24gcmFnZ2VkR2F0aGVySW1wbChcbiAgICBwYXJhbXNOZXN0ZWRTcGxpdHM6IFR5cGVkQXJyYXlbXSwgcGFyYW1zTmVzdGVkU3BsaXRzU2hhcGVzOiBudW1iZXJbXVtdLFxuICAgIHBhcmFtc0RlbnNlVmFsdWVzOiBUeXBlZEFycmF5LCBwYXJhbXNEZW5zZVZhbHVlc1NoYXBlOiBudW1iZXJbXSxcbiAgICBwYXJhbXNEZW5zZVZhbHVlc0RUeXBlOiBEYXRhVHlwZSwgaW5kaWNlczogVHlwZWRBcnJheSxcbiAgICBpbmRpY2VzU2hhcGU6IG51bWJlcltdLFxuICAgIG91dHB1dFJhZ2dlZFJhbms6IG51bWJlcik6IFtUeXBlZEFycmF5W10sIFR5cGVkQXJyYXksIG51bWJlcltdXSB7XG4gIGlmIChwYXJhbXNOZXN0ZWRTcGxpdHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwYXJhbXNOZXN0ZWRTcGxpdHMgbXVzdCBiZSBub24gZW1wdHknKTtcbiAgfVxuXG4gIGlmIChwYXJhbXNOZXN0ZWRTcGxpdHNTaGFwZXNbMF0ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTcGxpdCB0ZW5zb3JzIG11c3Qgbm90IGJlIHNjYWxhcnMnKTtcbiAgfVxuICBjb25zdCBudW1QYXJhbXMgPSBwYXJhbXNOZXN0ZWRTcGxpdHNTaGFwZXNbMF1bMF0gLSAxO1xuICB2YWxpZGF0ZUluZGljZXMoaW5kaWNlcywgaW5kaWNlc1NoYXBlLCBudW1QYXJhbXMpO1xuXG4gIGlmIChwYXJhbXNEZW5zZVZhbHVlc1NoYXBlLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyYW1zLnJhbmsgbXVzdCBiZSBub256ZXJvJyk7XG4gIH1cbiAgY29uc3QgbnVtUGFyYW1zRGVuc2VWYWx1ZXMgPSBwYXJhbXNEZW5zZVZhbHVlc1NoYXBlWzBdO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgYHNwbGl0c2AsIGFuZCBzdG9yZSB0aGUgdmFsdWUgc2xpY2VzIHRoYXQgd2UgbmVlZCB0b1xuICAvLyBjb3B5IGluIGB2YWx1ZVNsaWNlc2AuXG4gIGNvbnN0IHtvdXRTcGxpdHMsIHZhbHVlU2xpY2VzLCBudW1WYWx1ZXN9ID0gbWFrZVNwbGl0cyhcbiAgICAgIGluZGljZXMsIGluZGljZXNTaGFwZSwgcGFyYW1zTmVzdGVkU3BsaXRzLCBudW1QYXJhbXNEZW5zZVZhbHVlcyk7XG5cbiAgLy8gV3JpdGUgdGhlIG91dHB1dCB0ZW5zb3JzLlxuICBjb25zdCBvdXRwdXROZXN0ZWRTcGxpdHMgPSBnZXRTcGxpdHMob3V0U3BsaXRzKTtcbiAgY29uc3Qgb3V0cHV0RGVuc2VWYWx1ZXMgPSBnZXRWYWx1ZXMoXG4gICAgICBwYXJhbXNEZW5zZVZhbHVlcywgcGFyYW1zRGVuc2VWYWx1ZXNTaGFwZSwgcGFyYW1zRGVuc2VWYWx1ZXNEVHlwZSxcbiAgICAgIHZhbHVlU2xpY2VzLCBudW1WYWx1ZXMpO1xuXG4gIHJldHVybiBbb3V0cHV0TmVzdGVkU3BsaXRzLCBvdXRwdXREZW5zZVZhbHVlc1swXSwgb3V0cHV0RGVuc2VWYWx1ZXNbMV1dO1xufVxuIl19","/**\n * @license\n * Copyright 2022 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nconst INT32_MAX = 2147483647;\nexport function raggedRangeImpl(starts, startsShape, startsDType, limits, limitsShape, deltas, deltasShape) {\n // Check input tensor shapes.\n if (startsShape.length > 1) {\n throw new Error('starts must be a scalar or vector');\n }\n if (limitsShape.length > 1) {\n throw new Error('limits must be a scalar or vector');\n }\n if (deltasShape.length > 1) {\n throw new Error('deltas must be a scalar or vector');\n }\n // Determine which tensors we need to broadcast.\n const broadcastStarts = startsShape.length === 0;\n const broadcastLimits = limitsShape.length === 0;\n const broadcastDeltas = deltasShape.length === 0;\n // nRows (number of output rows) is the size of the non-broadcast inputs,\n // or 1 if all inputs are scalars.\n const inSizes = [];\n if (!broadcastStarts) {\n inSizes.push(startsShape[0]);\n }\n if (!broadcastLimits) {\n inSizes.push(limitsShape[0]);\n }\n if (!broadcastDeltas) {\n inSizes.push(deltasShape[0]);\n }\n for (let i = 1; i < inSizes.length; ++i) {\n if (inSizes[i] !== inSizes[i - 1]) {\n throw new Error('starts, limits, and deltas must have the same shape');\n }\n }\n const nRows = inSizes.length === 0 ? 1 : inSizes[0];\n // Construct the rtNestedSplits tensor.\n const rtNestedSplits = util.getArrayFromDType('int32', nRows + 1);\n rtNestedSplits[0] = 0;\n for (let row = 0; row < nRows; ++row) {\n const start = broadcastStarts ? starts[0] : starts[row];\n const limit = broadcastLimits ? limits[0] : limits[row];\n const delta = broadcastDeltas ? deltas[0] : deltas[row];\n if (delta === 0) {\n throw new Error('Requires delta != 0');\n }\n let size; // The number of elements in the specified range.\n if (((delta > 0) && (limit < start)) || ((delta < 0) && (limit > start))) {\n size = 0;\n }\n else {\n size = Math.ceil(Math.abs((limit - start) / delta));\n if (size > INT32_MAX) {\n throw new Error(`Requires ((limit - start) / delta) <= ${INT32_MAX}`);\n }\n }\n rtNestedSplits[row + 1] = rtNestedSplits[row] + size;\n }\n const nVals = rtNestedSplits[nRows];\n // Construct the rtDenseValues tensor.\n const rtDenseValues = util.getArrayFromDType(startsDType, nVals);\n let valueIndex = 0;\n for (let row = 0; row < nRows; ++row) {\n const rowSize = rtNestedSplits[row + 1] - rtNestedSplits[row];\n let value = broadcastStarts ? starts[0] : starts[row];\n const delta = broadcastDeltas ? deltas[0] : deltas[row];\n for (let i = 0; i < rowSize; ++i) {\n rtDenseValues[valueIndex++] = value;\n value += delta;\n }\n }\n return [rtNestedSplits, rtDenseValues];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkUmFuZ2VfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmFnZ2VkUmFuZ2VfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQztBQUU3QixNQUFNLFVBQVUsZUFBZSxDQUMzQixNQUFrQixFQUFFLFdBQXFCLEVBQUUsV0FBcUIsRUFDaEUsTUFBa0IsRUFBRSxXQUFxQixFQUFFLE1BQWtCLEVBQzdELFdBQXFCO0lBQ3ZCLDZCQUE2QjtJQUM3QixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztLQUN0RDtJQUNELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0tBQ3REO0lBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7S0FDdEQ7SUFFRCxnREFBZ0Q7SUFDaEQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFFakQseUVBQXlFO0lBQ3pFLGtDQUFrQztJQUNsQyxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNwQixPQUFP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LEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDcEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUQsSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDaEMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLEtBQUssSUFBSSxLQUFLLENBQUM7U0FDaEI7S0FDRjtJQUVELE9BQU8sQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3QgSU5UMzJfTUFYID0gMjE0NzQ4MzY0NztcblxuZXhwb3J0IGZ1bmN0aW9uIHJhZ2dlZFJhbmdlSW1wbChcbiAgICBzdGFydHM6IFR5cGVkQXJyYXksIHN0YXJ0c1NoYXBlOiBudW1iZXJbXSwgc3RhcnRzRFR5cGU6IERhdGFUeXBlLFxuICAgIGxpbWl0czogVHlwZWRBcnJheSwgbGltaXRzU2hhcGU6IG51bWJlcltdLCBkZWx0YXM6IFR5cGVkQXJyYXksXG4gICAgZGVsdGFzU2hhcGU6IG51bWJlcltdKTogW1R5cGVkQXJyYXksIFR5cGVkQXJyYXldIHtcbiAgLy8gQ2hlY2sgaW5wdXQgdGVuc29yIHNoYXBlcy5cbiAgaWYgKHN0YXJ0c1NoYXBlLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0cyBtdXN0IGJlIGEgc2NhbGFyIG9yIHZlY3RvcicpO1xuICB9XG4gIGlmIChsaW1pdHNTaGFwZS5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsaW1pdHMgbXVzdCBiZSBhIHNjYWxhciBvciB2ZWN0b3InKTtcbiAgfVxuICBpZiAoZGVsdGFzU2hhcGUubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVsdGFzIG11c3QgYmUgYSBzY2FsYXIgb3IgdmVjdG9yJyk7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggdGVuc29ycyB3ZSBuZWVkIHRvIGJyb2FkY2FzdC5cbiAgY29uc3QgYnJvYWRjYXN0U3RhcnRzID0gc3RhcnRzU2hhcGUubGVuZ3RoID09PSAwO1xuICBjb25zdCBicm9hZGNhc3RMaW1pdHMgPSBsaW1pdHNTaGFwZS5sZW5ndGggPT09IDA7XG4gIGNvbnN0IGJyb2FkY2FzdERlbHRhcyA9IGRlbHRhc1NoYXBlLmxlbmd0aCA9PT0gMDtcblxuICAvLyBuUm93cyAobnVtYmVyIG9mIG91dHB1dCByb3dzKSBpcyB0aGUgc2l6ZSBvZiB0aGUgbm9uLWJyb2FkY2FzdCBpbnB1dHMsXG4gIC8vIG9yIDEgaWYgYWxsIGlucHV0cyBhcmUgc2NhbGFycy5cbiAgY29uc3QgaW5TaXplczogbnVtYmVyW10gPSBbXTtcbiAgaWYgKCFicm9hZGNhc3RTdGFydHMpIHtcbiAgICBpblNpemVzLnB1c2goc3RhcnRzU2hhcGVbMF0pO1xuICB9XG4gIGlmICghYnJvYWRjYXN0TGltaXRzKSB7XG4gICAgaW5TaXplcy5wdXNoKGxpbWl0c1NoYXBlWzBdKTtcbiAgfVxuICBpZiAoIWJyb2FkY2FzdERlbHRhcykge1xuICAgIGluU2l6ZXMucHVzaChkZWx0YXNTaGFwZVswXSk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGluU2l6ZXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaW5TaXplc1tpXSAhPT0gaW5TaXplc1tpIC0gMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnRzLCBsaW1pdHMsIGFuZCBkZWx0YXMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG5Sb3dzID0gaW5TaXplcy5sZW5ndGggPT09IDAgPyAxIDogaW5TaXplc1swXTtcblxuICAvLyBDb25zdHJ1Y3QgdGhlIHJ0TmVzdGVkU3BsaXRzIHRlbnNvci5cbiAgY29uc3QgcnROZXN0ZWRTcGxpdHMgPVxuICAgICAgdXRpbC5nZXRBcnJheUZyb21EVHlwZSgnaW50MzInLCBuUm93cyArIDEpIGFzIFR5cGVkQXJyYXk7XG4gIHJ0TmVzdGVkU3BsaXRzWzBdID0gMDtcbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgblJvd3M7ICsrcm93KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBicm9hZGNhc3RTdGFydHMgPyBzdGFydHNbMF0gOiBzdGFydHNbcm93XTtcbiAgICBjb25zdCBsaW1pdCA9IGJyb2FkY2FzdExpbWl0cyA/IGxpbWl0c1swXSA6IGxpbWl0c1tyb3ddO1xuICAgIGNvbnN0IGRlbHRhID0gYnJvYWRjYXN0RGVsdGFzID8gZGVsdGFzWzBdIDogZGVsdGFzW3Jvd107XG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVzIGRlbHRhICE9IDAnKTtcbiAgICB9XG4gICAgbGV0IHNpemU6IG51bWJlcjsgIC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCByYW5nZS5cbiAgICBpZiAoKChkZWx0YSA+IDApICYmIChsaW1pdCA8IHN0YXJ0KSkgfHwgKChkZWx0YSA8IDApICYmIChsaW1pdCA+IHN0YXJ0KSkpIHtcbiAgICAgIHNpemUgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplID0gTWF0aC5jZWlsKE1hdGguYWJzKChsaW1pdCAtIHN0YXJ0KSAvIGRlbHRhKSk7XG5cbiAgICAgIGlmIChzaXplID4gSU5UMzJfTUFYKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZXMgKChsaW1pdCAtIHN0YXJ0KSAvIGRlbHRhKSA8PSAke0lOVDMyX01BWH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnROZXN0ZWRTcGxpdHNbcm93ICsgMV0gPSBydE5lc3RlZFNwbGl0c1tyb3ddICsgc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG5WYWxzID0gcnROZXN0ZWRTcGxpdHNbblJvd3NdO1xuXG4gIC8vIENvbnN0cnVjdCB0aGUgcnREZW5zZVZhbHVlcyB0ZW5zb3IuXG4gIGNvbnN0IHJ0RGVuc2VWYWx1ZXMgPVxuICAgICAgdXRpbC5nZXRBcnJheUZyb21EVHlwZShzdGFydHNEVHlwZSwgblZhbHMpIGFzIFR5cGVkQXJyYXk7XG5cbiAgbGV0IHZhbHVlSW5kZXggPSAwO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBuUm93czsgKytyb3cpIHtcbiAgICBjb25zdCByb3dTaXplID0gcnROZXN0ZWRTcGxpdHNbcm93ICsgMV0gLSBydE5lc3RlZFNwbGl0c1tyb3ddO1xuICAgIGxldCB2YWx1ZSA9IGJyb2FkY2FzdFN0YXJ0cyA/IHN0YXJ0c1swXSA6IHN0YXJ0c1tyb3ddO1xuICAgIGNvbnN0IGRlbHRhID0gYnJvYWRjYXN0RGVsdGFzID8gZGVsdGFzWzBdIDogZGVsdGFzW3Jvd107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dTaXplOyArK2kpIHtcbiAgICAgIHJ0RGVuc2VWYWx1ZXNbdmFsdWVJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgdmFsdWUgKz0gZGVsdGE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtydE5lc3RlZFNwbGl0cywgcnREZW5zZVZhbHVlc107XG59XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, broadcastTo, reshape, tidy, util } from '@tensorflow/tfjs-core';\nvar RowPartitionType = backend_util.RowPartitionType;\n// Based on\n// https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/ragged_tensor_to_tensor_op.cc\nclass RaggedTensorToTensorOp {\n constructor(shape, shapeShape, values, valuesShape, valuesDType, defaultValue, defaultValueShape, rowPartitionValues, rowPartitionValuesShapes, rowPartitionTypeStrings) {\n this.shape = shape;\n this.shapeShape = shapeShape;\n this.values = values;\n this.valuesShape = valuesShape;\n this.valuesDType = valuesDType;\n this.defaultValue = defaultValue;\n this.defaultValueShape = defaultValueShape;\n this.rowPartitionValues = rowPartitionValues;\n this.rowPartitionValuesShapes = rowPartitionValuesShapes;\n this.rowPartitionTypes =\n backend_util.getRowPartitionTypesHelper(rowPartitionTypeStrings);\n this.raggedRank = backend_util.getRaggedRank(this.rowPartitionTypes);\n }\n getRowPartitionTypeByDimension(dimension) {\n if (this.rowPartitionTypes[0] === RowPartitionType.FIRST_DIM_SIZE) {\n return this.rowPartitionTypes[dimension + 1];\n }\n else {\n return this.rowPartitionTypes[dimension];\n }\n }\n // Returns the relationship between dimension and dimension + 1.\n getRowPartitionTensor(dimension) {\n if (this.rowPartitionTypes[0] === RowPartitionType.FIRST_DIM_SIZE) {\n return this.rowPartitionValues[dimension + 1];\n }\n else {\n return this.rowPartitionValues[dimension];\n }\n }\n getMaxWidth(dimension) {\n const rowPartitionTensor = this.getRowPartitionTensor(dimension - 1);\n switch (this.getRowPartitionTypeByDimension(dimension - 1)) {\n case RowPartitionType.VALUE_ROWIDS:\n return RaggedTensorToTensorOp.getMaxWidthValueRowID(rowPartitionTensor);\n case RowPartitionType.ROW_SPLITS:\n return RaggedTensorToTensorOp.getMaxWidthRowSplit(rowPartitionTensor);\n default:\n throw new Error(`Cannot handle partition type ${RowPartitionType[this.getRowPartitionTypeByDimension(dimension - 1)]}`);\n }\n }\n static getMaxWidthRowSplit(rowSplit) {\n const tensorLength = rowSplit.length;\n if (tensorLength === 0 || tensorLength === 1) {\n return 0;\n }\n let maxWidth = 0;\n for (let i = 0; i < tensorLength - 1; ++i) {\n const currentWidth = rowSplit[i + 1] - rowSplit[i];\n if (currentWidth > maxWidth) {\n maxWidth = currentWidth;\n }\n }\n return maxWidth;\n }\n static getMaxWidthValueRowID(valueRowIds) {\n const indexLength = valueRowIds.length;\n if (indexLength === 0) {\n return 0;\n }\n let firstEqualIndex = 0;\n let firstEqualIndexValue = valueRowIds[0];\n let maxWidth = 0;\n for (let i = 1; i < indexLength; ++i) {\n const value = valueRowIds[i];\n if (value !== firstEqualIndexValue) {\n firstEqualIndexValue = value;\n maxWidth = Math.max(i - firstEqualIndex, maxWidth);\n firstEqualIndex = i;\n }\n }\n return Math.max(indexLength - firstEqualIndex, maxWidth);\n }\n tensorShapeFromTensor(t, tShape, isPartial = true) {\n if (tShape.length === 0) {\n if (t[0] === -1) {\n return [];\n }\n throw new Error(`The only valid scalar shape tensor is the fully unknown shape specified as -1.`);\n }\n // MakePartialShape/MakeShapeHelper.\n return makeShape(t, isPartial);\n }\n calculateOutputSize(firstDim) {\n const valueShape = this.valuesShape;\n const defaultValueShape = this.defaultValueShape;\n backend_util.validateDefaultValueShape(defaultValueShape, valueShape);\n const shape = this.tensorShapeFromTensor(this.shape, this.shapeShape);\n const outputShape = backend_util.combineRaggedTensorToTensorShapes(this.raggedRank, shape, valueShape);\n const result = outputShape;\n if (result[0] < 0) {\n result[0] = firstDim;\n }\n for (let i = 1; i <= this.raggedRank; ++i) {\n if (result[i] < 0) {\n result[i] = this.getMaxWidth(i);\n }\n }\n return result;\n }\n /**\n * The outputIndex represents the index in the output tensor\n * where the first element of a particular dimension would be written.\n * If it is -1, it indicates that the index is out of scope.\n * Example, given firstDimension = 10, firstDimensionOutput = 6,\n * and outputIndexMultiplier = 100:\n * result = [0 100 200 300 400 500 -1 -1 -1 -1]\n * If firstDimensionOutput = 11 instead, then:\n * result = [0 100 200 300 400 500 600 700 800 900]\n */\n calculateFirstParentOutputIndex(firstDimension, outputIndexMultiplier, firstDimensionOutput) {\n const minDimension = Math.min(firstDimension, firstDimensionOutput);\n const result = [];\n let currentOutputIndex = 0;\n for (let i = 0; i < minDimension; ++i, currentOutputIndex += outputIndexMultiplier) {\n result.push(currentOutputIndex);\n }\n for (let i = minDimension; i < firstDimension; ++i) {\n result.push(-1);\n }\n util.assert(result.length === firstDimension, () => 'Final length of result must be equal to firstDimension.');\n return result;\n }\n calculateOutputIndexRowSplit(rowSplit, parentOutputIndex, outputIndexMultiplier, outputSize) {\n const rowSplitSize = rowSplit.length;\n const result = [];\n for (let i = 0; i < rowSplitSize - 1; ++i) {\n const rowLength = rowSplit[i + 1] - rowSplit[i];\n let realLength = Math.min(outputSize, rowLength);\n let parentOutputIndexCurrent = parentOutputIndex[i];\n if (parentOutputIndexCurrent === -1) {\n realLength = 0;\n }\n for (let j = 0; j < realLength; ++j) {\n result.push(parentOutputIndexCurrent);\n parentOutputIndexCurrent += outputIndexMultiplier;\n }\n for (let j = 0; j < rowLength - realLength; ++j) {\n result.push(-1);\n }\n }\n if (rowSplitSize > 0 && result.length !== rowSplit[rowSplitSize - 1]) {\n throw new Error('Invalid row split size.');\n }\n return result;\n }\n // Calculate the output index of the first element of a list.\n // The parentOutputIndex is the same computation for the previous list.\n // -1 indicates an element or list that is out of range.\n // The outputIndexMultiplier is the number of output indices one moves\n // forward for each column.\n // E.g., given:\n // valueRowIds:[0 1 2 2 2 3 5 5 6]\n // parentOutputIndex:[1000 1100 2000 2100 -1 3000 4000]\n // outputIndexMultiplier: 10\n // outputSize: 2\n // You get:\n // result = [1000 1100 2000 2010 -1 2100 -1 -1 3000]\n // result[0] = parentOutputIndex[valueRowIds[0]]\n // result[1] = parentOutputIndex[valueRowIds[1]]\n // result[2] = parentOutputIndex[valueRowIds[2]]\n // result[3] = parentOutputIndex[valueRowIds[2] + 10]\n // result[4] = -1 because it is the third element the size is 2.\n // result[5] = parentOutputIndex[valueRowIds[3]]\n // result[6] = -1 because parentOutputIndex[valueRowIds[6]] == -1\n // result[7] = -1 because parentOutputIndex[valueRowIds[6]] == -1\n // result[8] = parentOutputIndex[valueRowIds[7]]\n calculateOutputIndexValueRowID(valueRowIds, parentOutputIndex, outputIndexMultiplier, outputSize) {\n const indexSize = valueRowIds.length;\n const result = [];\n if (indexSize === 0) {\n return [];\n }\n let currentOutputColumn = 0;\n let currentValueRowId = valueRowIds[0];\n if (currentValueRowId >= parentOutputIndex.length) {\n throw new Error(`Got currentValueRowId=${currentValueRowId}, which is not less than ${parentOutputIndex.length}`);\n }\n let currentOutputIndex = parentOutputIndex[currentValueRowId];\n result.push(currentOutputIndex);\n for (let i = 1; i < indexSize; ++i) {\n const nextValueRowId = valueRowIds[i];\n if (nextValueRowId === currentValueRowId) {\n if (currentOutputIndex >= 0) {\n ++currentOutputColumn;\n if (currentOutputColumn < outputSize) {\n currentOutputIndex += outputIndexMultiplier;\n }\n else {\n currentOutputIndex = -1;\n }\n }\n }\n else {\n currentOutputColumn = 0;\n currentValueRowId = nextValueRowId;\n if (nextValueRowId >= parentOutputIndex.length) {\n throw new Error(`Got nextValueRowId=${nextValueRowId} which is not less than ${parentOutputIndex.length}`);\n }\n currentOutputIndex = parentOutputIndex[nextValueRowId];\n }\n result.push(currentOutputIndex);\n }\n if (result.length !== valueRowIds.length) {\n throw new Error('Invalid row ids.');\n }\n return result;\n }\n calculateOutputIndex(dimension, parentOutputIndex, outputIndexMultiplier, outputSize) {\n const rowPartitionTensor = this.getRowPartitionTensor(dimension);\n const partitionType = this.getRowPartitionTypeByDimension(dimension);\n switch (partitionType) {\n case RowPartitionType.VALUE_ROWIDS:\n return this.calculateOutputIndexValueRowID(rowPartitionTensor, parentOutputIndex, outputIndexMultiplier, outputSize);\n case RowPartitionType.ROW_SPLITS:\n if (rowPartitionTensor.length - 1 > parentOutputIndex.length) {\n throw new Error(`Row partition size is greater than output size: ${rowPartitionTensor.length - 1} > ${parentOutputIndex.length}`);\n }\n return this.calculateOutputIndexRowSplit(rowPartitionTensor, parentOutputIndex, outputIndexMultiplier, outputSize);\n default:\n throw new Error(`Unsupported partition type: ${RowPartitionType[partitionType]}`);\n }\n }\n getFirstDimensionSize() {\n const firstPartitionTensor = this.rowPartitionValues[0];\n if (this.rowPartitionTypes.length === 0) {\n throw new Error('No row_partition_types given.');\n }\n const firstPartitionType = this.rowPartitionTypes[0];\n switch (firstPartitionType) {\n case RowPartitionType.FIRST_DIM_SIZE:\n return firstPartitionTensor[0];\n case RowPartitionType.VALUE_ROWIDS:\n throw new Error('Cannot handle VALUE_ROWIDS in first dimension.');\n case RowPartitionType.ROW_SPLITS:\n return this.rowPartitionValuesShapes[0][0] - 1;\n default:\n throw new Error(`Cannot handle type ${RowPartitionType[firstPartitionType]}`);\n }\n }\n compute() {\n const firstPartitionTensor = this.rowPartitionValues[0];\n if (firstPartitionTensor.length <= 0) {\n throw new Error('Invalid first partition input. ' +\n 'Tensor requires at least one element.');\n }\n const firstDimension = this.getFirstDimensionSize();\n const outputSize = this.calculateOutputSize(firstDimension);\n const multiplier = new Array(this.raggedRank + 1);\n multiplier[multiplier.length - 1] = 1;\n for (let i = multiplier.length - 2; i >= 0; --i) {\n multiplier[i] = multiplier[i + 1] * outputSize[i + 1];\n }\n // Full size of the tensor.\n const outputShape = makeShape(outputSize, false);\n const outputTensor = util.getArrayFromDType(this.valuesDType, util.sizeFromShape(outputShape));\n const fullSize = multiplier[0] * outputSize[0];\n if (fullSize > 0) {\n let outputIndex = this.calculateFirstParentOutputIndex(firstDimension, multiplier[0], outputSize[0]);\n for (let i = 1; i <= this.raggedRank; ++i) {\n const newOutputIndex = this.calculateOutputIndex(i - 1, outputIndex, multiplier[i], outputSize[i]);\n outputIndex = newOutputIndex;\n }\n this.setOutput(this.raggedRank, outputIndex, outputTensor, outputShape);\n }\n return [outputShape, outputTensor];\n }\n setOutput(raggedRank, outputIndex, outputTensor, outputShape) {\n if (outputTensor.length === 0) {\n return;\n }\n const valuesBase = this.values;\n const outputBase = outputTensor;\n let elementShape = outputShape.slice();\n elementShape = elementShape.slice(raggedRank + 1);\n const valueElementSize = util.sizeFromShape(elementShape);\n const outputIndexSize = outputIndex.length;\n // Broadcast the default value to value_element_size. (We can skip this\n // if defaultValueTensor.size == 1, since we use fill when that's true.)\n let defaultValue = this.defaultValue;\n if (defaultValue.length !== valueElementSize && defaultValue.length !== 1) {\n const srcShape = this.defaultValueShape;\n tidy(() => {\n const defaultValueTensor = reshape(defaultValue, srcShape);\n const bCastDefault = broadcastTo(defaultValueTensor, elementShape);\n defaultValue = bCastDefault.dataSync();\n });\n }\n // Loop through the outputIndex array, finding contiguous regions that\n // should be copied. Once we find the end of a contiguous region, copy it\n // and add any necessary padding (with defaultValue).\n let srcStart = 0; // Start of contiguous region (in values)\n let dstStart = 0; // Destination for contiguous region (in output)\n let dstEnd = 0; // Destination for contiguous region (in output)\n for (let srcI = 0; srcI <= outputIndexSize; ++srcI) {\n // dstI is the destination where the value at srcI should be copied.\n let dstI = srcI < outputIndexSize ? outputIndex[srcI] : -1;\n // If we're still in a contiguous region, then update dstEnd go to the\n // next srcI.\n if (dstI === dstEnd) {\n ++dstEnd;\n continue;\n }\n // We found the end of contiguous region. This can be because we found\n // a gap (dstI > dstEnd), or a source value that shouldn't be copied\n // because it's out-of-bounds (dstI == -1), or the end of the tensor\n // (dstI === -1).\n if (dstStart < dstEnd) {\n // Copy the contiguous region.\n const src = valuesBase.subarray(srcStart * valueElementSize);\n const dst = outputBase.subarray(dstStart * valueElementSize);\n const nVals = (dstEnd - dstStart) * valueElementSize;\n copyArray(dst, src, nVals);\n }\n // Add any necessary padding (w/ defaultValue).\n if (srcI >= outputIndexSize) {\n // We reached the end of values: pad to the end of output.\n const outputSize = outputTensor.length;\n dstI = Math.floor(outputSize / valueElementSize);\n }\n if (dstI > dstEnd) {\n if (this.defaultValue.length === 1) {\n outputBase\n .subarray(dstEnd * valueElementSize, dstI * valueElementSize)\n .fill(this.defaultValue[0]);\n dstEnd = dstI;\n }\n else {\n while (dstI > dstEnd) {\n const dst = outputBase.slice(dstEnd * valueElementSize);\n copyArray(dst, defaultValue, valueElementSize);\n ++dstEnd;\n }\n }\n }\n // Update indices.\n if (dstI < 0) {\n // srcI should be skipped -- leave it out of the contiguous region.\n srcStart = srcI + 1;\n dstStart = dstEnd;\n }\n else {\n // srcI should be copied -- include it in the contiguous region.\n srcStart = srcI;\n dstStart = dstEnd;\n dstEnd = dstStart + 1;\n }\n }\n }\n}\nfunction copyArray(dst, src, size) {\n for (let i = 0; i < size; i++) {\n dst[i] = src[i];\n }\n}\nfunction makeShape(shape, isPartial) {\n const out = [];\n for (let dim of shape) {\n if (dim < 0) {\n if (!isPartial) {\n throw new Error(`Dimension ${dim} must be >= 0`);\n }\n if (dim < -1) {\n throw new Error(`Dimension ${dim} must be >= -1`);\n }\n dim = -1;\n }\n out.push(dim);\n }\n return out;\n}\nexport function raggedTensorToTensorImpl(shape, shapesShape, values, valuesShape, valuesDType, defaultValue, defaultValueShape, rowPartitionValues, rowPartitionValuesShapes, rowPartitionTypes) {\n return new RaggedTensorToTensorOp(shape, shapesShape, values, valuesShape, valuesDType, defaultValue, defaultValueShape, rowPartitionValues, rowPartitionValuesShapes, rowPartitionTypes)\n .compute();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkVGVuc29yVG9UZW5zb3JfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmFnZ2VkVGVuc29yVG9UZW5zb3JfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBWSxPQUFPLEVBQUUsSUFBSSxFQUFjLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTNHLElBQU8sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDO0FBQ3hELFdBQVc7QUFDWCw2R0FBNkc7QUFDN0csTUFBTSxzQkFBc0I7SUFHMUIsWUFDWSxLQUFpQixFQUFVLFVBQW9CLEVBQy9DLE1BQWtCLEVBQVUsV0FBcUIsRUFDakQsV0FBcUIsRUFBVSxZQUF3QixFQUN2RCxpQkFBMkIsRUFDbEIsa0JBQWdDLEVBQ2hDLHdCQUFvQyxFQUNyRCx1QkFBaUM7UUFOekIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVU7UUFDL0MsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFVO1FBQ2pELGdCQUFXLEdBQVgsV0FBVyxDQUFVO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQVk7UUFDdkQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFVO1FBQ2xCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBYztRQUNoQyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQVk7UUFFdkQsSUFBSSxDQUFDLGlCQUFpQjtZQUNsQixZQUFZLENBQUMsMEJBQTBCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJ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QUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDcEMsS0FBaUIsRUFBRSxXQUFxQixFQUFFLE1BQWtCLEVBQzVELFdBQXFCLEVBQUUsV0FBcUIsRUFBRSxZQUF3QixFQUN0RSxpQkFBMkIsRUFBRSxrQkFBZ0MsRUFDN0Qsd0JBQW9DLEVBQ3BDLGlCQUEyQjtJQUM3QixPQUFPLElBQUksc0JBQXNCLENBQ3RCLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUNsRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsRUFDL0QsaUJBQWlCLENBQUM7U0FDeEIsT0FBTyxFQUFFLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIGJyb2FkY2FzdFRvLCBEYXRhVHlwZSwgcmVzaGFwZSwgdGlkeSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IFJvd1BhcnRpdGlvblR5cGUgPSBiYWNrZW5kX3V0aWwuUm93UGFydGl0aW9uVHlwZTtcbi8vIEJhc2VkIG9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3JmbG93L2Jsb2IvbWFzdGVyL3RlbnNvcmZsb3cvY29yZS9rZXJuZWxzL3JhZ2dlZF90ZW5zb3JfdG9fdGVuc29yX29wLmNjXG5jbGFzcyBSYWdnZWRUZW5zb3JUb1RlbnNvck9wIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dQYXJ0aXRpb25UeXBlczogUm93UGFydGl0aW9uVHlwZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJhZ2dlZFJhbms6IG51bWJlcjtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHNoYXBlOiBUeXBlZEFycmF5LCBwcml2YXRlIHNoYXBlU2hhcGU6IG51bWJlcltdLFxuICAgICAgcHJpdmF0ZSB2YWx1ZXM6IFR5cGVkQXJyYXksIHByaXZhdGUgdmFsdWVzU2hhcGU6IG51bWJlcltdLFxuICAgICAgcHJpdmF0ZSB2YWx1ZXNEVHlwZTogRGF0YVR5cGUsIHByaXZhdGUgZGVmYXVsdFZhbHVlOiBUeXBlZEFycmF5LFxuICAgICAgcHJpdmF0ZSBkZWZhdWx0VmFsdWVTaGFwZTogbnVtYmVyW10sXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHJvd1BhcnRpdGlvblZhbHVlczogVHlwZWRBcnJheVtdLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSByb3dQYXJ0aXRpb25WYWx1ZXNTaGFwZXM6IG51bWJlcltdW10sXG4gICAgICByb3dQYXJ0aXRpb25UeXBlU3RyaW5nczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnJvd1BhcnRpdGlvblR5cGVzID1cbiAgICAgICAgYmFja2VuZF91dGlsLmdldFJvd1BhcnRpdGlvblR5cGVzSGVscGVyKHJvd1BhcnRpdGlvblR5cGVTdHJpbmdzKTtcbiAgICB0aGlzLnJhZ2dlZFJhbmsgPSBiYWNrZW5kX3V0aWwuZ2V0UmFnZ2VkUmFuayh0aGlzLnJvd1BhcnRpdGlvblR5cGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um93UGFydGl0aW9uVHlwZUJ5RGltZW5zaW9uKGRpbWVuc2lvbjogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucm93UGFydGl0aW9uVHlwZXNbMF0gPT09IFJvd1BhcnRpdGlvblR5cGUuRklSU1RfRElNX1NJWkUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvd1BhcnRpdGlvblR5cGVzW2RpbWVuc2lvbiArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3dQYXJ0aXRpb25UeXBlc1tkaW1lbnNpb25dO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpbWVuc2lvbiBhbmQgZGltZW5zaW9uICsgMS5cbiAgcHJpdmF0ZSBnZXRSb3dQYXJ0aXRpb25UZW5zb3IoZGltZW5zaW9uOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5yb3dQYXJ0aXRpb25UeXBlc1swXSA9PT0gUm93UGFydGl0aW9uVHlwZS5GSVJTVF9ESU1fU0laRSkge1xuICAgICAgcmV0dXJuIHRoaXMucm93UGFydGl0aW9uVmFsdWVzW2RpbWVuc2lvbiArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3dQYXJ0aXRpb25WYWx1ZXNbZGltZW5zaW9uXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1heFdpZHRoKGRpbWVuc2lvbjogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm93UGFydGl0aW9uVGVuc29yID0gdGhpcy5nZXRSb3dQYXJ0aXRpb25UZW5zb3IoZGltZW5zaW9uIC0gMSk7XG4gICAgc3dpdGNoICh0aGlzLmdldFJvd1BhcnRpdGlvblR5cGVCeURpbWVuc2lvbihkaW1lbnNpb24gLSAxKSkge1xuICAgICAgY2FzZSBSb3dQYXJ0aXRpb25UeXBlLlZBTFVFX1JPV0lEUzpcbiAgICAgICAgcmV0dXJuIFJhZ2dlZFRlbnNvclRvVGVuc29yT3AuZ2V0TWF4V2lkdGhWYWx1ZVJvd0lEKHJvd1BhcnRpdGlvblRlbnNvcik7XG4gICAgICBjYXNlIFJvd1BhcnRpdGlvblR5cGUuUk9XX1NQTElUUzpcbiAgICAgICAgcmV0dXJuIFJhZ2dlZFRlbnNvclRvVGVuc29yT3AuZ2V0TWF4V2lkdGhSb3dTcGxpdChyb3dQYXJ0aXRpb25UZW5zb3IpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGFuZGxlIHBhcnRpdGlvbiB0eXBlICR7XG4gICAgICAgICAgICBSb3dQYXJ0aXRpb25UeXBlW3RoaXMuZ2V0Um93UGFydGl0aW9uVHlwZUJ5RGltZW5zaW9uKFxuICAgICAgICAgICAgICAgIGRpbWVuc2lvbiAtIDEpXX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0TWF4V2lkdGhSb3dTcGxpdChyb3dTcGxpdDogVHlwZWRBcnJheSkge1xuICAgIGNvbnN0IHRlbnNvckxlbmd0aCA9IHJvd1NwbGl0Lmxlbmd0aDtcbiAgICBpZiAodGVuc29yTGVuZ3RoID09PSAwIHx8IHRlbnNvckxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGxldCBtYXhXaWR0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW5zb3JMZW5ndGggLSAxOyArK2kpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IHJvd1NwbGl0W2kgKyAxXSAtIHJvd1NwbGl0W2ldO1xuICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgIG1heFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF4V2lkdGg7XG4gIH1cblxuICBzdGF0aWMgZ2V0TWF4V2lkdGhWYWx1ZVJvd0lEKHZhbHVlUm93SWRzOiBUeXBlZEFycmF5KSB7XG4gICAgY29uc3QgaW5kZXhMZW5ndGggPSB2YWx1ZVJvd0lkcy5sZW5ndGg7XG4gICAgaWYgKGluZGV4TGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgbGV0IGZpcnN0RXF1YWxJbmRleCA9IDA7XG4gICAgbGV0IGZpcnN0RXF1YWxJbmRleFZhbHVlID0gdmFsdWVSb3dJZHNbMF07XG4gICAgbGV0IG1heFdpZHRoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGluZGV4TGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVSb3dJZHNbaV07XG4gICAgICBpZiAodmFsdWUgIT09IGZpcnN0RXF1YWxJbmRleFZhbHVlKSB7XG4gICAgICAgIGZpcnN0RXF1YWxJbmRleFZhbHVlID0gdmFsdWU7XG4gICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgoaSAtIGZpcnN0RXF1YWxJbmRleCwgbWF4V2lkdGgpO1xuICAgICAgICBmaXJzdEVxdWFsSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgoaW5kZXhMZW5ndGggLSBmaXJzdEVxdWFsSW5kZXgsIG1heFdpZHRoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVuc29yU2hhcGVGcm9tVGVuc29yKFxuICAgICAgdDogVHlwZWRBcnJheSwgdFNoYXBlOiBudW1iZXJbXSwgaXNQYXJ0aWFsID0gdHJ1ZSkge1xuICAgIGlmICh0U2hhcGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodFswXSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgb25seSB2YWxpZCBzY2FsYXIgc2hhcGUgdGVuc29yIGlzIHRoZSBmdWxseSB1bmtub3duIHNoYXBlIHNwZWNpZmllZCBhcyAtMS5gKTtcbiAgICB9XG4gICAgLy8gTWFrZVBhcnRpYWxTaGFwZS9NYWtlU2hhcGVIZWxwZXIuXG4gICAgcmV0dXJuIG1ha2VTaGFwZSh0LCBpc1BhcnRpYWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVPdXRwdXRTaXplKGZpcnN0RGltOiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZVNoYXBlID0gdGhpcy52YWx1ZXNTaGFwZTtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVTaGFwZSA9IHRoaXMuZGVmYXVsdFZhbHVlU2hhcGU7XG5cbiAgICBiYWNrZW5kX3V0aWwudmFsaWRhdGVEZWZhdWx0VmFsdWVTaGFwZShkZWZhdWx0VmFsdWVTaGFwZSwgdmFsdWVTaGFwZSk7XG5cbiAgICBjb25zdCBzaGFwZSA9IHRoaXMudGVuc29yU2hhcGVGcm9tVGVuc29yKHRoaXMuc2hhcGUsIHRoaXMuc2hhcGVTaGFwZSk7XG4gICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBiYWNrZW5kX3V0aWwuY29tYmluZVJhZ2dlZFRlbnNvclRvVGVuc29yU2hhcGVzKFxuICAgICAgICB0aGlzLnJhZ2dlZFJhbmssIHNoYXBlLCB2YWx1ZVNoYXBlKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG91dHB1dFNoYXBlO1xuXG4gICAgaWYgKHJlc3VsdFswXSA8IDApIHtcbiAgICAgIHJlc3VsdFswXSA9IGZpcnN0RGltO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLnJhZ2dlZFJhbms7ICsraSkge1xuICAgICAgaWYgKHJlc3VsdFtpXSA8IDApIHtcbiAgICAgICAgcmVzdWx0W2ldID0gdGhpcy5nZXRNYXhXaWR0aChpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvdXRwdXRJbmRleCByZXByZXNlbnRzIHRoZSBpbmRleCBpbiB0aGUgb3V0cHV0IHRlbnNvclxuICAgKiB3aGVyZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHBhcnRpY3VsYXIgZGltZW5zaW9uIHdvdWxkIGJlIHdyaXR0ZW4uXG4gICAqIElmIGl0IGlzIC0xLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5kZXggaXMgb3V0IG9mIHNjb3BlLlxuICAgKiBFeGFtcGxlLCBnaXZlbiBmaXJzdERpbWVuc2lvbiA9IDEwLCBmaXJzdERpbWVuc2lvbk91dHB1dCA9IDYsXG4gICAqIGFuZCBvdXRwdXRJbmRleE11bHRpcGxpZXIgPSAxMDA6XG4gICAqIHJlc3VsdCA9IFswIDEwMCAyMDAgMzAwIDQwMCA1MDAgLTEgLTEgLTEgLTFdXG4gICAqIElmIGZpcnN0RGltZW5zaW9uT3V0cHV0ID0gMTEgaW5zdGVhZCwgdGhlbjpcbiAgICogcmVzdWx0ID0gWzAgMTAwIDIwMCAzMDAgNDAwIDUwMCA2MDAgNzAwIDgwMCA5MDBdXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUZpcnN0UGFyZW50T3V0cHV0SW5kZXgoXG4gICAgICBmaXJzdERpbWVuc2lvbjogbnVtYmVyLCBvdXRwdXRJbmRleE11bHRpcGxpZXI6IG51bWJlcixcbiAgICAgIGZpcnN0RGltZW5zaW9uT3V0cHV0OiBudW1iZXIpIHtcbiAgICBjb25zdCBtaW5EaW1lbnNpb24gPSBNYXRoLm1pbihmaXJzdERpbWVuc2lvbiwgZmlyc3REaW1lbnNpb25PdXRwdXQpO1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgICBsZXQgY3VycmVudE91dHB1dEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbkRpbWVuc2lvbjtcbiAgICAgICAgICsraSwgY3VycmVudE91dHB1dEluZGV4ICs9IG91dHB1dEluZGV4TXVsdGlwbGllcikge1xuICAgICAgcmVzdWx0LnB1c2goY3VycmVudE91dHB1dEluZGV4KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IG1pbkRpbWVuc2lvbjsgaSA8IGZpcnN0RGltZW5zaW9uOyArK2kpIHtcbiAgICAgIHJlc3VsdC5wdXNoKC0xKTtcbiAgICB9XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHJlc3VsdC5sZW5ndGggPT09IGZpcnN0RGltZW5zaW9uLFxuICAgICAgICAoKSA9PiAnRmluYWwgbGVuZ3RoIG9mIHJlc3VsdCBtdXN0IGJlIGVxdWFsIHRvIGZpcnN0RGltZW5zaW9uLicpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlT3V0cHV0SW5kZXhSb3dTcGxpdChcbiAgICAgIHJvd1NwbGl0OiBUeXBlZEFycmF5LCBwYXJlbnRPdXRwdXRJbmRleDogbnVtYmVyW10sXG4gICAgICBvdXRwdXRJbmRleE11bHRpcGxpZXI6IG51bWJlciwgb3V0cHV0U2l6ZTogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm93U3BsaXRTaXplID0gcm93U3BsaXQubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1NwbGl0U2l6ZSAtIDE7ICsraSkge1xuICAgICAgY29uc3Qgcm93TGVuZ3RoID0gcm93U3BsaXRbaSArIDFdIC0gcm93U3BsaXRbaV07XG4gICAgICBsZXQgcmVhbExlbmd0aCA9IE1hdGgubWluKG91dHB1dFNpemUsIHJvd0xlbmd0aCk7XG4gICAgICBsZXQgcGFyZW50T3V0cHV0SW5kZXhDdXJyZW50ID0gcGFyZW50T3V0cHV0SW5kZXhbaV07XG5cbiAgICAgIGlmIChwYXJlbnRPdXRwdXRJbmRleEN1cnJlbnQgPT09IC0xKSB7XG4gICAgICAgIHJlYWxMZW5ndGggPSAwO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWFsTGVuZ3RoOyArK2opIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocGFyZW50T3V0cHV0SW5kZXhDdXJyZW50KTtcbiAgICAgICAgcGFyZW50T3V0cHV0SW5kZXhDdXJyZW50ICs9IG91dHB1dEluZGV4TXVsdGlwbGllcjtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93TGVuZ3RoIC0gcmVhbExlbmd0aDsgKytqKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJvd1NwbGl0U2l6ZSA+IDAgJiYgcmVzdWx0Lmxlbmd0aCAhPT0gcm93U3BsaXRbcm93U3BsaXRTaXplIC0gMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByb3cgc3BsaXQgc2l6ZS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBvdXRwdXQgaW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICAvLyBUaGUgcGFyZW50T3V0cHV0SW5kZXggaXMgdGhlIHNhbWUgY29tcHV0YXRpb24gZm9yIHRoZSBwcmV2aW91cyBsaXN0LlxuICAvLyAtMSBpbmRpY2F0ZXMgYW4gZWxlbWVudCBvciBsaXN0IHRoYXQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyBUaGUgb3V0cHV0SW5kZXhNdWx0aXBsaWVyIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGluZGljZXMgb25lIG1vdmVzXG4gIC8vIGZvcndhcmQgZm9yIGVhY2ggY29sdW1uLlxuICAvLyBFLmcuLCBnaXZlbjpcbiAgLy8gdmFsdWVSb3dJZHM6WzAgMSAyIDIgMiAzIDUgNSA2XVxuICAvLyBwYXJlbnRPdXRwdXRJbmRleDpbMTAwMCAxMTAwIDIwMDAgMjEwMCAtMSAzMDAwIDQwMDBdXG4gIC8vIG91dHB1dEluZGV4TXVsdGlwbGllcjogMTBcbiAgLy8gb3V0cHV0U2l6ZTogMlxuICAvLyBZb3UgZ2V0OlxuICAvLyByZXN1bHQgPSBbMTAwMCAxMTAwIDIwMDAgMjAxMCAtMSAyMTAwIC0xIC0xIDMwMDBdXG4gIC8vIHJlc3VsdFswXSA9IHBhcmVudE91dHB1dEluZGV4W3ZhbHVlUm93SWRzWzBdXVxuICAvLyByZXN1bHRbMV0gPSBwYXJlbnRPdXRwdXRJbmRleFt2YWx1ZVJvd0lkc1sxXV1cbiAgLy8gcmVzdWx0WzJdID0gcGFyZW50T3V0cHV0SW5kZXhbdmFsdWVSb3dJZHNbMl1dXG4gIC8vIHJlc3VsdFszXSA9IHBhcmVudE91dHB1dEluZGV4W3ZhbHVlUm93SWRzWzJdICsgMTBdXG4gIC8vIHJlc3VsdFs0XSA9IC0xIGJlY2F1c2UgaXQgaXMgdGhlIHRoaXJkIGVsZW1lbnQgdGhlIHNpemUgaXMgMi5cbiAgLy8gcmVzdWx0WzVdID0gcGFyZW50T3V0cHV0SW5kZXhbdmFsdWVSb3dJZHNbM11dXG4gIC8vIHJlc3VsdFs2XSA9IC0xIGJlY2F1c2UgcGFyZW50T3V0cHV0SW5kZXhbdmFsdWVSb3dJZHNbNl1dID09IC0xXG4gIC8vIHJlc3VsdFs3XSA9IC0xIGJlY2F1c2UgcGFyZW50T3V0cHV0SW5kZXhbdmFsdWVSb3dJZHNbNl1dID09IC0xXG4gIC8vIHJlc3VsdFs4XSA9IHBhcmVudE91dHB1dEluZGV4W3ZhbHVlUm93SWRzWzddXVxuICBwcml2YXRlIGNhbGN1bGF0ZU91dHB1dEluZGV4VmFsdWVSb3dJRChcbiAgICAgIHZhbHVlUm93SWRzOiBUeXBlZEFycmF5LCBwYXJlbnRPdXRwdXRJbmRleDogbnVtYmVyW10sXG4gICAgICBvdXRwdXRJbmRleE11bHRpcGxpZXI6IG51bWJlciwgb3V0cHV0U2l6ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgaW5kZXhTaXplID0gdmFsdWVSb3dJZHMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgICBpZiAoaW5kZXhTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRPdXRwdXRDb2x1bW4gPSAwO1xuICAgIGxldCBjdXJyZW50VmFsdWVSb3dJZCA9IHZhbHVlUm93SWRzWzBdO1xuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZVJvd0lkID49IHBhcmVudE91dHB1dEluZGV4Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHb3QgY3VycmVudFZhbHVlUm93SWQ9JHtjdXJyZW50VmFsdWVSb3dJZH0sIHdoaWNoIGlzIG5vdCBsZXNzIHRoYW4gJHtcbiAgICAgICAgICAgICAgcGFyZW50T3V0cHV0SW5kZXgubGVuZ3RofWApO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50T3V0cHV0SW5kZXggPSBwYXJlbnRPdXRwdXRJbmRleFtjdXJyZW50VmFsdWVSb3dJZF07XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE91dHB1dEluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGluZGV4U2l6ZTsgKytpKSB7XG4gICAgICBjb25zdCBuZXh0VmFsdWVSb3dJZCA9IHZhbHVlUm93SWRzW2ldO1xuICAgICAgaWYgKG5leHRWYWx1ZVJvd0lkID09PSBjdXJyZW50VmFsdWVSb3dJZCkge1xuICAgICAgICBpZiAoY3VycmVudE91dHB1dEluZGV4ID49IDApIHtcbiAgICAgICAgICArK2N1cnJlbnRPdXRwdXRDb2x1bW47XG4gICAgICAgICAgaWYgKGN1cnJlbnRPdXRwdXRDb2x1bW4gPCBvdXRwdXRTaXplKSB7XG4gICAgICAgICAgICBjdXJyZW50T3V0cHV0SW5kZXggKz0gb3V0cHV0SW5kZXhNdWx0aXBsaWVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50T3V0cHV0SW5kZXggPSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRPdXRwdXRDb2x1bW4gPSAwO1xuICAgICAgICBjdXJyZW50VmFsdWVSb3dJZCA9IG5leHRWYWx1ZVJvd0lkO1xuXG4gICAgICAgIGlmIChuZXh0VmFsdWVSb3dJZCA+PSBwYXJlbnRPdXRwdXRJbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBHb3QgbmV4dFZhbHVlUm93SWQ9JHtuZXh0VmFsdWVSb3dJZH0gd2hpY2ggaXMgbm90IGxlc3MgdGhhbiAke1xuICAgICAgICAgICAgICAgICAgcGFyZW50T3V0cHV0SW5kZXgubGVuZ3RofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudE91dHB1dEluZGV4ID0gcGFyZW50T3V0cHV0SW5kZXhbbmV4dFZhbHVlUm93SWRdO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goY3VycmVudE91dHB1dEluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPT0gdmFsdWVSb3dJZHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcm93IGlkcy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVPdXRwdXRJbmRleChcbiAgICAgIGRpbWVuc2lvbjogbnVtYmVyLCBwYXJlbnRPdXRwdXRJbmRleDogbnVtYmVyW10sXG4gICAgICBvdXRwdXRJbmRleE11bHRpcGxpZXI6IG51bWJlciwgb3V0cHV0U2l6ZTogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm93UGFydGl0aW9uVGVuc29yID0gdGhpcy5nZXRSb3dQYXJ0aXRpb25UZW5zb3IoZGltZW5zaW9uKTtcbiAgICBjb25zdCBwYXJ0aXRpb25UeXBlID0gdGhpcy5nZXRSb3dQYXJ0aXRpb25UeXBlQnlEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICBzd2l0Y2ggKHBhcnRpdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgUm93UGFydGl0aW9uVHlwZS5WQUxVRV9ST1dJRFM6XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZU91dHB1dEluZGV4VmFsdWVSb3dJRChcbiAgICAgICAgICAgIHJvd1BhcnRpdGlvblRlbnNvciwgcGFyZW50T3V0cHV0SW5kZXgsIG91dHB1dEluZGV4TXVsdGlwbGllcixcbiAgICAgICAgICAgIG91dHB1dFNpemUpO1xuICAgICAgY2FzZSBSb3dQYXJ0aXRpb25UeXBlLlJPV19TUExJVFM6XG4gICAgICAgIGlmIChyb3dQYXJ0aXRpb25UZW5zb3IubGVuZ3RoIC0gMSA+IHBhcmVudE91dHB1dEluZGV4Lmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IHBhcnRpdGlvbiBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvdXRwdXQgc2l6ZTogJHtcbiAgICAgICAgICAgICAgcm93UGFydGl0aW9uVGVuc29yLmxlbmd0aCAtIDF9ID4gJHtwYXJlbnRPdXRwdXRJbmRleC5sZW5ndGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlT3V0cHV0SW5kZXhSb3dTcGxpdChcbiAgICAgICAgICAgIHJvd1BhcnRpdGlvblRlbnNvciwgcGFyZW50T3V0cHV0SW5kZXgsIG91dHB1dEluZGV4TXVsdGlwbGllcixcbiAgICAgICAgICAgIG91dHB1dFNpemUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFVuc3VwcG9ydGVkIHBhcnRpdGlvbiB0eXBlOiAke1Jvd1BhcnRpdGlvblR5cGVbcGFydGl0aW9uVHlwZV19YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaXJzdERpbWVuc2lvblNpemUoKSB7XG4gICAgY29uc3QgZmlyc3RQYXJ0aXRpb25UZW5zb3IgPSB0aGlzLnJvd1BhcnRpdGlvblZhbHVlc1swXTtcbiAgICBpZiAodGhpcy5yb3dQYXJ0aXRpb25UeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcm93X3BhcnRpdGlvbl90eXBlcyBnaXZlbi4nKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RQYXJ0aXRpb25UeXBlID0gdGhpcy5yb3dQYXJ0aXRpb25UeXBlc1swXTtcbiAgICBzd2l0Y2ggKGZpcnN0UGFydGl0aW9uVHlwZSkge1xuICAgICAgY2FzZSBSb3dQYXJ0aXRpb25UeXBlLkZJUlNUX0RJTV9TSVpFOlxuICAgICAgICByZXR1cm4gZmlyc3RQYXJ0aXRpb25UZW5zb3JbMF07XG4gICAgICBjYXNlIFJvd1BhcnRpdGlvblR5cGUuVkFMVUVfUk9XSURTOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBoYW5kbGUgVkFMVUVfUk9XSURTIGluIGZpcnN0IGRpbWVuc2lvbi4nKTtcbiAgICAgIGNhc2UgUm93UGFydGl0aW9uVHlwZS5ST1dfU1BMSVRTOlxuICAgICAgICByZXR1cm4gdGhpcy5yb3dQYXJ0aXRpb25WYWx1ZXNTaGFwZXNbMF1bMF0gLSAxO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBoYW5kbGUgdHlwZSAke1Jvd1BhcnRpdGlvblR5cGVbZmlyc3RQYXJ0aXRpb25UeXBlXX1gKTtcbiAgICB9XG4gIH1cblxuICBjb21wdXRlKCk6IFtudW1iZXJbXSwgVHlwZWRBcnJheV0ge1xuICAgIGNvbnN0IGZpcnN0UGFydGl0aW9uVGVuc29yID0gdGhpcy5yb3dQYXJ0aXRpb25WYWx1ZXNbMF07XG4gICAgaWYgKGZpcnN0UGFydGl0aW9uVGVuc29yLmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgZmlyc3QgcGFydGl0aW9uIGlucHV0LiAnICtcbiAgICAgICAgICAnVGVuc29yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBlbGVtZW50LicpO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdERpbWVuc2lvbiA9IHRoaXMuZ2V0Rmlyc3REaW1lbnNpb25TaXplKCk7XG4gICAgY29uc3Qgb3V0cHV0U2l6ZSA9IHRoaXMuY2FsY3VsYXRlT3V0cHV0U2l6ZShmaXJzdERpbWVuc2lvbik7XG4gICAgY29uc3QgbXVsdGlwbGllcjogbnVtYmVyW10gPSBuZXcgQXJyYXkodGhpcy5yYWdnZWRSYW5rICsgMSk7XG5cbiAgICBtdWx0aXBsaWVyW211bHRpcGxpZXIubGVuZ3RoIC0gMV0gPSAxO1xuICAgIGZvciAobGV0IGkgPSBtdWx0aXBsaWVyLmxlbmd0aCAtIDI7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBtdWx0aXBsaWVyW2ldID0gbXVsdGlwbGllcltpICsgMV0gKiBvdXRwdXRTaXplW2kgKyAxXTtcbiAgICB9XG4gICAgLy8gRnVsbCBzaXplIG9mIHRoZSB0ZW5zb3IuXG4gICAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gbWFrZVNoYXBlKG91dHB1dFNpemUsIGZhbHNlKTtcbiAgICBjb25zdCBvdXRwdXRUZW5zb3IgPVxuICAgICAgICB1dGlsLmdldEFycmF5RnJvbURUeXBlKFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNEVHlwZSwgdXRpbC5zaXplRnJvbVNoYXBlKG91dHB1dFNoYXBlKSkgYXMgVHlwZWRBcnJheTtcblxuICAgIGNvbnN0IGZ1bGxTaXplID0gbXVsdGlwbGllclswXSAqIG91dHB1dFNpemVbMF07XG4gICAgaWYgKGZ1bGxTaXplID4gMCkge1xuICAgICAgbGV0IG91dHB1dEluZGV4ID0gdGhpcy5jYWxjdWxhdGVGaXJzdFBhcmVudE91dHB1dEluZGV4KFxuICAgICAgICAgIGZpcnN0RGltZW5zaW9uLCBtdWx0aXBsaWVyWzBdLCBvdXRwdXRTaXplWzBdKTtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMucmFnZ2VkUmFuazsgKytpKSB7XG4gICAgICAgIGNvbnN0IG5ld091dHB1dEluZGV4ID0gdGhpcy5jYWxjdWxhdGVPdXRwdXRJbmRleChcbiAgICAgICAgICAgIGkgLSAxLCBvdXRwdXRJbmRleCwgbXVsdGlwbGllcltpXSwgb3V0cHV0U2l6ZVtpXSk7XG4gICAgICAgIG91dHB1dEluZGV4ID0gbmV3T3V0cHV0SW5kZXg7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0T3V0cHV0KHRoaXMucmFnZ2VkUmFuaywgb3V0cHV0SW5kZXgsIG91dHB1dFRlbnNvciwgb3V0cHV0U2hhcGUpO1xuICAgIH1cblxuICAgIHJldHVybiBbb3V0cHV0U2hhcGUsIG91dHB1dFRlbnNvcl07XG4gIH1cbiAgc2V0T3V0cHV0KFxuICAgICAgcmFnZ2VkUmFuazogbnVtYmVyLCBvdXRwdXRJbmRleDogbnVtYmVyW10sIG91dHB1dFRlbnNvcjogVHlwZWRBcnJheSxcbiAgICAgIG91dHB1dFNoYXBlOiBudW1iZXJbXSkge1xuICAgIGlmIChvdXRwdXRUZW5zb3IubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVzQmFzZSA9IHRoaXMudmFsdWVzO1xuICAgIGNvbnN0IG91dHB1dEJhc2UgPSBvdXRwdXRUZW5zb3I7XG5cbiAgICBsZXQgZWxlbWVudFNoYXBlID0gb3V0cHV0U2hhcGUuc2xpY2UoKTtcbiAgICBlbGVtZW50U2hhcGUgPSBlbGVtZW50U2hhcGUuc2xpY2UocmFnZ2VkUmFuayArIDEpO1xuICAgIGNvbnN0IHZhbHVlRWxlbWVudFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoZWxlbWVudFNoYXBlKTtcbiAgICBjb25zdCBvdXRwdXRJbmRleFNpemUgPSBvdXRwdXRJbmRleC5sZW5ndGg7XG5cbiAgICAvLyBCcm9hZGNhc3QgdGhlIGRlZmF1bHQgdmFsdWUgdG8gdmFsdWVfZWxlbWVudF9zaXplLiAgKFdlIGNhbiBza2lwIHRoaXNcbiAgICAvLyBpZiBkZWZhdWx0VmFsdWVUZW5zb3Iuc2l6ZSA9PSAxLCBzaW5jZSB3ZSB1c2UgZmlsbCB3aGVuIHRoYXQncyB0cnVlLilcbiAgICBsZXQgZGVmYXVsdFZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZS5sZW5ndGggIT09IHZhbHVlRWxlbWVudFNpemUgJiYgZGVmYXVsdFZhbHVlLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc3Qgc3JjU2hhcGUgPSB0aGlzLmRlZmF1bHRWYWx1ZVNoYXBlO1xuICAgICAgdGlkeSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZVRlbnNvciA9IHJlc2hhcGUoZGVmYXVsdFZhbHVlLCBzcmNTaGFwZSk7XG4gICAgICAgIGNvbnN0IGJDYXN0RGVmYXVsdCA9IGJyb2FkY2FzdFRvKGRlZmF1bHRWYWx1ZVRlbnNvciwgZWxlbWVudFNoYXBlKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gYkNhc3REZWZhdWx0LmRhdGFTeW5jKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIG91dHB1dEluZGV4IGFycmF5LCBmaW5kaW5nIGNvbnRpZ3VvdXMgcmVnaW9ucyB0aGF0XG4gICAgLy8gc2hvdWxkIGJlIGNvcGllZC4gIE9uY2Ugd2UgZmluZCB0aGUgZW5kIG9mIGEgY29udGlndW91cyByZWdpb24sIGNvcHkgaXRcbiAgICAvLyBhbmQgYWRkIGFueSBuZWNlc3NhcnkgcGFkZGluZyAod2l0aCBkZWZhdWx0VmFsdWUpLlxuICAgIGxldCBzcmNTdGFydCA9IDA7ICAvLyBTdGFydCBvZiBjb250aWd1b3VzIHJlZ2lvbiAoaW4gdmFsdWVzKVxuICAgIGxldCBkc3RTdGFydCA9IDA7ICAvLyBEZXN0aW5hdGlvbiBmb3IgY29udGlndW91cyByZWdpb24gKGluIG91dHB1dClcbiAgICBsZXQgZHN0RW5kID0gMDsgICAgLy8gRGVzdGluYXRpb24gZm9yIGNvbnRpZ3VvdXMgcmVnaW9uIChpbiBvdXRwdXQpXG4gICAgZm9yIChsZXQgc3JjSSA9IDA7IHNyY0kgPD0gb3V0cHV0SW5kZXhTaXplOyArK3NyY0kpIHtcbiAgICAgIC8vIGRzdEkgaXMgdGhlIGRlc3RpbmF0aW9uIHdoZXJlIHRoZSB2YWx1ZSBhdCBzcmNJIHNob3VsZCBiZSBjb3BpZWQuXG4gICAgICBsZXQgZHN0SSA9IHNyY0kgPCBvdXRwdXRJbmRleFNpemUgPyBvdXRwdXRJbmRleFtzcmNJXSA6IC0xO1xuXG4gICAgICAvLyBJZiB3ZSdyZSBzdGlsbCBpbiBhIGNvbnRpZ3VvdXMgcmVnaW9uLCB0aGVuIHVwZGF0ZSBkc3RFbmQgZ28gdG8gdGhlXG4gICAgICAvLyBuZXh0IHNyY0kuXG4gICAgICBpZiAoZHN0SSA9PT0gZHN0RW5kKSB7XG4gICAgICAgICsrZHN0RW5kO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgZm91bmQgdGhlIGVuZCBvZiBjb250aWd1b3VzIHJlZ2lvbi4gIFRoaXMgY2FuIGJlIGJlY2F1c2Ugd2UgZm91bmRcbiAgICAgIC8vIGEgZ2FwIChkc3RJID4gZHN0RW5kKSwgb3IgYSBzb3VyY2UgdmFsdWUgdGhhdCBzaG91bGRuJ3QgYmUgY29waWVkXG4gICAgICAvLyBiZWNhdXNlIGl0J3Mgb3V0LW9mLWJvdW5kcyAoZHN0SSA9PSAtMSksIG9yIHRoZSBlbmQgb2YgdGhlIHRlbnNvclxuICAgICAgLy8gKGRzdEkgPT09IC0xKS5cbiAgICAgIGlmIChkc3RTdGFydCA8IGRzdEVuZCkge1xuICAgICAgICAvLyBDb3B5IHRoZSBjb250aWd1b3VzIHJlZ2lvbi5cbiAgICAgICAgY29uc3Qgc3JjID0gdmFsdWVzQmFzZS5zdWJhcnJheShzcmNTdGFydCAqIHZhbHVlRWxlbWVudFNpemUpO1xuICAgICAgICBjb25zdCBkc3QgPSBvdXRwdXRCYXNlLnN1YmFycmF5KGRzdFN0YXJ0ICogdmFsdWVFbGVtZW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IG5WYWxzID0gKGRzdEVuZCAtIGRzdFN0YXJ0KSAqIHZhbHVlRWxlbWVudFNpemU7XG4gICAgICAgIGNvcHlBcnJheShkc3QsIHNyYywgblZhbHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYW55IG5lY2Vzc2FyeSBwYWRkaW5nICh3LyBkZWZhdWx0VmFsdWUpLlxuICAgICAgaWYgKHNyY0kgPj0gb3V0cHV0SW5kZXhTaXplKSB7XG4gICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB2YWx1ZXM6IHBhZCB0byB0aGUgZW5kIG9mIG91dHB1dC5cbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IG91dHB1dFRlbnNvci5sZW5ndGg7XG4gICAgICAgIGRzdEkgPSBNYXRoLmZsb29yKG91dHB1dFNpemUgLyB2YWx1ZUVsZW1lbnRTaXplKTtcbiAgICAgIH1cbiAgICAgIGlmIChkc3RJID4gZHN0RW5kKSB7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBvdXRwdXRCYXNlXG4gICAgICAgICAgICAgIC5zdWJhcnJheShkc3RFbmQgKiB2YWx1ZUVsZW1lbnRTaXplLCBkc3RJICogdmFsdWVFbGVtZW50U2l6ZSlcbiAgICAgICAgICAgICAgLmZpbGwodGhpcy5kZWZhdWx0VmFsdWVbMF0pO1xuICAgICAgICAgIGRzdEVuZCA9IGRzdEk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKGRzdEkgPiBkc3RFbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzdCA9IG91dHB1dEJhc2Uuc2xpY2UoZHN0RW5kICogdmFsdWVFbGVtZW50U2l6ZSk7XG4gICAgICAgICAgICBjb3B5QXJyYXkoZHN0LCBkZWZhdWx0VmFsdWUsIHZhbHVlRWxlbWVudFNpemUpO1xuICAgICAgICAgICAgKytkc3RFbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBpbmRpY2VzLlxuICAgICAgaWYgKGRzdEkgPCAwKSB7XG4gICAgICAgIC8vIHNyY0kgc2hvdWxkIGJlIHNraXBwZWQgLS0gbGVhdmUgaXQgb3V0IG9mIHRoZSBjb250aWd1b3VzIHJlZ2lvbi5cbiAgICAgICAgc3JjU3RhcnQgPSBzcmNJICsgMTtcbiAgICAgICAgZHN0U3RhcnQgPSBkc3RFbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzcmNJIHNob3VsZCBiZSBjb3BpZWQgLS0gaW5jbHVkZSBpdCBpbiB0aGUgY29udGlndW91cyByZWdpb24uXG4gICAgICAgIHNyY1N0YXJ0ID0gc3JjSTtcbiAgICAgICAgZHN0U3RhcnQgPSBkc3RFbmQ7XG4gICAgICAgIGRzdEVuZCA9IGRzdFN0YXJ0ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUFycmF5KGRzdDogVHlwZWRBcnJheSwgc3JjOiBUeXBlZEFycmF5LCBzaXplOiBudW1iZXIpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBkc3RbaV0gPSBzcmNbaV07XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVNoYXBlKHNoYXBlOiBudW1iZXJbXXxUeXBlZEFycmF5LCBpc1BhcnRpYWw6IGJvb2xlYW4pIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBkaW0gb2Ygc2hhcGUpIHtcbiAgICBpZiAoZGltIDwgMCkge1xuICAgICAgaWYgKCFpc1BhcnRpYWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaW1lbnNpb24gJHtkaW19IG11c3QgYmUgPj0gMGApO1xuICAgICAgfVxuICAgICAgaWYgKGRpbSA8IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGltZW5zaW9uICR7ZGltfSBtdXN0IGJlID49IC0xYCk7XG4gICAgICB9XG4gICAgICBkaW0gPSAtMTtcbiAgICB9XG4gICAgb3V0LnB1c2goZGltKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYWdnZWRUZW5zb3JUb1RlbnNvckltcGwoXG4gICAgc2hhcGU6IFR5cGVkQXJyYXksIHNoYXBlc1NoYXBlOiBudW1iZXJbXSwgdmFsdWVzOiBUeXBlZEFycmF5LFxuICAgIHZhbHVlc1NoYXBlOiBudW1iZXJbXSwgdmFsdWVzRFR5cGU6IERhdGFUeXBlLCBkZWZhdWx0VmFsdWU6IFR5cGVkQXJyYXksXG4gICAgZGVmYXVsdFZhbHVlU2hhcGU6IG51bWJlcltdLCByb3dQYXJ0aXRpb25WYWx1ZXM6IFR5cGVkQXJyYXlbXSxcbiAgICByb3dQYXJ0aXRpb25WYWx1ZXNTaGFwZXM6IG51bWJlcltdW10sXG4gICAgcm93UGFydGl0aW9uVHlwZXM6IHN0cmluZ1tdKTogW251bWJlcltdLCBUeXBlZEFycmF5XSB7XG4gIHJldHVybiBuZXcgUmFnZ2VkVGVuc29yVG9UZW5zb3JPcChcbiAgICAgICAgICAgICBzaGFwZSwgc2hhcGVzU2hhcGUsIHZhbHVlcywgdmFsdWVzU2hhcGUsIHZhbHVlc0RUeXBlLCBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgZGVmYXVsdFZhbHVlU2hhcGUsIHJvd1BhcnRpdGlvblZhbHVlcywgcm93UGFydGl0aW9uVmFsdWVzU2hhcGVzLFxuICAgICAgICAgICAgIHJvd1BhcnRpdGlvblR5cGVzKVxuICAgICAgLmNvbXB1dGUoKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function rangeImpl(start, stop, step, dtype) {\n const sameStartStop = start === stop;\n const increasingRangeNegativeStep = start < stop && step < 0;\n const decreasingRangePositiveStep = stop < start && step > 1;\n if (sameStartStop || increasingRangeNegativeStep ||\n decreasingRangePositiveStep) {\n return util.makeZerosTypedArray(0, dtype);\n }\n const numElements = Math.abs(Math.ceil((stop - start) / step));\n const values = util.makeZerosTypedArray(numElements, dtype);\n if (stop < start && step === 1) {\n // Auto adjust the step's sign if it hasn't been set\n // (or was set to 1)\n step = -1;\n }\n values[0] = start;\n for (let i = 1; i < values.length; i++) {\n values[i] = values[i - 1] + step;\n }\n return values;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFuZ2VfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmFuZ2VfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsTUFBTSxVQUFVLFNBQVMsQ0FDckIsS0FBYSxFQUFFLElBQVksRUFBRSxJQUFZLEVBQ3pDLEtBQXdCO0lBQzFCLE1BQU0sYUFBYSxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUM7SUFDckMsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDN0QsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFFN0QsSUFBSSxhQUFhLElBQUksMkJBQTJCO1FBQzVDLDJCQUEyQixFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMzQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFNUQsSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDOUIsb0RBQW9EO1FBQ3BELG9CQUFvQjtRQUNwQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDWDtJQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZU1hcCwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlSW1wbChcbiAgICBzdGFydDogbnVtYmVyLCBzdG9wOiBudW1iZXIsIHN0ZXA6IG51bWJlcixcbiAgICBkdHlwZTogJ2Zsb2F0MzInfCdpbnQzMicpOiBEYXRhVHlwZU1hcFsnZmxvYXQzMicgfCAnaW50MzInXSB7XG4gIGNvbnN0IHNhbWVTdGFydFN0b3AgPSBzdGFydCA9PT0gc3RvcDtcbiAgY29uc3QgaW5jcmVhc2luZ1JhbmdlTmVnYXRpdmVTdGVwID0gc3RhcnQgPCBzdG9wICYmIHN0ZXAgPCAwO1xuICBjb25zdCBkZWNyZWFzaW5nUmFuZ2VQb3NpdGl2ZVN0ZXAgPSBzdG9wIDwgc3RhcnQgJiYgc3RlcCA+IDE7XG5cbiAgaWYgKHNhbWVTdGFydFN0b3AgfHwgaW5jcmVhc2luZ1JhbmdlTmVnYXRpdmVTdGVwIHx8XG4gICAgICBkZWNyZWFzaW5nUmFuZ2VQb3NpdGl2ZVN0ZXApIHtcbiAgICByZXR1cm4gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KDAsIGR0eXBlKTtcbiAgfVxuXG4gIGNvbnN0IG51bUVsZW1lbnRzID0gTWF0aC5hYnMoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpO1xuICBjb25zdCB2YWx1ZXMgPSB1dGlsLm1ha2VaZXJvc1R5cGVkQXJyYXkobnVtRWxlbWVudHMsIGR0eXBlKTtcblxuICBpZiAoc3RvcCA8IHN0YXJ0ICYmIHN0ZXAgPT09IDEpIHtcbiAgICAvLyBBdXRvIGFkanVzdCB0aGUgc3RlcCdzIHNpZ24gaWYgaXQgaGFzbid0IGJlZW4gc2V0XG4gICAgLy8gKG9yIHdhcyBzZXQgdG8gMSlcbiAgICBzdGVwID0gLTE7XG4gIH1cblxuICB2YWx1ZXNbMF0gPSBzdGFydDtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZXNbaV0gPSB2YWx1ZXNbaSAtIDFdICsgc3RlcDtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Rsqrt } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const rsqrtImpl = createSimpleUnaryImpl((xi) => 1 / Math.sqrt(xi));\nexport const rsqrt = unaryKernelFuncFromImpl(Rsqrt, rsqrtImpl);\nexport const rsqrtConfig = {\n kernelName: Rsqrt,\n backendName: 'cpu',\n kernelFunc: rsqrt,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnNxcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JzcXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLHVCQUF1QixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgUnNxcnR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlVW5hcnlJbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV9pbXBsJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jRnJvbUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHJzcXJ0SW1wbCA9IGNyZWF0ZVNpbXBsZVVuYXJ5SW1wbCgoeGkpID0+IDEgLyBNYXRoLnNxcnQoeGkpKTtcbmV4cG9ydCBjb25zdCByc3FydCA9IHVuYXJ5S2VybmVsRnVuY0Zyb21JbXBsKFJzcXJ0LCByc3FydEltcGwpO1xuXG5leHBvcnQgY29uc3QgcnNxcnRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUnNxcnQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcnNxcnQsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer, TensorBuffer } from '@tensorflow/tfjs-core';\nexport function scatterImpl(indices, updates, shape, outputSize, sliceSize, numUpdates, sliceRank, strides, defaultValue, sumDupeIndices) {\n const flattenShape = [outputSize / sliceSize, sliceSize];\n const indicesData = indices.values;\n const updatesData = updates.values;\n if (outputSize === 0) {\n return buffer(shape, updates.dtype);\n }\n const outBuf = (defaultValue instanceof TensorBuffer) ?\n defaultValue :\n buffer(flattenShape, updates.dtype);\n if (typeof defaultValue === 'string') {\n outBuf.values.fill(defaultValue);\n }\n else if (typeof defaultValue === 'number') {\n outBuf.values.fill(defaultValue);\n }\n else if (typeof defaultValue === 'boolean') {\n outBuf.values.fill(+defaultValue);\n }\n for (let i = 0; i < numUpdates; i++) {\n const index = [];\n let flattenIndex = 0;\n for (let j = 0; j < sliceRank; j++) {\n const dim = indicesData[i * sliceRank + j];\n index.push(dim);\n flattenIndex += dim * strides[j];\n }\n if (flattenIndex < 0 || flattenIndex >= outputSize / sliceSize) {\n throw new Error(`Invalid indices: ${index} does not index into ${shape}`);\n }\n for (let k = 0; k < sliceSize; k++) {\n if (sumDupeIndices) {\n outBuf.values[flattenIndex * sliceSize + k] +=\n updatesData[i * sliceSize + k];\n }\n else {\n outBuf.values[flattenIndex * sliceSize + k] = updates.rank === 0 ?\n updatesData[0] :\n updatesData[i * sliceSize + k];\n }\n }\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlcl9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TY2F0dGVyX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBa0IsWUFBWSxFQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFTdkYsTUFBTSxVQUNOLFdBQVcsQ0FDUCxPQUFpQyxFQUFFLE9BQTJCLEVBQzlELEtBQWUsRUFBRSxVQUFrQixFQUFFLFNBQWlCLEVBQUUsVUFBa0IsRUFDMUUsU0FBaUIsRUFBRSxPQUFpQixFQUNwQyxZQUF1RCxFQUN2RCxjQUF1QjtJQUN6QixNQUFNLFlBQVksR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFekQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQW9CLENBQUM7SUFDakQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUVuQyxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7UUFDcEIsT0FBTyxNQUFNLENBQUMsS0FBb0IsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEQ7SUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLFlBQVksWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ25ELFlBQVksQ0FBQyxDQUFDO1FBQ2QsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDbkMsTUFBTSxDQUFDLE1BQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ2hEO1NBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDMUMsTUFBTSxDQUFDLE1BQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ2xEO1NBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxTQUFTLEVBQUU7UUFDM0MsTUFBTSxDQUFDLE1BQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDbkQ7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLFlBQVksSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxJQUFJLFlBQVksSUFBSSxVQUFVLEdBQUcsU0FBUyxFQUFFO1lBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEtBQUssd0JBQXdCLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDM0U7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksY0FBYyxFQUFFO2dCQUNqQixNQUFNLENBQUMsTUFBcUIsQ0FBQyxZQUFZLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztvQkFDdEQsV0FBMEIsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3BEO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUM5RCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsV0FBVyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDcEM7U0FDRjtLQUNGO0lBRUQsT0FBTyxNQUE0QixDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge2J1ZmZlciwgUmFuaywgU2hhcGVNYXAsIFRlbnNvckJ1ZmZlciwgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW50ZXJmYWNlIERlZmF1bHRWYWx1ZVR5cGVNYXAge1xuICBib29sOiBib29sZWFuO1xuICBpbnQzMjogbnVtYmVyO1xuICBmbG9hdDMyOiBudW1iZXI7XG4gIHN0cmluZzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb25cbnNjYXR0ZXJJbXBsPFIgZXh0ZW5kcyBSYW5rLCBEIGV4dGVuZHMgJ2Zsb2F0MzInfCdpbnQzMid8J2Jvb2wnfCdzdHJpbmcnPihcbiAgICBpbmRpY2VzOiBUZW5zb3JCdWZmZXI8UiwgJ2ludDMyJz4sIHVwZGF0ZXM6IFRlbnNvckJ1ZmZlcjxSLCBEPixcbiAgICBzaGFwZTogbnVtYmVyW10sIG91dHB1dFNpemU6IG51bWJlciwgc2xpY2VTaXplOiBudW1iZXIsIG51bVVwZGF0ZXM6IG51bWJlcixcbiAgICBzbGljZVJhbms6IG51bWJlciwgc3RyaWRlczogbnVtYmVyW10sXG4gICAgZGVmYXVsdFZhbHVlOiBUZW5zb3JCdWZmZXI8UiwgRD58RGVmYXVsdFZhbHVlVHlwZU1hcFtEXSxcbiAgICBzdW1EdXBlSW5kaWNlczogYm9vbGVhbik6IFRlbnNvckJ1ZmZlcjxSLCBEPiB7XG4gIGNvbnN0IGZsYXR0ZW5TaGFwZSA9IFtvdXRwdXRTaXplIC8gc2xpY2VTaXplLCBzbGljZVNpemVdO1xuXG4gIGNvbnN0IGluZGljZXNEYXRhID0gaW5kaWNlcy52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgdXBkYXRlc0RhdGEgPSB1cGRhdGVzLnZhbHVlcztcblxuICBpZiAob3V0cHV0U2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBidWZmZXIoc2hhcGUgYXMgU2hhcGVNYXBbUl0sIHVwZGF0ZXMuZHR5cGUpO1xuICB9XG5cbiAgY29uc3Qgb3V0QnVmID0gKGRlZmF1bHRWYWx1ZSBpbnN0YW5jZW9mIFRlbnNvckJ1ZmZlcikgP1xuICAgICAgZGVmYXVsdFZhbHVlIDpcbiAgICAgIGJ1ZmZlcihmbGF0dGVuU2hhcGUsIHVwZGF0ZXMuZHR5cGUpO1xuICBpZiAodHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAob3V0QnVmLnZhbHVlcyBhcyBzdHJpbmdbXSkuZmlsbChkZWZhdWx0VmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgKG91dEJ1Zi52YWx1ZXMgYXMgVHlwZWRBcnJheSkuZmlsbChkZWZhdWx0VmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIChvdXRCdWYudmFsdWVzIGFzIFR5cGVkQXJyYXkpLmZpbGwoK2RlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVVwZGF0ZXM7IGkrKykge1xuICAgIGNvbnN0IGluZGV4ID0gW107XG4gICAgbGV0IGZsYXR0ZW5JbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBzbGljZVJhbms7IGorKykge1xuICAgICAgY29uc3QgZGltID0gaW5kaWNlc0RhdGFbaSAqIHNsaWNlUmFuayArIGpdO1xuICAgICAgaW5kZXgucHVzaChkaW0pO1xuICAgICAgZmxhdHRlbkluZGV4ICs9IGRpbSAqIHN0cmlkZXNbal07XG4gICAgfVxuXG4gICAgaWYgKGZsYXR0ZW5JbmRleCA8IDAgfHwgZmxhdHRlbkluZGV4ID49IG91dHB1dFNpemUgLyBzbGljZVNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbmRpY2VzOiAke2luZGV4fSBkb2VzIG5vdCBpbmRleCBpbnRvICR7c2hhcGV9YCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBzbGljZVNpemU7IGsrKykge1xuICAgICAgaWYgKHN1bUR1cGVJbmRpY2VzKSB7XG4gICAgICAgIChvdXRCdWYudmFsdWVzIGFzIFR5cGVkQXJyYXkpW2ZsYXR0ZW5JbmRleCAqIHNsaWNlU2l6ZSArIGtdICs9XG4gICAgICAgICAgICAodXBkYXRlc0RhdGEgYXMgVHlwZWRBcnJheSlbaSAqIHNsaWNlU2l6ZSArIGtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0QnVmLnZhbHVlc1tmbGF0dGVuSW5kZXggKiBzbGljZVNpemUgKyBrXSA9IHVwZGF0ZXMucmFuayA9PT0gMCA/XG4gICAgICAgICAgICB1cGRhdGVzRGF0YVswXSA6XG4gICAgICAgICAgICB1cGRhdGVzRGF0YVtpICogc2xpY2VTaXplICsga107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dEJ1ZiBhcyBUZW5zb3JCdWZmZXI8UiwgRD47XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sigmoid } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const sigmoidImpl = createSimpleUnaryImpl((xi) => 1 / (1 + Math.exp(-xi)));\nexport const sigmoid = unaryKernelFunc(Sigmoid, (xi) => 1 / (1 + Math.exp(-xi)));\nexport const sigmoidConfig = {\n kernelName: Sigmoid,\n backendName: 'cpu',\n kernelFunc: sigmoid,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbW9pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU2lnbW9pZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FDcEIscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDaEIsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsT0FBTztDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNpZ21vaWR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlVW5hcnlJbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV9pbXBsJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzaWdtb2lkSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlVW5hcnlJbXBsKCh4aSkgPT4gMSAvICgxICsgTWF0aC5leHAoLXhpKSkpO1xuZXhwb3J0IGNvbnN0IHNpZ21vaWQgPVxuICAgIHVuYXJ5S2VybmVsRnVuYyhTaWdtb2lkLCAoeGkpID0+IDEgLyAoMSArIE1hdGguZXhwKC14aSkpKTtcblxuZXhwb3J0IGNvbnN0IHNpZ21vaWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU2lnbW9pZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzaWdtb2lkLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, buffer, Slice, slice_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function sliceImpl(vals, begin, size, shape, dtype) {\n const isContinous = slice_util.isSliceContinous(shape, begin, size);\n const length = util.sizeFromShape(size);\n const xStrides = util.computeStrides(shape);\n if (isContinous) {\n const flatOffset = slice_util.computeFlatOffset(begin, xStrides);\n if (dtype === 'string') {\n return vals.slice(flatOffset, flatOffset + length);\n }\n return vals.subarray(flatOffset, flatOffset + length);\n }\n const decodedData = dtype === 'string' ?\n backend_util.fromUint8ToStringArray(vals) :\n vals;\n const inBuf = buffer(shape, dtype, decodedData);\n const outBuf = buffer(size, dtype);\n for (let i = 0; i < outBuf.size; ++i) {\n const outLoc = outBuf.indexToLoc(i);\n const inLoc = outLoc.map((idx, j) => idx + begin[j]);\n outBuf.set(inBuf.get(...inLoc), ...outLoc);\n }\n if (dtype === 'string') {\n return backend_util.fromStringArrayToUint8(outBuf.values);\n }\n return outBuf.values;\n}\nexport function slice(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { begin, size } = attrs;\n assertNotComplex(x, 'slice');\n const [$begin, $size] = slice_util.parseSliceParams(x, begin, size);\n slice_util.assertParamsValid(x, $begin, $size);\n const vals = backend.data.get(x.dataId).values;\n const outVals = sliceImpl(vals, $begin, $size, x.shape, x.dtype);\n return backend.makeTensorInfo($size, x.dtype, outVals);\n}\nexport const sliceConfig = {\n kernelName: Slice,\n backendName: 'cpu',\n kernelFunc: slice\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1NsaWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWlCLE1BQU0sRUFBc0MsS0FBSyxFQUFFLFVBQVUsRUFBbUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHeEwsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxTQUFTLENBQ3JCLElBQW1CLEVBQUUsS0FBZSxFQUFFLElBQWMsRUFBRSxLQUFlLEVBQ3JFLEtBQWU7SUFDakIsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVDLElBQUksV0FBVyxFQUFFO1FBQ2YsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqRSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDdEIsT0FBUSxJQUFxQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsT0FBUSxJQUFtQixDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZFO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFvQixDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFrQixDQUFDO0lBRXZCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7S0FDNUM7SUFFRCxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEIsT0FBTyxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE1BQWtCLENBQUMsQ0FBQztLQUN2RTtJQUNELE9BQU8sTUFBTSxDQUFDLE1BQW9CLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQ2pCLElBQXVFO0lBRXpFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTVCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU3QixNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsS0FBOEI7Q0FDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEJhY2tlbmRWYWx1ZXMsIGJ1ZmZlciwgRGF0YVR5cGUsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU2xpY2UsIHNsaWNlX3V0aWwsIFNsaWNlQXR0cnMsIFNsaWNlSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlSW1wbChcbiAgICB2YWxzOiBCYWNrZW5kVmFsdWVzLCBiZWdpbjogbnVtYmVyW10sIHNpemU6IG51bWJlcltdLCBzaGFwZTogbnVtYmVyW10sXG4gICAgZHR5cGU6IERhdGFUeXBlKTogQmFja2VuZFZhbHVlcyB7XG4gIGNvbnN0IGlzQ29udGlub3VzID0gc2xpY2VfdXRpbC5pc1NsaWNlQ29udGlub3VzKHNoYXBlLCBiZWdpbiwgc2l6ZSk7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWwuc2l6ZUZyb21TaGFwZShzaXplKTtcbiAgY29uc3QgeFN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKHNoYXBlKTtcblxuICBpZiAoaXNDb250aW5vdXMpIHtcbiAgICBjb25zdCBmbGF0T2Zmc2V0ID0gc2xpY2VfdXRpbC5jb21wdXRlRmxhdE9mZnNldChiZWdpbiwgeFN0cmlkZXMpO1xuXG4gICAgaWYgKGR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICh2YWxzIGFzIFVpbnQ4QXJyYXlbXSkuc2xpY2UoZmxhdE9mZnNldCwgZmxhdE9mZnNldCArIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh2YWxzIGFzIFR5cGVkQXJyYXkpLnN1YmFycmF5KGZsYXRPZmZzZXQsIGZsYXRPZmZzZXQgKyBsZW5ndGgpO1xuICB9XG5cbiAgY29uc3QgZGVjb2RlZERhdGEgPSBkdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkodmFscyBhcyBVaW50OEFycmF5W10pIDpcbiAgICAgIHZhbHMgYXMgVHlwZWRBcnJheTtcblxuICBjb25zdCBpbkJ1ZiA9IGJ1ZmZlcihzaGFwZSwgZHR5cGUsIGRlY29kZWREYXRhKTtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKHNpemUsIGR0eXBlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRCdWYuc2l6ZTsgKytpKSB7XG4gICAgY29uc3Qgb3V0TG9jID0gb3V0QnVmLmluZGV4VG9Mb2MoaSk7XG4gICAgY29uc3QgaW5Mb2MgPSBvdXRMb2MubWFwKChpZHg6IG51bWJlciwgaikgPT4gaWR4ICsgYmVnaW5bal0pO1xuICAgIG91dEJ1Zi5zZXQoaW5CdWYuZ2V0KC4uLmluTG9jKSwgLi4ub3V0TG9jKTtcbiAgfVxuXG4gIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYmFja2VuZF91dGlsLmZyb21TdHJpbmdBcnJheVRvVWludDgob3V0QnVmLnZhbHVlcyBhcyBzdHJpbmdbXSk7XG4gIH1cbiAgcmV0dXJuIG91dEJ1Zi52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFNsaWNlSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFNsaWNlQXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YmVnaW4sIHNpemV9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnc2xpY2UnKTtcblxuICBjb25zdCBbJGJlZ2luLCAkc2l6ZV0gPSBzbGljZV91dGlsLnBhcnNlU2xpY2VQYXJhbXMoeCwgYmVnaW4sIHNpemUpO1xuICBzbGljZV91dGlsLmFzc2VydFBhcmFtc1ZhbGlkKHgsICRiZWdpbiwgJHNpemUpO1xuXG4gIGNvbnN0IHZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXM7XG4gIGNvbnN0IG91dFZhbHMgPSBzbGljZUltcGwodmFscywgJGJlZ2luLCAkc2l6ZSwgeC5zaGFwZSwgeC5kdHlwZSk7XG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKCRzaXplLCB4LmR0eXBlLCBvdXRWYWxzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNsaWNlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNsaWNlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHNsaWNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nexport function sparseFillEmptyRowsImpl(indices, indicesShape, indicesDType, values, valuesDType, denseShape, defaultValue) {\n const indicesCount = indicesShape[0];\n const denseRows = denseShape[0];\n const emptyRowIndicator = new Array(denseRows);\n const reverseIndexMap = new Array(indicesCount);\n const rank = indicesShape[1];\n if (denseRows === 0) {\n if (indicesCount !== 0) {\n throw new Error(backend_util.getSparseFillEmptyRowsIndicesDenseShapeMismatch(indicesCount));\n }\n const outputIndices = util.getArrayFromDType(indicesDType, 0);\n const outputValues = util.getArrayFromDType(valuesDType, 0);\n return [\n outputIndices, [0, rank], outputValues, emptyRowIndicator, reverseIndexMap\n ];\n }\n let rowsAreOrdered = true;\n let lastIndicesRow = 0;\n const csrOffset = new Array(denseRows).fill(0);\n for (let i = 0; i < indicesCount; ++i) {\n // indices is a 2d tensor with shape of [N, rank]\n const row = indices[i * rank];\n if (row < 0) {\n throw new Error(backend_util.getSparseFillEmptyRowsNegativeIndexErrorMessage(i, row));\n }\n if (row >= denseRows) {\n throw new Error(backend_util.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(i, row, denseRows));\n }\n ++csrOffset[row];\n rowsAreOrdered = rowsAreOrdered && (row >= lastIndicesRow);\n lastIndicesRow = row;\n }\n let allRowsFull = true;\n for (let row = 0; row < denseRows; ++row) {\n // csrOffset here describes the number of elements in this dense row\n const rowEmpty = (csrOffset[row] === 0);\n emptyRowIndicator[row] = rowEmpty;\n allRowsFull = allRowsFull && !rowEmpty;\n // In filled version, each row has at least one element.\n csrOffset[row] = Math.max(csrOffset[row], 1);\n // Update csrOffset to represent the number of elements up to and\n // including denseRows + 1:\n // csrOffset[0] == #{elements of row 0}\n // csrOffset[1] == #{elements of row 1} + #{elements of row 0}\n // ..\n // csrOffset[i] == starting index for elements in row i + 1.\n if (row > 0) {\n csrOffset[row] += csrOffset[row - 1];\n }\n }\n if (allRowsFull && rowsAreOrdered) {\n const outputIndices = indices;\n const outputValues = values;\n for (let i = 0; i < indicesCount; ++i) {\n reverseIndexMap[i] = i;\n }\n return [\n outputIndices, [indicesCount, rank], outputValues, emptyRowIndicator,\n reverseIndexMap\n ];\n }\n else {\n const fullIndicesCount = csrOffset[denseRows - 1];\n const outputIndices = util.getArrayFromDType(indicesDType, fullIndicesCount * rank);\n const outputValues = util.getArrayFromDType(valuesDType, fullIndicesCount);\n const filledCount = new Array(denseRows).fill(0);\n // Fill in values for rows that are not missing\n for (let i = 0; i < indicesCount; ++i) {\n // indices is a 2d tensor with shape of [N, rank]\n const row = indices[i * rank];\n const offset = filledCount[row];\n const outputI = ((row === 0) ? 0 : csrOffset[row - 1]) + offset;\n filledCount[row]++; // Increment the filled count for this row.\n for (let j = 0; j < rank; ++j) {\n // indices and outputIndices are 2d tensors with shape of [N, rank]\n outputIndices[outputI * rank + j] = indices[i * rank + j];\n }\n outputValues[outputI] = values[i];\n // We'll need this reverse index map to backprop correctly.\n reverseIndexMap[i] = outputI;\n }\n // Fill in values for rows that are missing\n for (let row = 0; row < denseRows; ++row) {\n const rowCount = filledCount[row];\n if (rowCount === 0) { // We haven't filled this row\n const startingIndex = (row === 0) ? 0 : csrOffset[row - 1];\n // Remaining index values were set to zero already.\n // Just need to set the row index in the right location.\n // outputIndices is a 2d tensor with shape of [N, rank]\n outputIndices[startingIndex * rank + 0] = row;\n for (let col = 1; col < rank; ++col) {\n outputIndices[startingIndex * rank + col] = 0;\n }\n outputValues[startingIndex] = defaultValue;\n }\n }\n return [\n outputIndices, [fullIndicesCount, rank], outputValues, emptyRowIndicator,\n reverseIndexMap\n ];\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlRmlsbEVtcHR5Um93c19pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TcGFyc2VGaWxsRW1wdHlSb3dzX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBd0IsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0UsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxPQUFtQixFQUFFLFlBQXNCLEVBQUUsWUFBc0IsRUFDbkUsTUFBa0IsRUFBRSxXQUFxQixFQUFFLFVBQXNCLEVBQ2pFLFlBQW9CO0lBRXRCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEMsTUFBTSxpQkFBaUIsR0FBYyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxNQUFNLGVBQWUsR0FBYSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUxRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0IsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksWUFBWSxLQUFLLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUNYLFlBQVksQ0FBQywrQ0FBK0MsQ0FDeEQsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFlLENBQUM7UUFDNUUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQWUsQ0FBQztRQUMxRSxPQUFPO1lBQ0wsYUFBYSxFQUFFLENB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QUUsRUFBRyw2QkFBNkI7Z0JBQ2xELE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELG1EQUFtRDtnQkFDbkQsd0RBQXdEO2dCQUN4RCx1REFBdUQ7Z0JBQ3ZELGFBQWEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDOUMsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRTtvQkFDbkMsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUMvQztnQkFDRCxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSxDQUFDO2FBQzVDO1NBQ0Y7UUFDRCxPQUFPO1lBQ0wsYUFBYSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLGlCQUFpQjtZQUN4RSxlQUFlO1NBQ2hCLENBQUM7S0FDSDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZUZpbGxFbXB0eVJvd3NJbXBsKFxuICAgIGluZGljZXM6IFR5cGVkQXJyYXksIGluZGljZXNTaGFwZTogbnVtYmVyW10sIGluZGljZXNEVHlwZTogRGF0YVR5cGUsXG4gICAgdmFsdWVzOiBUeXBlZEFycmF5LCB2YWx1ZXNEVHlwZTogRGF0YVR5cGUsIGRlbnNlU2hhcGU6IFR5cGVkQXJyYXksXG4gICAgZGVmYXVsdFZhbHVlOiBudW1iZXIpOlxuICAgIFtUeXBlZEFycmF5LCBudW1iZXJbXSwgVHlwZWRBcnJheSwgYm9vbGVhbltdLCBudW1iZXJbXV0ge1xuICBjb25zdCBpbmRpY2VzQ291bnQgPSBpbmRpY2VzU2hhcGVbMF07XG4gIGNvbnN0IGRlbnNlUm93cyA9IGRlbnNlU2hhcGVbMF07XG5cbiAgY29uc3QgZW1wdHlSb3dJbmRpY2F0b3I6IGJvb2xlYW5bXSA9IG5ldyBBcnJheShkZW5zZVJvd3MpO1xuICBjb25zdCByZXZlcnNlSW5kZXhNYXA6IG51bWJlcltdID0gbmV3IEFycmF5KGluZGljZXNDb3VudCk7XG5cbiAgY29uc3QgcmFuayA9IGluZGljZXNTaGFwZVsxXTtcblxuICBpZiAoZGVuc2VSb3dzID09PSAwKSB7XG4gICAgaWYgKGluZGljZXNDb3VudCAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VGaWxsRW1wdHlSb3dzSW5kaWNlc0RlbnNlU2hhcGVNaXNtYXRjaChcbiAgICAgICAgICAgICAgaW5kaWNlc0NvdW50KSk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dEluZGljZXMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKGluZGljZXNEVHlwZSwgMCkgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBvdXRwdXRWYWx1ZXMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKHZhbHVlc0RUeXBlLCAwKSBhcyBUeXBlZEFycmF5O1xuICAgIHJldHVybiBbXG4gICAgICBvdXRwdXRJbmRpY2VzLCBbMCwgcmFua10sIG91dHB1dFZhbHVlcywgZW1wdHlSb3dJbmRpY2F0b3IsIHJldmVyc2VJbmRleE1hcFxuICAgIF07XG4gIH1cblxuICBsZXQgcm93c0FyZU9yZGVyZWQgPSB0cnVlO1xuICBsZXQgbGFzdEluZGljZXNSb3cgPSAwO1xuICBjb25zdCBjc3JPZmZzZXQ6IG51bWJlcltdID0gbmV3IEFycmF5KGRlbnNlUm93cykuZmlsbCgwKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXNDb3VudDsgKytpKSB7XG4gICAgLy8gaW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtOLCByYW5rXVxuICAgIGNvbnN0IHJvdyA9IGluZGljZXNbaSAqIHJhbmtdO1xuICAgIGlmIChyb3cgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldFNwYXJzZUZpbGxFbXB0eVJvd3NOZWdhdGl2ZUluZGV4RXJyb3JNZXNzYWdlKGksIHJvdykpO1xuICAgIH1cbiAgICBpZiAocm93ID49IGRlbnNlUm93cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VGaWxsRW1wdHlSb3dzT3V0T2ZSYW5nZUluZGV4RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICBpLCByb3csIGRlbnNlUm93cykpO1xuICAgIH1cbiAgICArK2Nzck9mZnNldFtyb3ddO1xuICAgIHJvd3NBcmVPcmRlcmVkID0gcm93c0FyZU9yZGVyZWQgJiYgKHJvdyA+PSBsYXN0SW5kaWNlc1Jvdyk7XG4gICAgbGFzdEluZGljZXNSb3cgPSByb3c7XG4gIH1cblxuICBsZXQgYWxsUm93c0Z1bGwgPSB0cnVlO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkZW5zZVJvd3M7ICsrcm93KSB7XG4gICAgLy8gY3NyT2Zmc2V0IGhlcmUgZGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBkZW5zZSByb3dcbiAgICBjb25zdCByb3dFbXB0eSA9IChjc3JPZmZzZXRbcm93XSA9PT0gMCk7XG4gICAgZW1wdHlSb3dJbmRpY2F0b3Jbcm93XSA9IHJvd0VtcHR5O1xuICAgIGFsbFJvd3NGdWxsID0gYWxsUm93c0Z1bGwgJiYgIXJvd0VtcHR5O1xuICAgIC8vIEluIGZpbGxlZCB2ZXJzaW9uLCBlYWNoIHJvdyBoYXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQuXG4gICAgY3NyT2Zmc2V0W3Jvd10gPSBNYXRoLm1heChjc3JPZmZzZXRbcm93XSwgMSk7XG4gICAgLy8gVXBkYXRlIGNzck9mZnNldCB0byByZXByZXNlbnQgdGhlIG51bWJlciBvZiBlbGVtZW50cyB1cCB0byBhbmRcbiAgICAvLyBpbmNsdWRpbmcgZGVuc2VSb3dzICsgMTpcbiAgICAvLyAgY3NyT2Zmc2V0WzBdID09ICN7ZWxlbWVudHMgb2Ygcm93IDB9XG4gICAgLy8gIGNzck9mZnNldFsxXSA9PSAje2VsZW1lbnRzIG9mIHJvdyAxfSArICN7ZWxlbWVudHMgb2Ygcm93IDB9XG4gICAgLy8gIC4uXG4gICAgLy8gIGNzck9mZnNldFtpXSA9PSBzdGFydGluZyBpbmRleCBmb3IgZWxlbWVudHMgaW4gcm93IGkgKyAxLlxuICAgIGlmIChyb3cgPiAwKSB7XG4gICAgICBjc3JPZmZzZXRbcm93XSArPSBjc3JPZmZzZXRbcm93IC0gMV07XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbFJvd3NGdWxsICYmIHJvd3NBcmVPcmRlcmVkKSB7XG4gICAgY29uc3Qgb3V0cHV0SW5kaWNlczogVHlwZWRBcnJheSA9IGluZGljZXM7XG4gICAgY29uc3Qgb3V0cHV0VmFsdWVzOiBUeXBlZEFycmF5ID0gdmFsdWVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlc0NvdW50OyArK2kpIHtcbiAgICAgIHJldmVyc2VJbmRleE1hcFtpXSA9IGk7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBvdXRwdXRJbmRpY2VzLCBbaW5kaWNlc0NvdW50LCByYW5rXSwgb3V0cHV0VmFsdWVzLCBlbXB0eVJvd0luZGljYXRvcixcbiAgICAgIHJldmVyc2VJbmRleE1hcFxuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZnVsbEluZGljZXNDb3VudCA9IGNzck9mZnNldFtkZW5zZVJvd3MgLSAxXTtcbiAgICBjb25zdCBvdXRwdXRJbmRpY2VzID1cbiAgICAgICAgdXRpbC5nZXRBcnJheUZyb21EVHlwZShpbmRpY2VzRFR5cGUsIGZ1bGxJbmRpY2VzQ291bnQgKiByYW5rKSBhc1xuICAgICAgICBUeXBlZEFycmF5O1xuICAgIGNvbnN0IG91dHB1dFZhbHVlcyA9XG4gICAgICAgIHV0aWwuZ2V0QXJyYXlGcm9tRFR5cGUodmFsdWVzRFR5cGUsIGZ1bGxJbmRpY2VzQ291bnQpIGFzIFR5cGVkQXJyYXk7XG4gICAgY29uc3QgZmlsbGVkQ291bnQ6IG51bWJlcltdID0gbmV3IEFycmF5KGRlbnNlUm93cykuZmlsbCgwKTtcblxuICAgIC8vIEZpbGwgaW4gdmFsdWVzIGZvciByb3dzIHRoYXQgYXJlIG5vdCBtaXNzaW5nXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzQ291bnQ7ICsraSkge1xuICAgICAgLy8gaW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtOLCByYW5rXVxuICAgICAgY29uc3Qgcm93ID0gaW5kaWNlc1tpICogcmFua107XG4gICAgICBjb25zdCBvZmZzZXQgPSBmaWxsZWRDb3VudFtyb3ddO1xuICAgICAgY29uc3Qgb3V0cHV0SSA9ICgocm93ID09PSAwKSA/IDAgOiBjc3JPZmZzZXRbcm93IC0gMV0pICsgb2Zmc2V0O1xuICAgICAgZmlsbGVkQ291bnRbcm93XSsrOyAgLy8gSW5jcmVtZW50IHRoZSBmaWxsZWQgY291bnQgZm9yIHRoaXMgcm93LlxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByYW5rOyArK2opIHtcbiAgICAgICAgLy8gaW5kaWNlcyBhbmQgb3V0cHV0SW5kaWNlcyBhcmUgMmQgdGVuc29ycyB3aXRoIHNoYXBlIG9mIFtOLCByYW5rXVxuICAgICAgICBvdXRwdXRJbmRpY2VzW291dHB1dEkgKiByYW5rICsgal0gPSBpbmRpY2VzW2kgKiByYW5rICsgal07XG4gICAgICB9XG4gICAgICBvdXRwdXRWYWx1ZXNbb3V0cHV0SV0gPSB2YWx1ZXNbaV07XG4gICAgICAvLyBXZSdsbCBuZWVkIHRoaXMgcmV2ZXJzZSBpbmRleCBtYXAgdG8gYmFja3Byb3AgY29ycmVjdGx5LlxuICAgICAgcmV2ZXJzZUluZGV4TWFwW2ldID0gb3V0cHV0STtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGluIHZhbHVlcyBmb3Igcm93cyB0aGF0IGFyZSBtaXNzaW5nXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGVuc2VSb3dzOyArK3Jvdykge1xuICAgICAgY29uc3Qgcm93Q291bnQgPSBmaWxsZWRDb3VudFtyb3ddO1xuICAgICAgaWYgKHJvd0NvdW50ID09PSAwKSB7ICAvLyBXZSBoYXZlbid0IGZpbGxlZCB0aGlzIHJvd1xuICAgICAgICBjb25zdCBzdGFydGluZ0luZGV4ID0gKHJvdyA9PT0gMCkgPyAwIDogY3NyT2Zmc2V0W3JvdyAtIDFdO1xuICAgICAgICAvLyBSZW1haW5pbmcgaW5kZXggdmFsdWVzIHdlcmUgc2V0IHRvIHplcm8gYWxyZWFkeS5cbiAgICAgICAgLy8gSnVzdCBuZWVkIHRvIHNldCB0aGUgcm93IGluZGV4IGluIHRoZSByaWdodCBsb2NhdGlvbi5cbiAgICAgICAgLy8gb3V0cHV0SW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtOLCByYW5rXVxuICAgICAgICBvdXRwdXRJbmRpY2VzW3N0YXJ0aW5nSW5kZXggKiByYW5rICsgMF0gPSByb3c7XG4gICAgICAgIGZvciAobGV0IGNvbCA9IDE7IGNvbCA8IHJhbms7ICsrY29sKSB7XG4gICAgICAgICAgb3V0cHV0SW5kaWNlc1tzdGFydGluZ0luZGV4ICogcmFuayArIGNvbF0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dFZhbHVlc1tzdGFydGluZ0luZGV4XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIG91dHB1dEluZGljZXMsIFtmdWxsSW5kaWNlc0NvdW50LCByYW5rXSwgb3V0cHV0VmFsdWVzLCBlbXB0eVJvd0luZGljYXRvcixcbiAgICAgIHJldmVyc2VJbmRleE1hcFxuICAgIF07XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nexport function sparseReshapeImpl(inputIndices, inputIndicesShape, inputDType, inputShape, targetShape) {\n const denseSize = util.sizeFromShape(inputShape);\n const nnz = inputIndicesShape[0];\n const outputRank = targetShape.length;\n // Compute the output shape. Determine product of specified dimensions, and\n // find the index of the unspecified one.\n const outputShape = [];\n let product = 1;\n let unknownIndex = -1;\n for (let d = 0; d < outputRank; ++d) {\n const size = targetShape[d];\n if (size === -1) {\n if (unknownIndex !== -1) {\n throw new Error(backend_util\n .getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(unknownIndex, d));\n }\n unknownIndex = d;\n outputShape.push(1);\n }\n else {\n if (size < 0) {\n throw new Error(backend_util.getSparseReshapeNegativeOutputDimErrorMessage(d, size));\n }\n product *= size;\n outputShape.push(size);\n }\n }\n if (unknownIndex !== -1) {\n if (product <= 0) {\n throw new Error(backend_util.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage());\n }\n const missing = Math.trunc(denseSize / product);\n if (product * missing !== denseSize) {\n throw new Error(backend_util.getSparseReshapeInputOutputMultipleErrorMessage(inputShape, outputShape));\n }\n outputShape[unknownIndex] = missing;\n }\n const outputSize = util.sizeFromShape(outputShape);\n if (outputSize !== denseSize) {\n throw new Error(backend_util.getSparseReshapeInputOutputMismatchErrorMessage(inputShape, outputShape));\n }\n const inputRank = inputShape.length;\n const inputStrides = [];\n if (inputRank > 0) {\n inputStrides[inputRank - 1] = 1;\n for (let d = inputRank - 2; d >= 0; --d) {\n inputStrides[d] = inputStrides[d + 1] * inputShape[d + 1];\n }\n }\n const outputStrides = [];\n if (outputRank > 0) {\n outputStrides[outputRank - 1] = 1;\n for (let d = outputRank - 2; d >= 0; --d) {\n outputStrides[d] = outputStrides[d + 1] * outputShape[d + 1];\n }\n }\n const newIndices = util.getArrayFromDType(inputDType, nnz * outputRank);\n for (let i = 0; i < nnz; ++i) {\n let id = 0;\n for (let j = 0; j < inputRank; ++j) {\n // inputIndices is a 2d tensor with shape of [nnz, inputRank]\n id += inputIndices[i * inputRank + j] * inputStrides[j];\n }\n for (let j = 0; j < outputRank; ++j) {\n // newIndices is a 2d tensor with shape of [nnz, outputRank]\n newIndices[i * outputRank + j] = Math.trunc(id / outputStrides[j]);\n id %= outputStrides[j];\n }\n }\n return [newIndices, [nnz, outputRank], outputShape];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlUmVzaGFwZV9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TcGFyc2VSZXNoYXBlX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBd0IsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0UsTUFBTSxVQUFVLGlCQUFpQixDQUM3QixZQUF3QixFQUFFLGlCQUEyQixFQUFFLFVBQW9CLEVBQzNFLFVBQW9CLEVBQ3BCLFdBQXFCO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUV0QywyRUFBMkU7SUFDM0UseUNBQXlDO0lBQ3pDLE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQztJQUNqQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNuQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDWCxZQUFZO3FCQUNQLHdEQUF3RCxDQUNyRCxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQjtZQUNELFlBQVksR0FBRyxDQUFDLENBQUM7WUFDakIs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LEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbkMsNERBQTREO1lBQzVELFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLEVBQUUsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUNELE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERhdGFUeXBlLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3BhcnNlUmVzaGFwZUltcGwoXG4gICAgaW5wdXRJbmRpY2VzOiBUeXBlZEFycmF5LCBpbnB1dEluZGljZXNTaGFwZTogbnVtYmVyW10sIGlucHV0RFR5cGU6IERhdGFUeXBlLFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLFxuICAgIHRhcmdldFNoYXBlOiBudW1iZXJbXSk6IFtUeXBlZEFycmF5LCBudW1iZXJbXSwgbnVtYmVyW11dIHtcbiAgY29uc3QgZGVuc2VTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKGlucHV0U2hhcGUpO1xuICBjb25zdCBubnogPSBpbnB1dEluZGljZXNTaGFwZVswXTtcbiAgY29uc3Qgb3V0cHV0UmFuayA9IHRhcmdldFNoYXBlLmxlbmd0aDtcblxuICAvLyBDb21wdXRlIHRoZSBvdXRwdXQgc2hhcGUuIERldGVybWluZSBwcm9kdWN0IG9mIHNwZWNpZmllZCBkaW1lbnNpb25zLCBhbmRcbiAgLy8gZmluZCB0aGUgaW5kZXggb2YgdGhlIHVuc3BlY2lmaWVkIG9uZS5cbiAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIGxldCBwcm9kdWN0ID0gMTtcbiAgbGV0IHVua25vd25JbmRleCA9IC0xO1xuICBmb3IgKGxldCBkID0gMDsgZCA8IG91dHB1dFJhbms7ICsrZCkge1xuICAgIGNvbnN0IHNpemUgPSB0YXJnZXRTaGFwZVtkXTtcbiAgICBpZiAoc2l6ZSA9PT0gLTEpIHtcbiAgICAgIGlmICh1bmtub3duSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGJhY2tlbmRfdXRpbFxuICAgICAgICAgICAgICAgIC5nZXRTcGFyc2VSZXNoYXBlTXVsdGlwbGVOZWdhdGl2ZU9uZU91dHB1dERpbUVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93bkluZGV4LCBkKSk7XG4gICAgICB9XG4gICAgICB1bmtub3duSW5kZXggPSBkO1xuICAgICAgb3V0cHV0U2hhcGUucHVzaCgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VSZXNoYXBlTmVnYXRpdmVPdXRwdXREaW1FcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgZCwgc2l6ZSkpO1xuICAgICAgfVxuICAgICAgcHJvZHVjdCAqPSBzaXplO1xuICAgICAgb3V0cHV0U2hhcGUucHVzaChzaXplKTtcbiAgICB9XG4gIH1cbiAgaWYgKHVua25vd25JbmRleCAhPT0gLTEpIHtcbiAgICBpZiAocHJvZHVjdCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldFNwYXJzZVJlc2hhcGVFbXB0eVRlbnNvclplcm9PdXRwdXREaW1FcnJvck1lc3NhZ2UoKSk7XG4gICAgfVxuICAgIGNvbnN0IG1pc3NpbmcgPSBNYXRoLnRydW5jKGRlbnNlU2l6ZSAvIHByb2R1Y3QpO1xuICAgIGlmIChwcm9kdWN0ICogbWlzc2luZyAhPT0gZGVuc2VTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldFNwYXJzZVJlc2hhcGVJbnB1dE91dHB1dE11bHRpcGxlRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICBpbnB1dFNoYXBlLCBvdXRwdXRTaGFwZSkpO1xuICAgIH1cblxuICAgIG91dHB1dFNoYXBlW3Vua25vd25JbmRleF0gPSBtaXNzaW5nO1xuICB9XG4gIGNvbnN0IG91dHB1dFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUob3V0cHV0U2hhcGUpO1xuICBpZiAob3V0cHV0U2l6ZSAhPT0gZGVuc2VTaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlUmVzaGFwZUlucHV0T3V0cHV0TWlzbWF0Y2hFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICBpbnB1dFNoYXBlLCBvdXRwdXRTaGFwZSkpO1xuICB9XG5cbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXRTaGFwZS5sZW5ndGg7XG4gIGNvbnN0IGlucHV0U3RyaWRlczogbnVtYmVyW10gPSBbXTtcbiAgaWYgKGlucHV0UmFuayA+IDApIHtcbiAgICBpbnB1dFN0cmlkZXNbaW5wdXRSYW5rIC0gMV0gPSAxO1xuICAgIGZvciAobGV0IGQgPSBpbnB1dFJhbmsgLSAyOyBkID49IDA7IC0tZCkge1xuICAgICAgaW5wdXRTdHJpZGVzW2RdID0gaW5wdXRTdHJpZGVzW2QgKyAxXSAqIGlucHV0U2hhcGVbZCArIDFdO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG91dHB1dFN0cmlkZXM6IG51bWJlcltdID0gW107XG4gIGlmIChvdXRwdXRSYW5rID4gMCkge1xuICAgIG91dHB1dFN0cmlkZXNbb3V0cHV0UmFuayAtIDFdID0gMTtcbiAgICBmb3IgKGxldCBkID0gb3V0cHV0UmFuayAtIDI7IGQgPj0gMDsgLS1kKSB7XG4gICAgICBvdXRwdXRTdHJpZGVzW2RdID0gb3V0cHV0U3RyaWRlc1tkICsgMV0gKiBvdXRwdXRTaGFwZVtkICsgMV07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV3SW5kaWNlcyA9XG4gICAgICB1dGlsLmdldEFycmF5RnJvbURUeXBlKGlucHV0RFR5cGUsIG5ueiAqIG91dHB1dFJhbmspIGFzIFR5cGVkQXJyYXk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm56OyArK2kpIHtcbiAgICBsZXQgaWQgPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRSYW5rOyArK2opIHtcbiAgICAgIC8vIGlucHV0SW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtubnosIGlucHV0UmFua11cbiAgICAgIGlkICs9IGlucHV0SW5kaWNlc1tpICogaW5wdXRSYW5rICsgal0gKiBpbnB1dFN0cmlkZXNbal07XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgb3V0cHV0UmFuazsgKytqKSB7XG4gICAgICAvLyBuZXdJbmRpY2VzIGlzIGEgMmQgdGVuc29yIHdpdGggc2hhcGUgb2YgW25ueiwgb3V0cHV0UmFua11cbiAgICAgIG5ld0luZGljZXNbaSAqIG91dHB1dFJhbmsgKyBqXSA9IE1hdGgudHJ1bmMoaWQgLyBvdXRwdXRTdHJpZGVzW2pdKTtcbiAgICAgIGlkICU9IG91dHB1dFN0cmlkZXNbal07XG4gICAgfVxuICB9XG4gIHJldHVybiBbbmV3SW5kaWNlcywgW25ueiwgb3V0cHV0UmFua10sIG91dHB1dFNoYXBlXTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nexport function sparseSegmentReductionImpl(input, inputShape, inputDType, indices, segmentIds, isMean = false, defaultValue = 0) {\n const numIndices = indices.length;\n // Flatten the array to two dimensions\n const inputFlat = [inputShape[0], input.length / inputShape[0]];\n const numCol = inputFlat[1];\n // Note that the current implementation assumes that segmentIds values are\n // sorted.\n const lastSegmentIdPlusOne = numIndices > 0 ? segmentIds[numIndices - 1] + 1 : 0;\n const outputRows = lastSegmentIdPlusOne;\n if (outputRows < 0) {\n throw new Error(backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());\n }\n const outputShape = inputShape.slice();\n outputShape[0] = outputRows;\n const outputLength = outputShape.reduce((product, value) => product * value, 1);\n // Output array is initialized with the value 0 by default.\n const output = util.getArrayFromDType(inputDType, outputLength);\n // Note that we do not initialize the output buffer with a default value, so\n // we need to explicitly set missing indices to the default value.\n if (numIndices === 0) {\n if (outputRows > 0) {\n output.fill(defaultValue);\n }\n return [output, outputShape];\n }\n if (outputRows <= 0) {\n throw new Error(backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());\n }\n let start = 0, end = 1;\n // Index from which the output is not initialized.\n let uninitializedIndex = 0;\n let outIndex = segmentIds[start];\n while (true) {\n // We initialize nextIndex to 0 to avoid may be uninitialized warning\n let nextIndex = 0;\n if (end < numIndices) {\n nextIndex = segmentIds[end];\n if (outIndex === nextIndex) {\n ++end;\n continue;\n }\n // We have a new segment here. Verify that the segment ids are growing.\n if (outIndex >= nextIndex) {\n throw new Error(backend_util\n .getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage());\n }\n }\n if (outIndex < 0 || outIndex >= outputRows) {\n throw new Error(backend_util.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(outIndex, outputRows));\n }\n // If there is a gap between two indices, we need to set that gap to the\n // default value.\n if (outIndex > uninitializedIndex) {\n output.fill(defaultValue, uninitializedIndex * numCol, outIndex * numCol);\n }\n for (let i = start; i < end; ++i) {\n const index = indices[i];\n if (index < 0 || index >= inputFlat[0]) {\n throw new Error(backend_util.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(i, indices[i], inputFlat[0]));\n }\n for (let j = 0; j < numCol; j++) {\n output[outIndex * numCol + j] += input[index * numCol + j];\n }\n }\n if (isMean) {\n for (let j = 0; j < numCol; j++) {\n output[outIndex * numCol + j] /= end - start;\n }\n }\n start = end;\n ++end;\n uninitializedIndex = outIndex + 1;\n outIndex = nextIndex;\n if (end > numIndices) {\n break;\n }\n }\n // Fill the gap at the end with the default value.\n if (uninitializedIndex < outputRows) {\n output.fill(defaultValue, uninitializedIndex * numCol, outputRows * numCol);\n }\n return [output, outputShape];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudFJlZHVjdGlvbl9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TcGFyc2VTZWdtZW50UmVkdWN0aW9uX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBd0IsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0UsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxLQUFpQixFQUFFLFVBQW9CLEVBQUUsVUFBb0IsRUFDN0QsT0FBbUIsRUFBRSxVQUFzQixFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQzNELFlBQVksR0FBRyxDQUFDO0lBQ2xCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFFbEMsc0NBQXNDO0lBQ3RDLE1BQU0sU0FBUyxHQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLDBFQUEwRTtJQUMxRSxVQUFVO0lBQ1YsTUFBTSxvQkFBb0IsR0FDdEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztJQUV4QyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FDWCxZQUFZLENBQUMsdURBQXVELEVBQUUsQ0FBQyxDQUFDO0tBQzdFO0lBRUQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lB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LE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQzthQUM5QztTQUNGO1FBRUQsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLEVBQUUsR0FBRyxDQUFDO1FBQ04sa0JBQWtCLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3JCLElBQUksR0FBRyxHQUFHLFVBQVUsRUFBRTtZQUNwQixNQUFNO1NBQ1A7S0FDRjtJQUVELGtEQUFrRDtJQUNsRCxJQUFJLGtCQUFrQixHQUFHLFVBQVUsRUFBRTtRQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsR0FBRyxNQUFNLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQzdFO0lBRUQsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGF0YVR5cGUsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGFyc2VTZWdtZW50UmVkdWN0aW9uSW1wbChcbiAgICBpbnB1dDogVHlwZWRBcnJheSwgaW5wdXRTaGFwZTogbnVtYmVyW10sIGlucHV0RFR5cGU6IERhdGFUeXBlLFxuICAgIGluZGljZXM6IFR5cGVkQXJyYXksIHNlZ21lbnRJZHM6IFR5cGVkQXJyYXksIGlzTWVhbiA9IGZhbHNlLFxuICAgIGRlZmF1bHRWYWx1ZSA9IDApOiBbVHlwZWRBcnJheSwgbnVtYmVyW11dIHtcbiAgY29uc3QgbnVtSW5kaWNlcyA9IGluZGljZXMubGVuZ3RoO1xuXG4gIC8vIEZsYXR0ZW4gdGhlIGFycmF5IHRvIHR3byBkaW1lbnNpb25zXG4gIGNvbnN0IGlucHV0RmxhdDogbnVtYmVyW10gPSBbaW5wdXRTaGFwZVswXSwgaW5wdXQubGVuZ3RoIC8gaW5wdXRTaGFwZVswXV07XG4gIGNvbnN0IG51bUNvbCA9IGlucHV0RmxhdFsxXTtcbiAgLy8gTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBzZWdtZW50SWRzIHZhbHVlcyBhcmVcbiAgLy8gc29ydGVkLlxuICBjb25zdCBsYXN0U2VnbWVudElkUGx1c09uZSA9XG4gICAgICBudW1JbmRpY2VzID4gMCA/IHNlZ21lbnRJZHNbbnVtSW5kaWNlcyAtIDFdICsgMSA6IDA7XG4gIGNvbnN0IG91dHB1dFJvd3MgPSBsYXN0U2VnbWVudElkUGx1c09uZTtcblxuICBpZiAob3V0cHV0Um93cyA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uTmVnYXRpdmVTZWdtZW50SWRzRXJyb3JNZXNzYWdlKCkpO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlWzBdID0gb3V0cHV0Um93cztcblxuICBjb25zdCBvdXRwdXRMZW5ndGggPVxuICAgICAgb3V0cHV0U2hhcGUucmVkdWNlKChwcm9kdWN0LCB2YWx1ZSkgPT4gcHJvZHVjdCAqIHZhbHVlLCAxKTtcbiAgLy8gT3V0cHV0IGFycmF5IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIHZhbHVlIDAgYnkgZGVmYXVsdC5cbiAgY29uc3Qgb3V0cHV0ID0gdXRpbC5nZXRBcnJheUZyb21EVHlwZShpbnB1dERUeXBlLCBvdXRwdXRMZW5ndGgpIGFzIFR5cGVkQXJyYXk7XG5cbiAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBpbml0aWFsaXplIHRoZSBvdXRwdXQgYnVmZmVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCBzb1xuICAvLyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IG1pc3NpbmcgaW5kaWNlcyB0byB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgaWYgKG51bUluZGljZXMgPT09IDApIHtcbiAgICBpZiAob3V0cHV0Um93cyA+IDApIHtcbiAgICAgIG91dHB1dC5maWxsKGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBbb3V0cHV0LCBvdXRwdXRTaGFwZV07XG4gIH1cblxuICBpZiAob3V0cHV0Um93cyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlU2VnbWVudFJlZHVjdGlvbk5lZ2F0aXZlU2VnbWVudElkc0Vycm9yTWVzc2FnZSgpKTtcbiAgfVxuXG4gIGxldCBzdGFydCA9IDAsIGVuZCA9IDE7XG4gIC8vIEluZGV4IGZyb20gd2hpY2ggdGhlIG91dHB1dCBpcyBub3QgaW5pdGlhbGl6ZWQuXG4gIGxldCB1bmluaXRpYWxpemVkSW5kZXggPSAwO1xuICBsZXQgb3V0SW5kZXggPSBzZWdtZW50SWRzW3N0YXJ0XTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIFdlIGluaXRpYWxpemUgbmV4dEluZGV4IHRvIDAgdG8gYXZvaWQgbWF5IGJlIHVuaW5pdGlhbGl6ZWQgd2FybmluZ1xuICAgIGxldCBuZXh0SW5kZXggPSAwO1xuICAgIGlmIChlbmQgPCBudW1JbmRpY2VzKSB7XG4gICAgICBuZXh0SW5kZXggPSBzZWdtZW50SWRzW2VuZF07XG4gICAgICBpZiAob3V0SW5kZXggPT09IG5leHRJbmRleCkge1xuICAgICAgICArK2VuZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBXZSBoYXZlIGEgbmV3IHNlZ21lbnQgaGVyZS4gIFZlcmlmeSB0aGF0IHRoZSBzZWdtZW50IGlkcyBhcmUgZ3Jvd2luZy5cbiAgICAgIGlmIChvdXRJbmRleCA+PSBuZXh0SW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJhY2tlbmRfdXRpbFxuICAgICAgICAgICAgLmdldFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25Ob25JbmNyZWFzaW5nU2VnbWVudElkc0Vycm9yTWVzc2FnZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3V0SW5kZXggPCAwIHx8IG91dEluZGV4ID49IG91dHB1dFJvd3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlU2VnbWVudFJlZHVjdGlvblNlZ21lbnRJZE91dE9mUmFuZ2VFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgIG91dEluZGV4LCBvdXRwdXRSb3dzKSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBnYXAgYmV0d2VlbiB0d28gaW5kaWNlcywgd2UgbmVlZCB0byBzZXQgdGhhdCBnYXAgdG8gdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZS5cbiAgICBpZiAob3V0SW5kZXggPiB1bmluaXRpYWxpemVkSW5kZXgpIHtcbiAgICAgIG91dHB1dC5maWxsKGRlZmF1bHRWYWx1ZSwgdW5pbml0aWFsaXplZEluZGV4ICogbnVtQ29sLCBvdXRJbmRleCAqIG51bUNvbCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gaW5kaWNlc1tpXTtcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gaW5wdXRGbGF0WzBdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uSW5kaWNlc091dE9mUmFuZ2VFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgaSwgaW5kaWNlc1tpXSwgaW5wdXRGbGF0WzBdKSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUNvbDsgaisrKSB7XG4gICAgICAgIG91dHB1dFtvdXRJbmRleCAqIG51bUNvbCArIGpdICs9IGlucHV0W2luZGV4ICogbnVtQ29sICsgal07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzTWVhbikge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2w7IGorKykge1xuICAgICAgICBvdXRwdXRbb3V0SW5kZXggKiBudW1Db2wgKyBqXSAvPSBlbmQgLSBzdGFydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFydCA9IGVuZDtcbiAgICArK2VuZDtcbiAgICB1bmluaXRpYWxpemVkSW5kZXggPSBvdXRJbmRleCArIDE7XG4gICAgb3V0SW5kZXggPSBuZXh0SW5kZXg7XG4gICAgaWYgKGVuZCA+IG51bUluZGljZXMpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZpbGwgdGhlIGdhcCBhdCB0aGUgZW5kIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUuXG4gIGlmICh1bmluaXRpYWxpemVkSW5kZXggPCBvdXRwdXRSb3dzKSB7XG4gICAgb3V0cHV0LmZpbGwoZGVmYXVsdFZhbHVlLCB1bmluaXRpYWxpemVkSW5kZXggKiBudW1Db2wsIG91dHB1dFJvd3MgKiBudW1Db2wpO1xuICB9XG5cbiAgcmV0dXJuIFtvdXRwdXQsIG91dHB1dFNoYXBlXTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sqrt } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const sqrtImpl = createSimpleUnaryImpl((xi) => Math.sqrt(xi));\nexport const sqrt = unaryKernelFunc(Sqrt, (xi) => Math.sqrt(xi));\nexport const sqrtConfig = {\n kernelName: Sqrt,\n backendName: 'cpu',\n kernelFunc: sqrt,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNxcnR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlVW5hcnlJbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV9pbXBsJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzcXJ0SW1wbCA9IGNyZWF0ZVNpbXBsZVVuYXJ5SW1wbCgoeGkpID0+IE1hdGguc3FydCh4aSkpO1xuZXhwb3J0IGNvbnN0IHNxcnQgPSB1bmFyeUtlcm5lbEZ1bmMoU3FydCwgKHhpKSA9PiBNYXRoLnNxcnQoeGkpKTtcblxuZXhwb3J0IGNvbnN0IHNxcnRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3FydCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzcXJ0LFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StaticRegexReplace } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const staticRegexReplaceImpl = createSimpleUnaryImpl((x, attrs) => {\n const { pattern, replaceGlobal, rewrite } = attrs;\n // TODO(mattSoulanille): Don't create a regex each time.\n return x.replace(new RegExp(pattern, replaceGlobal ? 'g' : ''), rewrite);\n});\nconst staticRegexReplace = unaryKernelFuncFromImpl(StaticRegexReplace, staticRegexReplaceImpl);\nexport const staticRegexReplaceConfig = {\n kernelName: StaticRegexReplace,\n backendName: 'cpu',\n kernelFunc: staticRegexReplace,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGljUmVnZXhSZXBsYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdGF0aWNSZWdleFJlcGxhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLGtCQUFrQixFQUEwQixNQUFNLHVCQUF1QixDQUFDO0FBQ2hHLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHFCQUFxQixDQUNqRCxDQUFDLENBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUMsR0FDckMsS0FBMkMsQ0FBQztJQUM5Qyx3REFBd0Q7SUFDeEQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUN0Qix1QkFBdUIsQ0FBQyxrQkFBa0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFpQjtJQUNwRCxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxrQkFBa0I7Q0FDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFN0YXRpY1JlZ2V4UmVwbGFjZSwgU3RhdGljUmVnZXhSZXBsYWNlQXR0cnN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge2NyZWF0ZVNpbXBsZVVuYXJ5SW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfaW1wbCc7XG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY0Zyb21JbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzdGF0aWNSZWdleFJlcGxhY2VJbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsPHN0cmluZyxcbiAgc3RyaW5nPigoeDogc3RyaW5nLCBhdHRycykgPT4ge1xuICAgIGNvbnN0IHtwYXR0ZXJuLCByZXBsYWNlR2xvYmFsLCByZXdyaXRlfSA9XG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIFN0YXRpY1JlZ2V4UmVwbGFjZUF0dHJzO1xuICAgIC8vIFRPRE8obWF0dFNvdWxhbmlsbGUpOiBEb24ndCBjcmVhdGUgYSByZWdleCBlYWNoIHRpbWUuXG4gICAgcmV0dXJuIHgucmVwbGFjZShuZXcgUmVnRXhwKHBhdHRlcm4sIHJlcGxhY2VHbG9iYWwgPyAnZycgOiAnJyksIHJld3JpdGUpO1xufSk7XG5cbmNvbnN0IHN0YXRpY1JlZ2V4UmVwbGFjZSA9XG4gIHVuYXJ5S2VybmVsRnVuY0Zyb21JbXBsKFN0YXRpY1JlZ2V4UmVwbGFjZSwgc3RhdGljUmVnZXhSZXBsYWNlSW1wbCk7XG5cbmV4cG9ydCBjb25zdCBzdGF0aWNSZWdleFJlcGxhY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3RhdGljUmVnZXhSZXBsYWNlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHN0YXRpY1JlZ2V4UmVwbGFjZSxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\nexport function stridedSliceImpl(outShape, xBuf, strides, begin) {\n const outBuf = buffer(outShape, xBuf.dtype);\n for (let i = 0; i < outBuf.size; i++) {\n const loc = outBuf.indexToLoc(i);\n const newLoc = new Array(loc.length);\n for (let j = 0; j < newLoc.length; j++) {\n newLoc[j] = loc[j] * strides[j] + begin[j];\n }\n outBuf.set(xBuf.get(...newLoc), ...loc);\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaWRlZFNsaWNlX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1N0cmlkZWRTbGljZV9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQXFCLE1BQU0sdUJBQXVCLENBQUM7QUFFakUsTUFBTSxVQUFVLGdCQUFnQixDQUM1QixRQUFrQixFQUFFLElBQXFCLEVBQUUsT0FBaUIsRUFDNUQsS0FBZTtJQUNqQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sTUFBTSxHQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsT0FBTyxNQUF5QixDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YnVmZmVyLCBSYW5rLCBUZW5zb3JCdWZmZXJ9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpZGVkU2xpY2VJbXBsPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBvdXRTaGFwZTogbnVtYmVyW10sIHhCdWY6IFRlbnNvckJ1ZmZlcjxSPiwgc3RyaWRlczogbnVtYmVyW10sXG4gICAgYmVnaW46IG51bWJlcltdKTogVGVuc29yQnVmZmVyPFI+IHtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKG91dFNoYXBlLCB4QnVmLmR0eXBlKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEJ1Zi5zaXplOyBpKyspIHtcbiAgICBjb25zdCBsb2MgPSBvdXRCdWYuaW5kZXhUb0xvYyhpKTtcblxuICAgIGNvbnN0IG5ld0xvYzogbnVtYmVyW10gPSBuZXcgQXJyYXkobG9jLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdMb2MubGVuZ3RoOyBqKyspIHtcbiAgICAgIG5ld0xvY1tqXSA9IGxvY1tqXSAqIHN0cmlkZXNbal0gKyBiZWdpbltqXTtcbiAgICB9XG4gICAgb3V0QnVmLnNldCh4QnVmLmdldCguLi5uZXdMb2MpLCAuLi5sb2MpO1xuICB9XG5cbiAgcmV0dXJuIG91dEJ1ZiBhcyBUZW5zb3JCdWZmZXI8Uj47XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\n/**\n * The StringNGramsOp class creates ngrams from ragged string data.\n * The constructor contains all attributes related to the operation such as\n * padding widths and strings, and the compute function can be used to\n * compute the ngrams for different ragged tensor inputs.\n */\nclass StringNGramsOp {\n constructor(separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences) {\n this.separator = util.encodeString(separator);\n this.nGramWidths = nGramWidths;\n this.leftPad = util.encodeString(leftPad);\n this.rightPad = util.encodeString(rightPad);\n this.padWidth = padWidth;\n this.preserveShort = preserveShortSequences;\n }\n getPadWidth(nGramWidth) {\n // Ngrams can be padded with either a fixed pad width or a dynamic pad\n // width depending on the 'padWidth' arg, but in no case should the padding\n // ever be wider than 'nGramWidth' - 1.\n return Math.min(this.padWidth < 0 ? nGramWidth - 1 : this.padWidth, nGramWidth - 1);\n }\n getNumNGrams(length, nGramWidth) {\n const padWidth = this.getPadWidth(nGramWidth);\n return Math.max(0, ((length + 2 * padWidth) - nGramWidth) + 1);\n }\n createNGrams(data, splitIndex, output, outputStartIndex, numNGrams, nGramWidth) {\n for (let nGramIndex = 0; nGramIndex < numNGrams; ++nGramIndex) {\n const padWidth = this.getPadWidth(nGramWidth);\n const leftPadding = Math.max(0, padWidth - nGramIndex);\n const rightPadding = Math.max(0, padWidth - (numNGrams - (nGramIndex + 1)));\n const numTokens = nGramWidth - (leftPadding + rightPadding);\n const dataStartIndex = splitIndex + (leftPadding > 0 ? 0 : nGramIndex - padWidth);\n // Calculate the total expected size of the nGram so we can reserve the\n // correct amount of space in the string.\n let nGramSize = 0;\n // Size of the left padding.\n nGramSize += leftPadding * this.leftPad.length;\n // Size of the tokens.\n for (let n = 0; n < numTokens; ++n) {\n nGramSize += data[dataStartIndex + n].length;\n }\n // Size of the right padding.\n nGramSize += rightPadding * this.rightPad.length;\n // Size of the separators.\n const numSeparators = leftPadding + rightPadding + numTokens - 1;\n nGramSize += numSeparators * this.separator.length;\n // Build the nGram.\n output[outputStartIndex + nGramIndex] = new Uint8Array(nGramSize);\n const nGram = output[outputStartIndex + nGramIndex];\n let nextNGramIndex = 0;\n const appendToNGram = (str) => str.forEach((value) => nGram[nextNGramIndex++] = value);\n for (let n = 0; n < leftPadding; ++n) {\n appendToNGram(this.leftPad);\n appendToNGram(this.separator);\n }\n // Only output first numTokens - 1 pairs of data and separator\n for (let n = 0; n < numTokens - 1; ++n) {\n appendToNGram(data[dataStartIndex + n]);\n appendToNGram(this.separator);\n }\n // Handle case when there are no tokens or no right padding as these\n // can result in consecutive separators.\n if (numTokens > 0) {\n // If we have tokens, then output last and then pair each separator\n // with the right padding that follows, to ensure nGram ends either with\n // the token or with the right pad.\n appendToNGram(data[dataStartIndex + numTokens - 1]);\n for (let n = 0; n < rightPadding; ++n) {\n appendToNGram(this.separator);\n appendToNGram(this.rightPad);\n }\n }\n else {\n // If we don't have tokens, then the last item inserted into the nGram\n // has been the separator from the left padding loop above. Hence,\n // output right pad and separator and make sure to finish with a\n // padding, not a separator.\n for (let n = 0; n < rightPadding - 1; ++n) {\n appendToNGram(this.rightPad);\n appendToNGram(this.separator);\n }\n appendToNGram(this.rightPad);\n }\n }\n }\n // Data and splits together form the definition of the ragged tensor,\n // where data is 1 dimensional and contains the values of the tensor\n // and splits denotes the indices at which each row starts.\n compute(data, splits) {\n // Validate that the splits are valid indices into data, only if there are\n // splits specified.\n const inputDataSize = data.length;\n const splitsSize = splits.length;\n if (splitsSize > 0) {\n let prevSplit = splits[0];\n if (prevSplit !== 0) {\n throw new Error(`First split value must be 0, got ${prevSplit}`);\n }\n for (let i = 1; i < splitsSize; ++i) {\n let validSplits = splits[i] >= prevSplit;\n validSplits = validSplits && (splits[i] <= inputDataSize);\n if (!validSplits) {\n throw new Error(`Invalid split value ${splits[i]}, must be in [${prevSplit}, ${inputDataSize}]`);\n }\n prevSplit = splits[i];\n }\n if (prevSplit !== inputDataSize) {\n throw new Error(`Last split value must be data size. Expected ${inputDataSize}, got ${prevSplit}`);\n }\n }\n const numBatchItems = splitsSize - 1;\n const nGramsSplits = util.getArrayFromDType('int32', splitsSize);\n // If there is no data or size, return an empty ragged tensor.\n if (inputDataSize === 0 || splitsSize === 0) {\n const empty = new Array(inputDataSize);\n for (let i = 0; i <= numBatchItems; ++i) {\n nGramsSplits[i] = 0;\n }\n return [empty, nGramsSplits];\n }\n nGramsSplits[0] = 0;\n for (let i = 1; i <= numBatchItems; ++i) {\n const length = splits[i] - splits[i - 1];\n let numNGrams = 0;\n this.nGramWidths.forEach((nGramWidth) => {\n numNGrams += this.getNumNGrams(length, nGramWidth);\n });\n if (this.preserveShort && length > 0 && numNGrams === 0) {\n numNGrams = 1;\n }\n nGramsSplits[i] = nGramsSplits[i - 1] + numNGrams;\n }\n const nGrams = new Array(nGramsSplits[numBatchItems]);\n for (let i = 0; i < numBatchItems; ++i) {\n const splitIndex = splits[i];\n let outputStartIdx = nGramsSplits[i];\n this.nGramWidths.forEach((nGramWidth) => {\n const length = splits[i + 1] - splits[i];\n const numNGrams = this.getNumNGrams(length, nGramWidth);\n this.createNGrams(data, splitIndex, nGrams, outputStartIdx, numNGrams, nGramWidth);\n outputStartIdx += numNGrams;\n });\n // If we're preserving short sequences, check to see if no sequence was\n // generated by comparing the current output start idx to the original\n // one (nGramSplitsdata). If no ngrams were generated, then they will\n // be equal (since we increment outputStartIdx by numNGrams every\n // time we create a set of ngrams.)\n if (this.preserveShort && outputStartIdx === nGramsSplits[i]) {\n const dataLength = splits[i + 1] - splits[i];\n // One legitimate reason to not have any ngrams when this.preserveShort\n // is true is if the sequence itself is empty. In that case, move on.\n if (dataLength === 0) {\n continue;\n }\n // We don't have to worry about dynamic padding sizes here: if padding\n // was dynamic, every sequence would have had sufficient padding to\n // generate at least one nGram.\n const nGramWidth = dataLength + 2 * this.padWidth;\n const numNGrams = 1;\n this.createNGrams(data, splitIndex, nGrams, outputStartIdx, numNGrams, nGramWidth);\n }\n }\n return [nGrams, nGramsSplits];\n }\n}\nexport function stringNGramsImpl(data, dataSplits, separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences) {\n return new StringNGramsOp(separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences)\n .compute(data, dataSplits);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nTkdyYW1zX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1N0cmluZ05HcmFtc19pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzQzs7Ozs7R0FLRztBQUNILE1BQU0sY0FBYztJQVFsQixZQUNJLFNBQWlCLEVBQUUsV0FBcUIsRUFBRSxPQUFlLEVBQ3pELFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxzQkFBK0I7UUFDckUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQztJQUM5QyxDQUFDO0lBRU8sV0FBVyxDQUFDLFVBQWtCO1FBQ3BDLHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0UsdUNBQXVDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDWCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsVUFBa0I7UUFDckQsTUFBTSxRQUFR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QVksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsSUFBa0IsRUFBRSxVQUFzQixFQUFFLFNBQWlCLEVBQzdELFdBQXFCLEVBQUUsT0FBZSxFQUFFLFFBQWdCLEVBQUUsUUFBZ0IsRUFDMUUsc0JBQStCO0lBQ2pDLE9BQU8sSUFBSSxjQUFjLENBQ2QsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFDbkQsc0JBQXNCLENBQUM7U0FDN0IsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge3V0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbi8qKlxuICogVGhlIFN0cmluZ05HcmFtc09wIGNsYXNzIGNyZWF0ZXMgbmdyYW1zIGZyb20gcmFnZ2VkIHN0cmluZyBkYXRhLlxuICogVGhlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIGFsbCBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gdGhlIG9wZXJhdGlvbiBzdWNoIGFzXG4gKiBwYWRkaW5nIHdpZHRocyBhbmQgc3RyaW5ncywgYW5kIHRoZSBjb21wdXRlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvXG4gKiBjb21wdXRlIHRoZSBuZ3JhbXMgZm9yIGRpZmZlcmVudCByYWdnZWQgdGVuc29yIGlucHV0cy5cbiAqL1xuY2xhc3MgU3RyaW5nTkdyYW1zT3Age1xuICBwcml2YXRlIHNlcGFyYXRvcjogVWludDhBcnJheTtcbiAgcHJpdmF0ZSBuR3JhbVdpZHRoczogbnVtYmVyW107XG4gIHByaXZhdGUgcGFkV2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBsZWZ0UGFkOiBVaW50OEFycmF5O1xuICBwcml2YXRlIHJpZ2h0UGFkOiBVaW50OEFycmF5O1xuICBwcml2YXRlIHByZXNlcnZlU2hvcnQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBzZXBhcmF0b3I6IHN0cmluZywgbkdyYW1XaWR0aHM6IG51bWJlcltdLCBsZWZ0UGFkOiBzdHJpbmcsXG4gICAgICByaWdodFBhZDogc3RyaW5nLCBwYWRXaWR0aDogbnVtYmVyLCBwcmVzZXJ2ZVNob3J0U2VxdWVuY2VzOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXBhcmF0b3IgPSB1dGlsLmVuY29kZVN0cmluZyhzZXBhcmF0b3IpO1xuICAgIHRoaXMubkdyYW1XaWR0aHMgPSBuR3JhbVdpZHRocztcbiAgICB0aGlzLmxlZnRQYWQgPSB1dGlsLmVuY29kZVN0cmluZyhsZWZ0UGFkKTtcbiAgICB0aGlzLnJpZ2h0UGFkID0gdXRpbC5lbmNvZGVTdHJpbmcocmlnaHRQYWQpO1xuICAgIHRoaXMucGFkV2lkdGggPSBwYWRXaWR0aDtcbiAgICB0aGlzLnByZXNlcnZlU2hvcnQgPSBwcmVzZXJ2ZVNob3J0U2VxdWVuY2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYWRXaWR0aChuR3JhbVdpZHRoOiBudW1iZXIpIHtcbiAgICAvLyBOZ3JhbXMgY2FuIGJlIHBhZGRlZCB3aXRoIGVpdGhlciBhIGZpeGVkIHBhZCB3aWR0aCBvciBhIGR5bmFtaWMgcGFkXG4gICAgLy8gd2lkdGggZGVwZW5kaW5nIG9uIHRoZSAncGFkV2lkdGgnIGFyZywgYnV0IGluIG5vIGNhc2Ugc2hvdWxkIHRoZSBwYWRkaW5nXG4gICAgLy8gZXZlciBiZSB3aWRlciB0aGFuICduR3JhbVdpZHRoJyAtIDEuXG4gICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgICB0aGlzLnBhZFdpZHRoIDwgMCA/IG5HcmFtV2lkdGggLSAxIDogdGhpcy5wYWRXaWR0aCwgbkdyYW1XaWR0aCAtIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROdW1OR3JhbXMobGVuZ3RoOiBudW1iZXIsIG5HcmFtV2lkdGg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZFdpZHRoID0gdGhpcy5nZXRQYWRXaWR0aChuR3JhbVdpZHRoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgKChsZW5ndGggKyAyICogcGFkV2lkdGgpIC0gbkdyYW1XaWR0aCkgKyAxKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTkdyYW1zKFxuICAgICAgZGF0YTogVWludDhBcnJheVtdLCBzcGxpdEluZGV4OiBudW1iZXIsIG91dHB1dDogVWludDhBcnJheVtdLFxuICAgICAgb3V0cHV0U3RhcnRJbmRleDogbnVtYmVyLCBudW1OR3JhbXM6IG51bWJlciwgbkdyYW1XaWR0aDogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgbkdyYW1JbmRleCA9IDA7IG5HcmFtSW5kZXggPCBudW1OR3JhbXM7ICsrbkdyYW1JbmRleCkge1xuICAgICAgY29uc3QgcGFkV2lkdGggPSB0aGlzLmdldFBhZFdpZHRoKG5HcmFtV2lkdGgpO1xuICAgICAgY29uc3QgbGVmdFBhZGRpbmcgPSBNYXRoLm1heCgwLCBwYWRXaWR0aCAtIG5HcmFtSW5kZXgpO1xuICAgICAgY29uc3QgcmlnaHRQYWRkaW5nID1cbiAgICAgICAgICBNYXRoLm1heCgwLCBwYWRXaWR0aCAtIChudW1OR3JhbXMgLSAobkdyYW1JbmRleCArIDEpKSk7XG4gICAgICBjb25zdCBudW1Ub2tlbnMgPSBuR3JhbVdpZHRoIC0gKGxlZnRQYWRkaW5nICsgcmlnaHRQYWRkaW5nKTtcbiAgICAgIGNvbnN0IGRhdGFTdGFydEluZGV4ID1cbiAgICAgICAgICBzcGxpdEluZGV4ICsgKGxlZnRQYWRkaW5nID4gMCA/IDAgOiBuR3JhbUluZGV4IC0gcGFkV2lkdGgpO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIGV4cGVjdGVkIHNpemUgb2YgdGhlIG5HcmFtIHNvIHdlIGNhbiByZXNlcnZlIHRoZVxuICAgICAgLy8gY29ycmVjdCBhbW91bnQgb2Ygc3BhY2UgaW4gdGhlIHN0cmluZy5cbiAgICAgIGxldCBuR3JhbVNpemUgPSAwO1xuICAgICAgLy8gU2l6ZSBvZiB0aGUgbGVmdCBwYWRkaW5nLlxuICAgICAgbkdyYW1TaXplICs9IGxlZnRQYWRkaW5nICogdGhpcy5sZWZ0UGFkLmxlbmd0aDtcbiAgICAgIC8vIFNpemUgb2YgdGhlIHRva2Vucy5cbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbnVtVG9rZW5zOyArK24pIHtcbiAgICAgICAgbkdyYW1TaXplICs9IGRhdGFbZGF0YVN0YXJ0SW5kZXggKyBuXS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBTaXplIG9mIHRoZSByaWdodCBwYWRkaW5nLlxuICAgICAgbkdyYW1TaXplICs9IHJpZ2h0UGFkZGluZyAqIHRoaXMucmlnaHRQYWQubGVuZ3RoO1xuICAgICAgLy8gU2l6ZSBvZiB0aGUgc2VwYXJhdG9ycy5cbiAgICAgIGNvbnN0IG51bVNlcGFyYXRvcnMgPSBsZWZ0UGFkZGluZyArIHJpZ2h0UGFkZGluZyArIG51bVRva2VucyAtIDE7XG4gICAgICBuR3JhbVNpemUgKz0gbnVtU2VwYXJhdG9ycyAqIHRoaXMuc2VwYXJhdG9yLmxlbmd0aDtcblxuICAgICAgLy8gQnVpbGQgdGhlIG5HcmFtLlxuICAgICAgb3V0cHV0W291dHB1dFN0YXJ0SW5kZXggKyBuR3JhbUluZGV4XSA9IG5ldyBVaW50OEFycmF5KG5HcmFtU2l6ZSk7XG4gICAgICBjb25zdCBuR3JhbSA9IG91dHB1dFtvdXRwdXRTdGFydEluZGV4ICsgbkdyYW1JbmRleF07XG5cbiAgICAgIGxldCBuZXh0TkdyYW1JbmRleCA9IDA7XG4gICAgICBjb25zdCBhcHBlbmRUb05HcmFtID0gKHN0cjogVWludDhBcnJheSkgPT5cbiAgICAgICAgICBzdHIuZm9yRWFjaCgodmFsdWUpID0+IG5HcmFtW25leHROR3JhbUluZGV4KytdID0gdmFsdWUpO1xuXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGxlZnRQYWRkaW5nOyArK24pIHtcbiAgICAgICAgYXBwZW5kVG9OR3JhbSh0aGlzLmxlZnRQYWQpO1xuICAgICAgICBhcHBlbmRUb05HcmFtKHRoaXMuc2VwYXJhdG9yKTtcbiAgICAgIH1cbiAgICAgIC8vIE9ubHkgb3V0cHV0IGZpcnN0IG51bVRva2VucyAtIDEgcGFpcnMgb2YgZGF0YSBhbmQgc2VwYXJhdG9yXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG51bVRva2VucyAtIDE7ICsrbikge1xuICAgICAgICBhcHBlbmRUb05HcmFtKGRhdGFbZGF0YVN0YXJ0SW5kZXggKyBuXSk7XG4gICAgICAgIGFwcGVuZFRvTkdyYW0odGhpcy5zZXBhcmF0b3IpO1xuICAgICAgfVxuICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0aGVyZSBhcmUgbm8gdG9rZW5zIG9yIG5vIHJpZ2h0IHBhZGRpbmcgYXMgdGhlc2VcbiAgICAgIC8vIGNhbiByZXN1bHQgaW4gY29uc2VjdXRpdmUgc2VwYXJhdG9ycy5cbiAgICAgIGlmIChudW1Ub2tlbnMgPiAwKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgdG9rZW5zLCB0aGVuIG91dHB1dCBsYXN0IGFuZCB0aGVuIHBhaXIgZWFjaCBzZXBhcmF0b3JcbiAgICAgICAgLy8gd2l0aCB0aGUgcmlnaHQgcGFkZGluZyB0aGF0IGZvbGxvd3MsIHRvIGVuc3VyZSBuR3JhbSBlbmRzIGVpdGhlciB3aXRoXG4gICAgICAgIC8vIHRoZSB0b2tlbiBvciB3aXRoIHRoZSByaWdodCBwYWQuXG4gICAgICAgIGFwcGVuZFRvTkdyYW0oZGF0YVtkYXRhU3RhcnRJbmRleCArIG51bVRva2VucyAtIDFdKTtcbiAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByaWdodFBhZGRpbmc7ICsrbikge1xuICAgICAgICAgIGFwcGVuZFRvTkdyYW0odGhpcy5zZXBhcmF0b3IpO1xuICAgICAgICAgIGFwcGVuZFRvTkdyYW0odGhpcy5yaWdodFBhZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdG9rZW5zLCB0aGVuIHRoZSBsYXN0IGl0ZW0gaW5zZXJ0ZWQgaW50byB0aGUgbkdyYW1cbiAgICAgICAgLy8gaGFzIGJlZW4gdGhlIHNlcGFyYXRvciBmcm9tIHRoZSBsZWZ0IHBhZGRpbmcgbG9vcCBhYm92ZS4gSGVuY2UsXG4gICAgICAgIC8vIG91dHB1dCByaWdodCBwYWQgYW5kIHNlcGFyYXRvciBhbmQgbWFrZSBzdXJlIHRvIGZpbmlzaCB3aXRoIGFcbiAgICAgICAgLy8gcGFkZGluZywgbm90IGEgc2VwYXJhdG9yLlxuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJpZ2h0UGFkZGluZyAtIDE7ICsrbikge1xuICAgICAgICAgIGFwcGVuZFRvTkdyYW0odGhpcy5yaWdodFBhZCk7XG4gICAgICAgICAgYXBwZW5kVG9OR3JhbSh0aGlzLnNlcGFyYXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgYXBwZW5kVG9OR3JhbSh0aGlzLnJpZ2h0UGFkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEYXRhIGFuZCBzcGxpdHMgdG9nZXRoZXIgZm9ybSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcmFnZ2VkIHRlbnNvcixcbiAgLy8gd2hlcmUgZGF0YSBpcyAxIGRpbWVuc2lvbmFsIGFuZCBjb250YWlucyB0aGUgdmFsdWVzIG9mIHRoZSB0ZW5zb3JcbiAgLy8gYW5kIHNwbGl0cyBkZW5vdGVzIHRoZSBpbmRpY2VzIGF0IHdoaWNoIGVhY2ggcm93IHN0YXJ0cy5cbiAgcHVibGljIGNvbXB1dGUoZGF0YTogVWludDhBcnJheVtdLCBzcGxpdHM6IEludDMyQXJyYXkpOlxuICAgICAgW1VpbnQ4QXJyYXlbXSwgSW50MzJBcnJheV0ge1xuICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHNwbGl0cyBhcmUgdmFsaWQgaW5kaWNlcyBpbnRvIGRhdGEsIG9ubHkgaWYgdGhlcmUgYXJlXG4gICAgLy8gc3BsaXRzIHNwZWNpZmllZC5cbiAgICBjb25zdCBpbnB1dERhdGFTaXplID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3Qgc3BsaXRzU2l6ZSA9IHNwbGl0cy5sZW5ndGg7XG4gICAgaWYgKHNwbGl0c1NpemUgPiAwKSB7XG4gICAgICBsZXQgcHJldlNwbGl0ID0gc3BsaXRzWzBdO1xuICAgICAgaWYgKHByZXZTcGxpdCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpcnN0IHNwbGl0IHZhbHVlIG11c3QgYmUgMCwgZ290ICR7cHJldlNwbGl0fWApO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzcGxpdHNTaXplOyArK2kpIHtcbiAgICAgICAgbGV0IHZhbGlkU3BsaXRzID0gc3BsaXRzW2ldID49IHByZXZTcGxpdDtcbiAgICAgICAgdmFsaWRTcGxpdHMgPSB2YWxpZFNwbGl0cyAmJiAoc3BsaXRzW2ldIDw9IGlucHV0RGF0YVNpemUpO1xuICAgICAgICBpZiAoIXZhbGlkU3BsaXRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNwbGl0IHZhbHVlICR7c3BsaXRzW2ldfSwgbXVzdCBiZSBpbiBbJHtcbiAgICAgICAgICAgICAgcHJldlNwbGl0fSwgJHtpbnB1dERhdGFTaXplfV1gKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2U3BsaXQgPSBzcGxpdHNbaV07XG4gICAgICB9XG4gICAgICBpZiAocHJldlNwbGl0ICE9PSBpbnB1dERhdGFTaXplKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGFzdCBzcGxpdCB2YWx1ZSBtdXN0IGJlIGRhdGEgc2l6ZS4gRXhwZWN0ZWQgJHtcbiAgICAgICAgICAgIGlucHV0RGF0YVNpemV9LCBnb3QgJHtwcmV2U3BsaXR9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbnVtQmF0Y2hJdGVtcyA9IHNwbGl0c1NpemUgLSAxO1xuICAgIGNvbnN0IG5HcmFtc1NwbGl0cyA9IHV0aWwuZ2V0QXJyYXlGcm9tRFR5cGUoJ2ludDMyJywgc3BsaXRzU2l6ZSk7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSBvciBzaXplLCByZXR1cm4gYW4gZW1wdHkgcmFnZ2VkIHRlbnNvci5cbiAgICBpZiAoaW5wdXREYXRhU2l6ZSA9PT0gMCB8fCBzcGxpdHNTaXplID09PSAwKSB7XG4gICAgICBjb25zdCBlbXB0eTogVWludDhBcnJheVtdID0gbmV3IEFycmF5KGlucHV0RGF0YVNpemUpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbnVtQmF0Y2hJdGVtczsgKytpKSB7XG4gICAgICAgIG5HcmFtc1NwbGl0c1tpXSA9IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gW2VtcHR5LCBuR3JhbXNTcGxpdHNdO1xuICAgIH1cblxuICAgIG5HcmFtc1NwbGl0c1swXSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtQmF0Y2hJdGVtczsgKytpKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBzcGxpdHNbaV0gLSBzcGxpdHNbaSAtIDFdO1xuICAgICAgbGV0IG51bU5HcmFtcyA9IDA7XG4gICAgICB0aGlzLm5HcmFtV2lkdGhzLmZvckVhY2goKG5HcmFtV2lkdGgpID0+IHtcbiAgICAgICAgbnVtTkdyYW1zICs9IHRoaXMuZ2V0TnVtTkdyYW1zKGxlbmd0aCwgbkdyYW1XaWR0aCk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnByZXNlcnZlU2hvcnQgJiYgbGVuZ3RoID4gMCAmJiBudW1OR3JhbXMgPT09IDApIHtcbiAgICAgICAgbnVtTkdyYW1zID0gMTtcbiAgICAgIH1cbiAgICAgIG5HcmFtc1NwbGl0c1tpXSA9IG5HcmFtc1NwbGl0c1tpIC0gMV0gKyBudW1OR3JhbXM7XG4gICAgfVxuXG4gICAgY29uc3QgbkdyYW1zOiBVaW50OEFycmF5W10gPSBuZXcgQXJyYXkobkdyYW1zU3BsaXRzW251bUJhdGNoSXRlbXNdKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQmF0Y2hJdGVtczsgKytpKSB7XG4gICAgICBjb25zdCBzcGxpdEluZGV4ID0gc3BsaXRzW2ldO1xuICAgICAgbGV0IG91dHB1dFN0YXJ0SWR4ID0gbkdyYW1zU3BsaXRzW2ldO1xuICAgICAgdGhpcy5uR3JhbVdpZHRocy5mb3JFYWNoKChuR3JhbVdpZHRoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHNwbGl0c1tpICsgMV0gLSBzcGxpdHNbaV07XG4gICAgICAgIGNvbnN0IG51bU5HcmFtcyA9IHRoaXMuZ2V0TnVtTkdyYW1zKGxlbmd0aCwgbkdyYW1XaWR0aCk7XG4gICAgICAgIHRoaXMuY3JlYXRlTkdyYW1zKFxuICAgICAgICAgICAgZGF0YSwgc3BsaXRJbmRleCwgbkdyYW1zLCBvdXRwdXRTdGFydElkeCwgbnVtTkdyYW1zLCBuR3JhbVdpZHRoKTtcbiAgICAgICAgb3V0cHV0U3RhcnRJZHggKz0gbnVtTkdyYW1zO1xuICAgICAgfSk7XG4gICAgICAvLyBJZiB3ZSdyZSBwcmVzZXJ2aW5nIHNob3J0IHNlcXVlbmNlcywgY2hlY2sgdG8gc2VlIGlmIG5vIHNlcXVlbmNlIHdhc1xuICAgICAgLy8gZ2VuZXJhdGVkIGJ5IGNvbXBhcmluZyB0aGUgY3VycmVudCBvdXRwdXQgc3RhcnQgaWR4IHRvIHRoZSBvcmlnaW5hbFxuICAgICAgLy8gb25lIChuR3JhbVNwbGl0c2RhdGEpLiBJZiBubyBuZ3JhbXMgd2VyZSBnZW5lcmF0ZWQsIHRoZW4gdGhleSB3aWxsXG4gICAgICAvLyBiZSBlcXVhbCAoc2luY2Ugd2UgaW5jcmVtZW50IG91dHB1dFN0YXJ0SWR4IGJ5IG51bU5HcmFtcyBldmVyeVxuICAgICAgLy8gdGltZSB3ZSBjcmVhdGUgYSBzZXQgb2YgbmdyYW1zLilcbiAgICAgIGlmICh0aGlzLnByZXNlcnZlU2hvcnQgJiYgb3V0cHV0U3RhcnRJZHggPT09IG5HcmFtc1NwbGl0c1tpXSkge1xuICAgICAgICBjb25zdCBkYXRhTGVuZ3RoID0gc3BsaXRzW2kgKyAxXSAtIHNwbGl0c1tpXTtcbiAgICAgICAgLy8gT25lIGxlZ2l0aW1hdGUgcmVhc29uIHRvIG5vdCBoYXZlIGFueSBuZ3JhbXMgd2hlbiB0aGlzLnByZXNlcnZlU2hvcnRcbiAgICAgICAgLy8gaXMgdHJ1ZSBpcyBpZiB0aGUgc2VxdWVuY2UgaXRzZWxmIGlzIGVtcHR5LiBJbiB0aGF0IGNhc2UsIG1vdmUgb24uXG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBkeW5hbWljIHBhZGRpbmcgc2l6ZXMgaGVyZTogaWYgcGFkZGluZ1xuICAgICAgICAvLyB3YXMgZHluYW1pYywgZXZlcnkgc2VxdWVuY2Ugd291bGQgaGF2ZSBoYWQgc3VmZmljaWVudCBwYWRkaW5nIHRvXG4gICAgICAgIC8vIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBuR3JhbS5cbiAgICAgICAgY29uc3QgbkdyYW1XaWR0aCA9IGRhdGFMZW5ndGggKyAyICogdGhpcy5wYWRXaWR0aDtcbiAgICAgICAgY29uc3QgbnVtTkdyYW1zID0gMTtcbiAgICAgICAgdGhpcy5jcmVhdGVOR3JhbXMoXG4gICAgICAgICAgICBkYXRhLCBzcGxpdEluZGV4LCBuR3JhbXMsIG91dHB1dFN0YXJ0SWR4LCBudW1OR3JhbXMsIG5HcmFtV2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW25HcmFtcywgbkdyYW1zU3BsaXRzXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nTkdyYW1zSW1wbChcbiAgICBkYXRhOiBVaW50OEFycmF5W10sIGRhdGFTcGxpdHM6IEludDMyQXJyYXksIHNlcGFyYXRvcjogc3RyaW5nLFxuICAgIG5HcmFtV2lkdGhzOiBudW1iZXJbXSwgbGVmdFBhZDogc3RyaW5nLCByaWdodFBhZDogc3RyaW5nLCBwYWRXaWR0aDogbnVtYmVyLFxuICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXM6IGJvb2xlYW4pOiBbVWludDhBcnJheVtdLCBJbnQzMkFycmF5XSB7XG4gIHJldHVybiBuZXcgU3RyaW5nTkdyYW1zT3AoXG4gICAgICAgICAgICAgc2VwYXJhdG9yLCBuR3JhbVdpZHRocywgbGVmdFBhZCwgcmlnaHRQYWQsIHBhZFdpZHRoLFxuICAgICAgICAgICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXMpXG4gICAgICAuY29tcHV0ZShkYXRhLCBkYXRhU3BsaXRzKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nfunction split(str, delimiters, skipEmpty, result) {\n if (!str.length) {\n return;\n }\n // When the delimiter is empty, the input is split into individual characters.\n if (delimiters.length === 0) {\n for (let i = 0; i < str.length; ++i) {\n result.push(str.subarray(i, i + 1));\n }\n return;\n }\n // When there is one delimiter, the input is split only at that delimiter.\n if (delimiters.length === 1) {\n const delimiter = delimiters[0];\n let f = str.indexOf(delimiter);\n while (f !== -1) {\n const token = str.subarray(0, f);\n if (!skipEmpty || token.length !== 0) {\n result.push(token);\n }\n str = str.subarray(f + 1);\n f = str.indexOf(delimiter);\n }\n if (!skipEmpty || str.length !== 0) {\n result.push(str);\n }\n return;\n }\n // When there are multiple delimiters, the input is split at every instance\n // one of the delimiters appears.\n let tokenStart = 0;\n for (let i = 0; i < str.length + 1; i++) {\n if ((i === str.length) || (delimiters.indexOf(str[i]) !== -1)) {\n const token = str.subarray(tokenStart, i);\n if (!skipEmpty || token.length !== 0) {\n result.push(token);\n }\n tokenStart = i + 1;\n }\n }\n}\nexport function stringSplitImpl(input, delimiter, skipEmpty) {\n const batchSize = input.length;\n // Empty delimiter means split the input character by character.\n const tokens = [];\n let outputSize = 0;\n let maxNumEntries = 0;\n const numIndices = new Array(batchSize);\n for (let i = 0; i < batchSize; ++i) {\n const prevTokensLength = tokens.length;\n split(input[i], delimiter, skipEmpty, tokens);\n const nEntries = tokens.length - prevTokensLength;\n numIndices[i] = nEntries;\n outputSize += nEntries;\n maxNumEntries = Math.max(maxNumEntries, nEntries);\n }\n const indices = util.getArrayFromDType('int32', outputSize * 2);\n const values = new Array(outputSize);\n const shape = [batchSize, maxNumEntries];\n let c = 0;\n for (let i = 0; i < batchSize; ++i) {\n for (let j = 0; j < numIndices[i]; ++j) {\n // indices is a 2d tensor with shape of [outputSize, 2]\n indices[c * 2] = i;\n indices[c * 2 + 1] = j;\n values[c] = tokens[c];\n ++c;\n }\n }\n return [indices, values, shape];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nU3BsaXRfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3RyaW5nU3BsaXRfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsU0FBUyxLQUFLLENBQ1YsR0FBZSxFQUFFLFVBQXNCLEVBQUUsU0FBa0IsRUFDM0QsTUFBb0I7SUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDZixPQUFPO0tBQ1I7SUFDRCw4RUFBOEU7SUFDOUUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTztLQUNSO0lBQ0QsMEVBQTBFO0lBQzFFLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNwQyxN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LENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsRUFBRSxDQUFDLENBQUM7U0FDTDtLQUNGO0lBRUQsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5mdW5jdGlvbiBzcGxpdChcbiAgICBzdHI6IFVpbnQ4QXJyYXksIGRlbGltaXRlcnM6IFVpbnQ4QXJyYXksIHNraXBFbXB0eTogYm9vbGVhbixcbiAgICByZXN1bHQ6IFVpbnQ4QXJyYXlbXSk6IHZvaWQge1xuICBpZiAoIXN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gV2hlbiB0aGUgZGVsaW1pdGVyIGlzIGVtcHR5LCB0aGUgaW5wdXQgaXMgc3BsaXQgaW50byBpbmRpdmlkdWFsIGNoYXJhY3RlcnMuXG4gIGlmIChkZWxpbWl0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICByZXN1bHQucHVzaChzdHIuc3ViYXJyYXkoaSwgaSArIDEpKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFdoZW4gdGhlcmUgaXMgb25lIGRlbGltaXRlciwgdGhlIGlucHV0IGlzIHNwbGl0IG9ubHkgYXQgdGhhdCBkZWxpbWl0ZXIuXG4gIGlmIChkZWxpbWl0ZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGRlbGltaXRlciA9IGRlbGltaXRlcnNbMF07XG4gICAgbGV0IGYgPSBzdHIuaW5kZXhPZihkZWxpbWl0ZXIpO1xuICAgIHdoaWxlIChmICE9PSAtMSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBzdHIuc3ViYXJyYXkoMCwgZik7XG4gICAgICBpZiAoIXNraXBFbXB0eSB8fCB0b2tlbi5sZW5ndGggIT09IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgICAgc3RyID0gc3RyLnN1YmFycmF5KGYgKyAxKTtcbiAgICAgIGYgPSBzdHIuaW5kZXhPZihkZWxpbWl0ZXIpO1xuICAgIH1cbiAgICBpZiAoIXNraXBFbXB0eSB8fCBzdHIubGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXN1bHQucHVzaChzdHIpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZGVsaW1pdGVycywgdGhlIGlucHV0IGlzIHNwbGl0IGF0IGV2ZXJ5IGluc3RhbmNlXG4gIC8vIG9uZSBvZiB0aGUgZGVsaW1pdGVycyBhcHBlYXJzLlxuICBsZXQgdG9rZW5TdGFydCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCArIDE7IGkrKykge1xuICAgIGlmICgoaSA9PT0gc3RyLmxlbmd0aCkgfHwgKGRlbGltaXRlcnMuaW5kZXhPZihzdHJbaV0pICE9PSAtMSkpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gc3RyLnN1YmFycmF5KHRva2VuU3RhcnQsIGkpO1xuICAgICAgaWYgKCFza2lwRW1wdHkgfHwgdG9rZW4ubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRva2VuKTtcbiAgICAgIH1cbiAgICAgIHRva2VuU3RhcnQgPSBpICsgMTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1NwbGl0SW1wbChcbiAgICBpbnB1dDogVWludDhBcnJheVtdLCBkZWxpbWl0ZXI6IFVpbnQ4QXJyYXksXG4gICAgc2tpcEVtcHR5OiBib29sZWFuKTogW1R5cGVkQXJyYXksIFVpbnQ4QXJyYXlbXSwgW251bWJlciwgbnVtYmVyXV0ge1xuICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dC5sZW5ndGg7XG5cbiAgLy8gRW1wdHkgZGVsaW1pdGVyIG1lYW5zIHNwbGl0IHRoZSBpbnB1dCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLlxuICBjb25zdCB0b2tlbnM6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuXG4gIGxldCBvdXRwdXRTaXplID0gMDtcbiAgbGV0IG1heE51bUVudHJpZXMgPSAwO1xuICBjb25zdCBudW1JbmRpY2VzOiBudW1iZXJbXSA9IG5ldyBBcnJheShiYXRjaFNpemUpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJhdGNoU2l6ZTsgKytpKSB7XG4gICAgY29uc3QgcHJldlRva2Vuc0xlbmd0aCA9IHRva2Vucy5sZW5ndGg7XG4gICAgc3BsaXQoaW5wdXRbaV0sIGRlbGltaXRlciwgc2tpcEVtcHR5LCB0b2tlbnMpO1xuICAgIGNvbnN0IG5FbnRyaWVzID0gdG9rZW5zLmxlbmd0aCAtIHByZXZUb2tlbnNMZW5ndGg7XG4gICAgbnVtSW5kaWNlc1tpXSA9IG5FbnRyaWVzO1xuICAgIG91dHB1dFNpemUgKz0gbkVudHJpZXM7XG4gICAgbWF4TnVtRW50cmllcyA9IE1hdGgubWF4KG1heE51bUVudHJpZXMsIG5FbnRyaWVzKTtcbiAgfVxuXG4gIGNvbnN0IGluZGljZXMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKCdpbnQzMicsIG91dHB1dFNpemUgKiAyKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCB2YWx1ZXM6IFVpbnQ4QXJyYXlbXSA9IG5ldyBBcnJheShvdXRwdXRTaXplKTtcbiAgY29uc3Qgc2hhcGU6IFtudW1iZXIsIG51bWJlcl0gPSBbYmF0Y2hTaXplLCBtYXhOdW1FbnRyaWVzXTtcblxuICBsZXQgYyA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmF0Y2hTaXplOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUluZGljZXNbaV07ICsraikge1xuICAgICAgLy8gaW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtvdXRwdXRTaXplLCAyXVxuICAgICAgaW5kaWNlc1tjICogMl0gPSBpO1xuICAgICAgaW5kaWNlc1tjICogMiArIDFdID0gajtcbiAgICAgIHZhbHVlc1tjXSA9IHRva2Vuc1tjXTtcbiAgICAgICsrYztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2luZGljZXMsIHZhbHVlcywgc2hhcGVdO1xufVxuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function stringToHashBucketFastImpl(input, numBuckets) {\n const output = util.getArrayFromDType('int32', input.length);\n for (let i = 0; i < input.length; ++i) {\n output[i] =\n util.fingerPrint64(input[i]).modulo(numBuckets).getLowBitsUnsigned();\n }\n return output;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nVG9IYXNoQnVja2V0RmFzdF9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdHJpbmdUb0hhc2hCdWNrZXRGYXN0X2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFhLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sVUFBVSwwQkFBMEIsQ0FDdEMsS0FBbUIsRUFBRSxVQUFrQjtJQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUUzRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztLQUMxRTtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbXBsKFxuICAgIGlucHV0OiBVaW50OEFycmF5W10sIG51bUJ1Y2tldHM6IG51bWJlcik6IFR5cGVkQXJyYXkge1xuICBjb25zdCBvdXRwdXQgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKCdpbnQzMicsIGlucHV0Lmxlbmd0aCkgYXMgVHlwZWRBcnJheTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgKytpKSB7XG4gICAgb3V0cHV0W2ldID1cbiAgICAgICAgdXRpbC5maW5nZXJQcmludDY0KGlucHV0W2ldKS5tb2R1bG8obnVtQnVja2V0cykuZ2V0TG93Qml0c1Vuc2lnbmVkKCk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sub } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc, createComplexBinaryKernelImpl } from '../utils/binary_utils';\nexport const subImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => aValue - bValue));\nexport const subComplexImpl = createComplexBinaryKernelImpl(((aReal, aImag, bReal, bImag) => {\n return { real: aReal - bReal, imag: aImag - bImag };\n}));\nexport const sub = binaryKernelFunc(Sub, subImpl, subComplexImpl);\nexport const subConfig = {\n kernelName: Sub,\n backendName: 'cpu',\n kernelFunc: sub\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyw0QkFBNEIsQ0FDL0MsQ0FBQyxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDdkIsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzVELE9BQU8sRUFBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFN1Yn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmMsIGNyZWF0ZUNvbXBsZXhCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgc3ViSW1wbCA9IGNyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGwoXG4gICAgKChhVmFsdWU6IG51bWJlciwgYlZhbHVlOiBudW1iZXIpID0+IGFWYWx1ZSAtIGJWYWx1ZSkpO1xuZXhwb3J0IGNvbnN0IHN1YkNvbXBsZXhJbXBsID1cbiAgICBjcmVhdGVDb21wbGV4QmluYXJ5S2VybmVsSW1wbCgoKGFSZWFsLCBhSW1hZywgYlJlYWwsIGJJbWFnKSA9PiB7XG4gICAgICByZXR1cm4ge3JlYWw6IGFSZWFsIC0gYlJlYWwsIGltYWc6IGFJbWFnIC0gYkltYWd9O1xuICAgIH0pKTtcbmV4cG9ydCBjb25zdCBzdWIgPSBiaW5hcnlLZXJuZWxGdW5jKFN1Yiwgc3ViSW1wbCwgc3ViQ29tcGxleEltcGwpO1xuXG5leHBvcnQgY29uc3Qgc3ViQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFN1YixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzdWJcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\n/**\n * An implementation of the tile kernel shared between webgl and cpu for string\n * tensors only.\n */\nexport function tileImpl(xBuf, reps) {\n const newShape = new Array(xBuf.rank);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = xBuf.shape[i] * reps[i];\n }\n const result = buffer(newShape, xBuf.dtype);\n for (let i = 0; i < result.values.length; ++i) {\n const newLoc = result.indexToLoc(i);\n const originalLoc = new Array(xBuf.rank);\n for (let j = 0; j < originalLoc.length; j++) {\n originalLoc[j] = newLoc[j] % xBuf.shape[j];\n }\n const originalIndex = xBuf.locToIndex(originalLoc);\n result.values[i] = xBuf.values[originalIndex];\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGlsZV9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9UaWxlX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBK0IsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRTs7O0dBR0c7QUFFSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixJQUErQixFQUMvQixJQUFjO0lBQ2hCLE1BQU0sUUFBUSxHQUFhLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQyxNQUFNLFdBQVcsR0FBYSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDL0M7SUFDRCxPQUFPLE1BQW1DLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtidWZmZXIsIERhdGFUeXBlLCBSYW5rLCBUZW5zb3JCdWZmZXJ9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHRpbGUga2VybmVsIHNoYXJlZCBiZXR3ZWVuIHdlYmdsIGFuZCBjcHUgZm9yIHN0cmluZ1xuICogdGVuc29ycyBvbmx5LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0aWxlSW1wbDxSIGV4dGVuZHMgUmFuaz4oXG4gICAgeEJ1ZjogVGVuc29yQnVmZmVyPFIsIERhdGFUeXBlPixcbiAgICByZXBzOiBudW1iZXJbXSk6IFRlbnNvckJ1ZmZlcjxSLCBEYXRhVHlwZT4ge1xuICBjb25zdCBuZXdTaGFwZTogbnVtYmVyW10gPSBuZXcgQXJyYXkoeEJ1Zi5yYW5rKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgIG5ld1NoYXBlW2ldID0geEJ1Zi5zaGFwZVtpXSAqIHJlcHNbaV07XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYnVmZmVyKG5ld1NoYXBlLCB4QnVmLmR0eXBlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQudmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbmV3TG9jID0gcmVzdWx0LmluZGV4VG9Mb2MoaSk7XG5cbiAgICBjb25zdCBvcmlnaW5hbExvYzogbnVtYmVyW10gPSBuZXcgQXJyYXkoeEJ1Zi5yYW5rKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9yaWdpbmFsTG9jLmxlbmd0aDsgaisrKSB7XG4gICAgICBvcmlnaW5hbExvY1tqXSA9IG5ld0xvY1tqXSAlIHhCdWYuc2hhcGVbal07XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IHhCdWYubG9jVG9JbmRleChvcmlnaW5hbExvYyk7XG5cbiAgICByZXN1bHQudmFsdWVzW2ldID0geEJ1Zi52YWx1ZXNbb3JpZ2luYWxJbmRleF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCBhcyBUZW5zb3JCdWZmZXI8UiwgRGF0YVR5cGU+O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/** An implementation of the TopK kernel shared between webgl and cpu. */\nimport { buffer, util } from '@tensorflow/tfjs-core';\nconst comparePair = (a, b) => {\n const valueDiff = b.value - a.value;\n return valueDiff === 0 ? a.index - b.index : valueDiff;\n};\n/**\n * Partitions array where all elements smaller than the (k+1) smallest element\n * are found to the left of it, and all larger to the right of it.\n * Based on the Floyd-Rivest Algorithm, ref:\n * https://en.wikipedia.org/wiki/Floyd%E2%80%93Rivest_algorithm\n * @param array: Array to partition\n * @param left: Left index for the interval\n * @param right: Right index for the interval\n * @param k: Desired index value, where array[k] is the (k+1)th smallest element\n * when left = 0\n */\nfunction select(array, k, left = 0, right = array.length - 1) {\n while (right > left) {\n // Use select recursively to sample a smaller set of size s\n // the arbitrary constants 600 and 0.5 are used in the original\n // version to minimize execution time.\n if (right - left > 600) {\n const n = right - left + 1;\n const i = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * Math.sign(i - n / 2);\n const newLeft = Math.max(left, Math.floor(k - i * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - i) * s / n + sd));\n select(array, k, newLeft, newRight);\n }\n // partition the elements between left and right around t\n const t = array[k];\n let i = left;\n let j = right;\n util.swap(array, left, k);\n if (comparePair(array[right], t) > 0) {\n util.swap(array, left, right);\n }\n while (i < j) {\n util.swap(array, i, j);\n i++;\n j--;\n while (comparePair(array[i], t) < 0) {\n i = i + 1;\n }\n while (comparePair(array[j], t) > 0) {\n j = j - 1;\n }\n }\n if (comparePair(array[left], t) === 0) {\n util.swap(array, left, j);\n }\n else {\n j = j + 1;\n util.swap(array, j, right);\n }\n // Adjust left and right towards the boundaries of the subset\n // containing the (k - left + 1)th smallest element.\n if (j <= k) {\n left = j + 1;\n }\n if (k <= j) {\n right = j - 1;\n }\n }\n}\nexport function topKImpl(x, xShape, xDtype, k, sorted) {\n // Reshape into a 2d tensor [batch, lastDim] and compute topk along lastDim.\n const lastDim = xShape[xShape.length - 1];\n const [batch, size] = [x.length / lastDim, lastDim];\n const allTopKVals = util.getTypedArrayFromDType(xDtype, batch * k);\n const allTopKIndices = util.getTypedArrayFromDType('int32', batch * k);\n for (let b = 0; b < batch; b++) {\n const offset = b * size;\n const vals = x.subarray(offset, offset + size);\n let valAndInd = new Array(vals.length);\n vals.forEach((value, index) => valAndInd[index] = { value, index });\n if (k < valAndInd.length) {\n select(valAndInd, k);\n valAndInd = valAndInd.slice(0, k);\n }\n if (sorted) {\n valAndInd.sort(comparePair);\n }\n const outOffset = b * k;\n const topKVals = allTopKVals.subarray(outOffset, outOffset + k);\n const topKIndices = allTopKIndices.subarray(outOffset, outOffset + k);\n for (let i = 0; i < k; i++) {\n topKVals[i] = valAndInd[i].value;\n topKIndices[i] = valAndInd[i].index;\n }\n }\n // Reshape back to the original input shape, except that the last\n // dimension is k.\n const outputShape = xShape.slice();\n outputShape[outputShape.length - 1] = k;\n return [\n buffer(outputShape, xDtype, allTopKVals),\n buffer(outputShape, 'int32', allTopKIndices)\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wS19pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Ub3BLX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgseUVBQXlFO0FBRXpFLE9BQU8sRUFBQyxNQUFNLEVBQXFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBT3RILE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwQyxPQUFPLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxLQUFhLEVBQUUsQ0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztJQUMxRSxPQUFPLEtBQUssR0FBRyxJQUFJLEVBQUU7UUFDbkIsMkRBQTJEO1FBQzNELCtEQUErRDtRQUMvRCxzQ0FBc0M7UUFDdEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUN0QixNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFD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QUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3JDO0tBQ0Y7SUFDRCxpRUFBaUU7SUFDakUsa0JBQWtCO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFeEMsT0FBTztRQUNMLE1BQU0sQ0FBQyxXQUEwQixFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDdkQsTUFBTSxDQUFDLFdBQTBCLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQztLQUM1RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUb3BLIGtlcm5lbCBzaGFyZWQgYmV0d2VlbiB3ZWJnbCBhbmQgY3B1LiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgTnVtZXJpY0RhdGFUeXBlLCBSYW5rLCBTaGFwZU1hcCwgVGVuc29yLCBUZW5zb3JCdWZmZXIsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbnR5cGUgUGFpciA9IHtcbiAgdmFsdWU6IG51bWJlcixcbiAgaW5kZXg6IG51bWJlclxufTtcblxuY29uc3QgY29tcGFyZVBhaXIgPSAoYTogUGFpciwgYjogUGFpcikgPT4ge1xuICBjb25zdCB2YWx1ZURpZmYgPSBiLnZhbHVlIC0gYS52YWx1ZTtcbiAgcmV0dXJuIHZhbHVlRGlmZiA9PT0gMCA/IGEuaW5kZXggLSBiLmluZGV4IDogdmFsdWVEaWZmO1xufTtcblxuLyoqXG4gKiBQYXJ0aXRpb25zIGFycmF5IHdoZXJlIGFsbCBlbGVtZW50cyBzbWFsbGVyIHRoYW4gdGhlIChrKzEpIHNtYWxsZXN0IGVsZW1lbnRcbiAqIGFyZSBmb3VuZCB0byB0aGUgbGVmdCBvZiBpdCwgYW5kIGFsbCBsYXJnZXIgdG8gdGhlIHJpZ2h0IG9mIGl0LlxuICogQmFzZWQgb24gdGhlIEZsb3lkLVJpdmVzdCBBbGdvcml0aG0sIHJlZjpcbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zsb3lkJUUyJTgwJTkzUml2ZXN0X2FsZ29yaXRobVxuICogQHBhcmFtIGFycmF5OiBBcnJheSB0byBwYXJ0aXRpb25cbiAqIEBwYXJhbSBsZWZ0OiBMZWZ0IGluZGV4IGZvciB0aGUgaW50ZXJ2YWxcbiAqIEBwYXJhbSByaWdodDogUmlnaHQgaW5kZXggZm9yIHRoZSBpbnRlcnZhbFxuICogQHBhcmFtIGs6IERlc2lyZWQgaW5kZXggdmFsdWUsIHdoZXJlIGFycmF5W2tdIGlzIHRoZSAoaysxKXRoIHNtYWxsZXN0IGVsZW1lbnRcbiAqICAgICAgICAgICB3aGVuIGxlZnQgPSAwXG4gKi9cbmZ1bmN0aW9uIHNlbGVjdChhcnJheTogUGFpcltdLCBrOiBudW1iZXIsIGxlZnQgPSAwLCByaWdodCA9IGFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkge1xuICAgIC8vIFVzZSBzZWxlY3QgcmVjdXJzaXZlbHkgdG8gc2FtcGxlIGEgc21hbGxlciBzZXQgb2Ygc2l6ZSBzXG4gICAgLy8gdGhlIGFyYml0cmFyeSBjb25zdGFudHMgNjAwIGFuZCAwLjUgYXJlIHVzZWQgaW4gdGhlIG9yaWdpbmFsXG4gICAgLy8gdmVyc2lvbiB0byBtaW5pbWl6ZSBleGVjdXRpb24gdGltZS5cbiAgICBpZiAocmlnaHQgLSBsZWZ0ID4gNjAwKSB7XG4gICAgICBjb25zdCBuID0gcmlnaHQgLSBsZWZ0ICsgMTtcbiAgICAgIGNvbnN0IGkgPSBrIC0gbGVmdCArIDE7XG4gICAgICBjb25zdCB6ID0gTWF0aC5sb2cobik7XG4gICAgICBjb25zdCBzID0gMC41ICogTWF0aC5leHAoMiAqIHogLyAzKTtcbiAgICAgIGNvbnN0IHNkID0gMC41ICogTWF0aC5zcXJ0KHogKiBzICogKG4gLSBzKSAvIG4pICogTWF0aC5zaWduKGkgLSBuIC8gMik7XG4gICAgICBjb25zdCBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gaSAqIHMgLyBuICsgc2QpKTtcbiAgICAgIGNvbnN0IG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gaSkgKiBzIC8gbiArIHNkKSk7XG4gICAgICBzZWxlY3QoYXJyYXksIGssIG5ld0xlZnQsIG5ld1JpZ2h0KTtcbiAgICB9XG4gICAgLy8gcGFydGl0aW9uIHRoZSBlbGVtZW50cyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0IGFyb3VuZCB0XG4gICAgY29uc3QgdCA9IGFycmF5W2tdO1xuICAgIGxldCBpID0gbGVmdDtcbiAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgdXRpbC5zd2FwKGFycmF5LCBsZWZ0LCBrKTtcblxuICAgIGlmIChjb21wYXJlUGFpcihhcnJheVtyaWdodF0sIHQpID4gMCkge1xuICAgICAgdXRpbC5zd2FwKGFycmF5LCBsZWZ0LCByaWdodCk7XG4gICAgfVxuICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgdXRpbC5zd2FwKGFycmF5LCBpLCBqKTtcbiAgICAgIGkrKztcbiAgICAgIGotLTtcbiAgICAgIHdoaWxlIChjb21wYXJlUGFpcihhcnJheVtpXSwgdCkgPCAwKSB7XG4gICAgICAgIGkgPSBpICsgMTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChjb21wYXJlUGFpcihhcnJheVtqXSwgdCkgPiAwKSB7XG4gICAgICAgIGogPSBqIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbXBhcmVQYWlyKGFycmF5W2xlZnRdLCB0KSA9PT0gMCkge1xuICAgICAgdXRpbC5zd2FwKGFycmF5LCBsZWZ0LCBqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaiA9IGogKyAxO1xuICAgICAgdXRpbC5zd2FwKGFycmF5LCBqLCByaWdodCk7XG4gICAgfVxuICAgIC8vIEFkanVzdCBsZWZ0IGFuZCByaWdodCB0b3dhcmRzIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBzdWJzZXRcbiAgICAvLyBjb250YWluaW5nIHRoZSAoayAtIGxlZnQgKyAxKXRoIHNtYWxsZXN0IGVsZW1lbnQuXG4gICAgaWYgKGogPD0gaykge1xuICAgICAgbGVmdCA9IGogKyAxO1xuICAgIH1cbiAgICBpZiAoayA8PSBqKSB7XG4gICAgICByaWdodCA9IGogLSAxO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wS0ltcGw8VCBleHRlbmRzIFRlbnNvciwgUiBleHRlbmRzIFJhbms+KFxuICAgIHg6IFR5cGVkQXJyYXksIHhTaGFwZTogbnVtYmVyW10sIHhEdHlwZTogTnVtZXJpY0RhdGFUeXBlLCBrOiBudW1iZXIsXG4gICAgc29ydGVkOiBib29sZWFuKTpcbiAgICBbVGVuc29yQnVmZmVyPFIsIE51bWVyaWNEYXRhVHlwZT4sIFRlbnNvckJ1ZmZlcjxSLCAnaW50MzInPl0ge1xuICAvLyBSZXNoYXBlIGludG8gYSAyZCB0ZW5zb3IgW2JhdGNoLCBsYXN0RGltXSBhbmQgY29tcHV0ZSB0b3BrIGFsb25nIGxhc3REaW0uXG4gIGNvbnN0IGxhc3REaW0gPSB4U2hhcGVbeFNoYXBlLmxlbmd0aCAtIDFdO1xuICBjb25zdCBbYmF0Y2gsIHNpemVdID0gW3gubGVuZ3RoIC8gbGFzdERpbSwgbGFzdERpbV07XG4gIGNvbnN0IGFsbFRvcEtWYWxzID0gdXRpbC5nZXRUeXBlZEFycmF5RnJvbURUeXBlKHhEdHlwZSwgYmF0Y2ggKiBrKTtcbiAgY29uc3QgYWxsVG9wS0luZGljZXMgPSB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUoJ2ludDMyJywgYmF0Y2ggKiBrKTtcblxuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoOyBiKyspIHtcbiAgICBjb25zdCBvZmZzZXQgPSBiICogc2l6ZTtcbiAgICBjb25zdCB2YWxzID0geC5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIHNpemUpO1xuXG4gICAgbGV0IHZhbEFuZEluZDogUGFpcltdID0gbmV3IEFycmF5KHZhbHMubGVuZ3RoKTtcbiAgICB2YWxzLmZvckVhY2goXG4gICAgICAgICh2YWx1ZTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSA9PiB2YWxBbmRJbmRbaW5kZXhdID0ge3ZhbHVlLCBpbmRleH0pO1xuXG4gICAgaWYgKGsgPCB2YWxBbmRJbmQubGVuZ3RoKSB7XG4gICAgICBzZWxlY3QodmFsQW5kSW5kLCBrKTtcbiAgICAgIHZhbEFuZEluZCA9IHZhbEFuZEluZC5zbGljZSgwLCBrKTtcbiAgICB9XG5cbiAgICBpZiAoc29ydGVkKSB7XG4gICAgICB2YWxBbmRJbmQuc29ydChjb21wYXJlUGFpcik7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG91dE9mZnNldCA9IGIgKiBrO1xuICAgIGNvbnN0IHRvcEtWYWxzID0gYWxsVG9wS1ZhbHMuc3ViYXJyYXkob3V0T2Zmc2V0LCBvdXRPZmZzZXQgKyBrKTtcbiAgICBjb25zdCB0b3BLSW5kaWNlcyA9IGFsbFRvcEtJbmRpY2VzLnN1YmFycmF5KG91dE9mZnNldCwgb3V0T2Zmc2V0ICsgayk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgIHRvcEtWYWxzW2ldID0gdmFsQW5kSW5kW2ldLnZhbHVlO1xuICAgICAgdG9wS0luZGljZXNbaV0gPSB2YWxBbmRJbmRbaV0uaW5kZXg7XG4gICAgfVxuICB9XG4gIC8vIFJlc2hhcGUgYmFjayB0byB0aGUgb3JpZ2luYWwgaW5wdXQgc2hhcGUsIGV4Y2VwdCB0aGF0IHRoZSBsYXN0XG4gIC8vIGRpbWVuc2lvbiBpcyBrLlxuICBjb25zdCBvdXRwdXRTaGFwZSA9IHhTaGFwZS5zbGljZSgpO1xuICBvdXRwdXRTaGFwZVtvdXRwdXRTaGFwZS5sZW5ndGggLSAxXSA9IGs7XG5cbiAgcmV0dXJuIFtcbiAgICBidWZmZXIob3V0cHV0U2hhcGUgYXMgU2hhcGVNYXBbUl0sIHhEdHlwZSwgYWxsVG9wS1ZhbHMpLFxuICAgIGJ1ZmZlcihvdXRwdXRTaGFwZSBhcyBTaGFwZU1hcFtSXSwgJ2ludDMyJywgYWxsVG9wS0luZGljZXMpXG4gIF07XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TensorBuffer, util } from '@tensorflow/tfjs-core';\nexport function uniqueImpl(values, axis, shape, dtype) {\n // Normalize and validate axis.\n const $axis = util.parseAxisParam(axis, shape)[0];\n // Calculate the new shape that is suitable for extracting data along the\n // given axis.\n //\n // The rank is 3.\n // The size of the 1st dimension is the size of all the axes < the given axis.\n // The size of the 2nd dimension is the same as the size of the given axis.\n // The size of the 3rd dimension is the size of all the axes > the given axis.\n //\n // For example, for a 4D tensor with shape=[2, 3, 5, 4] and axis=2, the\n // newShape would be: [2*3, 5, 4].\n //\n // Note that this is not the final output shape. This will be the shape for an\n // intermediate TensorBuffer (see inputBuffer below) to allow us to extract\n // values along the given axis. To demonstrate how it works, consider the\n // following example:\n //\n // Input: a 3D tensor, with shape [1, 2, 3]\n // [\n // [\n // [1,2,3],\n // [4,5,6]\n // ]\n // ]\n // Axis: 2 (the last axis).\n // Along axis 2, we expect to extract 3 tensors: [1,4], [2,5], [3,6].\n //\n // For this example, newShape would be: [2, 3, 1], where 2 is calculated from\n // 1*2. The re-shaped data would look like:\n //\n // [\n // [\n // [1], [2], [3]\n // ],\n // [\n // [4], [5], [6]\n // ]\n // ]\n //\n // Then, we can construct a 3-level nested loop by the following dimension\n // order to extract the values along the axis (dimension1):\n // i: dimension1 // 0,1,2 (newShape[1])\n // m: dimension0 // 0,1 (newShape[0])\n // n: dimension2 // 0 (newShape[2])\n //\n // m, i, n\n // ---------\n // Iteration 0: data at [0, 0, 0] => \"1\"\n // Iteration 1: data at [1, 0, 0] => \"4\"\n // We got [1,4].\n // Iteration 2: data at [0, 1, 0] => \"2\"\n // Iteration 3: data at [1, 1, 0] => \"5\"\n // We got [2,5].\n // Iteration 4: data at [0, 2, 0] => \"3\"\n // Iteration 5: data at [1, 2, 0] => \"6\"\n // We got [3,6].\n const newShape = [1, shape[0], 1];\n for (let i = 0; i < $axis; i++) {\n newShape[0] *= shape[i];\n }\n newShape[1] = shape[$axis];\n for (let i = $axis + 1; i < shape.length; i++) {\n newShape[2] *= shape[i];\n }\n // A map from unique elements (their string representations) to their values\n // in \"indices\" (below).\n const uniqueElements = new Map();\n // The indices of each unique element in the original tensor along the given\n // axis. It is 1D and has the same size as the given axis.\n const indices = new Int32Array(shape[$axis]);\n // Create a buffer so we can easily extract value at a given location.\n const inputBuffer = new TensorBuffer(newShape, dtype, values);\n // The indices along the given axis that have unique elements. This is a\n // de-duped version of \"indices\" above.\n const uniqueIndices = [];\n const is1DTensor = newShape[0] === 1 && newShape[2] === 1;\n for (let i = 0; i < shape[$axis]; i++) {\n // Extract values along the axis.\n let element;\n if (is1DTensor) {\n // Fast path for 1D tensor input.\n element = values[i].toString();\n }\n else {\n const axisValues = [];\n for (let m = 0; m < newShape[0]; m++) {\n for (let n = 0; n < newShape[2]; n++) {\n axisValues.push(inputBuffer.get(m, i, n));\n }\n }\n element = axisValues.join(',');\n }\n // Dedup and update various indices.\n const existingIndex = uniqueElements.get(element);\n if (existingIndex != null) {\n indices[i] = existingIndex;\n }\n else {\n const uniqueIndex = uniqueElements.size;\n uniqueElements.set(element, uniqueIndex);\n indices[i] = uniqueIndex;\n uniqueIndices.push(i);\n }\n }\n // Now we know where each of the unique elements are located along the axis\n // (uniqueIndices). Extract them from input buffer and store them in the\n // output buffer.\n const outputTmpShape = newShape.slice();\n outputTmpShape[1] = uniqueElements.size;\n const outputBuffer = new TensorBuffer(outputTmpShape, dtype);\n uniqueIndices.forEach((uniqueElementIndex, i) => {\n for (let m = 0; m < newShape[0]; m++) {\n for (let n = 0; n < newShape[2]; n++) {\n outputBuffer.set(inputBuffer.get(m, uniqueElementIndex, n), m, i, n);\n }\n }\n });\n // The output shape can be calculated from the input shape with the size of\n // the given axis replaced by the number of unique elements along that axis.\n const outputShape = shape.slice();\n outputShape[$axis] = outputTmpShape[1];\n return {\n outputValues: outputBuffer.values,\n outputShape,\n indices,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pcXVlX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1VuaXF1ZV9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMEIsWUFBWSxFQUFjLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTlGLE1BQU0sVUFBVSxVQUFVLENBQ3RCLE1BQXFCLEVBQUUsSUFBWSxFQUFFLEtBQWUsRUFBRSxLQUFlO0lBS3ZFLCtCQUErQjtJQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsRCx5RUFBeUU7SUFDekUsY0FBYztJQUNkLEVBQUU7SUFDRixpQkFBaUI7SUFDakIsOEVBQThFO0lBQzlFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsRUFBRTtJQUNGLHVFQUF1RTtJQUN2RSxrQ0FBa0M7SUFDbEMsRUFBRTtJQUNGLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLHFCQUFxQjtJQUNyQixFQUFFO0lBQ0YsMkNBQTJDO0lBQzNDLElBQUk7SUFDSixNQUFNO0lBQ04sZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixNQUFNO0lBQ04sSUFBSTtJQUNKLDJCQUEyQjtJQUMzQixxRUFBcUU7SUFDckUsRUFBRTtJQUNGLDZFQUE2RTtJQUM3RSwyQ0FBMkM7SUFDM0MsRUFBRTtJQUNGLElBQUk7SUFDSixNQUFNO0lBQ04sb0JBQW9CO0lBQ3BCLE9BQU87SUFDUCxNQUFNO0lBQ04sb0JBQW9CO0lBQ3BCLE1BQU07SUFDTixJQUFJO0lBQ0osRUFBRTtJQUNGLDBFQUEwRTtJQUMxRSwyREFBMkQ7SUFDM0QsNkNBQTZDO0lBQzdDLDZDQUE2QztJQUM3Qyw2Q0FBNkM7SUFDN0MsRUFBRTtJ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MjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QmFja2VuZFZhbHVlcywgRGF0YVR5cGUsIFRlbnNvckJ1ZmZlciwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUltcGwoXG4gICAgdmFsdWVzOiBCYWNrZW5kVmFsdWVzLCBheGlzOiBudW1iZXIsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlKToge1xuICBvdXRwdXRWYWx1ZXM6IEJhY2tlbmRWYWx1ZXMsXG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXSxcbiAgaW5kaWNlczogQmFja2VuZFZhbHVlc1xufSB7XG4gIC8vIE5vcm1hbGl6ZSBhbmQgdmFsaWRhdGUgYXhpcy5cbiAgY29uc3QgJGF4aXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIHNoYXBlKVswXTtcblxuICAvLyBDYWxjdWxhdGUgdGhlIG5ldyBzaGFwZSB0aGF0IGlzIHN1aXRhYmxlIGZvciBleHRyYWN0aW5nIGRhdGEgYWxvbmcgdGhlXG4gIC8vIGdpdmVuIGF4aXMuXG4gIC8vXG4gIC8vIFRoZSByYW5rIGlzIDMuXG4gIC8vIFRoZSBzaXplIG9mIHRoZSAxc3QgZGltZW5zaW9uIGlzIHRoZSBzaXplIG9mIGFsbCB0aGUgYXhlcyA8IHRoZSBnaXZlbiBheGlzLlxuICAvLyBUaGUgc2l6ZSBvZiB0aGUgMm5kIGRpbWVuc2lvbiBpcyB0aGUgc2FtZSBhcyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gYXhpcy5cbiAgLy8gVGhlIHNpemUgb2YgdGhlIDNyZCBkaW1lbnNpb24gaXMgdGhlIHNpemUgb2YgYWxsIHRoZSBheGVzID4gdGhlIGdpdmVuIGF4aXMuXG4gIC8vXG4gIC8vIEZvciBleGFtcGxlLCBmb3IgYSA0RCB0ZW5zb3Igd2l0aCBzaGFwZT1bMiwgMywgNSwgNF0gYW5kIGF4aXM9MiwgdGhlXG4gIC8vIG5ld1NoYXBlIHdvdWxkIGJlOiBbMiozLCA1LCA0XS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBmaW5hbCBvdXRwdXQgc2hhcGUuIFRoaXMgd2lsbCBiZSB0aGUgc2hhcGUgZm9yIGFuXG4gIC8vIGludGVybWVkaWF0ZSBUZW5zb3JCdWZmZXIgKHNlZSBpbnB1dEJ1ZmZlciBiZWxvdykgdG8gYWxsb3cgdXMgdG8gZXh0cmFjdFxuICAvLyB2YWx1ZXMgYWxvbmcgdGhlIGdpdmVuIGF4aXMuIFRvIGRlbW9uc3RyYXRlIGhvdyBpdCB3b3JrcywgY29uc2lkZXIgdGhlXG4gIC8vIGZvbGxvd2luZyBleGFtcGxlOlxuICAvL1xuICAvLyBJbnB1dDogYSAzRCB0ZW5zb3IsIHdpdGggc2hhcGUgWzEsIDIsIDNdXG4gIC8vIFtcbiAgLy8gICBbXG4gIC8vICAgICAgWzEsMiwzXSxcbiAgLy8gICAgICBbNCw1LDZdXG4gIC8vICAgXVxuICAvLyBdXG4gIC8vIEF4aXM6IDIgKHRoZSBsYXN0IGF4aXMpLlxuICAvLyBBbG9uZyBheGlzIDIsIHdlIGV4cGVjdCB0byBleHRyYWN0IDMgdGVuc29yczogWzEsNF0sIFsyLDVdLCBbMyw2XS5cbiAgLy9cbiAgLy8gRm9yIHRoaXMgZXhhbXBsZSwgbmV3U2hhcGUgd291bGQgYmU6IFsyLCAzLCAxXSwgd2hlcmUgMiBpcyBjYWxjdWxhdGVkIGZyb21cbiAgLy8gMSoyLiBUaGUgcmUtc2hhcGVkIGRhdGEgd291bGQgbG9vayBsaWtlOlxuICAvL1xuICAvLyBbXG4gIC8vICAgW1xuICAvLyAgICAgWzFdLCBbMl0sIFszXVxuICAvLyAgIF0sXG4gIC8vICAgW1xuICAvLyAgICAgWzRdLCBbNV0sIFs2XVxuICAvLyAgIF1cbiAgLy8gXVxuICAvL1xuICAvLyBUaGVuLCB3ZSBjYW4gY29uc3RydWN0IGEgMy1sZXZlbCBuZXN0ZWQgbG9vcCBieSB0aGUgZm9sbG93aW5nIGRpbWVuc2lvblxuICAvLyBvcmRlciB0byBleHRyYWN0IHRoZSB2YWx1ZXMgYWxvbmcgdGhlIGF4aXMgKGRpbWVuc2lvbjEpOlxuICAvLyBpOiBkaW1lbnNpb24xICAgICAgIC8vIDAsMSwyIChuZXdTaGFwZVsxXSlcbiAgLy8gICBtOiBkaW1lbnNpb24wICAgICAvLyAwLDEgICAobmV3U2hhcGVbMF0pXG4gIC8vICAgICBuOiBkaW1lbnNpb24yICAgLy8gMCAgICAgKG5ld1NoYXBlWzJdKVxuICAvL1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgbSwgaSwgblxuICAvLyAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS1cbiAgLy8gSXRlcmF0aW9uIDA6IGRhdGEgYXQgWzAsIDAsIDBdID0+IFwiMVwiXG4gIC8vIEl0ZXJhdGlvbiAxOiBkYXRhIGF0IFsxLCAwLCAwXSA9PiBcIjRcIlxuICAvLyBXZSBnb3QgWzEsNF0uXG4gIC8vIEl0ZXJhdGlvbiAyOiBkYXRhIGF0IFswLCAxLCAwXSA9PiBcIjJcIlxuICAvLyBJdGVyYXRpb24gMzogZGF0YSBhdCBbMSwgMSwgMF0gPT4gXCI1XCJcbiAgLy8gV2UgZ290IFsyLDVdLlxuICAvLyBJdGVyYXRpb24gNDogZGF0YSBhdCBbMCwgMiwgMF0gPT4gXCIzXCJcbiAgLy8gSXRlcmF0aW9uIDU6IGRhdGEgYXQgWzEsIDIsIDBdID0+IFwiNlwiXG4gIC8vIFdlIGdvdCBbMyw2XS5cbiAgY29uc3QgbmV3U2hhcGUgPSBbMSwgc2hhcGVbMF0sIDFdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8ICRheGlzOyBpKyspIHtcbiAgICBuZXdTaGFwZVswXSAqPSBzaGFwZVtpXTtcbiAgfVxuICBuZXdTaGFwZVsxXSA9IHNoYXBlWyRheGlzXTtcbiAgZm9yIChsZXQgaSA9ICRheGlzICsgMTsgaSA8IHNoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgbmV3U2hhcGVbMl0gKj0gc2hhcGVbaV07XG4gIH1cblxuICAvLyBBIG1hcCBmcm9tIHVuaXF1ZSBlbGVtZW50cyAodGhlaXIgc3RyaW5nIHJlcHJlc2VudGF0aW9ucykgdG8gdGhlaXIgdmFsdWVzXG4gIC8vIGluIFwiaW5kaWNlc1wiIChiZWxvdykuXG4gIGNvbnN0IHVuaXF1ZUVsZW1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgLy8gVGhlIGluZGljZXMgb2YgZWFjaCB1bmlxdWUgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgdGVuc29yIGFsb25nIHRoZSBnaXZlblxuICAvLyBheGlzLiBJdCBpcyAxRCBhbmQgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhlIGdpdmVuIGF4aXMuXG4gIGNvbnN0IGluZGljZXMgPSBuZXcgSW50MzJBcnJheShzaGFwZVskYXhpc10pO1xuICAvLyBDcmVhdGUgYSBidWZmZXIgc28gd2UgY2FuIGVhc2lseSBleHRyYWN0IHZhbHVlIGF0IGEgZ2l2ZW4gbG9jYXRpb24uXG4gIGNvbnN0IGlucHV0QnVmZmVyID0gbmV3IFRlbnNvckJ1ZmZlcihuZXdTaGFwZSwgZHR5cGUsIHZhbHVlcyBhcyBUeXBlZEFycmF5KTtcbiAgLy8gVGhlIGluZGljZXMgYWxvbmcgdGhlIGdpdmVuIGF4aXMgdGhhdCBoYXZlIHVuaXF1ZSBlbGVtZW50cy4gVGhpcyBpcyBhXG4gIC8vIGRlLWR1cGVkIHZlcnNpb24gb2YgXCJpbmRpY2VzXCIgYWJvdmUuXG4gIGNvbnN0IHVuaXF1ZUluZGljZXM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGlzMURUZW5zb3IgPSBuZXdTaGFwZVswXSA9PT0gMSAmJiBuZXdTaGFwZVsyXSA9PT0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZVskYXhpc107IGkrKykge1xuICAgIC8vIEV4dHJhY3QgdmFsdWVzIGFsb25nIHRoZSBheGlzLlxuICAgIGxldCBlbGVtZW50OiBzdHJpbmc7XG4gICAgaWYgKGlzMURUZW5zb3IpIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3IgMUQgdGVuc29yIGlucHV0LlxuICAgICAgZWxlbWVudCA9IHZhbHVlc1tpXS50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBheGlzVmFsdWVzID0gW107XG4gICAgICBmb3IgKGxldCBtID0gMDsgbSA8IG5ld1NoYXBlWzBdOyBtKyspIHtcbiAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBuZXdTaGFwZVsyXTsgbisrKSB7XG4gICAgICAgICAgYXhpc1ZhbHVlcy5wdXNoKGlucHV0QnVmZmVyLmdldChtLCBpLCBuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQgPSBheGlzVmFsdWVzLmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICAvLyBEZWR1cCBhbmQgdXBkYXRlIHZhcmlvdXMgaW5kaWNlcy5cbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdW5pcXVlRWxlbWVudHMuZ2V0KGVsZW1lbnQpO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9IG51bGwpIHtcbiAgICAgIGluZGljZXNbaV0gPSBleGlzdGluZ0luZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1bmlxdWVJbmRleCA9IHVuaXF1ZUVsZW1lbnRzLnNpemU7XG4gICAgICB1bmlxdWVFbGVtZW50cy5zZXQoZWxlbWVudCwgdW5pcXVlSW5kZXgpO1xuICAgICAgaW5kaWNlc1tpXSA9IHVuaXF1ZUluZGV4O1xuICAgICAgdW5pcXVlSW5kaWNlcy5wdXNoKGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyB3ZSBrbm93IHdoZXJlIGVhY2ggb2YgdGhlIHVuaXF1ZSBlbGVtZW50cyBhcmUgbG9jYXRlZCBhbG9uZyB0aGUgYXhpc1xuICAvLyAodW5pcXVlSW5kaWNlcykuIEV4dHJhY3QgdGhlbSBmcm9tIGlucHV0IGJ1ZmZlciBhbmQgc3RvcmUgdGhlbSBpbiB0aGVcbiAgLy8gb3V0cHV0IGJ1ZmZlci5cbiAgY29uc3Qgb3V0cHV0VG1wU2hhcGUgPSBuZXdTaGFwZS5zbGljZSgpO1xuICBvdXRwdXRUbXBTaGFwZVsxXSA9IHVuaXF1ZUVsZW1lbnRzLnNpemU7XG4gIGNvbnN0IG91dHB1dEJ1ZmZlciA9IG5ldyBUZW5zb3JCdWZmZXIob3V0cHV0VG1wU2hhcGUsIGR0eXBlKTtcbiAgdW5pcXVlSW5kaWNlcy5mb3JFYWNoKCh1bmlxdWVFbGVtZW50SW5kZXgsIGkpID0+IHtcbiAgICBmb3IgKGxldCBtID0gMDsgbSA8IG5ld1NoYXBlWzBdOyBtKyspIHtcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbmV3U2hhcGVbMl07IG4rKykge1xuICAgICAgICBvdXRwdXRCdWZmZXIuc2V0KGlucHV0QnVmZmVyLmdldChtLCB1bmlxdWVFbGVtZW50SW5kZXgsIG4pLCBtLCBpLCBuKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIFRoZSBvdXRwdXQgc2hhcGUgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgaW5wdXQgc2hhcGUgd2l0aCB0aGUgc2l6ZSBvZlxuICAvLyB0aGUgZ2l2ZW4gYXhpcyByZXBsYWNlZCBieSB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBlbGVtZW50cyBhbG9uZyB0aGF0IGF4aXMuXG4gIGNvbnN0IG91dHB1dFNoYXBlID0gc2hhcGUuc2xpY2UoKTtcbiAgb3V0cHV0U2hhcGVbJGF4aXNdID0gb3V0cHV0VG1wU2hhcGVbMV07XG5cbiAgcmV0dXJuIHtcbiAgICBvdXRwdXRWYWx1ZXM6IG91dHB1dEJ1ZmZlci52YWx1ZXMgYXMgQmFja2VuZFZhbHVlcyxcbiAgICBvdXRwdXRTaGFwZSxcbiAgICBpbmRpY2VzLFxuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Import shared functionality from tfjs-backend-cpu without triggering\n// side effects.\n// tslint:disable-next-line: no-imports-from-dist\nimport * as shared from '@tensorflow/tfjs-backend-cpu/dist/shared';\nconst { addImpl: addImplCPU, bincountImpl: bincountImplCPU, bincountReduceImpl: bincountReduceImplCPU, bitwiseAndImpl: bitwiseAndImplCPU, castImpl: castImplCPU, ceilImpl: ceilImplCPU, concatImpl: concatImplCPU, equalImpl: equalImplCPU, expImpl: expImplCPU, expm1Impl: expm1ImplCPU, floorImpl: floorImplCPU, gatherNdImpl: gatherNdImplCPU, gatherV2Impl: gatherV2ImplCPU, greaterImpl: greaterImplCPU, greaterEqualImpl: greaterEqualImplCPU, lessImpl: lessImplCPU, lessEqualImpl: lessEqualImplCPU, linSpaceImpl: linSpaceImplCPU, logImpl: logImplCPU, maxImpl: maxImplCPU, maximumImpl: maximumImplCPU, minimumImpl: minimumImplCPU, multiplyImpl: multiplyImplCPU, negImpl: negImplCPU, notEqualImpl: notEqualImplCPU, prodImpl: prodImplCPU, raggedGatherImpl: raggedGatherImplCPU, raggedRangeImpl: raggedRangeImplCPU, raggedTensorToTensorImpl: raggedTensorToTensorImplCPU, rangeImpl: rangeImplCPU, rsqrtImpl: rsqrtImplCPU, scatterImpl: scatterImplCPU, sigmoidImpl: sigmoidImplCPU, simpleAbsImpl: simpleAbsImplCPU, sliceImpl: sliceImplCPU, sparseFillEmptyRowsImpl: sparseFillEmptyRowsImplCPU, sparseReshapeImpl: sparseReshapeImplCPU, sparseSegmentReductionImpl: sparseSegmentReductionImplCPU, sqrtImpl: sqrtImplCPU, staticRegexReplaceImpl: staticRegexReplaceImplCPU, stridedSliceImpl: stridedSliceImplCPU, stringNGramsImpl: stringNGramsImplCPU, stringSplitImpl: stringSplitImplCPU, stringToHashBucketFastImpl: stringToHashBucketFastImplCPU, subImpl: subImplCPU, tileImpl: tileImplCPU, topKImpl: topKImplCPU, transposeImpl: transposeImplCPU, uniqueImpl: uniqueImplCPU, } = shared;\nexport { addImplCPU, bincountImplCPU, bincountReduceImplCPU, bitwiseAndImplCPU, castImplCPU, ceilImplCPU, concatImplCPU, equalImplCPU, expImplCPU, expm1ImplCPU, floorImplCPU, gatherNdImplCPU, gatherV2ImplCPU, greaterEqualImplCPU, greaterImplCPU, lessEqualImplCPU, lessImplCPU, linSpaceImplCPU, logImplCPU, maxImplCPU, maximumImplCPU, minimumImplCPU, multiplyImplCPU, negImplCPU, notEqualImplCPU, prodImplCPU, raggedGatherImplCPU, raggedRangeImplCPU, raggedTensorToTensorImplCPU, scatterImplCPU, sigmoidImplCPU, simpleAbsImplCPU, sliceImplCPU, sparseFillEmptyRowsImplCPU, sparseReshapeImplCPU, sparseSegmentReductionImplCPU, sqrtImplCPU, staticRegexReplaceImplCPU, stridedSliceImplCPU, stringNGramsImplCPU, stringSplitImplCPU, stringToHashBucketFastImplCPU, subImplCPU, rangeImplCPU, rsqrtImplCPU, tileImplCPU, topKImplCPU, transposeImplCPU, uniqueImplCPU, };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxfdXRpbHMvc2hhcmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVFQUF1RTtBQUN2RSxnQkFBZ0I7QUFDaEIsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxNQUFNLE1BQU0sMENBQTBDLENBQUM7QUFRbkUsTUFBTSxFQUNKLE9BQU8sRUFBRSxVQUFVLEVBQ25CLFlBQVksRUFBRSxlQUFlLEVBQzdCLGtCQUFrQixFQUFFLHFCQUFxQixFQUN6QyxjQUFjLEVBQUUsaUJBQWlCLEVBQ2pDLFFBQVEsRUFBRSxXQUFXLEVBQ3JCLFFBQVEsRUFBRSxXQUFXLEVBQ3JCLFVBQVUsRUFBRSxhQUFhLEVBQ3pCLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQ25CLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLFlBQVksRUFBRSxlQUFlLEVBQzdCLFlBQVksRUFBRSxlQUFlLEVBQzdCLFdBQVcsRUFBRSxjQUFjLEVBQzNCLGdCQUFnQixFQUFFLG1CQUFtQixFQUNyQyxRQUFRLEVBQUUsV0FBVyxFQUNyQixhQUFhLEVBQUUsZ0JBQWdCLEVBQy9CLFlBQVksRUFBRSxlQUFlLEVBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQ25CLE9BQU8sRUFBRSxVQUFVLEVBQ25CLFdBQVcsRUFBRSxjQUFjLEVBQzNCLFdBQVcsRUFBRSxjQUFjLEVBQzNCLFlBQVksRUFBRSxlQUFlLEVBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQ25CLFlBQVksRUFBRSxlQUFlLEVBQzdCLFFBQVEsRUFBRSxXQUFXLEVBQ3JCLGdCQUFnQixFQUFFLG1CQUFtQixFQUNyQyxlQUFlLEVBQUUsa0JBQWtCLEVBQ25DLHdCQUF3QixFQUFFLDJCQUEyQixFQUNyRCxTQUFTLEVBQUUsWUFBWSxFQUN2QixTQUFTLEVBQUUsWUFBWSxFQUN2QixXQUFXLEVBQUUsY0FBYyxFQUMzQixXQUFXLEVBQUUsY0FBYyxFQUMzQixhQUFhLEVBQUUsZ0JBQWdCLEVBQy9CLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLHVCQUF1QixFQUFFLDBCQUEwQixFQUNuRCxpQkFBaUIsRUFBRSxvQkFBb0IsRUFDdkMsMEJBQTBCLEVBQUUsNkJBQTZCLEVBQ3pELFFBQVEsRUFBRSxXQUFXLEVBQ3JCLHNCQUFzQixFQUFFLHlCQUF5QixFQUNqRCxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFDckMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQ3JDLGVBQWUsRUFBRSxrQkFBa0IsRUFDbkMsMEJBQTBCLEVBQUUsNkJBQTZCLEVBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQ25CLFFBQVEsRUFBRSxXQUFXLEVBQ3JCLFFBQVEsRUFBRSxXQUFXLEVBQ3JCLGFBQWEsRUFBRSxnQkFBZ0IsRUFDL0IsVUFBVSxFQUFFLGFBQWEsR0FDMUIsR0FBRyxNQUFNLENBQUM7QUFFWCxPQUFPLEVBQ0wsVUFBVSxFQUNWLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixlQUFlLEVBQ2YsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsY0FBYyxFQUNkLGVBQWUsRUFDZixVQUFVLEVBQ1YsZUFBZSxFQUNmLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osMEJBQTBCLEVBQzFCLG9CQUFvQixFQUNwQiw2QkFBNkIsRUFDN0IsV0FBVyxFQUNYLHlCQUF5QixFQUN6QixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQiw2QkFBNkIsRUFDN0IsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsYUFBYSxHQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gSW1wb3J0IHNoYXJlZCBmdW5jdGlvbmFsaXR5IGZyb20gdGZqcy1iYWNrZW5kLWNwdSB3aXRob3V0IHRyaWdnZXJpbmdcbi8vIHNpZGUgZWZmZWN0cy5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHNoYXJlZCBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWJhY2tlbmQtY3B1L2Rpc3Qvc2hhcmVkJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCB7U2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1iYWNrZW5kLWNwdS9kaXN0L3NoYXJlZCc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQge1NpbXBsZVVuYXJ5SW1wbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1iYWNrZW5kLWNwdS9kaXN0L3V0aWxzL3VuYXJ5X3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU2ltcGxlQmluYXJ5S2VybmVsSW1wbENQVSA9IFNpbXBsZUJpbmFyeUtlcm5lbEltcGw7XG5leHBvcnQgdHlwZSBTaW1wbGVVbmFyeUtlcm5lbEltcGxDUFUgPSBTaW1wbGVVbmFyeUltcGw7XG5jb25zdCB7XG4gIGFkZEltcGw6IGFkZEltcGxDUFUsXG4gIGJpbmNvdW50SW1wbDogYmluY291bnRJbXBsQ1BVLFxuICBiaW5jb3VudFJlZHVjZUltcGw6IGJpbmNvdW50UmVkdWNlSW1wbENQVSxcbiAgYml0d2lzZUFuZEltcGw6IGJpdHdpc2VBbmRJbXBsQ1BVLFxuICBjYXN0SW1wbDogY2FzdEltcGxDUFUsXG4gIGNlaWxJbXBsOiBjZWlsSW1wbENQVSxcbiAgY29uY2F0SW1wbDogY29uY2F0SW1wbENQVSxcbiAgZXF1YWxJbXBsOiBlcXVhbEltcGxDUFUsXG4gIGV4cEltcGw6IGV4cEltcGxDUFUsXG4gIGV4cG0xSW1wbDogZXhwbTFJbXBsQ1BVLFxuICBmbG9vckltcGw6IGZsb29ySW1wbENQVSxcbiAgZ2F0aGVyTmRJbXBsOiBnYXRoZXJOZEltcGxDUFUsXG4gIGdhdGhlclYySW1wbDogZ2F0aGVyVjJJbXBsQ1BVLFxuICBncmVhdGVySW1wbDogZ3JlYXRlckltcGxDUFUsXG4gIGdyZWF0ZXJFcXVhbEltcGw6IGdyZWF0ZXJFcXVhbEltcGxDUFUsXG4gIGxlc3NJbXBsOiBsZXNzSW1wbENQVSxcbiAgbGVzc0VxdWFsSW1wbDogbGVzc0VxdWFsSW1wbENQVSxcbiAgbGluU3BhY2VJbXBsOiBsaW5TcGFjZUltcGxDUFUsXG4gIGxvZ0ltcGw6IGxvZ0ltcGxDUFUsXG4gIG1heEltcGw6IG1heEltcGxDUFUsXG4gIG1heGltdW1JbXBsOiBtYXhpbXVtSW1wbENQVSxcbiAgbWluaW11bUltcGw6IG1pbmltdW1JbXBsQ1BVLFxuICBtdWx0aXBseUltcGw6IG11bHRpcGx5SW1wbENQVSxcbiAgbmVnSW1wbDogbmVnSW1wbENQVSxcbiAgbm90RXF1YWxJbXBsOiBub3RFcXVhbEltcGxDUFUsXG4gIHByb2RJbXBsOiBwcm9kSW1wbENQVSxcbiAgcmFnZ2VkR2F0aGVySW1wbDogcmFnZ2VkR2F0aGVySW1wbENQVSxcbiAgcmFnZ2VkUmFuZ2VJbXBsOiByYWdnZWRSYW5nZUltcGxDUFUsXG4gIHJhZ2dlZFRlbnNvclRvVGVuc29ySW1wbDogcmFnZ2VkVGVuc29yVG9UZW5zb3JJbXBsQ1BVLFxuICByYW5nZUltcGw6IHJhbmdlSW1wbENQVSxcbiAgcnNxcnRJbXBsOiByc3FydEltcGxDUFUsXG4gIHNjYXR0ZXJJbXBsOiBzY2F0dGVySW1wbENQVSxcbiAgc2lnbW9pZEltcGw6IHNpZ21vaWRJbXBsQ1BVLFxuICBzaW1wbGVBYnNJbXBsOiBzaW1wbGVBYnNJbXBsQ1BVLFxuICBzbGljZUltcGw6IHNsaWNlSW1wbENQVSxcbiAgc3BhcnNlRmlsbEVtcHR5Um93c0ltcGw6IHNwYXJzZUZpbGxFbXB0eVJvd3NJbXBsQ1BVLFxuICBzcGFyc2VSZXNoYXBlSW1wbDogc3BhcnNlUmVzaGFwZUltcGxDUFUsXG4gIHNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25JbXBsOiBzcGFyc2VTZWdtZW50UmVkdWN0aW9uSW1wbENQVSxcbiAgc3FydEltcGw6IHNxcnRJbXBsQ1BVLFxuICBzdGF0aWNSZWdleFJlcGxhY2VJbXBsOiBzdGF0aWNSZWdleFJlcGxhY2VJbXBsQ1BVLFxuICBzdHJpZGVkU2xpY2VJbXBsOiBzdHJpZGVkU2xpY2VJbXBsQ1BVLFxuICBzdHJpbmdOR3JhbXNJbXBsOiBzdHJpbmdOR3JhbXNJbXBsQ1BVLFxuICBzdHJpbmdTcGxpdEltcGw6IHN0cmluZ1NwbGl0SW1wbENQVSxcbiAgc3RyaW5nVG9IYXNoQnVja2V0RmFzdEltcGw6IHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbXBsQ1BVLFxuICBzdWJJbXBsOiBzdWJJbXBsQ1BVLFxuICB0aWxlSW1wbDogdGlsZUltcGxDUFUsXG4gIHRvcEtJbXBsOiB0b3BLSW1wbENQVSxcbiAgdHJhbnNwb3NlSW1wbDogdHJhbnNwb3NlSW1wbENQVSxcbiAgdW5pcXVlSW1wbDogdW5pcXVlSW1wbENQVSxcbn0gPSBzaGFyZWQ7XG5cbmV4cG9ydCB7XG4gIGFkZEltcGxDUFUsXG4gIGJpbmNvdW50SW1wbENQVSxcbiAgYmluY291bnRSZWR1Y2VJbXBsQ1BVLFxuICBiaXR3aXNlQW5kSW1wbENQVSxcbiAgY2FzdEltcGxDUFUsXG4gIGNlaWxJbXBsQ1BVLFxuICBjb25jYXRJbXBsQ1BVLFxuICBlcXVhbEltcGxDUFUsXG4gIGV4cEltcGxDUFUsXG4gIGV4cG0xSW1wbENQVSxcbiAgZmxvb3JJbXBsQ1BVLFxuICBnYXRoZXJOZEltcGxDUFUsXG4gIGdhdGhlclYySW1wbENQVSxcbiAgZ3JlYXRlckVxdWFsSW1wbENQVSxcbiAgZ3JlYXRlckltcGxDUFUsXG4gIGxlc3NFcXVhbEltcGxDUFUsXG4gIGxlc3NJbXBsQ1BVLFxuICBsaW5TcGFjZUltcGxDUFUsXG4gIGxvZ0ltcGxDUFUsXG4gIG1heEltcGxDUFUsXG4gIG1heGltdW1JbXBsQ1BVLFxuICBtaW5pbXVtSW1wbENQVSxcbiAgbXVsdGlwbHlJbXBsQ1BVLFxuICBuZWdJbXBsQ1BVLFxuICBub3RFcXVhbEltcGxDUFUsXG4gIHByb2RJbXBsQ1BVLFxuICByYWdnZWRHYXRoZXJJbXBsQ1BVLFxuICByYWdnZWRSYW5nZUltcGxDUFUsXG4gIHJhZ2dlZFRlbnNvclRvVGVuc29ySW1wbENQVSxcbiAgc2NhdHRlckltcGxDUFUsXG4gIHNpZ21vaWRJbXBsQ1BVLFxuICBzaW1wbGVBYnNJbXBsQ1BVLFxuICBzbGljZUltcGxDUFUsXG4gIHNwYXJzZUZpbGxFbXB0eVJvd3NJbXBsQ1BVLFxuICBzcGFyc2VSZXNoYXBlSW1wbENQVSxcbiAgc3BhcnNlU2VnbWVudFJlZHVjdGlvbkltcGxDUFUsXG4gIHNxcnRJbXBsQ1BVLFxuICBzdGF0aWNSZWdleFJlcGxhY2VJbXBsQ1BVLFxuICBzdHJpZGVkU2xpY2VJbXBsQ1BVLFxuICBzdHJpbmdOR3JhbXNJbXBsQ1BVLFxuICBzdHJpbmdTcGxpdEltcGxDUFUsXG4gIHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbXBsQ1BVLFxuICBzdWJJbXBsQ1BVLFxuICByYW5nZUltcGxDUFUsXG4gIHJzcXJ0SW1wbENQVSxcbiAgdGlsZUltcGxDUFUsXG4gIHRvcEtJbXBsQ1BVLFxuICB0cmFuc3Bvc2VJbXBsQ1BVLFxuICB1bmlxdWVJbXBsQ1BVLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport function getVecChannels(name, rank) {\n return ['x', 'y', 'z', 'w', 'u', 'v'].slice(0, rank).map(d => `${name}.${d}`);\n}\nexport function getChannels(name, rank) {\n if (rank === 1) {\n return [name];\n }\n return getVecChannels(name, rank);\n}\nexport function getSourceCoords(rank, dims) {\n if (rank === 1) {\n return 'rc';\n }\n let coords = '';\n for (let i = 0; i < rank; i++) {\n coords += dims[i];\n if (i < rank - 1) {\n coords += ',';\n }\n }\n return coords;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZ191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9wYWNraW5nX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFZLEVBQUUsSUFBWTtJQUN2RCxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWSxFQUFFLElBQVk7SUFDcEQsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2Y7SUFDRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWSxFQUFFLElBQWM7SUFDMUQsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2QsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdCLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNoQixNQUFNLElBQUksR0FBRyxDQUFDO1NBQ2Y7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZWNDaGFubmVscyhuYW1lOiBzdHJpbmcsIHJhbms6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsneCcsICd5JywgJ3onLCAndycsICd1JywgJ3YnXS5zbGljZSgwLCByYW5rKS5tYXAoZCA9PiBgJHtuYW1lfS4ke2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFubmVscyhuYW1lOiBzdHJpbmcsIHJhbms6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgaWYgKHJhbmsgPT09IDEpIHtcbiAgICByZXR1cm4gW25hbWVdO1xuICB9XG4gIHJldHVybiBnZXRWZWNDaGFubmVscyhuYW1lLCByYW5rKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZUNvb3JkcyhyYW5rOiBudW1iZXIsIGRpbXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHJhbmsgPT09IDEpIHtcbiAgICByZXR1cm4gJ3JjJztcbiAgfVxuXG4gIGxldCBjb29yZHMgPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rOyBpKyspIHtcbiAgICBjb29yZHMgKz0gZGltc1tpXTtcbiAgICBpZiAoaSA8IHJhbmsgLSAxKSB7XG4gICAgICBjb29yZHMgKz0gJywnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29vcmRzO1xufSJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { useShapeUniforms } from './gpgpu_math';\nimport { getChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport class PackProgram {\n constructor(outputShape) {\n this.variableNames = ['A'];\n this.packedInputs = false;\n this.packedOutput = true;\n // Only input / output 3D tensors.\n this.outputShape = outputShape;\n this.rank = outputShape.length;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n if (this.rank === 0) {\n this.userCode = `\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n `;\n }\n else {\n const channels = getChannels('rc', this.rank);\n const dtype = getCoordsDataType(this.rank);\n const outOfBoundsCondition = this.getOutOfBoundsCondition(channels);\n const setup = this.getSetup(channels);\n const output = this.getOutput(channels);\n 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 `;\n }\n }\n getSourceCoordsArr(dims) {\n const coords = [];\n for (let row = 0; row <= 1; row++) {\n for (let col = 0; col <= 1; col++) {\n let coord = `${row === 0 ? 'r' : 'rp1'}, ${col === 0 ? 'c' : 'cp1'}`;\n for (let d = 2; d < this.rank; d++) {\n coord = `${dims[dims.length - 1 - d]},` + coord;\n }\n coords.push(coord);\n }\n }\n return coords;\n }\n getOutOfBoundsCondition(dims) {\n if (this.rank === 1) {\n return `rc > ${this.enableShapeUniforms ? 'outShape' : this.outputShape[0]}`;\n }\n let cond = '';\n for (let i = this.rank - 2; i < this.rank; i++) {\n cond += `${dims[i]} >= ${this.enableShapeUniforms ? `outShape[${i}]` : this.outputShape[i]}`;\n if (i < this.rank - 1) {\n cond += '||';\n }\n }\n return cond;\n }\n getSetup(dims) {\n if (this.rank === 1) {\n return '';\n }\n const innerDims = dims.slice(-2);\n const col = this.enableShapeUniforms ? `outShape[${this.rank} - 1]` :\n this.outputShape[this.rank - 1];\n const row = this.enableShapeUniforms ? `outShape[${this.rank} - 2]` :\n this.outputShape[this.rank - 2];\n 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 >= ${col};\n bool rEdge = rp1 >= ${row};\n `;\n }\n getOutput(dims) {\n const sourceCoords = this.getSourceCoordsArr(dims);\n if (this.rank === 1) {\n const outShape = this.enableShapeUniforms ? 'outShape' : this.outputShape[0];\n return `getA(rc), (rc + 1 >= ${outShape} ? 0. : getA(rc + 1)), 0, 0`;\n }\n return `getA(${sourceCoords[0]}),\n cEdge ? 0. : getA(${sourceCoords[1]}),\n rEdge ? 0. : getA(${sourceCoords[2]}),\n rEdge || cEdge ? 0. : getA(${sourceCoords[3]})`;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja19ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3BhY2tfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxPQUFPLFdBQVc7SUFTdEIsWUFDSSxXQUNZO1FBVmhCLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUd0QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQU9DLGtDQUFrQztRQUNyRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHOzs7O09BSWYsQ0FBQztTQUNIO2FBQU07WUFDTCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FB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Q0FBQztRQUV2RSxPQUFPO2dCQUNLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osU0FBUyxDQUFDLENBQUMsQ0FBQzs7Ozs0QkFJQSxHQUFHOzRCQUNILEdBQUc7S0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBYztRQUM5QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLFFBQVEsR0FDVixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRSxPQUFPLHdCQUF3QixRQUFRLDZCQUE2QixDQUFDO1NBQ3RFO1FBRUQsT0FBTyxRQUFRLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0NBQ0YsWUFBWSxDQUFDLENBQUMsQ0FBQztnQ0FDZixZQUFZLENBQUMsQ0FBQyxDQUFDO3lDQUNOLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzFELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW0sIHVzZVNoYXBlVW5pZm9ybXN9IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5pbXBvcnQge2dldENoYW5uZWxzfSBmcm9tICcuL3BhY2tpbmdfdXRpbCc7XG5pbXBvcnQge2dldENvb3Jkc0RhdGFUeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBjbGFzcyBQYWNrUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBwYWNrZWRJbnB1dHMgPSBmYWxzZTtcbiAgcGFja2VkT3V0cHV0ID0gdHJ1ZTtcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcbiAgcmFuazogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgb3V0cHV0U2hhcGU6XG4gICAgICAgICAgbnVtYmVyW10pIHsgIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGZqcy9pc3N1ZXMvODkzKTpcbiAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBpbnB1dCAvIG91dHB1dCAzRCB0ZW5zb3JzLlxuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICB0aGlzLnJhbmsgPSBvdXRwdXRTaGFwZS5sZW5ndGg7XG4gICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID0gdXNlU2hhcGVVbmlmb3Jtcyh0aGlzLm91dHB1dFNoYXBlLmxlbmd0aCk7XG5cbiAgICBpZiAodGhpcy5yYW5rID09PSAwKSB7XG4gICAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgc2V0T3V0cHV0KHZlYzQoZ2V0QSgpLCAwLiwgMC4sIDAuKSk7XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNoYW5uZWxzID0gZ2V0Q2hhbm5lbHMoJ3JjJywgdGhpcy5yYW5rKTtcbiAgICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUodGhpcy5yYW5rKTtcbiAgICAgIGNvbnN0IG91dE9mQm91bmRzQ29uZGl0aW9uID0gdGhpcy5nZXRPdXRPZkJvdW5kc0NvbmRpdGlvbihjaGFubmVscyk7XG4gICAgICBjb25zdCBzZXR1cCA9IHRoaXMuZ2V0U2V0dXAoY2hhbm5lbHMpO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5nZXRPdXRwdXQoY2hhbm5lbHMpO1xuXG4gICAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgJHtkdHlwZX0gcmMgPSBnZXRPdXRwdXRDb29yZHMoKTtcblxuICAgICAgICAgIGlmKCR7b3V0T2ZCb3VuZHNDb25kaXRpb259KSB7XG4gICAgICAgICAgICBzZXRPdXRwdXQodmVjNCgwKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR7c2V0dXB9XG5cbiAgICAgICAgICAgIHNldE91dHB1dCh2ZWM0KCR7b3V0cHV0fSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNvdXJjZUNvb3Jkc0FycihkaW1zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb29yZHMgPSBbXTtcblxuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8PSAxOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDw9IDE7IGNvbCsrKSB7XG4gICAgICAgIGxldCBjb29yZCA9IGAke3JvdyA9PT0gMCA/ICdyJyA6ICdycDEnfSwgJHtjb2wgPT09IDAgPyAnYycgOiAnY3AxJ31gO1xuXG4gICAgICAgIGZvciAobGV0IGQgPSAyOyBkIDwgdGhpcy5yYW5rOyBkKyspIHtcbiAgICAgICAgICBjb29yZCA9IGAke2RpbXNbZGltcy5sZW5ndGggLSAxIC0gZF19LGAgKyBjb29yZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvb3JkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3V0T2ZCb3VuZHNDb25kaXRpb24oZGltczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJhbmsgPT09IDEpIHtcbiAgICAgIHJldHVybiBgcmMgPiAke1xuICAgICAgICAgIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA/ICdvdXRTaGFwZScgOiB0aGlzLm91dHB1dFNoYXBlWzBdfWA7XG4gICAgfVxuXG4gICAgbGV0IGNvbmQgPSAnJztcbiAgICBmb3IgKGxldCBpID0gdGhpcy5yYW5rIC0gMjsgaSA8IHRoaXMucmFuazsgaSsrKSB7XG4gICAgICBjb25kICs9IGAke2RpbXNbaV19ID49ICR7XG4gICAgICAgICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID8gYG91dFNoYXBlWyR7aX1dYCA6IHRoaXMub3V0cHV0U2hhcGVbaV19YDtcbiAgICAgIGlmIChpIDwgdGhpcy5yYW5rIC0gMSkge1xuICAgICAgICBjb25kICs9ICd8fCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmQ7XG4gIH1cblxuICBwcml2YXRlIGdldFNldHVwKGRpbXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5yYW5rID09PSAxKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgaW5uZXJEaW1zID0gZGltcy5zbGljZSgtMik7XG4gICAgY29uc3QgY29sID0gdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID8gYG91dFNoYXBlWyR7dGhpcy5yYW5rfSAtIDFdYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRTaGFwZVt0aGlzLnJhbmsgLSAxXTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPyBgb3V0U2hhcGVbJHt0aGlzLnJhbmt9IC0gMl1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFNoYXBlW3RoaXMucmFuayAtIDJdO1xuXG4gICAgcmV0dXJuIGBcbiAgICAgIGludCByID0gJHtpbm5lckRpbXNbMF19O1xuICAgICAgaW50IGMgPSAke2lubmVyRGltc1sxXX07XG4gICAgICBpbnQgcnAxID0gciArIDE7XG4gICAgICBpbnQgY3AxID0gYyArIDE7XG5cbiAgICAgIGJvb2wgY0VkZ2UgPSBjcDEgPj0gJHtjb2x9O1xuICAgICAgYm9vbCByRWRnZSA9IHJwMSA+PSAke3Jvd307XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3V0cHV0KGRpbXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBzb3VyY2VDb29yZHMgPSB0aGlzLmdldFNvdXJjZUNvb3Jkc0FycihkaW1zKTtcbiAgICBpZiAodGhpcy5yYW5rID09PSAxKSB7XG4gICAgICBjb25zdCBvdXRTaGFwZSA9XG4gICAgICAgICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID8gJ291dFNoYXBlJyA6IHRoaXMub3V0cHV0U2hhcGVbMF07XG4gICAgICByZXR1cm4gYGdldEEocmMpLCAocmMgKyAxID49ICR7b3V0U2hhcGV9ID8gMC4gOiBnZXRBKHJjICsgMSkpLCAwLCAwYDtcbiAgICB9XG5cbiAgICByZXR1cm4gYGdldEEoJHtzb3VyY2VDb29yZHNbMF19KSxcbiAgICAgICAgICAgIGNFZGdlID8gMC4gOiBnZXRBKCR7c291cmNlQ29vcmRzWzFdfSksXG4gICAgICAgICAgICByRWRnZSA/IDAuIDogZ2V0QSgke3NvdXJjZUNvb3Jkc1syXX0pLFxuICAgICAgICAgICAgckVkZ2UgfHwgY0VkZ2UgPyAwLiA6IGdldEEoJHtzb3VyY2VDb29yZHNbM119KWA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { useShapeUniforms } from './gpgpu_math';\nimport * as shader_util from './shader_compiler_util';\nexport class ReshapePackedProgram {\n constructor(outputShape, inputShape) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.customUniforms = [{ name: 'inputShape', type: 'ivec3' }];\n this.outputShape = outputShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n let mainLoop = ``;\n for (let i = 0; i < 4; i++) {\n let thisRC = `thisRC = rc;`;\n if (i % 2 === 1) {\n thisRC += `thisRC.z += 1;`;\n }\n if (i > 1) {\n thisRC += `thisRC.y += 1;`;\n }\n 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 `;\n }\n this.userCode = `\n ${getReshapedInputCoords(inputShape, this.enableShapeUniforms)}\n ${this.enableShapeUniforms ? shader_util.getFlatIndexFrom3DOutput() :\n shader_util.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 `;\n }\n}\nfunction getReshapedInputCoords(shape, enableShapeUniforms) {\n const coordsFromIndexSnippet = enableShapeUniforms ?\n shader_util.getLogicalCoordinatesFromFlatIndexByUniform(['r', 'c', 'd'], 'inputShape') :\n shader_util.getLogicalCoordinatesFromFlatIndex(['r', 'c', 'd'], shape);\n return `\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${coordsFromIndexSnippet}\n return ivec3(r, c, d);\n }\n `;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaGFwZV9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9yZXNoYXBlX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sS0FBSyxXQUFXLE1BQU0sd0JBQXdCLENBQUM7QUFFdEQsTUFBTSxPQUFPLG9CQUFvQjtJQVMvQixZQUFZLFdBQXFDLEVBQUUsVUFFbEQ7UUFWRCxrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFJcEIsbUJBQWMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFLL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckUsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxNQUFNLEdBQUcsY0FBYyxDQUFDO1lBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxJQUFJLGdCQUFnQixDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNULE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQzthQUM1QjtZQUVELFFBQVEsSUFBSTtVQUNSLE1BQU07VUFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7O21CQU03QyxDQUFDOztVQUVWLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtPQUNuQixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO1FBQ1osc0JBQXNCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUU1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDeEMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQzs7Ozs7Ozs7cUJBUXpELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs7VUFFcEUsUUFBUTs7OztLQUliLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxTQUFTLHNCQUFzQixDQUMzQixLQUErQixFQUFFLG1CQUE0QjtJQUMvRCxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQixDQUFDLENBQUM7UUFDaEQsV0FBVyxDQUFDLDJDQUEyQyxDQUNuRCxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNwQyxXQUFXLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNFLE9BQU87O1FBRUQsc0JBQXNCOzs7R0FHM0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtLCB1c2VTaGFwZVVuaWZvcm1zfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0ICogYXMgc2hhZGVyX3V0aWwgZnJvbSAnLi9zaGFkZXJfY29tcGlsZXJfdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBSZXNoYXBlUGFja2VkUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnXTtcbiAgcGFja2VkSW5wdXRzID0gdHJ1ZTtcbiAgcGFja2VkT3V0cHV0ID0gdHJ1ZTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuO1xuICBjdXN0b21Vbmlmb3JtcyA9IFt7bmFtZTogJ2lucHV0U2hhcGUnLCB0eXBlOiAnaXZlYzMnIGFzIGNvbnN0IH1dO1xuXG4gIGNvbnN0cnVjdG9yKG91dHB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGlucHV0U2hhcGU6IFtcbiAgICBudW1iZXIsIG51bWJlciwgbnVtYmVyXG4gIF0pIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gb3V0cHV0U2hhcGU7XG4gICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID0gdXNlU2hhcGVVbmlmb3Jtcyh0aGlzLm91dHB1dFNoYXBlLmxlbmd0aCk7XG5cbiAgICBsZXQgbWFpbkxvb3AgPSBgYDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgbGV0IHRoaXNSQyA9IGB0aGlzUkMgPSByYztgO1xuICAgICAgaWYgKGkgJSAyID09PSAxKSB7XG4gICAgICAgIHRoaXNSQyArPSBgdGhpc1JDLnogKz0gMTtgO1xuICAgICAgfVxuICAgICAgaWYgKGkgPiAxKSB7XG4gICAgICAgIHRoaXNSQyArPSBgdGhpc1JDLnkgKz0gMTtgO1xuICAgICAgfVxuXG4gICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICR7dGhpc1JDfVxuICAgICAgICAke2kgPiAwID8gYGlmKHRoaXNSQy55IDwgcm93cyAmJiB0aGlzUkMueiA8IGNvbHMpe2AgOiAnJ31cbiAgICAgICAgICBpbnQgZmxhdEluZGV4ID0gZ2V0RmxhdEluZGV4KHRoaXNSQyk7XG5cbiAgICAgICAgICBpdmVjMyBpbnB1dFJDID0gaW5wdXRDb29yZHNGcm9tUmVzaGFwZWRPdXRDb29yZHMoZmxhdEluZGV4KTtcbiAgICAgICAgICB2ZWMyIGlucHV0UkNJbm5lckRpbXMgPSB2ZWMyKGZsb2F0KGlucHV0UkMueSksZmxvYXQoaW5wdXRSQy56KSk7XG5cbiAgICAgICAgICByZXN1bHRbJHtpfV0gPVxuICAgICAgICAgICAgZ2V0Q2hhbm5lbChnZXRBKGlucHV0UkMueCwgaW5wdXRSQy55LCBpbnB1dFJDLnopLCBpbnB1dFJDSW5uZXJEaW1zKTtcbiAgICAgICAgJHtpID4gMCA/ICd9JyA6ICcnfVxuICAgICAgYDtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgJHtnZXRSZXNoYXBlZElucHV0Q29vcmRzKGlucHV0U2hhcGUsIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3Jtcyl9XG4gICAgICAke1xuICAgICAgICB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPyBzaGFkZXJfdXRpbC5nZXRGbGF0SW5kZXhGcm9tM0RPdXRwdXQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlcl91dGlsLmdldEZsYXRJbmRleEZyb20zRChvdXRwdXRTaGFwZSl9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzMgcmMgPSBnZXRPdXRwdXRDb29yZHMoKTtcblxuICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4pO1xuXG4gICAgICAgIGl2ZWMzIHRoaXNSQztcbiAgICAgICAgaW50IHJvd3MgPSAke3RoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA/ICdvdXRTaGFwZVsxXScgOiBvdXRwdXRTaGFwZVsxXX07XG4gICAgICAgIGludCBjb2xzID0gJHt0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPyAnb3V0U2hhcGVbMl0nIDogb3V0cHV0U2hhcGVbMl19O1xuXG4gICAgICAgICR7bWFpbkxvb3B9XG5cbiAgICAgICAgc2V0T3V0cHV0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZXNoYXBlZElucHV0Q29vcmRzKFxuICAgIHNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBjb29yZHNGcm9tSW5kZXhTbmlwcGV0ID0gZW5hYmxlU2hhcGVVbmlmb3JtcyA/XG4gICAgICBzaGFkZXJfdXRpbC5nZXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4QnlVbmlmb3JtKFxuICAgICAgICAgIFsncicsICdjJywgJ2QnXSwgJ2lucHV0U2hhcGUnKSA6XG4gICAgICBzaGFkZXJfdXRpbC5nZXRMb2dpY2FsQ29vcmRpbmF0ZXNGcm9tRmxhdEluZGV4KFsncicsICdjJywgJ2QnXSwgc2hhcGUpO1xuXG4gIHJldHVybiBgXG4gICAgaXZlYzMgaW5wdXRDb29yZHNGcm9tUmVzaGFwZWRPdXRDb29yZHMoaW50IGluZGV4KSB7XG4gICAgICAke2Nvb3Jkc0Zyb21JbmRleFNuaXBwZXR9XG4gICAgICByZXR1cm4gaXZlYzMociwgYywgZCk7XG4gICAgfVxuICBgO1xufVxuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nimport { getInternalFormatForFloat16MatrixTexture, getInternalFormatForFloat16PackedMatrixTexture, getInternalFormatForFloat32MatrixTexture, getInternalFormatForPackedMatrixTexture, getInternalFormatForUnsignedBytesMatrixTexture } from './gpgpu_util';\nimport { getPackedMatrixTextureShapeWidthHeight, getUnpackedMatrixTextureShapeWidthHeight, PhysicalTextureType, TextureUsage } from './tex_util';\nexport class TextureManager {\n constructor(gpgpu) {\n this.gpgpu = gpgpu;\n this.numUsedTextures = 0;\n this.numFreeTextures = 0;\n this._numBytesAllocated = 0;\n // Number of bytes that have been allocated and available for reuse.\n this._numBytesFree = 0;\n this.freeTextures = {};\n this.usedTextures = {};\n this.logEnabled = false;\n }\n acquireTexture(shapeRC, usage, isPacked) {\n const physicalTexType = getPhysicalFromLogicalTextureType(usage, isPacked);\n const shapeKey = getKeyFromTextureShape(shapeRC, physicalTexType, isPacked);\n if (!(shapeKey in this.freeTextures)) {\n this.freeTextures[shapeKey] = [];\n }\n if (!(shapeKey in this.usedTextures)) {\n this.usedTextures[shapeKey] = [];\n }\n const texBytes = computeBytes(shapeRC, physicalTexType, this.gpgpu.gl, this.gpgpu.textureConfig, isPacked);\n if (this.freeTextures[shapeKey].length > 0) {\n this.numFreeTextures--;\n this.numUsedTextures++;\n this._numBytesFree -= texBytes;\n this.log();\n const newTexture = this.freeTextures[shapeKey].pop();\n this.usedTextures[shapeKey].push(newTexture);\n return newTexture;\n }\n let newTexture;\n if (physicalTexType === PhysicalTextureType.PACKED_2X2_FLOAT32) {\n newTexture = this.gpgpu.createPackedMatrixTexture(shapeRC[0], shapeRC[1]);\n }\n else if (physicalTexType === PhysicalTextureType.PACKED_2X2_FLOAT16) {\n newTexture =\n this.gpgpu.createFloat16PackedMatrixTexture(shapeRC[0], shapeRC[1]);\n }\n else if (physicalTexType === PhysicalTextureType.UNPACKED_FLOAT32) {\n newTexture =\n this.gpgpu.createFloat32MatrixTexture(shapeRC[0], shapeRC[1]);\n }\n else if (physicalTexType === PhysicalTextureType.UNPACKED_FLOAT16) {\n newTexture =\n this.gpgpu.createFloat16MatrixTexture(shapeRC[0], shapeRC[1]);\n }\n else if (physicalTexType === PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE) {\n newTexture =\n this.gpgpu.createUnsignedBytesMatrixTexture(shapeRC[0], shapeRC[1]);\n }\n this.usedTextures[shapeKey].push(newTexture);\n this.numUsedTextures++;\n this._numBytesAllocated += texBytes;\n this.log();\n return newTexture;\n }\n releaseTexture(texture, shape, logicalTexType, isPacked) {\n if (this.freeTextures == null) {\n // Already disposed.\n return;\n }\n const physicalTexType = getPhysicalFromLogicalTextureType(logicalTexType, isPacked);\n const shapeKey = getKeyFromTextureShape(shape, physicalTexType, isPacked);\n if (!(shapeKey in this.freeTextures)) {\n this.freeTextures[shapeKey] = [];\n }\n const texBytes = computeBytes(shape, physicalTexType, this.gpgpu.gl, this.gpgpu.textureConfig, isPacked);\n const deleteTexThreshold = env()\n .getNumber('WEBGL_DELETE_TEXTURE_THRESHOLD');\n if (deleteTexThreshold !== -1 &&\n this._numBytesAllocated > deleteTexThreshold) {\n this.gpgpu.deleteMatrixTexture(texture.texture);\n this._numBytesAllocated -= texBytes;\n }\n else {\n this.freeTextures[shapeKey].push(texture);\n this.numFreeTextures++;\n this._numBytesFree += texBytes;\n }\n this.numUsedTextures--;\n const texList = this.usedTextures[shapeKey];\n const texIndex = texList && texList.indexOf(texture);\n if (texIndex == null || texIndex < 0) {\n throw new Error('Cannot release a texture that was never provided by this ' +\n 'texture manager');\n }\n texList[texIndex] = texList[texList.length - 1];\n texList.pop();\n this.log();\n }\n log() {\n if (!this.logEnabled) {\n return;\n }\n const total = this.numFreeTextures + this.numUsedTextures;\n console.log('Free/Used', `${this.numFreeTextures} / ${this.numUsedTextures}`, `(${total})`);\n const freeRatio = this._numBytesFree / this._numBytesAllocated;\n console.log(`Bytes allocated: ${this._numBytesAllocated}`);\n console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100 * freeRatio)}%)`);\n }\n get numBytesAllocated() {\n return this._numBytesAllocated;\n }\n get numBytesFree() {\n return this._numBytesFree;\n }\n getNumUsedTextures() {\n return this.numUsedTextures;\n }\n getNumFreeTextures() {\n return this.numFreeTextures;\n }\n dispose() {\n if (this.freeTextures == null) {\n // Already disposed.\n return;\n }\n for (const texShape in this.freeTextures) {\n this.freeTextures[texShape].forEach(tex => {\n this.gpgpu.deleteMatrixTexture(tex.texture);\n });\n }\n for (const texShape in this.usedTextures) {\n this.usedTextures[texShape].forEach(tex => {\n this.gpgpu.deleteMatrixTexture(tex.texture);\n });\n }\n // TODO: Assign non-null value (empty object) to textures after disposed.\n this.freeTextures = null;\n this.usedTextures = null;\n this.numUsedTextures = 0;\n this.numFreeTextures = 0;\n this._numBytesAllocated = 0;\n this._numBytesFree = 0;\n }\n}\nfunction numBytesForInternalFormat(gl, internalFormat) {\n // tslint:disable-next-line:no-any\n const glany = gl;\n if (internalFormat === glany.R32F) {\n return 4;\n }\n else if (internalFormat === glany.R16F) {\n return 2;\n }\n else if (internalFormat === glany.RGBA32F) {\n return 16;\n }\n else if (internalFormat === gl.RGBA) {\n return 16;\n }\n else if (internalFormat === glany.RGBA16F) {\n return 8;\n }\n else if (internalFormat === glany.RGBA8) {\n return 4;\n }\n throw new Error(`Unknown internal format ${internalFormat}`);\n}\nexport function computeBytes(shape, physicalTexType, gl, textureConfig, isPacked) {\n // It is not possible to infer packed status from the texture type because\n // depending on the textureConfig, different texture types may resolve to the\n // same internal format (e.g. in WebGL1, the internal format for\n // UNPACKED_FLOAT16 textures is gl.RGBA). Therefore we pass in `isPacked`\n // explicitly.\n const internalFormat = internalFormatForPhysicalTexType(physicalTexType, textureConfig);\n let numElements;\n if (isPacked) {\n const [packedWidth, packedHeight] = getPackedMatrixTextureShapeWidthHeight(shape[0], shape[1]);\n numElements = packedWidth * packedHeight;\n }\n else {\n const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(shape[0], shape[1]);\n numElements = width * height;\n }\n const bytesPerElement = numBytesForInternalFormat(gl, internalFormat);\n return numElements * bytesPerElement;\n}\nfunction internalFormatForPhysicalTexType(physicalTexType, textureConfig) {\n switch (physicalTexType) {\n case PhysicalTextureType.PACKED_2X2_FLOAT32:\n return getInternalFormatForPackedMatrixTexture(textureConfig);\n case PhysicalTextureType.PACKED_2X2_FLOAT16:\n return getInternalFormatForFloat16PackedMatrixTexture(textureConfig);\n case PhysicalTextureType.UNPACKED_FLOAT32:\n return getInternalFormatForFloat32MatrixTexture(textureConfig);\n case PhysicalTextureType.UNPACKED_FLOAT16:\n return getInternalFormatForFloat16MatrixTexture(textureConfig);\n case PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE:\n return getInternalFormatForUnsignedBytesMatrixTexture(textureConfig);\n default:\n throw new Error(`Unknown physical texture type ${physicalTexType}`);\n }\n}\nfunction getPhysicalTextureForRendering(isPacked) {\n if (env().getBool('WEBGL_RENDER_FLOAT32_ENABLED')) {\n if (isPacked) {\n return PhysicalTextureType.PACKED_2X2_FLOAT32;\n }\n return PhysicalTextureType.UNPACKED_FLOAT32;\n }\n if (isPacked) {\n return PhysicalTextureType.PACKED_2X2_FLOAT16;\n }\n return PhysicalTextureType.UNPACKED_FLOAT16;\n}\nfunction getPhysicalFromLogicalTextureType(logicalTexType, isPacked) {\n if (logicalTexType === TextureUsage.UPLOAD) {\n return PhysicalTextureType.PACKED_2X2_FLOAT32;\n }\n else if (logicalTexType === TextureUsage.RENDER || logicalTexType == null) {\n return getPhysicalTextureForRendering(isPacked);\n }\n else if (logicalTexType === TextureUsage.DOWNLOAD ||\n logicalTexType === TextureUsage.PIXELS) {\n return PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE;\n }\n throw new Error(`Unknown logical texture type ${logicalTexType}`);\n}\nfunction getKeyFromTextureShape(shapeRowsCol, physicalTexType, isPacked) {\n return `${shapeRowsCol[0]}_${shapeRowsCol[1]}_${physicalTexType}_${isPacked}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dHVyZV9tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy90ZXh0dXJlX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzFDLE9BQU8sRUFBQyx3Q0FBd0MsRUFBRSw4Q0FBOEMsRUFBRSx3Q0FBd0MsRUFBRSx1Q0FBdUMsRUFBRSw4Q0FBOEMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN6UCxPQUFPLEVBQUMsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUsbUJBQW1CLEVBQTBCLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUV2SyxNQUFNLE9BQU8sY0FBYztJQVV6QixZQUE2QixLQUFtQjtRQUFuQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBVHhDLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUMvQixvRUFBb0U7UUFDNUQsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsaUJBQVksR0FBOEIsRUFBRSxDQUFDO1FBQzdDLGlCQUFZLEdBQThCLEVBQUUsQ0FBQztRQUM3QyxlQUFVLEdBQUcsS0FBSyxDQUFDO0lBRXdCLENBQUM7SUFFcEQsY0FBYyxDQUNWLE9BQXlCLEVBQUUsS0FBbUIsRUFDOUMsUUFBaUI7UUFDbkIsTUFBTSxlQUFlLEdBQUcsaUNBQWlDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTNFLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNwQyxJ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QUM5QyxDQUFDO0FBRUQsU0FBUyxpQ0FBaUMsQ0FDdEMsY0FBNEIsRUFBRSxRQUFpQjtJQUNqRCxJQUFJLGNBQWMsS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQzFDLE9BQU8sbUJBQW1CLENBQUMsa0JBQWtCLENBQUM7S0FDL0M7U0FBTSxJQUFJLGNBQWMsS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUU7UUFDM0UsT0FBTyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNqRDtTQUFNLElBQ0gsY0FBYyxLQUFLLFlBQVksQ0FBQyxRQUFRO1FBQ3hDLGNBQWMsS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQzFDLE9BQU8sbUJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUMzQixZQUE4QixFQUFFLGVBQW9DLEVBQ3BFLFFBQWlCO0lBQ25CLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQWUsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtHUEdQVUNvbnRleHR9IGZyb20gJy4vZ3BncHVfY29udGV4dCc7XG5pbXBvcnQge2dldEludGVybmFsRm9ybWF0Rm9yRmxvYXQxNk1hdHJpeFRleHR1cmUsIGdldEludGVybmFsRm9ybWF0Rm9yRmxvYXQxNlBhY2tlZE1hdHJpeFRleHR1cmUsIGdldEludGVybmFsRm9ybWF0Rm9yRmxvYXQzMk1hdHJpeFRleHR1cmUsIGdldEludGVybmFsRm9ybWF0Rm9yUGFja2VkTWF0cml4VGV4dHVyZSwgZ2V0SW50ZXJuYWxGb3JtYXRGb3JVbnNpZ25lZEJ5dGVzTWF0cml4VGV4dHVyZX0gZnJvbSAnLi9ncGdwdV91dGlsJztcbmltcG9ydCB7Z2V0UGFja2VkTWF0cml4VGV4dHVyZVNoYXBlV2lkdGhIZWlnaHQsIGdldFVucGFja2VkTWF0cml4VGV4dHVyZVNoYXBlV2lkdGhIZWlnaHQsIFBoeXNpY2FsVGV4dHVyZVR5cGUsIFRleHR1cmUsIFRleHR1cmVDb25maWcsIFRleHR1cmVVc2FnZX0gZnJvbSAnLi90ZXhfdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBUZXh0dXJlTWFuYWdlciB7XG4gIHByaXZhdGUgbnVtVXNlZFRleHR1cmVzID0gMDtcbiAgcHJpdmF0ZSBudW1GcmVlVGV4dHVyZXMgPSAwO1xuICBwcml2YXRlIF9udW1CeXRlc0FsbG9jYXRlZCA9IDA7XG4gIC8vIE51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgcmV1c2UuXG4gIHByaXZhdGUgX251bUJ5dGVzRnJlZSA9IDA7XG4gIHByaXZhdGUgZnJlZVRleHR1cmVzOiBSZWNvcmQ8c3RyaW5nLCBUZXh0dXJlW10+ID0ge307XG4gIHByaXZhdGUgdXNlZFRleHR1cmVzOiBSZWNvcmQ8c3RyaW5nLCBUZXh0dXJlW10+ID0ge307XG4gIHByaXZhdGUgbG9nRW5hYmxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZ3BncHU6IEdQR1BVQ29udGV4dCkge31cblxuICBhY3F1aXJlVGV4dHVyZShcbiAgICAgIHNoYXBlUkM6IFtudW1iZXIsIG51bWJlcl0sIHVzYWdlOiBUZXh0dXJlVXNhZ2UsXG4gICAgICBpc1BhY2tlZDogYm9vbGVhbik6IFRleHR1cmUge1xuICAgIGNvbnN0IHBoeXNpY2FsVGV4VHlwZSA9IGdldFBoeXNpY2FsRnJvbUxvZ2ljYWxUZXh0dXJlVHlwZSh1c2FnZSwgaXNQYWNrZWQpO1xuXG4gICAgY29uc3Qgc2hhcGVLZXkgPSBnZXRLZXlGcm9tVGV4dHVyZVNoYXBlKHNoYXBlUkMsIHBoeXNpY2FsVGV4VHlwZSwgaXNQYWNrZWQpO1xuICAgIGlmICghKHNoYXBlS2V5IGluIHRoaXMuZnJlZVRleHR1cmVzKSkge1xuICAgICAgdGhpcy5mcmVlVGV4dHVyZXNbc2hhcGVLZXldID0gW107XG4gICAgfVxuICAgIGlmICghKHNoYXBlS2V5IGluIHRoaXMudXNlZFRleHR1cmVzKSkge1xuICAgICAgdGhpcy51c2VkVGV4dHVyZXNbc2hhcGVLZXldID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgdGV4Qnl0ZXMgPSBjb21wdXRlQnl0ZXMoXG4gICAgICAgIHNoYXBlUkMsIHBoeXNpY2FsVGV4VHlwZSwgdGhpcy5ncGdwdS5nbCwgdGhpcy5ncGdwdS50ZXh0dXJlQ29uZmlnLFxuICAgICAgICBpc1BhY2tlZCk7XG5cbiAgICBpZiAodGhpcy5mcmVlVGV4dHVyZXNbc2hhcGVLZXldLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubnVtRnJlZVRleHR1cmVzLS07XG4gICAgICB0aGlzLm51bVVzZWRUZXh0dXJlcysrO1xuICAgICAgdGhpcy5fbnVtQnl0ZXNGcmVlIC09IHRleEJ5dGVzO1xuICAgICAgdGhpcy5sb2coKTtcbiAgICAgIGNvbnN0IG5ld1RleHR1cmUgPSB0aGlzLmZyZWVUZXh0dXJlc1tzaGFwZUtleV0ucG9wKCk7XG4gICAgICB0aGlzLnVzZWRUZXh0dXJlc1tzaGFwZUtleV0ucHVzaChuZXdUZXh0dXJlKTtcbiAgICAgIHJldHVybiBuZXdUZXh0dXJlO1xuICAgIH1cblxuICAgIGxldCBuZXdUZXh0dXJlOiBUZXh0dXJlO1xuICAgIGlmIChwaHlzaWNhbFRleFR5cGUgPT09IFBoeXNpY2FsVGV4dHVyZVR5cGUuUEFDS0VEXzJYMl9GTE9BVDMyKSB7XG4gICAgICBuZXdUZXh0dXJlID0gdGhpcy5ncGdwdS5jcmVhdGVQYWNrZWRNYXRyaXhUZXh0dXJlKHNoYXBlUkNbMF0sIHNoYXBlUkNbMV0pO1xuICAgIH0gZWxzZSBpZiAocGh5c2ljYWxUZXhUeXBlID09PSBQaHlzaWNhbFRleHR1cmVUeXBlLlBBQ0tFRF8yWDJfRkxPQVQxNikge1xuICAgICAgbmV3VGV4dHVyZSA9XG4gICAgICAgICAgdGhpcy5ncGdwdS5jcmVhdGVGbG9hdDE2UGFja2VkTWF0cml4VGV4dHVyZShzaGFwZVJDWzBdLCBzaGFwZVJDWzFdKTtcbiAgICB9IGVsc2UgaWYgKHBoeXNpY2FsVGV4VHlwZSA9PT0gUGh5c2ljYWxUZXh0dXJlVHlwZS5VTlBBQ0tFRF9GTE9BVDMyKSB7XG4gICAgICBuZXdUZXh0dXJlID1cbiAgICAgICAgICB0aGlzLmdwZ3B1LmNyZWF0ZUZsb2F0MzJNYXRyaXhUZXh0dXJlKHNoYXBlUkNbMF0sIHNoYXBlUkNbMV0pO1xuICAgIH0gZWxzZSBpZiAocGh5c2ljYWxUZXhUeXBlID09PSBQaHlzaWNhbFRleHR1cmVUeXBlLlVOUEFDS0VEX0ZMT0FUMTYpIHtcbiAgICAgIG5ld1RleHR1cmUgPVxuICAgICAgICAgIHRoaXMuZ3BncHUuY3JlYXRlRmxvYXQxNk1hdHJpeFRleHR1cmUoc2hhcGVSQ1swXSwgc2hhcGVSQ1sxXSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICAgcGh5c2ljYWxUZXhUeXBlID09PSBQaHlzaWNhbFRleHR1cmVUeXBlLlBBQ0tFRF80WDFfVU5TSUdORURfQllURSkge1xuICAgICAgbmV3VGV4dHVyZSA9XG4gICAgICAgICAgdGhpcy5ncGdwdS5jcmVhdGVVbnNpZ25lZEJ5dGVzTWF0cml4VGV4dHVyZShzaGFwZVJDWzBdLCBzaGFwZVJDWzFdKTtcbiAgICB9XG4gICAgdGhpcy51c2VkVGV4dHVyZXNbc2hhcGVLZXldLnB1c2gobmV3VGV4dHVyZSk7XG5cbiAgICB0aGlzLm51bVVzZWRUZXh0dXJlcysrO1xuICAgIHRoaXMuX251bUJ5dGVzQWxsb2NhdGVkICs9IHRleEJ5dGVzO1xuICAgIHRoaXMubG9nKCk7XG5cbiAgICByZXR1cm4gbmV3VGV4dHVyZTtcbiAgfVxuXG4gIHJlbGVhc2VUZXh0dXJlKFxuICAgICAgdGV4dHVyZTogVGV4dHVyZSwgc2hhcGU6IFtudW1iZXIsIG51bWJlcl0sIGxvZ2ljYWxUZXhUeXBlOiBUZXh0dXJlVXNhZ2UsXG4gICAgICBpc1BhY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmZyZWVUZXh0dXJlcyA9PSBudWxsKSB7XG4gICAgICAvLyBBbHJlYWR5IGRpc3Bvc2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwaHlzaWNhbFRleFR5cGUgPVxuICAgICAgICBnZXRQaHlzaWNhbEZyb21Mb2dpY2FsVGV4dHVyZVR5cGUobG9naWNhbFRleFR5cGUsIGlzUGFja2VkKTtcbiAgICBjb25zdCBzaGFwZUtleSA9IGdldEtleUZyb21UZXh0dXJlU2hhcGUoc2hhcGUsIHBoeXNpY2FsVGV4VHlwZSwgaXNQYWNrZWQpO1xuICAgIGlmICghKHNoYXBlS2V5IGluIHRoaXMuZnJlZVRleHR1cmVzKSkge1xuICAgICAgdGhpcy5mcmVlVGV4dHVyZXNbc2hhcGVLZXldID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgdGV4Qnl0ZXMgPSBjb21wdXRlQnl0ZXMoXG4gICAgICAgIHNoYXBlLCBwaHlzaWNhbFRleFR5cGUsIHRoaXMuZ3BncHUuZ2wsIHRoaXMuZ3BncHUudGV4dHVyZUNvbmZpZyxcbiAgICAgICAgaXNQYWNrZWQpO1xuICAgIGNvbnN0IGRlbGV0ZVRleFRocmVzaG9sZCA9IGVudigpXG4gICAgICAgIC5nZXROdW1iZXIoJ1dFQkdMX0RFTEVURV9URVhUVVJFX1RIUkVTSE9MRCcpO1xuICAgIGlmIChkZWxldGVUZXhUaHJlc2hvbGQgIT09IC0xICYmXG4gICAgICAgIHRoaXMuX251bUJ5dGVzQWxsb2NhdGVkID4gZGVsZXRlVGV4VGhyZXNob2xkKSB7XG4gICAgICB0aGlzLmdwZ3B1LmRlbGV0ZU1hdHJpeFRleHR1cmUodGV4dHVyZS50ZXh0dXJlKTtcbiAgICAgIHRoaXMuX251bUJ5dGVzQWxsb2NhdGVkIC09IHRleEJ5dGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZyZWVUZXh0dXJlc1tzaGFwZUtleV0ucHVzaCh0ZXh0dXJlKTtcbiAgICAgIHRoaXMubnVtRnJlZVRleHR1cmVzKys7XG4gICAgICB0aGlzLl9udW1CeXRlc0ZyZWUgKz0gdGV4Qnl0ZXM7XG4gICAgfVxuXG4gICAgdGhpcy5udW1Vc2VkVGV4dHVyZXMtLTtcblxuICAgIGNvbnN0IHRleExpc3QgPSB0aGlzLnVzZWRUZXh0dXJlc1tzaGFwZUtleV07XG4gICAgY29uc3QgdGV4SW5kZXggPSB0ZXhMaXN0ICYmIHRleExpc3QuaW5kZXhPZih0ZXh0dXJlKTtcbiAgICBpZiAodGV4SW5kZXggPT0gbnVsbCB8fCB0ZXhJbmRleCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ2Fubm90IHJlbGVhc2UgYSB0ZXh0dXJlIHRoYXQgd2FzIG5ldmVyIHByb3ZpZGVkIGJ5IHRoaXMgJyArXG4gICAgICAgICAgJ3RleHR1cmUgbWFuYWdlcicpO1xuICAgIH1cbiAgICB0ZXhMaXN0W3RleEluZGV4XSA9IHRleExpc3RbdGV4TGlzdC5sZW5ndGggLSAxXTtcbiAgICB0ZXhMaXN0LnBvcCgpO1xuICAgIHRoaXMubG9nKCk7XG4gIH1cblxuICBwcml2YXRlIGxvZygpIHtcbiAgICBpZiAoIXRoaXMubG9nRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b3RhbCA9IHRoaXMubnVtRnJlZVRleHR1cmVzICsgdGhpcy5udW1Vc2VkVGV4dHVyZXM7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAgICdGcmVlL1VzZWQnLCBgJHt0aGlzLm51bUZyZWVUZXh0dXJlc30gLyAke3RoaXMubnVtVXNlZFRleHR1cmVzfWAsXG4gICAgICAgIGAoJHt0b3RhbH0pYCk7XG4gICAgY29uc3QgZnJlZVJhdGlvID0gdGhpcy5fbnVtQnl0ZXNGcmVlIC8gdGhpcy5fbnVtQnl0ZXNBbGxvY2F0ZWQ7XG4gICAgY29uc29sZS5sb2coYEJ5dGVzIGFsbG9jYXRlZDogJHt0aGlzLl9udW1CeXRlc0FsbG9jYXRlZH1gKTtcbiAgICBjb25zb2xlLmxvZyhgQnl0ZXMgdW51c2VkOiAke3RoaXMuX251bUJ5dGVzRnJlZX0gKCR7XG4gICAgICAgIE1hdGgucm91bmQoMTAwICogZnJlZVJhdGlvKX0lKWApO1xuICB9XG5cbiAgZ2V0IG51bUJ5dGVzQWxsb2NhdGVkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX251bUJ5dGVzQWxsb2NhdGVkO1xuICB9XG5cbiAgZ2V0IG51bUJ5dGVzRnJlZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9udW1CeXRlc0ZyZWU7XG4gIH1cblxuICBnZXROdW1Vc2VkVGV4dHVyZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5udW1Vc2VkVGV4dHVyZXM7XG4gIH1cblxuICBnZXROdW1GcmVlVGV4dHVyZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5udW1GcmVlVGV4dHVyZXM7XG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLmZyZWVUZXh0dXJlcyA9PSBudWxsKSB7XG4gICAgICAvLyBBbHJlYWR5IGRpc3Bvc2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHRleFNoYXBlIGluIHRoaXMuZnJlZVRleHR1cmVzKSB7XG4gICAgICB0aGlzLmZyZWVUZXh0dXJlc1t0ZXhTaGFwZV0uZm9yRWFjaCh0ZXggPT4ge1xuICAgICAgICB0aGlzLmdwZ3B1LmRlbGV0ZU1hdHJpeFRleHR1cmUodGV4LnRleHR1cmUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGV4U2hhcGUgaW4gdGhpcy51c2VkVGV4dHVyZXMpIHtcbiAgICAgIHRoaXMudXNlZFRleHR1cmVzW3RleFNoYXBlXS5mb3JFYWNoKHRleCA9PiB7XG4gICAgICAgIHRoaXMuZ3BncHUuZGVsZXRlTWF0cml4VGV4dHVyZSh0ZXgudGV4dHVyZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gVE9ETzogQXNzaWduIG5vbi1udWxsIHZhbHVlIChlbXB0eSBvYmplY3QpIHRvIHRleHR1cmVzIGFmdGVyIGRpc3Bvc2VkLlxuICAgIHRoaXMuZnJlZVRleHR1cmVzID0gbnVsbDtcbiAgICB0aGlzLnVzZWRUZXh0dXJlcyA9IG51bGw7XG4gICAgdGhpcy5udW1Vc2VkVGV4dHVyZXMgPSAwO1xuICAgIHRoaXMubnVtRnJlZVRleHR1cmVzID0gMDtcbiAgICB0aGlzLl9udW1CeXRlc0FsbG9jYXRlZCA9IDA7XG4gICAgdGhpcy5fbnVtQnl0ZXNGcmVlID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBudW1CeXRlc0ZvckludGVybmFsRm9ybWF0KFxuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIGludGVybmFsRm9ybWF0OiBudW1iZXIpOiBudW1iZXIge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIGNvbnN0IGdsYW55ID0gZ2wgYXMgYW55O1xuICBpZiAoaW50ZXJuYWxGb3JtYXQgPT09IGdsYW55LlIzMkYpIHtcbiAgICByZXR1cm4gNDtcbiAgfSBlbHNlIGlmIChpbnRlcm5hbEZvcm1hdCA9PT0gZ2xhbnkuUjE2Rikge1xuICAgIHJldHVybiAyO1xuICB9IGVsc2UgaWYgKGludGVybmFsRm9ybWF0ID09PSBnbGFueS5SR0JBMzJGKSB7XG4gICAgcmV0dXJuIDE2O1xuICB9IGVsc2UgaWYgKGludGVybmFsRm9ybWF0ID09PSBnbC5SR0JBKSB7XG4gICAgcmV0dXJuIDE2O1xuICB9IGVsc2UgaWYgKGludGVybmFsRm9ybWF0ID09PSBnbGFueS5SR0JBMTZGKSB7XG4gICAgcmV0dXJuIDg7XG4gIH0gZWxzZSBpZiAoaW50ZXJuYWxGb3JtYXQgPT09IGdsYW55LlJHQkE4KSB7XG4gICAgcmV0dXJuIDQ7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGludGVybmFsIGZvcm1hdCAke2ludGVybmFsRm9ybWF0fWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUJ5dGVzKFxuICAgIHNoYXBlOiBbbnVtYmVyLCBudW1iZXJdLCBwaHlzaWNhbFRleFR5cGU6IFBoeXNpY2FsVGV4dHVyZVR5cGUsXG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgdGV4dHVyZUNvbmZpZzogVGV4dHVyZUNvbmZpZyxcbiAgICBpc1BhY2tlZDogYm9vbGVhbik6IG51bWJlciB7XG4gIC8vIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmZlciBwYWNrZWQgc3RhdHVzIGZyb20gdGhlIHRleHR1cmUgdHlwZSBiZWNhdXNlXG4gIC8vIGRlcGVuZGluZyBvbiB0aGUgdGV4dHVyZUNvbmZpZywgZGlmZmVyZW50ICB0ZXh0dXJlIHR5cGVzIG1heSByZXNvbHZlIHRvIHRoZVxuICAvLyBzYW1lIGludGVybmFsIGZvcm1hdCAoZS5nLiBpbiBXZWJHTDEsIHRoZSBpbnRlcm5hbCBmb3JtYXQgZm9yXG4gIC8vIFVOUEFDS0VEX0ZMT0FUMTYgdGV4dHVyZXMgaXMgZ2wuUkdCQSkuIFRoZXJlZm9yZSB3ZSBwYXNzIGluIGBpc1BhY2tlZGBcbiAgLy8gZXhwbGljaXRseS5cbiAgY29uc3QgaW50ZXJuYWxGb3JtYXQgPVxuICAgICAgaW50ZXJuYWxGb3JtYXRGb3JQaHlzaWNhbFRleFR5cGUocGh5c2ljYWxUZXhUeXBlLCB0ZXh0dXJlQ29uZmlnKTtcblxuICBsZXQgbnVtRWxlbWVudHM6IG51bWJlcjtcbiAgaWYgKGlzUGFja2VkKSB7XG4gICAgY29uc3QgW3BhY2tlZFdpZHRoLCBwYWNrZWRIZWlnaHRdID1cbiAgICAgICAgZ2V0UGFja2VkTWF0cml4VGV4dHVyZVNoYXBlV2lkdGhIZWlnaHQoc2hhcGVbMF0sIHNoYXBlWzFdKTtcbiAgICBudW1FbGVtZW50cyA9IHBhY2tlZFdpZHRoICogcGFja2VkSGVpZ2h0O1xuXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW3dpZHRoLCBoZWlnaHRdID1cbiAgICAgICAgZ2V0VW5wYWNrZWRNYXRyaXhUZXh0dXJlU2hhcGVXaWR0aEhlaWdodChzaGFwZVswXSwgc2hhcGVbMV0pO1xuICAgIG51bUVsZW1lbnRzID0gd2lkdGggKiBoZWlnaHQ7XG4gIH1cblxuICBjb25zdCBieXRlc1BlckVsZW1lbnQgPSBudW1CeXRlc0ZvckludGVybmFsRm9ybWF0KGdsLCBpbnRlcm5hbEZvcm1hdCk7XG4gIHJldHVybiBudW1FbGVtZW50cyAqIGJ5dGVzUGVyRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxGb3JtYXRGb3JQaHlzaWNhbFRleFR5cGUoXG4gICAgcGh5c2ljYWxUZXhUeXBlOiBQaHlzaWNhbFRleHR1cmVUeXBlLFxuICAgIHRleHR1cmVDb25maWc6IFRleHR1cmVDb25maWcpOiBudW1iZXIge1xuICBzd2l0Y2ggKHBoeXNpY2FsVGV4VHlwZSkge1xuICAgIGNhc2UgUGh5c2ljYWxUZXh0dXJlVHlwZS5QQUNLRURfMlgyX0ZMT0FUMzI6XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxGb3JtYXRGb3JQYWNrZWRNYXRyaXhUZXh0dXJlKHRleHR1cmVDb25maWcpO1xuICAgIGNhc2UgUGh5c2ljYWxUZXh0dXJlVHlwZS5QQUNLRURfMlgyX0ZMT0FUMTY6XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxGb3JtYXRGb3JGbG9hdDE2UGFja2VkTWF0cml4VGV4dHVyZSh0ZXh0dXJlQ29uZmlnKTtcbiAgICBjYXNlIFBoeXNpY2FsVGV4dHVyZVR5cGUuVU5QQUNLRURfRkxPQVQzMjpcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbEZvcm1hdEZvckZsb2F0MzJNYXRyaXhUZXh0dXJlKHRleHR1cmVDb25maWcpO1xuICAgIGNhc2UgUGh5c2ljYWxUZXh0dXJlVHlwZS5VTlBBQ0tFRF9GTE9BVDE2OlxuICAgICAgcmV0dXJuIGdldEludGVybmFsRm9ybWF0Rm9yRmxvYXQxNk1hdHJpeFRleHR1cmUodGV4dHVyZUNvbmZpZyk7XG4gICAgY2FzZSBQaHlzaWNhbFRleHR1cmVUeXBlLlBBQ0tFRF80WDFfVU5TSUdORURfQllURTpcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbEZvcm1hdEZvclVuc2lnbmVkQnl0ZXNNYXRyaXhUZXh0dXJlKHRleHR1cmVDb25maWcpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGh5c2ljYWwgdGV4dHVyZSB0eXBlICR7cGh5c2ljYWxUZXhUeXBlfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBoeXNpY2FsVGV4dHVyZUZvclJlbmRlcmluZyhpc1BhY2tlZDogYm9vbGVhbik6XG4gICAgUGh5c2ljYWxUZXh0dXJlVHlwZSB7XG4gIGlmIChlbnYoKS5nZXRCb29sKCdXRUJHTF9SRU5ERVJfRkxPQVQzMl9FTkFCTEVEJykpIHtcbiAgICBpZiAoaXNQYWNrZWQpIHtcbiAgICAgIHJldHVybiBQaHlzaWNhbFRleHR1cmVUeXBlLlBBQ0tFRF8yWDJfRkxPQVQzMjtcbiAgICB9XG4gICAgcmV0dXJuIFBoeXNpY2FsVGV4dHVyZVR5cGUuVU5QQUNLRURfRkxPQVQzMjtcbiAgfVxuXG4gIGlmIChpc1BhY2tlZCkge1xuICAgIHJldHVybiBQaHlzaWNhbFRleHR1cmVUeXBlLlBBQ0tFRF8yWDJfRkxPQVQxNjtcbiAgfVxuICByZXR1cm4gUGh5c2ljYWxUZXh0dXJlVHlwZS5VTlBBQ0tFRF9GTE9BVDE2O1xufVxuXG5mdW5jdGlvbiBnZXRQaHlzaWNhbEZyb21Mb2dpY2FsVGV4dHVyZVR5cGUoXG4gICAgbG9naWNhbFRleFR5cGU6IFRleHR1cmVVc2FnZSwgaXNQYWNrZWQ6IGJvb2xlYW4pOiBQaHlzaWNhbFRleHR1cmVUeXBlIHtcbiAgaWYgKGxvZ2ljYWxUZXhUeXBlID09PSBUZXh0dXJlVXNhZ2UuVVBMT0FEKSB7XG4gICAgcmV0dXJuIFBoeXNpY2FsVGV4dHVyZVR5cGUuUEFDS0VEXzJYMl9GTE9BVDMyO1xuICB9IGVsc2UgaWYgKGxvZ2ljYWxUZXhUeXBlID09PSBUZXh0dXJlVXNhZ2UuUkVOREVSIHx8IGxvZ2ljYWxUZXhUeXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0UGh5c2ljYWxUZXh0dXJlRm9yUmVuZGVyaW5nKGlzUGFja2VkKTtcbiAgfSBlbHNlIGlmIChcbiAgICAgIGxvZ2ljYWxUZXhUeXBlID09PSBUZXh0dXJlVXNhZ2UuRE9XTkxPQUQgfHxcbiAgICAgIGxvZ2ljYWxUZXhUeXBlID09PSBUZXh0dXJlVXNhZ2UuUElYRUxTKSB7XG4gICAgcmV0dXJuIFBoeXNpY2FsVGV4dHVyZVR5cGUuUEFDS0VEXzRYMV9VTlNJR05FRF9CWVRFO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2dpY2FsIHRleHR1cmUgdHlwZSAke2xvZ2ljYWxUZXhUeXBlfWApO1xufVxuXG5mdW5jdGlvbiBnZXRLZXlGcm9tVGV4dHVyZVNoYXBlKFxuICAgIHNoYXBlUm93c0NvbDogW251bWJlciwgbnVtYmVyXSwgcGh5c2ljYWxUZXhUeXBlOiBQaHlzaWNhbFRleHR1cmVUeXBlLFxuICAgIGlzUGFja2VkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3NoYXBlUm93c0NvbFswXX1fJHtzaGFwZVJvd3NDb2xbMV19XyR7cGh5c2ljYWxUZXhUeXBlfV8ke2lzUGFja2VkfWA7XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { useShapeUniforms } from './gpgpu_math';\nexport class UnaryOpProgram {\n constructor(aShape, opSnippet) {\n this.variableNames = ['A'];\n this.outputShape = aShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n 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 `;\n }\n}\nexport const CHECK_NAN_SNIPPET = `if (isnan(x)) return x;`;\nexport const LINEAR = `return x;`;\nexport const ABS = `return abs(x);`;\nexport function STEP(alpha = 0.0) {\n return CHECK_NAN_SNIPPET + `\n return x > 0.0 ? 1.0 : float(${alpha});\n `;\n}\nexport const ELU = `return (x >= 0.0) ? x : (exp(x) - 1.0);`;\nexport const RELU = CHECK_NAN_SNIPPET + `\n return (x < 0.0) ? 0.0 : x;\n`;\nexport const RELU6 = CHECK_NAN_SNIPPET + `\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`;\nexport const CLONE = 'return x;';\nexport const SIGMOID = `return 1.0 / (1.0 + exp(-1.0 * x));`;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hcnlvcF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3VuYXJ5b3BfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUU1RCxNQUFNLE9BQU8sY0FBYztJQU16QixZQUFZLE1BQWdCLEVBQUUsU0FBaUI7UUFML0Msa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBTXBCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUc7O1VBRVYsU0FBUzs7Ozs7Ozs7O0tBU2QsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDO0FBRXBDLE1BQU0sVUFBVSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUc7SUFDOUIsT0FBTyxpQkFBaUIsR0FBRzttQ0FDTSxLQUFLO0dBQ3JDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLHlDQUF5QyxDQUFDO0FBQzdELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxpQkFBaUIsR0FBRzs7Q0FFdkMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxpQkFBaUIsR0FBRzs7Q0FFeEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbSwgdXNlU2hhcGVVbmlmb3Jtc30gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIFVuYXJ5T3BQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnQSddO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoYVNoYXBlOiBudW1iZXJbXSwgb3BTbmlwcGV0OiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gYVNoYXBlO1xuICAgIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA9IHVzZVNoYXBlVW5pZm9ybXModGhpcy5vdXRwdXRTaGFwZS5sZW5ndGgpO1xuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICBmbG9hdCB1bmFyeU9wZXJhdGlvbihmbG9hdCB4KSB7XG4gICAgICAgICR7b3BTbmlwcGV0fVxuICAgICAgfVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGZsb2F0IHggPSBnZXRBQXRPdXRDb29yZHMoKTtcbiAgICAgICAgZmxvYXQgeSA9IHVuYXJ5T3BlcmF0aW9uKHgpO1xuXG4gICAgICAgIHNldE91dHB1dCh5KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBDSEVDS19OQU5fU05JUFBFVCA9IGBpZiAoaXNuYW4oeCkpIHJldHVybiB4O2A7XG5cbmV4cG9ydCBjb25zdCBMSU5FQVIgPSBgcmV0dXJuIHg7YDtcblxuZXhwb3J0IGNvbnN0IEFCUyA9IGByZXR1cm4gYWJzKHgpO2A7XG5cbmV4cG9ydCBmdW5jdGlvbiBTVEVQKGFscGhhID0gMC4wKSB7XG4gIHJldHVybiBDSEVDS19OQU5fU05JUFBFVCArIGBcbiAgICByZXR1cm4geCA+IDAuMCA/IDEuMCA6IGZsb2F0KCR7YWxwaGF9KTtcbiAgYDtcbn1cblxuZXhwb3J0IGNvbnN0IEVMVSA9IGByZXR1cm4gKHggPj0gMC4wKSA/IHggOiAoZXhwKHgpIC0gMS4wKTtgO1xuZXhwb3J0IGNvbnN0IFJFTFUgPSBDSEVDS19OQU5fU05JUFBFVCArIGBcbiAgcmV0dXJuICh4IDwgMC4wKSA/IDAuMCA6IHg7XG5gO1xuXG5leHBvcnQgY29uc3QgUkVMVTYgPSBDSEVDS19OQU5fU05JUFBFVCArIGBcbiAgcmV0dXJuICh4IDwgMC4wKSA/IDAuMCA6IG1pbig2LjAsIHgpO1xuYDtcblxuZXhwb3J0IGNvbnN0IENMT05FID0gJ3JldHVybiB4Oyc7XG5cbmV4cG9ydCBjb25zdCBTSUdNT0lEID0gYHJldHVybiAxLjAgLyAoMS4wICsgZXhwKC0xLjAgKiB4KSk7YDtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { useShapeUniforms } from './gpgpu_math';\nexport const LINEAR = `return x;`;\nexport const ELU = `\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`;\nexport const RELU = `\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`;\nexport const RELU6 = `\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`;\nexport const SIGMOID = `return 1.0 / (1.0 + exp(-1.0 * x));`;\nexport class UnaryOpPackedProgram {\n constructor(aShape, opSnippet) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = aShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hcnlvcF9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy91bmFyeW9wX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHOzs7Ozs7Ozs7Q0FTbEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRzs7Ozs7Ozs7OztDQVVuQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHOzs7Ozs7Ozs7O0NBVXBCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcscUNBQXFDLENBQUM7QUFFN0QsTUFBTSxPQUFPLG9CQUFvQjtJQVEvQixZQUFZLE1BQWdCLEVBQUUsU0FBaUI7UUFQL0Msa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSXRCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBR2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUc7O1VBRVYsU0FBUzs7Ozs7Ozs7O0tBU2QsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW0sIHVzZVNoYXBlVW5pZm9ybXN9IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjb25zdCBMSU5FQVIgPSBgcmV0dXJuIHg7YDtcblxuZXhwb3J0IGNvbnN0IEVMVSA9IGBcbiAgdmVjNCByZXN1bHQ7XG5cbiAgcmVzdWx0LnIgPSAoeC5yID49IDAuMCkgPyB4LnIgOiAoZXhwKHgucikgLSAxLjApO1xuICByZXN1bHQuZyA9ICh4LmcgPj0gMC4wKSA/IHguZyA6IChleHAoeC5nKSAtIDEuMCk7XG4gIHJlc3VsdC5iID0gKHguYiA+PSAwLjApID8geC5iIDogKGV4cCh4LmIpIC0gMS4wKTtcbiAgcmVzdWx0LmEgPSAoeC5hID49IDAuMCkgPyB4LmEgOiAoZXhwKHguYSkgLSAxLjApO1xuXG4gIHJldHVybiByZXN1bHQ7XG5gO1xuXG5leHBvcnQgY29uc3QgUkVMVSA9IGBcbiAgdmVjNCByZXN1bHQgPSB4ICogdmVjNChncmVhdGVyVGhhbkVxdWFsKHgsIHZlYzQoMC4wKSkpO1xuICBidmVjNCBpc05hTiA9IGlzbmFuKHgpO1xuXG4gIHJlc3VsdC5yID0gaXNOYU4uciA/IHguciA6IHJlc3VsdC5yO1xuICByZXN1bHQuZyA9IGlzTmFOLmcgPyB4LmcgOiByZXN1bHQuZztcbiAgcmVzdWx0LmIgPSBpc05hTi5iID8geC5iIDogcmVzdWx0LmI7XG4gIHJlc3VsdC5hID0gaXNOYU4uYSA/IHguYSA6IHJlc3VsdC5hO1xuXG4gIHJldHVybiByZXN1bHQ7XG5gO1xuXG5leHBvcnQgY29uc3QgUkVMVTYgPSBgXG4gIHZlYzQgcmVzdWx0ID0gbWluKHgsIHZlYzQoNi4pKSAqIHZlYzQoZ3JlYXRlclRoYW5FcXVhbCh4LCB2ZWM0KDAuMCkpKTtcbiAgYnZlYzQgaXNOYU4gPSBpc25hbih4KTtcblxuICByZXN1bHQuciA9IGlzTmFOLnIgPyB4LnIgOiByZXN1bHQucjtcbiAgcmVzdWx0LmcgPSBpc05hTi5nID8geC5nIDogcmVzdWx0Lmc7XG4gIHJlc3VsdC5iID0gaXNOYU4uYiA/IHguYiA6IHJlc3VsdC5iO1xuICByZXN1bHQuYSA9IGlzTmFOLmEgPyB4LmEgOiByZXN1bHQuYTtcblxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IFNJR01PSUQgPSBgcmV0dXJuIDEuMCAvICgxLjAgKyBleHAoLTEuMCAqIHgpKTtgO1xuXG5leHBvcnQgY2xhc3MgVW5hcnlPcFBhY2tlZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW47XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgcGFja2VkSW5wdXRzID0gdHJ1ZTtcbiAgcGFja2VkT3V0cHV0ID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihhU2hhcGU6IG51bWJlcltdLCBvcFNuaXBwZXQ6IHN0cmluZykge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBhU2hhcGU7XG4gICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID0gdXNlU2hhcGVVbmlmb3Jtcyh0aGlzLm91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZlYzQgdW5hcnlPcGVyYXRpb24odmVjNCB4KSB7XG4gICAgICAgICR7b3BTbmlwcGV0fVxuICAgICAgfVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIHZlYzQgeCA9IGdldEFBdE91dENvb3JkcygpO1xuICAgICAgICB2ZWM0IHkgPSB1bmFyeU9wZXJhdGlvbih4KTtcblxuICAgICAgICBzZXRPdXRwdXQoeSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { useShapeUniforms } from './gpgpu_math';\nimport { getChannels, getSourceCoords } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport class UnpackProgram {\n constructor(outputShape) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = false;\n this.outputShape = outputShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n const rank = outputShape.length;\n const channels = getChannels('rc', rank);\n const dtype = getCoordsDataType(rank);\n const sourceCoords = getSourceCoords(rank, channels);\n const innerDims = channels.slice(-2);\n const coords = rank <= 1 ? 'rc' : `vec2(${innerDims.join(',')})`;\n this.userCode = `\n void main() {\n ${dtype} rc = getOutputCoords();\n vec4 packedInput = getA(${sourceCoords});\n\n setOutput(getChannel(packedInput, ${coords}));\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5wYWNrX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvdW5wYWNrX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDNUQsT0FBTyxFQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxNQUFNLE9BQU8sYUFBYTtJQVF4QixZQUFZLFdBQXFCO1FBUGpDLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQU1uQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBRWhDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUVqRSxJQUFJLENBQUMsUUFBUSxHQUFHOztVQUVWLEtBQUs7a0NBQ21CLFlBQVk7OzRDQUVGLE1BQU07O0tBRTdDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtLCB1c2VTaGFwZVVuaWZvcm1zfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDaGFubmVscywgZ2V0U291cmNlQ29vcmRzfSBmcm9tICcuL3BhY2tpbmdfdXRpbCc7XG5pbXBvcnQge2dldENvb3Jkc0RhdGFUeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBjbGFzcyBVbnBhY2tQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnQSddO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSBmYWxzZTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBlbmFibGVTaGFwZVVuaWZvcm1zOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG91dHB1dFNoYXBlOiBudW1iZXJbXSkge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPSB1c2VTaGFwZVVuaWZvcm1zKHRoaXMub3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICBjb25zdCByYW5rID0gb3V0cHV0U2hhcGUubGVuZ3RoO1xuXG4gICAgY29uc3QgY2hhbm5lbHMgPSBnZXRDaGFubmVscygncmMnLCByYW5rKTtcbiAgICBjb25zdCBkdHlwZSA9IGdldENvb3Jkc0RhdGFUeXBlKHJhbmspO1xuICAgIGNvbnN0IHNvdXJjZUNvb3JkcyA9IGdldFNvdXJjZUNvb3JkcyhyYW5rLCBjaGFubmVscyk7XG4gICAgY29uc3QgaW5uZXJEaW1zID0gY2hhbm5lbHMuc2xpY2UoLTIpO1xuICAgIGNvbnN0IGNvb3JkcyA9IHJhbmsgPD0gMSA/ICdyYycgOiBgdmVjMigke2lubmVyRGltcy5qb2luKCcsJyl9KWA7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke2R0eXBlfSByYyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICB2ZWM0IHBhY2tlZElucHV0ID0gZ2V0QSgke3NvdXJjZUNvb3Jkc30pO1xuXG4gICAgICAgIHNldE91dHB1dChnZXRDaGFubmVsKHBhY2tlZElucHV0LCAke2Nvb3Jkc30pKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Import webgl flags.\nimport './flags_webgl';\nimport { backend_util, buffer, DataStorage, engine, env, kernel_impls, KernelBackend, nextFrame, scalar, tidy, util } from '@tensorflow/tfjs-core';\nimport { getWebGLContext } from './canvas_util';\nimport { DecodeMatrixProgram } from './decode_matrix_gpu';\nimport { DecodeMatrixPackedProgram } from './decode_matrix_packed_gpu';\nimport { EncodeFloatProgram } from './encode_float_gpu';\nimport { EncodeFloatPackedProgram } from './encode_float_packed_gpu';\nimport { EncodeMatrixProgram } from './encode_matrix_gpu';\nimport { EncodeMatrixPackedProgram } from './encode_matrix_packed_gpu';\nimport { GPGPUContext } from './gpgpu_context';\nimport * as gpgpu_math from './gpgpu_math';\nimport { getUniformLocations } from './gpgpu_math';\nimport { simpleAbsImplCPU } from './kernel_utils/shared';\nimport { PackProgram } from './pack_gpu';\nimport { ReshapePackedProgram } from './reshape_packed_gpu';\nimport * as tex_util from './tex_util';\nimport { TextureUsage } from './tex_util';\nimport { TextureManager } from './texture_manager';\nimport * as unary_op from './unaryop_gpu';\nimport { UnaryOpProgram } from './unaryop_gpu';\nimport { UnaryOpPackedProgram } from './unaryop_packed_gpu';\nimport { UnpackProgram } from './unpack_gpu';\nimport * as webgl_util from './webgl_util';\nconst whereImpl = kernel_impls.whereImpl;\nexport const EPSILON_FLOAT32 = 1e-7;\nexport const EPSILON_FLOAT16 = 1e-4;\nconst binaryCaches = {};\nexport function getBinaryCache(webGLVersion) {\n if (webGLVersion in binaryCaches) {\n return binaryCaches[webGLVersion];\n }\n binaryCaches[webGLVersion] = {};\n return binaryCaches[webGLVersion];\n}\n// Empirically determined constant used to determine size threshold for handing\n// off execution to the CPU.\nconst CPU_HANDOFF_SIZE_THRESHOLD = env().getNumber('CPU_HANDOFF_SIZE_THRESHOLD');\n// Empirically determined constant used to decide the number of MB on GPU\n// before we warn about high memory use. The MB are this constant * screen area\n// * dpi / 1024 / 1024.\nconst BEFORE_PAGING_CONSTANT = 600;\nfunction numMBBeforeWarning() {\n if (env().global.screen == null) {\n return 1024; // 1 GB.\n }\n return (env().global.screen.height * env().global.screen.width *\n window.devicePixelRatio) *\n BEFORE_PAGING_CONSTANT / 1024 / 1024;\n}\nclass MathBackendWebGL extends KernelBackend {\n nextDataId() {\n return MathBackendWebGL.nextDataId++;\n }\n constructor(gpuResource) {\n super();\n // Maps data ids that have a pending read operation, to list of subscribers.\n this.pendingRead = new WeakMap();\n // List of data ids that are scheduled for disposal, but are waiting on a\n // pending read operation.\n this.pendingDisposal = new WeakSet();\n // Used to count the number of 'shallow' sliced tensors that point to the\n // same data id.\n this.dataRefCount = new WeakMap();\n this.numBytesInGPU = 0;\n // Accumulated time spent (including blocking) in uploading data to webgl.\n this.uploadWaitMs = 0;\n // Accumulated time spent (including blocking in downloading data from webgl.\n this.downloadWaitMs = 0;\n // record the last manual GL Flush time.\n this.lastGlFlushTime = 0;\n this.warnedAboutMemory = false;\n this.pendingDeletes = 0;\n this.disposed = false;\n if (!env().getBool('HAS_WEBGL')) {\n throw new Error('WebGL is not supported on this device');\n }\n let newGPGPU;\n if (gpuResource != null) {\n if (gpuResource instanceof GPGPUContext) {\n newGPGPU = gpuResource;\n }\n else {\n const gl = getWebGLContext(env().getNumber('WEBGL_VERSION'), gpuResource);\n newGPGPU = new GPGPUContext(gl);\n }\n this.binaryCache = {};\n this.gpgpuCreatedLocally = false;\n }\n else {\n const gl = getWebGLContext(env().getNumber('WEBGL_VERSION'));\n newGPGPU = new GPGPUContext(gl);\n this.binaryCache = getBinaryCache(env().getNumber('WEBGL_VERSION'));\n this.gpgpuCreatedLocally = true;\n }\n this.gpgpu = newGPGPU;\n this.canvas = this.gpgpu.gl.canvas;\n this.textureManager = new TextureManager(this.gpgpu);\n this.numMBBeforeWarning = numMBBeforeWarning();\n this.texData = new DataStorage(this, engine());\n }\n numDataIds() {\n return this.texData.numDataIds() - this.pendingDeletes;\n }\n // Writes a new entry to the data store with a WebGL texture, and registers it\n // to the texture manager.\n writeTexture(texture, shape, dtype, texHeight, texWidth, channels) {\n // Temporarily create an tensor info to make the texture compatible with\n // the runWebGLProgram's input.\n const input = this.makeTensorInfo(shape, dtype);\n const inData = this.texData.get(input.dataId);\n // Even though the input texture could be unpacked or dense packed, it is\n // always considered as unpacked for EncodeMatrixProgram.\n inData.isPacked = false;\n // Bind texture to the input tensor.\n inData.texture = { texture, texShape: [texHeight, texWidth] };\n inData.texShape = [texHeight, texWidth];\n const shapeAs3D = webgl_util.getShapeAs3D(shape);\n const program = new EncodeMatrixProgram(shapeAs3D, false /* isByteArray */, channels);\n const output = this.runWebGLProgram(program, [input], dtype, [[texHeight, texWidth]]);\n output.shape = shape;\n // Unbind the texture from the input tensor to avoid the texture being\n // released.\n inData.texture = null;\n this.disposeIntermediateTensorInfo(input);\n return output.dataId;\n }\n write(values, shape, dtype) {\n if (env().getBool('WEBGL_CHECK_NUMERICAL_PROBLEMS') ||\n env().getBool('DEBUG')) {\n this.checkNumericalProblems(values);\n }\n if (dtype === 'complex64' && values != null) {\n throw new Error(`Cannot write to a complex64 dtype. ` +\n `Please use tf.complex(real, imag).`);\n }\n const dataId = { id: this.nextDataId() };\n this.texData.set(dataId, { shape, dtype, values, usage: TextureUsage.UPLOAD, refCount: 1 });\n return dataId;\n }\n /** Return refCount of a `TensorData`. */\n refCount(dataId) {\n if (this.texData.has(dataId)) {\n const tensorData = this.texData.get(dataId);\n return tensorData.refCount;\n }\n return 0;\n }\n /** Increase refCount of a `TextureData`. */\n incRef(dataId) {\n const texData = this.texData.get(dataId);\n texData.refCount++;\n }\n /** Decrease refCount of a `TextureData`. */\n decRef(dataId) {\n if (this.texData.has(dataId)) {\n const texData = this.texData.get(dataId);\n texData.refCount--;\n }\n }\n move(dataId, values, shape, dtype, refCount) {\n if (env().getBool('DEBUG')) {\n this.checkNumericalProblems(values);\n }\n if (dtype === 'complex64') {\n throw new Error(`Cannot write to a complex64 dtype. ` +\n `Please use tf.complex(real, imag).`);\n }\n this.texData.set(dataId, { shape, dtype, values, usage: TextureUsage.UPLOAD, refCount });\n }\n disposeIntermediateTensorInfo(tensorInfo) {\n this.disposeData(tensorInfo.dataId);\n }\n readSync(dataId) {\n const texData = this.texData.get(dataId);\n const { values, dtype, complexTensorInfos, slice, shape, isPacked } = texData;\n // The presence of `slice` indicates this tensor is a shallow slice of a\n // different tensor, and is using that original tensor's texture. Run\n // `clone` in order to copy that texture and read from it.\n if (slice != null) {\n let program;\n if (isPacked) {\n program = new UnaryOpPackedProgram(shape, unary_op.CLONE);\n }\n else {\n program = new UnaryOpProgram(shape, unary_op.CLONE);\n }\n const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype);\n const data = this.readSync(res.dataId);\n this.disposeIntermediateTensorInfo(res);\n return data;\n }\n if (values != null) {\n return this.convertAndCacheOnCPU(dataId);\n }\n if (dtype === 'string') {\n return values;\n }\n const shouldTimeProgram = this.activeTimers != null;\n let start;\n if (shouldTimeProgram) {\n start = util.now();\n }\n let result;\n if (dtype === 'complex64') {\n const realValues = this.readSync(complexTensorInfos.real.dataId);\n const imagValues = this.readSync(complexTensorInfos.imag.dataId);\n result = backend_util.mergeRealAndImagArrays(realValues, imagValues);\n }\n else {\n result = this.getValuesFromTexture(dataId);\n }\n if (shouldTimeProgram) {\n this.downloadWaitMs += util.now() - start;\n }\n return this.convertAndCacheOnCPU(dataId, result);\n }\n async read(dataId) {\n if (this.pendingRead.has(dataId)) {\n const subscribers = this.pendingRead.get(dataId);\n return new Promise(resolve => subscribers.push(resolve));\n }\n const texData = this.texData.get(dataId);\n const { values, shape, slice, dtype, complexTensorInfos, isPacked } = texData;\n // The presence of `slice` indicates this tensor is a shallow slice of a\n // different tensor, and is using that original tensor's texture. Run\n // `clone` in order to copy that texture and read from it.\n if (slice != null) {\n let program;\n if (isPacked) {\n program = new UnaryOpPackedProgram(shape, unary_op.CLONE);\n }\n else {\n program = new UnaryOpProgram(shape, unary_op.CLONE);\n }\n const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype);\n const data = this.read(res.dataId);\n this.disposeIntermediateTensorInfo(res);\n return data;\n }\n if (values != null) {\n return this.convertAndCacheOnCPU(dataId);\n }\n if (env().getBool('DEBUG')) {\n // getBool('WEBGL_DOWNLOAD_FLOAT_ENABLED') caused a blocking GPU call.\n // For performance reason, only check it for debugging. In production,\n // it doesn't handle this use case anyway, so behavior is not changed.\n if (!env().getBool('WEBGL_DOWNLOAD_FLOAT_ENABLED') &&\n env().getNumber('WEBGL_VERSION') === 2) {\n throw new Error(`tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and ` +\n `WEBGL_VERSION=2 not yet supported.`);\n }\n }\n let buffer = null;\n let tmpDownloadTarget;\n if (dtype !== 'complex64' && env().get('WEBGL_BUFFER_SUPPORTED')) {\n // Possibly copy the texture into a buffer before inserting a fence.\n tmpDownloadTarget = this.decode(dataId);\n const tmpData = this.texData.get(tmpDownloadTarget.dataId);\n buffer = this.gpgpu.createBufferFromTexture(tmpData.texture.texture, ...tex_util.getDenseTexShape(shape));\n }\n this.pendingRead.set(dataId, []);\n if (dtype !== 'complex64') {\n // Create a fence and wait for it to resolve.\n await this.gpgpu.createAndWaitForFence();\n }\n // Download the values from the GPU.\n let vals;\n if (dtype === 'complex64') {\n const ps = await Promise.all([\n this.read(complexTensorInfos.real.dataId),\n this.read(complexTensorInfos.imag.dataId)\n ]);\n const realValues = ps[0];\n const imagValues = ps[1];\n vals = backend_util.mergeRealAndImagArrays(realValues, imagValues);\n }\n else if (buffer == null) {\n vals = this.getValuesFromTexture(dataId);\n }\n else {\n const size = util.sizeFromShape(shape);\n vals = this.gpgpu.downloadFloat32MatrixFromBuffer(buffer, size);\n }\n if (tmpDownloadTarget != null) {\n this.disposeIntermediateTensorInfo(tmpDownloadTarget);\n }\n if (buffer != null) {\n const gl = this.gpgpu.gl;\n webgl_util.callAndCheck(gl, () => gl.deleteBuffer(buffer));\n }\n const dTypeVals = this.convertAndCacheOnCPU(dataId, vals);\n const subscribers = this.pendingRead.get(dataId);\n this.pendingRead.delete(dataId);\n // Notify all pending reads.\n subscribers.forEach(resolve => resolve(dTypeVals));\n if (this.pendingDisposal.has(dataId)) {\n this.pendingDisposal.delete(dataId);\n if (this.disposeData(dataId)) {\n engine().removeDataId(dataId, this);\n }\n this.pendingDeletes--;\n }\n return dTypeVals;\n }\n /**\n * Read tensor to a new texture that is densely packed for ease of use.\n * @param dataId The source tensor.\n * @param options\n * customTexShape: Optional. If set, will use the user defined texture\n * shape to create the texture.\n */\n readToGPU(dataId, options = {}) {\n const texData = this.texData.get(dataId);\n const { values, shape, slice, dtype, isPacked, texture } = texData;\n if (dtype === 'complex64') {\n throw new Error('Does not support reading texture for complex64 dtype.');\n }\n // The presence of `slice` indicates this tensor is a shallow slice of a\n // different tensor, and is using that original tensor's texture. Run\n // `clone` in order to copy that texture and read from it.\n if (slice != null) {\n let program;\n if (isPacked) {\n program = new UnaryOpPackedProgram(shape, unary_op.CLONE);\n }\n else {\n program = new UnaryOpProgram(shape, unary_op.CLONE);\n }\n const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype);\n const gpuResouorce = this.readToGPU(res, options);\n this.disposeIntermediateTensorInfo(res);\n return gpuResouorce;\n }\n if (texture == null) {\n if (values != null) {\n throw new Error('Data is not on GPU but on CPU.');\n }\n else {\n throw new Error('There is no data on GPU or CPU.');\n }\n }\n // Decode the texture so that it is stored densely (using four channels).\n const tmpTarget = this.decode(dataId, options.customTexShape);\n // Make engine track this tensor, so that we can dispose it later.\n const tensorRef = engine().makeTensorFromTensorInfo(tmpTarget);\n const tmpData = this.texData.get(tmpTarget.dataId);\n return Object.assign({ tensorRef }, tmpData.texture);\n }\n bufferSync(t) {\n const data = this.readSync(t.dataId);\n if (t.dtype === 'string') {\n try {\n // Decode the bytes into string.\n const strings = data.map(d => util.decodeString(d));\n return buffer(t.shape, t.dtype, strings);\n }\n catch (_a) {\n throw new Error('Failed to decode encoded string bytes into utf-8');\n }\n }\n return buffer(t.shape, t.dtype, data);\n }\n checkNumericalProblems(values) {\n if (values == null) {\n return;\n }\n for (let i = 0; i < values.length; i++) {\n const num = values[i];\n if (!webgl_util.canBeRepresented(num)) {\n if (env().getBool('WEBGL_RENDER_FLOAT32_CAPABLE')) {\n throw Error(`The value ${num} cannot be represented with your ` +\n `current settings. Consider enabling float32 rendering: ` +\n `'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`);\n }\n throw Error(`The value ${num} cannot be represented on this device.`);\n }\n }\n }\n getValuesFromTexture(dataId) {\n const { shape, dtype, isPacked } = this.texData.get(dataId);\n const size = util.sizeFromShape(shape);\n if (env().getBool('WEBGL_DOWNLOAD_FLOAT_ENABLED')) {\n const tmpTarget = this.decode(dataId);\n const tmpData = this.texData.get(tmpTarget.dataId);\n const vals = this.gpgpu\n .downloadMatrixFromPackedTexture(tmpData.texture.texture, ...tex_util.getDenseTexShape(shape))\n .subarray(0, size);\n this.disposeIntermediateTensorInfo(tmpTarget);\n return vals;\n }\n const shouldUsePackedProgram = env().getBool('WEBGL_PACK') && isPacked === true;\n const outputShape = shouldUsePackedProgram ? webgl_util.getShapeAs3D(shape) : shape;\n const program = shouldUsePackedProgram ?\n new EncodeFloatPackedProgram(outputShape) :\n new EncodeFloatProgram(outputShape);\n const output = this.runWebGLProgram(program, [{ shape: outputShape, dtype, dataId }], 'float32');\n const tmpData = this.texData.get(output.dataId);\n const vals = this.gpgpu\n .downloadByteEncodedFloatMatrixFromOutputTexture(tmpData.texture.texture, tmpData.texShape[0], tmpData.texShape[1])\n .subarray(0, size);\n this.disposeIntermediateTensorInfo(output);\n return vals;\n }\n timerAvailable() {\n return env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') > 0;\n }\n time(f) {\n const oldActiveTimers = this.activeTimers;\n const newActiveTimers = [];\n let outerMostTime = false;\n if (this.programTimersStack == null) {\n this.programTimersStack = newActiveTimers;\n outerMostTime = true;\n }\n else {\n this.activeTimers.push(newActiveTimers);\n }\n this.activeTimers = newActiveTimers;\n f();\n // needing to split these up because util.flatten only accepts certain types\n const flattenedActiveTimerQueries = util.flatten(this.activeTimers.map((d) => d.query))\n .filter(d => d != null);\n const flattenedActiveTimerNames = util.flatten(this.activeTimers.map((d) => d.name))\n .filter(d => d != null);\n this.activeTimers = oldActiveTimers;\n if (outerMostTime) {\n this.programTimersStack = null;\n }\n const res = {\n uploadWaitMs: this.uploadWaitMs,\n downloadWaitMs: this.downloadWaitMs,\n kernelMs: null,\n wallMs: null // will be filled by the engine\n };\n return (async () => {\n if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') >\n 0) {\n const kernelMs = await Promise.all(flattenedActiveTimerQueries);\n res['kernelMs'] = util.sum(kernelMs);\n res['getExtraProfileInfo'] = () => kernelMs\n .map((d, i) => ({ name: flattenedActiveTimerNames[i], ms: d }))\n .map(d => `${d.name}: ${d.ms}`)\n .join(', ');\n }\n else {\n res['kernelMs'] = {\n error: 'WebGL query timers are not supported in this environment.'\n };\n }\n this.uploadWaitMs = 0;\n this.downloadWaitMs = 0;\n return res;\n })();\n }\n memory() {\n return {\n unreliable: false,\n numBytesInGPU: this.numBytesInGPU,\n numBytesInGPUAllocated: this.textureManager.numBytesAllocated,\n numBytesInGPUFree: this.textureManager.numBytesFree\n };\n }\n startTimer() {\n if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') > 0) {\n return this.gpgpu.beginQuery();\n }\n return { startMs: util.now(), endMs: null };\n }\n endTimer(query) {\n if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') > 0) {\n this.gpgpu.endQuery();\n return query;\n }\n query.endMs = util.now();\n return query;\n }\n async getQueryTime(query) {\n if (env().getNumber('WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE') > 0) {\n return this.gpgpu.waitForQueryAndGetTime(query);\n }\n const timerQuery = query;\n return timerQuery.endMs - timerQuery.startMs;\n }\n /**\n * Decrease the RefCount on the dataId and dispose the memory if the dataId\n * has 0 refCount. If there are pending read on the data, the disposal would\n * added to the pending delete queue. Return true if the dataId is removed\n * from backend or the backend does not contain the dataId, false if the\n * dataId is not removed. Memory may or may not be released even when dataId\n * is removed, which also depends on dataRefCount, see `releaseGPU`.\n * @param dataId\n * @oaram force Optional, remove the data regardless of refCount\n */\n disposeData(dataId, force = false) {\n if (this.pendingDisposal.has(dataId)) {\n return false;\n }\n // No-op if already disposed.\n if (!this.texData.has(dataId)) {\n return true;\n }\n // if force flag is set, change refCount to 0, this would ensure disposal\n // when added to the pendingDisposal queue. Memory may or may not be\n // released, which also depends on dataRefCount, see `releaseGPU`.\n if (force) {\n this.texData.get(dataId).refCount = 0;\n }\n else {\n this.texData.get(dataId).refCount--;\n }\n if (!force && this.texData.get(dataId).refCount > 0) {\n return false;\n }\n if (this.pendingRead.has(dataId)) {\n this.pendingDisposal.add(dataId);\n this.pendingDeletes++;\n return false;\n }\n this.releaseGPUData(dataId);\n const { complexTensorInfos } = this.texData.get(dataId);\n if (complexTensorInfos != null) {\n this.disposeData(complexTensorInfos.real.dataId, force);\n this.disposeData(complexTensorInfos.imag.dataId, force);\n }\n this.texData.delete(dataId);\n return true;\n }\n releaseGPUData(dataId) {\n const { texture, dtype, texShape, usage, isPacked, slice } = this.texData.get(dataId);\n const key = slice && slice.origDataId || dataId;\n const refCount = this.dataRefCount.get(key);\n if (refCount > 1) {\n this.dataRefCount.set(key, refCount - 1);\n }\n else {\n this.dataRefCount.delete(key);\n if (texture != null) {\n this.numBytesInGPU -= this.computeBytes(texShape, dtype);\n this.textureManager.releaseTexture(texture, texShape, usage, isPacked);\n }\n }\n const texData = this.texData.get(dataId);\n texData.texture = null;\n texData.texShape = null;\n texData.isPacked = false;\n texData.slice = null;\n }\n getTexture(dataId) {\n this.uploadToGPU(dataId);\n return this.texData.get(dataId).texture.texture;\n }\n /**\n * Returns internal information for the specific data bucket. Used in unit\n * tests.\n */\n getDataInfo(dataId) {\n return this.texData.get(dataId);\n }\n /*\n Tests whether all the inputs to an op are small and on the CPU. This heuristic\n determines when it would be faster to execute a kernel on the CPU. WebGL\n kernels opt into running this check and forwarding when appropriate.\n TODO(https://github.com/tensorflow/tfjs/issues/872): Develop a more\n sustainable strategy for optimizing backend execution of ops.\n */\n shouldExecuteOnCPU(inputs, sizeThreshold = CPU_HANDOFF_SIZE_THRESHOLD) {\n return env().getBool('WEBGL_CPU_FORWARD') &&\n inputs.every(input => this.texData.get(input.dataId).texture == null &&\n util.sizeFromShape(input.shape) < sizeThreshold);\n }\n getGPGPUContext() {\n return this.gpgpu;\n }\n where(condition) {\n backend_util.warn('tf.where() in webgl locks the UI thread. ' +\n 'Call tf.whereAsync() instead');\n const condVals = condition.dataSync();\n return whereImpl(condition.shape, condVals);\n }\n packedUnaryOp(x, op, dtype) {\n const program = new UnaryOpPackedProgram(x.shape, op);\n const outInfo = this.compileAndRun(program, [x], dtype);\n return engine().makeTensorFromTensorInfo(outInfo);\n }\n // TODO(msoulanille) remove this once the backend has been modularized\n // a copy is needed here to break a circular dependency.\n // Also remove the op from unary_op.\n abs(x) {\n // TODO: handle cases when x is complex.\n if (this.shouldExecuteOnCPU([x]) && x.dtype !== 'complex64') {\n const outValues = simpleAbsImplCPU(this.texData.get(x.dataId).values);\n return this.makeOutput(x.shape, x.dtype, outValues);\n }\n if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n return this.packedUnaryOp(x, unary_op.ABS, x.dtype);\n }\n const program = new UnaryOpProgram(x.shape, unary_op.ABS);\n const outInfo = this.compileAndRun(program, [x]);\n return engine().makeTensorFromTensorInfo(outInfo);\n }\n makeTensorInfo(shape, dtype, values) {\n let dataId;\n if (dtype === 'string' && values != null && values.length > 0 &&\n util.isString(values[0])) {\n const encodedValues = values.map(d => util.encodeString(d));\n dataId = this.write(encodedValues, shape, dtype);\n }\n else {\n dataId = this.write(values, shape, dtype);\n }\n this.texData.get(dataId).usage = null;\n return { dataId, shape, dtype };\n }\n makeOutput(shape, dtype, values) {\n return engine().makeTensorFromTensorInfo(this.makeTensorInfo(shape, dtype, values), this);\n }\n unpackTensor(input) {\n const program = new UnpackProgram(input.shape);\n return this.runWebGLProgram(program, [input], input.dtype);\n }\n packTensor(input) {\n const program = new PackProgram(input.shape);\n const preventEagerUnpackingOutput = true;\n return this.runWebGLProgram(program, [input], input.dtype, null /* customUniformValues */, preventEagerUnpackingOutput);\n }\n packedReshape(input, afterShape) {\n const input3DShape = [\n webgl_util.getBatchDim(input.shape),\n ...webgl_util.getRowsCols(input.shape)\n ];\n const input3D = {\n dtype: input.dtype,\n shape: input3DShape,\n dataId: input.dataId\n };\n const afterShapeAs3D = [\n webgl_util.getBatchDim(afterShape), ...webgl_util.getRowsCols(afterShape)\n ];\n const program = new ReshapePackedProgram(afterShapeAs3D, input3DShape);\n const preventEagerUnpackingOfOutput = true;\n const customValues = [input3DShape];\n const output = this.runWebGLProgram(program, [input3D], input.dtype, customValues, preventEagerUnpackingOfOutput);\n return { dataId: output.dataId, shape: afterShape, dtype: output.dtype };\n }\n decode(dataId, customTexShape) {\n const texData = this.texData.get(dataId);\n const { isPacked, shape, dtype } = texData;\n if (customTexShape != null) {\n const size = util.sizeFromShape(shape);\n const texSize = customTexShape[0] * customTexShape[1] * 4;\n util.assert(size <= texSize, () => 'customTexShape is too small. ' +\n 'Row * Column * 4 should be equal or larger than the ' +\n 'size of the tensor data.');\n }\n const shapeAs3D = webgl_util.getShapeAs3D(shape);\n let program;\n if (isPacked) {\n program = new DecodeMatrixPackedProgram(shapeAs3D);\n }\n else {\n program = new DecodeMatrixProgram(shapeAs3D);\n }\n const preventEagerUnpackingOfOutput = true;\n const customValues = [customTexShape != null ? customTexShape :\n tex_util.getDenseTexShape(shapeAs3D)];\n const out = this.runWebGLProgram(program, [{ shape: shapeAs3D, dtype, dataId }], dtype, customValues, preventEagerUnpackingOfOutput, customTexShape);\n return { dtype, shape, dataId: out.dataId };\n }\n runWebGLProgram(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput = false, customTexShape) {\n const output = this.makeTensorInfo(program.outputShape, outputDtype);\n const outData = this.texData.get(output.dataId);\n if (program.packedOutput) {\n outData.isPacked = true;\n }\n if (program.outPackingScheme === tex_util.PackingScheme.DENSE) {\n const texelShape = customTexShape != null ?\n customTexShape :\n tex_util.getDenseTexShape(program.outputShape);\n // For a densely packed output, we explicitly set texShape\n // so it doesn't get assigned later according to our typical packing\n // scheme wherein a single texel can only contain values from adjacent\n // rows/cols.\n outData.texShape = texelShape.map(d => d * 2);\n }\n if (program.outTexUsage != null) {\n outData.usage = program.outTexUsage;\n }\n if (util.sizeFromShape(output.shape) === 0) {\n // Short-circuit the computation since the result is empty (has 0 in its\n // shape).\n outData.values =\n util.getTypedArrayFromDType(output.dtype, 0);\n return output;\n }\n const dataToDispose = [];\n const inputsData = inputs.map(input => {\n if (input.dtype === 'complex64') {\n throw new Error(`GPGPUProgram does not support complex64 input. For complex64 ` +\n `dtypes, please separate the program into real and imaginary ` +\n `parts.`);\n }\n let texData = this.texData.get(input.dataId);\n if (texData.texture == null) {\n if (!program.packedInputs &&\n util.sizeFromShape(input.shape) <=\n env().getNumber('WEBGL_SIZE_UPLOAD_UNIFORM')) {\n // Upload small tensors that live on the CPU as uniforms, not as\n // textures. Do this only when the environment supports 32bit floats\n // due to problems when comparing 16bit floats with 32bit floats.\n // TODO(https://github.com/tensorflow/tfjs/issues/821): Make it\n // possible for packed shaders to sample from uniforms.\n return {\n shape: input.shape,\n texData: null,\n isUniform: true,\n uniformValues: texData.values\n };\n }\n // This ensures that if a packed program's inputs have not yet been\n // uploaded to the GPU, they get uploaded as packed right off the bat.\n if (program.packedInputs) {\n texData.isPacked = true;\n texData.shape = input.shape;\n }\n }\n this.uploadToGPU(input.dataId);\n if (!!texData.isPacked !== !!program.packedInputs) {\n input = texData.isPacked ? this.unpackTensor(input) :\n this.packTensor(input);\n dataToDispose.push(input);\n texData = this.texData.get(input.dataId);\n }\n else if (texData.isPacked &&\n !webgl_util.isReshapeFree(texData.shape, input.shape)) {\n // This is a special case where a texture exists for a tensor\n // but the shapes are incompatible (due to packing constraints) because\n // the tensor did not have a chance to go through the packed reshape\n // shader. This only happens when we reshape the *same* tensor to form\n // *distinct* inputs to an op, e.g. dotting a vector with itself. This\n // case will disappear once packed uploading is the default.\n const savedInput = input;\n const targetShape = input.shape;\n input.shape = texData.shape;\n input = this.packedReshape(input, targetShape);\n dataToDispose.push(input);\n texData = this.texData.get(input.dataId);\n savedInput.shape = targetShape;\n }\n return { shape: input.shape, texData, isUniform: false };\n });\n this.uploadToGPU(output.dataId);\n const outputData = { shape: output.shape, texData: outData, isUniform: false };\n const key = gpgpu_math.makeShaderKey(program, inputsData, outputData);\n const binary = this.getAndSaveBinary(key, () => {\n return gpgpu_math.compileProgram(this.gpgpu, program, inputsData, outputData);\n });\n const shouldTimeProgram = this.activeTimers != null;\n let query;\n if (shouldTimeProgram) {\n query = this.startTimer();\n }\n if (!env().get('ENGINE_COMPILE_ONLY')) {\n gpgpu_math.runProgram(this.gpgpu, binary, inputsData, outputData, customUniformValues);\n }\n dataToDispose.forEach(info => this.disposeIntermediateTensorInfo(info));\n if (shouldTimeProgram) {\n query = this.endTimer(query);\n this.activeTimers.push({ name: program.constructor.name, query: this.getQueryTime(query) });\n }\n const glFlushThreshold = env().getNumber('WEBGL_FLUSH_THRESHOLD');\n // Manually GL flush requested\n if (glFlushThreshold > 0) {\n const time = util.now();\n if ((time - this.lastGlFlushTime) > glFlushThreshold) {\n this.gpgpu.gl.flush();\n this.lastGlFlushTime = time;\n }\n }\n if (!env().getBool('WEBGL_LAZILY_UNPACK') && outData.isPacked &&\n preventEagerUnpackingOfOutput === false) {\n const unpacked = this.unpackTensor(output);\n this.disposeIntermediateTensorInfo(output);\n return unpacked;\n }\n return output;\n }\n compileAndRun(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput = false) {\n outputDtype = outputDtype || inputs[0].dtype;\n const outInfo = this.runWebGLProgram(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput);\n return outInfo;\n }\n getAndSaveBinary(key, getBinary) {\n if (!(key in this.binaryCache)) {\n this.binaryCache[key] = getBinary();\n }\n return this.binaryCache[key];\n }\n getTextureManager() {\n return this.textureManager;\n }\n dispose() {\n if (this.disposed) {\n return;\n }\n // Avoid disposing the compiled webgl programs during unit testing because\n // it slows down test execution.\n if (!env().getBool('IS_TEST')) {\n const allKeys = Object.keys(this.binaryCache);\n allKeys.forEach(key => {\n this.gpgpu.deleteProgram(this.binaryCache[key].webGLProgram);\n delete this.binaryCache[key];\n });\n }\n this.textureManager.dispose();\n if (this.canvas != null &&\n (typeof (HTMLCanvasElement) !== 'undefined' &&\n this.canvas instanceof HTMLCanvasElement)) {\n this.canvas.remove();\n }\n else {\n this.canvas = null;\n }\n if (this.gpgpuCreatedLocally) {\n this.gpgpu.program = null;\n this.gpgpu.dispose();\n }\n this.disposed = true;\n }\n floatPrecision() {\n if (this.floatPrecisionValue == null) {\n this.floatPrecisionValue = tidy(() => {\n if (!env().get('WEBGL_RENDER_FLOAT32_ENABLED')) {\n // Momentarily switching DEBUG flag to false so we don't throw an\n // error trying to upload a small value.\n const debugFlag = env().getBool('DEBUG');\n env().set('DEBUG', false);\n const underflowCheckValue = this.abs(scalar(1e-8)).dataSync()[0];\n env().set('DEBUG', debugFlag);\n if (underflowCheckValue > 0) {\n return 32;\n }\n }\n return 16;\n });\n }\n return this.floatPrecisionValue;\n }\n /** Returns the smallest representable number. */\n epsilon() {\n return this.floatPrecision() === 32 ? EPSILON_FLOAT32 : EPSILON_FLOAT16;\n }\n uploadToGPU(dataId) {\n const texData = this.texData.get(dataId);\n const { shape, dtype, values, texture, usage, isPacked } = texData;\n if (texture != null) {\n // Array is already on GPU. No-op.\n return;\n }\n const shouldTimeProgram = this.activeTimers != null;\n let start;\n if (shouldTimeProgram) {\n start = util.now();\n }\n let texShape = texData.texShape;\n if (texShape == null) {\n // This texShape may not be the final texture shape. For packed or dense\n // textures, the texShape will be changed when textures are created.\n texShape = webgl_util.getTextureShapeFromLogicalShape(shape, isPacked);\n texData.texShape = texShape;\n }\n if (values != null) {\n const shapeAs3D = webgl_util.getShapeAs3D(shape);\n let program;\n let width = texShape[1], height = texShape[0];\n const isByteArray = values instanceof Uint8Array || values instanceof Uint8ClampedArray;\n // texture for float array is PhysicalTextureType.PACKED_2X2_FLOAT32, we\n // need to make sure the upload uses the same packed size\n if (isPacked || !isByteArray) {\n [width, height] = tex_util.getPackedMatrixTextureShapeWidthHeight(texShape[0], texShape[1]);\n }\n if (isPacked) {\n program = new EncodeMatrixPackedProgram(shapeAs3D, isByteArray);\n }\n else {\n program = new EncodeMatrixProgram(shapeAs3D, isByteArray);\n }\n // TexShape for float array needs to be the original shape, which byte\n // array needs to be packed size. This allow the data upload shape to be\n // matched with texture creation logic.\n const tempDenseInputTexShape = isByteArray ? [height, width] : texShape;\n const tempDenseInputHandle = this.makeTensorInfo(tempDenseInputTexShape, dtype);\n const tempDenseInputTexData = this.texData.get(tempDenseInputHandle.dataId);\n if (isByteArray) {\n tempDenseInputTexData.usage = TextureUsage.PIXELS;\n }\n else {\n tempDenseInputTexData.usage = TextureUsage.UPLOAD;\n }\n tempDenseInputTexData.texShape = tempDenseInputTexShape;\n this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(tempDenseInputHandle.dataId), width, height, values);\n const customValues = [[height, width]];\n // We want the output to remain packed regardless of the value of\n // WEBGL_PACK.\n const preventEagerUnpacking = true;\n const encodedOutputTarget = this.runWebGLProgram(program, [tempDenseInputHandle], dtype, customValues, preventEagerUnpacking);\n // Have the original texture assume the identity of the encoded output.\n const outputTexData = this.texData.get(encodedOutputTarget.dataId);\n texData.texShape = outputTexData.texShape;\n texData.isPacked = outputTexData.isPacked;\n texData.usage = outputTexData.usage;\n if (!env().get('ENGINE_COMPILE_ONLY')) {\n texData.texture = outputTexData.texture;\n // Once uploaded, don't store the values on cpu.\n texData.values = null;\n this.texData.delete(encodedOutputTarget.dataId);\n }\n else {\n this.disposeData(encodedOutputTarget.dataId);\n }\n this.disposeIntermediateTensorInfo(tempDenseInputHandle);\n if (shouldTimeProgram) {\n this.uploadWaitMs += util.now() - start;\n }\n }\n else {\n const newTexture = this.acquireTexture(texShape, usage, dtype, isPacked);\n texData.texture = newTexture;\n }\n }\n convertAndCacheOnCPU(dataId, float32Values) {\n const texData = this.texData.get(dataId);\n const { dtype } = texData;\n if (float32Values != null) {\n texData.values = float32ToTypedArray(float32Values, dtype);\n }\n return texData.values;\n }\n acquireTexture(texShape, texType, dtype, isPacked) {\n this.numBytesInGPU += this.computeBytes(texShape, dtype);\n if (!this.warnedAboutMemory &&\n this.numBytesInGPU > this.numMBBeforeWarning * 1024 * 1024) {\n const mb = (this.numBytesInGPU / 1024 / 1024).toFixed(2);\n this.warnedAboutMemory = true;\n console.warn(`High memory usage in GPU: ${mb} MB, ` +\n `most likely due to a memory leak`);\n }\n return this.textureManager.acquireTexture(texShape, texType, isPacked);\n }\n computeBytes(shape, dtype) {\n return shape[0] * shape[1] * util.bytesPerElement(dtype);\n }\n checkCompileCompletion() {\n for (const [, binary] of Object.entries(this.binaryCache)) {\n this.checkCompletion_(binary);\n }\n }\n async checkCompileCompletionAsync() {\n const ps = [];\n if (this.gpgpu.parallelCompilationExtension) {\n for (const [, binary] of Object.entries(this.binaryCache)) {\n ps.push(this.checkCompletionAsync_(binary));\n }\n return Promise.all(ps);\n }\n else {\n for (const [, binary] of Object.entries(this.binaryCache)) {\n const p = new Promise((resolve) => {\n try {\n this.checkCompletion_(binary);\n resolve(true);\n }\n catch (error) {\n throw error;\n }\n });\n ps.push(p);\n }\n return Promise.all(ps);\n }\n }\n async checkCompletionAsync_(binary) {\n if (this.gpgpu.gl.getProgramParameter(binary.webGLProgram, this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)) {\n return this.checkCompletion_(binary);\n }\n else {\n await nextFrame();\n return this.checkCompletionAsync_(binary);\n }\n }\n checkCompletion_(binary) {\n if (this.gpgpu.gl.getProgramParameter(binary.webGLProgram, this.gpgpu.gl.LINK_STATUS) === false) {\n console.log(this.gpgpu.gl.getProgramInfoLog(binary.webGLProgram));\n if (this.gpgpu.gl.getShaderParameter(binary.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false) {\n webgl_util.logShaderSourceAndInfoLog(binary.source, this.gpgpu.gl.getShaderInfoLog(binary.fragmentShader));\n throw new Error('Failed to compile fragment shader.');\n }\n throw new Error('Failed to link vertex and fragment shaders.');\n }\n return true;\n }\n getUniformLocations() {\n for (const binary of Object.values(this.binaryCache)) {\n // TODO: Iterating through all binaries to build VAOs is supposed to be in\n // a seperate function, like 'setVaos'. However, to avoid breaking changes\n // for the users using parallel compile feature now, buildVao is silently\n // added here.\n this.gpgpu.buildVao(binary.webGLProgram);\n const { variablesLocations, customUniformLocations, infLoc, nanLoc, outShapeLocation, outShapeStridesLocation, outTexShapeLocation } = getUniformLocations(this.gpgpu, binary.program, binary.webGLProgram);\n binary.variablesLocations = variablesLocations;\n binary.customUniformLocations = customUniformLocations;\n binary.infLoc = infLoc;\n binary.nanLoc = nanLoc;\n binary.outShapeLocation = outShapeLocation;\n binary.outShapeStridesLocation = outShapeStridesLocation;\n binary.outTexShapeLocation = outTexShapeLocation;\n }\n }\n /**\n * Create a TF.js tensor out of an existing WebGL texture. A new texture will\n * be created.\n */\n createTensorFromGPUData(values, shape, dtype) {\n values.channels = values.channels || 'RGBA';\n const { texture, height, width, channels } = values;\n const backend = engine().backend;\n // Have to throw an error, otherwise WebGL just warns and returns wrong\n // values.\n if (!backend.gpgpu.gl.isTexture(texture)) {\n throw new Error(`The texture is invalid. Also, please make sure the texture and ` +\n `the TFJS WebGL backend are using the same canvas. If you want to ` +\n `use your own custom canvas, you have to create and use the custom ` +\n `TFJS WebGL backend created from the canvas through ` +\n `'new tf.MathBackendWebGL(customCanvas)'.`);\n }\n const dataId = backend.writeTexture(texture, shape, dtype, height, width, channels);\n return engine().makeTensorFromDataId(dataId, shape, dtype, backend);\n }\n}\nMathBackendWebGL.nextDataId = 0;\nexport { MathBackendWebGL };\nfunction float32ToTypedArray(a, dtype) {\n if (dtype === 'float32' || dtype === 'complex64') {\n return a;\n }\n else if (dtype === 'int32' || dtype === 'bool') {\n const result = (dtype === 'int32') ? new Int32Array(a.length) :\n new Uint8Array(a.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = Math.round(a[i]);\n }\n return result;\n }\n else {\n throw new Error(`Unknown dtype ${dtype}`);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZF93ZWJnbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvYmFja2VuZF93ZWJnbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxzQkFBc0I7QUFDdEIsT0FBTyxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLFlBQVksRUFBaUIsTUFBTSxFQUFVLFdBQVcsRUFBa0MsTUFBTSxFQUFFLEdBQUcsRUFBVyxZQUFZLEVBQUUsYUFBYSxFQUFjLFNBQVMsRUFBeUMsTUFBTSxFQUF3RCxJQUFJLEVBQTBCLElBQUksRUFBWSxNQUFNLHVCQUF1QixDQUFDO0FBQzdWLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxVQUFVLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBQyxtQkFBbUIsRUFBd0MsTUFBTSxjQUFjLENBQUM7QUFDeEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMs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Q29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIEltcG9ydCB3ZWJnbCBmbGFncy5cbmltcG9ydCAnLi9mbGFnc193ZWJnbCc7XG5cbmltcG9ydCAqIGFzIHRmIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQmFja2VuZFZhbHVlcywgYnVmZmVyLCBEYXRhSWQsIERhdGFTdG9yYWdlLCBEYXRhVG9HUFVXZWJHTE9wdGlvbiwgRGF0YVR5cGUsIGVuZ2luZSwgZW52LCBHUFVEYXRhLCBrZXJuZWxfaW1wbHMsIEtlcm5lbEJhY2tlbmQsIE1lbW9yeUluZm8sIG5leHRGcmFtZSwgTnVtZXJpY0RhdGFUeXBlLCBSYW5rLCBSZWN1cnNpdmVBcnJheSwgc2NhbGFyLCBTaGFwZU1hcCwgVGVuc29yLCBUZW5zb3IyRCwgVGVuc29yQnVmZmVyLCBUZW5zb3JJbmZvLCB0aWR5LCBUaW1pbmdJbmZvLCBUeXBlZEFycmF5LCB1dGlsLCBXZWJHTERhdGF9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge2dldFdlYkdMQ29udGV4dH0gZnJvbSAnLi9jYW52YXNfdXRpbCc7XG5pbXBvcnQge0RlY29kZU1hdHJpeFByb2dyYW19IGZyb20gJy4vZGVjb2RlX21hdHJpeF9ncHUnO1xuaW1wb3J0IHtEZWNvZGVNYXRyaXhQYWNrZWRQcm9ncmFtfSBmcm9tICcuL2RlY29kZV9tYXRyaXhfcGFja2VkX2dwdSc7XG5pbXBvcnQge0VuY29kZUZsb2F0UHJvZ3JhbX0gZnJvbSAnLi9lbmNvZGVfZmxvYXRfZ3B1JztcbmltcG9ydCB7RW5jb2RlRmxvYXRQYWNrZWRQcm9ncmFtfSBmcm9tICcuL2VuY29kZV9mbG9hdF9wYWNrZWRfZ3B1JztcbmltcG9ydCB7RW5jb2RlTWF0cml4UHJvZ3JhbX0gZnJvbSAnLi9lbmNvZGVfbWF0cml4X2dwdSc7XG5pbXBvcnQge0VuY29kZU1hdHJpeFBhY2tlZFByb2dyYW19IGZyb20gJy4vZW5jb2RlX21hdHJpeF9wYWNrZWRfZ3B1JztcbmltcG9ydCB7R1BHUFVDb250ZXh0fSBmcm9tICcuL2dwZ3B1X2NvbnRleHQnO1xuaW1wb3J0ICogYXMgZ3BncHVfbWF0aCBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRVbmlmb3JtTG9jYXRpb25zLCBHUEdQVUJpbmFyeSwgR1BHUFVQcm9ncmFtLCBUZW5zb3JEYXRhfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtzaW1wbGVBYnNJbXBsQ1BVfSBmcm9tICcuL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuaW1wb3J0IHtQYWNrUHJvZ3JhbX0gZnJvbSAnLi9wYWNrX2dwdSc7XG5pbXBvcnQge1Jlc2hhcGVQYWNrZWRQcm9ncmFtfSBmcm9tICcuL3Jlc2hhcGVfcGFja2VkX2dwdSc7XG5pbXBvcnQgKiBhcyB0ZXhfdXRpbCBmcm9tICcuL3RleF91dGlsJztcbmltcG9ydCB7VGV4dHVyZSwgVGV4dHVyZURhdGEsIFRleHR1cmVVc2FnZX0gZnJvbSAnLi90ZXhfdXRpbCc7XG5pbXBvcnQge1RleHR1cmVNYW5hZ2VyfSBmcm9tICcuL3RleHR1cmVfbWFuYWdlcic7XG5pbXBvcnQgKiBhcyB1bmFyeV9vcCBmcm9tICcuL3VuYXJ5b3BfZ3B1JztcbmltcG9ydCB7VW5hcnlPcFByb2dyYW19IGZyb20gJy4vdW5hcnlvcF9ncHUnO1xuaW1wb3J0IHtVbmFyeU9wUGFja2VkUHJvZ3JhbX0gZnJvbSAnLi91bmFyeW9wX3BhY2tlZF9ncHUnO1xuaW1wb3J0IHtVbnBhY2tQcm9ncmFtfSBmcm9tICcuL3VucGFja19ncHUnO1xuaW1wb3J0ICogYXMgd2ViZ2xfdXRpbCBmcm9tICcuL3dlYmdsX3V0aWwnO1xuXG5jb25zdCB3aGVyZUltcGwgPSBrZXJuZWxfaW1wbHMud2hlcmVJbXBsO1xuXG5leHBvcnQgY29uc3QgRVBTSUxPTl9GTE9BVDMyID0gMWUtNztcbmV4cG9ydCBjb25zdCBFUFNJTE9OX0ZMT0FUMTYgPSAxZS00O1xuXG50eXBlIEtlcm5lbEluZm8gPSB7XG4gIG5hbWU6IHN0cmluZzsgcXVlcnk6IFByb21pc2U8bnVtYmVyPjtcbn07XG5cbmV4cG9ydCB0eXBlIFRpbWVyTm9kZSA9IFJlY3Vyc2l2ZUFycmF5PEtlcm5lbEluZm8+fEtlcm5lbEluZm87XG5leHBvcnQgaW50ZXJmYWNlIENQVVRpbWVyUXVlcnkge1xuICBzdGFydE1zOiBudW1iZXI7XG4gIGVuZE1zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYkdMTWVtb3J5SW5mbyBleHRlbmRzIE1lbW9yeUluZm8ge1xuICBudW1CeXRlc0luR1BVOiBudW1iZXI7XG4gIC8vIFRyYWNrcyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBvbiB0aGUgR1BVLCBhY2NvdW50aW5nIGZvciB0aGVcbiAgLy8gcGh5c2ljYWwgdGV4dHVyZSB0eXBlLlxuICBudW1CeXRlc0luR1BVQWxsb2NhdGVkOiBudW1iZXI7XG4gIC8vIFRyYWNrcyBieXRlIHNpemUgb2YgdGV4dHVyZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgYW5kIHRoZW4gbWFkZSBhdmFpbGFibGUgZm9yXG4gIC8vIHJldXNlIChkaXNwb3NlZCkuXG4gIG51bUJ5dGVzSW5HUFVGcmVlOiBudW1iZXI7XG4gIHVucmVsaWFibGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViR0xUaW1pbmdJbmZvIGV4dGVuZHMgVGltaW5nSW5mbyB7XG4gIHVwbG9hZFdhaXRNczogbnVtYmVyO1xuICBkb3dubG9hZFdhaXRNczogbnVtYmVyO1xufVxuXG5jb25zdCBiaW5hcnlDYWNoZXM6IHtbd2ViR0xWZXJzaW9uOiBzdHJpbmddOiB7W2tleTogc3RyaW5nXTogR1BHUFVCaW5hcnl9fSA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmluYXJ5Q2FjaGUod2ViR0xWZXJzaW9uOiBudW1iZXIpIHtcbiAgaWYgKHdlYkdMVmVyc2lvbiBpbiBiaW5hcnlDYWNoZXMpIHtcbiAgICByZXR1cm4gYmluYXJ5Q2FjaGVzW3dlYkdMVmVyc2lvbl07XG4gIH1cbiAgYmluYXJ5Q2FjaGVzW3dlYkdMVmVyc2lvbl0gPSB7fTtcbiAgcmV0dXJuIGJpbmFyeUNhY2hlc1t3ZWJHTFZlcnNpb25dO1xufVxuXG4vLyBFbXBpcmljYWxseSBkZXRlcm1pbmVkIGNvbnN0YW50IHVzZWQgdG8gZGV0ZXJtaW5lIHNpemUgdGhyZXNob2xkIGZvciBoYW5kaW5nXG4vLyBvZmYgZXhlY3V0aW9uIHRvIHRoZSBDUFUuXG5jb25zdCBDUFVfSEFORE9GRl9TSVpFX1RIUkVTSE9MRCA9XG4gICAgZW52KCkuZ2V0TnVtYmVyKCdDUFVfSEFORE9GRl9TSVpFX1RIUkVTSE9MRCcpO1xuXG4vLyBFbXBpcmljYWxseSBkZXRlcm1pbmVkIGNvbnN0YW50IHVzZWQgdG8gZGVjaWRlIHRoZSBudW1iZXIgb2YgTUIgb24gR1BVXG4vLyBiZWZvcmUgd2Ugd2FybiBhYm91dCBoaWdoIG1lbW9yeSB1c2UuIFRoZSBNQiBhcmUgdGhpcyBjb25zdGFudCAqIHNjcmVlbiBhcmVhXG4vLyAqIGRwaSAvIDEwMjQgLyAxMDI0LlxuY29uc3QgQkVGT1JFX1BBR0lOR19DT05TVEFOVCA9IDYwMDtcbmZ1bmN0aW9uIG51bU1CQmVmb3JlV2FybmluZygpOiBudW1iZXIge1xuICBpZiAoZW52KCkuZ2xvYmFsLnNjcmVlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDEwMjQ7ICAvLyAxIEdCLlxuICB9XG4gIHJldHVybiAoZW52KCkuZ2xvYmFsLnNjcmVlbi5oZWlnaHQgKiBlbnYoKS5nbG9iYWwuc2NyZWVuLndpZHRoICpcbiAgICAgICAgICB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbykgKlxuICAgICAgQkVGT1JFX1BBR0lOR19DT05TVEFOVCAvIDEwMjQgLyAxMDI0O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0aEJhY2tlbmRXZWJHTCBleHRlbmRzIEtlcm5lbEJhY2tlbmQge1xuICB0ZXhEYXRhOiBEYXRhU3RvcmFnZTxUZXh0dXJlRGF0YT47XG4gIGdwZ3B1OiBHUEdQVUNvbnRleHQ7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dERhdGFJZCA9IDA7XG4gIHByaXZhdGUgbmV4dERhdGFJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoQmFja2VuZFdlYkdMLm5leHREYXRhSWQrKztcbiAgfVxuICAvLyBNYXBzIGRhdGEgaWRzIHRoYXQgaGF2ZSBhIHBlbmRpbmcgcmVhZCBvcGVyYXRpb24sIHRvIGxpc3Qgb2Ygc3Vic2NyaWJlcnMuXG4gIHByaXZhdGUgcGVuZGluZ1JlYWQgPSBuZXcgV2Vha01hcDxEYXRhSWQsIEFycmF5PChhcnI6IFR5cGVkQXJyYXkpID0+IHZvaWQ+PigpO1xuICAvLyBMaXN0IG9mIGRhdGEgaWRzIHRoYXQgYXJlIHNjaGVkdWxlZCBmb3IgZGlzcG9zYWwsIGJ1dCBhcmUgd2FpdGluZyBvbiBhXG4gIC8vIHBlbmRpbmcgcmVhZCBvcGVyYXRpb24uXG4gIHByaXZhdGUgcGVuZGluZ0Rpc3Bvc2FsID0gbmV3IFdlYWtTZXQ8RGF0YUlkPigpO1xuXG4gIC8vIFVzZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiAnc2hhbGxvdycgc2xpY2VkIHRlbnNvcnMgdGhhdCBwb2ludCB0byB0aGVcbiAgLy8gc2FtZSBkYXRhIGlkLlxuICBkYXRhUmVmQ291bnQgPSBuZXcgV2Vha01hcDxEYXRhSWQsIG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBudW1CeXRlc0luR1BVID0gMDtcblxuICBwcml2YXRlIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnR8T2Zmc2NyZWVuQ2FudmFzO1xuXG4gIHByaXZhdGUgcHJvZ3JhbVRpbWVyc1N0YWNrOiBUaW1lck5vZGVbXTtcbiAgcHJpdmF0ZSBhY3RpdmVUaW1lcnM6IFRpbWVyTm9kZVtdO1xuICAvLyBBY2N1bXVsYXRlZCB0aW1lIHNwZW50IChpbmNsdWRpbmcgYmxvY2tpbmcpIGluIHVwbG9hZGluZyBkYXRhIHRvIHdlYmdsLlxuICBwcml2YXRlIHVwbG9hZFdhaXRNcyA9IDA7XG4gIC8vIEFjY3VtdWxhdGVkIHRpbWUgc3BlbnQgKGluY2x1ZGluZyBibG9ja2luZyBpbiBkb3dubG9hZGluZyBkYXRhIGZyb20gd2ViZ2wuXG4gIHByaXZhdGUgZG93bmxvYWRXYWl0TXMgPSAwO1xuXG4gIC8vIHJlY29yZCB0aGUgbGFzdCBtYW51YWwgR0wgRmx1c2ggdGltZS5cbiAgcHJpdmF0ZSBsYXN0R2xGbHVzaFRpbWUgPSAwO1xuXG4gIC8vIE51bWJlciBvZiBiaXRzIG9mIHByZWNpc2lvbiBvZiB0aGlzIGJhY2tlbmQuXG4gIHByaXZhdGUgZmxvYXRQcmVjaXNpb25WYWx1ZTogMzJ8MTY7XG5cbiAgcHJpdmF0ZSB0ZXh0dXJlTWFuYWdlcjogVGV4dHVyZU1hbmFnZXI7XG4gIHByaXZhdGUgYmluYXJ5Q2FjaGU6IHtba2V5OiBzdHJpbmddOiBHUEdQVUJpbmFyeX07XG4gIHByaXZhdGUgZ3BncHVDcmVhdGVkTG9jYWxseTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBudW1NQkJlZm9yZVdhcm5pbmc6IG51bWJlcjtcbiAgcHJpdmF0ZSB3YXJuZWRBYm91dE1lbW9yeSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGdwdVJlc291cmNlPzogR1BHUFVDb250ZXh0fEhUTUxDYW52YXNFbGVtZW50fE9mZnNjcmVlbkNhbnZhcykge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCFlbnYoKS5nZXRCb29sKCdIQVNfV0VCR0wnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJHTCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlJyk7XG4gICAgfVxuXG4gICAgbGV0IG5ld0dQR1BVO1xuICAgIGlmIChncHVSZXNvdXJjZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZ3B1UmVzb3VyY2UgaW5zdGFuY2VvZiBHUEdQVUNvbnRleHQpIHtcbiAgICAgICAgbmV3R1BHUFUgPSBncHVSZXNvdXJjZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdsID1cbiAgICAgICAgICAgIGdldFdlYkdMQ29udGV4dChlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX1ZFUlNJT04nKSwgZ3B1UmVzb3VyY2UpO1xuICAgICAgICBuZXdHUEdQVSA9IG5ldyBHUEdQVUNvbnRleHQoZ2wpO1xuICAgICAgfVxuICAgICAgdGhpcy5iaW5hcnlDYWNoZSA9IHt9O1xuICAgICAgdGhpcy5ncGdwdUNyZWF0ZWRMb2NhbGx5ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGdsID0gZ2V0V2ViR0xDb250ZXh0KGVudigpLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpKTtcbiAgICAgIG5ld0dQR1BVID0gbmV3IEdQR1BVQ29udGV4dChnbCk7XG4gICAgICB0aGlzLmJpbmFyeUNhY2hlID0gZ2V0QmluYXJ5Q2FjaGUoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9WRVJTSU9OJykpO1xuICAgICAgdGhpcy5ncGdwdUNyZWF0ZWRMb2NhbGx5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmdwZ3B1ID0gbmV3R1BHUFU7XG4gICAgdGhpcy5jYW52YXMgPSB0aGlzLmdwZ3B1LmdsLmNhbnZhcztcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyID0gbmV3IFRleHR1cmVNYW5hZ2VyKHRoaXMuZ3BncHUpO1xuICAgIHRoaXMubnVtTUJCZWZvcmVXYXJuaW5nID0gbnVtTUJCZWZvcmVXYXJuaW5nKCk7XG4gICAgdGhpcy50ZXhEYXRhID0gbmV3IERhdGFTdG9yYWdlKHRoaXMsIGVuZ2luZSgpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG51bURhdGFJZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4RGF0YS5udW1EYXRhSWRzKCkgLSB0aGlzLnBlbmRpbmdEZWxldGVzO1xuICB9XG5cbiAgLy8gV3JpdGVzIGEgbmV3IGVudHJ5IHRvIHRoZSBkYXRhIHN0b3JlIHdpdGggYSBXZWJHTCB0ZXh0dXJlLCBhbmQgcmVnaXN0ZXJzIGl0XG4gIC8vIHRvIHRoZSB0ZXh0dXJlIG1hbmFnZXIuXG4gIHdyaXRlVGV4dHVyZShcbiAgICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZSwgc2hhcGU6IG51bWJlcltdLCBkdHlwZTogRGF0YVR5cGUsXG4gICAgICB0ZXhIZWlnaHQ6IG51bWJlciwgdGV4V2lkdGg6IG51bWJlciwgY2hhbm5lbHM6IHN0cmluZyk6IERhdGFJZCB7XG4gICAgLy8gVGVtcG9yYXJpbHkgY3JlYXRlIGFuIHRlbnNvciBpbmZvIHRvIG1ha2UgdGhlIHRleHR1cmUgY29tcGF0aWJsZSB3aXRoXG4gICAgLy8gdGhlIHJ1bldlYkdMUHJvZ3JhbSdzIGlucHV0LlxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5tYWtlVGVuc29ySW5mbyhzaGFwZSwgZHR5cGUpO1xuICAgIGNvbnN0IGluRGF0YSA9IHRoaXMudGV4RGF0YS5nZXQoaW5wdXQuZGF0YUlkKTtcbiAgICAvLyBFdmVuIHRob3VnaCB0aGUgaW5wdXQgdGV4dHVyZSBjb3VsZCBiZSB1bnBhY2tlZCBvciBkZW5zZSBwYWNrZWQsIGl0IGlzXG4gICAgLy8gYWx3YXlzIGNvbnNpZGVyZWQgYXMgdW5wYWNrZWQgZm9yIEVuY29kZU1hdHJpeFByb2dyYW0uXG4gICAgaW5EYXRhLmlzUGFja2VkID0gZmFsc2U7XG5cbiAgICAvLyBCaW5kIHRleHR1cmUgdG8gdGhlIGlucHV0IHRlbnNvci5cbiAgICBpbkRhdGEudGV4dHVyZSA9IHt0ZXh0dXJlLCB0ZXhTaGFwZTogW3RleEhlaWdodCwgdGV4V2lkdGhdfTtcbiAgICBpbkRhdGEudGV4U2hhcGUgPSBbdGV4SGVpZ2h0LCB0ZXhXaWR0aF07XG5cbiAgICBjb25zdCBzaGFwZUFzM0QgPSB3ZWJnbF91dGlsLmdldFNoYXBlQXMzRChzaGFwZSk7XG4gICAgY29uc3QgcHJvZ3JhbSA9XG4gICAgICAgIG5ldyBFbmNvZGVNYXRyaXhQcm9ncmFtKHNoYXBlQXMzRCwgZmFsc2UgLyogaXNCeXRlQXJyYXkgKi8sIGNoYW5uZWxzKTtcbiAgICBjb25zdCBvdXRwdXQgPVxuICAgICAgICB0aGlzLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbaW5wdXRdLCBkdHlwZSwgW1t0ZXhIZWlnaHQsIHRleFdpZHRoXV0pO1xuICAgIG91dHB1dC5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLy8gVW5iaW5kIHRoZSB0ZXh0dXJlIGZyb20gdGhlIGlucHV0IHRlbnNvciB0byBhdm9pZCB0aGUgdGV4dHVyZSBiZWluZ1xuICAgIC8vIHJlbGVhc2VkLlxuICAgIGluRGF0YS50ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGlucHV0KTtcblxuICAgIHJldHVybiBvdXRwdXQuZGF0YUlkO1xuICB9XG5cbiAgb3ZlcnJpZGUgd3JpdGUodmFsdWVzOiBCYWNrZW5kVmFsdWVzLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSk6XG4gICAgICBEYXRhSWQge1xuICAgIGlmIChlbnYoKS5nZXRCb29sKCdXRUJHTF9DSEVDS19OVU1FUklDQUxfUFJPQkxFTVMnKSB8fFxuICAgICAgICBlbnYoKS5nZXRCb29sKCdERUJVRycpKSB7XG4gICAgICB0aGlzLmNoZWNrTnVtZXJpY2FsUHJvYmxlbXModmFsdWVzKTtcbiAgICB9XG4gICAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0JyAmJiB2YWx1ZXMgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3Qgd3JpdGUgdG8gYSBjb21wbGV4NjQgZHR5cGUuIGAgK1xuICAgICAgICAgIGBQbGVhc2UgdXNlIHRmLmNvbXBsZXgocmVhbCwgaW1hZykuYCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFJZCA9IHtpZDogdGhpcy5uZXh0RGF0YUlkKCl9O1xuICAgIHRoaXMudGV4RGF0YS5zZXQoXG4gICAgICAgIGRhdGFJZCxcbiAgICAgICAge3NoYXBlLCBkdHlwZSwgdmFsdWVzLCB1c2FnZTogVGV4dHVyZVVzYWdlLlVQTE9BRCwgcmVmQ291bnQ6IDF9KTtcbiAgICByZXR1cm4gZGF0YUlkO1xuICB9XG5cbiAgLyoqIFJldHVybiByZWZDb3VudCBvZiBhIGBUZW5zb3JEYXRhYC4gKi9cbiAgb3ZlcnJpZGUgcmVmQ291bnQoZGF0YUlkOiBEYXRhSWQpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnRleERhdGEuaGFzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IHRlbnNvckRhdGEgPSB0aGlzLnRleERhdGEuZ2V0KGRhdGFJZCk7XG4gICAgICByZXR1cm4gdGVuc29yRGF0YS5yZWZDb3VudDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKiogSW5jcmVhc2UgcmVmQ291bnQgb2YgYSBgVGV4dHVyZURhdGFgLiAqL1xuICBvdmVycmlkZSBpbmNSZWYoZGF0YUlkOiBEYXRhSWQpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXhEYXRhID0gdGhpcy50ZXhEYXRhLmdldChkYXRhSWQpO1xuICAgIHRleERhdGEucmVmQ291bnQrKztcbiAgfVxuXG4gIC8qKiBEZWNyZWFzZSByZWZDb3VudCBvZiBhIGBUZXh0dXJlRGF0YWAuICovXG4gIGRlY1JlZihkYXRhSWQ6IERhdGFJZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRleERhdGEuaGFzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IHRleERhdGEgPSB0aGlzLnRleERhdGEuZ2V0KGRhdGFJZCk7XG4gICAgICB0ZXhEYXRhLnJlZkNvdW50LS07XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgbW92ZShcbiAgICAgIGRhdGFJZDogRGF0YUlkLCB2YWx1ZXM6IEJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLFxuICAgICAgcmVmQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChlbnYoKS5nZXRCb29sKCdERUJVRycpKSB7XG4gICAgICB0aGlzLmNoZWNrTnVtZXJpY2FsUHJvYmxlbXModmFsdWVzKTtcbiAgICB9XG4gICAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3Qgd3JpdGUgdG8gYSBjb21wbGV4NjQgZHR5cGUuIGAgK1xuICAgICAgICAgIGBQbGVhc2UgdXNlIHRmLmNvbXBsZXgocmVhbCwgaW1hZykuYCk7XG4gICAgfVxuICAgIHRoaXMudGV4RGF0YS5zZXQoXG4gICAgICAgIGRhdGFJZCwge3NoYXBlLCBkdHlwZSwgdmFsdWVzLCB1c2FnZTogVGV4dHVyZVVzYWdlLlVQTE9BRCwgcmVmQ291bnR9KTtcbiAgfVxuXG4gIGRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHRlbnNvckluZm86IFRlbnNvckluZm8pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3Bvc2VEYXRhKHRlbnNvckluZm8uZGF0YUlkKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlYWRTeW5jKGRhdGFJZDogRGF0YUlkKTogQmFja2VuZFZhbHVlcyB7XG4gICAgY29uc3QgdGV4RGF0YSA9IHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKTtcbiAgICBjb25zdCB7dmFsdWVzLCBkdHlwZSwgY29tcGxleFRlbnNvckluZm9zLCBzbGljZSwgc2hhcGUsIGlzUGFja2VkfSA9IHRleERhdGE7XG5cbiAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgYHNsaWNlYCBpbmRpY2F0ZXMgdGhpcyB0ZW5zb3IgaXMgYSBzaGFsbG93IHNsaWNlIG9mIGFcbiAgICAvLyBkaWZmZXJlbnQgdGVuc29yLCBhbmQgaXMgdXNpbmcgdGhhdCBvcmlnaW5hbCB0ZW5zb3IncyB0ZXh0dXJlLiBSdW5cbiAgICAvLyBgY2xvbmVgIGluIG9yZGVyIHRvIGNvcHkgdGhhdCB0ZXh0dXJlIGFuZCByZWFkIGZyb20gaXQuXG4gICAgaWYgKHNsaWNlICE9IG51bGwpIHtcbiAgICAgIGxldCBwcm9ncmFtO1xuICAgICAgaWYgKGlzUGFja2VkKSB7XG4gICAgICAgIHByb2dyYW0gPSBuZXcgVW5hcnlPcFBhY2tlZFByb2dyYW0oc2hhcGUsIHVuYXJ5X29wLkNMT05FKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2dyYW0gPSBuZXcgVW5hcnlPcFByb2dyYW0oc2hhcGUsIHVuYXJ5X29wLkNMT05FKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcyA9XG4gICAgICAgICAgdGhpcy5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3tkYXRhSWQsIHNoYXBlLCBkdHlwZX1dLCBkdHlwZSk7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5yZWFkU3luYyhyZXMuZGF0YUlkKTtcbiAgICAgIHRoaXMuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodmFsdWVzICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRBbmRDYWNoZU9uQ1BVKGRhdGFJZCk7XG4gICAgfVxuICAgIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFRpbWVQcm9ncmFtID0gdGhpcy5hY3RpdmVUaW1lcnMgIT0gbnVsbDtcbiAgICBsZXQgc3RhcnQ6IG51bWJlcjtcbiAgICBpZiAoc2hvdWxkVGltZVByb2dyYW0pIHtcbiAgICAgIHN0YXJ0ID0gdXRpbC5ub3coKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0OiBGbG9hdDMyQXJyYXk7XG4gICAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICAgY29uc3QgcmVhbFZhbHVlcyA9XG4gICAgICAgICAgdGhpcy5yZWFkU3luYyhjb21wbGV4VGVuc29ySW5mb3MucmVhbC5kYXRhSWQpIGFzIEZsb2F0MzJBcnJheTtcbiAgICAgIGNvbnN0IGltYWdWYWx1ZXMgPVxuICAgICAgICAgIHRoaXMucmVhZFN5bmMoY29tcGxleFRlbnNvckluZm9zLmltYWcuZGF0YUlkKSBhcyBGbG9hdDMyQXJyYXk7XG4gICAgICByZXN1bHQgPSBiYWNrZW5kX3V0aWwubWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhyZWFsVmFsdWVzLCBpbWFnVmFsdWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5nZXRWYWx1ZXNGcm9tVGV4dHVyZShkYXRhSWQpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaW1lUHJvZ3JhbSkge1xuICAgICAgdGhpcy5kb3dubG9hZFdhaXRNcyArPSB1dGlsLm5vdygpIC0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRBbmRDYWNoZU9uQ1BVKGRhdGFJZCwgcmVzdWx0KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlYWQoZGF0YUlkOiBEYXRhSWQpOiBQcm9taXNlPEJhY2tlbmRWYWx1ZXM+IHtcbiAgICBpZiAodGhpcy5wZW5kaW5nUmVhZC5oYXMoZGF0YUlkKSkge1xuICAgICAgY29uc3Qgc3Vic2NyaWJlcnMgPSB0aGlzLnBlbmRpbmdSZWFkLmdldChkYXRhSWQpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFR5cGVkQXJyYXk+KHJlc29sdmUgPT4gc3Vic2NyaWJlcnMucHVzaChyZXNvbHZlKSk7XG4gICAgfVxuICAgIGNvbnN0IHRleERhdGEgPSB0aGlzLnRleERhdGEuZ2V0KGRhdGFJZCk7XG4gICAgY29uc3Qge3ZhbHVlcywgc2hhcGUsIHNsaWNlLCBkdHlwZSwgY29tcGxleFRlbnNvckluZm9zLCBpc1BhY2tlZH0gPSB0ZXhEYXRhO1xuXG4gICAgLy8gVGhlIHByZXNlbmNlIG9mIGBzbGljZWAgaW5kaWNhdGVzIHRoaXMgdGVuc29yIGlzIGEgc2hhbGxvdyBzbGljZSBvZiBhXG4gICAgLy8gZGlmZmVyZW50IHRlbnNvciwgYW5kIGlzIHVzaW5nIHRoYXQgb3JpZ2luYWwgdGVuc29yJ3MgdGV4dHVyZS4gUnVuXG4gICAgLy8gYGNsb25lYCBpbiBvcmRlciB0byBjb3B5IHRoYXQgdGV4dHVyZSBhbmQgcmVhZCBmcm9tIGl0LlxuICAgIGlmIChzbGljZSAhPSBudWxsKSB7XG4gICAgICBsZXQgcHJvZ3JhbTtcbiAgICAgIGlmIChpc1BhY2tlZCkge1xuICAgICAgICBwcm9ncmFtID0gbmV3IFVuYXJ5T3BQYWNrZWRQcm9ncmFtKHNoYXBlLCB1bmFyeV9vcC5DTE9ORSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9ncmFtID0gbmV3IFVuYXJ5T3BQcm9ncmFtKHNoYXBlLCB1bmFyeV9vcC5DTE9ORSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXMgPVxuICAgICAgICAgIHRoaXMucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFt7ZGF0YUlkLCBzaGFwZSwgZHR5cGV9XSwgZHR5cGUpO1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMucmVhZChyZXMuZGF0YUlkKTtcbiAgICAgIHRoaXMuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydEFuZENhY2hlT25DUFUoZGF0YUlkKTtcbiAgICB9XG5cbiAgICBpZiAoZW52KCkuZ2V0Qm9vbCgnREVCVUcnKSkge1xuICAgICAgLy8gZ2V0Qm9vbCgnV0VCR0xfRE9XTkxPQURfRkxPQVRfRU5BQkxFRCcpIGNhdXNlZCBhIGJsb2NraW5nIEdQVSBjYWxsLlxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbiwgb25seSBjaGVjayBpdCBmb3IgZGVidWdnaW5nLiBJbiBwcm9kdWN0aW9uLFxuICAgICAgLy8gaXQgZG9lc24ndCBoYW5kbGUgdGhpcyB1c2UgY2FzZSBhbnl3YXksIHNvIGJlaGF2aW9yIGlzIG5vdCBjaGFuZ2VkLlxuICAgICAgaWYgKCFlbnYoKS5nZXRCb29sKCdXRUJHTF9ET1dOTE9BRF9GTE9BVF9FTkFCTEVEJykgJiZcbiAgICAgICAgICBlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX1ZFUlNJT04nKSA9PT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgdGVuc29yLmRhdGEoKSB3aXRoIFdFQkdMX0RPV05MT0FEX0ZMT0FUX0VOQUJMRUQ9ZmFsc2UgYW5kIGAgK1xuICAgICAgICAgICAgYFdFQkdMX1ZFUlNJT049MiBub3QgeWV0IHN1cHBvcnRlZC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYnVmZmVyOiBXZWJHTEJ1ZmZlciA9IG51bGw7XG4gICAgbGV0IHRtcERvd25sb2FkVGFyZ2V0OiBUZW5zb3JJbmZvO1xuXG4gICAgaWYgKGR0eXBlICE9PSAnY29tcGxleDY0JyAmJiBlbnYoKS5nZXQoJ1dFQkdMX0JVRkZFUl9TVVBQT1JURUQnKSkge1xuICAgICAgLy8gUG9zc2libHkgY29weSB0aGUgdGV4dHVyZSBpbnRvIGEgYnVmZmVyIGJlZm9yZSBpbnNlcnRpbmcgYSBmZW5jZS5cbiAgICAgIHRtcERvd25sb2FkVGFyZ2V0ID0gdGhpcy5kZWNvZGUoZGF0YUlkKTtcbiAgICAgIGNvbnN0IHRtcERhdGEgPSB0aGlzLnRleERhdGEuZ2V0KHRtcERvd25sb2FkVGFyZ2V0LmRhdGFJZCk7XG5cbiAgICAgIGJ1ZmZlciA9IHRoaXMuZ3BncHUuY3JlYXRlQnVmZmVyRnJvbVRleHR1cmUoXG4gICAgICAgICAgdG1wRGF0YS50ZXh0dXJlLnRleHR1cmUsIC4uLnRleF91dGlsLmdldERlbnNlVGV4U2hhcGUoc2hhcGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdSZWFkLnNldChkYXRhSWQsIFtdKTtcblxuICAgIGlmIChkdHlwZSAhPT0gJ2NvbXBsZXg2NCcpIHtcbiAgICAgIC8vIENyZWF0ZSBhIGZlbmNlIGFuZCB3YWl0IGZvciBpdCB0byByZXNvbHZlLlxuICAgICAgYXdhaXQgdGhpcy5ncGdwdS5jcmVhdGVBbmRXYWl0Rm9yRmVuY2UoKTtcbiAgICB9XG5cbiAgICAvLyBEb3dubG9hZCB0aGUgdmFsdWVzIGZyb20gdGhlIEdQVS5cbiAgICBsZXQgdmFsczogRmxvYXQzMkFycmF5O1xuICAgIGlmIChkdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICAgIGNvbnN0IHBzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnJlYWQoY29tcGxleFRlbnNvckluZm9zLnJlYWwuZGF0YUlkKSxcbiAgICAgICAgdGhpcy5yZWFkKGNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnLmRhdGFJZClcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCByZWFsVmFsdWVzID0gcHNbMF07XG4gICAgICBjb25zdCBpbWFnVmFsdWVzID0gcHNbMV07XG4gICAgICB2YWxzID0gYmFja2VuZF91dGlsLm1lcmdlUmVhbEFuZEltYWdBcnJheXMoXG4gICAgICAgICAgcmVhbFZhbHVlcyBhcyBGbG9hdDMyQXJyYXksIGltYWdWYWx1ZXMgYXMgRmxvYXQzMkFycmF5KTtcbiAgICB9IGVsc2UgaWYgKGJ1ZmZlciA9PSBudWxsKSB7XG4gICAgICB2YWxzID0gdGhpcy5nZXRWYWx1ZXNGcm9tVGV4dHVyZShkYXRhSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgICAgIHZhbHMgPSB0aGlzLmdwZ3B1LmRvd25sb2FkRmxvYXQzMk1hdHJpeEZyb21CdWZmZXIoYnVmZmVyLCBzaXplKTtcbiAgICB9XG4gICAgaWYgKHRtcERvd25sb2FkVGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odG1wRG93bmxvYWRUYXJnZXQpO1xuICAgIH1cbiAgICBpZiAoYnVmZmVyICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGdsID0gdGhpcy5ncGdwdS5nbDtcbiAgICAgIHdlYmdsX3V0aWwuY2FsbEFuZENoZWNrKGdsLCAoKSA9PiBnbC5kZWxldGVCdWZmZXIoYnVmZmVyKSk7XG4gICAgfVxuICAgIGNvbnN0IGRUeXBlVmFscyA9IHRoaXMuY29udmVydEFuZENhY2hlT25DUFUoZGF0YUlkLCB2YWxzKTtcblxuICAgIGNvbnN0IHN1YnNjcmliZXJzID0gdGhpcy5wZW5kaW5nUmVhZC5nZXQoZGF0YUlkKTtcbiAgICB0aGlzLnBlbmRpbmdSZWFkLmRlbGV0ZShkYXRhSWQpO1xuXG4gICAgLy8gTm90aWZ5IGFsbCBwZW5kaW5nIHJlYWRzLlxuICAgIHN1YnNjcmliZXJzLmZvckVhY2gocmVzb2x2ZSA9PiByZXNvbHZlKGRUeXBlVmFscykpO1xuICAgIGlmICh0aGlzLnBlbmRpbmdEaXNwb3NhbC5oYXMoZGF0YUlkKSkge1xuICAgICAgdGhpcy5wZW5kaW5nRGlzcG9zYWwuZGVsZXRlKGRhdGFJZCk7XG4gICAgICBpZiAodGhpcy5kaXNwb3NlRGF0YShkYXRhSWQpKSB7XG4gICAgICAgIGVuZ2luZSgpLnJlbW92ZURhdGFJZChkYXRhSWQsIHRoaXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5wZW5kaW5nRGVsZXRlcy0tO1xuICAgIH1cbiAgICByZXR1cm4gZFR5cGVWYWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGVuc29yIHRvIGEgbmV3IHRleHR1cmUgdGhhdCBpcyBkZW5zZWx5IHBhY2tlZCBmb3IgZWFzZSBvZiB1c2UuXG4gICAqIEBwYXJhbSBkYXRhSWQgVGhlIHNvdXJjZSB0ZW5zb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqICAgICBjdXN0b21UZXhTaGFwZTogT3B0aW9uYWwuIElmIHNldCwgd2lsbCB1c2UgdGhlIHVzZXIgZGVmaW5lZCB0ZXh0dXJlXG4gICAqICAgICBzaGFwZSB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAqL1xuICBvdmVycmlkZSByZWFkVG9HUFUoZGF0YUlkOiBEYXRhSWQsIG9wdGlvbnM6IERhdGFUb0dQVVdlYkdMT3B0aW9uID0ge30pOlxuICAgICAgR1BVRGF0YSB7XG4gICAgY29uc3QgdGV4RGF0YSA9IHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKTtcbiAgICBjb25zdCB7dmFsdWVzLCBzaGFwZSwgc2xpY2UsIGR0eXBlLCBpc1BhY2tlZCwgdGV4dHVyZX0gPSB0ZXhEYXRhO1xuXG4gICAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgdGV4dHVyZSBmb3IgY29tcGxleDY0IGR0eXBlLicpO1xuICAgIH1cblxuICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBgc2xpY2VgIGluZGljYXRlcyB0aGlzIHRlbnNvciBpcyBhIHNoYWxsb3cgc2xpY2Ugb2YgYVxuICAgIC8vIGRpZmZlcmVudCB0ZW5zb3IsIGFuZCBpcyB1c2luZyB0aGF0IG9yaWdpbmFsIHRlbnNvcidzIHRleHR1cmUuIFJ1blxuICAgIC8vIGBjbG9uZWAgaW4gb3JkZXIgdG8gY29weSB0aGF0IHRleHR1cmUgYW5kIHJlYWQgZnJvbSBpdC5cbiAgICBpZiAoc2xpY2UgIT0gbnVsbCkge1xuICAgICAgbGV0IHByb2dyYW07XG4gICAgICBpZiAoaXNQYWNrZWQpIHtcbiAgICAgICAgcHJvZ3JhbSA9IG5ldyBVbmFyeU9wUGFja2VkUHJvZ3JhbShzaGFwZSwgdW5hcnlfb3AuQ0xPTkUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvZ3JhbSA9IG5ldyBVbmFyeU9wUHJvZ3JhbShzaGFwZSwgdW5hcnlfb3AuQ0xPTkUpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzID1cbiAgICAgICAgICB0aGlzLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbe2RhdGFJZCwgc2hhcGUsIGR0eXBlfV0sIGR0eXBlKTtcbiAgICAgIGNvbnN0IGdwdVJlc291b3JjZSA9IHRoaXMucmVhZFRvR1BVKHJlcywgb3B0aW9ucyk7XG4gICAgICB0aGlzLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlcyk7XG4gICAgICByZXR1cm4gZ3B1UmVzb3VvcmNlO1xuICAgIH1cblxuICAgIGlmICh0ZXh0dXJlID09IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEgaXMgbm90IG9uIEdQVSBidXQgb24gQ1BVLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBubyBkYXRhIG9uIEdQVSBvciBDUFUuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVjb2RlIHRoZSB0ZXh0dXJlIHNvIHRoYXQgaXQgaXMgc3RvcmVkIGRlbnNlbHkgKHVzaW5nIGZvdXIgY2hhbm5lbHMpLlxuICAgIGNvbnN0IHRtcFRhcmdldCA9IHRoaXMuZGVjb2RlKGRhdGFJZCwgb3B0aW9ucy5jdXN0b21UZXhTaGFwZSk7XG5cbiAgICAvLyBNYWtlIGVuZ2luZSB0cmFjayB0aGlzIHRlbnNvciwgc28gdGhhdCB3ZSBjYW4gZGlzcG9zZSBpdCBsYXRlci5cbiAgICBjb25zdCB0ZW5zb3JSZWYgPSBlbmdpbmUoKS5tYWtlVGVuc29yRnJvbVRlbnNvckluZm8odG1wVGFyZ2V0KTtcblxuICAgIGNvbnN0IHRtcERhdGEgPSB0aGlzLnRleERhdGEuZ2V0KHRtcFRhcmdldC5kYXRhSWQpO1xuICAgIHJldHVybiB7dGVuc29yUmVmLCAuLi50bXBEYXRhLnRleHR1cmV9O1xuICB9XG5cbiAgYnVmZmVyU3luYzxSIGV4dGVuZHMgUmFuaywgRCBleHRlbmRzIERhdGFUeXBlPih0OiBUZW5zb3JJbmZvKTpcbiAgICAgIFRlbnNvckJ1ZmZlcjxSLCBEPiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVhZFN5bmModC5kYXRhSWQpO1xuICAgIGlmICh0LmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gRGVjb2RlIHRoZSBieXRlcyBpbnRvIHN0cmluZy5cbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IChkYXRhIGFzIFVpbnQ4QXJyYXlbXSkubWFwKGQgPT4gdXRpbC5kZWNvZGVTdHJpbmcoZCkpO1xuICAgICAgICByZXR1cm4gYnVmZmVyKHQuc2hhcGUgYXMgU2hhcGVNYXBbUl0sIHQuZHR5cGUsIHN0cmluZ3MpIGFzXG4gICAgICAgICAgICBUZW5zb3JCdWZmZXI8UiwgRD47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVjb2RlIGVuY29kZWQgc3RyaW5nIGJ5dGVzIGludG8gdXRmLTgnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcih0LnNoYXBlIGFzIFNoYXBlTWFwW1JdLCB0LmR0eXBlLCBkYXRhIGFzIFR5cGVkQXJyYXkpIGFzXG4gICAgICAgIFRlbnNvckJ1ZmZlcjxSLCBEPjtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tOdW1lcmljYWxQcm9ibGVtcyh2YWx1ZXM6IEJhY2tlbmRWYWx1ZXMpOiB2b2lkIHtcbiAgICBpZiAodmFsdWVzID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG51bSA9IHZhbHVlc1tpXSBhcyBudW1iZXI7XG4gICAgICBpZiAoIXdlYmdsX3V0aWwuY2FuQmVSZXByZXNlbnRlZChudW0pKSB7XG4gICAgICAgIGlmIChlbnYoKS5nZXRCb29sKCdXRUJHTF9SRU5ERVJfRkxPQVQzMl9DQVBBQkxFJykpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgYFRoZSB2YWx1ZSAke251bX0gY2Fubm90IGJlIHJlcHJlc2VudGVkIHdpdGggeW91ciBgICtcbiAgICAgICAgICAgICAgYGN1cnJlbnQgc2V0dGluZ3MuIENvbnNpZGVyIGVuYWJsaW5nIGZsb2F0MzIgcmVuZGVyaW5nOiBgICtcbiAgICAgICAgICAgICAgYCd0Zi5lbnYoKS5zZXQoJ1dFQkdMX1JFTkRFUl9GTE9BVDMyX0VOQUJMRUQnLCB0cnVlKTsnYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgRXJyb3IoYFRoZSB2YWx1ZSAke251bX0gY2Fubm90IGJlIHJlcHJlc2VudGVkIG9uIHRoaXMgZGV2aWNlLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVzRnJvbVRleHR1cmUoZGF0YUlkOiBEYXRhSWQpOiBGbG9hdDMyQXJyYXkge1xuICAgIGNvbnN0IHtzaGFwZSwgZHR5cGUsIGlzUGFja2VkfSA9IHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKTtcbiAgICBjb25zdCBzaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgICBpZiAoZW52KCkuZ2V0Qm9vbCgnV0VCR0xfRE9XTkxPQURfRkxPQVRfRU5BQkxFRCcpKSB7XG4gICAgICBjb25zdCB0bXBUYXJnZXQgPSB0aGlzLmRlY29kZShkYXRhSWQpO1xuICAgICAgY29uc3QgdG1wRGF0YSA9IHRoaXMudGV4RGF0YS5nZXQodG1wVGFyZ2V0LmRhdGFJZCk7XG4gICAgICBjb25zdCB2YWxzID1cbiAgICAgICAgICB0aGlzLmdwZ3B1XG4gICAgICAgICAgICAgIC5kb3dubG9hZE1hdHJpeEZyb21QYWNrZWRUZXh0dXJlKFxuICAgICAgICAgICAgICAgICAgdG1wRGF0YS50ZXh0dXJlLnRleHR1cmUsIC4uLnRleF91dGlsLmdldERlbnNlVGV4U2hhcGUoc2hhcGUpKVxuICAgICAgICAgICAgICAuc3ViYXJyYXkoMCwgc2l6ZSk7XG5cbiAgICAgIHRoaXMuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odG1wVGFyZ2V0KTtcblxuICAgICAgcmV0dXJuIHZhbHM7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkVXNlUGFja2VkUHJvZ3JhbSA9XG4gICAgICAgIGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0snKSAmJiBpc1BhY2tlZCA9PT0gdHJ1ZTtcbiAgICBjb25zdCBvdXRwdXRTaGFwZSA9XG4gICAgICAgIHNob3VsZFVzZVBhY2tlZFByb2dyYW0gPyB3ZWJnbF91dGlsLmdldFNoYXBlQXMzRChzaGFwZSkgOiBzaGFwZTtcbiAgICBjb25zdCBwcm9ncmFtID0gc2hvdWxkVXNlUGFja2VkUHJvZ3JhbSA/XG4gICAgICAgIG5ldyBFbmNvZGVGbG9hdFBhY2tlZFByb2dyYW0ob3V0cHV0U2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSA6XG4gICAgICAgIG5ldyBFbmNvZGVGbG9hdFByb2dyYW0ob3V0cHV0U2hhcGUpO1xuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMucnVuV2ViR0xQcm9ncmFtKFxuICAgICAgICBwcm9ncmFtLCBbe3NoYXBlOiBvdXRwdXRTaGFwZSwgZHR5cGUsIGRhdGFJZH1dLCAnZmxvYXQzMicpO1xuICAgIGNvbnN0IHRtcERhdGEgPSB0aGlzLnRleERhdGEuZ2V0KG91dHB1dC5kYXRhSWQpO1xuICAgIGNvbnN0IHZhbHMgPSB0aGlzLmdwZ3B1XG4gICAgICAgICAgICAgICAgICAgICAuZG93bmxvYWRCeXRlRW5jb2RlZEZsb2F0TWF0cml4RnJvbU91dHB1dFRleHR1cmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG1wRGF0YS50ZXh0dXJlLnRleHR1cmUsIHRtcERhdGEudGV4U2hhcGVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG1wRGF0YS50ZXhTaGFwZVsxXSlcbiAgICAgICAgICAgICAgICAgICAgIC5zdWJhcnJheSgwLCBzaXplKTtcbiAgICB0aGlzLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKG91dHB1dCk7XG5cbiAgICByZXR1cm4gdmFscztcbiAgfVxuXG4gIG92ZXJyaWRlIHRpbWVyQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX0RJU0pPSU5UX1FVRVJZX1RJTUVSX0VYVEVOU0lPTl9SRUxJQUJMRScpID4gMDtcbiAgfVxuXG4gIG92ZXJyaWRlIHRpbWUoZjogKCkgPT4gdm9pZCk6IFByb21pc2U8V2ViR0xUaW1pbmdJbmZvPiB7XG4gICAgY29uc3Qgb2xkQWN0aXZlVGltZXJzID0gdGhpcy5hY3RpdmVUaW1lcnM7XG4gICAgY29uc3QgbmV3QWN0aXZlVGltZXJzOiBUaW1lck5vZGVbXSA9IFtdO1xuXG4gICAgbGV0IG91dGVyTW9zdFRpbWUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wcm9ncmFtVGltZXJzU3RhY2sgPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9ncmFtVGltZXJzU3RhY2sgPSBuZXdBY3RpdmVUaW1lcnM7XG4gICAgICBvdXRlck1vc3RUaW1lID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVUaW1lcnMucHVzaChuZXdBY3RpdmVUaW1lcnMpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZVRpbWVycyA9IG5ld0FjdGl2ZVRpbWVycztcblxuICAgIGYoKTtcblxuICAgIC8vIG5lZWRpbmcgdG8gc3BsaXQgdGhlc2UgdXAgYmVjYXVzZSB1dGlsLmZsYXR0ZW4gb25seSBhY2NlcHRzIGNlcnRhaW4gdHlwZXNcbiAgICBjb25zdCBmbGF0dGVuZWRBY3RpdmVUaW1lclF1ZXJpZXMgPVxuICAgICAgICB1dGlsLmZsYXR0ZW4odGhpcy5hY3RpdmVUaW1lcnMubWFwKChkOiBLZXJuZWxJbmZvKSA9PiBkLnF1ZXJ5KSlcbiAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBkICE9IG51bGwpO1xuICAgIGNvbnN0IGZsYXR0ZW5lZEFjdGl2ZVRpbWVyTmFtZXMgPVxuICAgICAgICB1dGlsLmZsYXR0ZW4odGhpcy5hY3RpdmVUaW1lcnMubWFwKChkOiBLZXJuZWxJbmZvKSA9PiBkLm5hbWUpKVxuICAgICAgICAgICAgLmZpbHRlcihkID0+IGQgIT0gbnVsbCk7XG5cbiAgICB0aGlzLmFjdGl2ZVRpbWVycyA9IG9sZEFjdGl2ZVRpbWVycztcblxuICAgIGlmIChvdXRlck1vc3RUaW1lKSB7XG4gICAgICB0aGlzLnByb2dyYW1UaW1lcnNTdGFjayA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzOiBXZWJHTFRpbWluZ0luZm8gPSB7XG4gICAgICB1cGxvYWRXYWl0TXM6IHRoaXMudXBsb2FkV2FpdE1zLFxuICAgICAgZG93bmxvYWRXYWl0TXM6IHRoaXMuZG93bmxvYWRXYWl0TXMsXG4gICAgICBrZXJuZWxNczogbnVsbCxcbiAgICAgIHdhbGxNczogbnVsbCAgLy8gd2lsbCBiZSBmaWxsZWQgYnkgdGhlIGVuZ2luZVxuICAgIH07XG5cbiAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX0RJU0pPSU5UX1FVRVJZX1RJTUVSX0VYVEVOU0lPTl9SRUxJQUJMRScpID5cbiAgICAgICAgICAwKSB7XG4gICAgICAgIGNvbnN0IGtlcm5lbE1zID0gYXdhaXQgUHJvbWlzZS5hbGwoZmxhdHRlbmVkQWN0aXZlVGltZXJRdWVyaWVzKTtcblxuICAgICAgICByZXNbJ2tlcm5lbE1zJ10gPSB1dGlsLnN1bShrZXJuZWxNcyk7XG4gICAgICAgIHJlc1snZ2V0RXh0cmFQcm9maWxlSW5mbyddID0gKCkgPT5cbiAgICAgICAgICAgIGtlcm5lbE1zXG4gICAgICAgICAgICAgICAgLm1hcCgoZCwgaSkgPT4gKHtuYW1lOiBmbGF0dGVuZWRBY3RpdmVUaW1lck5hbWVzW2ldLCBtczogZH0pKVxuICAgICAgICAgICAgICAgIC5tYXAoZCA9PiBgJHtkLm5hbWV9OiAke2QubXN9YClcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1sna2VybmVsTXMnXSA9IHtcbiAgICAgICAgICBlcnJvcjogJ1dlYkdMIHF1ZXJ5IHRpbWVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LidcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGxvYWRXYWl0TXMgPSAwO1xuICAgICAgdGhpcy5kb3dubG9hZFdhaXRNcyA9IDA7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pKCk7XG4gIH1cbiAgb3ZlcnJpZGUgbWVtb3J5KCk6IFdlYkdMTWVtb3J5SW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVucmVsaWFibGU6IGZhbHNlLFxuICAgICAgbnVtQnl0ZXNJbkdQVTogdGhpcy5udW1CeXRlc0luR1BVLFxuICAgICAgbnVtQnl0ZXNJbkdQVUFsbG9jYXRlZDogdGhpcy50ZXh0dXJlTWFuYWdlci5udW1CeXRlc0FsbG9jYXRlZCxcbiAgICAgIG51bUJ5dGVzSW5HUFVGcmVlOiB0aGlzLnRleHR1cmVNYW5hZ2VyLm51bUJ5dGVzRnJlZVxuICAgIH0gYXMgV2ViR0xNZW1vcnlJbmZvO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFRpbWVyKCk6IFdlYkdMUXVlcnl8Q1BVVGltZXJRdWVyeSB7XG4gICAgaWYgKGVudigpLmdldE51bWJlcignV0VCR0xfRElTSk9JTlRfUVVFUllfVElNRVJfRVhURU5TSU9OX1JFTElBQkxFJykgPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncGdwdS5iZWdpblF1ZXJ5KCk7XG4gICAgfVxuICAgIHJldHVybiB7c3RhcnRNczogdXRpbC5ub3coKSwgZW5kTXM6IG51bGx9O1xuICB9XG5cbiAgcHJpdmF0ZSBlbmRUaW1lcihxdWVyeTogV2ViR0xRdWVyeXxDUFVUaW1lclF1ZXJ5KTogV2ViR0xRdWVyeXxDUFVUaW1lclF1ZXJ5IHtcbiAgICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9ESVNKT0lOVF9RVUVSWV9USU1FUl9FWFRFTlNJT05fUkVMSUFCTEUnKSA+IDApIHtcbiAgICAgIHRoaXMuZ3BncHUuZW5kUXVlcnkoKTtcbiAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG4gICAgKHF1ZXJ5IGFzIENQVVRpbWVyUXVlcnkpLmVuZE1zID0gdXRpbC5ub3coKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFF1ZXJ5VGltZShxdWVyeTogV2ViR0xRdWVyeXxDUFVUaW1lclF1ZXJ5KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAoZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9ESVNKT0lOVF9RVUVSWV9USU1FUl9FWFRFTlNJT05fUkVMSUFCTEUnKSA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmdwZ3B1LndhaXRGb3JRdWVyeUFuZEdldFRpbWUocXVlcnkgYXMgV2ViR0xRdWVyeSk7XG4gICAgfVxuICAgIGNvbnN0IHRpbWVyUXVlcnkgPSBxdWVyeSBhcyBDUFVUaW1lclF1ZXJ5O1xuICAgIHJldHVybiB0aW1lclF1ZXJ5LmVuZE1zIC0gdGltZXJRdWVyeS5zdGFydE1zO1xuICB9XG5cbiAgcHJpdmF0ZSBwZW5kaW5nRGVsZXRlcyA9IDA7XG5cbiAgLyoqXG4gICAqIERlY3JlYXNlIHRoZSBSZWZDb3VudCBvbiB0aGUgZGF0YUlkIGFuZCBkaXNwb3NlIHRoZSBtZW1vcnkgaWYgdGhlIGRhdGFJZFxuICAgKiBoYXMgMCByZWZDb3VudC4gSWYgdGhlcmUgYXJlIHBlbmRpbmcgcmVhZCBvbiB0aGUgZGF0YSwgdGhlIGRpc3Bvc2FsIHdvdWxkXG4gICAqIGFkZGVkIHRvIHRoZSBwZW5kaW5nIGRlbGV0ZSBxdWV1ZS4gUmV0dXJuIHRydWUgaWYgdGhlIGRhdGFJZCBpcyByZW1vdmVkXG4gICAqIGZyb20gYmFja2VuZCBvciB0aGUgYmFja2VuZCBkb2VzIG5vdCBjb250YWluIHRoZSBkYXRhSWQsIGZhbHNlIGlmIHRoZVxuICAgKiBkYXRhSWQgaXMgbm90IHJlbW92ZWQuIE1lbW9yeSBtYXkgb3IgbWF5IG5vdCBiZSByZWxlYXNlZCBldmVuIHdoZW4gZGF0YUlkXG4gICAqIGlzIHJlbW92ZWQsIHdoaWNoIGFsc28gZGVwZW5kcyBvbiBkYXRhUmVmQ291bnQsIHNlZSBgcmVsZWFzZUdQVWAuXG4gICAqIEBwYXJhbSBkYXRhSWRcbiAgICogQG9hcmFtIGZvcmNlIE9wdGlvbmFsLCByZW1vdmUgdGhlIGRhdGEgcmVnYXJkbGVzcyBvZiByZWZDb3VudFxuICAgKi9cbiAgb3ZlcnJpZGUgZGlzcG9zZURhdGEoZGF0YUlkOiBEYXRhSWQsIGZvcmNlID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nRGlzcG9zYWwuaGFzKGRhdGFJZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBOby1vcCBpZiBhbHJlYWR5IGRpc3Bvc2VkLlxuICAgIGlmICghdGhpcy50ZXhEYXRhLmhhcyhkYXRhSWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBpZiBmb3JjZSBmbGFnIGlzIHNldCwgY2hhbmdlIHJlZkNvdW50IHRvIDAsIHRoaXMgd291bGQgZW5zdXJlIGRpc3Bvc2FsXG4gICAgLy8gd2hlbiBhZGRlZCB0byB0aGUgcGVuZGluZ0Rpc3Bvc2FsIHF1ZXVlLiBNZW1vcnkgbWF5IG9yIG1heSBub3QgYmVcbiAgICAvLyByZWxlYXNlZCwgd2hpY2ggYWxzbyBkZXBlbmRzIG9uIGRhdGFSZWZDb3VudCwgc2VlIGByZWxlYXNlR1BVYC5cbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgIHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKS5yZWZDb3VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKS5yZWZDb3VudC0tO1xuICAgIH1cblxuICAgIGlmICghZm9yY2UgJiYgdGhpcy50ZXhEYXRhLmdldChkYXRhSWQpLnJlZkNvdW50ID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBlbmRpbmdSZWFkLmhhcyhkYXRhSWQpKSB7XG4gICAgICB0aGlzLnBlbmRpbmdEaXNwb3NhbC5hZGQoZGF0YUlkKTtcbiAgICAgIHRoaXMucGVuZGluZ0RlbGV0ZXMrKztcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbGVhc2VHUFVEYXRhKGRhdGFJZCk7XG4gICAgY29uc3Qge2NvbXBsZXhUZW5zb3JJbmZvc30gPSB0aGlzLnRleERhdGEuZ2V0KGRhdGFJZCk7XG4gICAgaWYgKGNvbXBsZXhUZW5zb3JJbmZvcyAhPSBudWxsKSB7XG4gICAgICB0aGlzLmRpc3Bvc2VEYXRhKGNvbXBsZXhUZW5zb3JJbmZvcy5yZWFsLmRhdGFJZCwgZm9yY2UpO1xuICAgICAgdGhpcy5kaXNwb3NlRGF0YShjb21wbGV4VGVuc29ySW5mb3MuaW1hZy5kYXRhSWQsIGZvcmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleERhdGEuZGVsZXRlKGRhdGFJZCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsZWFzZUdQVURhdGEoZGF0YUlkOiBEYXRhSWQpOiB2b2lkIHtcbiAgICBjb25zdCB7dGV4dHVyZSwgZHR5cGUsIHRleFNoYXBlLCB1c2FnZSwgaXNQYWNrZWQsIHNsaWNlfSA9XG4gICAgICAgIHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKTtcbiAgICBjb25zdCBrZXkgPSBzbGljZSAmJiBzbGljZS5vcmlnRGF0YUlkIHx8IGRhdGFJZDtcbiAgICBjb25zdCByZWZDb3VudCA9IHRoaXMuZGF0YVJlZkNvdW50LmdldChrZXkpO1xuXG4gICAgaWYgKHJlZkNvdW50ID4gMSkge1xuICAgICAgdGhpcy5kYXRhUmVmQ291bnQuc2V0KGtleSwgcmVmQ291bnQgLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhUmVmQ291bnQuZGVsZXRlKGtleSk7XG4gICAgICBpZiAodGV4dHVyZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMubnVtQnl0ZXNJbkdQVSAtPSB0aGlzLmNvbXB1dGVCeXRlcyh0ZXhTaGFwZSwgZHR5cGUpO1xuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbGVhc2VUZXh0dXJlKHRleHR1cmUsIHRleFNoYXBlLCB1c2FnZSwgaXNQYWNrZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRleERhdGEgPSB0aGlzLnRleERhdGEuZ2V0KGRhdGFJZCk7XG4gICAgdGV4RGF0YS50ZXh0dXJlID0gbnVsbDtcbiAgICB0ZXhEYXRhLnRleFNoYXBlID0gbnVsbDtcbiAgICB0ZXhEYXRhLmlzUGFja2VkID0gZmFsc2U7XG4gICAgdGV4RGF0YS5zbGljZSA9IG51bGw7XG4gIH1cblxuICBnZXRUZXh0dXJlKGRhdGFJZDogRGF0YUlkKTogV2ViR0xUZXh0dXJlIHtcbiAgICB0aGlzLnVwbG9hZFRvR1BVKGRhdGFJZCk7XG4gICAgcmV0dXJuIHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKS50ZXh0dXJlLnRleHR1cmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpbnRlcm5hbCBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmljIGRhdGEgYnVja2V0LiBVc2VkIGluIHVuaXRcbiAgICogdGVzdHMuXG4gICAqL1xuICBnZXREYXRhSW5mbyhkYXRhSWQ6IERhdGFJZCk6IFRleHR1cmVEYXRhIHtcbiAgICByZXR1cm4gdGhpcy50ZXhEYXRhLmdldChkYXRhSWQpO1xuICB9XG5cbiAgLypcbiAgVGVzdHMgd2hldGhlciBhbGwgdGhlIGlucHV0cyB0byBhbiBvcCBhcmUgc21hbGwgYW5kIG9uIHRoZSBDUFUuIFRoaXMgaGV1cmlzdGljXG4gIGRldGVybWluZXMgd2hlbiBpdCB3b3VsZCBiZSBmYXN0ZXIgdG8gZXhlY3V0ZSBhIGtlcm5lbCBvbiB0aGUgQ1BVLiBXZWJHTFxuICBrZXJuZWxzIG9wdCBpbnRvIHJ1bm5pbmcgdGhpcyBjaGVjayBhbmQgZm9yd2FyZGluZyB3aGVuIGFwcHJvcHJpYXRlLlxuICBUT0RPKGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMvaXNzdWVzLzg3Mik6IERldmVsb3AgYSBtb3JlXG4gIHN1c3RhaW5hYmxlIHN0cmF0ZWd5IGZvciBvcHRpbWl6aW5nIGJhY2tlbmQgZXhlY3V0aW9uIG9mIG9wcy5cbiAgICovXG4gIHNob3VsZEV4ZWN1dGVPbkNQVShcbiAgICAgIGlucHV0czogVGVuc29ySW5mb1tdLFxuICAgICAgc2l6ZVRocmVzaG9sZCA9IENQVV9IQU5ET0ZGX1NJWkVfVEhSRVNIT0xEKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGVudigpLmdldEJvb2woJ1dFQkdMX0NQVV9GT1JXQVJEJykgJiZcbiAgICAgICAgaW5wdXRzLmV2ZXJ5KFxuICAgICAgICAgICAgaW5wdXQgPT4gdGhpcy50ZXhEYXRhLmdldChpbnB1dC5kYXRhSWQpLnRleHR1cmUgPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZSkgPCBzaXplVGhyZXNob2xkKTtcbiAgfVxuXG4gIGdldEdQR1BVQ29udGV4dCgpOiBHUEdQVUNvbnRleHQge1xuICAgIHJldHVybiB0aGlzLmdwZ3B1O1xuICB9XG5cbiAgd2hlcmUoY29uZGl0aW9uOiBUZW5zb3IpOiBUZW5zb3IyRCB7XG4gICAgYmFja2VuZF91dGlsLndhcm4oXG4gICAgICAgICd0Zi53aGVyZSgpIGluIHdlYmdsIGxvY2tzIHRoZSBVSSB0aHJlYWQuICcgK1xuICAgICAgICAnQ2FsbCB0Zi53aGVyZUFzeW5jKCkgaW5zdGVhZCcpO1xuICAgIGNvbnN0IGNvbmRWYWxzID0gY29uZGl0aW9uLmRhdGFTeW5jKCk7XG4gICAgcmV0dXJuIHdoZXJlSW1wbChjb25kaXRpb24uc2hhcGUsIGNvbmRWYWxzKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFja2VkVW5hcnlPcCh4OiBUZW5zb3JJbmZvLCBvcDogc3RyaW5nLCBkdHlwZTogRGF0YVR5cGUpIHtcbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IFVuYXJ5T3BQYWNrZWRQcm9ncmFtKHguc2hhcGUsIG9wKTtcbiAgICBjb25zdCBvdXRJbmZvID0gdGhpcy5jb21waWxlQW5kUnVuKHByb2dyYW0sIFt4XSwgZHR5cGUpO1xuICAgIHJldHVybiBlbmdpbmUoKS5tYWtlVGVuc29yRnJvbVRlbnNvckluZm8ob3V0SW5mbyk7XG4gIH1cblxuICAvLyBUT0RPKG1zb3VsYW5pbGxlKSByZW1vdmUgdGhpcyBvbmNlIHRoZSBiYWNrZW5kIGhhcyBiZWVuIG1vZHVsYXJpemVkXG4gIC8vIGEgY29weSBpcyBuZWVkZWQgaGVyZSB0byBicmVhayBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gIC8vIEFsc28gcmVtb3ZlIHRoZSBvcCBmcm9tIHVuYXJ5X29wLlxuICBhYnM8VCBleHRlbmRzIFRlbnNvcj4oeDogVCk6IFQge1xuICAgIC8vIFRPRE86IGhhbmRsZSBjYXNlcyB3aGVuIHggaXMgY29tcGxleC5cbiAgICBpZiAodGhpcy5zaG91bGRFeGVjdXRlT25DUFUoW3hdKSAmJiB4LmR0eXBlICE9PSAnY29tcGxleDY0Jykge1xuICAgICAgY29uc3Qgb3V0VmFsdWVzID1cbiAgICAgICAgICBzaW1wbGVBYnNJbXBsQ1BVKHRoaXMudGV4RGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5KTtcbiAgICAgIHJldHVybiB0aGlzLm1ha2VPdXRwdXQoeC5zaGFwZSwgeC5kdHlwZSwgb3V0VmFsdWVzKTtcbiAgICB9XG5cbiAgICBpZiAoZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19VTkFSWV9PUEVSQVRJT05TJykpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhY2tlZFVuYXJ5T3AoeCwgdW5hcnlfb3AuQUJTLCB4LmR0eXBlKSBhcyBUO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyYW0gPSBuZXcgVW5hcnlPcFByb2dyYW0oeC5zaGFwZSwgdW5hcnlfb3AuQUJTKTtcbiAgICBjb25zdCBvdXRJbmZvID0gdGhpcy5jb21waWxlQW5kUnVuKHByb2dyYW0sIFt4XSk7XG4gICAgcmV0dXJuIGVuZ2luZSgpLm1ha2VUZW5zb3JGcm9tVGVuc29ySW5mbyhvdXRJbmZvKSBhcyBUO1xuICB9XG5cbiAgbWFrZVRlbnNvckluZm8oXG4gICAgICBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICAgIHZhbHVlcz86IEJhY2tlbmRWYWx1ZXN8c3RyaW5nW10pOiBUZW5zb3JJbmZvIHtcbiAgICBsZXQgZGF0YUlkO1xuICAgIGlmIChkdHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsdWVzICE9IG51bGwgJiYgdmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdXRpbC5pc1N0cmluZyh2YWx1ZXNbMF0pKSB7XG4gICAgICBjb25zdCBlbmNvZGVkVmFsdWVzID1cbiAgICAgICAgICAodmFsdWVzIGFzIHVua25vd24gYXMgc3RyaW5nW10pLm1hcChkID0+IHV0aWwuZW5jb2RlU3RyaW5nKGQpKTtcblxuICAgICAgZGF0YUlkID0gdGhpcy53cml0ZShlbmNvZGVkVmFsdWVzLCBzaGFwZSwgZHR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhSWQgPSB0aGlzLndyaXRlKHZhbHVlcyBhcyBUeXBlZEFycmF5LCBzaGFwZSwgZHR5cGUpO1xuICAgIH1cblxuICAgIHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKS51c2FnZSA9IG51bGw7XG4gICAgcmV0dXJuIHtkYXRhSWQsIHNoYXBlLCBkdHlwZX07XG4gIH1cblxuICBwcml2YXRlIG1ha2VPdXRwdXQ8VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgICBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSwgdmFsdWVzPzogQmFja2VuZFZhbHVlcyk6IFQge1xuICAgIHJldHVybiBlbmdpbmUoKS5tYWtlVGVuc29yRnJvbVRlbnNvckluZm8oXG4gICAgICAgICAgICAgICB0aGlzLm1ha2VUZW5zb3JJbmZvKHNoYXBlLCBkdHlwZSwgdmFsdWVzKSwgdGhpcykgYXMgVDtcbiAgfVxuXG4gIHVucGFja1RlbnNvcihpbnB1dDogVGVuc29ySW5mbyk6IFRlbnNvckluZm8ge1xuICAgIGNvbnN0IHByb2dyYW0gPSBuZXcgVW5wYWNrUHJvZ3JhbShpbnB1dC5zaGFwZSk7XG4gICAgcmV0dXJuIHRoaXMucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFtpbnB1dF0sIGlucHV0LmR0eXBlKTtcbiAgfVxuXG4gIHBhY2tUZW5zb3IoaW5wdXQ6IFRlbnNvckluZm8pOiBUZW5zb3JJbmZvIHtcbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IFBhY2tQcm9ncmFtKGlucHV0LnNoYXBlKTtcbiAgICBjb25zdCBwcmV2ZW50RWFnZXJVbnBhY2tpbmdPdXRwdXQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgICAgcHJvZ3JhbSwgW2lucHV0XSwgaW5wdXQuZHR5cGUsIG51bGwgLyogY3VzdG9tVW5pZm9ybVZhbHVlcyAqLyxcbiAgICAgICAgcHJldmVudEVhZ2VyVW5wYWNraW5nT3V0cHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFja2VkUmVzaGFwZShpbnB1dDogVGVuc29ySW5mbywgYWZ0ZXJTaGFwZTogbnVtYmVyW10pOiBUZW5zb3JJbmZvIHtcbiAgICBjb25zdCBpbnB1dDNEU2hhcGUgPSBbXG4gICAgICB3ZWJnbF91dGlsLmdldEJhdGNoRGltKGlucHV0LnNoYXBlKSxcbiAgICAgIC4uLndlYmdsX3V0aWwuZ2V0Um93c0NvbHMoaW5wdXQuc2hhcGUpXG4gICAgXSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgY29uc3QgaW5wdXQzRDogVGVuc29ySW5mbyA9IHtcbiAgICAgIGR0eXBlOiBpbnB1dC5kdHlwZSxcbiAgICAgIHNoYXBlOiBpbnB1dDNEU2hhcGUsXG4gICAgICBkYXRhSWQ6IGlucHV0LmRhdGFJZFxuICAgIH07XG4gICAgY29uc3QgYWZ0ZXJTaGFwZUFzM0QgPSBbXG4gICAgICB3ZWJnbF91dGlsLmdldEJhdGNoRGltKGFmdGVyU2hhcGUpLCAuLi53ZWJnbF91dGlsLmdldFJvd3NDb2xzKGFmdGVyU2hhcGUpXG4gICAgXSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IFJlc2hhcGVQYWNrZWRQcm9ncmFtKGFmdGVyU2hhcGVBczNELCBpbnB1dDNEU2hhcGUpO1xuICAgIGNvbnN0IHByZXZlbnRFYWdlclVucGFja2luZ09mT3V0cHV0ID0gdHJ1ZTtcbiAgICBjb25zdCBjdXN0b21WYWx1ZXMgPSBbaW5wdXQzRFNoYXBlXTtcbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgICAgcHJvZ3JhbSwgW2lucHV0M0RdLCBpbnB1dC5kdHlwZSwgY3VzdG9tVmFsdWVzLFxuICAgICAgICBwcmV2ZW50RWFnZXJVbnBhY2tpbmdPZk91dHB1dCk7XG4gICAgcmV0dXJuIHtkYXRhSWQ6IG91dHB1dC5kYXRhSWQsIHNoYXBlOiBhZnRlclNoYXBlLCBkdHlwZTogb3V0cHV0LmR0eXBlfTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjb2RlKGRhdGFJZDogRGF0YUlkLCBjdXN0b21UZXhTaGFwZT86IFtudW1iZXIsIG51bWJlcl0pOlxuICAgICAgVGVuc29ySW5mbyB7XG4gICAgY29uc3QgdGV4RGF0YSA9IHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKTtcbiAgICBjb25zdCB7aXNQYWNrZWQsIHNoYXBlLCBkdHlwZX0gPSB0ZXhEYXRhO1xuICAgIGlmIChjdXN0b21UZXhTaGFwZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBzaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgICAgIGNvbnN0IHRleFNpemUgPSBjdXN0b21UZXhTaGFwZVswXSAqIGN1c3RvbVRleFNoYXBlWzFdICogNDtcbiAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgIHNpemUgPD0gdGV4U2l6ZSxcbiAgICAgICAgICAoKSA9PiAnY3VzdG9tVGV4U2hhcGUgaXMgdG9vIHNtYWxsLiAnICtcbiAgICAgICAgICAgICAgJ1JvdyAqIENvbHVtbiAqIDQgc2hvdWxkIGJlIGVxdWFsIG9yIGxhcmdlciB0aGFuIHRoZSAnICtcbiAgICAgICAgICAgICAgJ3NpemUgb2YgdGhlIHRlbnNvciBkYXRhLicpO1xuICAgIH1cbiAgICBjb25zdCBzaGFwZUFzM0QgPVxuICAgICAgICB3ZWJnbF91dGlsLmdldFNoYXBlQXMzRChzaGFwZSkgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGxldCBwcm9ncmFtO1xuICAgIGlmIChpc1BhY2tlZCkge1xuICAgICAgcHJvZ3JhbSA9IG5ldyBEZWNvZGVNYXRyaXhQYWNrZWRQcm9ncmFtKHNoYXBlQXMzRCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW0gPSBuZXcgRGVjb2RlTWF0cml4UHJvZ3JhbShzaGFwZUFzM0QpO1xuICAgIH1cbiAgICBjb25zdCBwcmV2ZW50RWFnZXJVbnBhY2tpbmdPZk91dHB1dCA9IHRydWU7XG4gICAgY29uc3QgY3VzdG9tVmFsdWVzID1cbiAgICAgICAgW2N1c3RvbVRleFNoYXBlICE9IG51bGwgPyBjdXN0b21UZXhTaGFwZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4X3V0aWwuZ2V0RGVuc2VUZXhTaGFwZShzaGFwZUFzM0QpXTtcbiAgICBjb25zdCBvdXQgPSB0aGlzLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgICAgcHJvZ3JhbSwgW3tzaGFwZTogc2hhcGVBczNELCBkdHlwZSwgZGF0YUlkfV0sIGR0eXBlLCBjdXN0b21WYWx1ZXMsXG4gICAgICAgIHByZXZlbnRFYWdlclVucGFja2luZ09mT3V0cHV0LCBjdXN0b21UZXhTaGFwZSk7XG4gICAgcmV0dXJuIHtkdHlwZSwgc2hhcGUsIGRhdGFJZDogb3V0LmRhdGFJZH07XG4gIH1cblxuICBydW5XZWJHTFByb2dyYW0oXG4gICAgICBwcm9ncmFtOiBHUEdQVVByb2dyYW0sIGlucHV0czogVGVuc29ySW5mb1tdLCBvdXRwdXREdHlwZTogRGF0YVR5cGUsXG4gICAgICBjdXN0b21Vbmlmb3JtVmFsdWVzPzogbnVtYmVyW11bXSwgcHJldmVudEVhZ2VyVW5wYWNraW5nT2ZPdXRwdXQgPSBmYWxzZSxcbiAgICAgIGN1c3RvbVRleFNoYXBlPzogW251bWJlciwgbnVtYmVyXSk6IFRlbnNvckluZm8ge1xuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMubWFrZVRlbnNvckluZm8ocHJvZ3JhbS5vdXRwdXRTaGFwZSwgb3V0cHV0RHR5cGUpO1xuICAgIGNvbnN0IG91dERhdGEgPSB0aGlzLnRleERhdGEuZ2V0KG91dHB1dC5kYXRhSWQpO1xuICAgIGlmIChwcm9ncmFtLnBhY2tlZE91dHB1dCkge1xuICAgICAgb3V0RGF0YS5pc1BhY2tlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChwcm9ncmFtLm91dFBhY2tpbmdTY2hlbWUgPT09IHRleF91dGlsLlBhY2tpbmdTY2hlbWUuREVOU0UpIHtcbiAgICAgIGNvbnN0IHRleGVsU2hhcGUgPSBjdXN0b21UZXhTaGFwZSAhPSBudWxsID9cbiAgICAgICAgICBjdXN0b21UZXhTaGFwZSA6XG4gICAgICAgICAgdGV4X3V0aWwuZ2V0RGVuc2VUZXhTaGFwZShwcm9ncmFtLm91dHB1dFNoYXBlKTtcbiAgICAgIC8vIEZvciBhIGRlbnNlbHkgcGFja2VkIG91dHB1dCwgd2UgZXhwbGljaXRseSBzZXQgdGV4U2hhcGVcbiAgICAgIC8vIHNvIGl0IGRvZXNuJ3QgZ2V0IGFzc2lnbmVkIGxhdGVyIGFjY29yZGluZyB0byBvdXIgdHlwaWNhbCBwYWNraW5nXG4gICAgICAvLyBzY2hlbWUgd2hlcmVpbiBhIHNpbmdsZSB0ZXhlbCBjYW4gb25seSBjb250YWluIHZhbHVlcyBmcm9tIGFkamFjZW50XG4gICAgICAvLyByb3dzL2NvbHMuXG4gICAgICBvdXREYXRhLnRleFNoYXBlID0gdGV4ZWxTaGFwZS5tYXAoZCA9PiBkICogMikgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICB9XG4gICAgaWYgKHByb2dyYW0ub3V0VGV4VXNhZ2UgIT0gbnVsbCkge1xuICAgICAgb3V0RGF0YS51c2FnZSA9IHByb2dyYW0ub3V0VGV4VXNhZ2U7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShvdXRwdXQuc2hhcGUpID09PSAwKSB7XG4gICAgICAvLyBTaG9ydC1jaXJjdWl0IHRoZSBjb21wdXRhdGlvbiBzaW5jZSB0aGUgcmVzdWx0IGlzIGVtcHR5IChoYXMgMCBpbiBpdHNcbiAgICAgIC8vIHNoYXBlKS5cbiAgICAgIG91dERhdGEudmFsdWVzID1cbiAgICAgICAgICB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUob3V0cHV0LmR0eXBlIGFzICdmbG9hdDMyJywgMCk7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFUb0Rpc3Bvc2U6IFRlbnNvckluZm9bXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0c0RhdGE6IFRlbnNvckRhdGFbXSA9IGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgaWYgKGlucHV0LmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgR1BHUFVQcm9ncmFtIGRvZXMgbm90IHN1cHBvcnQgY29tcGxleDY0IGlucHV0LiBGb3IgY29tcGxleDY0IGAgK1xuICAgICAgICAgICAgYGR0eXBlcywgcGxlYXNlIHNlcGFyYXRlIHRoZSBwcm9ncmFtIGludG8gcmVhbCBhbmQgaW1hZ2luYXJ5IGAgK1xuICAgICAgICAgICAgYHBhcnRzLmApO1xuICAgICAgfVxuXG4gICAgICBsZXQgdGV4RGF0YSA9IHRoaXMudGV4RGF0YS5nZXQoaW5wdXQuZGF0YUlkKTtcblxuICAgICAgaWYgKHRleERhdGEudGV4dHVyZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICghcHJvZ3JhbS5wYWNrZWRJbnB1dHMgJiZcbiAgICAgICAgICAgIHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZSkgPD1cbiAgICAgICAgICAgICAgICBlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX1NJWkVfVVBMT0FEX1VOSUZPUk0nKSkge1xuICAgICAgICAgIC8vIFVwbG9hZCBzbWFsbCB0ZW5zb3JzIHRoYXQgbGl2ZSBvbiB0aGUgQ1BVIGFzIHVuaWZvcm1zLCBub3QgYXNcbiAgICAgICAgICAvLyB0ZXh0dXJlcy4gRG8gdGhpcyBvbmx5IHdoZW4gdGhlIGVudmlyb25tZW50IHN1cHBvcnRzIDMyYml0IGZsb2F0c1xuICAgICAgICAgIC8vIGR1ZSB0byBwcm9ibGVtcyB3aGVuIGNvbXBhcmluZyAxNmJpdCBmbG9hdHMgd2l0aCAzMmJpdCBmbG9hdHMuXG4gICAgICAgICAgLy8gVE9ETyhodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2lzc3Vlcy84MjEpOiBNYWtlIGl0XG4gICAgICAgICAgLy8gcG9zc2libGUgZm9yIHBhY2tlZCBzaGFkZXJzIHRvIHNhbXBsZSBmcm9tIHVuaWZvcm1zLlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaGFwZTogaW5wdXQuc2hhcGUsXG4gICAgICAgICAgICB0ZXhEYXRhOiBudWxsLFxuICAgICAgICAgICAgaXNVbmlmb3JtOiB0cnVlLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlczogdGV4RGF0YS52YWx1ZXMgYXMgVHlwZWRBcnJheVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBpZiBhIHBhY2tlZCBwcm9ncmFtJ3MgaW5wdXRzIGhhdmUgbm90IHlldCBiZWVuXG4gICAgICAgIC8vIHVwbG9hZGVkIHRvIHRoZSBHUFUsIHRoZXkgZ2V0IHVwbG9hZGVkIGFzIHBhY2tlZCByaWdodCBvZmYgdGhlIGJhdC5cbiAgICAgICAgaWYgKHByb2dyYW0ucGFja2VkSW5wdXRzKSB7XG4gICAgICAgICAgdGV4RGF0YS5pc1BhY2tlZCA9IHRydWU7XG4gICAgICAgICAgdGV4RGF0YS5zaGFwZSA9IGlucHV0LnNoYXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBsb2FkVG9HUFUoaW5wdXQuZGF0YUlkKTtcbiAgICAgIGlmICghIXRleERhdGEuaXNQYWNrZWQgIT09ICEhcHJvZ3JhbS5wYWNrZWRJbnB1dHMpIHtcbiAgICAgICAgaW5wdXQgPSB0ZXhEYXRhLmlzUGFja2VkID8gdGhpcy51bnBhY2tUZW5zb3IoaW5wdXQpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWNrVGVuc29yKGlucHV0KTtcbiAgICAgICAgZGF0YVRvRGlzcG9zZS5wdXNoKGlucHV0KTtcbiAgICAgICAgdGV4RGF0YSA9IHRoaXMudGV4RGF0YS5nZXQoaW5wdXQuZGF0YUlkKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGV4RGF0YS5pc1BhY2tlZCAmJlxuICAgICAgICAgICF3ZWJnbF91dGlsLmlzUmVzaGFwZUZyZWUodGV4RGF0YS5zaGFwZSwgaW5wdXQuc2hhcGUpKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgYSB0ZXh0dXJlIGV4aXN0cyBmb3IgYSB0ZW5zb3JcbiAgICAgICAgLy8gYnV0IHRoZSBzaGFwZXMgYXJlIGluY29tcGF0aWJsZSAoZHVlIHRvIHBhY2tpbmcgY29uc3RyYWludHMpIGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHRlbnNvciBkaWQgbm90IGhhdmUgYSBjaGFuY2UgdG8gZ28gdGhyb3VnaCB0aGUgcGFja2VkIHJlc2hhcGVcbiAgICAgICAgLy8gc2hhZGVyLiBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIHdlIHJlc2hhcGUgdGhlICpzYW1lKiB0ZW5zb3IgdG8gZm9ybVxuICAgICAgICAvLyAqZGlzdGluY3QqIGlucHV0cyB0byBhbiBvcCwgZS5nLiBkb3R0aW5nIGEgdmVjdG9yIHdpdGggaXRzZWxmLiBUaGlzXG4gICAgICAgIC8vIGNhc2Ugd2lsbCBkaXNhcHBlYXIgb25jZSBwYWNrZWQgdXBsb2FkaW5nIGlzIHRoZSBkZWZhdWx0LlxuXG4gICAgICAgIGNvbnN0IHNhdmVkSW5wdXQgPSBpbnB1dDtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2hhcGUgPSBpbnB1dC5zaGFwZTtcblxuICAgICAgICBpbnB1dC5zaGFwZSA9IHRleERhdGEuc2hhcGU7XG4gICAgICAgIGlucHV0ID0gdGhpcy5wYWNrZWRSZXNoYXBlKGlucHV0IGFzIFRlbnNvciwgdGFyZ2V0U2hhcGUpO1xuICAgICAgICBkYXRhVG9EaXNwb3NlLnB1c2goaW5wdXQpO1xuICAgICAgICB0ZXhEYXRhID0gdGhpcy50ZXhEYXRhLmdldChpbnB1dC5kYXRhSWQpO1xuXG4gICAgICAgIHNhdmVkSW5wdXQuc2hhcGUgPSB0YXJnZXRTaGFwZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtzaGFwZTogaW5wdXQuc2hhcGUsIHRleERhdGEsIGlzVW5pZm9ybTogZmFsc2V9O1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGxvYWRUb0dQVShvdXRwdXQuZGF0YUlkKTtcbiAgICBjb25zdCBvdXRwdXREYXRhOlxuICAgICAgICBUZW5zb3JEYXRhID0ge3NoYXBlOiBvdXRwdXQuc2hhcGUsIHRleERhdGE6IG91dERhdGEsIGlzVW5pZm9ybTogZmFsc2V9O1xuICAgIGNvbnN0IGtleSA9IGdwZ3B1X21hdGgubWFrZVNoYWRlcktleShwcm9ncmFtLCBpbnB1dHNEYXRhLCBvdXRwdXREYXRhKTtcbiAgICBjb25zdCBiaW5hcnkgPSB0aGlzLmdldEFuZFNhdmVCaW5hcnkoa2V5LCAoKSA9PiB7XG4gICAgICByZXR1cm4gZ3BncHVfbWF0aC5jb21waWxlUHJvZ3JhbShcbiAgICAgICAgICB0aGlzLmdwZ3B1LCBwcm9ncmFtLCBpbnB1dHNEYXRhLCBvdXRwdXREYXRhKTtcbiAgICB9KTtcbiAgICBjb25zdCBzaG91bGRUaW1lUHJvZ3JhbSA9IHRoaXMuYWN0aXZlVGltZXJzICE9IG51bGw7XG4gICAgbGV0IHF1ZXJ5OiBXZWJHTFF1ZXJ5fENQVVRpbWVyUXVlcnk7XG4gICAgaWYgKHNob3VsZFRpbWVQcm9ncmFtKSB7XG4gICAgICBxdWVyeSA9IHRoaXMuc3RhcnRUaW1lcigpO1xuICAgIH1cblxuICAgIGlmICghZW52KCkuZ2V0KCdFTkdJTkVfQ09NUElMRV9PTkxZJykpIHtcbiAgICAgIGdwZ3B1X21hdGgucnVuUHJvZ3JhbShcbiAgICAgICAgICB0aGlzLmdwZ3B1LCBiaW5hcnksIGlucHV0c0RhdGEsIG91dHB1dERhdGEsIGN1c3RvbVVuaWZvcm1WYWx1ZXMpO1xuICAgIH1cblxuICAgIGRhdGFUb0Rpc3Bvc2UuZm9yRWFjaChpbmZvID0+IHRoaXMuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oaW5mbykpO1xuXG4gICAgaWYgKHNob3VsZFRpbWVQcm9ncmFtKSB7XG4gICAgICBxdWVyeSA9IHRoaXMuZW5kVGltZXIocXVlcnkpO1xuICAgICAgdGhpcy5hY3RpdmVUaW1lcnMucHVzaChcbiAgICAgICAgICB7bmFtZTogcHJvZ3JhbS5jb25zdHJ1Y3Rvci5uYW1lLCBxdWVyeTogdGhpcy5nZXRRdWVyeVRpbWUocXVlcnkpfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2xGbHVzaFRocmVzaG9sZCA9IGVudigpLmdldE51bWJlcignV0VCR0xfRkxVU0hfVEhSRVNIT0xEJyk7XG4gICAgLy8gTWFudWFsbHkgR0wgZmx1c2ggcmVxdWVzdGVkXG4gICAgaWYgKGdsRmx1c2hUaHJlc2hvbGQgPiAwKSB7XG4gICAgICBjb25zdCB0aW1lID0gdXRpbC5ub3coKTtcbiAgICAgIGlmICgodGltZSAtIHRoaXMubGFzdEdsRmx1c2hUaW1lKSA+IGdsRmx1c2hUaHJlc2hvbGQpIHtcbiAgICAgICAgdGhpcy5ncGdwdS5nbC5mbHVzaCgpO1xuICAgICAgICB0aGlzLmxhc3RHbEZsdXNoVGltZSA9IHRpbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFlbnYoKS5nZXRCb29sKCdXRUJHTF9MQVpJTFlfVU5QQUNLJykgJiYgb3V0RGF0YS5pc1BhY2tlZCAmJlxuICAgICAgICBwcmV2ZW50RWFnZXJVbnBhY2tpbmdPZk91dHB1dCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHVucGFja2VkID0gdGhpcy51bnBhY2tUZW5zb3Iob3V0cHV0KTtcbiAgICAgIHRoaXMuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ob3V0cHV0KTtcbiAgICAgIHJldHVybiB1bnBhY2tlZDtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIGNvbXBpbGVBbmRSdW4oXG4gICAgICBwcm9ncmFtOiBHUEdQVVByb2dyYW0sIGlucHV0czogVGVuc29ySW5mb1tdLCBvdXRwdXREdHlwZT86IERhdGFUeXBlLFxuICAgICAgY3VzdG9tVW5pZm9ybVZhbHVlcz86IG51bWJlcltdW10sXG4gICAgICBwcmV2ZW50RWFnZXJVbnBhY2tpbmdPZk91dHB1dCA9IGZhbHNlKTogVGVuc29ySW5mbyB7XG4gICAgb3V0cHV0RHR5cGUgPSBvdXRwdXREdHlwZSB8fCBpbnB1dHNbMF0uZHR5cGU7XG4gICAgY29uc3Qgb3V0SW5mbyA9IHRoaXMucnVuV2ViR0xQcm9ncmFtKFxuICAgICAgICBwcm9ncmFtLCBpbnB1dHMsIG91dHB1dER0eXBlLCBjdXN0b21Vbmlmb3JtVmFsdWVzLFxuICAgICAgICBwcmV2ZW50RWFnZXJVbnBhY2tpbmdPZk91dHB1dCk7XG4gICAgcmV0dXJuIG91dEluZm87XG4gIH1cblxuICBwcml2YXRlIGdldEFuZFNhdmVCaW5hcnkoa2V5OiBzdHJpbmcsIGdldEJpbmFyeTogKCkgPT4gR1BHUFVCaW5hcnkpOlxuICAgICAgR1BHUFVCaW5hcnkge1xuICAgIGlmICghKGtleSBpbiB0aGlzLmJpbmFyeUNhY2hlKSkge1xuICAgICAgdGhpcy5iaW5hcnlDYWNoZVtrZXldID0gZ2V0QmluYXJ5KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJpbmFyeUNhY2hlW2tleV07XG4gIH1cblxuICBnZXRUZXh0dXJlTWFuYWdlcigpOiBUZXh0dXJlTWFuYWdlciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dHVyZU1hbmFnZXI7XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG5cbiAgb3ZlcnJpZGUgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBBdm9pZCBkaXNwb3NpbmcgdGhlIGNvbXBpbGVkIHdlYmdsIHByb2dyYW1zIGR1cmluZyB1bml0IHRlc3RpbmcgYmVjYXVzZVxuICAgIC8vIGl0IHNsb3dzIGRvd24gdGVzdCBleGVjdXRpb24uXG4gICAgaWYgKCFlbnYoKS5nZXRCb29sKCdJU19URVNUJykpIHtcbiAgICAgIGNvbnN0IGFsbEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmJpbmFyeUNhY2hlKTtcbiAgICAgIGFsbEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICB0aGlzLmdwZ3B1LmRlbGV0ZVByb2dyYW0odGhpcy5iaW5hcnlDYWNoZVtrZXldLndlYkdMUHJvZ3JhbSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJpbmFyeUNhY2hlW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlci5kaXNwb3NlKCk7XG4gICAgaWYgKHRoaXMuY2FudmFzICE9IG51bGwgJiZcbiAgICAgICAgKHR5cGVvZiAoSFRNTENhbnZhc0VsZW1lbnQpICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgdGhpcy5jYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkpIHtcbiAgICAgIHRoaXMuY2FudmFzLnJlbW92ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmdwZ3B1Q3JlYXRlZExvY2FsbHkpIHtcbiAgICAgIHRoaXMuZ3BncHUucHJvZ3JhbSA9IG51bGw7XG4gICAgICB0aGlzLmdwZ3B1LmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gIH1cblxuICBvdmVycmlkZSBmbG9hdFByZWNpc2lvbigpOiAxNnwzMiB7XG4gICAgaWYgKHRoaXMuZmxvYXRQcmVjaXNpb25WYWx1ZSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmZsb2F0UHJlY2lzaW9uVmFsdWUgPSB0aWR5KCgpID0+IHtcbiAgICAgICAgaWYgKCFlbnYoKS5nZXQoJ1dFQkdMX1JFTkRFUl9GTE9BVDMyX0VOQUJMRUQnKSkge1xuICAgICAgICAgIC8vIE1vbWVudGFyaWx5IHN3aXRjaGluZyBERUJVRyBmbGFnIHRvIGZhbHNlIHNvIHdlIGRvbid0IHRocm93IGFuXG4gICAgICAgICAgLy8gZXJyb3IgdHJ5aW5nIHRvIHVwbG9hZCBhIHNtYWxsIHZhbHVlLlxuICAgICAgICAgIGNvbnN0IGRlYnVnRmxhZyA9IGVudigpLmdldEJvb2woJ0RFQlVHJyk7XG4gICAgICAgICAgZW52KCkuc2V0KCdERUJVRycsIGZhbHNlKTtcbiAgICAgICAgICBjb25zdCB1bmRlcmZsb3dDaGVja1ZhbHVlID0gdGhpcy5hYnMoc2NhbGFyKDFlLTgpKS5kYXRhU3luYygpWzBdO1xuICAgICAgICAgIGVudigpLnNldCgnREVCVUcnLCBkZWJ1Z0ZsYWcpO1xuXG4gICAgICAgICAgaWYgKHVuZGVyZmxvd0NoZWNrVmFsdWUgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMzI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAxNjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mbG9hdFByZWNpc2lvblZhbHVlO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyLiAgKi9cbiAgb3ZlcnJpZGUgZXBzaWxvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZsb2F0UHJlY2lzaW9uKCkgPT09IDMyID8gRVBTSUxPTl9GTE9BVDMyIDogRVBTSUxPTl9GTE9BVDE2O1xuICB9XG5cbiAgdXBsb2FkVG9HUFUoZGF0YUlkOiBEYXRhSWQpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXhEYXRhID0gdGhpcy50ZXhEYXRhLmdldChkYXRhSWQpO1xuICAgIGNvbnN0IHtzaGFwZSwgZHR5cGUsIHZhbHVlcywgdGV4dHVyZSwgdXNhZ2UsIGlzUGFja2VkfSA9IHRleERhdGE7XG5cbiAgICBpZiAodGV4dHVyZSAhPSBudWxsKSB7XG4gICAgICAvLyBBcnJheSBpcyBhbHJlYWR5IG9uIEdQVS4gTm8tb3AuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFRpbWVQcm9ncmFtID0gdGhpcy5hY3RpdmVUaW1lcnMgIT0gbnVsbDtcbiAgICBsZXQgc3RhcnQ6IG51bWJlcjtcbiAgICBpZiAoc2hvdWxkVGltZVByb2dyYW0pIHtcbiAgICAgIHN0YXJ0ID0gdXRpbC5ub3coKTtcbiAgICB9XG5cbiAgICBsZXQgdGV4U2hhcGUgPSB0ZXhEYXRhLnRleFNoYXBlO1xuICAgIGlmICh0ZXhTaGFwZSA9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHRleFNoYXBlIG1heSBub3QgYmUgdGhlIGZpbmFsIHRleHR1cmUgc2hhcGUuIEZvciBwYWNrZWQgb3IgZGVuc2VcbiAgICAgIC8vIHRleHR1cmVzLCB0aGUgdGV4U2hhcGUgd2lsbCBiZSBjaGFuZ2VkIHdoZW4gdGV4dHVyZXMgYXJlIGNyZWF0ZWQuXG4gICAgICB0ZXhTaGFwZSA9IHdlYmdsX3V0aWwuZ2V0VGV4dHVyZVNoYXBlRnJvbUxvZ2ljYWxTaGFwZShzaGFwZSwgaXNQYWNrZWQpO1xuICAgICAgdGV4RGF0YS50ZXhTaGFwZSA9IHRleFNoYXBlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2hhcGVBczNEID0gd2ViZ2xfdXRpbC5nZXRTaGFwZUFzM0Qoc2hhcGUpO1xuXG4gICAgICBsZXQgcHJvZ3JhbTtcbiAgICAgIGxldCB3aWR0aCA9IHRleFNoYXBlWzFdLCBoZWlnaHQgPSB0ZXhTaGFwZVswXTtcbiAgICAgIGNvbnN0IGlzQnl0ZUFycmF5ID1cbiAgICAgICAgICB2YWx1ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IHZhbHVlcyBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5O1xuXG4gICAgICAvLyB0ZXh0dXJlIGZvciBmbG9hdCBhcnJheSBpcyBQaHlzaWNhbFRleHR1cmVUeXBlLlBBQ0tFRF8yWDJfRkxPQVQzMiwgd2VcbiAgICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB1cGxvYWQgdXNlcyB0aGUgc2FtZSBwYWNrZWQgc2l6ZVxuICAgICAgaWYgKGlzUGFja2VkIHx8ICFpc0J5dGVBcnJheSkge1xuICAgICAgICBbd2lkdGgsIGhlaWdodF0gPSB0ZXhfdXRpbC5nZXRQYWNrZWRNYXRyaXhUZXh0dXJlU2hhcGVXaWR0aEhlaWdodChcbiAgICAgICAgICAgIHRleFNoYXBlWzBdLCB0ZXhTaGFwZVsxXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1BhY2tlZCkge1xuICAgICAgICBwcm9ncmFtID0gbmV3IEVuY29kZU1hdHJpeFBhY2tlZFByb2dyYW0oc2hhcGVBczNELCBpc0J5dGVBcnJheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9ncmFtID0gbmV3IEVuY29kZU1hdHJpeFByb2dyYW0oc2hhcGVBczNELCBpc0J5dGVBcnJheSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRleFNoYXBlIGZvciBmbG9hdCBhcnJheSBuZWVkcyB0byBiZSB0aGUgb3JpZ2luYWwgc2hhcGUsIHdoaWNoIGJ5dGVcbiAgICAgIC8vIGFycmF5IG5lZWRzIHRvIGJlIHBhY2tlZCBzaXplLiBUaGlzIGFsbG93IHRoZSBkYXRhIHVwbG9hZCBzaGFwZSB0byBiZVxuICAgICAgLy8gbWF0Y2hlZCB3aXRoIHRleHR1cmUgY3JlYXRpb24gbG9naWMuXG4gICAgICBjb25zdCB0ZW1wRGVuc2VJbnB1dFRleFNoYXBlOiBbbnVtYmVyLCBudW1iZXJdID1cbiAgICAgICAgICBpc0J5dGVBcnJheSA/IFtoZWlnaHQsIHdpZHRoXSA6IHRleFNoYXBlO1xuICAgICAgY29uc3QgdGVtcERlbnNlSW5wdXRIYW5kbGUgPVxuICAgICAgICAgIHRoaXMubWFrZVRlbnNvckluZm8odGVtcERlbnNlSW5wdXRUZXhTaGFwZSwgZHR5cGUpO1xuICAgICAgY29uc3QgdGVtcERlbnNlSW5wdXRUZXhEYXRhID1cbiAgICAgICAgICB0aGlzLnRleERhdGEuZ2V0KHRlbXBEZW5zZUlucHV0SGFuZGxlLmRhdGFJZCk7XG4gICAgICBpZiAoaXNCeXRlQXJyYXkpIHtcbiAgICAgICAgdGVtcERlbnNlSW5wdXRUZXhEYXRhLnVzYWdlID0gVGV4dHVyZVVzYWdlLlBJWEVMUztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBEZW5zZUlucHV0VGV4RGF0YS51c2FnZSA9IFRleHR1cmVVc2FnZS5VUExPQUQ7XG4gICAgICB9XG4gICAgICB0ZW1wRGVuc2VJbnB1dFRleERhdGEudGV4U2hhcGUgPSB0ZW1wRGVuc2VJbnB1dFRleFNoYXBlO1xuICAgICAgdGhpcy5ncGdwdS51cGxvYWREZW5zZU1hdHJpeFRvVGV4dHVyZShcbiAgICAgICAgICB0aGlzLmdldFRleHR1cmUodGVtcERlbnNlSW5wdXRIYW5kbGUuZGF0YUlkKSwgd2lkdGgsIGhlaWdodCxcbiAgICAgICAgICB2YWx1ZXMgYXMgVHlwZWRBcnJheSk7XG5cbiAgICAgIGNvbnN0IGN1c3RvbVZhbHVlcyA9IFtbaGVpZ2h0LCB3aWR0aF1dO1xuICAgICAgLy8gV2Ugd2FudCB0aGUgb3V0cHV0IHRvIHJlbWFpbiBwYWNrZWQgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2ZcbiAgICAgIC8vIFdFQkdMX1BBQ0suXG4gICAgICBjb25zdCBwcmV2ZW50RWFnZXJVbnBhY2tpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgZW5jb2RlZE91dHB1dFRhcmdldCA9IHRoaXMucnVuV2ViR0xQcm9ncmFtKFxuICAgICAgICAgIHByb2dyYW0sIFt0ZW1wRGVuc2VJbnB1dEhhbmRsZV0sIGR0eXBlLCBjdXN0b21WYWx1ZXMsXG4gICAgICAgICAgcHJldmVudEVhZ2VyVW5wYWNraW5nKTtcblxuICAgICAgLy8gSGF2ZSB0aGUgb3JpZ2luYWwgdGV4dHVyZSBhc3N1bWUgdGhlIGlkZW50aXR5IG9mIHRoZSBlbmNvZGVkIG91dHB1dC5cbiAgICAgIGNvbnN0IG91dHB1dFRleERhdGEgPSB0aGlzLnRleERhdGEuZ2V0KGVuY29kZWRPdXRwdXRUYXJnZXQuZGF0YUlkKTtcbiAgICAgIHRleERhdGEudGV4U2hhcGUgPSBvdXRwdXRUZXhEYXRhLnRleFNoYXBlO1xuICAgICAgdGV4RGF0YS5pc1BhY2tlZCA9IG91dHB1dFRleERhdGEuaXNQYWNrZWQ7XG4gICAgICB0ZXhEYXRhLnVzYWdlID0gb3V0cHV0VGV4RGF0YS51c2FnZTtcblxuICAgICAgaWYgKCFlbnYoKS5nZXQoJ0VOR0lORV9DT01QSUxFX09OTFknKSkge1xuICAgICAgICB0ZXhEYXRhLnRleHR1cmUgPSBvdXRwdXRUZXhEYXRhLnRleHR1cmU7XG4gICAgICAgIC8vIE9uY2UgdXBsb2FkZWQsIGRvbid0IHN0b3JlIHRoZSB2YWx1ZXMgb24gY3B1LlxuICAgICAgICB0ZXhEYXRhLnZhbHVlcyA9IG51bGw7XG4gICAgICAgIHRoaXMudGV4RGF0YS5kZWxldGUoZW5jb2RlZE91dHB1dFRhcmdldC5kYXRhSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlRGF0YShlbmNvZGVkT3V0cHV0VGFyZ2V0LmRhdGFJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odGVtcERlbnNlSW5wdXRIYW5kbGUpO1xuXG4gICAgICBpZiAoc2hvdWxkVGltZVByb2dyYW0pIHtcbiAgICAgICAgdGhpcy51cGxvYWRXYWl0TXMgKz0gdXRpbC5ub3coKSAtIHN0YXJ0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdUZXh0dXJlID0gdGhpcy5hY3F1aXJlVGV4dHVyZSh0ZXhTaGFwZSwgdXNhZ2UsIGR0eXBlLCBpc1BhY2tlZCk7XG4gICAgICB0ZXhEYXRhLnRleHR1cmUgPSBuZXdUZXh0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEFuZENhY2hlT25DUFUoZGF0YUlkOiBEYXRhSWQsIGZsb2F0MzJWYWx1ZXM/OiBGbG9hdDMyQXJyYXkpOlxuICAgICAgVHlwZWRBcnJheSB7XG4gICAgY29uc3QgdGV4RGF0YSA9IHRoaXMudGV4RGF0YS5nZXQoZGF0YUlkKTtcbiAgICBjb25zdCB7ZHR5cGV9ID0gdGV4RGF0YTtcblxuICAgIGlmIChmbG9hdDMyVmFsdWVzICE9IG51bGwpIHtcbiAgICAgIHRleERhdGEudmFsdWVzID0gZmxvYXQzMlRvVHlwZWRBcnJheShmbG9hdDMyVmFsdWVzLCBkdHlwZSBhcyAnZmxvYXQzMicpO1xuICAgIH1cbiAgICByZXR1cm4gdGV4RGF0YS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgfVxuXG4gIHByaXZhdGUgYWNxdWlyZVRleHR1cmUoXG4gICAgICB0ZXhTaGFwZTogW251bWJlciwgbnVtYmVyXSwgdGV4VHlwZTogVGV4dHVyZVVzYWdlLCBkdHlwZTogRGF0YVR5cGUsXG4gICAgICBpc1BhY2tlZDogYm9vbGVhbik6IFRleHR1cmUge1xuICAgIHRoaXMubnVtQnl0ZXNJbkdQVSArPSB0aGlzLmNvbXB1dGVCeXRlcyh0ZXhTaGFwZSwgZHR5cGUpO1xuICAgIGlmICghdGhpcy53YXJuZWRBYm91dE1lbW9yeSAmJlxuICAgICAgICB0aGlzLm51bUJ5dGVzSW5HUFUgPiB0aGlzLm51bU1CQmVmb3JlV2FybmluZyAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICBjb25zdCBtYiA9ICh0aGlzLm51bUJ5dGVzSW5HUFUgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKTtcbiAgICAgIHRoaXMud2FybmVkQWJvdXRNZW1vcnkgPSB0cnVlO1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBIaWdoIG1lbW9yeSB1c2FnZSBpbiBHUFU6ICR7bWJ9IE1CLCBgICtcbiAgICAgICAgICBgbW9zdCBsaWtlbHkgZHVlIHRvIGEgbWVtb3J5IGxlYWtgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGV4dHVyZU1hbmFnZXIuYWNxdWlyZVRleHR1cmUodGV4U2hhcGUsIHRleFR5cGUsIGlzUGFja2VkKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUJ5dGVzKHNoYXBlOiBbbnVtYmVyLCBudW1iZXJdLCBkdHlwZTogRGF0YVR5cGUpIHtcbiAgICByZXR1cm4gc2hhcGVbMF0gKiBzaGFwZVsxXSAqIHV0aWwuYnl0ZXNQZXJFbGVtZW50KGR0eXBlKTtcbiAgfVxuXG4gIGNoZWNrQ29tcGlsZUNvbXBsZXRpb24oKSB7XG4gICAgZm9yIChjb25zdCBbLCBiaW5hcnldIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYmluYXJ5Q2FjaGUpKSB7XG4gICAgICB0aGlzLmNoZWNrQ29tcGxldGlvbl8oYmluYXJ5KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0NvbXBpbGVDb21wbGV0aW9uQXN5bmMoKTogUHJvbWlzZTxib29sZWFuW10+IHtcbiAgICBjb25zdCBwcyA9IFtdO1xuICAgIGlmICh0aGlzLmdwZ3B1LnBhcmFsbGVsQ29tcGlsYXRpb25FeHRlbnNpb24pIHtcbiAgICAgIGZvciAoY29uc3QgWywgYmluYXJ5XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmJpbmFyeUNhY2hlKSkge1xuICAgICAgICBwcy5wdXNoKHRoaXMuY2hlY2tDb21wbGV0aW9uQXN5bmNfKGJpbmFyeSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBbLCBiaW5hcnldIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYmluYXJ5Q2FjaGUpKSB7XG4gICAgICAgIGNvbnN0IHA6IFByb21pc2U8Ym9vbGVhbj4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29tcGxldGlvbl8oYmluYXJ5KTtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHBzLnB1c2gocCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tDb21wbGV0aW9uQXN5bmNfKGJpbmFyeTogR1BHUFVCaW5hcnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5ncGdwdS5nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKFxuICAgICAgICAgICAgYmluYXJ5LndlYkdMUHJvZ3JhbSxcbiAgICAgICAgICAgIHRoaXMuZ3BncHUucGFyYWxsZWxDb21waWxhdGlvbkV4dGVuc2lvbi5DT01QTEVUSU9OX1NUQVRVU19LSFIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGVja0NvbXBsZXRpb25fKGJpbmFyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IG5leHRGcmFtZSgpO1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb21wbGV0aW9uQXN5bmNfKGJpbmFyeSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0NvbXBsZXRpb25fKGJpbmFyeTogR1BHUFVCaW5hcnkpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5ncGdwdS5nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKFxuICAgICAgICAgICAgYmluYXJ5LndlYkdMUHJvZ3JhbSwgdGhpcy5ncGdwdS5nbC5MSU5LX1NUQVRVUykgPT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmdwZ3B1LmdsLmdldFByb2dyYW1JbmZvTG9nKGJpbmFyeS53ZWJHTFByb2dyYW0pKTtcbiAgICAgIGlmICh0aGlzLmdwZ3B1LmdsLmdldFNoYWRlclBhcmFtZXRlcihcbiAgICAgICAgICAgICAgYmluYXJ5LmZyYWdtZW50U2hhZGVyLCB0aGlzLmdwZ3B1LmdsLkNPTVBJTEVfU1RBVFVTKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgd2ViZ2xfdXRpbC5sb2dTaGFkZXJTb3VyY2VBbmRJbmZvTG9nKFxuICAgICAgICAgICAgYmluYXJ5LnNvdXJjZSxcbiAgICAgICAgICAgIHRoaXMuZ3BncHUuZ2wuZ2V0U2hhZGVySW5mb0xvZyhiaW5hcnkuZnJhZ21lbnRTaGFkZXIpKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY29tcGlsZSBmcmFnbWVudCBzaGFkZXIuJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsaW5rIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRVbmlmb3JtTG9jYXRpb25zKCkge1xuICAgIGZvciAoY29uc3QgYmluYXJ5IG9mIE9iamVjdC52YWx1ZXModGhpcy5iaW5hcnlDYWNoZSkpIHtcbiAgICAgIC8vIFRPRE86IEl0ZXJhdGluZyB0aHJvdWdoIGFsbCBiaW5hcmllcyB0byBidWlsZCBWQU9zIGlzIHN1cHBvc2VkIHRvIGJlIGluXG4gICAgICAvLyBhIHNlcGVyYXRlIGZ1bmN0aW9uLCBsaWtlICdzZXRWYW9zJy4gSG93ZXZlciwgdG8gYXZvaWQgYnJlYWtpbmcgY2hhbmdlc1xuICAgICAgLy8gZm9yIHRoZSB1c2VycyB1c2luZyBwYXJhbGxlbCBjb21waWxlIGZlYXR1cmUgbm93LCBidWlsZFZhbyBpcyBzaWxlbnRseVxuICAgICAgLy8gYWRkZWQgaGVyZS5cbiAgICAgIHRoaXMuZ3BncHUuYnVpbGRWYW8oYmluYXJ5LndlYkdMUHJvZ3JhbSk7XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmFyaWFibGVzTG9jYXRpb25zLFxuICAgICAgICBjdXN0b21Vbmlmb3JtTG9jYXRpb25zLFxuICAgICAgICBpbmZMb2MsXG4gICAgICAgIG5hbkxvYyxcbiAgICAgICAgb3V0U2hhcGVMb2NhdGlvbixcbiAgICAgICAgb3V0U2hhcGVTdHJpZGVzTG9jYXRpb24sXG4gICAgICAgIG91dFRleFNoYXBlTG9jYXRpb25cbiAgICAgIH0gPSBnZXRVbmlmb3JtTG9jYXRpb25zKHRoaXMuZ3BncHUsIGJpbmFyeS5wcm9ncmFtLCBiaW5hcnkud2ViR0xQcm9ncmFtKTtcbiAgICAgIGJpbmFyeS52YXJpYWJsZXNMb2NhdGlvbnMgPSB2YXJpYWJsZXNMb2NhdGlvbnM7XG4gICAgICBiaW5hcnkuY3VzdG9tVW5pZm9ybUxvY2F0aW9ucyA9IGN1c3RvbVVuaWZvcm1Mb2NhdGlvbnM7XG4gICAgICBiaW5hcnkuaW5mTG9jID0gaW5mTG9jO1xuICAgICAgYmluYXJ5Lm5hbkxvYyA9IG5hbkxvYztcbiAgICAgIGJpbmFyeS5vdXRTaGFwZUxvY2F0aW9uID0gb3V0U2hhcGVMb2NhdGlvbjtcbiAgICAgIGJpbmFyeS5vdXRTaGFwZVN0cmlkZXNMb2NhdGlvbiA9IG91dFNoYXBlU3RyaWRlc0xvY2F0aW9uO1xuICAgICAgYmluYXJ5Lm91dFRleFNoYXBlTG9jYXRpb24gPSBvdXRUZXhTaGFwZUxvY2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBURi5qcyB0ZW5zb3Igb3V0IG9mIGFuIGV4aXN0aW5nIFdlYkdMIHRleHR1cmUuIEEgbmV3IHRleHR1cmUgd2lsbFxuICAgKiBiZSBjcmVhdGVkLlxuICAgKi9cbiAgb3ZlcnJpZGUgY3JlYXRlVGVuc29yRnJvbUdQVURhdGEoXG4gICAgICB2YWx1ZXM6IFdlYkdMRGF0YSwgc2hhcGU6IG51bWJlcltdLCBkdHlwZTogRGF0YVR5cGUpOiBUZW5zb3Ige1xuICAgIHZhbHVlcy5jaGFubmVscyA9IHZhbHVlcy5jaGFubmVscyB8fCAnUkdCQSc7XG4gICAgY29uc3Qge3RleHR1cmUsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzfSA9IHZhbHVlcztcbiAgICBjb25zdCBiYWNrZW5kID0gZW5naW5lKCkuYmFja2VuZCBhcyBNYXRoQmFja2VuZFdlYkdMO1xuXG4gICAgLy8gSGF2ZSB0byB0aHJvdyBhbiBlcnJvciwgb3RoZXJ3aXNlIFdlYkdMIGp1c3Qgd2FybnMgYW5kIHJldHVybnMgd3JvbmdcbiAgICAvLyB2YWx1ZXMuXG4gICAgaWYgKCFiYWNrZW5kLmdwZ3B1LmdsLmlzVGV4dHVyZSh0ZXh0dXJlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgdGV4dHVyZSBpcyBpbnZhbGlkLiBBbHNvLCBwbGVhc2UgbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGFuZCBgICtcbiAgICAgICAgICBgdGhlIFRGSlMgV2ViR0wgYmFja2VuZCBhcmUgdXNpbmcgdGhlIHNhbWUgY2FudmFzLiBJZiB5b3Ugd2FudCB0byBgICtcbiAgICAgICAgICBgdXNlIHlvdXIgb3duIGN1c3RvbSBjYW52YXMsIHlvdSBoYXZlIHRvIGNyZWF0ZSBhbmQgdXNlIHRoZSBjdXN0b20gYCArXG4gICAgICAgICAgYFRGSlMgV2ViR0wgYmFja2VuZCBjcmVhdGVkIGZyb20gdGhlIGNhbnZhcyB0aHJvdWdoIGAgK1xuICAgICAgICAgIGAnbmV3IHRmLk1hdGhCYWNrZW5kV2ViR0woY3VzdG9tQ2FudmFzKScuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YUlkID1cbiAgICAgICAgYmFja2VuZC53cml0ZVRleHR1cmUodGV4dHVyZSwgc2hhcGUsIGR0eXBlLCBoZWlnaHQsIHdpZHRoLCBjaGFubmVscyk7XG4gICAgcmV0dXJuIGVuZ2luZSgpLm1ha2VUZW5zb3JGcm9tRGF0YUlkKGRhdGFJZCwgc2hhcGUsIGR0eXBlLCBiYWNrZW5kKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG9hdDMyVG9UeXBlZEFycmF5PEQgZXh0ZW5kcyBOdW1lcmljRGF0YVR5cGU+KFxuICAgIGE6IEZsb2F0MzJBcnJheSwgZHR5cGU6IEQpOiB0Zi5EYXRhVHlwZU1hcFtEXSB7XG4gIGlmIChkdHlwZSA9PT0gJ2Zsb2F0MzInIHx8IGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIHJldHVybiBhIGFzIHRmLkRhdGFUeXBlTWFwW0RdO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnaW50MzInIHx8IGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICBjb25zdCByZXN1bHQgPSAoZHR5cGUgPT09ICdpbnQzMicpID8gbmV3IEludDMyQXJyYXkoYS5sZW5ndGgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7XG4gICAgICByZXN1bHRbaV0gPSBNYXRoLnJvdW5kKGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIHRmLkRhdGFUeXBlTWFwW0RdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkdHlwZSAke2R0eXBlfWApO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// base.ts is the webgl backend without auto kernel registration.\nimport { device_util, registerBackend } from '@tensorflow/tfjs-core';\nimport { MathBackendWebGL } from './backend_webgl';\nexport { version as version_webgl } from './version';\nif (device_util.isBrowser()) {\n registerBackend('webgl', () => new MathBackendWebGL(), 2 /* priority */);\n}\n// Export webgl utilities\nexport * from './webgl';\n// Export forceHalfFlost under webgl namespace for the union bundle.\nimport { forceHalfFloat } from './webgl';\nexport const webgl = { forceHalfFloat };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxpRUFBaUU7QUFFakUsT0FBTyxFQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsT0FBTyxJQUFJLGFBQWEsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVuRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtJQUMzQixlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7Q0FDMUU7QUFFRCx5QkFBeUI7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFFeEIsb0VBQW9FO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUMsY0FBYyxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIGJhc2UudHMgaXMgdGhlIHdlYmdsIGJhY2tlbmQgd2l0aG91dCBhdXRvIGtlcm5lbCByZWdpc3RyYXRpb24uXG5cbmltcG9ydCB7ZGV2aWNlX3V0aWwsIHJlZ2lzdGVyQmFja2VuZH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi9iYWNrZW5kX3dlYmdsJztcbmV4cG9ydCB7dmVyc2lvbiBhcyB2ZXJzaW9uX3dlYmdsfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5pZiAoZGV2aWNlX3V0aWwuaXNCcm93c2VyKCkpIHtcbiAgcmVnaXN0ZXJCYWNrZW5kKCd3ZWJnbCcsICgpID0+IG5ldyBNYXRoQmFja2VuZFdlYkdMKCksIDIgLyogcHJpb3JpdHkgKi8pO1xufVxuXG4vLyBFeHBvcnQgd2ViZ2wgdXRpbGl0aWVzXG5leHBvcnQgKiBmcm9tICcuL3dlYmdsJztcblxuLy8gRXhwb3J0IGZvcmNlSGFsZkZsb3N0IHVuZGVyIHdlYmdsIG5hbWVzcGFjZSBmb3IgdGhlIHVuaW9uIGJ1bmRsZS5cbmltcG9ydCB7Zm9yY2VIYWxmRmxvYXR9IGZyb20gJy4vd2ViZ2wnO1xuZXhwb3J0IGNvbnN0IHdlYmdsID0ge2ZvcmNlSGFsZkZsb2F0fTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { useShapeUniforms } from './gpgpu_math';\nexport const CHECK_NAN_SNIPPET = `\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;\nexport const SQUARED_DIFFERENCE = 'return (a - b) * (a - b);';\nexport class BinaryOpProgram {\n constructor(op, aShape, bShape) {\n this.variableNames = ['A', 'B'];\n this.outputShape = backend_util.assertAndGetBroadcastShape(aShape, bShape);\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5b3BfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9iaW5hcnlvcF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRzs7O0NBR2hDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQztBQUM5RCxNQUFNLE9BQU8sZUFBZTtJQU0xQixZQUFZLEVBQVUsRUFBRSxNQUFnQixFQUFFLE1BQWdCO1FBTDFELGtCQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFNekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUc7O1VBRVYsRUFBRTs7Ozs7Ozs7S0FRUCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtHUEdQVVByb2dyYW0sIHVzZVNoYXBlVW5pZm9ybXN9IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjb25zdCBDSEVDS19OQU5fU05JUFBFVCA9IGBcbiAgaWYgKGlzbmFuKGEpKSByZXR1cm4gYTtcbiAgaWYgKGlzbmFuKGIpKSByZXR1cm4gYjtcbmA7XG5cbmV4cG9ydCBjb25zdCBTUVVBUkVEX0RJRkZFUkVOQ0UgPSAncmV0dXJuIChhIC0gYikgKiAoYSAtIGIpOyc7XG5leHBvcnQgY2xhc3MgQmluYXJ5T3BQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnQScsICdCJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihvcDogc3RyaW5nLCBhU2hhcGU6IG51bWJlcltdLCBiU2hhcGU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGJhY2tlbmRfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShhU2hhcGUsIGJTaGFwZSk7XG4gICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID0gdXNlU2hhcGVVbmlmb3Jtcyh0aGlzLm91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGZsb2F0IGJpbmFyeU9wZXJhdGlvbihmbG9hdCBhLCBmbG9hdCBiKSB7XG4gICAgICAgICR7b3B9XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgZmxvYXQgYSA9IGdldEFBdE91dENvb3JkcygpO1xuICAgICAgICBmbG9hdCBiID0gZ2V0QkF0T3V0Q29vcmRzKCk7XG4gICAgICAgIHNldE91dHB1dChiaW5hcnlPcGVyYXRpb24oYSwgYikpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nimport { useShapeUniforms } from './gpgpu_math';\nimport { getChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport const CHECK_NAN_SNIPPET_PACKED = `\n result.r = isNaN.r ? NAN : result.r;\n result.g = isNaN.g ? NAN : result.g;\n result.b = isNaN.b ? NAN : result.b;\n result.a = isNaN.a ? NAN : result.a;\n`;\nexport const ELU_DER = `\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`;\nexport const NOT_EQUAL = `\n return vec4(notEqual(a, b));\n`;\nexport class BinaryOpPackedProgram {\n constructor(op, aShape, bShape, checkOutOfBounds = false) {\n this.variableNames = ['A', 'B'];\n this.supportsBroadcasting = true;\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = backend_util.assertAndGetBroadcastShape(aShape, bShape);\n const rank = this.outputShape.length;\n this.enableShapeUniforms = useShapeUniforms(rank);\n let checkOutOfBoundsString = '';\n if (checkOutOfBounds) {\n if (rank === 0 || util.sizeFromShape(this.outputShape) === 1) {\n checkOutOfBoundsString = `\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n `;\n }\n else {\n const dtype = getCoordsDataType(rank);\n checkOutOfBoundsString = `\n ${dtype} coords = getOutputCoords();\n `;\n if (rank === 1) {\n if (this.enableShapeUniforms) {\n checkOutOfBoundsString += `\n result.y = (coords + 1) >= outShape ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `;\n }\n else {\n checkOutOfBoundsString += `\n result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `;\n }\n }\n else {\n const channels = getChannels('coords', rank);\n if (this.enableShapeUniforms) {\n 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 `;\n }\n else {\n 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 `;\n }\n }\n }\n }\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5b3BfcGFja2VkX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvYmluYXJ5b3BfcGFja2VkX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUc7Ozs7O0NBS3ZDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUc7OztDQUd0QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHOztDQUV4QixDQUFDO0FBRUYsTUFBTSxPQUFPLHFCQUFxQjtJQVNoQyxZQUNJLEVBQVUsRUFBRSxNQUFnQixFQUFFLE1BQWdCLEVBQzlDLGdCQUFnQixHQUFHLEtBQUs7UUFWNUIsa0JBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUczQix5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFNbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzVELHNCQUFzQixHQUFHOzs7O1NBSXhCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsc0JBQXNCLEdBQUc7WUFDckIsS0FBSztTQUNSLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO29CQUNkLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO3dCQUM1QixzQkFBc0IsSUFBSTs7OztXQUkzQixDQUFDO3FCQUNEO3lCQUFNO3dCQUNMLHNCQUFzQixJQUFJO3lDQUNHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDOzs7V0FHakQsQ0FBQztxQkFDRDtpQkFDRjtxQkFBTTtvQkFDTCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM3QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTt3QkFDNUIsc0JBQXNCLElBQUk7O2lCQUVyQixRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsSUFBSTs7aUJBRTNDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixJQUFJOzs7O1dBSWpELENBQUM7cUJBQ0Q7eUJBQU07d0JBQ0wsc0JBQXNCLElBQUk7O2lCQUVyQixRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzs7aUJBRXhELFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDOzs7O1dBSTlELENBQUM7cUJBQ0Q7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRzs7VUFFVixFQUFFOzs7Ozs7OztVQVFGLHNCQUFzQjs7OztLQUkzQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtHUEdQVVByb2dyYW0sIHVzZVNoYXBlVW5pZm9ybXN9IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5pbXBvcnQge2dldENoYW5uZWxzfSBmcm9tICcuL3BhY2tpbmdfdXRpbCc7XG5pbXBvcnQge2dldENvb3Jkc0RhdGFUeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBjb25zdCBDSEVDS19OQU5fU05JUFBFVF9QQUNLRUQgPSBgXG4gIHJlc3VsdC5yID0gaXNOYU4uciA/IE5BTiA6IHJlc3VsdC5yO1xuICByZXN1bHQuZyA9IGlzTmFOLmcgPyBOQU4gOiByZXN1bHQuZztcbiAgcmVzdWx0LmIgPSBpc05hTi5iID8gTkFOIDogcmVzdWx0LmI7XG4gIHJlc3VsdC5hID0gaXNOYU4uYSA/IE5BTiA6IHJlc3VsdC5hO1xuYDtcblxuZXhwb3J0IGNvbnN0IEVMVV9ERVIgPSBgXG4gIHZlYzQgYkdURVplcm8gPSB2ZWM0KGdyZWF0ZXJUaGFuRXF1YWwoYiwgdmVjNCgwLikpKTtcbiAgcmV0dXJuIChiR1RFWmVybyAqIGEpICsgKCh2ZWM0KDEuMCkgLSBiR1RFWmVybykgKiAoYSAqIChiICsgdmVjNCgxLjApKSkpO1xuYDtcblxuZXhwb3J0IGNvbnN0IE5PVF9FUVVBTCA9IGBcbiAgcmV0dXJuIHZlYzQobm90RXF1YWwoYSwgYikpO1xuYDtcblxuZXhwb3J0IGNsYXNzIEJpbmFyeU9wUGFja2VkUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnLCAnQiddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIHN1cHBvcnRzQnJvYWRjYXN0aW5nID0gdHJ1ZTtcbiAgcGFja2VkSW5wdXRzID0gdHJ1ZTtcbiAgcGFja2VkT3V0cHV0ID0gdHJ1ZTtcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIG9wOiBzdHJpbmcsIGFTaGFwZTogbnVtYmVyW10sIGJTaGFwZTogbnVtYmVyW10sXG4gICAgICBjaGVja091dE9mQm91bmRzID0gZmFsc2UpIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gYmFja2VuZF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKGFTaGFwZSwgYlNoYXBlKTtcbiAgICBjb25zdCByYW5rID0gdGhpcy5vdXRwdXRTaGFwZS5sZW5ndGg7XG4gICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID0gdXNlU2hhcGVVbmlmb3JtcyhyYW5rKTtcbiAgICBsZXQgY2hlY2tPdXRPZkJvdW5kc1N0cmluZyA9ICcnO1xuICAgIGlmIChjaGVja091dE9mQm91bmRzKSB7XG4gICAgICBpZiAocmFuayA9PT0gMCB8fCB1dGlsLnNpemVGcm9tU2hhcGUodGhpcy5vdXRwdXRTaGFwZSkgPT09IDEpIHtcbiAgICAgICAgY2hlY2tPdXRPZkJvdW5kc1N0cmluZyA9IGBcbiAgICAgICAgICByZXN1bHQueSA9IDAuO1xuICAgICAgICAgIHJlc3VsdC56ID0gMC47XG4gICAgICAgICAgcmVzdWx0LncgPSAwLjtcbiAgICAgICAgYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUocmFuayk7XG4gICAgICAgIGNoZWNrT3V0T2ZCb3VuZHNTdHJpbmcgPSBgXG4gICAgICAgICAgJHtkdHlwZX0gY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGA7XG4gICAgICAgIGlmIChyYW5rID09PSAxKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgICAgICAgY2hlY2tPdXRPZkJvdW5kc1N0cmluZyArPSBgXG4gICAgICAgICAgICByZXN1bHQueSA9IChjb29yZHMgKyAxKSA+PSBvdXRTaGFwZSA/IDAuIDogcmVzdWx0Lnk7XG4gICAgICAgICAgICByZXN1bHQueiA9IDAuO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAwLjtcbiAgICAgICAgICBgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGVja091dE9mQm91bmRzU3RyaW5nICs9IGBcbiAgICAgICAgICAgIHJlc3VsdC55ID0gKGNvb3JkcyArIDEpID49ICR7dGhpcy5vdXRwdXRTaGFwZVswXX0gPyAwLiA6IHJlc3VsdC55O1xuICAgICAgICAgICAgcmVzdWx0LnogPSAwLjtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gMC47XG4gICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2hhbm5lbHMgPSBnZXRDaGFubmVscygnY29vcmRzJywgcmFuayk7XG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2hhcGVVbmlmb3Jtcykge1xuICAgICAgICAgICAgY2hlY2tPdXRPZkJvdW5kc1N0cmluZyArPSBgXG4gICAgICAgICAgICBib29sIG5leHRSb3dPdXRPZkJvdW5kcyA9XG4gICAgICAgICAgICAgICgke2NoYW5uZWxzW3JhbmsgLSAyXX0gKyAxKSA+PSBvdXRTaGFwZVske3Jhbmt9IC0gMl07XG4gICAgICAgICAgICBib29sIG5leHRDb2xPdXRPZkJvdW5kcyA9XG4gICAgICAgICAgICAgICgke2NoYW5uZWxzW3JhbmsgLSAxXX0gKyAxKSA+PSBvdXRTaGFwZVske3Jhbmt9IC0gMV07XG4gICAgICAgICAgICByZXN1bHQueSA9IG5leHRDb2xPdXRPZkJvdW5kcyA/IDAuIDogcmVzdWx0Lnk7XG4gICAgICAgICAgICByZXN1bHQueiA9IG5leHRSb3dPdXRPZkJvdW5kcyA/IDAuIDogcmVzdWx0Lno7XG4gICAgICAgICAgICByZXN1bHQudyA9IG5leHRDb2xPdXRPZkJvdW5kcyB8fCBuZXh0Um93T3V0T2ZCb3VuZHMgPyAwLiA6IHJlc3VsdC53O1xuICAgICAgICAgIGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoZWNrT3V0T2ZCb3VuZHNTdHJpbmcgKz0gYFxuICAgICAgICAgICAgYm9vbCBuZXh0Um93T3V0T2ZCb3VuZHMgPVxuICAgICAgICAgICAgICAoJHtjaGFubmVsc1tyYW5rIC0gMl19ICsgMSkgPj0gJHt0aGlzLm91dHB1dFNoYXBlW3JhbmsgLSAyXX07XG4gICAgICAgICAgICBib29sIG5leHRDb2xPdXRPZkJvdW5kcyA9XG4gICAgICAgICAgICAgICgke2NoYW5uZWxzW3JhbmsgLSAxXX0gKyAxKSA+PSAke3RoaXMub3V0cHV0U2hhcGVbcmFuayAtIDFdfTtcbiAgICAgICAgICAgIHJlc3VsdC55ID0gbmV4dENvbE91dE9mQm91bmRzID8gMC4gOiByZXN1bHQueTtcbiAgICAgICAgICAgIHJlc3VsdC56ID0gbmV4dFJvd091dE9mQm91bmRzID8gMC4gOiByZXN1bHQuejtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gbmV4dENvbE91dE9mQm91bmRzIHx8IG5leHRSb3dPdXRPZkJvdW5kcyA/IDAuIDogcmVzdWx0Lnc7XG4gICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdmVjNCBiaW5hcnlPcGVyYXRpb24odmVjNCBhLCB2ZWM0IGIpIHtcbiAgICAgICAgJHtvcH1cbiAgICAgIH1cblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICB2ZWM0IGEgPSBnZXRBQXRPdXRDb29yZHMoKTtcbiAgICAgICAgdmVjNCBiID0gZ2V0QkF0T3V0Q29vcmRzKCk7XG5cbiAgICAgICAgdmVjNCByZXN1bHQgPSBiaW5hcnlPcGVyYXRpb24oYSwgYik7XG4gICAgICAgICR7Y2hlY2tPdXRPZkJvdW5kc1N0cmluZ31cblxuICAgICAgICBzZXRPdXRwdXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Identity } from '@tensorflow/tfjs-core';\nexport function identity(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n backend.incRef(x.dataId);\n return { dataId: x.dataId, shape: x.shape, dtype: x.dtype };\n}\nexport const identityConfig = {\n kernelName: Identity,\n backendName: 'webgl',\n kernelFunc: identity\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvSWRlbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBdUQsTUFBTSx1QkFBdUIsQ0FBQztBQUlyRyxNQUFNLFVBQVUsUUFBUSxDQUNwQixJQUF5RDtJQUMzRCxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRW5CLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXpCLE9BQU8sRUFBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxRQUFpQztDQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0lkZW50aXR5LCBJZGVudGl0eUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoXG4gICAgYXJnczoge2lucHV0czogSWRlbnRpdHlJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuXG4gIGJhY2tlbmQuaW5jUmVmKHguZGF0YUlkKTtcblxuICByZXR1cm4ge2RhdGFJZDogeC5kYXRhSWQsIHNoYXBlOiB4LnNoYXBlLCBkdHlwZTogeC5kdHlwZX07XG59XG5cbmV4cG9ydCBjb25zdCBpZGVudGl0eUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBJZGVudGl0eSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGlkZW50aXR5IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Complex } from '@tensorflow/tfjs-core';\nimport { identity } from './Identity';\n/**\n * In WebGL data is stored in GPU textures which can't be efficiently copied, so\n * complex tensors share data with their real and imaginary components. Complex\n * tensors' reference to the components is tracked by refCount on the individual\n * component. The refCounts are increased by the identity call.\n *\n * When a complex tensor is disposed, it will reduce the refCount on the\n * components by calling disposeData on each.\n */\nexport function complex(args) {\n const { inputs, backend } = args;\n const { real, imag } = inputs;\n const complexInfo = backend.makeTensorInfo(real.shape, 'complex64');\n const complex = backend.texData.get(complexInfo.dataId);\n const realTensorInfo = identity({ inputs: { x: real }, backend });\n const imagTensorInfo = identity({ inputs: { x: imag }, backend });\n complex.complexTensorInfos = { real: realTensorInfo, imag: imagTensorInfo };\n return complexInfo;\n}\nexport const complexConfig = {\n kernelName: Complex,\n backendName: 'webgl',\n kernelFunc: complex\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Db21wbGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxPQUFPLEVBQXNELE1BQU0sdUJBQXVCLENBQUM7QUFHbkcsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQ25CLElBQXdEO0lBQzFELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFeEQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFFOUQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFFOUQsT0FBTyxDQUFDLGtCQUFrQixHQUFHLEVBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFDLENBQUM7SUFFMUUsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q29tcGxleCwgQ29tcGxleElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSAnLi9JZGVudGl0eSc7XG5cbi8qKlxuICogSW4gV2ViR0wgZGF0YSBpcyBzdG9yZWQgaW4gR1BVIHRleHR1cmVzIHdoaWNoIGNhbid0IGJlIGVmZmljaWVudGx5IGNvcGllZCwgc29cbiAqIGNvbXBsZXggdGVuc29ycyBzaGFyZSBkYXRhIHdpdGggdGhlaXIgcmVhbCBhbmQgaW1hZ2luYXJ5IGNvbXBvbmVudHMuIENvbXBsZXhcbiAqIHRlbnNvcnMnIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50cyBpcyB0cmFja2VkIGJ5IHJlZkNvdW50IG9uIHRoZSBpbmRpdmlkdWFsXG4gKiBjb21wb25lbnQuIFRoZSByZWZDb3VudHMgYXJlIGluY3JlYXNlZCBieSB0aGUgaWRlbnRpdHkgY2FsbC5cbiAqXG4gKiBXaGVuIGEgY29tcGxleCB0ZW5zb3IgaXMgZGlzcG9zZWQsIGl0IHdpbGwgcmVkdWNlIHRoZSByZWZDb3VudCBvbiB0aGVcbiAqIGNvbXBvbmVudHMgYnkgY2FsbGluZyBkaXNwb3NlRGF0YSBvbiBlYWNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleChcbiAgICBhcmdzOiB7aW5wdXRzOiBDb21wbGV4SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMfSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtyZWFsLCBpbWFnfSA9IGlucHV0cztcblxuICBjb25zdCBjb21wbGV4SW5mbyA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVhbC5zaGFwZSwgJ2NvbXBsZXg2NCcpO1xuICBjb25zdCBjb21wbGV4ID0gYmFja2VuZC50ZXhEYXRhLmdldChjb21wbGV4SW5mby5kYXRhSWQpO1xuXG4gIGNvbnN0IHJlYWxUZW5zb3JJbmZvID0gaWRlbnRpdHkoe2lucHV0czoge3g6IHJlYWx9LCBiYWNrZW5kfSk7XG5cbiAgY29uc3QgaW1hZ1RlbnNvckluZm8gPSBpZGVudGl0eSh7aW5wdXRzOiB7eDogaW1hZ30sIGJhY2tlbmR9KTtcblxuICBjb21wbGV4LmNvbXBsZXhUZW5zb3JJbmZvcyA9IHtyZWFsOiByZWFsVGVuc29ySW5mbywgaW1hZzogaW1hZ1RlbnNvckluZm99O1xuXG4gIHJldHVybiBjb21wbGV4SW5mbztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBsZXhDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29tcGxleCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNvbXBsZXggYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, LeakyRelu, util } from '@tensorflow/tfjs-core';\nimport { BinaryOpProgram } from '../binaryop_gpu';\nimport { BinaryOpPackedProgram } from '../binaryop_packed_gpu';\nexport const LEAKYRELU = `return (a < 0.) ? b * a : a;`;\nexport const LEAKYRELU_PACKED = `\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;\nexport function leakyRelu(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { alpha } = attrs;\n const $alpha = backend.makeTensorInfo([], 'float32', util.createScalarValue(alpha, 'float32'));\n const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n new BinaryOpPackedProgram(LEAKYRELU_PACKED, x.shape, $alpha.shape) :\n new BinaryOpProgram(LEAKYRELU, x.shape, $alpha.shape);\n const result = backend.runWebGLProgram(program, [x, $alpha], 'float32');\n backend.disposeIntermediateTensorInfo($alpha);\n return result;\n}\nexport const leakyReluConfig = {\n kernelName: LeakyRelu,\n backendName: 'webgl',\n kernelFunc: leakyRelu\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVha3lSZWx1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0xlYWt5UmVsdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUE0QixTQUFTLEVBQStDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRWxJLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsOEJBQThCLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7OztDQUcvQixDQUFDO0FBRUYsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUl6QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdEIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FDakMsRUFBRSxFQUFFLFNBQVMsRUFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBNkIsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV4RSxPQUFPLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUI7SUFDM0MsVUFBVSxFQUFFLFNBQVM7SUFDckIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFNBQWtDO0NBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIExlYWt5UmVsdSwgTGVha3lSZWx1QXR0cnMsIExlYWt5UmVsdUlucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0JpbmFyeU9wUHJvZ3JhbX0gZnJvbSAnLi4vYmluYXJ5b3BfZ3B1JztcbmltcG9ydCB7QmluYXJ5T3BQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9iaW5hcnlvcF9wYWNrZWRfZ3B1JztcblxuZXhwb3J0IGNvbnN0IExFQUtZUkVMVSA9IGByZXR1cm4gKGEgPCAwLikgPyBiICogYSA6IGE7YDtcbmV4cG9ydCBjb25zdCBMRUFLWVJFTFVfUEFDS0VEID0gYFxuICB2ZWM0IGFMZXNzVGhhblplcm8gPSB2ZWM0KGxlc3NUaGFuKGEsIHZlYzQoMC4pKSk7XG4gIHJldHVybiAoYUxlc3NUaGFuWmVybyAqIChiICogYSkpICsgKCh2ZWM0KDEuMCkgLSBhTGVzc1RoYW5aZXJvKSAqIGEpO1xuYDtcblxuZXhwb3J0IGZ1bmN0aW9uIGxlYWt5UmVsdShhcmdzOiB7XG4gIGlucHV0czogTGVha3lSZWx1SW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogTGVha3lSZWx1QXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YWxwaGF9ID0gYXR0cnM7XG5cbiAgY29uc3QgJGFscGhhID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgIFtdLCAnZmxvYXQzMicsXG4gICAgICB1dGlsLmNyZWF0ZVNjYWxhclZhbHVlKGFscGhhIGFzIHVua25vd24gYXMgJ2Zsb2F0MzInLCAnZmxvYXQzMicpKTtcblxuICBjb25zdCBwcm9ncmFtID0gZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19CSU5BUllfT1BFUkFUSU9OUycpID9cbiAgICAgIG5ldyBCaW5hcnlPcFBhY2tlZFByb2dyYW0oTEVBS1lSRUxVX1BBQ0tFRCwgeC5zaGFwZSwgJGFscGhhLnNoYXBlKSA6XG4gICAgICBuZXcgQmluYXJ5T3BQcm9ncmFtKExFQUtZUkVMVSwgeC5zaGFwZSwgJGFscGhhLnNoYXBlKTtcbiAgY29uc3QgcmVzdWx0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3gsICRhbHBoYV0sICdmbG9hdDMyJyk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbygkYWxwaGEpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBsZWFreVJlbHVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTGVha3lSZWx1LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogbGVha3lSZWx1IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, Prelu } from '@tensorflow/tfjs-core';\nimport { BinaryOpProgram } from '../binaryop_gpu';\nimport { BinaryOpPackedProgram } from '../binaryop_packed_gpu';\nexport const PRELU = `return (a < 0.) ? b * a : a;`;\nexport const PRELU_PACKED = `\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;\nexport function prelu(args) {\n const { inputs, backend } = args;\n const { x, alpha } = inputs;\n const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n new BinaryOpPackedProgram(PRELU_PACKED, x.shape, alpha.shape) :\n new BinaryOpProgram(PRELU, x.shape, alpha.shape);\n return backend.runWebGLProgram(program, [x, alpha], 'float32');\n}\nexport const preluConfig = {\n kernelName: Prelu,\n backendName: 'webgl',\n kernelFunc: prelu\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJlbHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUHJlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBNEIsS0FBSyxFQUEwQixNQUFNLHVCQUF1QixDQUFDO0FBR3BHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsOEJBQThCLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHOzs7Q0FHM0IsQ0FBQztBQUVGLE1BQU0sVUFBVSxLQUFLLENBQUMsSUFBc0Q7SUFFMUUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFMUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxLQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2VudiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBQcmVsdSwgUHJlbHVJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0JpbmFyeU9wUHJvZ3JhbX0gZnJvbSAnLi4vYmluYXJ5b3BfZ3B1JztcbmltcG9ydCB7QmluYXJ5T3BQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9iaW5hcnlvcF9wYWNrZWRfZ3B1JztcblxuZXhwb3J0IGNvbnN0IFBSRUxVID0gYHJldHVybiAoYSA8IDAuKSA/IGIgKiBhIDogYTtgO1xuZXhwb3J0IGNvbnN0IFBSRUxVX1BBQ0tFRCA9IGBcbiAgdmVjNCBhTGVzc1RoYW5aZXJvID0gdmVjNChsZXNzVGhhbihhLCB2ZWM0KDAuKSkpO1xuICByZXR1cm4gKGFMZXNzVGhhblplcm8gKiAoYiAqIGEpKSArICgodmVjNCgxLjApIC0gYUxlc3NUaGFuWmVybykgKiBhKTtcbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVsdShhcmdzOiB7aW5wdXRzOiBQcmVsdUlucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBhbHBoYX0gPSBpbnB1dHM7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfQklOQVJZX09QRVJBVElPTlMnKSA/XG4gICAgICBuZXcgQmluYXJ5T3BQYWNrZWRQcm9ncmFtKFBSRUxVX1BBQ0tFRCwgeC5zaGFwZSwgYWxwaGEuc2hhcGUpIDpcbiAgICAgIG5ldyBCaW5hcnlPcFByb2dyYW0oUFJFTFUsIHguc2hhcGUsIGFscGhhLnNoYXBlKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFt4LCBhbHBoYV0sICdmbG9hdDMyJyk7XG59XG5cbmV4cG9ydCBjb25zdCBwcmVsdUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBQcmVsdSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHByZWx1IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, env, upcastType } from '@tensorflow/tfjs-core';\nimport { BinaryOpProgram } from '../binaryop_gpu';\nimport { BinaryOpPackedProgram } from '../binaryop_packed_gpu';\nimport { complex } from '../kernels/Complex';\nimport { LEAKYRELU, LEAKYRELU_PACKED } from '../kernels/LeakyRelu';\nimport { PRELU, PRELU_PACKED } from '../kernels/Prelu';\nimport * as unary_op from '../unaryop_gpu';\nimport { UnaryOpProgram } from '../unaryop_gpu';\nimport * as unary_packed_op from '../unaryop_packed_gpu';\nimport { UnaryOpPackedProgram } from '../unaryop_packed_gpu';\nexport const CHECK_NAN_SNIPPET_UNARY = `if (isnan(x)) return x;`;\n/**\n * Template that creates a `KernelFunc` for unary ops.\n * @param opSnippet Op snippet to create `UnaryOpProgram`.\n * @param packedOpSnippet Op snippet to create `UnaryOpPackedProgram`.\n * @param dtype Optional. If set, the result has this dtype. Otherwise, the\n * result has the same dtype as the first input. This is mainly used in\n * comparison kernels, such as Equal, Less, Greater, etc.\n */\nexport function unaryKernelFunc({ opSnippet, packedOpSnippet, cpuKernelImpl, dtype }) {\n return ({ inputs, backend }) => {\n const { x } = inputs;\n const webglBackend = backend;\n const $dtype = dtype || x.dtype;\n if (webglBackend.shouldExecuteOnCPU([x]) && cpuKernelImpl != null) {\n const xData = webglBackend.texData.get(x.dataId);\n const outValues = cpuKernelImpl(xData.values, $dtype);\n return webglBackend.makeTensorInfo(x.shape, $dtype, outValues);\n }\n const shouldUsePackedProgram = env().getBool('WEBGL_PACK_UNARY_OPERATIONS') && packedOpSnippet != null;\n let program;\n if (shouldUsePackedProgram) {\n program = new UnaryOpPackedProgram(x.shape, packedOpSnippet);\n }\n else {\n program = new UnaryOpProgram(x.shape, opSnippet);\n }\n return webglBackend.runWebGLProgram(program, [x], $dtype);\n };\n}\n/**\n * Template that creates a `KernelFunc` for binary ops.\n * @param opSnippet Op snippet to create `BinaryOpProgram`.\n * @param packedOpSnippet Op snippet to create `BinaryOpPackedProgram`.\n * @param checkOutOfBoundsForPackedProgram Whether to set checkOutOfBounds=true\n * when creating BinaryOpPackedProgram.\n * @param dtype Optional. If set, the result has this dtype. Otherwise, the\n * result has the same dtype as the first input. This is mainly used in\n * comparison kernels, such as Equal, Less, Greater, etc.\n */\nexport function binaryKernelFunc({ opSnippet, packedOpSnippet, checkOutOfBounds = false, supportsComplex = false, cpuKernelImpl, dtype }) {\n return ({ inputs, backend }) => {\n const { a, b } = inputs;\n const webglBackend = backend;\n if (supportsComplex && a.dtype === 'complex64') {\n const aData = webglBackend.texData.get(a.dataId);\n const bData = webglBackend.texData.get(b.dataId);\n const [real, imag] = [\n [aData.complexTensorInfos.real, bData.complexTensorInfos.real],\n [aData.complexTensorInfos.imag, bData.complexTensorInfos.imag]\n ].map(complexParts => {\n const [aPart, bPart] = complexParts;\n const aHandle = {\n dataId: aPart.dataId,\n dtype: aPart.dtype,\n shape: a.shape\n };\n const bHandle = {\n dataId: bPart.dataId,\n dtype: bPart.dtype,\n shape: b.shape\n };\n const program = new BinaryOpProgram(opSnippet, a.shape, b.shape);\n return webglBackend.runWebGLProgram(program, [aHandle, bHandle], upcastType(aPart.dtype, bPart.dtype));\n });\n const complexOutput = complex({ inputs: { real, imag }, backend: webglBackend });\n webglBackend.disposeIntermediateTensorInfo(real);\n webglBackend.disposeIntermediateTensorInfo(imag);\n // TODO(annxingyuan): Implement CPU forwarding for complex inputs.\n return complexOutput;\n }\n const $dtype = dtype || upcastType(a.dtype, b.dtype);\n if ((a.dtype === 'string' || b.dtype === 'string' ||\n webglBackend.shouldExecuteOnCPU([a, b])) &&\n cpuKernelImpl != null) {\n const aVals = webglBackend.texData.get(a.dataId).values;\n const bVals = webglBackend.texData.get(b.dataId).values;\n const decodedAVals = a.dtype === 'string' ?\n // tslint:disable-next-line: no-any\n backend_util.fromUint8ToStringArray(aVals) :\n aVals;\n const decodedBVals = a.dtype === 'string' ?\n // tslint:disable-next-line: no-any\n backend_util.fromUint8ToStringArray(bVals) :\n bVals;\n const [outValues, outShape] = cpuKernelImpl(a.shape, b.shape, decodedAVals, decodedBVals, $dtype);\n const out = webglBackend.makeTensorInfo(outShape, $dtype);\n const outData = webglBackend.texData.get(out.dataId);\n outData.values = outValues;\n return out;\n }\n const shouldUsePackedProgram = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') &&\n packedOpSnippet != null;\n let program;\n if (shouldUsePackedProgram) {\n program = new BinaryOpPackedProgram(packedOpSnippet, a.shape, b.shape, checkOutOfBounds);\n }\n else {\n program = new BinaryOpProgram(opSnippet, a.shape, b.shape);\n }\n return webglBackend.runWebGLProgram(program, [a, b], $dtype);\n };\n}\nexport function mapActivationToShaderProgram(activation, packed = false) {\n if (activation === 'linear') {\n if (packed) {\n return unary_packed_op.LINEAR;\n }\n return unary_op.LINEAR;\n }\n else if (activation === 'relu') {\n if (packed) {\n return unary_packed_op.RELU;\n }\n return unary_op.RELU;\n }\n else if (activation === 'elu') {\n if (packed) {\n return unary_packed_op.ELU;\n }\n return unary_op.ELU;\n }\n else if (activation === 'relu6') {\n if (packed) {\n return unary_packed_op.RELU6;\n }\n return unary_op.RELU6;\n }\n else if (activation === 'prelu') {\n if (packed) {\n return PRELU_PACKED;\n }\n return PRELU;\n }\n else if (activation === 'leakyrelu') {\n if (packed) {\n return LEAKYRELU_PACKED;\n }\n return LEAKYRELU;\n }\n else if (activation === 'sigmoid') {\n if (packed) {\n return unary_packed_op.SIGMOID;\n }\n return unary_op.SIGMOID;\n }\n throw new Error(`Activation ${activation} has not been implemented for the WebGL backend.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsX2Z1bmNzX3V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQTBCLEdBQUcsRUFBdUMsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbEksT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEtBQUssZUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTNELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLHlCQUF5QixDQUFDO0FBU2pFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUMzQixFQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBd0I7SUFFM0UsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxFQUFFLEVBQUU7UUFDM0IsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQXFCLENBQUM7UUFDbEMsTUFB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LElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO0tBQ3pCO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUNaLFVBQVUsa0RBQWtELENBQUMsQ0FBQztBQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgeyBiYWNrZW5kX3V0aWwsIEJpbmFyeUlucHV0cywgRGF0YVR5cGUsIGVudiwgS2VybmVsRnVuYywgVHlwZWRBcnJheSwgVW5hcnlJbnB1dHMsIHVwY2FzdFR5cGV9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0JpbmFyeU9wUHJvZ3JhbX0gZnJvbSAnLi4vYmluYXJ5b3BfZ3B1JztcbmltcG9ydCB7QmluYXJ5T3BQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9iaW5hcnlvcF9wYWNrZWRfZ3B1JztcbmltcG9ydCB7Y29tcGxleH0gZnJvbSAnLi4va2VybmVscy9Db21wbGV4JztcbmltcG9ydCB7TEVBS1lSRUxVLCBMRUFLWVJFTFVfUEFDS0VEfSBmcm9tICcuLi9rZXJuZWxzL0xlYWt5UmVsdSc7XG5pbXBvcnQge1BSRUxVLCBQUkVMVV9QQUNLRUR9IGZyb20gJy4uL2tlcm5lbHMvUHJlbHUnO1xuaW1wb3J0ICogYXMgdW5hcnlfb3AgZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuaW1wb3J0IHtVbmFyeU9wUHJvZ3JhbX0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuaW1wb3J0ICogYXMgdW5hcnlfcGFja2VkX29wIGZyb20gJy4uL3VuYXJ5b3BfcGFja2VkX2dwdSc7XG5pbXBvcnQge1VuYXJ5T3BQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi91bmFyeW9wX3BhY2tlZF9ncHUnO1xuXG5pbXBvcnQge1NpbXBsZUJpbmFyeUtlcm5lbEltcGxDUFUsIFNpbXBsZVVuYXJ5S2VybmVsSW1wbENQVX0gZnJvbSAnLi9zaGFyZWQnO1xuXG5leHBvcnQgY29uc3QgQ0hFQ0tfTkFOX1NOSVBQRVRfVU5BUlkgPSBgaWYgKGlzbmFuKHgpKSByZXR1cm4geDtgO1xuXG50eXBlIFVuYXJ5S2VybmVsRnVuY0NvbmZpZyA9IHtcbiAgb3BTbmlwcGV0OiBzdHJpbmcsXG4gIHBhY2tlZE9wU25pcHBldD86IHN0cmluZyxcbiAgY3B1S2VybmVsSW1wbD86IFNpbXBsZVVuYXJ5S2VybmVsSW1wbENQVSxcbiAgZHR5cGU/OiBEYXRhVHlwZSxcbn07XG5cbi8qKlxuICogVGVtcGxhdGUgdGhhdCBjcmVhdGVzIGEgYEtlcm5lbEZ1bmNgIGZvciB1bmFyeSBvcHMuXG4gKiBAcGFyYW0gb3BTbmlwcGV0IE9wIHNuaXBwZXQgdG8gY3JlYXRlIGBVbmFyeU9wUHJvZ3JhbWAuXG4gKiBAcGFyYW0gcGFja2VkT3BTbmlwcGV0IE9wIHNuaXBwZXQgdG8gY3JlYXRlIGBVbmFyeU9wUGFja2VkUHJvZ3JhbWAuXG4gKiBAcGFyYW0gZHR5cGUgT3B0aW9uYWwuIElmIHNldCwgdGhlIHJlc3VsdCBoYXMgdGhpcyBkdHlwZS4gT3RoZXJ3aXNlLCB0aGVcbiAqICAgICByZXN1bHQgaGFzIHRoZSBzYW1lIGR0eXBlIGFzIHRoZSBmaXJzdCBpbnB1dC4gVGhpcyBpcyBtYWlubHkgdXNlZCBpblxuICogICAgIGNvbXBhcmlzb24ga2VybmVscywgc3VjaCBhcyBFcXVhbCwgTGVzcywgR3JlYXRlciwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5hcnlLZXJuZWxGdW5jKFxuICAgIHtvcFNuaXBwZXQsIHBhY2tlZE9wU25pcHBldCwgY3B1S2VybmVsSW1wbCwgZHR5cGV9OiBVbmFyeUtlcm5lbEZ1bmNDb25maWcpOlxuICAgIEtlcm5lbEZ1bmMge1xuICByZXR1cm4gKHtpbnB1dHMsIGJhY2tlbmR9KSA9PiB7XG4gICAgY29uc3Qge3h9ID0gaW5wdXRzIGFzIFVuYXJ5SW5wdXRzO1xuICAgIGNvbnN0IHdlYmdsQmFja2VuZCA9IGJhY2tlbmQgYXMgTWF0aEJhY2tlbmRXZWJHTDtcblxuICAgIGNvbnN0ICRkdHlwZSA9IGR0eXBlIHx8IHguZHR5cGU7XG4gICAgaWYgKHdlYmdsQmFja2VuZC5zaG91bGRFeGVjdXRlT25DUFUoW3hdKSAmJiBjcHVLZXJuZWxJbXBsICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHhEYXRhID0gd2ViZ2xCYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgICAgIGNvbnN0IG91dFZhbHVlcyA9IGNwdUtlcm5lbEltcGwoeERhdGEudmFsdWVzIGFzIFR5cGVkQXJyYXksICRkdHlwZSk7XG4gICAgICByZXR1cm4gd2ViZ2xCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHguc2hhcGUsICRkdHlwZSwgb3V0VmFsdWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRVc2VQYWNrZWRQcm9ncmFtID1cbiAgICAgICAgZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19VTkFSWV9PUEVSQVRJT05TJykgJiYgcGFja2VkT3BTbmlwcGV0ICE9IG51bGw7XG4gICAgbGV0IHByb2dyYW06IFVuYXJ5T3BQcm9ncmFtfFVuYXJ5T3BQYWNrZWRQcm9ncmFtO1xuICAgIGlmIChzaG91bGRVc2VQYWNrZWRQcm9ncmFtKSB7XG4gICAgICBwcm9ncmFtID0gbmV3IFVuYXJ5T3BQYWNrZWRQcm9ncmFtKHguc2hhcGUsIHBhY2tlZE9wU25pcHBldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW0gPSBuZXcgVW5hcnlPcFByb2dyYW0oeC5zaGFwZSwgb3BTbmlwcGV0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2ViZ2xCYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeF0sICRkdHlwZSk7XG4gIH07XG59XG5cbnR5cGUgQmluYXJ5S2VybmVsRnVuY0NvbmZpZyA9IHtcbiAgb3BTbmlwcGV0OiBzdHJpbmcsXG4gIHBhY2tlZE9wU25pcHBldD86IHN0cmluZyxcbiAgY2hlY2tPdXRPZkJvdW5kcz86IGJvb2xlYW4sXG4gIHN1cHBvcnRzQ29tcGxleD86IGJvb2xlYW4sXG4gIGNwdUtlcm5lbEltcGw/OiBTaW1wbGVCaW5hcnlLZXJuZWxJbXBsQ1BVLFxuICBkdHlwZT86IERhdGFUeXBlXG59O1xuXG4vKipcbiAqIFRlbXBsYXRlIHRoYXQgY3JlYXRlcyBhIGBLZXJuZWxGdW5jYCBmb3IgYmluYXJ5IG9wcy5cbiAqIEBwYXJhbSBvcFNuaXBwZXQgT3Agc25pcHBldCB0byBjcmVhdGUgYEJpbmFyeU9wUHJvZ3JhbWAuXG4gKiBAcGFyYW0gcGFja2VkT3BTbmlwcGV0IE9wIHNuaXBwZXQgdG8gY3JlYXRlIGBCaW5hcnlPcFBhY2tlZFByb2dyYW1gLlxuICogQHBhcmFtIGNoZWNrT3V0T2ZCb3VuZHNGb3JQYWNrZWRQcm9ncmFtIFdoZXRoZXIgdG8gc2V0IGNoZWNrT3V0T2ZCb3VuZHM9dHJ1ZVxuICogICAgIHdoZW4gY3JlYXRpbmcgQmluYXJ5T3BQYWNrZWRQcm9ncmFtLlxuICogQHBhcmFtIGR0eXBlIE9wdGlvbmFsLiBJZiBzZXQsIHRoZSByZXN1bHQgaGFzIHRoaXMgZHR5cGUuIE90aGVyd2lzZSwgdGhlXG4gKiAgICAgcmVzdWx0IGhhcyB0aGUgc2FtZSBkdHlwZSBhcyB0aGUgZmlyc3QgaW5wdXQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW5cbiAqICAgICBjb21wYXJpc29uIGtlcm5lbHMsIHN1Y2ggYXMgRXF1YWwsIExlc3MsIEdyZWF0ZXIsIGV0Yy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmFyeUtlcm5lbEZ1bmMoe1xuICBvcFNuaXBwZXQsXG4gIHBhY2tlZE9wU25pcHBldCxcbiAgY2hlY2tPdXRPZkJvdW5kcyA9IGZhbHNlLFxuICBzdXBwb3J0c0NvbXBsZXggPSBmYWxzZSxcbiAgY3B1S2VybmVsSW1wbCxcbiAgZHR5cGVcbn06IEJpbmFyeUtlcm5lbEZ1bmNDb25maWcpOiBLZXJuZWxGdW5jIHtcbiAgcmV0dXJuICh7aW5wdXRzLCBiYWNrZW5kfSkgPT4ge1xuICAgIGNvbnN0IHthLCBifSA9IGlucHV0cyBhcyBCaW5hcnlJbnB1dHM7XG4gICAgY29uc3Qgd2ViZ2xCYWNrZW5kID0gYmFja2VuZCBhcyBNYXRoQmFja2VuZFdlYkdMO1xuXG4gICAgaWYgKHN1cHBvcnRzQ29tcGxleCAmJiBhLmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICAgY29uc3QgYURhdGEgPSB3ZWJnbEJhY2tlbmQudGV4RGF0YS5nZXQoYS5kYXRhSWQpO1xuICAgICAgY29uc3QgYkRhdGEgPSB3ZWJnbEJhY2tlbmQudGV4RGF0YS5nZXQoYi5kYXRhSWQpO1xuXG4gICAgICBjb25zdCBbcmVhbCwgaW1hZ10gPSBbXG4gICAgICAgIFthRGF0YS5jb21wbGV4VGVuc29ySW5mb3MucmVhbCwgYkRhdGEuY29tcGxleFRlbnNvckluZm9zLnJlYWxdLFxuICAgICAgICBbYURhdGEuY29tcGxleFRlbnNvckluZm9zLmltYWcsIGJEYXRhLmNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnXVxuICAgICAgXS5tYXAoY29tcGxleFBhcnRzID0+IHtcbiAgICAgICAgY29uc3QgW2FQYXJ0LCBiUGFydF0gPSBjb21wbGV4UGFydHM7XG5cbiAgICAgICAgY29uc3QgYUhhbmRsZSA9IHtcbiAgICAgICAgICBkYXRhSWQ6IGFQYXJ0LmRhdGFJZCxcbiAgICAgICAgICBkdHlwZTogYVBhcnQuZHR5cGUsXG4gICAgICAgICAgc2hhcGU6IGEuc2hhcGVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYkhhbmRsZSA9IHtcbiAgICAgICAgICBkYXRhSWQ6IGJQYXJ0LmRhdGFJZCxcbiAgICAgICAgICBkdHlwZTogYlBhcnQuZHR5cGUsXG4gICAgICAgICAgc2hhcGU6IGIuc2hhcGVcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtID0gbmV3IEJpbmFyeU9wUHJvZ3JhbShvcFNuaXBwZXQsIGEuc2hhcGUsIGIuc2hhcGUpO1xuICAgICAgICByZXR1cm4gd2ViZ2xCYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgICAgICAgIHByb2dyYW0sIFthSGFuZGxlLCBiSGFuZGxlXSwgdXBjYXN0VHlwZShhUGFydC5kdHlwZSwgYlBhcnQuZHR5cGUpKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb21wbGV4T3V0cHV0ID1cbiAgICAgICAgICBjb21wbGV4KHtpbnB1dHM6IHtyZWFsLCBpbWFnfSwgYmFja2VuZDogd2ViZ2xCYWNrZW5kfSk7XG5cbiAgICAgIHdlYmdsQmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZWFsKTtcbiAgICAgIHdlYmdsQmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbWFnKTtcblxuICAgICAgLy8gVE9ETyhhbm54aW5neXVhbik6IEltcGxlbWVudCBDUFUgZm9yd2FyZGluZyBmb3IgY29tcGxleCBpbnB1dHMuXG5cbiAgICAgIHJldHVybiBjb21wbGV4T3V0cHV0O1xuICAgIH1cblxuICAgIGNvbnN0ICRkdHlwZSA9IGR0eXBlIHx8IHVwY2FzdFR5cGUoYS5kdHlwZSwgYi5kdHlwZSk7XG4gICAgaWYgKChhLmR0eXBlID09PSAnc3RyaW5nJyB8fCBiLmR0eXBlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgd2ViZ2xCYWNrZW5kLnNob3VsZEV4ZWN1dGVPbkNQVShbYSwgYl0pKSAmJlxuICAgICAgICBjcHVLZXJuZWxJbXBsICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGFWYWxzID0gd2ViZ2xCYWNrZW5kLnRleERhdGEuZ2V0KGEuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgICAgIGNvbnN0IGJWYWxzID0gd2ViZ2xCYWNrZW5kLnRleERhdGEuZ2V0KGIuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICAgICAgY29uc3QgZGVjb2RlZEFWYWxzID0gYS5kdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gICAgICAgICAgYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkoYVZhbHMgYXMgYW55IGFzIFVpbnQ4QXJyYXlbXSkgOlxuICAgICAgICAgIGFWYWxzO1xuICAgICAgY29uc3QgZGVjb2RlZEJWYWxzID0gYS5kdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gICAgICAgICAgYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkoYlZhbHMgYXMgYW55IGFzIFVpbnQ4QXJyYXlbXSkgOlxuICAgICAgICAgIGJWYWxzO1xuICAgICAgY29uc3QgW291dFZhbHVlcywgb3V0U2hhcGVdID1cbiAgICAgICAgICBjcHVLZXJuZWxJbXBsKGEuc2hhcGUsIGIuc2hhcGUsIGRlY29kZWRBVmFscywgZGVjb2RlZEJWYWxzLCAkZHR5cGUpO1xuXG4gICAgICBjb25zdCBvdXQgPSB3ZWJnbEJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0U2hhcGUsICRkdHlwZSk7XG4gICAgICBjb25zdCBvdXREYXRhID0gd2ViZ2xCYWNrZW5kLnRleERhdGEuZ2V0KG91dC5kYXRhSWQpO1xuICAgICAgb3V0RGF0YS52YWx1ZXMgPSBvdXRWYWx1ZXM7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFVzZVBhY2tlZFByb2dyYW0gPVxuICAgICAgICBlbnYoKS5nZXRCb29sKCdXRUJHTF9QQUNLX0JJTkFSWV9PUEVSQVRJT05TJykgJiZcbiAgICAgICAgcGFja2VkT3BTbmlwcGV0ICE9IG51bGw7XG4gICAgbGV0IHByb2dyYW06IEJpbmFyeU9wUHJvZ3JhbXxCaW5hcnlPcFBhY2tlZFByb2dyYW07XG4gICAgaWYgKHNob3VsZFVzZVBhY2tlZFByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSBuZXcgQmluYXJ5T3BQYWNrZWRQcm9ncmFtKFxuICAgICAgICAgIHBhY2tlZE9wU25pcHBldCwgYS5zaGFwZSwgYi5zaGFwZSwgY2hlY2tPdXRPZkJvdW5kcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW0gPSBuZXcgQmluYXJ5T3BQcm9ncmFtKG9wU25pcHBldCwgYS5zaGFwZSwgYi5zaGFwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmdsQmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW2EsIGJdLCAkZHR5cGUpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwQWN0aXZhdGlvblRvU2hhZGVyUHJvZ3JhbShcbiAgICBhY3RpdmF0aW9uOiBiYWNrZW5kX3V0aWwuQWN0aXZhdGlvbiwgcGFja2VkID0gZmFsc2UpOiBzdHJpbmcge1xuICBpZiAoYWN0aXZhdGlvbiA9PT0gJ2xpbmVhcicpIHtcbiAgICBpZiAocGFja2VkKSB7XG4gICAgICByZXR1cm4gdW5hcnlfcGFja2VkX29wLkxJTkVBUjtcbiAgICB9XG4gICAgcmV0dXJuIHVuYXJ5X29wLkxJTkVBUjtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAncmVsdScpIHtcbiAgICBpZiAocGFja2VkKSB7XG4gICAgICByZXR1cm4gdW5hcnlfcGFja2VkX29wLlJFTFU7XG4gICAgfVxuICAgIHJldHVybiB1bmFyeV9vcC5SRUxVO1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdlbHUnKSB7XG4gICAgaWYgKHBhY2tlZCkge1xuICAgICAgcmV0dXJuIHVuYXJ5X3BhY2tlZF9vcC5FTFU7XG4gICAgfVxuICAgIHJldHVybiB1bmFyeV9vcC5FTFU7XG4gIH0gZWxzZSBpZiAoYWN0aXZhdGlvbiA9PT0gJ3JlbHU2Jykge1xuICAgIGlmIChwYWNrZWQpIHtcbiAgICAgIHJldHVybiB1bmFyeV9wYWNrZWRfb3AuUkVMVTY7XG4gICAgfVxuICAgIHJldHVybiB1bmFyeV9vcC5SRUxVNjtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAncHJlbHUnKSB7XG4gICAgaWYgKHBhY2tlZCkge1xuICAgICAgcmV0dXJuIFBSRUxVX1BBQ0tFRDtcbiAgICB9XG4gICAgcmV0dXJuIFBSRUxVO1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdsZWFreXJlbHUnKSB7XG4gICAgaWYgKHBhY2tlZCkge1xuICAgICAgcmV0dXJuIExFQUtZUkVMVV9QQUNLRUQ7XG4gICAgfVxuICAgIHJldHVybiBMRUFLWVJFTFU7XG4gIH0gZWxzZSBpZiAoYWN0aXZhdGlvbiA9PT0gJ3NpZ21vaWQnKSB7XG4gICAgaWYgKHBhY2tlZCkge1xuICAgICAgcmV0dXJuIHVuYXJ5X3BhY2tlZF9vcC5TSUdNT0lEO1xuICAgIH1cbiAgICByZXR1cm4gdW5hcnlfb3AuU0lHTU9JRDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEFjdGl2YXRpb24gJHtcbiAgICAgIGFjdGl2YXRpb259IGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCBmb3IgdGhlIFdlYkdMIGJhY2tlbmQuYCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { useShapeUniforms } from './gpgpu_math';\nexport class MatMulPackedProgram {\n constructor(aShape, bShape, outputShape, transposeA = false, transposeB = false, addBias = false, activation = null, hasPreluActivation = false, hasLeakyreluActivation = false) {\n this.variableNames = ['matrixA', 'matrixB'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = outputShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n const sharedDim = transposeA ? aShape[1] : aShape[2];\n const sharedDimensionPacked = Math.ceil(sharedDim / 2);\n const aSample = transposeA ? 'i * 2, rc.y' : 'rc.y, i * 2';\n const bSample = transposeB ? 'rc.z, i * 2' : 'i * 2, rc.z';\n const aSwizzle = transposeA ? ['a.xxyy', 'a.zzww'] : ['a.xxzz', 'a.yyww'];\n const bSwizzle = transposeB ? ['b.xzxz', 'b.ywyw'] : ['b.xyxy', 'b.zwzw'];\n let activationSnippet = '', applyActivationSnippet = '';\n if (activation) {\n if (hasPreluActivation) {\n activationSnippet = `vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n ${activation}\n }`;\n }\n else if (hasLeakyreluActivation) {\n activationSnippet = `vec4 activation(vec4 a) {\n vec4 b = getLeakyreluAlphaAtOutCoords();\n ${activation}\n }`;\n }\n else {\n activationSnippet = `vec4 activation(vec4 x) {\n ${activation}\n }`;\n }\n applyActivationSnippet = `result = activation(result);`;\n }\n const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n if (addBias) {\n this.variableNames.push('bias');\n }\n if (hasPreluActivation) {\n this.variableNames.push('preluActivationWeights');\n }\n if (hasLeakyreluActivation) {\n this.variableNames.push('leakyreluAlpha');\n }\n let batchASnippet = 'rc.x';\n let batchBSnippet = 'rc.x';\n if (aShape[0] < bShape[0]) {\n batchASnippet = `imod(rc.x, ${aShape[0]})`;\n }\n else if (bShape[0] < aShape[0]) {\n batchBSnippet = `imod(rc.x, ${bShape[0]})`;\n }\n 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 int batchA = ${batchASnippet};\n int batchB = ${batchBSnippet};\n for (int i = 0; i < ${sharedDimensionPacked}; i++) {\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsbWF0X3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL211bG1hdF9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUU1RCxNQUFNLE9BQU8sbUJBQW1CO0lBUTlCLFlBQ0ksTUFBZ0MsRUFBRSxNQUFnQyxFQUNsRSxXQUFxQyxFQUFFLFVBQVUsR0FBRyxLQUFLLEVBQ3pELFVBQVUsR0FBRyxLQUFLLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRSxhQUFxQixJQUFJLEVBQzlELGtCQUFrQixHQUFHLEtBQUssRUFBRSxzQkFBc0IsR0FBRyxLQUFLO1FBWDlELGtCQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkMsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFVbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckUsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXZELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUxRSxJQUFJLGlCQUFpQixHQUFHLEVBQUUsRUFBRSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDeEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLGtCQUFrQixFQUFFO2dCQUN0QixpQkFBaUIsR0FBRzs7WUFFaEIsVUFBVTtVQUNaLENBQUM7YUFDSjtpQkFBTSxJQUFJLHNCQUFzQixFQUFFO2dCQUNqQyxpQkFBaUIsR0FBRzs7WUFFaEIsVUFBVTtVQUNaLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxpQkFBaUIsR0FBRztZQUNoQixVQUFVO1VBQ1osQ0FBQzthQUNKO1lBRUQsc0JBQXNCLEdBQUcsOEJBQThCLENBQUM7U0FDekQ7UUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEUsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqQztRQUVELElBQUksa0JBQWtCLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUNuRDtRQUVELElBQUksc0JBQXNCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUMzQixJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDM0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pCLGFBQWEsR0FBRyxjQUFjLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1NBQzVDO2FBQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLGFBQWEsR0FBRyxjQUFjLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRztRQUNaLGlCQUFpQjs7c0NBRWEscUJBQXFCOzs7O3VCQUlwQyxhQUFhO3VCQUNiLGFBQWE7OEJBQ04scUJBQXFCO3dDQUNYLE9BQU87d0NBQ1AsT0FBTzs7Ozt1QkFJeEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUM7dUJBQzVCLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7VUFTekMsY0FBYzs7VUFFZCxzQkFBc0I7Ozs7S0FJM0IsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW0sIHVzZVNoYXBlVW5pZm9ybXN9IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBNYXRNdWxQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnbWF0cml4QScsICdtYXRyaXhCJ107XG4gIHBhY2tlZElucHV0cyA9IHRydWU7XG4gIHBhY2tlZE91dHB1dCA9IHRydWU7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIGFTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBiU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgIG91dHB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHRyYW5zcG9zZUEgPSBmYWxzZSxcbiAgICAgIHRyYW5zcG9zZUIgPSBmYWxzZSwgYWRkQmlhcyA9IGZhbHNlLCBhY3RpdmF0aW9uOiBzdHJpbmcgPSBudWxsLFxuICAgICAgaGFzUHJlbHVBY3RpdmF0aW9uID0gZmFsc2UsIGhhc0xlYWt5cmVsdUFjdGl2YXRpb24gPSBmYWxzZSkge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPSB1c2VTaGFwZVVuaWZvcm1zKHRoaXMub3V0cHV0U2hhcGUubGVuZ3RoKTtcblxuICAgIGNvbnN0IHNoYXJlZERpbSA9IHRyYW5zcG9zZUEgPyBhU2hhcGVbMV0gOiBhU2hhcGVbMl07XG4gICAgY29uc3Qgc2hhcmVkRGltZW5zaW9uUGFja2VkID0gTWF0aC5jZWlsKHNoYXJlZERpbSAvIDIpO1xuXG4gICAgY29uc3QgYVNhbXBsZSA9IHRyYW5zcG9zZUEgPyAnaSAqIDIsIHJjLnknIDogJ3JjLnksIGkgKiAyJztcbiAgICBjb25zdCBiU2FtcGxlID0gdHJhbnNwb3NlQiA/ICdyYy56LCBpICogMicgOiAnaSAqIDIsIHJjLnonO1xuICAgIGNvbnN0IGFTd2l6emxlID0gdHJhbnNwb3NlQSA/IFsnYS54eHl5JywgJ2Euenp3dyddIDogWydhLnh4enonLCAnYS55eXd3J107XG4gICAgY29uc3QgYlN3aXp6bGUgPSB0cmFuc3Bvc2VCID8gWydiLnh6eHonLCAnYi55d3l3J10gOiBbJ2IueHl4eScsICdiLnp3encnXTtcblxuICAgIGxldCBhY3RpdmF0aW9uU25pcHBldCA9ICcnLCBhcHBseUFjdGl2YXRpb25TbmlwcGV0ID0gJyc7XG4gICAgaWYgKGFjdGl2YXRpb24pIHtcbiAgICAgIGlmIChoYXNQcmVsdUFjdGl2YXRpb24pIHtcbiAgICAgICAgYWN0aXZhdGlvblNuaXBwZXQgPSBgdmVjNCBhY3RpdmF0aW9uKHZlYzQgYSkge1xuICAgICAgICAgIHZlYzQgYiA9IGdldFByZWx1QWN0aXZhdGlvbldlaWdodHNBdE91dENvb3JkcygpO1xuICAgICAgICAgICR7YWN0aXZhdGlvbn1cbiAgICAgICAgfWA7XG4gICAgICB9IGVsc2UgaWYgKGhhc0xlYWt5cmVsdUFjdGl2YXRpb24pIHtcbiAgICAgICAgYWN0aXZhdGlvblNuaXBwZXQgPSBgdmVjNCBhY3RpdmF0aW9uKHZlYzQgYSkge1xuICAgICAgICAgIHZlYzQgYiA9IGdldExlYWt5cmVsdUFscGhhQXRPdXRDb29yZHMoKTtcbiAgICAgICAgICAke2FjdGl2YXRpb259XG4gICAgICAgIH1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZhdGlvblNuaXBwZXQgPSBgdmVjNCBhY3RpdmF0aW9uKHZlYzQgeCkge1xuICAgICAgICAgICR7YWN0aXZhdGlvbn1cbiAgICAgICAgfWA7XG4gICAgICB9XG5cbiAgICAgIGFwcGx5QWN0aXZhdGlvblNuaXBwZXQgPSBgcmVzdWx0ID0gYWN0aXZhdGlvbihyZXN1bHQpO2A7XG4gICAgfVxuXG4gICAgY29uc3QgYWRkQmlhc1NuaXBwZXQgPSBhZGRCaWFzID8gJ3Jlc3VsdCArPSBnZXRCaWFzQXRPdXRDb29yZHMoKTsnIDogJyc7XG4gICAgaWYgKGFkZEJpYXMpIHtcbiAgICAgIHRoaXMudmFyaWFibGVOYW1lcy5wdXNoKCdiaWFzJyk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ByZWx1QWN0aXZhdGlvbikge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ3ByZWx1QWN0aXZhdGlvbldlaWdodHMnKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzTGVha3lyZWx1QWN0aXZhdGlvbikge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ2xlYWt5cmVsdUFscGhhJyk7XG4gICAgfVxuXG4gICAgbGV0IGJhdGNoQVNuaXBwZXQgPSAncmMueCc7XG4gICAgbGV0IGJhdGNoQlNuaXBwZXQgPSAncmMueCc7XG4gICAgaWYgKGFTaGFwZVswXSA8IGJTaGFwZVswXSkge1xuICAgICAgYmF0Y2hBU25pcHBldCA9IGBpbW9kKHJjLngsICR7YVNoYXBlWzBdfSlgO1xuICAgIH0gZWxzZSBpZiAoYlNoYXBlWzBdIDwgYVNoYXBlWzBdKSB7XG4gICAgICBiYXRjaEJTbmlwcGV0ID0gYGltb2QocmMueCwgJHtiU2hhcGVbMF19KWA7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgICR7YWN0aXZhdGlvblNuaXBwZXR9XG4gICAgICAvLyBEb24ndCB1c2UgdW5pZm9ybSBmb3Igc2hhcmVkRGltZW5zaW9uUGFja2VkIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgIGNvbnN0IGZsb2F0IHNoYXJlZERpbWVuc2lvbiA9ICR7c2hhcmVkRGltZW5zaW9uUGFja2VkfS4wO1xuXG4gICAgICB2ZWM0IGRvdDJ4MkFSb3dCQ29sKGl2ZWMzIHJjKSB7XG4gICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwKTtcbiAgICAgICAgaW50IGJhdGNoQSA9ICR7YmF0Y2hBU25pcHBldH07XG4gICAgICAgIGludCBiYXRjaEIgPSAke2JhdGNoQlNuaXBwZXR9O1xuICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8ICR7c2hhcmVkRGltZW5zaW9uUGFja2VkfTsgaSsrKSB7XG4gICAgICAgICAgdmVjNCBhID0gZ2V0TWF0cml4QShiYXRjaEEsICR7YVNhbXBsZX0pO1xuICAgICAgICAgIHZlYzQgYiA9IGdldE1hdHJpeEIoYmF0Y2hCLCAke2JTYW1wbGV9KTtcblxuICAgICAgICAgIC8vIFRoZXNlIHN3aXp6bGVkIHByb2R1Y3RzIG5lZWQgdG8gYmUgc2VwYXJhdGVseSBhZGRlZC5cbiAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMvaXNzdWVzLzE3MzVcbiAgICAgICAgICByZXN1bHQgKz0gKCR7YVN3aXp6bGVbMF19ICogJHtiU3dpenpsZVswXX0pO1xuICAgICAgICAgIHJlc3VsdCArPSAoJHthU3dpenpsZVsxXX0gKiAke2JTd2l6emxlWzFdfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjMyByYyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICB2ZWM0IHJlc3VsdCA9IGRvdDJ4MkFSb3dCQ29sKHJjKTtcblxuICAgICAgICAke2FkZEJpYXNTbmlwcGV0fVxuXG4gICAgICAgICR7YXBwbHlBY3RpdmF0aW9uU25pcHBldH1cblxuICAgICAgICBzZXRPdXRwdXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\n// (Ar + Ai)(Br + Bi) =\n// ArBr + ArBi + AiBr + AiBi = ArBr - AB + ArBi + AiBr\n// Yr = ArBr - AB\n// Yi = ArBi + AiBr\nexport const COMPLEX_MULTIPLY = {\n REAL: 'return areal * breal - aimag * bimag;',\n IMAG: 'return areal * bimag + aimag * breal;'\n};\nexport class BinaryOpComplexProgram {\n constructor(op, aShape, bShape) {\n this.variableNames = ['AReal', 'AImag', 'BReal', 'BImag'];\n this.outputShape = backend_util.assertAndGetBroadcastShape(aShape, bShape);\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5b3BfY29tcGxleF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2JpbmFyeW9wX2NvbXBsZXhfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCx1QkFBdUI7QUFDdkIsc0RBQXNEO0FBQ3RELGlCQUFpQjtBQUNqQixtQkFBbUI7QUFDbkIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsSUFBSSxFQUFFLHVDQUF1QztJQUM3QyxJQUFJLEVBQUUsdUNBQXVDO0NBQzlDLENBQUM7QUFFRixNQUFNLE9BQU8sc0JBQXNCO0lBS2pDLFlBQVksRUFBVSxFQUFFLE1BQWdCLEVBQUUsTUFBZ0I7UUFKMUQsa0JBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBS25ELElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUMsUUFBUSxHQUFHOzs7VUFHVixFQUFFOzs7Ozs7Ozs7O0tBVVAsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuLy8gKEFyICsgQWkpKEJyICsgQmkpID1cbi8vIEFyQnIgKyBBckJpICsgQWlCciArIEFpQmkgPSBBckJyIC0gQUIgKyBBckJpICsgQWlCclxuLy8gWXIgPSBBckJyIC0gQUJcbi8vIFlpID0gQXJCaSArIEFpQnJcbmV4cG9ydCBjb25zdCBDT01QTEVYX01VTFRJUExZID0ge1xuICBSRUFMOiAncmV0dXJuIGFyZWFsICogYnJlYWwgLSBhaW1hZyAqIGJpbWFnOycsXG4gIElNQUc6ICdyZXR1cm4gYXJlYWwgKiBiaW1hZyArIGFpbWFnICogYnJlYWw7J1xufTtcblxuZXhwb3J0IGNsYXNzIEJpbmFyeU9wQ29tcGxleFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBUmVhbCcsICdBSW1hZycsICdCUmVhbCcsICdCSW1hZyddO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3Iob3A6IHN0cmluZywgYVNoYXBlOiBudW1iZXJbXSwgYlNoYXBlOiBudW1iZXJbXSkge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBiYWNrZW5kX3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoYVNoYXBlLCBiU2hhcGUpO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGZsb2F0IGJpbmFyeU9wQ29tcGxleChcbiAgICAgICAgICBmbG9hdCBhcmVhbCwgZmxvYXQgYWltYWcsIGZsb2F0IGJyZWFsLCBmbG9hdCBiaW1hZykge1xuICAgICAgICAke29wfVxuICAgICAgfVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGZsb2F0IGFyZWFsID0gZ2V0QVJlYWxBdE91dENvb3JkcygpO1xuICAgICAgICBmbG9hdCBhaW1hZyA9IGdldEFJbWFnQXRPdXRDb29yZHMoKTtcbiAgICAgICAgZmxvYXQgYnJlYWwgPSBnZXRCUmVhbEF0T3V0Q29vcmRzKCk7XG4gICAgICAgIGZsb2F0IGJpbWFnID0gZ2V0QkltYWdBdE91dENvb3JkcygpO1xuICAgICAgICBzZXRPdXRwdXQoYmluYXJ5T3BDb21wbGV4KGFyZWFsLCBhaW1hZywgYnJlYWwsIGJpbWFnKSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, env, Multiply } from '@tensorflow/tfjs-core';\nimport * as binaryop_complex_gpu from '../binaryop_complex_gpu';\nimport { BinaryOpComplexProgram } from '../binaryop_complex_gpu';\nimport { BinaryOpProgram } from '../binaryop_gpu';\nimport { BinaryOpPackedProgram } from '../binaryop_packed_gpu';\nimport { multiplyImplCPU as cpuMultiply } from '../kernel_utils/shared';\nimport { complex } from './Complex';\nconst MUL = 'return a * b;';\nexport function multiply(args) {\n const { inputs, backend } = args;\n const { a, b } = inputs;\n const dtype = backend_util.upcastType(a.dtype, b.dtype);\n if (a.dtype === 'complex64') {\n const aData = backend.texData.get(a.dataId);\n const bData = backend.texData.get(b.dataId);\n const realProgram = new BinaryOpComplexProgram(binaryop_complex_gpu.COMPLEX_MULTIPLY.REAL, a.shape, b.shape);\n const imagProgram = new BinaryOpComplexProgram(binaryop_complex_gpu.COMPLEX_MULTIPLY.IMAG, a.shape, b.shape);\n const inputs = [\n {\n dataId: aData.complexTensorInfos.real.dataId,\n dtype: aData.complexTensorInfos.real.dtype,\n shape: a.shape\n },\n {\n dataId: aData.complexTensorInfos.imag.dataId,\n dtype: aData.complexTensorInfos.imag.dtype,\n shape: a.shape\n },\n {\n dataId: bData.complexTensorInfos.real.dataId,\n dtype: bData.complexTensorInfos.real.dtype,\n shape: b.shape\n },\n {\n dataId: bData.complexTensorInfos.imag.dataId,\n dtype: bData.complexTensorInfos.imag.dtype,\n shape: b.shape\n }\n ];\n const realPart = backend.runWebGLProgram(realProgram, inputs, 'float32');\n const imagPart = backend.runWebGLProgram(imagProgram, inputs, 'float32');\n const complexOutput = complex({ inputs: { real: realPart, imag: imagPart }, backend });\n backend.disposeIntermediateTensorInfo(realPart);\n backend.disposeIntermediateTensorInfo(imagPart);\n // TODO(annxingyuan): CPU forwarding for complex inputs.\n return complexOutput;\n }\n if (backend.shouldExecuteOnCPU([a, b])) {\n const aData = backend.texData.get(a.dataId);\n const bData = backend.texData.get(b.dataId);\n const [outValues, outShape] = cpuMultiply(a.shape, b.shape, aData.values, bData.values, dtype);\n const out = backend.makeTensorInfo(outShape, dtype);\n const outData = backend.texData.get(out.dataId);\n outData.values = outValues;\n return out;\n }\n let program;\n if (env().getBool('WEBGL_PACK_BINARY_OPERATIONS')) {\n program = new BinaryOpPackedProgram(MUL, a.shape, b.shape);\n }\n else {\n program = new BinaryOpProgram(MUL, a.shape, b.shape);\n }\n return backend.runWebGLProgram(program, [a, b], dtype);\n}\nexport const multiplyConfig = {\n kernelName: Multiply,\n backendName: 'webgl',\n kernelFunc: multiply\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlwbHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvTXVsdGlwbHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBZ0IsR0FBRyxFQUFnQixRQUFRLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFHdEgsT0FBTyxLQUFLLG9CQUFvQixNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZUFBZSxJQUFJLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDO0FBRTVCLE1BQU0sVUFBVSxRQUFRLENBQ3BCLElBQXVEO0lBQ3pELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3RCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUMzQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVDLE1BQU0sV0FBVyxHQUFHLElBQUksc0JBQXNCLENBQzFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxNQUFNLFdBQVcsR0FBRyxJQUFJLHNCQUFzQixDQUMxQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEUsTUFBTSxNQUFNLEdBQUc7WUFDYjtnQkFDRSxNQUFNLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNO2dCQUM1QyxLQUFLLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUMxQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7YUFDZjtZQUNEO2dCQUNFLE1BQU0sRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQzVDLEtBQUssRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQzFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSzthQUNmO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDNUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFDMUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2FBQ2Y7WUFDRDtnQkFDRSxNQUFNLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNO2dCQUM1QyxLQUFLLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUMxQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7YUFDZjtTQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sYUFBYSxHQUNmLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFFakUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoRCx3REFBd0Q7UUFDeEQsT0FBTyxhQUFhLENBQUM7S0FDdEI7SUFFRCxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxXQUFXLENBQ3JDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBb0IsRUFDNUMsS0FBSyxDQUFDLE1BQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzNCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxJQUFJLE9BQThDLENBQUM7SUFDbkQsSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsRUFBRTtRQUNqRCxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUQ7U0FBTTtRQUNMLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEQ7SUFFRCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBCaW5hcnlJbnB1dHMsIGVudiwgS2VybmVsQ29uZmlnLCBNdWx0aXBseSwgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCAqIGFzIGJpbmFyeW9wX2NvbXBsZXhfZ3B1IGZyb20gJy4uL2JpbmFyeW9wX2NvbXBsZXhfZ3B1JztcbmltcG9ydCB7QmluYXJ5T3BDb21wbGV4UHJvZ3JhbX0gZnJvbSAnLi4vYmluYXJ5b3BfY29tcGxleF9ncHUnO1xuaW1wb3J0IHtCaW5hcnlPcFByb2dyYW19IGZyb20gJy4uL2JpbmFyeW9wX2dwdSc7XG5pbXBvcnQge0JpbmFyeU9wUGFja2VkUHJvZ3JhbX0gZnJvbSAnLi4vYmluYXJ5b3BfcGFja2VkX2dwdSc7XG5pbXBvcnQge211bHRpcGx5SW1wbENQVSBhcyBjcHVNdWx0aXBseX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmltcG9ydCB7Y29tcGxleH0gZnJvbSAnLi9Db21wbGV4JztcblxuY29uc3QgTVVMID0gJ3JldHVybiBhICogYjsnO1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkoXG4gICAgYXJnczoge2lucHV0czogQmluYXJ5SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMfSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHthLCBifSA9IGlucHV0cztcbiAgY29uc3QgZHR5cGUgPSBiYWNrZW5kX3V0aWwudXBjYXN0VHlwZShhLmR0eXBlLCBiLmR0eXBlKTtcblxuICBpZiAoYS5kdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICBjb25zdCBhRGF0YSA9IGJhY2tlbmQudGV4RGF0YS5nZXQoYS5kYXRhSWQpO1xuICAgIGNvbnN0IGJEYXRhID0gYmFja2VuZC50ZXhEYXRhLmdldChiLmRhdGFJZCk7XG5cbiAgICBjb25zdCByZWFsUHJvZ3JhbSA9IG5ldyBCaW5hcnlPcENvbXBsZXhQcm9ncmFtKFxuICAgICAgICBiaW5hcnlvcF9jb21wbGV4X2dwdS5DT01QTEVYX01VTFRJUExZLlJFQUwsIGEuc2hhcGUsIGIuc2hhcGUpO1xuICAgIGNvbnN0IGltYWdQcm9ncmFtID0gbmV3IEJpbmFyeU9wQ29tcGxleFByb2dyYW0oXG4gICAgICAgIGJpbmFyeW9wX2NvbXBsZXhfZ3B1LkNPTVBMRVhfTVVMVElQTFkuSU1BRywgYS5zaGFwZSwgYi5zaGFwZSk7XG5cbiAgICBjb25zdCBpbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGRhdGFJZDogYURhdGEuY29tcGxleFRlbnNvckluZm9zLnJlYWwuZGF0YUlkLFxuICAgICAgICBkdHlwZTogYURhdGEuY29tcGxleFRlbnNvckluZm9zLnJlYWwuZHR5cGUsXG4gICAgICAgIHNoYXBlOiBhLnNoYXBlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkYXRhSWQ6IGFEYXRhLmNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnLmRhdGFJZCxcbiAgICAgICAgZHR5cGU6IGFEYXRhLmNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnLmR0eXBlLFxuICAgICAgICBzaGFwZTogYS5zaGFwZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGF0YUlkOiBiRGF0YS5jb21wbGV4VGVuc29ySW5mb3MucmVhbC5kYXRhSWQsXG4gICAgICAgIGR0eXBlOiBiRGF0YS5jb21wbGV4VGVuc29ySW5mb3MucmVhbC5kdHlwZSxcbiAgICAgICAgc2hhcGU6IGIuc2hhcGVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRhdGFJZDogYkRhdGEuY29tcGxleFRlbnNvckluZm9zLmltYWcuZGF0YUlkLFxuICAgICAgICBkdHlwZTogYkRhdGEuY29tcGxleFRlbnNvckluZm9zLmltYWcuZHR5cGUsXG4gICAgICAgIHNoYXBlOiBiLnNoYXBlXG4gICAgICB9XG4gICAgXTtcblxuICAgIGNvbnN0IHJlYWxQYXJ0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocmVhbFByb2dyYW0sIGlucHV0cywgJ2Zsb2F0MzInKTtcbiAgICBjb25zdCBpbWFnUGFydCA9IGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKGltYWdQcm9ncmFtLCBpbnB1dHMsICdmbG9hdDMyJyk7XG5cbiAgICBjb25zdCBjb21wbGV4T3V0cHV0ID1cbiAgICAgICAgY29tcGxleCh7aW5wdXRzOiB7cmVhbDogcmVhbFBhcnQsIGltYWc6IGltYWdQYXJ0fSwgYmFja2VuZH0pO1xuXG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZWFsUGFydCk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbWFnUGFydCk7XG5cbiAgICAvLyBUT0RPKGFubnhpbmd5dWFuKTogQ1BVIGZvcndhcmRpbmcgZm9yIGNvbXBsZXggaW5wdXRzLlxuICAgIHJldHVybiBjb21wbGV4T3V0cHV0O1xuICB9XG5cbiAgaWYgKGJhY2tlbmQuc2hvdWxkRXhlY3V0ZU9uQ1BVKFthLCBiXSkpIHtcbiAgICBjb25zdCBhRGF0YSA9IGJhY2tlbmQudGV4RGF0YS5nZXQoYS5kYXRhSWQpO1xuICAgIGNvbnN0IGJEYXRhID0gYmFja2VuZC50ZXhEYXRhLmdldChiLmRhdGFJZCk7XG4gICAgY29uc3QgW291dFZhbHVlcywgb3V0U2hhcGVdID0gY3B1TXVsdGlwbHkoXG4gICAgICAgIGEuc2hhcGUsIGIuc2hhcGUsIGFEYXRhLnZhbHVlcyBhcyBUeXBlZEFycmF5LFxuICAgICAgICBiRGF0YS52YWx1ZXMgYXMgVHlwZWRBcnJheSwgZHR5cGUpO1xuXG4gICAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRTaGFwZSwgZHR5cGUpO1xuICAgIGNvbnN0IG91dERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KG91dC5kYXRhSWQpO1xuICAgIG91dERhdGEudmFsdWVzID0gb3V0VmFsdWVzO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBsZXQgcHJvZ3JhbTogQmluYXJ5T3BQcm9ncmFtfEJpbmFyeU9wUGFja2VkUHJvZ3JhbTtcbiAgaWYgKGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfQklOQVJZX09QRVJBVElPTlMnKSkge1xuICAgIHByb2dyYW0gPSBuZXcgQmluYXJ5T3BQYWNrZWRQcm9ncmFtKE1VTCwgYS5zaGFwZSwgYi5zaGFwZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvZ3JhbSA9IG5ldyBCaW5hcnlPcFByb2dyYW0oTVVMLCBhLnNoYXBlLCBiLnNoYXBlKTtcbiAgfVxuXG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbYSwgYl0sIGR0eXBlKTtcbn1cblxuZXhwb3J0IGNvbnN0IG11bHRpcGx5Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE11bHRpcGx5LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogbXVsdGlwbHlcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Reshape, util } from '@tensorflow/tfjs-core';\nimport { packedReshape } from '../kernel_utils/reshape';\nimport { isReshapeFree } from '../webgl_util';\nexport function reshape(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { shape } = attrs;\n const webglBackend = backend;\n const xSize = util.sizeFromShape(x.shape);\n const $shape = util.inferFromImplicitShape(shape, xSize);\n const $xSize = util.sizeFromShape($shape);\n util.assert(xSize === $xSize, () => `The new shape (${$shape}) has ${$xSize} elements and the old ` +\n `shape (${x.shape}) has ${xSize} elements. The new shape and old ` +\n `shape must have the same number of elements.`);\n const xTexData = webglBackend.texData.get(x.dataId);\n if (xTexData.isPacked && !isReshapeFree(x.shape, $shape) &&\n !(xTexData.texture !== null && isReshapeFree(xTexData.shape, $shape))) {\n return packedReshape(x, $shape, webglBackend);\n }\n webglBackend.incRef(x.dataId);\n return { dataId: x.dataId, shape: $shape, dtype: x.dtype };\n}\nexport const reshapeConfig = {\n kernelName: Reshape,\n backendName: 'webgl',\n kernelFunc: reshape\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9SZXNoYXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsT0FBTyxFQUEyQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd2SCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU1QyxNQUFNLFVBQVUsT0FBTyxDQUFDLElBSXZCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztJQUN0QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUM7SUFFN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxLQUFLLE1BQU0sRUFDaEIsR0FBRyxFQUFFLENBQUMsa0JBQWtCLE1BQU0sU0FBUyxNQUFNLHdCQUF3QjtRQUNqRSxVQUFVLENBQUMsQ0FBQyxLQUFLLFNBQVMsS0FBSyxtQ0FBbUM7UUFDbEUsOENBQThDLENBQUMsQ0FBQztJQUV4RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQ3BELENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO1FBQ3pFLE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDL0M7SUFFRCxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixPQUFPLEVBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmVzaGFwZSwgUmVzaGFwZUF0dHJzLCBSZXNoYXBlSW5wdXRzLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtwYWNrZWRSZXNoYXBlfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvcmVzaGFwZSc7XG5pbXBvcnQge2lzUmVzaGFwZUZyZWV9IGZyb20gJy4uL3dlYmdsX3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzaGFwZShhcmdzOiB7XG4gIGlucHV0czogUmVzaGFwZUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFJlc2hhcGVBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzaGFwZX0gPSBhdHRycztcbiAgY29uc3Qgd2ViZ2xCYWNrZW5kID0gYmFja2VuZDtcblxuICBjb25zdCB4U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSh4LnNoYXBlKTtcbiAgY29uc3QgJHNoYXBlID0gdXRpbC5pbmZlckZyb21JbXBsaWNpdFNoYXBlKHNoYXBlLCB4U2l6ZSk7XG4gIGNvbnN0ICR4U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSgkc2hhcGUpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeFNpemUgPT09ICR4U2l6ZSxcbiAgICAgICgpID0+IGBUaGUgbmV3IHNoYXBlICgkeyRzaGFwZX0pIGhhcyAkeyR4U2l6ZX0gZWxlbWVudHMgYW5kIHRoZSBvbGQgYCArXG4gICAgICAgICAgYHNoYXBlICgke3guc2hhcGV9KSBoYXMgJHt4U2l6ZX0gZWxlbWVudHMuIFRoZSBuZXcgc2hhcGUgYW5kIG9sZCBgICtcbiAgICAgICAgICBgc2hhcGUgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cy5gKTtcblxuICBjb25zdCB4VGV4RGF0YSA9IHdlYmdsQmFja2VuZC50ZXhEYXRhLmdldCh4LmRhdGFJZCk7XG4gIGlmICh4VGV4RGF0YS5pc1BhY2tlZCAmJiAhaXNSZXNoYXBlRnJlZSh4LnNoYXBlLCAkc2hhcGUpICYmXG4gICAgICAhKHhUZXhEYXRhLnRleHR1cmUgIT09IG51bGwgJiYgaXNSZXNoYXBlRnJlZSh4VGV4RGF0YS5zaGFwZSwgJHNoYXBlKSkpIHtcbiAgICByZXR1cm4gcGFja2VkUmVzaGFwZSh4LCAkc2hhcGUsIHdlYmdsQmFja2VuZCk7XG4gIH1cblxuICB3ZWJnbEJhY2tlbmQuaW5jUmVmKHguZGF0YUlkKTtcblxuICByZXR1cm4ge2RhdGFJZDogeC5kYXRhSWQsIHNoYXBlOiAkc2hhcGUsIGR0eXBlOiB4LmR0eXBlfTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlc2hhcGVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmVzaGFwZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHJlc2hhcGUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ReshapePackedProgram } from '../reshape_packed_gpu';\nimport { getBatchDim, getRowsCols } from '../webgl_util';\nexport function packedReshape(input, afterShape, backend) {\n const input3DShape = [getBatchDim(input.shape),\n ...getRowsCols(input.shape)];\n const input3D = {\n dtype: input.dtype,\n shape: input3DShape,\n dataId: input.dataId\n };\n const afterShapeAs3D = [getBatchDim(afterShape),\n ...getRowsCols(afterShape)];\n const program = new ReshapePackedProgram(afterShapeAs3D, input3DShape);\n const preventEagerUnpackingOfOutput = true;\n const customValues = [input3DShape];\n const output = backend.runWebGLProgram(program, [input3D], input.dtype, customValues, preventEagerUnpackingOfOutput);\n return { dataId: output.dataId, shape: afterShape, dtype: output.dtype };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVsX3V0aWxzL3Jlc2hhcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdkQsTUFBTSxVQUFVLGFBQWEsQ0FDekIsS0FBaUIsRUFBRSxVQUFvQixFQUN2QyxPQUF5QjtJQUMzQixNQUFNLFlBQVksR0FDZCxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBNkIsQ0FBQztJQUM5RCxNQUFNLE9BQU8sR0FBZTtRQUMxQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsS0FBSyxFQUFFLFlBQVk7UUFDbkIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO0tBQ3JCLENBQUM7SUFDRixNQUFNLGNBQWMsR0FDaEIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQ3ZCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUE2QixDQUFDO0lBRTdELE1BQU0sT0FBTyxHQUFHLElBQUksb0JBQW9CLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxDQUFDO0lBQzNDLE1BQU0sWUFBWSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FDbEMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQzdDLDZCQUE2QixDQUFDLENBQUM7SUFDbkMsT0FBTyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQztBQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge1Jlc2hhcGVQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9yZXNoYXBlX3BhY2tlZF9ncHUnO1xuaW1wb3J0IHtnZXRCYXRjaERpbSwgZ2V0Um93c0NvbHN9IGZyb20gJy4uL3dlYmdsX3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFja2VkUmVzaGFwZShcbiAgICBpbnB1dDogVGVuc29ySW5mbywgYWZ0ZXJTaGFwZTogbnVtYmVyW10sXG4gICAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCk6IFRlbnNvckluZm8ge1xuICBjb25zdCBpbnB1dDNEU2hhcGUgPVxuICAgICAgW2dldEJhdGNoRGltKGlucHV0LnNoYXBlKSxcbiAgICAgICAuLi5nZXRSb3dzQ29scyhpbnB1dC5zaGFwZSldIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgY29uc3QgaW5wdXQzRDogVGVuc29ySW5mbyA9IHtcbiAgICBkdHlwZTogaW5wdXQuZHR5cGUsXG4gICAgc2hhcGU6IGlucHV0M0RTaGFwZSxcbiAgICBkYXRhSWQ6IGlucHV0LmRhdGFJZFxuICB9O1xuICBjb25zdCBhZnRlclNoYXBlQXMzRCA9XG4gICAgICBbZ2V0QmF0Y2hEaW0oYWZ0ZXJTaGFwZSksXG4gICAgICAgLi4uZ2V0Um93c0NvbHMoYWZ0ZXJTaGFwZSldIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuICBjb25zdCBwcm9ncmFtID0gbmV3IFJlc2hhcGVQYWNrZWRQcm9ncmFtKGFmdGVyU2hhcGVBczNELCBpbnB1dDNEU2hhcGUpO1xuICBjb25zdCBwcmV2ZW50RWFnZXJVbnBhY2tpbmdPZk91dHB1dCA9IHRydWU7XG4gIGNvbnN0IGN1c3RvbVZhbHVlcyA9IFtpbnB1dDNEU2hhcGVdO1xuICBjb25zdCBvdXRwdXQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgIHByb2dyYW0sIFtpbnB1dDNEXSwgaW5wdXQuZHR5cGUsIGN1c3RvbVZhbHVlcyxcbiAgICAgIHByZXZlbnRFYWdlclVucGFja2luZ09mT3V0cHV0KTtcbiAgcmV0dXJuIHtkYXRhSWQ6IG91dHB1dC5kYXRhSWQsIHNoYXBlOiBhZnRlclNoYXBlLCBkdHlwZTogb3V0cHV0LmR0eXBlfTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport class MeanProgram {\n constructor(reduceInfo, divisor) {\n this.variableNames = ['x'];\n const { windowSize, batchSize, inSize, outSize } = reduceInfo;\n this.outputShape = [batchSize, outSize];\n const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4;\n const windowSizeVec4Remainder = windowSize % 4;\n let updateSnippet = `sumValue += dot(values, ones);`;\n if (divisor != null) {\n const denominator = 1 / divisor;\n updateSnippet = `sumValue += dot(values * ${util.isInt(denominator) ? denominator.toPrecision(2) :\n denominator}, ones);`;\n }\n let checkOutOfBounds = '';\n if (inSize % windowSize > 0) {\n checkOutOfBounds = `\n if (inIdx < 0 || inIdx >= ${inSize}) {\n return 0.0;\n }\n `;\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhbl9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL21lYW5fZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd6RCxNQUFNLE9BQU8sV0FBVztJQUt0QixZQUFZLFVBQW1DLEVBQUUsT0FBZ0I7UUFKakUsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBS3BCLE1BQU0sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxVQUFVLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV4QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFL0MsSUFBSSxhQUFhLEdBQUcsZ0NBQWdDLENBQUM7UUFDckQsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1lBQ25CLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDaEMsYUFBYSxHQUFHLDRCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsV0FBVyxVQUFVLENBQUM7U0FDckQ7UUFFRCxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLE1BQU0sR0FBRyxVQUFVLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLGdCQUFnQixHQUFHO29DQUNXLE1BQU07OztPQUduQyxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHOzs7O1VBSVYsZ0JBQWdCOzs7Ozs7OztrQ0FRUSxVQUFVOzs7OzhCQUlkLHFCQUFxQjs7Ozs7Ozs7O1lBU3ZDLGFBQWE7OztpQ0FHUSxxQkFBcUI7Y0FDeEMsdUJBQXVCLEtBQUssQ0FBQzs7O1lBRy9CLGFBQWE7cUJBQ0osdUJBQXVCLEtBQUssQ0FBQzs7Ozs7WUFLdEMsYUFBYTtxQkFDSix1QkFBdUIsS0FBSyxDQUFDOzs7Ozs7WUFNdEMsYUFBYTs7OztLQUlwQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgTWVhblByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWyd4J107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihyZWR1Y2VJbmZvOiBiYWNrZW5kX3V0aWwuUmVkdWNlSW5mbywgZGl2aXNvcj86IG51bWJlcikge1xuICAgIGNvbnN0IHt3aW5kb3dTaXplLCBiYXRjaFNpemUsIGluU2l6ZSwgb3V0U2l6ZX0gPSByZWR1Y2VJbmZvO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBbYmF0Y2hTaXplLCBvdXRTaXplXTtcblxuICAgIGNvbnN0IHdpbmRvd1NpemVOZWFyZXN0VmVjNCA9IE1hdGguZmxvb3Iod2luZG93U2l6ZSAvIDQpICogNDtcbiAgICBjb25zdCB3aW5kb3dTaXplVmVjNFJlbWFpbmRlciA9IHdpbmRvd1NpemUgJSA0O1xuXG4gICAgbGV0IHVwZGF0ZVNuaXBwZXQgPSBgc3VtVmFsdWUgKz0gZG90KHZhbHVlcywgb25lcyk7YDtcbiAgICBpZiAoZGl2aXNvciAhPSBudWxsKSB7XG4gICAgICBjb25zdCBkZW5vbWluYXRvciA9IDEgLyBkaXZpc29yO1xuICAgICAgdXBkYXRlU25pcHBldCA9IGBzdW1WYWx1ZSArPSBkb3QodmFsdWVzICogJHtcbiAgICAgICAgICB1dGlsLmlzSW50KGRlbm9taW5hdG9yKSA/IGRlbm9taW5hdG9yLnRvUHJlY2lzaW9uKDIpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yfSwgb25lcyk7YDtcbiAgICB9XG5cbiAgICBsZXQgY2hlY2tPdXRPZkJvdW5kcyA9ICcnO1xuICAgIGlmIChpblNpemUgJSB3aW5kb3dTaXplID4gMCkge1xuICAgICAgY2hlY2tPdXRPZkJvdW5kcyA9IGBcbiAgICAgICAgaWYgKGluSWR4IDwgMCB8fCBpbklkeCA+PSAke2luU2l6ZX0pIHtcbiAgICAgICAgICByZXR1cm4gMC4wO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgIH1cblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICBjb25zdCB2ZWM0IG9uZXMgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XG5cbiAgICAgIGZsb2F0IGdldFZhbHVlKGludCBiYXRjaCwgaW50IGluSWR4KSB7XG4gICAgICAgICR7Y2hlY2tPdXRPZkJvdW5kc31cbiAgICAgICAgcmV0dXJuIGdldFgoYmF0Y2gsIGluSWR4KTtcbiAgICAgIH1cblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjMiBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IGJhdGNoID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgb3V0SWR4ID0gY29vcmRzWzFdO1xuICAgICAgICBpbnQgaW5PZmZzZXQgPSBvdXRJZHggKiAke3dpbmRvd1NpemV9O1xuXG4gICAgICAgIGZsb2F0IHN1bVZhbHVlID0gMC4wO1xuXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgJHt3aW5kb3dTaXplTmVhcmVzdFZlYzR9OyBpICs9IDQpIHtcbiAgICAgICAgICBpbnQgaW5JZHggPSBpbk9mZnNldCArIGk7XG4gICAgICAgICAgdmVjNCB2YWx1ZXMgPSB2ZWM0KFxuICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIGluSWR4KSxcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCArIDEpLFxuICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIGluSWR4ICsgMiksXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHggKyAzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAke3VwZGF0ZVNuaXBwZXR9XG4gICAgICAgIH1cblxuICAgICAgICBpbnQgaW5JZHggPSBpbk9mZnNldCArICR7d2luZG93U2l6ZU5lYXJlc3RWZWM0fTtcbiAgICAgICAgaWYgKCR7d2luZG93U2l6ZVZlYzRSZW1haW5kZXIgPT09IDF9KSB7XG4gICAgICAgICAgdmVjNCB2YWx1ZXMgPSB2ZWM0KGdldFZhbHVlKGJhdGNoLCBpbklkeCksIDAuMCwgMC4wLCAwLjApO1xuXG4gICAgICAgICAgJHt1cGRhdGVTbmlwcGV0fVxuICAgICAgICB9IGVsc2UgaWYgKCR7d2luZG93U2l6ZVZlYzRSZW1haW5kZXIgPT09IDJ9KSB7XG4gICAgICAgICAgdmVjNCB2YWx1ZXMgPSB2ZWM0KFxuICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIGluSWR4KSxcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCArIDEpLCAwLjAsIDAuMCk7XG5cbiAgICAgICAgICAke3VwZGF0ZVNuaXBwZXR9XG4gICAgICAgIH0gZWxzZSBpZiAoJHt3aW5kb3dTaXplVmVjNFJlbWFpbmRlciA9PT0gM30pIHtcbiAgICAgICAgICB2ZWM0IHZhbHVlcyA9IHZlYzQoXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHgpLFxuICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIGluSWR4ICsgMSksXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHggKyAyKSwgMC4wKTtcblxuICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgfVxuICAgICAgICBzZXRPdXRwdXQoc3VtVmFsdWUpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ReduceProgram {\n constructor(reduceInfo, reduceType) {\n this.variableNames = ['x'];\n const { windowSize, batchSize, inSize, outSize } = reduceInfo;\n this.outputShape = [batchSize, outSize];\n let initializationValue = '0.0';\n let compareOp = ``;\n if (reduceType === 'prod') {\n initializationValue = '1.0';\n }\n else if (reduceType === 'min') {\n // WebGL on Firefox Linux can't compile 1/0 so we do 1/eps.\n initializationValue = '1.0 / 1e-20';\n compareOp = `min`;\n }\n else if (reduceType === 'max') {\n // WebGL on Firefox Linux can't compile 1/0 so we do 1/eps.\n initializationValue = '-1.0 / 1e-20';\n compareOp = `max`;\n }\n let returnValue = `${reduceType}(${reduceType}(${reduceType}(` +\n 'minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])';\n if (reduceType === 'sum') {\n returnValue = `sumValue`;\n }\n else if (reduceType === 'prod') {\n returnValue = `prodValue`;\n }\n else if (reduceType === 'all') {\n returnValue = `allValue`;\n }\n else if (reduceType === 'any') {\n returnValue = `anyValue`;\n }\n const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4;\n const windowSizeVec4Remainder = windowSize % 4;\n let 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 `;\n let vecType = `vec4`;\n if (reduceType === 'all') {\n initializationValue = '1.0';\n updateSnippet = `\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n `;\n vecType = `bvec4`;\n }\n else if (reduceType === 'any') {\n initializationValue = '0.0';\n updateSnippet = `\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n `;\n vecType = `bvec4`;\n }\n let checkOutOfBounds = '';\n if (inSize % windowSize > 0) {\n checkOutOfBounds = `\n if (inIdx < 0 || inIdx >= ${inSize}) {\n return initializationValue;\n }\n `;\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvcmVkdWNlX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQUt4QixZQUNJLFVBQW1DLEVBQ25DLFVBQWdEO1FBTnBELGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQU9wQixNQUFNLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFeEMsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRW5CLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUN6QixtQkFBbUIsR0FBRyxLQUFLLENBQUM7U0FDN0I7YUFBTSxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDL0IsMkRBQTJEO1lBQzNELG1CQUFtQixHQUFHLGFBQWEsQ0FBQztZQUNwQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQ25CO2FBQU0sSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQy9CLDJEQUEyRDtZQUMzRCxtQkFBbUIsR0FBRyxjQUFjLENBQUM7WUFDckMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUNuQjtRQUVELElBQUksV0FBVyxHQUFHLEdBQUcsVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLEdBQUc7WUFDMUQsbUVBQW1FLENBQUM7UUFFeEUsSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQ3hCLFdBQVcsR0FBRyxVQUFVLENBQUM7U0FDMUI7YUFBTSxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7WUFDaEMsV0FBVyxHQUFHLFdBQVcsQ0FBQztTQUMzQjthQUFNLElBQUksVUFBVSxLQUFLLEtBQUssRUFBRTtZQUMvQixXQUFXLEdBQUcsVUFBVSxDQUFDO1NBQzFCO2FBQU0sSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQy9CLFdBQVcsR0FBRyxVQUFVLENBQUM7U0FDMUI7UUFFRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFL0MsSUFBSSxhQUFhLEdBQUc7WUFDWixVQUFVLEtBQUssS0FBSzs7bUJBRWIsVUFBVSxLQUFLLE1BQU07Ozs7d0JBSWhCLFNBQVM7Y0FDbkIsVUFBVSxLQUFLLEtBQUssT0FBTyxVQUFVLEtBQUssS0FBSzswQkFDbkMsU0FBUzs7Ozs7OztLQU85QixDQUFDO1FBRUYsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRXJCLElBQUksVUFBVSxLQUFLLEtBQUssRUFBRTtZQUN4QixtQkFBbUIsR0FBRyxLQUFLLENBQUM7WUFDNUIsYUFBYSxHQUFHOzs7O09BSWYsQ0FBQztZQUNGLE9BQU8sR0FBRyxPQUFPLENBQUM7U0FDbkI7YUFBTSxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDL0IsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQzVCLGFBQWEsR0FBRzs7OztPQUlmLENBQUM7WUFDRixPQUFPLEdBQUcsT0FBTyxDQUFDO1NBQ25CO1FBRUQsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxNQUFNLEdBQUcsVUFBVSxHQUFHLENBQUMsRUFBRTtZQUMzQixnQkFBZ0IsR0FBRztvQ0FDVyxNQUFNOzs7T0FHbkMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRzswQ0FDc0IsbUJBQW1COzs7O1VBSW5ELGdCQUFnQjs7Ozs7Ozs7a0NBUVEsVUFBVTs7a0NBRVYsbUJBQW1COzs7Ozs7OEJBTXZCLHFCQUFxQjs7WUFFdkMsT0FBTyxhQUFhLE9BQU87Ozs7Ozs7WUFPM0IsYUFBYTs7O2lDQUdRLHFCQUFxQjtjQUN4Qyx1QkFBdUIsS0FBSyxDQUFDO1lBQy9CLE9BQU8sYUFBYSxPQUFPOzs7Ozs7O1lBTzNCLGFBQWE7cUJBQ0osdUJBQXVCLEtBQUssQ0FBQztZQUN0QyxPQUFPLGFBQWEsT0FBTzs7Ozs7OztZQU8zQixhQUFhO3FCQUNKLHVCQUF1QixLQUFLLENBQUM7WUFDdEMsT0FBTyxhQUFhLE9BQU87Ozs7Ozs7WUFPM0IsYUFBYTs7b0JBRUwsV0FBVzs7S0FFMUIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIFJlZHVjZVByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWyd4J107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHJlZHVjZUluZm86IGJhY2tlbmRfdXRpbC5SZWR1Y2VJbmZvLFxuICAgICAgcmVkdWNlVHlwZTogJ2FsbCd8J2FueSd8J21heCd8J21pbid8J3N1bSd8J3Byb2QnKSB7XG4gICAgY29uc3Qge3dpbmRvd1NpemUsIGJhdGNoU2l6ZSwgaW5TaXplLCBvdXRTaXplfSA9IHJlZHVjZUluZm87XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IFtiYXRjaFNpemUsIG91dFNpemVdO1xuXG4gICAgbGV0IGluaXRpYWxpemF0aW9uVmFsdWUgPSAnMC4wJztcbiAgICBsZXQgY29tcGFyZU9wID0gYGA7XG5cbiAgICBpZiAocmVkdWNlVHlwZSA9PT0gJ3Byb2QnKSB7XG4gICAgICBpbml0aWFsaXphdGlvblZhbHVlID0gJzEuMCc7XG4gICAgfSBlbHNlIGlmIChyZWR1Y2VUeXBlID09PSAnbWluJykge1xuICAgICAgLy8gV2ViR0wgb24gRmlyZWZveCBMaW51eCBjYW4ndCBjb21waWxlIDEvMCBzbyB3ZSBkbyAxL2Vwcy5cbiAgICAgIGluaXRpYWxpemF0aW9uVmFsdWUgPSAnMS4wIC8gMWUtMjAnO1xuICAgICAgY29tcGFyZU9wID0gYG1pbmA7XG4gICAgfSBlbHNlIGlmIChyZWR1Y2VUeXBlID09PSAnbWF4Jykge1xuICAgICAgLy8gV2ViR0wgb24gRmlyZWZveCBMaW51eCBjYW4ndCBjb21waWxlIDEvMCBzbyB3ZSBkbyAxL2Vwcy5cbiAgICAgIGluaXRpYWxpemF0aW9uVmFsdWUgPSAnLTEuMCAvIDFlLTIwJztcbiAgICAgIGNvbXBhcmVPcCA9IGBtYXhgO1xuICAgIH1cblxuICAgIGxldCByZXR1cm5WYWx1ZSA9IGAke3JlZHVjZVR5cGV9KCR7cmVkdWNlVHlwZX0oJHtyZWR1Y2VUeXBlfShgICtcbiAgICAgICAgJ21pbk1heFZhbHVlWzBdLCBtaW5NYXhWYWx1ZVsxXSksIG1pbk1heFZhbHVlWzJdKSwgbWluTWF4VmFsdWVbM10pJztcblxuICAgIGlmIChyZWR1Y2VUeXBlID09PSAnc3VtJykge1xuICAgICAgcmV0dXJuVmFsdWUgPSBgc3VtVmFsdWVgO1xuICAgIH0gZWxzZSBpZiAocmVkdWNlVHlwZSA9PT0gJ3Byb2QnKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGBwcm9kVmFsdWVgO1xuICAgIH0gZWxzZSBpZiAocmVkdWNlVHlwZSA9PT0gJ2FsbCcpIHtcbiAgICAgIHJldHVyblZhbHVlID0gYGFsbFZhbHVlYDtcbiAgICB9IGVsc2UgaWYgKHJlZHVjZVR5cGUgPT09ICdhbnknKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGBhbnlWYWx1ZWA7XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93U2l6ZU5lYXJlc3RWZWM0ID0gTWF0aC5mbG9vcih3aW5kb3dTaXplIC8gNCkgKiA0O1xuICAgIGNvbnN0IHdpbmRvd1NpemVWZWM0UmVtYWluZGVyID0gd2luZG93U2l6ZSAlIDQ7XG5cbiAgICBsZXQgdXBkYXRlU25pcHBldCA9IGBcbiAgICAgIGlmICgke3JlZHVjZVR5cGUgPT09ICdzdW0nfSkge1xuICAgICAgICBzdW1WYWx1ZSArPSBkb3QodmFsdWVzLCBvbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoJHtyZWR1Y2VUeXBlID09PSAncHJvZCd9KSB7XG4gICAgICAgIHZlYzIgdG1wID0gdmVjMih2YWx1ZXNbMF0sIHZhbHVlc1sxXSkgKiB2ZWMyKHZhbHVlc1syXSwgdmFsdWVzWzNdKTtcbiAgICAgICAgcHJvZFZhbHVlICo9IHRtcFswXSAqIHRtcFsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1pbk1heFZhbHVlID0gJHtjb21wYXJlT3B9KHZhbHVlcywgbWluTWF4VmFsdWUpO1xuICAgICAgICBpZiAoJHtyZWR1Y2VUeXBlID09PSAnbWluJ30gfHwgJHtyZWR1Y2VUeXBlID09PSAnbWF4J30pIHtcbiAgICAgICAgICBtaW5NYXhWYWx1ZSA9ICR7Y29tcGFyZU9wfSh2YWx1ZXMsIG1pbk1heFZhbHVlKTtcbiAgICAgICAgICBidmVjNCBpc05hTiA9IGlzbmFuKHZhbHVlcyk7XG4gICAgICAgICAgaWYgKGlzTmFOLnIgfHwgaXNOYU4uZyB8fCBpc05hTi5iIHx8IGlzTmFOLmEpIHtcbiAgICAgICAgICAgIG1pbk1heFZhbHVlID0gdmVjNChOQU4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIGA7XG5cbiAgICBsZXQgdmVjVHlwZSA9IGB2ZWM0YDtcblxuICAgIGlmIChyZWR1Y2VUeXBlID09PSAnYWxsJykge1xuICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZSA9ICcxLjAnO1xuICAgICAgdXBkYXRlU25pcHBldCA9IGBcbiAgICAgICAgYm9vbCByZWR1Y2VkQWxsVmFsdWUgPSBhbGwodmFsdWVzKTtcbiAgICAgICAgZmxvYXQgZmxvYXRlZFJlZHVjZWRBbGxWYWx1ZSA9IGZsb2F0KHJlZHVjZWRBbGxWYWx1ZSk7XG4gICAgICAgIGFsbFZhbHVlID0gZmxvYXQoYWxsVmFsdWUgPj0gMS4wICYmIGZsb2F0ZWRSZWR1Y2VkQWxsVmFsdWUgPj0gMS4wKTtcbiAgICAgIGA7XG4gICAgICB2ZWNUeXBlID0gYGJ2ZWM0YDtcbiAgICB9IGVsc2UgaWYgKHJlZHVjZVR5cGUgPT09ICdhbnknKSB7XG4gICAgICBpbml0aWFsaXphdGlvblZhbHVlID0gJzAuMCc7XG4gICAgICB1cGRhdGVTbmlwcGV0ID0gYFxuICAgICAgICBib29sIHJlZHVjZWRBbnlWYWx1ZSA9IGFueSh2YWx1ZXMpO1xuICAgICAgICBmbG9hdCBmbG9hdGVkUmVkdWNlZEFueVZhbHVlID0gZmxvYXQocmVkdWNlZEFueVZhbHVlKTtcbiAgICAgICAgYW55VmFsdWUgPSBmbG9hdChhbnlWYWx1ZSA+PSAxLjAgfHwgZmxvYXRlZFJlZHVjZWRBbnlWYWx1ZSA+PSAxLjApO1xuICAgICAgYDtcbiAgICAgIHZlY1R5cGUgPSBgYnZlYzRgO1xuICAgIH1cblxuICAgIGxldCBjaGVja091dE9mQm91bmRzID0gJyc7XG4gICAgaWYgKGluU2l6ZSAlIHdpbmRvd1NpemUgPiAwKSB7XG4gICAgICBjaGVja091dE9mQm91bmRzID0gYFxuICAgICAgICBpZiAoaW5JZHggPCAwIHx8IGluSWR4ID49ICR7aW5TaXplfSkge1xuICAgICAgICAgIHJldHVybiBpbml0aWFsaXphdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgIH1cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgY29uc3QgZmxvYXQgaW5pdGlhbGl6YXRpb25WYWx1ZSA9ICR7aW5pdGlhbGl6YXRpb25WYWx1ZX07XG4gICAgICBjb25zdCB2ZWM0IG9uZXMgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XG5cbiAgICAgIGZsb2F0IGdldFZhbHVlKGludCBiYXRjaCwgaW50IGluSWR4KSB7XG4gICAgICAgICR7Y2hlY2tPdXRPZkJvdW5kc31cbiAgICAgICAgcmV0dXJuIGdldFgoYmF0Y2gsIGluSWR4KTtcbiAgICAgIH1cblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjMiBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IGJhdGNoID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgb3V0SWR4ID0gY29vcmRzWzFdO1xuICAgICAgICBpbnQgaW5PZmZzZXQgPSBvdXRJZHggKiAke3dpbmRvd1NpemV9O1xuXG4gICAgICAgIHZlYzQgbWluTWF4VmFsdWUgPSB2ZWM0KCR7aW5pdGlhbGl6YXRpb25WYWx1ZX0pO1xuICAgICAgICBmbG9hdCBwcm9kVmFsdWUgPSAxLjA7XG4gICAgICAgIGZsb2F0IHN1bVZhbHVlID0gMC4wO1xuICAgICAgICBmbG9hdCBhbGxWYWx1ZSA9IDEuMDtcbiAgICAgICAgZmxvYXQgYW55VmFsdWUgPSAwLjA7XG5cbiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAke3dpbmRvd1NpemVOZWFyZXN0VmVjNH07IGkgKz0gNCkge1xuICAgICAgICAgIGludCBpbklkeCA9IGluT2Zmc2V0ICsgaTtcbiAgICAgICAgICAke3ZlY1R5cGV9IHZhbHVlcyA9ICR7dmVjVHlwZX0oXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHgpLFxuICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIGluSWR4ICsgMSksXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHggKyAyKSxcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCArIDMpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgfVxuXG4gICAgICAgIGludCBpbklkeCA9IGluT2Zmc2V0ICsgJHt3aW5kb3dTaXplTmVhcmVzdFZlYzR9O1xuICAgICAgICBpZiAoJHt3aW5kb3dTaXplVmVjNFJlbWFpbmRlciA9PT0gMX0pIHtcbiAgICAgICAgICAke3ZlY1R5cGV9IHZhbHVlcyA9ICR7dmVjVHlwZX0oXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHgpLFxuICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZSxcbiAgICAgICAgICAgIGluaXRpYWxpemF0aW9uVmFsdWUsXG4gICAgICAgICAgICBpbml0aWFsaXphdGlvblZhbHVlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgfSBlbHNlIGlmICgke3dpbmRvd1NpemVWZWM0UmVtYWluZGVyID09PSAyfSkge1xuICAgICAgICAgICR7dmVjVHlwZX0gdmFsdWVzID0gJHt2ZWNUeXBlfShcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCksXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHggKyAxKSxcbiAgICAgICAgICAgIGluaXRpYWxpemF0aW9uVmFsdWUsXG4gICAgICAgICAgICBpbml0aWFsaXphdGlvblZhbHVlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgfSBlbHNlIGlmICgke3dpbmRvd1NpemVWZWM0UmVtYWluZGVyID09PSAzfSkge1xuICAgICAgICAgICR7dmVjVHlwZX0gdmFsdWVzID0gJHt2ZWNUeXBlfShcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCksXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHggKyAxKSxcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCArIDIpLFxuICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAke3VwZGF0ZVNuaXBwZXR9XG4gICAgICAgIH1cbiAgICAgICAgc2V0T3V0cHV0KCR7cmV0dXJuVmFsdWV9KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { MeanProgram } from '../mean_gpu';\nimport { ReduceProgram } from '../reduce_gpu';\n// Returns an array of configuration objects that describe each stage of the\n// reduction.\nfunction getReductionStages(inShape) {\n const stages = [];\n while (stages.length === 0 || stages[stages.length - 1].outSize !== 1) {\n const outSize = stages.length ? stages[stages.length - 1].outSize : inShape[1];\n const windowSize = backend_util.computeOptimalWindowSize(outSize);\n stages.push({\n inSize: outSize,\n windowSize,\n outSize: Math.ceil(outSize / windowSize)\n });\n }\n return stages;\n}\nexport function reduce(x, dtype, reductionType, backend) {\n const reductionStages = getReductionStages(x.shape);\n let result = x;\n for (let i = 0; i < reductionStages.length; i++) {\n const { inSize, windowSize, outSize } = reductionStages[i];\n let program;\n let previousResult;\n if (reductionType === 'mean') {\n program = i === 0 ?\n new MeanProgram({ windowSize, inSize, batchSize: x.shape[0], outSize }, inSize) :\n new MeanProgram({ windowSize, inSize, batchSize: x.shape[0], outSize });\n }\n else {\n program = new ReduceProgram({ windowSize, inSize, batchSize: x.shape[0], outSize }, reductionType);\n }\n previousResult = result;\n result = backend.runWebGLProgram(program, [result], dtype);\n if (previousResult.dataId !== x.dataId) {\n backend.disposeIntermediateTensorInfo(previousResult);\n }\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxfdXRpbHMvcmVkdWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7QUFHekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSTVDLDRFQUE0RTtBQUM1RSxhQUFhO0FBQ2IsU0FBUyxrQkFBa0IsQ0FBQyxPQUFpQjtJQUUzQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFbEIsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQ3JFLE1BQU0sT0FBTyxHQUNULE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsTUFBTSxFQUFFLE9BQU87WUFDZixVQUFVO1lBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztTQUN6QyxDQUFDLENBQUM7S0FDSjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUNsQixDQUFhLEVBQUUsS0FBZSxFQUFFLGFBQTBCLEVBQzFELE9BQXlCO0lBQzNCLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVwRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQyxNQUFNLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekQsSUFBSSxPQUFrQyxDQUFDO1FBQ3ZDLElBQUksY0FBMEIsQ0FBQztRQUMvQixJQUFJLGFBQWEsS0FBSyxNQUFNLEVBQUU7WUFDNUIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLFdBQVcsQ0FDWCxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxXQUFXLENBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7U0FDM0U7YUFBTTtZQUNMLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FDdkIsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQzFFO1FBRUQsY0FBYyxHQUFHLE1BQU0sQ0FBQztRQUN4QixNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUzRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN0QyxPQUFPLENBQUMsNkJBQTZCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdkQ7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEYXRhVHlwZSwgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7TWVhblByb2dyYW19IGZyb20gJy4uL21lYW5fZ3B1JztcbmltcG9ydCB7UmVkdWNlUHJvZ3JhbX0gZnJvbSAnLi4vcmVkdWNlX2dwdSc7XG5cbnR5cGUgUmVkdWNlVHlwZXMgPSAnYWxsJ3wnYW55J3wnbWF4J3wnbWluJ3wnc3VtJ3wncHJvZCd8J21lYW4nO1xuXG4vLyBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0aGF0IGRlc2NyaWJlIGVhY2ggc3RhZ2Ugb2YgdGhlXG4vLyByZWR1Y3Rpb24uXG5mdW5jdGlvbiBnZXRSZWR1Y3Rpb25TdGFnZXMoaW5TaGFwZTogbnVtYmVyW10pOlxuICAgIEFycmF5PHtpblNpemU6IG51bWJlciwgd2luZG93U2l6ZTogbnVtYmVyLCBvdXRTaXplOiBudW1iZXJ9PiB7XG4gIGNvbnN0IHN0YWdlcyA9IFtdO1xuXG4gIHdoaWxlIChzdGFnZXMubGVuZ3RoID09PSAwIHx8IHN0YWdlc1tzdGFnZXMubGVuZ3RoIC0gMV0ub3V0U2l6ZSAhPT0gMSkge1xuICAgIGNvbnN0IG91dFNpemU6IG51bWJlciA9XG4gICAgICAgIHN0YWdlcy5sZW5ndGggPyBzdGFnZXNbc3RhZ2VzLmxlbmd0aCAtIDFdLm91dFNpemUgOiBpblNoYXBlWzFdO1xuICAgIGNvbnN0IHdpbmRvd1NpemUgPSBiYWNrZW5kX3V0aWwuY29tcHV0ZU9wdGltYWxXaW5kb3dTaXplKG91dFNpemUpO1xuICAgIHN0YWdlcy5wdXNoKHtcbiAgICAgIGluU2l6ZTogb3V0U2l6ZSxcbiAgICAgIHdpbmRvd1NpemUsXG4gICAgICBvdXRTaXplOiBNYXRoLmNlaWwob3V0U2l6ZSAvIHdpbmRvd1NpemUpXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc3RhZ2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlKFxuICAgIHg6IFRlbnNvckluZm8sIGR0eXBlOiBEYXRhVHlwZSwgcmVkdWN0aW9uVHlwZTogUmVkdWNlVHlwZXMsXG4gICAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCk6IFRlbnNvckluZm8ge1xuICBjb25zdCByZWR1Y3Rpb25TdGFnZXMgPSBnZXRSZWR1Y3Rpb25TdGFnZXMoeC5zaGFwZSk7XG5cbiAgbGV0IHJlc3VsdCA9IHg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVkdWN0aW9uU3RhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge2luU2l6ZSwgd2luZG93U2l6ZSwgb3V0U2l6ZX0gPSByZWR1Y3Rpb25TdGFnZXNbaV07XG5cbiAgICBsZXQgcHJvZ3JhbTogUmVkdWNlUHJvZ3JhbXxNZWFuUHJvZ3JhbTtcbiAgICBsZXQgcHJldmlvdXNSZXN1bHQ6IFRlbnNvckluZm87XG4gICAgaWYgKHJlZHVjdGlvblR5cGUgPT09ICdtZWFuJykge1xuICAgICAgcHJvZ3JhbSA9IGkgPT09IDAgP1xuICAgICAgICAgIG5ldyBNZWFuUHJvZ3JhbShcbiAgICAgICAgICAgICAge3dpbmRvd1NpemUsIGluU2l6ZSwgYmF0Y2hTaXplOiB4LnNoYXBlWzBdLCBvdXRTaXplfSwgaW5TaXplKSA6XG4gICAgICAgICAgbmV3IE1lYW5Qcm9ncmFtKHt3aW5kb3dTaXplLCBpblNpemUsIGJhdGNoU2l6ZTogeC5zaGFwZVswXSwgb3V0U2l6ZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtID0gbmV3IFJlZHVjZVByb2dyYW0oXG4gICAgICAgICAge3dpbmRvd1NpemUsIGluU2l6ZSwgYmF0Y2hTaXplOiB4LnNoYXBlWzBdLCBvdXRTaXplfSwgcmVkdWN0aW9uVHlwZSk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNSZXN1bHQgPSByZXN1bHQ7XG4gICAgcmVzdWx0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3Jlc3VsdF0sIGR0eXBlKTtcblxuICAgIGlmIChwcmV2aW91c1Jlc3VsdC5kYXRhSWQgIT09IHguZGF0YUlkKSB7XG4gICAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHByZXZpb3VzUmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class TransposeProgram {\n constructor(aShape, newDim) {\n this.variableNames = ['A'];\n const outputShape = new Array(aShape.length);\n for (let i = 0; i < outputShape.length; i++) {\n outputShape[i] = aShape[newDim[i]];\n }\n this.outputShape = outputShape;\n this.rank = outputShape.length;\n const dtype = getCoordsDataType(this.rank);\n const switched = getSwitchedCoords(newDim);\n this.userCode = `\n void main() {\n ${dtype} resRC = getOutputCoords();\n setOutput(getA(${switched}));\n }\n `;\n }\n}\nfunction getSwitchedCoords(newDim) {\n const rank = newDim.length;\n if (rank > 6) {\n throw Error(`Transpose for rank ${rank} is not yet supported`);\n }\n const originalOrder = ['resRC.x', 'resRC.y', 'resRC.z', 'resRC.w', 'resRC.u', 'resRC.v'];\n const switchedCoords = new Array(rank);\n for (let i = 0; i < newDim.length; i++) {\n switchedCoords[newDim[i]] = originalOrder[i];\n }\n return switchedCoords.join();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3NlX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvdHJhbnNwb3NlX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxNQUFNLE9BQU8sZ0JBQWdCO0lBTTNCLFlBQVksTUFBZ0IsRUFBRSxNQUFnQjtRQUw5QyxrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFNcEIsTUFBTSxXQUFXLEdBQWEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxRQUFRLEdBQUc7O1FBRVosS0FBSzt1QkFDVSxRQUFROztLQUUxQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFnQjtJQUN6QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtRQUNaLE1BQU0sS0FBSyxDQUFDLHNCQUFzQixJQUFJLHVCQUF1QixDQUFDLENBQUM7S0FDaEU7SUFDRCxNQUFNLGFBQWEsR0FDZixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkUsTUFBTSxjQUFjLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM5QztJQUNELE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDb29yZHNEYXRhVHlwZX0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXInO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNwb3NlUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICByYW5rOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoYVNoYXBlOiBudW1iZXJbXSwgbmV3RGltOiBudW1iZXJbXSkge1xuICAgIGNvbnN0IG91dHB1dFNoYXBlOiBudW1iZXJbXSA9IG5ldyBBcnJheShhU2hhcGUubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dFNoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXRTaGFwZVtpXSA9IGFTaGFwZVtuZXdEaW1baV1dO1xuICAgIH1cbiAgICB0aGlzLm91dHB1dFNoYXBlID0gb3V0cHV0U2hhcGU7XG4gICAgdGhpcy5yYW5rID0gb3V0cHV0U2hhcGUubGVuZ3RoO1xuICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUodGhpcy5yYW5rKTtcbiAgICBjb25zdCBzd2l0Y2hlZCA9IGdldFN3aXRjaGVkQ29vcmRzKG5ld0RpbSk7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICR7ZHR5cGV9IHJlc1JDID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICBzZXRPdXRwdXQoZ2V0QSgke3N3aXRjaGVkfSkpO1xuICAgIH1cbiAgICBgO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN3aXRjaGVkQ29vcmRzKG5ld0RpbTogbnVtYmVyW10pOiBzdHJpbmcge1xuICBjb25zdCByYW5rID0gbmV3RGltLmxlbmd0aDtcbiAgaWYgKHJhbmsgPiA2KSB7XG4gICAgdGhyb3cgRXJyb3IoYFRyYW5zcG9zZSBmb3IgcmFuayAke3Jhbmt9IGlzIG5vdCB5ZXQgc3VwcG9ydGVkYCk7XG4gIH1cbiAgY29uc3Qgb3JpZ2luYWxPcmRlciA9XG4gICAgICBbJ3Jlc1JDLngnLCAncmVzUkMueScsICdyZXNSQy56JywgJ3Jlc1JDLncnLCAncmVzUkMudScsICdyZXNSQy52J107XG4gIGNvbnN0IHN3aXRjaGVkQ29vcmRzID0gbmV3IEFycmF5KHJhbmspO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0RpbS5sZW5ndGg7IGkrKykge1xuICAgIHN3aXRjaGVkQ29vcmRzW25ld0RpbVtpXV0gPSBvcmlnaW5hbE9yZGVyW2ldO1xuICB9XG4gIHJldHVybiBzd2l0Y2hlZENvb3Jkcy5qb2luKCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getVecChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport class TransposePackedProgram {\n constructor(aShape, newDim) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n const outputShape = new Array(aShape.length);\n for (let i = 0; i < outputShape.length; i++) {\n outputShape[i] = aShape[newDim[i]];\n }\n this.outputShape = outputShape;\n this.rank = outputShape.length;\n if (this.rank > 6) {\n throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);\n }\n const dtype = getCoordsDataType(this.rank);\n const outputOrder = getVecChannels('rc', this.rank);\n const switchedOrder = new Array(this.rank);\n for (let i = 0; i < newDim.length; i++) {\n switchedOrder[newDim[i]] = outputOrder[i];\n }\n const innerDims = `vec2(${switchedOrder.slice(-2).join()})`;\n const nextColumn = `++${outputOrder[this.rank - 1]} < ${outputShape[this.rank - 1]}`;\n const getc = `getChannel(getA(${switchedOrder.join()}), ${innerDims})`;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3NlX3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3RyYW5zcG9zZV9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQVksTUFBZ0IsRUFBRSxNQUFnQjtRQVA5QyxrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFJdEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFHbEIsTUFBTSxXQUFXLEdBQWEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNqQixNQUFNLEtBQUssQ0FDUCw2QkFBNkIsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsQ0FBQztTQUNyRTtRQUNELE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUNELE1BQU0sU0FBUyxHQUFHLFFBQVEsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7UUFDNUQsTUFBTSxVQUFVLEdBQ1osS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sU0FBUyxHQUFHLENBQUM7UUFFdkUsSUFBSSxDQUFDLFFBQVEsR0FBRzs7UUFFWixLQUFLOztvQkFFTyxJQUFJO1dBQ2IsVUFBVTtzQkFDQyxJQUFJOztVQUVoQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7YUFDdkIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO3NCQUNqRCxJQUFJO2FBQ2IsVUFBVTt3QkFDQyxJQUFJOzs7OztLQUt2QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0VmVjQ2hhbm5lbHN9IGZyb20gJy4vcGFja2luZ191dGlsJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zcG9zZVBhY2tlZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgcmFuazogbnVtYmVyO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKGFTaGFwZTogbnVtYmVyW10sIG5ld0RpbTogbnVtYmVyW10pIHtcbiAgICBjb25zdCBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBuZXcgQXJyYXkoYVNoYXBlLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgICAgb3V0cHV0U2hhcGVbaV0gPSBhU2hhcGVbbmV3RGltW2ldXTtcbiAgICB9XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlO1xuICAgIHRoaXMucmFuayA9IG91dHB1dFNoYXBlLmxlbmd0aDtcbiAgICBpZiAodGhpcy5yYW5rID4gNikge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgYFBhY2tlZCB0cmFuc3Bvc2UgZm9yIHJhbmsgJHt0aGlzLnJhbmt9IGlzIG5vdCB5ZXQgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgICBjb25zdCBkdHlwZSA9IGdldENvb3Jkc0RhdGFUeXBlKHRoaXMucmFuayk7XG5cbiAgICBjb25zdCBvdXRwdXRPcmRlciA9IGdldFZlY0NoYW5uZWxzKCdyYycsIHRoaXMucmFuayk7XG4gICAgY29uc3Qgc3dpdGNoZWRPcmRlciA9IG5ldyBBcnJheSh0aGlzLnJhbmspO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3RGltLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzd2l0Y2hlZE9yZGVyW25ld0RpbVtpXV0gPSBvdXRwdXRPcmRlcltpXTtcbiAgICB9XG4gICAgY29uc3QgaW5uZXJEaW1zID0gYHZlYzIoJHtzd2l0Y2hlZE9yZGVyLnNsaWNlKC0yKS5qb2luKCl9KWA7XG4gICAgY29uc3QgbmV4dENvbHVtbiA9XG4gICAgICAgIGArKyR7b3V0cHV0T3JkZXJbdGhpcy5yYW5rIC0gMV19IDwgJHtvdXRwdXRTaGFwZVt0aGlzLnJhbmsgLSAxXX1gO1xuICAgIGNvbnN0IGdldGMgPSBgZ2V0Q2hhbm5lbChnZXRBKCR7c3dpdGNoZWRPcmRlci5qb2luKCl9KSwgJHtpbm5lckRpbXN9KWA7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICR7ZHR5cGV9IHJjID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4pO1xuICAgICAgcmVzdWx0WzBdID0gJHtnZXRjfTtcbiAgICAgIGlmKCR7bmV4dENvbHVtbn0pIHtcbiAgICAgICAgcmVzdWx0WzFdID0gJHtnZXRjfTtcbiAgICAgIH1cbiAgICAgIC0tJHtvdXRwdXRPcmRlclt0aGlzLnJhbmsgLSAxXX07XG4gICAgICBpZigrKyR7b3V0cHV0T3JkZXJbdGhpcy5yYW5rIC0gMl19IDwgJHtvdXRwdXRTaGFwZVt0aGlzLnJhbmsgLSAyXX0pIHtcbiAgICAgICAgcmVzdWx0WzJdID0gJHtnZXRjfTtcbiAgICAgICAgaWYoJHtuZXh0Q29sdW1ufSkge1xuICAgICAgICAgIHJlc3VsdFszXSA9ICR7Z2V0Y307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldE91dHB1dChyZXN1bHQpO1xuICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nimport { transposeImplCPU } from '../kernel_utils/shared';\nimport { TransposeProgram } from '../transpose_gpu';\nimport { TransposePackedProgram } from '../transpose_packed_gpu';\nexport function transposeImpl(x, perm, backend) {\n const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n new TransposePackedProgram(x.shape, perm) :\n new TransposeProgram(x.shape, perm);\n return backend.runWebGLProgram(program, [x], x.dtype);\n}\nexport { transposeImplCPU };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3NlX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvVHJhbnNwb3NlX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBR3RELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE1BQU0sVUFBVSxhQUFhLENBQ3pCLENBQWEsRUFBRSxJQUFjLEVBQUUsT0FBeUI7SUFDMUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52LCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHt0cmFuc3Bvc2VJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcbmltcG9ydCB7VHJhbnNwb3NlUHJvZ3JhbX0gZnJvbSAnLi4vdHJhbnNwb3NlX2dwdSc7XG5pbXBvcnQge1RyYW5zcG9zZVBhY2tlZFByb2dyYW19IGZyb20gJy4uL3RyYW5zcG9zZV9wYWNrZWRfZ3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZUltcGwoXG4gICAgeDogVGVuc29ySW5mbywgcGVybTogbnVtYmVyW10sIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wpOiBUZW5zb3JJbmZvIHtcbiAgY29uc3QgcHJvZ3JhbSA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfQVJSQVlfT1BFUkFUSU9OUycpID9cbiAgICAgIG5ldyBUcmFuc3Bvc2VQYWNrZWRQcm9ncmFtKHguc2hhcGUsIHBlcm0pIDpcbiAgICAgIG5ldyBUcmFuc3Bvc2VQcm9ncmFtKHguc2hhcGUsIHBlcm0pO1xuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcbn1cblxuZXhwb3J0IHt0cmFuc3Bvc2VJbXBsQ1BVfTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sum } from '@tensorflow/tfjs-core';\nimport { sumImpl } from './Sum_impl';\nexport function sum(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n return sumImpl(x, axis, keepDims, backend);\n}\nexport const sumConfig = {\n kernelName: Sum,\n backendName: 'webgl',\n kernelFunc: sum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1N1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLEdBQUcsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUl6RixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE1BQU0sVUFBVSxHQUFHLENBQ2YsSUFBcUU7SUFDdkUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBRXRDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0IsT0FBTyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFN1bSwgU3VtQXR0cnMsIFN1bUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcblxuaW1wb3J0IHtzdW1JbXBsfSBmcm9tICcuL1N1bV9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN1bShcbiAgICBhcmdzOiB7aW5wdXRzOiBTdW1JbnB1dHMsIGF0dHJzOiBTdW1BdHRycywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcblxuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcblxuICByZXR1cm4gc3VtSW1wbCh4LCBheGlzLCBrZWVwRGltcywgYmFja2VuZCk7XG59XG5cbmV4cG9ydCBjb25zdCBzdW1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3VtLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3VtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, sumOutType, util } from '@tensorflow/tfjs-core';\nimport { reduce } from '../kernel_utils/reduce';\nimport { reshape } from './Reshape';\nimport { transposeImpl } from './Transpose_impl';\nexport function sumImpl(x, axis, keepDims, backend) {\n const reductionIndices = axis;\n const xRank = x.shape.length;\n const origAxes = util.parseAxisParam(reductionIndices, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n const sumInputIsTransposed = permutedAxes != null;\n let sumInput = x;\n if (sumInputIsTransposed) {\n sumInput = transposeImpl(x, permutedAxes, backend);\n axes = backend_util.getInnerMostAxes(axes.length, xRank);\n }\n backend_util.assertAxesAreInnerMostDims('sum', axes, xRank);\n const [sumOutShape, reduceShape] = backend_util.computeOutAndReduceShapes(sumInput.shape, axes);\n let outShape = sumOutShape;\n if (keepDims) {\n // rather than reshape at the end, set the target shape here.\n outShape = backend_util.expandShapeToKeepDim(sumOutShape, origAxes);\n }\n const inSize = util.sizeFromShape(reduceShape);\n const xSize = util.sizeFromShape(x.shape);\n const batchSize = xSize / inSize;\n const reshapedInput = reshape({ inputs: { x: sumInput }, attrs: { shape: [batchSize, inSize] }, backend });\n const outType = sumOutType(x.dtype);\n const reduced = reduce(reshapedInput, outType, 'sum', backend);\n const out = reshape({ inputs: { x: reduced }, attrs: { shape: outShape }, backend });\n backend.disposeIntermediateTensorInfo(reshapedInput);\n backend.disposeIntermediateTensorInfo(reduced);\n if (sumInputIsTransposed) {\n backend.disposeIntermediateTensorInfo(sumInput);\n }\n return out;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VtX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvU3VtX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQWMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHakYsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE1BQU0sVUFBVSxPQUFPLENBQ25CLENBQWEsRUFBRSxJQUFxQixFQUFFLFFBQWlCLEVBQ3ZELE9BQXlCO0lBQzNCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBRTlCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUNwQixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQztJQUVsRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxvQkFBb0IsRUFBRTtRQUN4QixRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbkQsSUFBSSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzFEO0lBRUQsWUFBWSxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsR0FDNUIsWUFBWSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFakUsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDO0lBQzNCLElBQUksUUFBUSxFQUFFO1FBQ1osNkRBQTZEO1FBQzdELFFBQVEsR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3JFO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FDekIsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUUzRSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxNQUFNLEdBQUcsR0FDTCxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFFdkUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxJQUFJLG9CQUFvQixFQUFFO1FBQ3hCLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNqRDtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIHN1bU91dFR5cGUsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3JlZHVjZX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3JlZHVjZSc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmltcG9ydCB7dHJhbnNwb3NlSW1wbH0gZnJvbSAnLi9UcmFuc3Bvc2VfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1JbXBsKFxuICAgIHg6IFRlbnNvckluZm8sIGF4aXM6IG51bWJlcnxudW1iZXJbXSwga2VlcERpbXM6IGJvb2xlYW4sXG4gICAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCk6IFRlbnNvckluZm8ge1xuICBjb25zdCByZWR1Y3Rpb25JbmRpY2VzID0gYXhpcztcblxuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuXG4gIGNvbnN0IG9yaWdBeGVzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShyZWR1Y3Rpb25JbmRpY2VzLCB4LnNoYXBlKTtcbiAgbGV0IGF4ZXMgPSBvcmlnQXhlcztcbiAgY29uc3QgcGVybXV0ZWRBeGVzID0gYmFja2VuZF91dGlsLmdldEF4ZXNQZXJtdXRhdGlvbihheGVzLCB4UmFuayk7XG4gIGNvbnN0IHN1bUlucHV0SXNUcmFuc3Bvc2VkID0gcGVybXV0ZWRBeGVzICE9IG51bGw7XG5cbiAgbGV0IHN1bUlucHV0ID0geDtcbiAgaWYgKHN1bUlucHV0SXNUcmFuc3Bvc2VkKSB7XG4gICAgc3VtSW5wdXQgPSB0cmFuc3Bvc2VJbXBsKHgsIHBlcm11dGVkQXhlcywgYmFja2VuZCk7XG5cbiAgICBheGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsIHhSYW5rKTtcbiAgfVxuXG4gIGJhY2tlbmRfdXRpbC5hc3NlcnRBeGVzQXJlSW5uZXJNb3N0RGltcygnc3VtJywgYXhlcywgeFJhbmspO1xuICBjb25zdCBbc3VtT3V0U2hhcGUsIHJlZHVjZVNoYXBlXSA9XG4gICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dEFuZFJlZHVjZVNoYXBlcyhzdW1JbnB1dC5zaGFwZSwgYXhlcyk7XG5cbiAgbGV0IG91dFNoYXBlID0gc3VtT3V0U2hhcGU7XG4gIGlmIChrZWVwRGltcykge1xuICAgIC8vIHJhdGhlciB0aGFuIHJlc2hhcGUgYXQgdGhlIGVuZCwgc2V0IHRoZSB0YXJnZXQgc2hhcGUgaGVyZS5cbiAgICBvdXRTaGFwZSA9IGJhY2tlbmRfdXRpbC5leHBhbmRTaGFwZVRvS2VlcERpbShzdW1PdXRTaGFwZSwgb3JpZ0F4ZXMpO1xuICB9XG5cbiAgY29uc3QgaW5TaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcbiAgY29uc3QgeFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZSk7XG4gIGNvbnN0IGJhdGNoU2l6ZSA9IHhTaXplIC8gaW5TaXplO1xuICBjb25zdCByZXNoYXBlZElucHV0ID0gcmVzaGFwZShcbiAgICAgIHtpbnB1dHM6IHt4OiBzdW1JbnB1dH0sIGF0dHJzOiB7c2hhcGU6IFtiYXRjaFNpemUsIGluU2l6ZV19LCBiYWNrZW5kfSk7XG5cbiAgY29uc3Qgb3V0VHlwZSA9IHN1bU91dFR5cGUoeC5kdHlwZSk7XG5cbiAgY29uc3QgcmVkdWNlZCA9IHJlZHVjZShyZXNoYXBlZElucHV0LCBvdXRUeXBlLCAnc3VtJywgYmFja2VuZCk7XG4gIGNvbnN0IG91dCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZWR1Y2VkfSwgYXR0cnM6IHtzaGFwZTogb3V0U2hhcGV9LCBiYWNrZW5kfSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXNoYXBlZElucHV0KTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZWR1Y2VkKTtcbiAgaWYgKHN1bUlucHV0SXNUcmFuc3Bvc2VkKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhzdW1JbnB1dCk7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Transpose } from '@tensorflow/tfjs-core';\nimport { transposeImpl } from './Transpose_impl';\nimport { transposeImplCPU as cpuTranspose } from './Transpose_impl';\nexport function transpose(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { perm } = attrs;\n const webglBackend = backend;\n const xRank = x.shape.length;\n const newShape = new Array(xRank);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = x.shape[perm[i]];\n }\n let out;\n if (webglBackend.shouldExecuteOnCPU([x])) {\n const xTexData = webglBackend.texData.get(x.dataId);\n const values = xTexData.values;\n const outValues = cpuTranspose(values, x.shape, x.dtype, perm, newShape);\n out = webglBackend.makeTensorInfo(newShape, x.dtype);\n const outData = webglBackend.texData.get(out.dataId);\n outData.values = outValues;\n }\n else {\n out = transposeImpl(x, perm, webglBackend);\n }\n return out;\n}\nexport const transposeConfig = {\n kernelName: Transpose,\n backendName: 'webgl',\n kernelFunc: transpose\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3NlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1RyYW5zcG9zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVDLFNBQVMsRUFBOEMsTUFBTSx1QkFBdUIsQ0FBQztBQUluSSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGdCQUFnQixJQUFJLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRWxFLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQztJQUU3QixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUU3QixNQUFNLFFBQVEsR0FBYSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoQztJQUVELElBQUksR0FBZSxDQUFDO0lBQ3BCLElBQUksWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN4QyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQW9CLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXpFLEdBQUcsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0tBQzVCO1NBQU07UUFDTCxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDNUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHJhbnNwb3NlLCBUcmFuc3Bvc2VBdHRycywgVHJhbnNwb3NlSW5wdXRzLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5pbXBvcnQge3RyYW5zcG9zZUltcGx9IGZyb20gJy4vVHJhbnNwb3NlX2ltcGwnO1xuaW1wb3J0IHt0cmFuc3Bvc2VJbXBsQ1BVIGFzIGNwdVRyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2VfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2UoYXJnczoge1xuICBpbnB1dHM6IFRyYW5zcG9zZUlucHV0cyxcbiAgYXR0cnM6IFRyYW5zcG9zZUF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge3Blcm19ID0gYXR0cnM7XG4gIGNvbnN0IHdlYmdsQmFja2VuZCA9IGJhY2tlbmQ7XG5cbiAgY29uc3QgeFJhbmsgPSB4LnNoYXBlLmxlbmd0aDtcblxuICBjb25zdCBuZXdTaGFwZTogbnVtYmVyW10gPSBuZXcgQXJyYXkoeFJhbmspO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1NoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgbmV3U2hhcGVbaV0gPSB4LnNoYXBlW3Blcm1baV1dO1xuICB9XG5cbiAgbGV0IG91dDogVGVuc29ySW5mbztcbiAgaWYgKHdlYmdsQmFja2VuZC5zaG91bGRFeGVjdXRlT25DUFUoW3hdKSkge1xuICAgIGNvbnN0IHhUZXhEYXRhID0gd2ViZ2xCYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgICBjb25zdCB2YWx1ZXMgPSB4VGV4RGF0YS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBvdXRWYWx1ZXMgPSBjcHVUcmFuc3Bvc2UodmFsdWVzLCB4LnNoYXBlLCB4LmR0eXBlLCBwZXJtLCBuZXdTaGFwZSk7XG5cbiAgICBvdXQgPSB3ZWJnbEJhY2tlbmQubWFrZVRlbnNvckluZm8obmV3U2hhcGUsIHguZHR5cGUpO1xuICAgIGNvbnN0IG91dERhdGEgPSB3ZWJnbEJhY2tlbmQudGV4RGF0YS5nZXQob3V0LmRhdGFJZCk7XG4gICAgb3V0RGF0YS52YWx1ZXMgPSBvdXRWYWx1ZXM7XG4gIH0gZWxzZSB7XG4gICAgb3V0ID0gdHJhbnNwb3NlSW1wbCh4LCBwZXJtLCB3ZWJnbEJhY2tlbmQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCB0cmFuc3Bvc2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVHJhbnNwb3NlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogdHJhbnNwb3NlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { broadcast_util, upcastType, util } from '@tensorflow/tfjs-core';\nimport { mapActivationToShaderProgram } from '../kernel_utils/kernel_funcs_utils';\nimport { MatMulPackedProgram } from '../mulmat_packed_gpu';\nimport { multiply } from './Multiply';\nimport { reshape } from './Reshape';\nimport { sum } from './Sum';\nimport { transpose } from './Transpose';\n// Empirically determined minimal shared dimension in matmul before we forward\n// to a.mul(b).sum() in order to take advantage of GPU parallelism. See\n// https://github.com/tensorflow/tfjs-core/pull/1379 for benchmarks.\nexport const MATMUL_SHARED_DIM_THRESHOLD = 1000;\nexport function batchMatMulImpl({ a, b, transposeA, transposeB, backend, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) {\n const aRank = a.shape.length;\n const bRank = b.shape.length;\n const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1];\n const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2];\n const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2];\n const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1];\n const outerDimsA = a.shape.slice(0, -2);\n const outerDimsB = b.shape.slice(0, -2);\n const batchDimA = util.sizeFromShape(outerDimsA);\n const batchDimB = util.sizeFromShape(outerDimsB);\n const outShapeOuterDims = broadcast_util.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2));\n const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]);\n util.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (` +\n `${innerShapeB}) of Tensors with shapes ${a.shape} and ` +\n `${b.shape} and transposeA=${transposeA}` +\n ` and transposeB=${transposeB} must match.`);\n const a3dShape = transposeA ?\n [batchDimA, innerShapeA, outerShapeA] :\n [batchDimA, outerShapeA, innerShapeA];\n const b3dShape = transposeB ?\n [batchDimB, outerShapeB, innerShapeB] :\n [batchDimB, innerShapeB, outerShapeB];\n // The rest of the implementation is designed to operate on rank-3 tensors\n const a3d = reshape({ inputs: { x: a }, backend, attrs: { shape: a3dShape } });\n const b3d = reshape({ inputs: { x: b }, backend, attrs: { shape: b3dShape } });\n const intermediates = [a3d, b3d];\n const batchDim = Math.max(batchDimA, batchDimB);\n const sharedDim = transposeA ? a3d.shape[1] : a3d.shape[2];\n const hasBias = bias != null;\n const hasPreluActivationWeights = preluActivationWeights != null;\n const hasLeakyreluAlpha = activation === 'leakyrelu';\n const fusedActivation = activation != null ?\n mapActivationToShaderProgram(activation, true) :\n null;\n const containsFusedOps = hasBias || hasPreluActivationWeights ||\n hasLeakyreluAlpha || fusedActivation != null;\n let out;\n // Since the matrices are vectors, it is faster to call mul().sum()\n // because sum() is O(sqrt(N)) due to divide-and-conquer.\n if ((outerShapeA === 1 || outerShapeB === 1) &&\n sharedDim > MATMUL_SHARED_DIM_THRESHOLD && containsFusedOps === false) {\n let aVec = a3d;\n let bVec = b3d;\n if (transposeA) {\n aVec = transpose({ inputs: { x: a3d }, backend, attrs: { perm: [0, 2, 1] } });\n intermediates.push(aVec);\n }\n if (transposeB) {\n bVec = transpose({ inputs: { x: b3d }, backend, attrs: { perm: [0, 2, 1] } });\n intermediates.push(bVec);\n }\n const shouldReshapeA = outerShapeB !== 1;\n const shouldReshapeB = outerShapeB === 1;\n let aVec3d = aVec;\n if (shouldReshapeA) {\n aVec3d = reshape({\n inputs: { x: aVec },\n backend,\n attrs: { shape: [batchDim, sharedDim, 1] }\n });\n intermediates.push(aVec3d);\n }\n const axis = outerShapeB === 1 ? 2 : 1;\n let bVec3d = bVec;\n if (shouldReshapeB) {\n bVec3d = reshape({\n inputs: { x: bVec },\n backend,\n attrs: { shape: [batchDim, 1, sharedDim] }\n });\n intermediates.push(bVec3d);\n }\n const product = multiply({ inputs: { a: aVec3d, b: bVec3d }, backend });\n out = sum({ inputs: { x: product }, backend, attrs: { axis, keepDims: true } });\n intermediates.push(product);\n }\n else {\n const dtype = upcastType(a.dtype, b.dtype);\n const program = new MatMulPackedProgram(a3dShape, b3dShape, [batchDim, outerShapeA, outerShapeB], transposeA, transposeB, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha);\n const inputs = [a3d, b3d];\n if (bias != null) {\n inputs.push(bias);\n }\n if (hasPreluActivationWeights) {\n inputs.push(preluActivationWeights);\n }\n if (hasLeakyreluAlpha) {\n const $leakyreluAlpha = backend.makeTensorInfo([], 'float32', util.createScalarValue(leakyreluAlpha, 'float32'));\n inputs.push($leakyreluAlpha);\n intermediates.push($leakyreluAlpha);\n }\n out = backend.runWebGLProgram(program, inputs, dtype);\n }\n const outReshaped = reshape({ inputs: { x: out }, backend, attrs: { shape: outShape } });\n intermediates.push(out);\n for (const i of intermediates) {\n backend.disposeIntermediateTensorInfo(i);\n }\n return outReshaped;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hNYXRNdWxfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9CYXRjaE1hdE11bF9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxjQUFjLEVBQWMsVUFBVSxFQUFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2pHLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsOEVBQThFO0FBQzlFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDO0FBY2hELE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsQ0FBQyxFQUNELENBQUMsRUFDRCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE9BQU8sRUFDUCxJQUFJLEdBQUcsSUFBSSxFQUNYLHNCQUFzQixHQUFHLElBQUksRUFDN0IsY0FBYyxHQUFHLENBQUMsRUFDbEIsVUFBVSxHQUFHLElBQUksRUFDQztJQUNsQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM3QixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUU3QixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV6RSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV6RSxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakQsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsMEJBQTBCLENBQy9ELENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENB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LE9BQU8sQ0FBQyxjQUFjLENBQzFDLEVBQUUsRUFBRSxTQUFTLEVBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQXNDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDckM7UUFFRCxHQUFHLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsTUFBTSxXQUFXLEdBQ2IsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ25FLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsS0FBSyxNQUFNLENBQUMsSUFBSSxhQUFhLEVBQUU7UUFDN0IsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzFDO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIGJyb2FkY2FzdF91dGlsLCBUZW5zb3JJbmZvLCB1cGNhc3RUeXBlLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHttYXBBY3RpdmF0aW9uVG9TaGFkZXJQcm9ncmFtfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7TWF0TXVsUGFja2VkUHJvZ3JhbX0gZnJvbSAnLi4vbXVsbWF0X3BhY2tlZF9ncHUnO1xuXG5pbXBvcnQge211bHRpcGx5fSBmcm9tICcuL011bHRpcGx5JztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7c3VtfSBmcm9tICcuL1N1bSc7XG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG4vLyBFbXBpcmljYWxseSBkZXRlcm1pbmVkIG1pbmltYWwgc2hhcmVkIGRpbWVuc2lvbiBpbiBtYXRtdWwgYmVmb3JlIHdlIGZvcndhcmRcbi8vIHRvIGEubXVsKGIpLnN1bSgpIGluIG9yZGVyIHRvIHRha2UgYWR2YW50YWdlIG9mIEdQVSBwYXJhbGxlbGlzbS4gU2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzLWNvcmUvcHVsbC8xMzc5IGZvciBiZW5jaG1hcmtzLlxuZXhwb3J0IGNvbnN0IE1BVE1VTF9TSEFSRURfRElNX1RIUkVTSE9MRCA9IDEwMDA7XG5cbnR5cGUgQmF0Y2hNYXRNdWxDb25maWcgPSB7XG4gIGE6IFRlbnNvckluZm8sXG4gIGI6IFRlbnNvckluZm8sXG4gIHRyYW5zcG9zZUE6IGJvb2xlYW4sXG4gIHRyYW5zcG9zZUI6IGJvb2xlYW4sXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGJpYXM/OiBUZW5zb3JJbmZvLFxuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzPzogVGVuc29ySW5mbyxcbiAgbGVha3lyZWx1QWxwaGE/OiBudW1iZXIsXG4gIGFjdGl2YXRpb24/OiBiYWNrZW5kX3V0aWwuQWN0aXZhdGlvblxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJhdGNoTWF0TXVsSW1wbCh7XG4gIGEsXG4gIGIsXG4gIHRyYW5zcG9zZUEsXG4gIHRyYW5zcG9zZUIsXG4gIGJhY2tlbmQsXG4gIGJpYXMgPSBudWxsLFxuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gbnVsbCxcbiAgbGVha3lyZWx1QWxwaGEgPSAwLFxuICBhY3RpdmF0aW9uID0gbnVsbFxufTogQmF0Y2hNYXRNdWxDb25maWcpOiBUZW5zb3JJbmZvIHtcbiAgY29uc3QgYVJhbmsgPSBhLnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgYlJhbmsgPSBiLnNoYXBlLmxlbmd0aDtcblxuICBjb25zdCBpbm5lclNoYXBlQSA9IHRyYW5zcG9zZUEgPyBhLnNoYXBlW2FSYW5rIC0gMl0gOiBhLnNoYXBlW2FSYW5rIC0gMV07XG4gIGNvbnN0IGlubmVyU2hhcGVCID0gdHJhbnNwb3NlQiA/IGIuc2hhcGVbYlJhbmsgLSAxXSA6IGIuc2hhcGVbYlJhbmsgLSAyXTtcblxuICBjb25zdCBvdXRlclNoYXBlQSA9IHRyYW5zcG9zZUEgPyBhLnNoYXBlW2FSYW5rIC0gMV0gOiBhLnNoYXBlW2FSYW5rIC0gMl07XG4gIGNvbnN0IG91dGVyU2hhcGVCID0gdHJhbnNwb3NlQiA/IGIuc2hhcGVbYlJhbmsgLSAyXSA6IGIuc2hhcGVbYlJhbmsgLSAxXTtcblxuICBjb25zdCBvdXRlckRpbXNBID0gYS5zaGFwZS5zbGljZSgwLCAtMik7XG4gIGNvbnN0IG91dGVyRGltc0IgPSBiLnNoYXBlLnNsaWNlKDAsIC0yKTtcblxuICBjb25zdCBiYXRjaERpbUEgPSB1dGlsLnNpemVGcm9tU2hhcGUob3V0ZXJEaW1zQSk7XG4gIGNvbnN0IGJhdGNoRGltQiA9IHV0aWwuc2l6ZUZyb21TaGFwZShvdXRlckRpbXNCKTtcblxuICBjb25zdCBvdXRTaGFwZU91dGVyRGltcyA9IGJyb2FkY2FzdF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKFxuICAgICAgYS5zaGFwZS5zbGljZSgwLCAtMiksIGIuc2hhcGUuc2xpY2UoMCwgLTIpKTtcbiAgY29uc3Qgb3V0U2hhcGUgPSBvdXRTaGFwZU91dGVyRGltcy5jb25jYXQoW291dGVyU2hhcGVBLCBvdXRlclNoYXBlQl0pO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaW5uZXJTaGFwZUEgPT09IGlubmVyU2hhcGVCLFxuICAgICAgKCkgPT4gYEVycm9yIGluIG1hdE11bDogaW5uZXIgc2hhcGVzICgke2lubmVyU2hhcGVBfSkgYW5kIChgICtcbiAgICAgICAgICBgJHtpbm5lclNoYXBlQn0pIG9mIFRlbnNvcnMgd2l0aCBzaGFwZXMgJHthLnNoYXBlfSBhbmQgYCArXG4gICAgICAgICAgYCR7Yi5zaGFwZX0gYW5kIHRyYW5zcG9zZUE9JHt0cmFuc3Bvc2VBfWAgK1xuICAgICAgICAgIGAgYW5kIHRyYW5zcG9zZUI9JHt0cmFuc3Bvc2VCfSBtdXN0IG1hdGNoLmApO1xuXG4gIGNvbnN0IGEzZFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSB0cmFuc3Bvc2VBID9cbiAgICAgIFtiYXRjaERpbUEsIGlubmVyU2hhcGVBLCBvdXRlclNoYXBlQV0gOlxuICAgICAgW2JhdGNoRGltQSwgb3V0ZXJTaGFwZUEsIGlubmVyU2hhcGVBXTtcbiAgY29uc3QgYjNkU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IHRyYW5zcG9zZUIgP1xuICAgICAgW2JhdGNoRGltQiwgb3V0ZXJTaGFwZUIsIGlubmVyU2hhcGVCXSA6XG4gICAgICBbYmF0Y2hEaW1CLCBpbm5lclNoYXBlQiwgb3V0ZXJTaGFwZUJdO1xuXG4gIC8vIFRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBkZXNpZ25lZCB0byBvcGVyYXRlIG9uIHJhbmstMyB0ZW5zb3JzXG4gIGNvbnN0IGEzZCA9IHJlc2hhcGUoe2lucHV0czoge3g6IGF9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBhM2RTaGFwZX19KTtcbiAgY29uc3QgYjNkID0gcmVzaGFwZSh7aW5wdXRzOiB7eDogYn0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IGIzZFNoYXBlfX0pO1xuXG4gIGNvbnN0IGludGVybWVkaWF0ZXM6IFRlbnNvckluZm9bXSA9IFthM2QsIGIzZF07XG5cbiAgY29uc3QgYmF0Y2hEaW0gPSBNYXRoLm1heChiYXRjaERpbUEsIGJhdGNoRGltQik7XG4gIGNvbnN0IHNoYXJlZERpbSA9IHRyYW5zcG9zZUEgPyBhM2Quc2hhcGVbMV0gOiBhM2Quc2hhcGVbMl07XG5cbiAgY29uc3QgaGFzQmlhcyA9IGJpYXMgIT0gbnVsbDtcbiAgY29uc3QgaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9IHByZWx1QWN0aXZhdGlvbldlaWdodHMgIT0gbnVsbDtcbiAgY29uc3QgaGFzTGVha3lyZWx1QWxwaGEgPSBhY3RpdmF0aW9uID09PSAnbGVha3lyZWx1JztcbiAgY29uc3QgZnVzZWRBY3RpdmF0aW9uID0gYWN0aXZhdGlvbiAhPSBudWxsID9cbiAgICAgIG1hcEFjdGl2YXRpb25Ub1NoYWRlclByb2dyYW0oYWN0aXZhdGlvbiwgdHJ1ZSkgOlxuICAgICAgbnVsbDtcbiAgY29uc3QgY29udGFpbnNGdXNlZE9wcyA9IGhhc0JpYXMgfHwgaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyB8fFxuICAgICAgaGFzTGVha3lyZWx1QWxwaGEgfHwgZnVzZWRBY3RpdmF0aW9uICE9IG51bGw7XG4gIGxldCBvdXQ6IFRlbnNvckluZm87XG5cbiAgLy8gU2luY2UgdGhlIG1hdHJpY2VzIGFyZSB2ZWN0b3JzLCBpdCBpcyBmYXN0ZXIgdG8gY2FsbCBtdWwoKS5zdW0oKVxuICAvLyBiZWNhdXNlIHN1bSgpIGlzIE8oc3FydChOKSkgZHVlIHRvIGRpdmlkZS1hbmQtY29ucXVlci5cbiAgaWYgKChvdXRlclNoYXBlQSA9PT0gMSB8fCBvdXRlclNoYXBlQiA9PT0gMSkgJiZcbiAgICAgIHNoYXJlZERpbSA+IE1BVE1VTF9TSEFSRURfRElNX1RIUkVTSE9MRCAmJiBjb250YWluc0Z1c2VkT3BzID09PSBmYWxzZSkge1xuICAgIGxldCBhVmVjID0gYTNkO1xuICAgIGxldCBiVmVjID0gYjNkO1xuICAgIGlmICh0cmFuc3Bvc2VBKSB7XG4gICAgICBhVmVjID0gdHJhbnNwb3NlKHtpbnB1dHM6IHt4OiBhM2R9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IFswLCAyLCAxXX19KTtcbiAgICAgIGludGVybWVkaWF0ZXMucHVzaChhVmVjKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zcG9zZUIpIHtcbiAgICAgIGJWZWMgPSB0cmFuc3Bvc2Uoe2lucHV0czoge3g6IGIzZH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogWzAsIDIsIDFdfX0pO1xuICAgICAgaW50ZXJtZWRpYXRlcy5wdXNoKGJWZWMpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFJlc2hhcGVBID0gb3V0ZXJTaGFwZUIgIT09IDE7XG4gICAgY29uc3Qgc2hvdWxkUmVzaGFwZUIgPSBvdXRlclNoYXBlQiA9PT0gMTtcblxuICAgIGxldCBhVmVjM2QgPSBhVmVjO1xuICAgIGlmIChzaG91bGRSZXNoYXBlQSkge1xuICAgICAgYVZlYzNkID0gcmVzaGFwZSh7XG4gICAgICAgIGlucHV0czoge3g6IGFWZWN9LFxuICAgICAgICBiYWNrZW5kLFxuICAgICAgICBhdHRyczoge3NoYXBlOiBbYmF0Y2hEaW0sIHNoYXJlZERpbSwgMV19XG4gICAgICB9KTtcblxuICAgICAgaW50ZXJtZWRpYXRlcy5wdXNoKGFWZWMzZCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXhpcyA9IG91dGVyU2hhcGVCID09PSAxID8gMiA6IDE7XG5cbiAgICBsZXQgYlZlYzNkID0gYlZlYztcbiAgICBpZiAoc2hvdWxkUmVzaGFwZUIpIHtcbiAgICAgIGJWZWMzZCA9IHJlc2hhcGUoe1xuICAgICAgICBpbnB1dHM6IHt4OiBiVmVjfSxcbiAgICAgICAgYmFja2VuZCxcbiAgICAgICAgYXR0cnM6IHtzaGFwZTogW2JhdGNoRGltLCAxLCBzaGFyZWREaW1dfVxuICAgICAgfSk7XG5cbiAgICAgIGludGVybWVkaWF0ZXMucHVzaChiVmVjM2QpO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2R1Y3QgPSBtdWx0aXBseSh7aW5wdXRzOiB7YTogYVZlYzNkLCBiOiBiVmVjM2R9LCBiYWNrZW5kfSk7XG4gICAgb3V0ID0gc3VtKHtpbnB1dHM6IHt4OiBwcm9kdWN0fSwgYmFja2VuZCwgYXR0cnM6IHtheGlzLCBrZWVwRGltczogdHJ1ZX19KTtcbiAgICBpbnRlcm1lZGlhdGVzLnB1c2gocHJvZHVjdCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHR5cGUgPSB1cGNhc3RUeXBlKGEuZHR5cGUsIGIuZHR5cGUpO1xuXG4gICAgY29uc3QgcHJvZ3JhbSA9IG5ldyBNYXRNdWxQYWNrZWRQcm9ncmFtKFxuICAgICAgICBhM2RTaGFwZSwgYjNkU2hhcGUsIFtiYXRjaERpbSwgb3V0ZXJTaGFwZUEsIG91dGVyU2hhcGVCXSwgdHJhbnNwb3NlQSxcbiAgICAgICAgdHJhbnNwb3NlQiwgaGFzQmlhcywgZnVzZWRBY3RpdmF0aW9uLCBoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzLFxuICAgICAgICBoYXNMZWFreXJlbHVBbHBoYSk7XG5cbiAgICBjb25zdCBpbnB1dHM6IFRlbnNvckluZm9bXSA9IFthM2QsIGIzZF07XG4gICAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICAgaW5wdXRzLnB1c2goYmlhcyk7XG4gICAgfVxuICAgIGlmIChoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzKSB7XG4gICAgICBpbnB1dHMucHVzaChwcmVsdUFjdGl2YXRpb25XZWlnaHRzKTtcbiAgICB9XG4gICAgaWYgKGhhc0xlYWt5cmVsdUFscGhhKSB7XG4gICAgICBjb25zdCAkbGVha3lyZWx1QWxwaGEgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgICAgIFtdLCAnZmxvYXQzMicsXG4gICAgICAgICAgdXRpbC5jcmVhdGVTY2FsYXJWYWx1ZShsZWFreXJlbHVBbHBoYSBhcyB1bmtub3duIGFzICdmbG9hdDMyJywgJ2Zsb2F0MzInKSk7XG4gICAgICBpbnB1dHMucHVzaCgkbGVha3lyZWx1QWxwaGEpO1xuICAgICAgaW50ZXJtZWRpYXRlcy5wdXNoKCRsZWFreXJlbHVBbHBoYSk7XG4gICAgfVxuXG4gICAgb3V0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgaW5wdXRzLCBkdHlwZSk7XG4gIH1cblxuICBjb25zdCBvdXRSZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiBvdXR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBvdXRTaGFwZX19KTtcbiAgaW50ZXJtZWRpYXRlcy5wdXNoKG91dCk7XG4gIGZvciAoY29uc3QgaSBvZiBpbnRlcm1lZGlhdGVzKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpKTtcbiAgfVxuICByZXR1cm4gb3V0UmVzaGFwZWQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { _FusedMatMul } from '@tensorflow/tfjs-core';\nimport { batchMatMulImpl } from './BatchMatMul_impl';\nexport function _fusedMatMul(args) {\n const { inputs, backend, attrs } = args;\n const { a, b, bias, preluActivationWeights } = inputs;\n const { transposeA, transposeB, activation, leakyreluAlpha } = attrs;\n return batchMatMulImpl({\n a,\n b,\n transposeA,\n transposeB,\n backend,\n bias,\n preluActivationWeights,\n leakyreluAlpha,\n activation\n });\n}\nexport const _fusedMatMulConfig = {\n kernelName: _FusedMatMul,\n backendName: 'webgl',\n kernelFunc: _fusedMatMul,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX0Z1c2VkTWF0TXVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL19GdXNlZE1hdE11bC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFrRSxNQUFNLHVCQUF1QixDQUFDO0FBR3BILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBSTVCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNwRCxNQUFNLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRW5FLE9BQU8sZUFBZSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxDQUFDO1FBQ0QsVUFBVTtRQUNWLFVBQVU7UUFDVixPQUFPO1FBQ1AsSUFBSTtRQUNKLHNCQUFzQjtRQUN0QixjQUFjO1FBQ2QsVUFBVTtLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBaUI7SUFDOUMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFlBQXFDO0NBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge19GdXNlZE1hdE11bCwgX0Z1c2VkTWF0TXVsQXR0cnMsIF9GdXNlZE1hdE11bElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtiYXRjaE1hdE11bEltcGx9IGZyb20gJy4vQmF0Y2hNYXRNdWxfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBfZnVzZWRNYXRNdWwoYXJnczoge1xuICBpbnB1dHM6IF9GdXNlZE1hdE11bElucHV0cyxcbiAgYXR0cnM6IF9GdXNlZE1hdE11bEF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHthLCBiLCBiaWFzLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzfSA9IGlucHV0cztcbiAgY29uc3Qge3RyYW5zcG9zZUEsIHRyYW5zcG9zZUIsIGFjdGl2YXRpb24sIGxlYWt5cmVsdUFscGhhfSA9IGF0dHJzO1xuXG4gIHJldHVybiBiYXRjaE1hdE11bEltcGwoe1xuICAgIGEsXG4gICAgYixcbiAgICB0cmFuc3Bvc2VBLFxuICAgIHRyYW5zcG9zZUIsXG4gICAgYmFja2VuZCxcbiAgICBiaWFzLFxuICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHMsXG4gICAgbGVha3lyZWx1QWxwaGEsXG4gICAgYWN0aXZhdGlvblxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IF9mdXNlZE1hdE11bENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBfRnVzZWRNYXRNdWwsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBfZnVzZWRNYXRNdWwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Abs, env } from '@tensorflow/tfjs-core';\nimport { simpleAbsImplCPU } from '../kernel_utils/shared';\nimport { UnaryOpProgram } from '../unaryop_gpu';\nimport { UnaryOpPackedProgram } from '../unaryop_packed_gpu';\nconst ABS = `return abs(x);`;\nexport function abs(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n // TODO: handle cases when x is complex. Once the cpu implementation\n // can handle complex values, refactor to use unaryKernelFunc.\n if (backend.shouldExecuteOnCPU([x]) && x.dtype !== 'complex64') {\n const xData = backend.texData.get(x.dataId);\n const outValues = simpleAbsImplCPU(xData.values);\n return backend.makeTensorInfo(x.shape, x.dtype, outValues);\n }\n let program;\n if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n program = new UnaryOpPackedProgram(x.shape, ABS);\n }\n else {\n program = new UnaryOpProgram(x.shape, ABS);\n }\n return backend.runWebGLProgram(program, [x], x.dtype);\n}\nexport const absConfig = {\n kernelName: Abs,\n backendName: 'webgl',\n kernelFunc: abs\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0Ficy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUFhLEdBQUcsRUFBbUQsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUM7QUFFN0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFvRDtJQUV0RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRW5CLG9FQUFvRTtJQUNwRSw4REFBOEQ7SUFDOUQsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQzlELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBb0IsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDNUQ7SUFFRCxJQUFJLE9BQTRDLENBQUM7SUFDakQsSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRTtRQUNoRCxPQUFPLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2xEO1NBQU07UUFDTCxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztLQUM1QztJQUNELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBYnMsIEFic0lucHV0cywgZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3NpbXBsZUFic0ltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuaW1wb3J0IHtVbmFyeU9wUHJvZ3JhbX0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuaW1wb3J0IHtVbmFyeU9wUGFja2VkUHJvZ3JhbX0gZnJvbSAnLi4vdW5hcnlvcF9wYWNrZWRfZ3B1JztcblxuY29uc3QgQUJTID0gYHJldHVybiBhYnMoeCk7YDtcblxuZXhwb3J0IGZ1bmN0aW9uIGFicyhhcmdzOiB7aW5wdXRzOiBBYnNJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG5cbiAgLy8gVE9ETzogaGFuZGxlIGNhc2VzIHdoZW4geCBpcyBjb21wbGV4LiBPbmNlIHRoZSBjcHUgaW1wbGVtZW50YXRpb25cbiAgLy8gY2FuIGhhbmRsZSBjb21wbGV4IHZhbHVlcywgcmVmYWN0b3IgdG8gdXNlIHVuYXJ5S2VybmVsRnVuYy5cbiAgaWYgKGJhY2tlbmQuc2hvdWxkRXhlY3V0ZU9uQ1BVKFt4XSkgJiYgeC5kdHlwZSAhPT0gJ2NvbXBsZXg2NCcpIHtcbiAgICBjb25zdCB4RGF0YSA9IGJhY2tlbmQudGV4RGF0YS5nZXQoeC5kYXRhSWQpO1xuICAgIGNvbnN0IG91dFZhbHVlcyA9IHNpbXBsZUFic0ltcGxDUFUoeERhdGEudmFsdWVzIGFzIFR5cGVkQXJyYXkpO1xuICAgIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHguc2hhcGUsIHguZHR5cGUsIG91dFZhbHVlcyk7XG4gIH1cblxuICBsZXQgcHJvZ3JhbTogVW5hcnlPcFByb2dyYW18VW5hcnlPcFBhY2tlZFByb2dyYW07XG4gIGlmIChlbnYoKS5nZXRCb29sKCdXRUJHTF9QQUNLX1VOQVJZX09QRVJBVElPTlMnKSkge1xuICAgIHByb2dyYW0gPSBuZXcgVW5hcnlPcFBhY2tlZFByb2dyYW0oeC5zaGFwZSwgQUJTKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9ncmFtID0gbmV3IFVuYXJ5T3BQcm9ncmFtKHguc2hhcGUsIEFCUyk7XG4gIH1cbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFt4XSwgeC5kdHlwZSk7XG59XG5cbmV4cG9ydCBjb25zdCBhYnNDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQWJzLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogYWJzIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Acos } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { CHECK_NAN_SNIPPET } from '../unaryop_gpu';\nconst ACOS = CHECK_NAN_SNIPPET + `\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`;\nexport const acos = unaryKernelFunc({ opSnippet: ACOS });\nexport const acosConfig = {\n kernelName: Acos,\n backendName: 'webgl',\n kernelFunc: acos,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9BY29zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEdBQUc7Ozs7O0NBS2hDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0Fjb3MsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVH0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuXG5jb25zdCBBQ09TID0gQ0hFQ0tfTkFOX1NOSVBQRVQgKyBgXG4gIGlmIChhYnMoeCkgPiAxLikge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgcmV0dXJuIGFjb3MoeCk7XG5gO1xuXG5leHBvcnQgY29uc3QgYWNvcyA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBBQ09TfSk7XG5cbmV4cG9ydCBjb25zdCBhY29zQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFjb3MsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhY29zLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Acosh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { CHECK_NAN_SNIPPET } from '../unaryop_gpu';\nconst ACOSH = CHECK_NAN_SNIPPET + `\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`;\nexport const acosh = unaryKernelFunc({ opSnippet: ACOSH });\nexport const acoshConfig = {\n kernelName: Acosh,\n backendName: 'webgl',\n kernelFunc: acosh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNvc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQWNvc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsR0FBRzs7bUNBRUMsQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsS0FBSztDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QWNvc2gsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVH0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuXG5jb25zdCBBQ09TSCA9IENIRUNLX05BTl9TTklQUEVUICsgYFxuICBpZiAoeCA8IDEuMCkgcmV0dXJuIE5BTjtcbnJldHVybiBsb2coeCArIHNxcnQoeCAqIHggLSAxLjApKTtgO1xuXG5leHBvcnQgY29uc3QgYWNvc2ggPSB1bmFyeUtlcm5lbEZ1bmMoe29wU25pcHBldDogQUNPU0h9KTtcblxuZXhwb3J0IGNvbnN0IGFjb3NoQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFjb3NoLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogYWNvc2gsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Add } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { addImplCPU as cpuAdd } from '../kernel_utils/shared';\nconst ADD = 'return a + b;';\nexport const addKernelFunc = binaryKernelFunc({\n opSnippet: ADD,\n packedOpSnippet: ADD,\n supportsComplex: true,\n cpuKernelImpl: cpuAdd\n});\nexport const addConfig = {\n kernelName: Add,\n backendName: 'webgl',\n kernelFunc: addKernelFunc\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0FkZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUM7QUFFNUIsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDO0lBQzVDLFNBQVMsRUFBRSxHQUFHO0lBQ2QsZUFBZSxFQUFFLEdBQUc7SUFDcEIsZUFBZSxFQUFFLElBQUk7SUFDckIsYUFBYSxFQUFFLE1BQU07Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxhQUFhO0NBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QWRkLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4va2VybmVsX3V0aWxzL2tlcm5lbF9mdW5jc191dGlscyc7XG5pbXBvcnQge2FkZEltcGxDUFUgYXMgY3B1QWRkfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuY29uc3QgQUREID0gJ3JldHVybiBhICsgYjsnO1xuXG5leHBvcnQgY29uc3QgYWRkS2VybmVsRnVuYyA9IGJpbmFyeUtlcm5lbEZ1bmMoe1xuICBvcFNuaXBwZXQ6IEFERCxcbiAgcGFja2VkT3BTbmlwcGV0OiBBREQsXG4gIHN1cHBvcnRzQ29tcGxleDogdHJ1ZSxcbiAgY3B1S2VybmVsSW1wbDogY3B1QWRkXG59KTtcblxuZXhwb3J0IGNvbnN0IGFkZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBZGQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhZGRLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class AddNProgram {\n constructor(outputShape, shapes) {\n this.outputShape = [];\n this.outputShape = outputShape;\n this.variableNames = shapes.map((_, i) => `T${i}`);\n const snippets = [];\n // Get target elements from every input tensor.\n this.variableNames.forEach(variable => {\n snippets.push(`float v${variable} = get${variable}AtOutCoords();`);\n });\n // Calculate the sum of all elements.\n const operation = this.variableNames\n .map(variable => {\n return `v${variable}`;\n })\n .join(' + ');\n this.userCode = `\n void main() {\n ${snippets.join('\\n ')}\n\n float result = ${operation};\n setOutput(result);\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkbl9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2FkZG5fZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBS3RCLFlBQVksV0FBcUIsRUFBRSxNQUFrQjtRQUhyRCxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUl6QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkQsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBQzlCLCtDQUErQztRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsUUFBUSxTQUFTLFFBQVEsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILHFDQUFxQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYTthQUNiLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNkLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLFFBQVEsR0FBRzs7VUFFVixRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzs7eUJBRVosU0FBUzs7O0tBRzdCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgQWRkTlByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzOiBzdHJpbmdbXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3V0cHV0U2hhcGU6IG51bWJlcltdLCBzaGFwZXM6IG51bWJlcltdW10pIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gb3V0cHV0U2hhcGU7XG4gICAgdGhpcy52YXJpYWJsZU5hbWVzID0gc2hhcGVzLm1hcCgoXywgaSkgPT4gYFQke2l9YCk7XG5cbiAgICBjb25zdCBzbmlwcGV0czogc3RyaW5nW10gPSBbXTtcbiAgICAvLyBHZXQgdGFyZ2V0IGVsZW1lbnRzIGZyb20gZXZlcnkgaW5wdXQgdGVuc29yLlxuICAgIHRoaXMudmFyaWFibGVOYW1lcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIHNuaXBwZXRzLnB1c2goYGZsb2F0IHYke3ZhcmlhYmxlfSA9IGdldCR7dmFyaWFibGV9QXRPdXRDb29yZHMoKTtgKTtcbiAgICB9KTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgc3VtIG9mIGFsbCBlbGVtZW50cy5cbiAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLnZhcmlhYmxlTmFtZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGB2JHt2YXJpYWJsZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignICsgJyk7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke3NuaXBwZXRzLmpvaW4oJ1xcbiAgICAgICAgJyl9XG5cbiAgICAgICAgZmxvYXQgcmVzdWx0ID0gJHtvcGVyYXRpb259O1xuICAgICAgICBzZXRPdXRwdXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class AddNPackedProgram {\n constructor(outputShape, shapes) {\n this.outputShape = [];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = outputShape;\n this.variableNames = shapes.map((_, i) => `T${i}`);\n const snippets = [];\n // Get target elements from every input tensor.\n this.variableNames.forEach(variable => {\n snippets.push(`vec4 v${variable} = get${variable}AtOutCoords();`);\n });\n // Calculate the sum of all elements.\n const operation = this.variableNames\n .map(variable => {\n return `v${variable}`;\n })\n .join(' + ');\n this.userCode = `\n void main() {\n ${snippets.join('\\n ')}\n\n vec4 result = ${operation};\n setOutput(result);\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkbl9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9hZGRuX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxPQUFPLGlCQUFpQjtJQU81QixZQUFZLFdBQXFCLEVBQUUsTUFBa0I7UUFMckQsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFFM0IsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFHbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5ELE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLFFBQVEsU0FBUyxRQUFRLGdCQUFnQixDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxxQ0FBcUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDYixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDZCxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxRQUFRLEdBQUc7O1VBRVYsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7O3dCQUViLFNBQVM7OztLQUc1QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIEFkZE5QYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lczogc3RyaW5nW107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXSA9IFtdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKG91dHB1dFNoYXBlOiBudW1iZXJbXSwgc2hhcGVzOiBudW1iZXJbXVtdKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlO1xuICAgIHRoaXMudmFyaWFibGVOYW1lcyA9IHNoYXBlcy5tYXAoKF8sIGkpID0+IGBUJHtpfWApO1xuXG4gICAgY29uc3Qgc25pcHBldHM6IHN0cmluZ1tdID0gW107XG4gICAgLy8gR2V0IHRhcmdldCBlbGVtZW50cyBmcm9tIGV2ZXJ5IGlucHV0IHRlbnNvci5cbiAgICB0aGlzLnZhcmlhYmxlTmFtZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBzbmlwcGV0cy5wdXNoKGB2ZWM0IHYke3ZhcmlhYmxlfSA9IGdldCR7dmFyaWFibGV9QXRPdXRDb29yZHMoKTtgKTtcbiAgICB9KTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgc3VtIG9mIGFsbCBlbGVtZW50cy5cbiAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLnZhcmlhYmxlTmFtZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGB2JHt2YXJpYWJsZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignICsgJyk7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke3NuaXBwZXRzLmpvaW4oJ1xcbiAgICAgICAgJyl9XG5cbiAgICAgICAgdmVjNCByZXN1bHQgPSAke29wZXJhdGlvbn07XG4gICAgICAgIHNldE91dHB1dChyZXN1bHQpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AddN, env, upcastType } from '@tensorflow/tfjs-core';\nimport { AddNProgram } from '../addn_gpu';\nimport { AddNPackedProgram } from '../addn_packed_gpu';\nimport { identity } from './Identity';\nexport function addN(args) {\n const { inputs, backend } = args;\n const tensors = inputs;\n if (tensors.length === 1) {\n return identity({ inputs: { x: tensors[0] }, backend });\n }\n // Limit the number of uploaded textures for optimization.\n if (tensors.length > env().getNumber('WEBGL_MAX_TEXTURES_IN_SHADER')) {\n const midIndex = Math.floor(tensors.length / 2);\n const leftSide = addN({ inputs: tensors.slice(0, midIndex), backend });\n const rightSide = addN({ inputs: tensors.slice(midIndex), backend });\n return addN({ inputs: [leftSide, rightSide], backend });\n }\n const dtype = tensors.map(t => t.dtype).reduce((d1, d2) => upcastType(d1, d2));\n const shapes = tensors.map(t => t.shape);\n // We can make sure shapes are identical in op level.\n const usePackedOp = env().getBool('WEBGL_PACK');\n const program = usePackedOp ?\n new AddNPackedProgram(tensors[0].shape, shapes) :\n new AddNProgram(tensors[0].shape, shapes);\n return backend.runWebGLProgram(program, tensors, dtype);\n}\nexport const addNConfig = {\n kernelName: AddN,\n backendName: 'webgl',\n kernelFunc: addN\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkTi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9BZGROLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQWMsR0FBRyxFQUF3QyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEMsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFxRDtJQUV4RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUUvQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDdkIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QixPQUFPLFFBQVEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0tBQ3JEO0lBRUQsMERBQTBEO0lBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRTtRQUNwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNuRSxPQUFPLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsTUFBTSxLQUFLLEdBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxxREFBcUQ7SUFDckQsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUMsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QWRkTiwgQWRkTklucHV0cywgZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHVwY2FzdFR5cGV9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QWRkTlByb2dyYW19IGZyb20gJy4uL2FkZG5fZ3B1JztcbmltcG9ydCB7QWRkTlBhY2tlZFByb2dyYW19IGZyb20gJy4uL2FkZG5fcGFja2VkX2dwdSc7XG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSAnLi9JZGVudGl0eSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGROKGFyZ3M6IHtpbnB1dHM6IEFkZE5JbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuXG4gIGNvbnN0IHRlbnNvcnMgPSBpbnB1dHM7XG4gIGlmICh0ZW5zb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBpZGVudGl0eSh7aW5wdXRzOiB7eDogdGVuc29yc1swXX0sIGJhY2tlbmR9KTtcbiAgfVxuXG4gIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdXBsb2FkZWQgdGV4dHVyZXMgZm9yIG9wdGltaXphdGlvbi5cbiAgaWYgKHRlbnNvcnMubGVuZ3RoID4gZW52KCkuZ2V0TnVtYmVyKCdXRUJHTF9NQVhfVEVYVFVSRVNfSU5fU0hBREVSJykpIHtcbiAgICBjb25zdCBtaWRJbmRleCA9IE1hdGguZmxvb3IodGVuc29ycy5sZW5ndGggLyAyKTtcbiAgICBjb25zdCBsZWZ0U2lkZSA9IGFkZE4oe2lucHV0czogdGVuc29ycy5zbGljZSgwLCBtaWRJbmRleCksIGJhY2tlbmR9KTtcbiAgICBjb25zdCByaWdodFNpZGUgPSBhZGROKHtpbnB1dHM6IHRlbnNvcnMuc2xpY2UobWlkSW5kZXgpLCBiYWNrZW5kfSk7XG4gICAgcmV0dXJuIGFkZE4oe2lucHV0czogW2xlZnRTaWRlLCByaWdodFNpZGVdLCBiYWNrZW5kfSk7XG4gIH1cblxuICBjb25zdCBkdHlwZSA9XG4gICAgICB0ZW5zb3JzLm1hcCh0ID0+IHQuZHR5cGUpLnJlZHVjZSgoZDEsIGQyKSA9PiB1cGNhc3RUeXBlKGQxLCBkMikpO1xuICBjb25zdCBzaGFwZXMgPSB0ZW5zb3JzLm1hcCh0ID0+IHQuc2hhcGUpO1xuICAvLyBXZSBjYW4gbWFrZSBzdXJlIHNoYXBlcyBhcmUgaWRlbnRpY2FsIGluIG9wIGxldmVsLlxuICBjb25zdCB1c2VQYWNrZWRPcCA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0snKTtcbiAgY29uc3QgcHJvZ3JhbSA9IHVzZVBhY2tlZE9wID9cbiAgICAgIG5ldyBBZGROUGFja2VkUHJvZ3JhbSh0ZW5zb3JzWzBdLnNoYXBlLCBzaGFwZXMpIDpcbiAgICAgIG5ldyBBZGROUHJvZ3JhbSh0ZW5zb3JzWzBdLnNoYXBlLCBzaGFwZXMpO1xuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgdGVuc29ycywgZHR5cGUpO1xufVxuXG5leHBvcnQgY29uc3QgYWRkTkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBZGROLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogYWRkTiBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { All, backend_util, util } from '@tensorflow/tfjs-core';\nimport { reduce } from '../kernel_utils/reduce';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function all(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n const xRank = x.shape.length;\n const origAxes = util.parseAxisParam(axis, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n let permutedX = x;\n if (permutedAxes != null) {\n permutedX = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n axes = backend_util.getInnerMostAxes(axes.length, xRank);\n }\n backend_util.assertAxesAreInnerMostDims('all', axes, xRank);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(permutedX.shape, axes);\n const inSize = util.sizeFromShape(reduceShape);\n const a2D = reshape({ inputs: { x: permutedX }, backend, attrs: { shape: [-1, inSize] } });\n const reduced = reduce(a2D, a2D.dtype, 'all', backend);\n let res;\n if (keepDims) {\n const newShape = backend_util.expandShapeToKeepDim(outShape, origAxes);\n res = reshape({ inputs: { x: reduced }, backend, attrs: { shape: newShape } });\n }\n else {\n res = reshape({ inputs: { x: reduced }, backend, attrs: { shape: outShape } });\n }\n backend.disposeIntermediateTensorInfo(a2D);\n backend.disposeIntermediateTensorInfo(reduced);\n if (permutedAxes != null) {\n backend.disposeIntermediateTensorInfo(permutedX);\n }\n return res;\n}\nexport const allConfig = {\n kernelName: All,\n backendName: 'webgl',\n kernelFunc: all\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUF1QixZQUFZLEVBQXdDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxVQUFVLEdBQUcsQ0FDZixJQUFxRTtJQUV2RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUU3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBQ3BCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixTQUFTLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzFEO0lBRUQsWUFBWSxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FDekIsWUFBWSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUUvQyxNQUFNLEdBQUcsR0FDTCxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsU0FBUyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFdkQsSUFBSSxHQUFHLENBQUM7SUFDUixJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztLQUMxRTtTQUFNO1FBQ0wsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztLQUMxRTtJQUVELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFL0MsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNsRDtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBbGwsIEFsbEF0dHJzLCBBbGxJbnB1dHMsIGJhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtyZWR1Y2V9IGZyb20gJy4uL2tlcm5lbF91dGlscy9yZWR1Y2UnO1xuXG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gYWxsKFxuICAgIGFyZ3M6IHtpbnB1dHM6IEFsbElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCwgYXR0cnM6IEFsbEF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2F4aXMsIGtlZXBEaW1zfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG5cbiAgY29uc3Qgb3JpZ0F4ZXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIHguc2hhcGUpO1xuICBsZXQgYXhlcyA9IG9yaWdBeGVzO1xuICBjb25zdCBwZXJtdXRlZEF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIHhSYW5rKTtcbiAgbGV0IHBlcm11dGVkWCA9IHg7XG4gIGlmIChwZXJtdXRlZEF4ZXMgIT0gbnVsbCkge1xuICAgIHBlcm11dGVkWCA9IHRyYW5zcG9zZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogcGVybXV0ZWRBeGVzfX0pO1xuICAgIGF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0SW5uZXJNb3N0QXhlcyhheGVzLmxlbmd0aCwgeFJhbmspO1xuICB9XG5cbiAgYmFja2VuZF91dGlsLmFzc2VydEF4ZXNBcmVJbm5lck1vc3REaW1zKCdhbGwnLCBheGVzLCB4UmFuayk7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKHBlcm11dGVkWC5zaGFwZSwgYXhlcyk7XG4gIGNvbnN0IGluU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG5cbiAgY29uc3QgYTJEID1cbiAgICAgIHJlc2hhcGUoe2lucHV0czoge3g6IHBlcm11dGVkWH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IFstMSwgaW5TaXplXX19KTtcbiAgY29uc3QgcmVkdWNlZCA9IHJlZHVjZShhMkQsIGEyRC5kdHlwZSwgJ2FsbCcsIGJhY2tlbmQpO1xuXG4gIGxldCByZXM7XG4gIGlmIChrZWVwRGltcykge1xuICAgIGNvbnN0IG5ld1NoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG91dFNoYXBlLCBvcmlnQXhlcyk7XG4gICAgcmVzID0gcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVkdWNlZH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IG5ld1NoYXBlfX0pO1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHJlc2hhcGUoe2lucHV0czoge3g6IHJlZHVjZWR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBvdXRTaGFwZX19KTtcbiAgfVxuXG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oYTJEKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZWR1Y2VkKTtcblxuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHBlcm11dGVkWCk7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgY29uc3QgYWxsQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFsbCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGFsbCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Any, backend_util, util } from '@tensorflow/tfjs-core';\nimport { reduce } from '../kernel_utils/reduce';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function any(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n const xRank = x.shape.length;\n const origAxes = util.parseAxisParam(axis, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n let permutedX = x;\n if (permutedAxes != null) {\n permutedX = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n axes = backend_util.getInnerMostAxes(axes.length, xRank);\n }\n backend_util.assertAxesAreInnerMostDims('any', axes, xRank);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(permutedX.shape, axes);\n const inSize = util.sizeFromShape(reduceShape);\n const a2D = reshape({ inputs: { x: permutedX }, backend, attrs: { shape: [-1, inSize] } });\n const reduced = reduce(a2D, a2D.dtype, 'any', backend);\n let res;\n if (keepDims) {\n const newShape = backend_util.expandShapeToKeepDim(outShape, origAxes);\n res = reshape({ inputs: { x: reduced }, backend, attrs: { shape: newShape } });\n }\n else {\n res = reshape({ inputs: { x: reduced }, backend, attrs: { shape: outShape } });\n }\n backend.disposeIntermediateTensorInfo(a2D);\n backend.disposeIntermediateTensorInfo(reduced);\n if (permutedAxes != null) {\n backend.disposeIntermediateTensorInfo(permutedX);\n }\n return res;\n}\nexport const anyConfig = {\n kernelName: Any,\n backendName: 'webgl',\n kernelFunc: any\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW55LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0FueS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUF1QixZQUFZLEVBQXdDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxVQUFVLEdBQUcsQ0FDZixJQUFxRTtJQUV2RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUU3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBQ3BCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixTQUFTLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzFEO0lBRUQsWUFBWSxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FDekIsWUFBWSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUUvQyxNQUFNLEdBQUcsR0FDTCxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsU0FBUyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFdkQsSUFBSSxHQUFHLENBQUM7SUFDUixJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztLQUMxRTtTQUFNO1FBQ0wsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztLQUMxRTtJQUVELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFL0MsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNsRDtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBbnksIEFueUF0dHJzLCBBbnlJbnB1dHMsIGJhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtyZWR1Y2V9IGZyb20gJy4uL2tlcm5lbF91dGlscy9yZWR1Y2UnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vVHJhbnNwb3NlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFueShcbiAgICBhcmdzOiB7aW5wdXRzOiBBbnlJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF0dHJzOiBBbnlBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcblxuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuXG4gIGNvbnN0IG9yaWdBeGVzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShheGlzLCB4LnNoYXBlKTtcbiAgbGV0IGF4ZXMgPSBvcmlnQXhlcztcbiAgY29uc3QgcGVybXV0ZWRBeGVzID0gYmFja2VuZF91dGlsLmdldEF4ZXNQZXJtdXRhdGlvbihheGVzLCB4UmFuayk7XG4gIGxldCBwZXJtdXRlZFggPSB4O1xuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICBwZXJtdXRlZFggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGVkQXhlc319KTtcbiAgICBheGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsIHhSYW5rKTtcbiAgfVxuXG4gIGJhY2tlbmRfdXRpbC5hc3NlcnRBeGVzQXJlSW5uZXJNb3N0RGltcygnYW55JywgYXhlcywgeFJhbmspO1xuICBjb25zdCBbb3V0U2hhcGUsIHJlZHVjZVNoYXBlXSA9XG4gICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dEFuZFJlZHVjZVNoYXBlcyhwZXJtdXRlZFguc2hhcGUsIGF4ZXMpO1xuICBjb25zdCBpblNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUocmVkdWNlU2hhcGUpO1xuXG4gIGNvbnN0IGEyRCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiBwZXJtdXRlZFh9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBbLTEsIGluU2l6ZV19fSk7XG4gIGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UoYTJELCBhMkQuZHR5cGUsICdhbnknLCBiYWNrZW5kKTtcblxuICBsZXQgcmVzO1xuICBpZiAoa2VlcERpbXMpIHtcbiAgICBjb25zdCBuZXdTaGFwZSA9IGJhY2tlbmRfdXRpbC5leHBhbmRTaGFwZVRvS2VlcERpbShvdXRTaGFwZSwgb3JpZ0F4ZXMpO1xuICAgIHJlcyA9IHJlc2hhcGUoe2lucHV0czoge3g6IHJlZHVjZWR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBuZXdTaGFwZX19KTtcbiAgfSBlbHNlIHtcbiAgICByZXMgPSByZXNoYXBlKHtpbnB1dHM6IHt4OiByZWR1Y2VkfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogb3V0U2hhcGV9fSk7XG4gIH1cblxuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGEyRCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVkdWNlZCk7XG5cbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhwZXJtdXRlZFgpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGFueUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBbnksXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhbnkgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ArgMinMaxProgram {\n constructor(reduceInfo, op, firstPass) {\n this.variableNames = ['A'];\n const { windowSize, batchSize, outSize } = reduceInfo;\n if (!firstPass) {\n this.variableNames.push('bestIndicesA');\n }\n this.outputShape = [batchSize, outSize];\n const compOp = (op === 'max') ? '>' : '<';\n const indexSnippet = firstPass ?\n 'inOffset + i;' :\n 'round(getBestIndicesA(batch, inOffset + i));';\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJnbWlubWF4X2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvYXJnbWlubWF4X2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ0ksVUFBbUMsRUFBRSxFQUFlLEVBQ3BELFNBQWtCO1FBTnRCLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQU9wQixNQUFNLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsR0FBRyxVQUFVLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDMUMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDNUIsZUFBZSxDQUFDLENBQUM7WUFDakIsOENBQThDLENBQUM7UUFFbkQsSUFBSSxDQUFDLFFBQVEsR0FBRzs7Ozs7a0NBS2MsVUFBVTs7Ozs7OEJBS2QsVUFBVTt3QkFDaEIsWUFBWTs7MEJBRVYsTUFBTTs7Ozs7OztLQU8zQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgQXJnTWluTWF4UHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcmVkdWNlSW5mbzogYmFja2VuZF91dGlsLlJlZHVjZUluZm8sIG9wOiAnbWF4J3wnbWluJyxcbiAgICAgIGZpcnN0UGFzczogYm9vbGVhbikge1xuICAgIGNvbnN0IHt3aW5kb3dTaXplLCBiYXRjaFNpemUsIG91dFNpemV9ID0gcmVkdWNlSW5mbztcbiAgICBpZiAoIWZpcnN0UGFzcykge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ2Jlc3RJbmRpY2VzQScpO1xuICAgIH1cbiAgICB0aGlzLm91dHB1dFNoYXBlID0gW2JhdGNoU2l6ZSwgb3V0U2l6ZV07XG4gICAgY29uc3QgY29tcE9wID0gKG9wID09PSAnbWF4JykgPyAnPicgOiAnPCc7XG4gICAgY29uc3QgaW5kZXhTbmlwcGV0ID0gZmlyc3RQYXNzID9cbiAgICAgICAgJ2luT2Zmc2V0ICsgaTsnIDpcbiAgICAgICAgJ3JvdW5kKGdldEJlc3RJbmRpY2VzQShiYXRjaCwgaW5PZmZzZXQgKyBpKSk7JztcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWMyIGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHNbMF07XG4gICAgICAgIGludCBvdXRJZHggPSBjb29yZHNbMV07XG4gICAgICAgIGludCBpbk9mZnNldCA9IG91dElkeCAqICR7d2luZG93U2l6ZX07XG5cbiAgICAgICAgaW50IGJlc3RJbmRleCA9IGluT2Zmc2V0O1xuICAgICAgICBmbG9hdCBiZXN0VmFsdWUgPSBnZXRBKGJhdGNoLCBiZXN0SW5kZXgpO1xuXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgJHt3aW5kb3dTaXplfTsgaSsrKSB7XG4gICAgICAgICAgaW50IGluSWR4ID0gJHtpbmRleFNuaXBwZXR9O1xuICAgICAgICAgIGZsb2F0IGNhbmRpZGF0ZSA9IGdldEEoYmF0Y2gsIGluSWR4KTtcbiAgICAgICAgICBpZiAoY2FuZGlkYXRlICR7Y29tcE9wfSBiZXN0VmFsdWUpIHtcbiAgICAgICAgICAgIGJlc3RWYWx1ZSA9IGNhbmRpZGF0ZTtcbiAgICAgICAgICAgIGJlc3RJbmRleCA9IGluSWR4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRPdXRwdXQoZmxvYXQoYmVzdEluZGV4KSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { getChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport class ArgMinMaxPackedProgram {\n constructor(shape, windowSize, op, firstPass) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n util.assert(shape.length > 2, () => `Packed arg${op.charAt(0).toUpperCase() +\n op.slice(1)} supports only inputs with rank above 2.`);\n const inSize = shape[shape.length - 1];\n const outSize = Math.ceil(inSize / windowSize);\n this.outputShape = shape.slice(0, -1);\n if (outSize > 1) {\n this.outputShape.push(outSize);\n }\n if (!firstPass) {\n this.variableNames.push('bestIndicesA');\n }\n const outShape = this.outputShape;\n const rank = outShape.length;\n const dtype = getCoordsDataType(rank);\n const coords = getChannels('coords', rank);\n let sourceLocSetup;\n let sourceRank;\n if (outSize === 1) {\n sourceRank = rank + 1;\n const sourceLocDType = getCoordsDataType(sourceRank);\n 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]};`;\n }\n else {\n sourceRank = rank;\n 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]};`;\n }\n const channels = ['x', 'y', 'z', 'w', 'u', 'v'].slice(0, sourceRank);\n const inChannel = '.' + channels[sourceRank - 1]; // e.g. \".b\" for rank 3.\n const intChannels = channels.map(x => 'int ' + x);\n const srcRCoords = getChannels('sourceLocR', sourceRank - 1).concat('inIdx.r');\n const srcGCoords = getChannels('sourceLocG', sourceRank - 1).concat('inIdx.g');\n const srcBCoords = getChannels('sourceLocB', sourceRank - 1).concat('inIdx.b');\n const srcACoords = getChannels('sourceLocA', sourceRank - 1).concat('inIdx.a');\n const compOp = (op === 'max') ? 'greaterThan' : 'lessThan';\n const fetchCandidateIdx = firstPass ? '' : `\n inIdx = round(vec4(getBestIndicesAChannel(${srcRCoords.join()}),\n getBestIndicesAChannel(${srcGCoords.join()}),\n getBestIndicesAChannel(${srcBCoords.join()}),\n getBestIndicesAChannel(${srcACoords.join()})));`;\n const 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.)`;\n const getBestIndicesAChannelSnippet = firstPass ? '' : `\n float getBestIndicesAChannel(${intChannels.join()}) {\n return getChannel(getBestIndicesA(${channels.join()}),\n vec2(${channels.slice(-2).join()}));\n }`;\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJnbWlubWF4X3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2FyZ21pbm1heF9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUczQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxPQUFPLHNCQUFzQjtJQU9qQyxZQUNJLEtBQWUsRUFBRSxVQUFrQixFQUFFLEVBQWUsRUFDcEQsU0FBa0I7UUFSdEIsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBR3RCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBS2xCLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2hCLEdBQUcsRUFBRSxDQUFDLGFBQ0YsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDMUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFB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UyxPQUFPLFVBQVU7OzsyQkFHN0MsVUFBVTs7OEJBRVAsVUFBVTs7WUFFNUIsaUJBQWlCOzZCQUNBLFVBQVU7OzttQkFHcEIsTUFBTTs7Ozs7Ozs7Ozs7S0FXcEIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHt1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q2hhbm5lbHN9IGZyb20gJy4vcGFja2luZ191dGlsJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIEFyZ01pbk1heFBhY2tlZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgcGFja2VkSW5wdXRzID0gdHJ1ZTtcbiAgcGFja2VkT3V0cHV0ID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHNoYXBlOiBudW1iZXJbXSwgd2luZG93U2l6ZTogbnVtYmVyLCBvcDogJ21heCd8J21pbicsXG4gICAgICBmaXJzdFBhc3M6IGJvb2xlYW4pIHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgc2hhcGUubGVuZ3RoID4gMixcbiAgICAgICAgKCkgPT4gYFBhY2tlZCBhcmcke1xuICAgICAgICAgICAgb3AuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICAgICAgb3Auc2xpY2UoMSl9IHN1cHBvcnRzIG9ubHkgaW5wdXRzIHdpdGggcmFuayBhYm92ZSAyLmApO1xuICAgIGNvbnN0IGluU2l6ZSA9IHNoYXBlW3NoYXBlLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IG91dFNpemUgPSBNYXRoLmNlaWwoaW5TaXplIC8gd2luZG93U2l6ZSk7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IHNoYXBlLnNsaWNlKDAsIC0xKTtcbiAgICBpZiAob3V0U2l6ZSA+IDEpIHtcbiAgICAgIHRoaXMub3V0cHV0U2hhcGUucHVzaChvdXRTaXplKTtcbiAgICB9XG4gICAgaWYgKCFmaXJzdFBhc3MpIHtcbiAgICAgIHRoaXMudmFyaWFibGVOYW1lcy5wdXNoKCdiZXN0SW5kaWNlc0EnKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0U2hhcGUgPSB0aGlzLm91dHB1dFNoYXBlO1xuICAgIGNvbnN0IHJhbmsgPSBvdXRTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgZHR5cGUgPSBnZXRDb29yZHNEYXRhVHlwZShyYW5rKTtcbiAgICBjb25zdCBjb29yZHMgPSBnZXRDaGFubmVscygnY29vcmRzJywgcmFuayk7XG5cbiAgICBsZXQgc291cmNlTG9jU2V0dXA7XG4gICAgbGV0IHNvdXJjZVJhbms7XG4gICAgaWYgKG91dFNpemUgPT09IDEpIHtcbiAgICAgIHNvdXJjZVJhbmsgPSByYW5rICsgMTtcbiAgICAgIGNvbnN0IHNvdXJjZUxvY0RUeXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUoc291cmNlUmFuayk7XG4gICAgICBzb3VyY2VMb2NTZXR1cCA9IGBcbiAgICAgICAgJHtzb3VyY2VMb2NEVHlwZX0gc291cmNlTG9jUiA9ICR7c291cmNlTG9jRFR5cGV9KCR7Y29vcmRzLmpvaW4oKX0sIDApO1xuICAgICAgICArKyR7Y29vcmRzW3JhbmsgLSAxXX07XG4gICAgICAgICR7c291cmNlTG9jRFR5cGV9IHNvdXJjZUxvY0cgPSAke3NvdXJjZUxvY0RUeXBlfSgke2Nvb3Jkcy5qb2luKCl9LCAwKTtcbiAgICAgICAgKyske2Nvb3Jkc1tyYW5rIC0gMl19O1xuICAgICAgICAke3NvdXJjZUxvY0RUeXBlfSBzb3VyY2VMb2NBID0gJHtzb3VyY2VMb2NEVHlwZX0oJHtjb29yZHMuam9pbigpfSwgMCk7XG4gICAgICAgIC0tJHtjb29yZHNbcmFuayAtIDFdfTtcbiAgICAgICAgJHtzb3VyY2VMb2NEVHlwZX0gc291cmNlTG9jQiA9ICR7c291cmNlTG9jRFR5cGV9KCR7Y29vcmRzLmpvaW4oKX0sIDApO1xuICAgICAgICAtLSR7Y29vcmRzW3JhbmsgLSAyXX07YDtcbiAgICB9IGVsc2Uge1xuICAgICAgc291cmNlUmFuayA9IHJhbms7XG4gICAgICBzb3VyY2VMb2NTZXR1cCA9IGBcbiAgICAgICAgJHtkdHlwZX0gc291cmNlTG9jUiA9IGNvb3JkcztcbiAgICAgICAgKyske2Nvb3Jkc1tyYW5rIC0gMV19O1xuICAgICAgICAke2R0eXBlfSBzb3VyY2VMb2NHID0gY29vcmRzO1xuICAgICAgICArKyR7Y29vcmRzW3JhbmsgLSAyXX07XG4gICAgICAgICR7ZHR5cGV9IHNvdXJjZUxvY0EgPSBjb29yZHM7XG4gICAgICAgIC0tJHtjb29yZHNbcmFuayAtIDFdfTtcbiAgICAgICAgJHtkdHlwZX0gc291cmNlTG9jQiA9IGNvb3JkcztcbiAgICAgICAgLS0ke2Nvb3Jkc1tyYW5rIC0gMl19O2A7XG4gICAgfVxuICAgIGNvbnN0IGNoYW5uZWxzID0gWyd4JywgJ3knLCAneicsICd3JywgJ3UnLCAndiddLnNsaWNlKDAsIHNvdXJjZVJhbmspO1xuICAgIGNvbnN0IGluQ2hhbm5lbCA9ICcuJyArIGNoYW5uZWxzW3NvdXJjZVJhbmsgLSAxXTsgIC8vIGUuZy4gXCIuYlwiIGZvciByYW5rIDMuXG4gICAgY29uc3QgaW50Q2hhbm5lbHMgPSBjaGFubmVscy5tYXAoeCA9PiAnaW50ICcgKyB4KTtcbiAgICBjb25zdCBzcmNSQ29vcmRzID1cbiAgICAgICAgZ2V0Q2hhbm5lbHMoJ3NvdXJjZUxvY1InLCBzb3VyY2VSYW5rIC0gMSkuY29uY2F0KCdpbklkeC5yJyk7XG4gICAgY29uc3Qgc3JjR0Nvb3JkcyA9XG4gICAgICAgIGdldENoYW5uZWxzKCdzb3VyY2VMb2NHJywgc291cmNlUmFuayAtIDEpLmNvbmNhdCgnaW5JZHguZycpO1xuICAgIGNvbnN0IHNyY0JDb29yZHMgPVxuICAgICAgICBnZXRDaGFubmVscygnc291cmNlTG9jQicsIHNvdXJjZVJhbmsgLSAxKS5jb25jYXQoJ2luSWR4LmInKTtcbiAgICBjb25zdCBzcmNBQ29vcmRzID1cbiAgICAgICAgZ2V0Q2hhbm5lbHMoJ3NvdXJjZUxvY0EnLCBzb3VyY2VSYW5rIC0gMSkuY29uY2F0KCdpbklkeC5hJyk7XG5cbiAgICBjb25zdCBjb21wT3AgPSAob3AgPT09ICdtYXgnKSA/ICdncmVhdGVyVGhhbicgOiAnbGVzc1RoYW4nO1xuICAgIGNvbnN0IGZldGNoQ2FuZGlkYXRlSWR4ID0gZmlyc3RQYXNzID8gJycgOiBgXG4gICAgICAgICAgaW5JZHggPSByb3VuZCh2ZWM0KGdldEJlc3RJbmRpY2VzQUNoYW5uZWwoJHtzcmNSQ29vcmRzLmpvaW4oKX0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCZXN0SW5kaWNlc0FDaGFubmVsKCR7c3JjR0Nvb3Jkcy5qb2luKCl9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QmVzdEluZGljZXNBQ2hhbm5lbCgke3NyY0JDb29yZHMuam9pbigpfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEJlc3RJbmRpY2VzQUNoYW5uZWwoJHtzcmNBQ29vcmRzLmpvaW4oKX0pKSk7YDtcblxuICAgIGNvbnN0IGZldGNoVmFsdWUgPSBgdmVjNChcbiAgICAgICAgICAgIGdldEFDaGFubmVsKCR7c3JjUkNvb3Jkcy5qb2luKCl9KSxcbiAgICAgICAgICAgIGhhc05leHRDb2wgPyBnZXRBQ2hhbm5lbCgke3NyY0dDb29yZHMuam9pbigpfSkgOiAwLixcbiAgICAgICAgICAgIGhhc05leHRSb3cgPyBnZXRBQ2hhbm5lbCgke3NyY0JDb29yZHMuam9pbigpfSkgOiAwLixcbiAgICAgICAgICAgIGhhc05leHRSb3cgJiYgaGFzTmV4dENvbCA/IGdldEFDaGFubmVsKCR7c3JjQUNvb3Jkcy5qb2luKCl9KSA6IDAuKWA7XG5cbiAgICBjb25zdCBnZXRCZXN0SW5kaWNlc0FDaGFubmVsU25pcHBldCA9IGZpcnN0UGFzcyA/ICcnIDogYFxuICAgICAgZmxvYXQgZ2V0QmVzdEluZGljZXNBQ2hhbm5lbCgke2ludENoYW5uZWxzLmpvaW4oKX0pIHtcbiAgICAgICAgcmV0dXJuIGdldENoYW5uZWwoZ2V0QmVzdEluZGljZXNBKCR7Y2hhbm5lbHMuam9pbigpfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMyKCR7Y2hhbm5lbHMuc2xpY2UoLTIpLmpvaW4oKX0pKTtcbiAgICAgIH1gO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGZsb2F0IGdldEFDaGFubmVsKCR7aW50Q2hhbm5lbHMuam9pbigpfSkge1xuICAgICAgICByZXR1cm4gZ2V0Q2hhbm5lbChnZXRBKCR7Y2hhbm5lbHMuam9pbigpfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMigke2NoYW5uZWxzLnNsaWNlKC0yKS5qb2luKCl9KSk7XG4gICAgICB9XG4gICAgICAke2dldEJlc3RJbmRpY2VzQUNoYW5uZWxTbmlwcGV0fVxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke2R0eXBlfSBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgYm9vbCBoYXNOZXh0Q29sID0gJHtjb29yZHNbcmFuayAtIDFdfSA8ICR7b3V0U2hhcGVbcmFuayAtIDFdIC0gMX07XG4gICAgICAgIGJvb2wgaGFzTmV4dFJvdyA9ICR7Y29vcmRzW3JhbmsgLSAyXX0gPCAke291dFNoYXBlW3JhbmsgLSAyXSAtIDF9O1xuICAgICAgICAke3NvdXJjZUxvY1NldHVwfVxuICAgICAgICBpdmVjNCBzcmNJZHggPSBpdmVjNChzb3VyY2VMb2NSJHtpbkNoYW5uZWx9LCBzb3VyY2VMb2NHJHtpbkNoYW5uZWx9LFxuICAgICAgICAgIHNvdXJjZUxvY0Ike2luQ2hhbm5lbH0sIHNvdXJjZUxvY0Eke2luQ2hhbm5lbH0pICogJHt3aW5kb3dTaXplfTtcbiAgICAgICAgaXZlYzQgaW5JZHggPSBzcmNJZHg7XG4gICAgICAgIHZlYzQgYmVzdEluZGV4ID0gdmVjNChpbklkeCk7XG4gICAgICAgIHZlYzQgYmVzdFZhbHVlID0gJHtmZXRjaFZhbHVlfTtcblxuICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8ICR7d2luZG93U2l6ZX07IGkrKykge1xuICAgICAgICAgIGluSWR4ID0gc3JjSWR4O1xuICAgICAgICAgICR7ZmV0Y2hDYW5kaWRhdGVJZHh9XG4gICAgICAgICAgdmVjNCBjYW5kaWRhdGUgPSAke2ZldGNoVmFsdWV9O1xuICAgICAgICAgIGJ2ZWM0IG5hbiA9IGlzbmFuKGNhbmRpZGF0ZSk7XG4gICAgICAgICAgYnZlYzQgcmVwbGFjZSA9IGJ2ZWM0KFxuICAgICAgICAgICAgdmVjNCgke2NvbXBPcH0oY2FuZGlkYXRlLCBiZXN0VmFsdWUpKSAqICh2ZWM0KDEuMCkgLSB2ZWM0KG5hbikpKTtcblxuICAgICAgICAgIGJlc3RWYWx1ZSA9IHZlYzQocmVwbGFjZS54ICA/IGNhbmRpZGF0ZS54IDogYmVzdFZhbHVlLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlLnkgID8gY2FuZGlkYXRlLnkgOiBiZXN0VmFsdWUueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UueiAgPyBjYW5kaWRhdGUueiA6IGJlc3RWYWx1ZS56LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZS53ICA/IGNhbmRpZGF0ZS53IDogYmVzdFZhbHVlLncpO1xuICAgICAgICAgIGJlc3RJbmRleCA9IG1peChiZXN0SW5kZXgsIHZlYzQoaW5JZHgpLCB2ZWM0KHJlcGxhY2UpKTtcbiAgICAgICAgICBzcmNJZHgrKztcbiAgICAgICAgfVxuICAgICAgICBzZXRPdXRwdXQoYmVzdEluZGV4KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, env, util } from '@tensorflow/tfjs-core';\nimport { ArgMinMaxProgram } from '../argminmax_gpu';\nimport { ArgMinMaxPackedProgram } from '../argminmax_packed_gpu';\nimport { reshape } from '../kernels/Reshape';\nfunction argReduce(backend, x, reduceType, bestIndicesA = null) {\n let batchSize = x.shape[0];\n let inSize = x.shape[1];\n if (bestIndicesA != null) {\n batchSize = bestIndicesA.shape[0];\n inSize = bestIndicesA.shape[1];\n }\n const windowSize = backend_util.computeOptimalWindowSize(inSize);\n const reduceInfo = { windowSize, inSize, batchSize, outSize: Math.ceil(inSize / windowSize) };\n const program = new ArgMinMaxProgram(reduceInfo, reduceType, bestIndicesA == null);\n const inputs = [x];\n if (bestIndicesA != null) {\n inputs.push(bestIndicesA);\n }\n const output = backend.runWebGLProgram(program, inputs, 'int32');\n // No need to run another GPGPU program.\n if (output.shape[1] === 1) {\n return output;\n }\n const result = argReduce(backend, x, reduceType, output);\n backend.disposeIntermediateTensorInfo(output);\n return result;\n}\nfunction argReducePacked(backend, x, reduceType, bestIndicesA = null) {\n const inShape = bestIndicesA != null ? bestIndicesA.shape : x.shape;\n const inSize = inShape[inShape.length - 1];\n const windowSize = backend_util.computeOptimalWindowSize(inSize);\n const program = new ArgMinMaxPackedProgram(inShape, windowSize, reduceType, bestIndicesA == null);\n const inputs = bestIndicesA == null ? [x] : [x, bestIndicesA];\n const output = backend.runWebGLProgram(program, inputs, 'int32');\n if (output.shape.length === x.shape.length) {\n const result = argReducePacked(backend, x, reduceType, output);\n backend.disposeIntermediateTensorInfo(output);\n return result;\n }\n return output;\n}\nexport function argMinMaxReduce(backend, x, axis, reduceType) {\n const axes = [axis];\n backend_util.assertAxesAreInnerMostDims('arg' + reduceType.charAt(0).toUpperCase() + reduceType.slice(1), axes, x.shape.length);\n if (!env().getBool('WEBGL_PACK_REDUCE') || x.shape.length <= 2) {\n const intermediateTensorInfos = [];\n // Eagerly unpack x input since it is passed in to all the shaders which\n // require unpacked inputs.\n const xtexData = backend.texData.get(x.dataId);\n const xIsPacked = xtexData !== null && xtexData.isPacked;\n let xUnPacked = x;\n if (xIsPacked) {\n xUnPacked = backend.unpackTensor(x);\n intermediateTensorInfos.push(xUnPacked);\n }\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(xUnPacked.shape, axes);\n const inSize = util.sizeFromShape(reduceShape);\n const a2D = reshape({ inputs: { x: xUnPacked }, backend, attrs: { shape: [-1, inSize] } });\n intermediateTensorInfos.push(a2D);\n const reduced = argReduce(backend, a2D, reduceType);\n intermediateTensorInfos.push(reduced);\n const reshaped = reshape({ inputs: { x: reduced }, backend, attrs: { shape: outShape } });\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return reshaped;\n }\n return argReducePacked(backend, x, reduceType);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJnX21pbl9tYXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbF91dGlscy9hcmdfbWluX21heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBYyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUUvRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFM0MsU0FBUyxTQUFTLENBQ2QsT0FBeUIsRUFBRSxDQUFhLEVBQUUsVUFBdUIsRUFDakUsZUFBMkIsSUFBSTtJQUNqQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO1FBQ3hCLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sVUFBVSxHQUNaLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFDLENBQUM7SUFDN0UsTUFBTSxPQUFPLEdBQ1QsSUFBSSxnQkFBZ0Is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LENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsT0FBTyxRQUFRLENBQUM7S0FDakI7SUFDRCxPQUFPLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBlbnYsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QXJnTWluTWF4UHJvZ3JhbX0gZnJvbSAnLi4vYXJnbWlubWF4X2dwdSc7XG5pbXBvcnQge0FyZ01pbk1heFBhY2tlZFByb2dyYW19IGZyb20gJy4uL2FyZ21pbm1heF9wYWNrZWRfZ3B1JztcbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4uL2tlcm5lbHMvUmVzaGFwZSc7XG5cbmZ1bmN0aW9uIGFyZ1JlZHVjZShcbiAgICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCB4OiBUZW5zb3JJbmZvLCByZWR1Y2VUeXBlOiAnbWF4J3wnbWluJyxcbiAgICBiZXN0SW5kaWNlc0E6IFRlbnNvckluZm8gPSBudWxsKTogVGVuc29ySW5mbyB7XG4gIGxldCBiYXRjaFNpemUgPSB4LnNoYXBlWzBdO1xuICBsZXQgaW5TaXplID0geC5zaGFwZVsxXTtcbiAgaWYgKGJlc3RJbmRpY2VzQSAhPSBudWxsKSB7XG4gICAgYmF0Y2hTaXplID0gYmVzdEluZGljZXNBLnNoYXBlWzBdO1xuICAgIGluU2l6ZSA9IGJlc3RJbmRpY2VzQS5zaGFwZVsxXTtcbiAgfVxuICBjb25zdCB3aW5kb3dTaXplID0gYmFja2VuZF91dGlsLmNvbXB1dGVPcHRpbWFsV2luZG93U2l6ZShpblNpemUpO1xuICBjb25zdCByZWR1Y2VJbmZvID1cbiAgICAgIHt3aW5kb3dTaXplLCBpblNpemUsIGJhdGNoU2l6ZSwgb3V0U2l6ZTogTWF0aC5jZWlsKGluU2l6ZSAvIHdpbmRvd1NpemUpfTtcbiAgY29uc3QgcHJvZ3JhbSA9XG4gICAgICBuZXcgQXJnTWluTWF4UHJvZ3JhbShyZWR1Y2VJbmZvLCByZWR1Y2VUeXBlLCBiZXN0SW5kaWNlc0EgPT0gbnVsbCk7XG4gIGNvbnN0IGlucHV0cyA9IFt4XTtcbiAgaWYgKGJlc3RJbmRpY2VzQSAhPSBudWxsKSB7XG4gICAgaW5wdXRzLnB1c2goYmVzdEluZGljZXNBKTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBpbnB1dHMsICdpbnQzMicpO1xuICAvLyBObyBuZWVkIHRvIHJ1biBhbm90aGVyIEdQR1BVIHByb2dyYW0uXG4gIGlmIChvdXRwdXQuc2hhcGVbMV0gPT09IDEpIHtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGFyZ1JlZHVjZShiYWNrZW5kLCB4LCByZWR1Y2VUeXBlLCBvdXRwdXQpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKG91dHB1dCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFyZ1JlZHVjZVBhY2tlZChcbiAgICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCB4OiBUZW5zb3JJbmZvLCByZWR1Y2VUeXBlOiAnbWF4J3wnbWluJyxcbiAgICBiZXN0SW5kaWNlc0E6IFRlbnNvckluZm8gPSBudWxsKTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IGluU2hhcGUgPSBiZXN0SW5kaWNlc0EgIT0gbnVsbCA/IGJlc3RJbmRpY2VzQS5zaGFwZSA6IHguc2hhcGU7XG4gIGNvbnN0IGluU2l6ZSA9IGluU2hhcGVbaW5TaGFwZS5sZW5ndGggLSAxXTtcbiAgY29uc3Qgd2luZG93U2l6ZSA9IGJhY2tlbmRfdXRpbC5jb21wdXRlT3B0aW1hbFdpbmRvd1NpemUoaW5TaXplKTtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBBcmdNaW5NYXhQYWNrZWRQcm9ncmFtKFxuICAgICAgaW5TaGFwZSwgd2luZG93U2l6ZSwgcmVkdWNlVHlwZSwgYmVzdEluZGljZXNBID09IG51bGwpO1xuICBjb25zdCBpbnB1dHMgPSBiZXN0SW5kaWNlc0EgPT0gbnVsbCA/IFt4XSA6IFt4LCBiZXN0SW5kaWNlc0FdO1xuICBjb25zdCBvdXRwdXQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBpbnB1dHMsICdpbnQzMicpO1xuICBpZiAob3V0cHV0LnNoYXBlLmxlbmd0aCA9PT0geC5zaGFwZS5sZW5ndGgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhcmdSZWR1Y2VQYWNrZWQoYmFja2VuZCwgeCwgcmVkdWNlVHlwZSwgb3V0cHV0KTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKG91dHB1dCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJnTWluTWF4UmVkdWNlKFxuICAgIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIHg6IFRlbnNvckluZm8sIGF4aXM6IG51bWJlcixcbiAgICByZWR1Y2VUeXBlOiAnbWluJ3wnbWF4Jyk6IFRlbnNvckluZm8ge1xuICBjb25zdCBheGVzID0gW2F4aXNdO1xuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoXG4gICAgICAnYXJnJyArIHJlZHVjZVR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZWR1Y2VUeXBlLnNsaWNlKDEpLCBheGVzLFxuICAgICAgeC5zaGFwZS5sZW5ndGgpO1xuICBpZiAoIWVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfUkVEVUNFJykgfHwgeC5zaGFwZS5sZW5ndGggPD0gMikge1xuICAgIGNvbnN0IGludGVybWVkaWF0ZVRlbnNvckluZm9zID0gW107XG4gICAgLy8gRWFnZXJseSB1bnBhY2sgeCBpbnB1dCBzaW5jZSBpdCBpcyBwYXNzZWQgaW4gdG8gYWxsIHRoZSBzaGFkZXJzIHdoaWNoXG4gICAgLy8gcmVxdWlyZSB1bnBhY2tlZCBpbnB1dHMuXG4gICAgY29uc3QgeHRleERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgICBjb25zdCB4SXNQYWNrZWQgPSB4dGV4RGF0YSAhPT0gbnVsbCAmJiB4dGV4RGF0YS5pc1BhY2tlZDtcbiAgICBsZXQgeFVuUGFja2VkID0geDtcbiAgICBpZiAoeElzUGFja2VkKSB7XG4gICAgICB4VW5QYWNrZWQgPSBiYWNrZW5kLnVucGFja1RlbnNvcih4KTtcbiAgICAgIGludGVybWVkaWF0ZVRlbnNvckluZm9zLnB1c2goeFVuUGFja2VkKTtcbiAgICB9XG5cbiAgICBjb25zdCBbb3V0U2hhcGUsIHJlZHVjZVNoYXBlXSA9XG4gICAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKHhVblBhY2tlZC5zaGFwZSwgYXhlcyk7XG4gICAgY29uc3QgaW5TaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcbiAgICBjb25zdCBhMkQgPSByZXNoYXBlKFxuICAgICAgICB7aW5wdXRzOiB7eDogeFVuUGFja2VkfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogWy0xLCBpblNpemVdfX0pO1xuICAgIGludGVybWVkaWF0ZVRlbnNvckluZm9zLnB1c2goYTJEKTtcblxuICAgIGNvbnN0IHJlZHVjZWQgPSBhcmdSZWR1Y2UoYmFja2VuZCwgYTJELCByZWR1Y2VUeXBlKTtcbiAgICBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcy5wdXNoKHJlZHVjZWQpO1xuICAgIGNvbnN0IHJlc2hhcGVkID1cbiAgICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVkdWNlZH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IG91dFNoYXBlfX0pO1xuXG4gICAgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MuZm9yRWFjaChcbiAgICAgICAgdCA9PiBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHQpKTtcbiAgICByZXR1cm4gcmVzaGFwZWQ7XG4gIH1cbiAgcmV0dXJuIGFyZ1JlZHVjZVBhY2tlZChiYWNrZW5kLCB4LCByZWR1Y2VUeXBlKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ArgMax, backend_util, util } from '@tensorflow/tfjs-core';\nimport { argMinMaxReduce } from '../kernel_utils/arg_min_max';\nimport { transpose } from './Transpose';\nexport function argMax(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis } = attrs;\n let axes = util.parseAxisParam(axis, x.shape);\n const permutedAxes = backend_util.getAxesPermutation(axes, x.shape.length);\n let $x = x;\n const intermediateTensorInfos = [];\n if (permutedAxes != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n intermediateTensorInfos.push($x);\n axes = backend_util.getInnerMostAxes(axes.length, $x.shape.length);\n }\n backend_util.assertAxesAreInnerMostDims('argMax', [axes[0]], $x.shape.length);\n const out = argMinMaxReduce(backend, $x, axes[0], 'max');\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return out;\n}\nexport const argMaxConfig = {\n kernelName: ArgMax,\n backendName: 'webgl',\n kernelFunc: argMax\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJnTWF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0FyZ01heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUE2QixZQUFZLEVBQXdDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xJLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQ3lFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUNuQyxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7UUFDeEIsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3BFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNwRTtJQUVELFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlFLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV6RCx1QkFBdUIsQ0FBQyxPQUFPLENBQzNCLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBcmdNYXgsIEFyZ01heEF0dHJzLCBBcmdNYXhJbnB1dHMsIGJhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHthcmdNaW5NYXhSZWR1Y2V9IGZyb20gJy4uL2tlcm5lbF91dGlscy9hcmdfbWluX21heCc7XG5cbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmdNYXgoXG4gICAgYXJnczpcbiAgICAgICAge2lucHV0czogQXJnTWF4SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCBhdHRyczogQXJnTWF4QXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YXhpc30gPSBhdHRycztcblxuICBsZXQgYXhlcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSk7XG4gIGNvbnN0IHBlcm11dGVkQXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRBeGVzUGVybXV0YXRpb24oYXhlcywgeC5zaGFwZS5sZW5ndGgpO1xuICBsZXQgJHggPSB4O1xuICBjb25zdCBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcyA9IFtdO1xuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICAkeCA9IHRyYW5zcG9zZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogcGVybXV0ZWRBeGVzfX0pO1xuICAgIGludGVybWVkaWF0ZVRlbnNvckluZm9zLnB1c2goJHgpO1xuICAgIGF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0SW5uZXJNb3N0QXhlcyhheGVzLmxlbmd0aCwgJHguc2hhcGUubGVuZ3RoKTtcbiAgfVxuXG4gIGJhY2tlbmRfdXRpbC5hc3NlcnRBeGVzQXJlSW5uZXJNb3N0RGltcygnYXJnTWF4JywgW2F4ZXNbMF1dLCAkeC5zaGFwZS5sZW5ndGgpO1xuICBjb25zdCBvdXQgPSBhcmdNaW5NYXhSZWR1Y2UoYmFja2VuZCwgJHgsIGF4ZXNbMF0sICdtYXgnKTtcblxuICBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcy5mb3JFYWNoKFxuICAgICAgdCA9PiBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHQpKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGFyZ01heENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBcmdNYXgsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhcmdNYXggYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ArgMin, backend_util, util } from '@tensorflow/tfjs-core';\nimport { argMinMaxReduce } from '../kernel_utils/arg_min_max';\nimport { transpose } from './Transpose';\nexport function argMin(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis } = attrs;\n let axes = util.parseAxisParam(axis, x.shape);\n const permutedAxes = backend_util.getAxesPermutation(axes, x.shape.length);\n let $x = x;\n const intermediateTensorInfos = [];\n if (permutedAxes != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n intermediateTensorInfos.push($x);\n axes = backend_util.getInnerMostAxes(axes.length, $x.shape.length);\n }\n backend_util.assertAxesAreInnerMostDims('argMin', [axes[0]], $x.shape.length);\n const out = argMinMaxReduce(backend, $x, axes[0], 'min');\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return out;\n}\nexport const argMinConfig = {\n kernelName: ArgMin,\n backendName: 'webgl',\n kernelFunc: argMin\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJnTWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0FyZ01pbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUE2QixZQUFZLEVBQXdDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xJLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQ3lFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUNuQyxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7UUFDeEIsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3BFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNwRTtJQUVELFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlFLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV6RCx1QkFBdUIsQ0FBQyxPQUFPLENBQzNCLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBcmdNaW4sIEFyZ01pbkF0dHJzLCBBcmdNaW5JbnB1dHMsIGJhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHthcmdNaW5NYXhSZWR1Y2V9IGZyb20gJy4uL2tlcm5lbF91dGlscy9hcmdfbWluX21heCc7XG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXJnTWluKFxuICAgIGFyZ3M6XG4gICAgICAgIHtpbnB1dHM6IEFyZ01pbklucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCwgYXR0cnM6IEFyZ01pbkF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2F4aXN9ID0gYXR0cnM7XG5cbiAgbGV0IGF4ZXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIHguc2hhcGUpO1xuICBjb25zdCBwZXJtdXRlZEF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIHguc2hhcGUubGVuZ3RoKTtcbiAgbGV0ICR4ID0geDtcbiAgY29uc3QgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MgPSBbXTtcbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgJHggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGVkQXhlc319KTtcbiAgICBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcy5wdXNoKCR4KTtcbiAgICBheGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsICR4LnNoYXBlLmxlbmd0aCk7XG4gIH1cblxuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ2FyZ01pbicsIFtheGVzWzBdXSwgJHguc2hhcGUubGVuZ3RoKTtcblxuICBjb25zdCBvdXQgPSBhcmdNaW5NYXhSZWR1Y2UoYmFja2VuZCwgJHgsIGF4ZXNbMF0sICdtaW4nKTtcblxuICBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcy5mb3JFYWNoKFxuICAgICAgdCA9PiBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHQpKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGFyZ01pbkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBcmdNaW4sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhcmdNaW4gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Asin } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { CHECK_NAN_SNIPPET } from '../unaryop_gpu';\nconst ASIN = CHECK_NAN_SNIPPET + `\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`;\nexport const asin = unaryKernelFunc({ opSnippet: ASIN });\nexport const asinConfig = {\n kernelName: Asin,\n backendName: 'webgl',\n kernelFunc: asin,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Bc2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEdBQUc7Ozs7O0NBS2hDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FzaW4sIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVH0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuXG5jb25zdCBBU0lOID0gQ0hFQ0tfTkFOX1NOSVBQRVQgKyBgXG4gIGlmIChhYnMoeCkgPiAxLikge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgcmV0dXJuIGFzaW4oeCk7XG5gO1xuXG5leHBvcnQgY29uc3QgYXNpbiA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBBU0lOfSk7XG5cbmV4cG9ydCBjb25zdCBhc2luQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFzaW4sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhc2luLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Asinh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { CHECK_NAN_SNIPPET } from '../unaryop_gpu';\nconst ASINH = CHECK_NAN_SNIPPET + `return log(x + sqrt(x * x + 1.0));`;\nexport const asinh = unaryKernelFunc({ opSnippet: ASINH });\nexport const asinhConfig = {\n kernelName: Asinh,\n backendName: 'webgl',\n kernelFunc: asinh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNpbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQXNpbmgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxvQ0FBb0MsQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsS0FBSztDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FzaW5oLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7Q0hFQ0tfTkFOX1NOSVBQRVR9IGZyb20gJy4uL3VuYXJ5b3BfZ3B1JztcblxuY29uc3QgQVNJTkggPSBDSEVDS19OQU5fU05JUFBFVCArIGByZXR1cm4gbG9nKHggKyBzcXJ0KHggKiB4ICsgMS4wKSk7YDtcblxuZXhwb3J0IGNvbnN0IGFzaW5oID0gdW5hcnlLZXJuZWxGdW5jKHtvcFNuaXBwZXQ6IEFTSU5IfSk7XG5cbmV4cG9ydCBjb25zdCBhc2luaENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBc2luaCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGFzaW5oLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atan } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { CHECK_NAN_SNIPPET } from '../unaryop_gpu';\nconst ATAN = CHECK_NAN_SNIPPET + `\n return atan(x);\n`;\nexport const atan = unaryKernelFunc({ opSnippet: ATAN });\nexport const atanConfig = {\n kernelName: Atan,\n backendName: 'webgl',\n kernelFunc: atan,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9BdGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEdBQUc7O0NBRWhDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0F0YW4sIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVH0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuXG5jb25zdCBBVEFOID0gQ0hFQ0tfTkFOX1NOSVBQRVQgKyBgXG4gIHJldHVybiBhdGFuKHgpO1xuYDtcblxuZXhwb3J0IGNvbnN0IGF0YW4gPSB1bmFyeUtlcm5lbEZ1bmMoe29wU25pcHBldDogQVRBTn0pO1xuXG5leHBvcnQgY29uc3QgYXRhbkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBdGFuLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogYXRhbixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atan2 } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET } from '../binaryop_gpu';\nimport { CHECK_NAN_SNIPPET_PACKED } from '../binaryop_packed_gpu';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst ATAN2 = CHECK_NAN_SNIPPET + `\n return atan(a, b);\n`;\nconst ATAN2_PACKED = `\n vec4 result = atan(a, b);\n bvec4 isNaNA = isnan(a);\n bvec4 isNaNB = isnan(b);\n bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n ` +\n CHECK_NAN_SNIPPET_PACKED + `\n return result;\n`;\nexport const atan2 = binaryKernelFunc({ opSnippet: ATAN2, packedOpSnippet: ATAN2_PACKED });\nexport const atan2Config = {\n kernelName: Atan2,\n backendName: 'webgl',\n kernelFunc: atan2,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQXRhbjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixHQUFHOztDQUVqQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUc7Ozs7O0dBS2xCO0lBQ0Msd0JBQXdCLEdBQUc7O0NBRTlCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQ2QsZ0JBQWdCLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBdGFuMn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7S2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVH0gZnJvbSAnLi4vYmluYXJ5b3BfZ3B1JztcbmltcG9ydCB7Q0hFQ0tfTkFOX1NOSVBQRVRfUEFDS0VEfSBmcm9tICcuLi9iaW5hcnlvcF9wYWNrZWRfZ3B1JztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4va2VybmVsX3V0aWxzL2tlcm5lbF9mdW5jc191dGlscyc7XG5cbmNvbnN0IEFUQU4yID0gQ0hFQ0tfTkFOX1NOSVBQRVQgKyBgXG4gIHJldHVybiBhdGFuKGEsIGIpO1xuYDtcblxuY29uc3QgQVRBTjJfUEFDS0VEID0gYFxuICB2ZWM0IHJlc3VsdCA9IGF0YW4oYSwgYik7XG4gIGJ2ZWM0IGlzTmFOQSA9IGlzbmFuKGEpO1xuICBidmVjNCBpc05hTkIgPSBpc25hbihiKTtcbiAgYnZlYzQgaXNOYU4gPSBidmVjNChpc05hTkEueCB8fCBpc05hTkIueCwgaXNOYU5BLnkgfHwgaXNOYU5CLnksIGlzTmFOQS56IHx8IGlzTmFOQi56LCBpc05hTkEudyB8fCBpc05hTkIudyk7XG4gIGAgK1xuICAgIENIRUNLX05BTl9TTklQUEVUX1BBQ0tFRCArIGBcbiAgcmV0dXJuIHJlc3VsdDtcbmA7XG5cbmV4cG9ydCBjb25zdCBhdGFuMiA9XG4gICAgYmluYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBBVEFOMiwgcGFja2VkT3BTbmlwcGV0OiBBVEFOMl9QQUNLRUR9KTtcblxuZXhwb3J0IGNvbnN0IGF0YW4yQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEF0YW4yLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogYXRhbjIsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atanh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { CHECK_NAN_SNIPPET } from '../unaryop_gpu';\nconst ATANH = CHECK_NAN_SNIPPET + `\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`;\nexport const atanh = unaryKernelFunc({ opSnippet: ATANH });\nexport const atanhConfig = {\n kernelName: Atanh,\n backendName: 'webgl',\n kernelFunc: atanh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQXRhbmgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsR0FBRzs7NENBRVUsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsS0FBSztDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0F0YW5oLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7Q0hFQ0tfTkFOX1NOSVBQRVR9IGZyb20gJy4uL3VuYXJ5b3BfZ3B1JztcblxuY29uc3QgQVRBTkggPSBDSEVDS19OQU5fU05JUFBFVCArIGBcbiAgaWYgKCh4IDwgLTEuMCkgfHwgKHggPiAxLjApKSByZXR1cm4gTkFOO1xucmV0dXJuIChsb2coMS4wICsgeCkgLSBsb2coMS4wIC0geCkpIC8gMi4wO2A7XG5cbmV4cG9ydCBjb25zdCBhdGFuaCA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBBVEFOSH0pO1xuXG5leHBvcnQgY29uc3QgYXRhbmhDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQXRhbmgsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhdGFuaCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class Pool2DProgram {\n constructor(convInfo, poolType, computePositions, flattenPositions = false, includeBatchInIndex = false) {\n this.variableNames = ['x'];\n if (poolType === 'avg' && computePositions) {\n throw new Error('Cannot compute positions for average pool.');\n }\n const filterWidth = convInfo.filterWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n this.outputShape = convInfo.outShape;\n const isAvgPool = poolType === 'avg';\n const batchFlattenPositionStr = `((batch * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + d`;\n const flattenPositionStr = `(xR * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + d`;\n let initializationValue = '0.0';\n if (!isAvgPool) {\n // WebGL on Firefox Linux can't compile 1/0 so we do 1/eps.\n initializationValue = '-1.0 / 1e-20';\n }\n if (computePositions) {\n const compareOp = '>=';\n 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} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${flattenPositions ? (includeBatchInIndex ? batchFlattenPositionStr :\n flattenPositionStr) :\n `wR * ${effectiveFilterWidth} + wC`};\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;\n return;\n }\n const compareOp = 'max';\n let returnValue = `${poolType}(${poolType}(${poolType}(` +\n 'minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])';\n if (poolType === 'avg') {\n returnValue = `avgValue / max(count, 1.0)`;\n }\n const filterWidthNearestVec4 = Math.floor(filterWidth / 4) * 4;\n const filterWidthVec4Remainder = filterWidth % 4;\n const updateSnippet = `\n if (${isAvgPool}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${compareOp}(values, minMaxValue);\n }\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 `;\n }\n}\nexport class Pool3DProgram {\n constructor(convInfo, poolType, computePositions, flattenPositions = false, includeBatchInIndex = false) {\n this.variableNames = ['x'];\n if (poolType === 'avg' && computePositions) {\n throw new Error('Cannot compute positions for average pool.');\n }\n const filterWidth = convInfo.filterWidth;\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationDepth = convInfo.dilationDepth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padFront = convInfo.padInfo.front;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n this.outputShape = convInfo.outShape;\n const isAvgPool = poolType === 'avg';\n let initializationValue = '0.0';\n if (!isAvgPool) {\n // WebGL on Firefox Linux can't compile 1/0 so we do 1/eps.\n initializationValue = '-1.0 / 1e-20';\n }\n if (computePositions) {\n const compareOp = '>=';\n 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} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${flattenPositions ?\n (includeBatchInIndex ?\n `(((batch * ${convInfo.inDepth} + xD) * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + ch` :\n `((xD * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + ch`) :\n `wD * ${effectiveFilterHeight} * ${effectiveFilterWidth} +\n wR * ${effectiveFilterWidth} + wC`};\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;\n return;\n }\n const compareOp = 'max';\n let returnValue = `${poolType}(${poolType}(${poolType}(` +\n 'minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])';\n if (poolType === 'avg') {\n // Use `max(count, 1.0)` instead of `count` in case count === 0.0.\n // If count === 0.0, `avgValue` is always 0.0 and we change `count`'s\n // value to avoid dividing zero.\n returnValue = `avgValue / max(count, 1.0)`;\n }\n const filterWidthNearestVec4 = Math.floor(filterWidth / 4) * 4;\n const filterWidthVec4Remainder = filterWidth % 4;\n const updateSnippet = `\n if (${isAvgPool}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${compareOp}(values, minMaxValue);\n }\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 }\n setOutput(${returnValue});\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3Bvb2xfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE1BQU0sT0FBTyxhQUFhO0lBS3hCLFlBQ0ksUUFBaUMsRUFBRSxRQUFxQixFQUN4RCxnQkFBeUIsRUFBRSxnQkFBZ0IsR0FBRyxLQUFLLEVBQ25ELG1CQUFtQixHQUFHLEtBQUs7UUFQL0Isa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBUXBCLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxnQkFBZ0IsRUFBRTtZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7UUFDN0QsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUM7UUFFM0QsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBRXJDLE1BQU0sU0FBUyxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUM7UUFDckMsTUFBTSx1QkFBdUIsR0FB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Q0FDM0IsUUFBUSxLQUFLLE1BQU0sS0FBSyxPQUFPOzBDQUN0QixtQkFBbUI7Ozs7Ozs4QkFNL0IsUUFBUSxDQUFDLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBbUJaLG1CQUFtQjs7OztnQ0FJckIsb0JBQW9CO29CQUNoQyxhQUFhOzs7Z0NBR0QsUUFBUSxDQUFDLE9BQU87Ozs7a0NBSWQscUJBQXFCO29CQUNuQyxjQUFjOzs7a0NBR0EsUUFBUSxDQUFDLFFBQVE7Ozs7b0NBSWYsc0JBQXNCO3lDQUNqQixhQUFhOzs7OytDQUlQLGFBQWE7bURBQ1QsYUFBYTttREFDYixhQUFhOzs7Z0JBR2hELGFBQWE7OztrQ0FHSyxzQkFBc0I7a0JBQ3RDLHdCQUF3QixLQUFLLENBQUM7Ozs7Ozs7O2dCQVFoQyxhQUFhO3lCQUNKLHdCQUF3QixLQUFLLENBQUM7OzsrQ0FHUixhQUFhOzs7OztnQkFLNUMsYUFBYTt5QkFDSix3QkFBd0IsS0FBSyxDQUFDOzs7K0NBR1IsYUFBYTttREFDVCxhQUFhOzs7O2dCQUloRCxhQUFhOzs7O29CQUlULFdBQVc7O0tBRTFCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBQb29sMkRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBjb252SW5mbzogYmFja2VuZF91dGlsLkNvbnYyREluZm8sIHBvb2xUeXBlOiAnbWF4J3wnYXZnJyxcbiAgICAgIGNvbXB1dGVQb3NpdGlvbnM6IGJvb2xlYW4sIGZsYXR0ZW5Qb3NpdGlvbnMgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVCYXRjaEluSW5kZXggPSBmYWxzZSkge1xuICAgIGlmIChwb29sVHlwZSA9PT0gJ2F2ZycgJiYgY29tcHV0ZVBvc2l0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcHV0ZSBwb3NpdGlvbnMgZm9yIGF2ZXJhZ2UgcG9vbC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmZpbHRlcldpZHRoO1xuICAgIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgICBjb25zdCBzdHJpZGVXaWR0aCA9IGNvbnZJbmZvLnN0cmlkZVdpZHRoO1xuICAgIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gICAgY29uc3QgZGlsYXRpb25XaWR0aCA9IGNvbnZJbmZvLmRpbGF0aW9uV2lkdGg7XG4gICAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0O1xuICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcldpZHRoID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGg7XG5cbiAgICBjb25zdCBwYWRUb3AgPSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgICBjb25zdCBwYWRMZWZ0ID0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5vdXRTaGFwZTtcblxuICAgIGNvbnN0IGlzQXZnUG9vbCA9IHBvb2xUeXBlID09PSAnYXZnJztcbiAgICBjb25zdCBiYXRjaEZsYXR0ZW5Qb3NpdGlvblN0ciA9IGAoKGJhdGNoICAqICR7Y29udkluZm8uaW5IZWlnaHR9ICsgeFIpICogJHtcbiAgICAgICAgY29udkluZm8uaW5XaWR0aH0gKyB4QykgKiAke2NvbnZJbmZvLmluQ2hhbm5lbHN9ICsgZGA7XG4gICAgY29uc3QgZmxhdHRlblBvc2l0aW9uU3RyID1cbiAgICAgICAgYCh4UiAqICR7Y29udkluZm8uaW5XaWR0aH0gKyB4QykgKiAke2NvbnZJbmZvLmluQ2hhbm5lbHN9ICsgZGA7XG5cbiAgICBsZXQgaW5pdGlhbGl6YXRpb25WYWx1ZSA9ICcwLjAnO1xuICAgIGlmICghaXNBdmdQb29sKSB7XG4gICAgICAvLyBXZWJHTCBvbiBGaXJlZm94IExpbnV4IGNhbid0IGNvbXBpbGUgMS8wIHNvIHdlIGRvIDEvZXBzLlxuICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZSA9ICctMS4wIC8gMWUtMjAnO1xuICAgIH1cblxuICAgIGlmIChjb21wdXRlUG9zaXRpb25zKSB7XG4gICAgICBjb25zdCBjb21wYXJlT3AgPSAnPj0nO1xuXG4gICAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICBjb25zdCBpdmVjMiBzdHJpZGVzID0gaXZlYzIoJHtzdHJpZGVIZWlnaHR9LCAke3N0cmlkZVdpZHRofSk7XG4gICAgICAgIGNvbnN0IGl2ZWMyIHBhZHMgPSBpdmVjMigke3BhZFRvcH0sICR7cGFkTGVmdH0pO1xuXG4gICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICBpdmVjNCBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHNbMF07XG4gICAgICAgICAgaW50IGQgPSBjb29yZHNbM107XG5cbiAgICAgICAgICBpdmVjMiB4UkNDb3JuZXIgPSBjb29yZHMueXogKiBzdHJpZGVzIC0gcGFkcztcbiAgICAgICAgICBpbnQgeFJDb3JuZXIgPSB4UkNDb3JuZXIueDtcbiAgICAgICAgICBpbnQgeENDb3JuZXIgPSB4UkNDb3JuZXIueTtcblxuICAgICAgICAgIC8vIG1heC9taW4geCg/LCA/LCBkKSB0byBnZXQgeSh5UiwgeUMsIGQpLlxuICAgICAgICAgIC8vID8gPSB0byBiZSBkZXRlcm1pbmVkXG4gICAgICAgICAgZmxvYXQgbWluTWF4VmFsdWUgPSAwLjA7XG4gICAgICAgICAgZmxvYXQgbWluTWF4VmFsdWVGb3VuZCA9IDAuMDtcbiAgICAgICAgICBpbnQgbWluTWF4UG9zaXRpb24gPSAwO1xuICAgICAgICAgIGZsb2F0IGF2Z1ZhbHVlID0gMC4wO1xuXG4gICAgICAgICAgZm9yIChpbnQgd1IgPSAwOyB3UiA8ICR7ZWZmZWN0aXZlRmlsdGVySGVpZ2h0fTtcbiAgICAgICAgICAgICAgd1IgKz0gJHtkaWxhdGlvbkhlaWdodH0pIHtcbiAgICAgICAgICAgIGludCB4UiA9IHhSQ29ybmVyICsgd1I7XG5cbiAgICAgICAgICAgIGlmICh4UiA8IDAgfHwgeFIgPj0gJHtjb252SW5mby5pbkhlaWdodH0pIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaW50IHdDID0gMDsgd0MgPCAke2VmZmVjdGl2ZUZpbHRlcldpZHRofTtcbiAgICAgICAgICAgICAgICB3QyArPSAke2RpbGF0aW9uV2lkdGh9KSB7XG4gICAgICAgICAgICAgIGludCB4QyA9IHhDQ29ybmVyICsgd0M7XG5cbiAgICAgICAgICAgICAgaWYgKHhDIDwgMCB8fCB4QyA+PSAke2NvbnZJbmZvLmluV2lkdGh9KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmbG9hdCB2YWx1ZSA9IGdldFgoYmF0Y2gsIHhSLCB4QywgZCk7XG5cbiAgICAgICAgICAgICAgLy8gSWYgYSBtaW4gLyBtYXggdmFsdWUgaGFzIGFscmVhZHkgYmVlbiBmb3VuZCwgdXNlIGl0LiBJZiBub3QsXG4gICAgICAgICAgICAgIC8vIHVzZSB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICAgICAgICAgICAgZmxvYXQgY3Vyck1pbk1heFZhbHVlID0gbWl4KFxuICAgICAgICAgICAgICAgICAgdmFsdWUsIG1pbk1heFZhbHVlLCBtaW5NYXhWYWx1ZUZvdW5kKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlICR7Y29tcGFyZU9wfSBjdXJyTWluTWF4VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBtaW5NYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIG1pbk1heFZhbHVlRm91bmQgPSAxLjA7XG4gICAgICAgICAgICAgICAgbWluTWF4UG9zaXRpb24gPSAke1xuICAgICAgICAgIGZsYXR0ZW5Qb3NpdGlvbnMgPyAoaW5jbHVkZUJhdGNoSW5JbmRleCA/IGJhdGNoRmxhdHRlblBvc2l0aW9uU3RyIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuUG9zaXRpb25TdHIpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHdSICogJHtlZmZlY3RpdmVGaWx0ZXJXaWR0aH0gKyB3Q2B9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldE91dHB1dChmbG9hdChtaW5NYXhQb3NpdGlvbikpO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhcmVPcCA9ICdtYXgnO1xuXG4gICAgbGV0IHJldHVyblZhbHVlID0gYCR7cG9vbFR5cGV9KCR7cG9vbFR5cGV9KCR7cG9vbFR5cGV9KGAgK1xuICAgICAgICAnbWluTWF4VmFsdWVbMF0sIG1pbk1heFZhbHVlWzFdKSwgbWluTWF4VmFsdWVbMl0pLCBtaW5NYXhWYWx1ZVszXSknO1xuICAgIGlmIChwb29sVHlwZSA9PT0gJ2F2ZycpIHtcbiAgICAgIHJldHVyblZhbHVlID0gYGF2Z1ZhbHVlIC8gbWF4KGNvdW50LCAxLjApYDtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJXaWR0aE5lYXJlc3RWZWM0ID0gTWF0aC5mbG9vcihmaWx0ZXJXaWR0aCAvIDQpICogNDtcbiAgICBjb25zdCBmaWx0ZXJXaWR0aFZlYzRSZW1haW5kZXIgPSBmaWx0ZXJXaWR0aCAlIDQ7XG5cbiAgICBjb25zdCB1cGRhdGVTbmlwcGV0ID0gYFxuICAgICAgaWYgKCR7aXNBdmdQb29sfSkge1xuICAgICAgICBhdmdWYWx1ZSArPSBkb3QodmFsdWVzLCBvbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1pbk1heFZhbHVlID0gJHtjb21wYXJlT3B9KHZhbHVlcywgbWluTWF4VmFsdWUpO1xuICAgICAgfVxuICAgIGA7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgY29uc3QgaXZlYzIgc3RyaWRlcyA9IGl2ZWMyKCR7c3RyaWRlSGVpZ2h0fSwgJHtzdHJpZGVXaWR0aH0pO1xuICAgICAgY29uc3QgaXZlYzIgcGFkcyA9IGl2ZWMyKCR7cGFkVG9wfSwgJHtwYWRMZWZ0fSk7XG4gICAgICBjb25zdCBmbG9hdCBpbml0aWFsaXphdGlvblZhbHVlID0gJHtpbml0aWFsaXphdGlvblZhbHVlfTtcbiAgICAgIGNvbnN0IHZlYzQgb25lcyA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcblxuICAgICAgZmxvYXQgY291bnQgPSAwLjA7XG5cbiAgICAgIGZsb2F0IGdldFZhbHVlKGludCBiYXRjaCwgaW50IHhSLCBpbnQgeEMsIGludCBkKSB7XG4gICAgICAgIGlmICh4QyA8IDAgfHwgeEMgPj0gJHtjb252SW5mby5pbldpZHRofSkge1xuICAgICAgICAgIHJldHVybiBpbml0aWFsaXphdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvdW50ICs9IDEuMDtcbiAgICAgICAgcmV0dXJuIGdldFgoYmF0Y2gsIHhSLCB4QywgZCk7XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiYXRjaCA9IGNvb3Jkc1swXTtcbiAgICAgICAgaW50IGQgPSBjb29yZHNbM107XG5cbiAgICAgICAgaXZlYzIgeFJDQ29ybmVyID0gY29vcmRzLnl6ICogc3RyaWRlcyAtIHBhZHM7XG4gICAgICAgIGludCB4UkNvcm5lciA9IHhSQ0Nvcm5lci54O1xuICAgICAgICBpbnQgeENDb3JuZXIgPSB4UkNDb3JuZXIueTtcblxuICAgICAgICAvLyBtYXgvbWluIHgoPywgPywgZCkgdG8gZ2V0IHkoeVIsIHlDLCBkKS5cbiAgICAgICAgLy8gPyA9IHRvIGJlIGRldGVybWluZWRcbiAgICAgICAgdmVjNCBtaW5NYXhWYWx1ZSA9IHZlYzQoJHtpbml0aWFsaXphdGlvblZhbHVlfSk7XG4gICAgICAgIGZsb2F0IGF2Z1ZhbHVlID0gMC4wO1xuICAgICAgICBjb3VudCA9IDAuMDtcblxuICAgICAgICBmb3IgKGludCB3UiA9IDA7IHdSIDwgJHtlZmZlY3RpdmVGaWx0ZXJIZWlnaHR9O1xuICAgICAgICAgICAgd1IgKz0gJHtkaWxhdGlvbkhlaWdodH0pIHtcbiAgICAgICAgICBpbnQgeFIgPSB4UkNvcm5lciArIHdSO1xuXG4gICAgICAgICAgaWYgKHhSIDwgMCB8fCB4UiA+PSAke2NvbnZJbmZvLmluSGVpZ2h0fSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChpbnQgd0MgPSAwOyB3QyA8ICR7ZmlsdGVyV2lkdGhOZWFyZXN0VmVjNH07IHdDICs9IDQpIHtcbiAgICAgICAgICAgIGludCB4QyA9IHhDQ29ybmVyICsgd0MgKiAke2RpbGF0aW9uV2lkdGh9O1xuXG4gICAgICAgICAgICB2ZWM0IHZhbHVlcyA9IHZlYzQoXG4gICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4UiwgeEMsIGQpLFxuICAgICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgeFIsIHhDICsgJHtkaWxhdGlvbldpZHRofSwgZCksXG4gICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4UiwgeEMgKyAyICogJHtkaWxhdGlvbldpZHRofSwgZCksXG4gICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4UiwgeEMgKyAzICogJHtkaWxhdGlvbldpZHRofSwgZClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbnQgeEMgPSB4Q0Nvcm5lciArICR7ZmlsdGVyV2lkdGhOZWFyZXN0VmVjNH07XG4gICAgICAgICAgaWYgKCR7ZmlsdGVyV2lkdGhWZWM0UmVtYWluZGVyID09PSAxfSkge1xuICAgICAgICAgICAgdmVjNCB2YWx1ZXMgPSB2ZWM0KFxuICAgICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgeFIsIHhDLCBkKSxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZSxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZSxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgJHt1cGRhdGVTbmlwcGV0fVxuICAgICAgICAgIH0gZWxzZSBpZiAoJHtmaWx0ZXJXaWR0aFZlYzRSZW1haW5kZXIgPT09IDJ9KSB7XG4gICAgICAgICAgICB2ZWM0IHZhbHVlcyA9IHZlYzQoXG4gICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4UiwgeEMsIGQpLFxuICAgICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgeFIsIHhDICsgJHtkaWxhdGlvbldpZHRofSwgZCksXG4gICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uVmFsdWUsXG4gICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uVmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCR7ZmlsdGVyV2lkdGhWZWM0UmVtYWluZGVyID09PSAzfSkge1xuICAgICAgICAgICAgdmVjNCB2YWx1ZXMgPSB2ZWM0KFxuICAgICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgeFIsIHhDLCBkKSxcbiAgICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIHhSLCB4QyArICR7ZGlsYXRpb25XaWR0aH0sIGQpLFxuICAgICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgeFIsIHhDICsgMiAqICR7ZGlsYXRpb25XaWR0aH0sIGQpLFxuICAgICAgICAgICAgICBpbml0aWFsaXphdGlvblZhbHVlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAke3VwZGF0ZVNuaXBwZXR9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldE91dHB1dCgke3JldHVyblZhbHVlfSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUG9vbDNEUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252M0RJbmZvLCBwb29sVHlwZTogJ21heCd8J2F2ZycsXG4gICAgICBjb21wdXRlUG9zaXRpb25zOiBib29sZWFuLCBmbGF0dGVuUG9zaXRpb25zID0gZmFsc2UsXG4gICAgICBpbmNsdWRlQmF0Y2hJbkluZGV4ID0gZmFsc2UpIHtcbiAgICBpZiAocG9vbFR5cGUgPT09ICdhdmcnICYmIGNvbXB1dGVQb3NpdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXB1dGUgcG9zaXRpb25zIGZvciBhdmVyYWdlIHBvb2wuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcbiAgICBjb25zdCBzdHJpZGVEZXB0aCA9IGNvbnZJbmZvLnN0cmlkZURlcHRoO1xuICAgIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgICBjb25zdCBzdHJpZGVXaWR0aCA9IGNvbnZJbmZvLnN0cmlkZVdpZHRoO1xuICAgIGNvbnN0IGRpbGF0aW9uRGVwdGggPSBjb252SW5mby5kaWxhdGlvbkRlcHRoO1xuICAgIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gICAgY29uc3QgZGlsYXRpb25XaWR0aCA9IGNvbnZJbmZvLmRpbGF0aW9uV2lkdGg7XG4gICAgY29uc3QgZWZmZWN0aXZlRmlsdGVyRGVwdGggPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJEZXB0aDtcbiAgICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJIZWlnaHQ7XG4gICAgY29uc3QgZWZmZWN0aXZlRmlsdGVyV2lkdGggPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJXaWR0aDtcblxuICAgIGNvbnN0IHBhZEZyb250ID0gY29udkluZm8ucGFkSW5mby5mcm9udDtcbiAgICBjb25zdCBwYWRUb3AgPSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgICBjb25zdCBwYWRMZWZ0ID0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5vdXRTaGFwZTtcblxuICAgIGNvbnN0IGlzQXZnUG9vbCA9IHBvb2xUeXBlID09PSAnYXZnJztcblxuICAgIGxldCBpbml0aWFsaXphdGlvblZhbHVlID0gJzAuMCc7XG4gICAgaWYgKCFpc0F2Z1Bvb2wpIHtcbiAgICAgIC8vIFdlYkdMIG9uIEZpcmVmb3ggTGludXggY2FuJ3QgY29tcGlsZSAxLzAgc28gd2UgZG8gMS9lcHMuXG4gICAgICBpbml0aWFsaXphdGlvblZhbHVlID0gJy0xLjAgLyAxZS0yMCc7XG4gICAgfVxuXG4gICAgaWYgKGNvbXB1dGVQb3NpdGlvbnMpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmVPcCA9ICc+PSc7XG5cbiAgICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAgIGNvbnN0IGl2ZWMzIHN0cmlkZXMgPVxuICAgICAgICAgICAgaXZlYzMoJHtzdHJpZGVEZXB0aH0sICR7c3RyaWRlSGVpZ2h0fSwgJHtzdHJpZGVXaWR0aH0pO1xuICAgICAgICBjb25zdCBpdmVjMyBwYWRzID0gaXZlYzMoJHtwYWRGcm9udH0sICR7cGFkVG9wfSwgJHtwYWRMZWZ0fSk7XG5cbiAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgIGl2ZWM1IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIGludCBiYXRjaCA9IGNvb3Jkcy54O1xuICAgICAgICAgIGludCBjaCA9IGNvb3Jkcy51O1xuXG4gICAgICAgICAgaXZlYzMgeENvcm5lciA9IGl2ZWMzKGNvb3Jkcy55LCBjb29yZHMueiwgY29vcmRzLncpICogc3RyaWRlcyAtIHBhZHM7XG4gICAgICAgICAgaW50IHhEQ29ybmVyID0geENvcm5lci54O1xuICAgICAgICAgIGludCB4UkNvcm5lciA9IHhDb3JuZXIueTtcbiAgICAgICAgICBpbnQgeENDb3JuZXIgPSB4Q29ybmVyLno7XG5cbiAgICAgICAgICAvLyBtYXgvbWluIHgoPywgPywgPywgY2gpIHRvIGdldCB5KHlELCB5UiwgeUMsIGNoKS5cbiAgICAgICAgICAvLyA/ID0gdG8gYmUgZGV0ZXJtaW5lZFxuICAgICAgICAgIGZsb2F0IG1pbk1heFZhbHVlID0gMC4wO1xuICAgICAgICAgIGZsb2F0IG1pbk1heFZhbHVlRm91bmQgPSAwLjA7XG4gICAgICAgICAgaW50IG1pbk1heFBvc2l0aW9uID0gMDtcblxuICAgICAgICAgIGZvciAoaW50IHdEID0gMDsgd0QgPCAke2VmZmVjdGl2ZUZpbHRlckRlcHRofTtcbiAgICAgICAgICAgICAgd0QgKz0gJHtkaWxhdGlvbkRlcHRofSkge1xuICAgICAgICAgICAgaW50IHhEID0geERDb3JuZXIgKyB3RDtcblxuICAgICAgICAgICAgaWYgKHhEIDwgMCB8fCB4RCA+PSAke2NvbnZJbmZvLmluRGVwdGh9KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGludCB3UiA9IDA7IHdSIDwgJHtlZmZlY3RpdmVGaWx0ZXJIZWlnaHR9O1xuICAgICAgICAgICAgICAgIHdSICs9ICR7ZGlsYXRpb25IZWlnaHR9KSB7XG4gICAgICAgICAgICAgIGludCB4UiA9IHhSQ29ybmVyICsgd1I7XG5cbiAgICAgICAgICAgICAgaWYgKHhSIDwgMCB8fCB4UiA+PSAke2NvbnZJbmZvLmluSGVpZ2h0fSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChpbnQgd0MgPSAwOyB3QyA8ICR7ZWZmZWN0aXZlRmlsdGVyV2lkdGh9O1xuICAgICAgICAgICAgICAgICAgd0MgKz0gJHtkaWxhdGlvbldpZHRofSkge1xuICAgICAgICAgICAgICAgIGludCB4QyA9IHhDQ29ybmVyICsgd0M7XG5cbiAgICAgICAgICAgICAgICBpZiAoeEMgPCAwIHx8IHhDID49ICR7Y29udkluZm8uaW5XaWR0aH0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlID0gZ2V0WChiYXRjaCwgeEQsIHhSLCB4QywgY2gpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYSBtaW4gLyBtYXggdmFsdWUgaGFzIGFscmVhZHkgYmVlbiBmb3VuZCwgdXNlIGl0LiBJZiBub3QsXG4gICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJNaW5NYXhWYWx1ZSA9IG1peChcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsIG1pbk1heFZhbHVlLCBtaW5NYXhWYWx1ZUZvdW5kKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJHtjb21wYXJlT3B9IGN1cnJNaW5NYXhWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgbWluTWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgIG1pbk1heFZhbHVlRm91bmQgPSAxLjA7XG4gICAgICAgICAgICAgICAgICBtaW5NYXhQb3NpdGlvbiA9ICR7XG4gICAgICAgICAgZmxhdHRlblBvc2l0aW9ucyA/XG4gICAgICAgICAgICAgIChpbmNsdWRlQmF0Y2hJbkluZGV4ID9cbiAgICAgICAgICAgICAgICAgICBgKCgoYmF0Y2ggKiAke2NvbnZJbmZvLmluRGVwdGh9ICsgeEQpICogJHtcbiAgICAgICAgICAgICAgICAgICAgICAgY29udkluZm8uaW5IZWlnaHR9ICsgeFIpICogJHtjb252SW5mby5pbldpZHRofSArIHhDKSAqICR7XG4gICAgICAgICAgICAgICAgICAgICAgIGNvbnZJbmZvLmluQ2hhbm5lbHN9ICsgY2hgIDpcbiAgICAgICAgICAgICAgICAgICBgKCh4RCAqICR7Y29udkluZm8uaW5IZWlnaHR9ICsgeFIpICogJHtcbiAgICAgICAgICAgICAgICAgICAgICAgY29udkluZm8uaW5XaWR0aH0gKyB4QykgKiAke2NvbnZJbmZvLmluQ2hhbm5lbHN9ICsgY2hgKSA6XG4gICAgICAgICAgICAgIGB3RCAqICR7ZWZmZWN0aXZlRmlsdGVySGVpZ2h0fSAqICR7ZWZmZWN0aXZlRmlsdGVyV2lkdGh9ICtcbiAgICAgICAgICAgICAgICAgICAgICB3UiAqICR7ZWZmZWN0aXZlRmlsdGVyV2lkdGh9ICsgd0NgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0T3V0cHV0KGZsb2F0KG1pbk1heFBvc2l0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGFyZU9wID0gJ21heCc7XG5cbiAgICBsZXQgcmV0dXJuVmFsdWUgPSBgJHtwb29sVHlwZX0oJHtwb29sVHlwZX0oJHtwb29sVHlwZX0oYCArXG4gICAgICAgICdtaW5NYXhWYWx1ZVswXSwgbWluTWF4VmFsdWVbMV0pLCBtaW5NYXhWYWx1ZVsyXSksIG1pbk1heFZhbHVlWzNdKSc7XG4gICAgaWYgKHBvb2xUeXBlID09PSAnYXZnJykge1xuICAgICAgLy8gVXNlIGBtYXgoY291bnQsIDEuMClgIGluc3RlYWQgb2YgYGNvdW50YCBpbiBjYXNlIGNvdW50ID09PSAwLjAuXG4gICAgICAvLyBJZiBjb3VudCA9PT0gMC4wLCBgYXZnVmFsdWVgIGlzIGFsd2F5cyAwLjAgYW5kIHdlIGNoYW5nZSBgY291bnRgJ3NcbiAgICAgIC8vIHZhbHVlIHRvIGF2b2lkIGRpdmlkaW5nIHplcm8uXG4gICAgICByZXR1cm5WYWx1ZSA9IGBhdmdWYWx1ZSAvIG1heChjb3VudCwgMS4wKWA7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyV2lkdGhOZWFyZXN0VmVjNCA9IE1hdGguZmxvb3IoZmlsdGVyV2lkdGggLyA0KSAqIDQ7XG4gICAgY29uc3QgZmlsdGVyV2lkdGhWZWM0UmVtYWluZGVyID0gZmlsdGVyV2lkdGggJSA0O1xuXG4gICAgY29uc3QgdXBkYXRlU25pcHBldCA9IGBcbiAgICAgIGlmICgke2lzQXZnUG9vbH0pIHtcbiAgICAgICAgYXZnVmFsdWUgKz0gZG90KHZhbHVlcywgb25lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW5NYXhWYWx1ZSA9ICR7Y29tcGFyZU9wfSh2YWx1ZXMsIG1pbk1heFZhbHVlKTtcbiAgICAgIH1cbiAgICBgO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGNvbnN0IGl2ZWMzIHN0cmlkZXMgPVxuICAgICAgICBpdmVjMygke3N0cmlkZURlcHRofSwgJHtzdHJpZGVIZWlnaHR9LCAke3N0cmlkZVdpZHRofSk7XG4gICAgICBjb25zdCBpdmVjMyBwYWRzID0gaXZlYzMoJHtwYWRGcm9udH0sICR7cGFkVG9wfSwgJHtwYWRMZWZ0fSk7XG4gICAgICBjb25zdCBmbG9hdCBpbml0aWFsaXphdGlvblZhbHVlID0gJHtpbml0aWFsaXphdGlvblZhbHVlfTtcbiAgICAgIGNvbnN0IHZlYzQgb25lcyA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcblxuICAgICAgZmxvYXQgY291bnQgPSAwLjA7XG5cbiAgICAgIGZsb2F0IGdldFZhbHVlKGludCBiYXRjaCwgaW50IHhELCBpbnQgeFIsIGludCB4QywgaW50IGNoKSB7XG4gICAgICAgIGlmICh4QyA8IDAgfHwgeEMgPj0gJHtjb252SW5mby5pbldpZHRofSkge1xuICAgICAgICAgIHJldHVybiBpbml0aWFsaXphdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvdW50ICs9IDEuMDtcbiAgICAgICAgcmV0dXJuIGdldFgoYmF0Y2gsIHhELCB4UiwgeEMsIGNoKTtcbiAgICAgIH1cblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjNSBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IGJhdGNoID0gY29vcmRzLng7XG4gICAgICAgIGludCBjaCA9IGNvb3Jkcy51O1xuXG4gICAgICAgIGl2ZWMzIHhDb3JuZXIgPSBpdmVjMyhjb29yZHMueSwgY29vcmRzLnosIGNvb3Jkcy53KSAqIHN0cmlkZXMgLSBwYWRzO1xuICAgICAgICBpbnQgeERDb3JuZXIgPSB4Q29ybmVyLng7XG4gICAgICAgIGludCB4UkNvcm5lciA9IHhDb3JuZXIueTtcbiAgICAgICAgaW50IHhDQ29ybmVyID0geENvcm5lci56O1xuXG4gICAgICAgIC8vIG1heC9taW4geCg/LCA/LCA/LCBkKSB0byBnZXQgeSh5RCwgeVIsIHlDLCBjaCkuXG4gICAgICAgIC8vID8gPSB0byBiZSBkZXRlcm1pbmVkXG4gICAgICAgIHZlYzQgbWluTWF4VmFsdWUgPSB2ZWM0KCR7aW5pdGlhbGl6YXRpb25WYWx1ZX0pO1xuICAgICAgICBmbG9hdCBhdmdWYWx1ZSA9IDAuMDtcbiAgICAgICAgY291bnQgPSAwLjA7XG5cbiAgICAgICAgZm9yIChpbnQgd0QgPSAwOyB3RCA8ICR7ZWZmZWN0aXZlRmlsdGVyRGVwdGh9O1xuICAgICAgICAgICAgd0QgKz0gJHtkaWxhdGlvbkRlcHRofSkge1xuICAgICAgICAgIGludCB4RCA9IHhEQ29ybmVyICsgd0Q7XG5cbiAgICAgICAgICBpZiAoeEQgPCAwIHx8IHhEID49ICR7Y29udkluZm8uaW5EZXB0aH0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoaW50IHdSID0gMDsgd1IgPCAke2VmZmVjdGl2ZUZpbHRlckhlaWdodH07XG4gICAgICAgICAgICB3UiArPSAke2RpbGF0aW9uSGVpZ2h0fSkge1xuICAgICAgICAgICAgaW50IHhSID0geFJDb3JuZXIgKyB3UjtcblxuICAgICAgICAgICAgaWYgKHhSIDwgMCB8fCB4UiA+PSAke2NvbnZJbmZvLmluSGVpZ2h0fSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpbnQgd0MgPSAwOyB3QyA8ICR7ZmlsdGVyV2lkdGhOZWFyZXN0VmVjNH07IHdDICs9IDQpIHtcbiAgICAgICAgICAgICAgaW50IHhDID0geENDb3JuZXIgKyB3QyAqICR7ZGlsYXRpb25XaWR0aH07XG5cbiAgICAgICAgICAgICAgdmVjNCB2YWx1ZXMgPSB2ZWM0KFxuICAgICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4RCwgeFIsIHhDLCBjaCksXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIHhELCB4UiwgeEMgKyAke2RpbGF0aW9uV2lkdGh9LCBjaCksXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIHhELCB4UiwgeEMgKyAyICogJHtkaWxhdGlvbldpZHRofSwgY2gpLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4RCwgeFIsIHhDICsgMyAqICR7ZGlsYXRpb25XaWR0aH0sIGNoKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW50IHhDID0geENDb3JuZXIgKyAke2ZpbHRlcldpZHRoTmVhcmVzdFZlYzR9O1xuICAgICAgICAgICAgaWYgKCR7ZmlsdGVyV2lkdGhWZWM0UmVtYWluZGVyID09PSAxfSkge1xuICAgICAgICAgICAgICB2ZWM0IHZhbHVlcyA9IHZlYzQoXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIHhELCB4UiwgeEMsIGNoKSxcbiAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvblZhbHVlLFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uVmFsdWUsXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHtmaWx0ZXJXaWR0aFZlYzRSZW1haW5kZXIgPT09IDJ9KSB7XG4gICAgICAgICAgICAgIHZlYzQgdmFsdWVzID0gdmVjNChcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgeEQsIHhSLCB4QywgY2gpLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4RCwgeFIsIHhDICsgJHtkaWxhdGlvbldpZHRofSwgY2gpLFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uVmFsdWUsXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHtmaWx0ZXJXaWR0aFZlYzRSZW1haW5kZXIgPT09IDN9KSB7XG4gICAgICAgICAgICAgIHZlYzQgdmFsdWVzID0gdmVjNChcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgeEQsIHhSLCB4QywgY2gpLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4RCwgeFIsIHhDICsgJHtkaWxhdGlvbldpZHRofSwgY2gpLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCB4RCwgeFIsIHhDICsgMiAqICR7ZGlsYXRpb25XaWR0aH0sIGNoKSxcbiAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvblZhbHVlXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgJHt1cGRhdGVTbmlwcGV0fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRPdXRwdXQoJHtyZXR1cm5WYWx1ZX0pO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool, backend_util, util } from '@tensorflow/tfjs-core';\nimport { Pool2DProgram } from '../pool_gpu';\nimport { assertNotComplex } from '../webgl_util';\nimport { identity } from './Identity';\nexport function avgPool(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n assertNotComplex(x, 'avgPool');\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const dilations = 1;\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in avgPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 &&\n util.arraysEqual(convInfo.inShape, convInfo.outShape)) {\n return identity({ inputs: { x }, backend });\n }\n const avgPoolProgram = new Pool2DProgram(convInfo, 'avg', false);\n return backend.runWebGLProgram(avgPoolProgram, [x], 'float32');\n}\nexport const avgPoolConfig = {\n kernelName: AvgPool,\n backendName: 'webgl',\n kernelFunc: avgPool\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9BdmdQb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxPQUFPLEVBQStCLFlBQVksRUFBd0MsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHckksT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLFVBQVUsT0FBTyxDQUFDLElBSXZCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDMUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRXBCLElBQUksQ0FBQyxNQUFNLENBQ1AsWUFBWSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFDL0QsR0FBRyxFQUFFLENBQUMsMkRBQTJEO1FBQzdELGVBQWUsT0FBTyxtQkFBbUIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUUvRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUF5QyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQ2hFLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckMsSUFBSSxRQUFRLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN6RCxPQUFPLFFBQVEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7S0FDekM7SUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsT0FBZ0M7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7QXZnUG9vbCwgQXZnUG9vbEF0dHJzLCBBdmdQb29sSW5wdXRzLCBiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7UG9vbDJEUHJvZ3JhbX0gZnJvbSAnLi4vcG9vbF9ncHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi93ZWJnbF91dGlsJztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4vSWRlbnRpdHknO1xuXG5leHBvcnQgZnVuY3Rpb24gYXZnUG9vbChhcmdzOiB7XG4gIGlucHV0czogQXZnUG9vbElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IEF2Z1Bvb2xBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ2F2Z1Bvb2wnKTtcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuICBjb25zdCBkaWxhdGlvbnMgPSAxO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYmFja2VuZF91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGF2Z1Bvb2w6IEVpdGhlciBzdHJpZGVzIG9yIGRpbGF0aW9ucyBtdXN0IGJlIDEuICcgK1xuICAgICAgICAgIGBHb3Qgc3RyaWRlcyAke3N0cmlkZXN9IGFuZCBkaWxhdGlvbnMgJyR7ZGlsYXRpb25zfSdgKTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICBkaWxhdGlvbnMsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgaWYgKGNvbnZJbmZvLmZpbHRlcldpZHRoID09PSAxICYmIGNvbnZJbmZvLmZpbHRlckhlaWdodCA9PT0gMSAmJlxuICAgICAgdXRpbC5hcnJheXNFcXVhbChjb252SW5mby5pblNoYXBlLCBjb252SW5mby5vdXRTaGFwZSkpIHtcbiAgICByZXR1cm4gaWRlbnRpdHkoe2lucHV0czoge3h9LCBiYWNrZW5kfSk7XG4gIH1cbiAgY29uc3QgYXZnUG9vbFByb2dyYW0gPSBuZXcgUG9vbDJEUHJvZ3JhbShjb252SW5mbywgJ2F2ZycsIGZhbHNlKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKGF2Z1Bvb2xQcm9ncmFtLCBbeF0sICdmbG9hdDMyJyk7XG59XG5cbmV4cG9ydCBjb25zdCBhdmdQb29sQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEF2Z1Bvb2wsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhdmdQb29sIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool3D, backend_util } from '@tensorflow/tfjs-core';\nimport { Pool3DProgram } from '../pool_gpu';\nexport function avgPool3D(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { filterSize, strides, pad, dimRoundingMode, dataFormat } = attrs;\n const dilations = [1, 1, 1];\n const convInfo = backend_util.computePool3DInfo(x.shape, filterSize, strides, dilations, pad, dimRoundingMode, dataFormat);\n const avgPoolProgram = new Pool3DProgram(convInfo, 'avg', false);\n return backend.runWebGLProgram(avgPoolProgram, [x], 'float32');\n}\nexport const avgPool3DConfig = {\n kernelName: AvgPool3D,\n backendName: 'webgl',\n kernelFunc: avgPool3D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbDNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0F2Z1Bvb2wzRC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFtQyxZQUFZLEVBQXVDLE1BQU0sdUJBQXVCLENBQUM7QUFHckksT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUxQyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBSXpCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEUsTUFBTSxTQUFTLEdBQTZCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV0RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUFpRCxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQ3hFLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sY0FBYyxHQUFHLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtBdmdQb29sM0QsIEF2Z1Bvb2wzREF0dHJzLCBBdmdQb29sM0RJbnB1dHMsIGJhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtQb29sM0RQcm9ncmFtfSBmcm9tICcuLi9wb29sX2dwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdmdQb29sM0QoYXJnczoge1xuICBpbnB1dHM6IEF2Z1Bvb2wzRElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IEF2Z1Bvb2wzREF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlLCBkYXRhRm9ybWF0fSA9IGF0dHJzO1xuICBjb25zdCBkaWxhdGlvbnM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFsxLCAxLCAxXTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDNESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSwgc3RyaWRlcyxcbiAgICAgIGRpbGF0aW9ucywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGRhdGFGb3JtYXQpO1xuICBjb25zdCBhdmdQb29sUHJvZ3JhbSA9IG5ldyBQb29sM0RQcm9ncmFtKGNvbnZJbmZvLCAnYXZnJywgZmFsc2UpO1xuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0oYXZnUG9vbFByb2dyYW0sIFt4XSwgJ2Zsb2F0MzInKTtcbn1cblxuZXhwb3J0IGNvbnN0IGF2Z1Bvb2wzRENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBdmdQb29sM0QsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhdmdQb29sM0QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class AvgPool2DBackpropProgram {\n constructor(convInfo) {\n this.variableNames = ['dy'];\n this.outputShape = convInfo.inShape;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n const avgMultiplier = 1 / (filterHeight * filterWidth);\n 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 `;\n }\n}\nexport class AvgPool3DBackpropProgram {\n constructor(convInfo) {\n this.variableNames = ['dy'];\n this.outputShape = convInfo.inShape;\n const filterDepth = convInfo.filterDepth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationDepth = convInfo.dilationDepth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front;\n const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth);\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZnX3Bvb2xfYmFja3Byb3BfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9hdmdfcG9vbF9iYWNrcHJvcF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsTUFBTSxPQUFPLHdCQUF3QjtJQUtuQyxZQUFZLFFBQWlDO1FBSjdDLGtCQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUtyQixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7UUFDN0QsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUM7UUFFM0QsTUFBTSxNQUFNLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUVqRSxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLFFBQVEsR0FBRztpQ0FDYSxNQUFNLEtBQUssT0FBTzswQ0FDVCxhQUFhOzs7Ozs7Ozs7Ozs7OztnQ0FjdkIscUJBQXFCO29CQUNqQyxjQUFjO2dEQUNjLFlBQVk7O29DQUV4QixRQUFRLENBQUMsU0FBUzs7Ozs7a0NBS3BCLG9CQUFvQjttQkFDbkMsYUFBYTtrREFDa0IsV0FBVzs7c0NBRXZCLFFBQVEsQ0FBQyxRQUFROzs7Ozs7Ozs7Ozs7O0tBYWxELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sd0JBQXdCO0lBS25DLFlBQVksUUFBaUM7UUFKN0Msa0JBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBS3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQzdDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUM3QyxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztRQUMzRCxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztRQUM3RCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztRQUUzRCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDbkUsTUFBTSxNQUFNLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUVqRSxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBRXJFLElBQUksQ0FBQyxRQUFRLEdBQUc7aUNBQ2EsUUFBUSxLQUFLLE1BQU0sS0FBSyxPQUFPOzBDQUN0QixhQUFhOzs7Ozs7Ozs7Ozs7Ozs7OztnQ0FpQnZCLG9CQUFvQjtvQkFDaEMsYUFBYTtnREFDZSxXQUFXOztvQ0FFdkIsUUFBUSxDQUFDLFFBQVE7Ozs7O2tDQUtuQixxQkFBcUI7c0JBQ2pDLGNBQWM7a0RBQ2MsWUFBWTs7c0NBRXhCLFFBQVEsQ0FBQyxTQUFTOzs7Ozs7b0NBTXBCLG9CQUFvQjt3QkFDaEMsYUFBYTtvREFDZSxXQUFXOzt3Q0FFdkIsUUFBUSxDQUFDLFFBQVE7Ozs7Ozs7Ozs7Ozs7O0tBY3BELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBBdmdQb29sMkRCYWNrcHJvcFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydkeSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252MkRJbmZvKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGNvbnZJbmZvLmluU2hhcGU7XG4gICAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICAgIGNvbnN0IGZpbHRlcldpZHRoID0gY29udkluZm8uZmlsdGVyV2lkdGg7XG4gICAgY29uc3Qgc3RyaWRlSGVpZ2h0ID0gY29udkluZm8uc3RyaWRlSGVpZ2h0O1xuICAgIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gICAgY29uc3QgZGlsYXRpb25IZWlnaHQgPSBjb252SW5mby5kaWxhdGlvbkhlaWdodDtcbiAgICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJIZWlnaHQ7XG4gICAgY29uc3QgZWZmZWN0aXZlRmlsdGVyV2lkdGggPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJXaWR0aDtcblxuICAgIGNvbnN0IHBhZFRvcCA9IGVmZmVjdGl2ZUZpbHRlckhlaWdodCAtIDEgLSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgICBjb25zdCBwYWRMZWZ0ID0gZWZmZWN0aXZlRmlsdGVyV2lkdGggLSAxIC0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuXG4gICAgY29uc3QgYXZnTXVsdGlwbGllciA9IDEgLyAoZmlsdGVySGVpZ2h0ICogZmlsdGVyV2lkdGgpO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGNvbnN0IGl2ZWMyIHBhZHMgPSBpdmVjMigke3BhZFRvcH0sICR7cGFkTGVmdH0pO1xuICAgICAgY29uc3QgZmxvYXQgYXZnTXVsdGlwbGllciA9IGZsb2F0KCR7YXZnTXVsdGlwbGllcn0pO1xuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYiA9IGNvb3Jkc1swXTtcbiAgICAgICAgaW50IGQgPSBjb29yZHNbM107XG5cbiAgICAgICAgaXZlYzIgZHlSQ0Nvcm5lciA9IGNvb3Jkcy55eiAtIHBhZHM7XG4gICAgICAgIGludCBkeVJDb3JuZXIgPSBkeVJDQ29ybmVyLng7XG4gICAgICAgIGludCBkeUNDb3JuZXIgPSBkeVJDQ29ybmVyLnk7XG5cbiAgICAgICAgLy8gQ29udm9sdmUgZHkoPywgPywgZCkgd2l0aCBwb3MgbWFzayg6LCA6LCBkKSB0byBnZXQgZHgoeFIsIHhDLCBkKS5cbiAgICAgICAgLy8gPyA9IHRvIGJlIGRldGVybWluZWQuIDogPSBhY3Jvc3MgYWxsIHZhbHVlcyBpbiB0aGF0IGF4aXMuXG4gICAgICAgIGZsb2F0IGRvdFByb2QgPSAwLjA7XG4gICAgICAgIGZvciAoaW50IHdSID0gMDsgd1IgPCAke2VmZmVjdGl2ZUZpbHRlckhlaWdodH07XG4gICAgICAgICAgICB3UiArPSAke2RpbGF0aW9uSGVpZ2h0fSkge1xuICAgICAgICAgIGZsb2F0IGR5UiA9IGZsb2F0KGR5UkNvcm5lciArIHdSKSAvICR7c3RyaWRlSGVpZ2h0fS4wO1xuXG4gICAgICAgICAgaWYgKGR5UiA8IDAuMCB8fCBkeVIgPj0gJHtjb252SW5mby5vdXRIZWlnaHR9LjAgfHwgZnJhY3QoZHlSKSA+IDAuMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGludCBpZHlSID0gaW50KGR5Uik7XG5cbiAgICAgICAgICBmb3IgKGludCB3QyA9IDA7IHdDIDwgJHtlZmZlY3RpdmVGaWx0ZXJXaWR0aH07XG4gICAgICAgICAgICB3Qys9ICR7ZGlsYXRpb25XaWR0aH0pIHtcbiAgICAgICAgICAgIGZsb2F0IGR5QyA9IGZsb2F0KGR5Q0Nvcm5lciArIHdDKSAvICR7c3RyaWRlV2lkdGh9LjA7XG5cbiAgICAgICAgICAgIGlmIChkeUMgPCAwLjAgfHwgZHlDID49ICR7Y29udkluZm8ub3V0V2lkdGh9LjAgfHxcbiAgICAgICAgICAgICAgICBmcmFjdChkeUMpID4gMC4wKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50IGlkeUMgPSBpbnQoZHlDKTtcblxuICAgICAgICAgICAgZmxvYXQgZHlWYWx1ZSA9IGdldER5KGIsIGlkeVIsIGlkeUMsIGQpO1xuXG4gICAgICAgICAgICBkb3RQcm9kICs9IGR5VmFsdWUgKiBhdmdNdWx0aXBsaWVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRPdXRwdXQoZG90UHJvZCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXZnUG9vbDNEQmFja3Byb3BQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnZHknXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjNESW5mbykge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5pblNoYXBlO1xuICAgIGNvbnN0IGZpbHRlckRlcHRoID0gY29udkluZm8uZmlsdGVyRGVwdGg7XG4gICAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICAgIGNvbnN0IGZpbHRlcldpZHRoID0gY29udkluZm8uZmlsdGVyV2lkdGg7XG4gICAgY29uc3Qgc3RyaWRlRGVwdGggPSBjb252SW5mby5zdHJpZGVEZXB0aDtcbiAgICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gICAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgICBjb25zdCBkaWxhdGlvbkRlcHRoID0gY29udkluZm8uZGlsYXRpb25EZXB0aDtcbiAgICBjb25zdCBkaWxhdGlvbkhlaWdodCA9IGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0O1xuICAgIGNvbnN0IGRpbGF0aW9uV2lkdGggPSBjb252SW5mby5kaWxhdGlvbldpZHRoO1xuICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckRlcHRoID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVyRGVwdGg7XG4gICAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0O1xuICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcldpZHRoID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGg7XG5cbiAgICBjb25zdCBwYWRGcm9udCA9IGVmZmVjdGl2ZUZpbHRlckRlcHRoIC0gMSAtIGNvbnZJbmZvLnBhZEluZm8uZnJvbnQ7XG4gICAgY29uc3QgcGFkVG9wID0gZWZmZWN0aXZlRmlsdGVySGVpZ2h0IC0gMSAtIGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICAgIGNvbnN0IHBhZExlZnQgPSBlZmZlY3RpdmVGaWx0ZXJXaWR0aCAtIDEgLSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG5cbiAgICBjb25zdCBhdmdNdWx0aXBsaWVyID0gMSAvIChmaWx0ZXJEZXB0aCAqIGZpbHRlckhlaWdodCAqIGZpbHRlcldpZHRoKTtcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICBjb25zdCBpdmVjMyBwYWRzID0gaXZlYzMoJHtwYWRGcm9udH0sICR7cGFkVG9wfSwgJHtwYWRMZWZ0fSk7XG4gICAgICBjb25zdCBmbG9hdCBhdmdNdWx0aXBsaWVyID0gZmxvYXQoJHthdmdNdWx0aXBsaWVyfSk7XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzUgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiYXRjaCA9IGNvb3Jkcy54O1xuICAgICAgICBpbnQgY2ggPSBjb29yZHMudTtcblxuICAgICAgICBpdmVjMyBkeUNvcm5lciA9IGl2ZWMzKGNvb3Jkcy55LCBjb29yZHMueiwgY29vcmRzLncpIC0gcGFkcztcbiAgICAgICAgaW50IGR5RENvcm5lciA9IGR5Q29ybmVyLng7XG4gICAgICAgIGludCBkeVJDb3JuZXIgPSBkeUNvcm5lci55O1xuICAgICAgICBpbnQgZHlDQ29ybmVyID0gZHlDb3JuZXIuejtcblxuICAgICAgICAvLyBDb252b2x2ZSBkeSg/LCA/LCA/LCBkKSB3aXRoIHBvcyBtYXNrKDosIDosIDosIGNoKSB0byBnZXRcbiAgICAgICAgLy8gZHgoeEQsIHhSLCB4QywgY2gpLlxuICAgICAgICAvLyA/ID0gdG8gYmUgZGV0ZXJtaW5lZC4gOiA9IGFjcm9zcyBhbGwgdmFsdWVzIGluIHRoYXQgYXhpcy5cbiAgICAgICAgZmxvYXQgZG90UHJvZCA9IDAuMDtcblxuICAgICAgICBmb3IgKGludCB3RCA9IDA7IHdEIDwgJHtlZmZlY3RpdmVGaWx0ZXJEZXB0aH07XG4gICAgICAgICAgICB3RCArPSAke2RpbGF0aW9uRGVwdGh9KSB7XG4gICAgICAgICAgZmxvYXQgZHlEID0gZmxvYXQoZHlEQ29ybmVyICsgd0QpIC8gJHtzdHJpZGVEZXB0aH0uMDtcblxuICAgICAgICAgIGlmIChkeUQgPCAwLjAgfHwgZHlEID49ICR7Y29udkluZm8ub3V0RGVwdGh9LjAgfHwgZnJhY3QoZHlEKSA+IDAuMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGludCBpZHlEID0gaW50KGR5RCk7XG5cbiAgICAgICAgICBmb3IgKGludCB3UiA9IDA7IHdSIDwgJHtlZmZlY3RpdmVGaWx0ZXJIZWlnaHR9O1xuICAgICAgICAgICAgICB3UiArPSAke2RpbGF0aW9uSGVpZ2h0fSkge1xuICAgICAgICAgICAgZmxvYXQgZHlSID0gZmxvYXQoZHlSQ29ybmVyICsgd1IpIC8gJHtzdHJpZGVIZWlnaHR9LjA7XG5cbiAgICAgICAgICAgIGlmIChkeVIgPCAwLjAgfHwgZHlSID49ICR7Y29udkluZm8ub3V0SGVpZ2h0fS4wIHx8XG4gICAgICAgICAgICAgICAgZnJhY3QoZHlSKSA+IDAuMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGludCBpZHlSID0gaW50KGR5Uik7XG5cbiAgICAgICAgICAgIGZvciAoaW50IHdDID0gMDsgd0MgPCAke2VmZmVjdGl2ZUZpbHRlcldpZHRofTtcbiAgICAgICAgICAgICAgICB3QyArPSAke2RpbGF0aW9uV2lkdGh9KSB7XG4gICAgICAgICAgICAgIGZsb2F0IGR5QyA9IGZsb2F0KGR5Q0Nvcm5lciArIHdDKSAvICR7c3RyaWRlV2lkdGh9LjA7XG5cbiAgICAgICAgICAgICAgaWYgKGR5QyA8IDAuMCB8fCBkeUMgPj0gJHtjb252SW5mby5vdXRXaWR0aH0uMCB8fFxuICAgICAgICAgICAgICAgICAgZnJhY3QoZHlDKSA+IDAuMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGludCBpZHlDID0gaW50KGR5Qyk7XG5cbiAgICAgICAgICAgICAgZmxvYXQgZHlWYWx1ZSA9IGdldER5KGJhdGNoLCBpZHlELCBpZHlSLCBpZHlDLCBjaCk7XG5cbiAgICAgICAgICAgICAgZG90UHJvZCArPSBkeVZhbHVlICogYXZnTXVsdGlwbGllcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0T3V0cHV0KGRvdFByb2QpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool3DGrad, backend_util } from '@tensorflow/tfjs-core';\nimport { AvgPool3DBackpropProgram } from '../avg_pool_backprop_gpu';\nexport function avgPool3DGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const x = input;\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const dilations = [1, 1, 1];\n const convInfo = backend_util.computePool3DInfo(x.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n const avgPoolBackpropProgram = new AvgPool3DBackpropProgram(convInfo);\n return backend.runWebGLProgram(avgPoolBackpropProgram, [dy], x.dtype);\n}\nexport const avgPool3DGradConfig = {\n kernelName: AvgPool3DGrad,\n backendName: 'webgl',\n kernelFunc: avgPool3DGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbDNER3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9BdmdQb29sM0RHcmFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxhQUFhLEVBQTJDLFlBQVksRUFBdUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVqSixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUdsRSxNQUFNLFVBQVUsYUFBYSxDQUFDLElBSTdCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNoQixNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUE2QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBaUQsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUN4RSxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFpQjtJQUMvQyxVQUFVLEVBQUUsYUFBYTtJQUN6QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsYUFBc0M7Q0FDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7QXZnUG9vbDNER3JhZCwgQXZnUG9vbDNER3JhZEF0dHJzLCBBdmdQb29sM0RHcmFkSW5wdXRzLCBiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtBdmdQb29sM0RCYWNrcHJvcFByb2dyYW19IGZyb20gJy4uL2F2Z19wb29sX2JhY2twcm9wX2dwdSc7XG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXZnUG9vbDNER3JhZChhcmdzOiB7XG4gIGlucHV0czogQXZnUG9vbDNER3JhZElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IEF2Z1Bvb2wzREdyYWRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7ZHksIGlucHV0fSA9IGlucHV0cztcbiAgY29uc3QgeCA9IGlucHV0O1xuICBjb25zdCB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkLCBkaW1Sb3VuZGluZ01vZGV9ID0gYXR0cnM7XG4gIGNvbnN0IGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzEsIDEsIDFdO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVQb29sM0RJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBmaWx0ZXJTaXplLCBzdHJpZGVzLFxuICAgICAgZGlsYXRpb25zLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IGF2Z1Bvb2xCYWNrcHJvcFByb2dyYW0gPSBuZXcgQXZnUG9vbDNEQmFja3Byb3BQcm9ncmFtKGNvbnZJbmZvKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKGF2Z1Bvb2xCYWNrcHJvcFByb2dyYW0sIFtkeV0sIHguZHR5cGUpO1xufVxuXG5leHBvcnQgY29uc3QgYXZnUG9vbDNER3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBdmdQb29sM0RHcmFkLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogYXZnUG9vbDNER3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPoolGrad, backend_util } from '@tensorflow/tfjs-core';\nimport { AvgPool2DBackpropProgram } from '../avg_pool_backprop_gpu';\nimport { assertNotComplex } from '../webgl_util';\nexport function avgPoolGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const x = input;\n assertNotComplex([dy, input], 'avgPoolGrad');\n const { filterSize, strides, pad } = attrs;\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, 1 /* dilations */, pad);\n const avgPoolBackpropProgram = new AvgPool2DBackpropProgram(convInfo);\n return backend.runWebGLProgram(avgPoolBackpropProgram, [dy], x.dtype);\n}\nexport const avgPoolGradConfig = {\n kernelName: AvgPoolGrad,\n backendName: 'webgl',\n kernelFunc: avgPoolGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbEdyYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQXZnUG9vbEdyYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLFdBQVcsRUFBdUMsWUFBWSxFQUF1QyxNQUFNLHVCQUF1QixDQUFDO0FBRTNJLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRWxFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLFVBQVUsV0FBVyxDQUFDLElBSTNCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFekMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBeUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUNoRSxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFpQjtJQUM3QyxVQUFVLEVBQUUsV0FBVztJQUN2QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsV0FBb0M7Q0FDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7QXZnUG9vbEdyYWQsIEF2Z1Bvb2xHcmFkQXR0cnMsIEF2Z1Bvb2xHcmFkSW5wdXRzLCBiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtBdmdQb29sMkRCYWNrcHJvcFByb2dyYW19IGZyb20gJy4uL2F2Z19wb29sX2JhY2twcm9wX2dwdSc7XG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi93ZWJnbF91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGF2Z1Bvb2xHcmFkKGFyZ3M6IHtcbiAgaW5wdXRzOiBBdmdQb29sR3JhZElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IEF2Z1Bvb2xHcmFkQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBpbnB1dH0gPSBpbnB1dHM7XG4gIGNvbnN0IHggPSBpbnB1dDtcbiAgYXNzZXJ0Tm90Q29tcGxleChbZHksIGlucHV0XSwgJ2F2Z1Bvb2xHcmFkJyk7XG4gIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWR9ID0gYXR0cnM7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wyREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBmaWx0ZXJTaXplLCBzdHJpZGVzLFxuICAgICAgMSAvKiBkaWxhdGlvbnMgKi8sIHBhZCk7XG4gIGNvbnN0IGF2Z1Bvb2xCYWNrcHJvcFByb2dyYW0gPSBuZXcgQXZnUG9vbDJEQmFja3Byb3BQcm9ncmFtKGNvbnZJbmZvKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKGF2Z1Bvb2xCYWNrcHJvcFByb2dyYW0sIFtkeV0sIHguZHR5cGUpO1xufVxuXG5leHBvcnQgY29uc3QgYXZnUG9vbEdyYWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQXZnUG9vbEdyYWQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBhdmdQb29sR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { BatchMatMul } from '@tensorflow/tfjs-core';\nimport { batchMatMulImpl } from './BatchMatMul_impl';\nexport function batchMatMul(args) {\n const { inputs, backend, attrs } = args;\n const { a, b } = inputs;\n const { transposeA, transposeB } = attrs;\n return batchMatMulImpl({ a, b, transposeA, transposeB, backend });\n}\nexport const batchMatMulConfig = {\n kernelName: BatchMatMul,\n backendName: 'webgl',\n kernelFunc: batchMatMul,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hNYXRNdWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQmF0Y2hNYXRNdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFdBQVcsRUFBZ0UsTUFBTSx1QkFBdUIsQ0FBQztBQUdqSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUkzQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN0QixNQUFNLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV2QyxPQUFPLGVBQWUsQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QmF0Y2hNYXRNdWwsIEJhdGNoTWF0TXVsQXR0cnMsIEJhdGNoTWF0TXVsSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge2JhdGNoTWF0TXVsSW1wbH0gZnJvbSAnLi9CYXRjaE1hdE11bF9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJhdGNoTWF0TXVsKGFyZ3M6IHtcbiAgaW5wdXRzOiBCYXRjaE1hdE11bElucHV0cyxcbiAgYXR0cnM6IEJhdGNoTWF0TXVsQXR0cnMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0xcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2EsIGJ9ID0gaW5wdXRzO1xuICBjb25zdCB7dHJhbnNwb3NlQSwgdHJhbnNwb3NlQn0gPSBhdHRycztcblxuICByZXR1cm4gYmF0Y2hNYXRNdWxJbXBsKHthLCBiLCB0cmFuc3Bvc2VBLCB0cmFuc3Bvc2VCLCBiYWNrZW5kfSk7XG59XG5cbmV4cG9ydCBjb25zdCBiYXRjaE1hdE11bENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBCYXRjaE1hdE11bCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGJhdGNoTWF0TXVsIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nexport class BatchNormProgram {\n constructor(xShape, meanShape, varianceShape, offsetShape, scaleShape, varianceEpsilon) {\n this.outputShape = [];\n this.variableNames = ['x', 'mean', 'variance'];\n backend_util.assertAndGetBroadcastShape(xShape, meanShape);\n backend_util.assertAndGetBroadcastShape(xShape, varianceShape);\n let offsetSnippet = '0.0';\n if (offsetShape != null) {\n backend_util.assertAndGetBroadcastShape(xShape, offsetShape);\n this.variableNames.push('offset');\n offsetSnippet = 'getOffsetAtOutCoords()';\n }\n let scaleSnippet = '1.0';\n if (scaleShape != null) {\n backend_util.assertAndGetBroadcastShape(xShape, scaleShape);\n this.variableNames.push('scale');\n scaleSnippet = 'getScaleAtOutCoords()';\n }\n this.outputShape = xShape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvYmF0Y2hub3JtX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbkQsTUFBTSxPQUFPLGdCQUFnQjtJQUszQixZQUNJLE1BQWdCLEVBQUUsU0FBbUIsRUFBRSxhQUF1QixFQUM5RCxXQUEwQixFQUFFLFVBQXlCLEVBQ3JELGVBQXVCO1FBTjNCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBT3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0QsWUFBWSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUvRCxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3ZCLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsYUFBYSxHQUFHLHdCQUF3QixDQUFDO1NBQzFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtZQUN0QixZQUFZLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLFlBQVksR0FBRyx1QkFBdUIsQ0FBQztTQUN4QztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUc7Ozs7O3lCQUtLLGFBQWE7d0JBQ2QsWUFBWTsyREFDdUIsZUFBZTs7O0tBR3JFLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaE5vcm1Qcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lczogc3RyaW5nW107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXSA9IFtdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgeFNoYXBlOiBudW1iZXJbXSwgbWVhblNoYXBlOiBudW1iZXJbXSwgdmFyaWFuY2VTaGFwZTogbnVtYmVyW10sXG4gICAgICBvZmZzZXRTaGFwZTogbnVtYmVyW118bnVsbCwgc2NhbGVTaGFwZTogbnVtYmVyW118bnVsbCxcbiAgICAgIHZhcmlhbmNlRXBzaWxvbjogbnVtYmVyKSB7XG4gICAgdGhpcy52YXJpYWJsZU5hbWVzID0gWyd4JywgJ21lYW4nLCAndmFyaWFuY2UnXTtcbiAgICBiYWNrZW5kX3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoeFNoYXBlLCBtZWFuU2hhcGUpO1xuICAgIGJhY2tlbmRfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZSh4U2hhcGUsIHZhcmlhbmNlU2hhcGUpO1xuXG4gICAgbGV0IG9mZnNldFNuaXBwZXQgPSAnMC4wJztcbiAgICBpZiAob2Zmc2V0U2hhcGUgIT0gbnVsbCkge1xuICAgICAgYmFja2VuZF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKHhTaGFwZSwgb2Zmc2V0U2hhcGUpO1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ29mZnNldCcpO1xuICAgICAgb2Zmc2V0U25pcHBldCA9ICdnZXRPZmZzZXRBdE91dENvb3JkcygpJztcbiAgICB9XG5cbiAgICBsZXQgc2NhbGVTbmlwcGV0ID0gJzEuMCc7XG4gICAgaWYgKHNjYWxlU2hhcGUgIT0gbnVsbCkge1xuICAgICAgYmFja2VuZF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKHhTaGFwZSwgc2NhbGVTaGFwZSk7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZXMucHVzaCgnc2NhbGUnKTtcbiAgICAgIHNjYWxlU25pcHBldCA9ICdnZXRTY2FsZUF0T3V0Q29vcmRzKCknO1xuICAgIH1cblxuICAgIHRoaXMub3V0cHV0U2hhcGUgPSB4U2hhcGU7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgZmxvYXQgeCA9IGdldFhBdE91dENvb3JkcygpO1xuICAgICAgICBmbG9hdCBtZWFuID0gZ2V0TWVhbkF0T3V0Q29vcmRzKCk7XG4gICAgICAgIGZsb2F0IHZhcmlhbmNlID0gZ2V0VmFyaWFuY2VBdE91dENvb3JkcygpO1xuICAgICAgICBmbG9hdCBvZmZzZXQgPSAke29mZnNldFNuaXBwZXR9O1xuICAgICAgICBmbG9hdCBzY2FsZSA9ICR7c2NhbGVTbmlwcGV0fTtcbiAgICAgICAgZmxvYXQgaW52ID0gc2NhbGUgKiBpbnZlcnNlc3FydCh2YXJpYW5jZSArIGZsb2F0KCR7dmFyaWFuY2VFcHNpbG9ufSkpO1xuICAgICAgICBzZXRPdXRwdXQoZG90KHZlYzMoeCwgLW1lYW4sIG9mZnNldCksIHZlYzMoaW52LCBpbnYsIDEpKSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nexport class BatchNormPackedProgram {\n constructor(xShape, meanShape, varianceShape, offsetShape, scaleShape, varianceEpsilon) {\n this.packedInputs = true;\n this.packedOutput = true;\n this.variableNames = ['x', 'mean', 'variance'];\n backend_util.assertAndGetBroadcastShape(xShape, meanShape);\n backend_util.assertAndGetBroadcastShape(xShape, varianceShape);\n let offsetSnippet = 'vec4(0.0)';\n if (offsetShape != null) {\n backend_util.assertAndGetBroadcastShape(xShape, offsetShape);\n this.variableNames.push('offset');\n offsetSnippet = 'getOffsetAtOutCoords()';\n }\n let scaleSnippet = 'vec4(1.0)';\n if (scaleShape != null) {\n backend_util.assertAndGetBroadcastShape(xShape, scaleShape);\n this.variableNames.push('scale');\n scaleSnippet = 'getScaleAtOutCoords()';\n }\n this.outputShape = xShape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtX3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2JhdGNobm9ybV9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLFlBQ0ksTUFBZ0IsRUFBRSxTQUFtQixFQUFFLGFBQXVCLEVBQzlELFdBQTBCLEVBQUUsVUFBeUIsRUFDckQsZUFBdUI7UUFOM0IsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFNbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0MsWUFBWSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzRCxZQUFZLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRS9ELElBQUksYUFBYSxHQUFHLFdBQVcsQ0FBQztRQUNoQyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDdkIsWUFBWSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxhQUFhLEdBQUcsd0JBQXdCLENBQUM7U0FDMUM7UUFFRCxJQUFJLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3RCLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsWUFBWSxHQUFHLHVCQUF1QixDQUFDO1NBQ3hDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRzs7d0JBRUksYUFBYTt1QkFDZCxZQUFZOzs7Ozs7eURBTXNCLGVBQWU7Ozs7S0FJbkUsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIEJhdGNoTm9ybVBhY2tlZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzOiBzdHJpbmdbXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgeFNoYXBlOiBudW1iZXJbXSwgbWVhblNoYXBlOiBudW1iZXJbXSwgdmFyaWFuY2VTaGFwZTogbnVtYmVyW10sXG4gICAgICBvZmZzZXRTaGFwZTogbnVtYmVyW118bnVsbCwgc2NhbGVTaGFwZTogbnVtYmVyW118bnVsbCxcbiAgICAgIHZhcmlhbmNlRXBzaWxvbjogbnVtYmVyKSB7XG4gICAgdGhpcy52YXJpYWJsZU5hbWVzID0gWyd4JywgJ21lYW4nLCAndmFyaWFuY2UnXTtcbiAgICBiYWNrZW5kX3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoeFNoYXBlLCBtZWFuU2hhcGUpO1xuICAgIGJhY2tlbmRfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZSh4U2hhcGUsIHZhcmlhbmNlU2hhcGUpO1xuXG4gICAgbGV0IG9mZnNldFNuaXBwZXQgPSAndmVjNCgwLjApJztcbiAgICBpZiAob2Zmc2V0U2hhcGUgIT0gbnVsbCkge1xuICAgICAgYmFja2VuZF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKHhTaGFwZSwgb2Zmc2V0U2hhcGUpO1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ29mZnNldCcpO1xuICAgICAgb2Zmc2V0U25pcHBldCA9ICdnZXRPZmZzZXRBdE91dENvb3JkcygpJztcbiAgICB9XG5cbiAgICBsZXQgc2NhbGVTbmlwcGV0ID0gJ3ZlYzQoMS4wKSc7XG4gICAgaWYgKHNjYWxlU2hhcGUgIT0gbnVsbCkge1xuICAgICAgYmFja2VuZF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKHhTaGFwZSwgc2NhbGVTaGFwZSk7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZXMucHVzaCgnc2NhbGUnKTtcbiAgICAgIHNjYWxlU25pcHBldCA9ICdnZXRTY2FsZUF0T3V0Q29vcmRzKCknO1xuICAgIH1cblxuICAgIHRoaXMub3V0cHV0U2hhcGUgPSB4U2hhcGU7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgdmVjNCBvZmZzZXQgPSAke29mZnNldFNuaXBwZXR9O1xuICAgICAgICB2ZWM0IHNjYWxlID0gJHtzY2FsZVNuaXBwZXR9O1xuXG4gICAgICAgIHZlYzQgeCA9IGdldFhBdE91dENvb3JkcygpO1xuICAgICAgICB2ZWM0IG1lYW4gPSBnZXRNZWFuQXRPdXRDb29yZHMoKTtcbiAgICAgICAgdmVjNCB2YXJpYW5jZSA9IGdldFZhcmlhbmNlQXRPdXRDb29yZHMoKTtcblxuICAgICAgICB2ZWM0IGludiA9IHNjYWxlICogaW52ZXJzZXNxcnQodmFyaWFuY2UgKyB2ZWM0KCR7dmFyaWFuY2VFcHNpbG9ufSkpO1xuXG4gICAgICAgIHNldE91dHB1dCgoeCAtIG1lYW4pICogaW52ICsgb2Zmc2V0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, FusedBatchNorm, util } from '@tensorflow/tfjs-core';\nimport { BatchNormProgram } from '../batchnorm_gpu';\nimport { BatchNormPackedProgram } from '../batchnorm_packed_gpu';\nexport const batchNorm = ({ inputs, backend, attrs }) => {\n const { x, mean, variance, offset, scale } = inputs;\n util.assert(mean.shape.length === variance.shape.length, () => 'Batch normalization gradient requires mean and variance to have ' +\n 'equal ranks.');\n util.assert(offset == null || mean.shape.length === offset.shape.length, () => 'Batch normalization gradient requires mean and offset to have ' +\n 'equal ranks.');\n util.assert(scale == null || mean.shape.length === scale.shape.length, () => 'Batch normalization gradient requires mean and scale to have ' +\n 'equal ranks.');\n let { varianceEpsilon } = attrs;\n if (varianceEpsilon == null) {\n varianceEpsilon = 0.001;\n }\n const finalInputs = [x, mean, variance];\n let offsetShape = null;\n if (offset != null) {\n offsetShape = offset.shape;\n finalInputs.push(offset);\n }\n let scaleShape = null;\n if (scale != null) {\n scaleShape = scale.shape;\n finalInputs.push(scale);\n }\n const program = env().getBool('WEBGL_PACK_NORMALIZATION') ?\n new BatchNormPackedProgram(x.shape, mean.shape, variance.shape, offsetShape, scaleShape, varianceEpsilon) :\n new BatchNormProgram(x.shape, mean.shape, variance.shape, offsetShape, scaleShape, varianceEpsilon);\n const output = backend.runWebGLProgram(program, finalInputs, finalInputs[0].dtype);\n return output;\n};\nexport const batchNormConfig = {\n kernelName: FusedBatchNorm,\n backendName: 'webgl',\n kernelFunc: batchNorm,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hOb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0JhdGNoTm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUFFLGNBQWMsRUFBbUYsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHakosT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUlILENBQUMsRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxFQUFFLEVBQUU7SUFDOUMsTUFBTSxFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDM0MsR0FBRyxFQUFFLENBQUMsa0VBQWtFO1FBQ3BFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDM0QsR0FBRyxFQUFFLENBQUMsZ0VBQWdFO1FBQ2xFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDekQsR0FBRyxFQUFFLENBQUMsK0RBQStEO1FBQ2pFLGNBQWMsQ0FBQyxDQUFDO0lBRXhCLElBQUksRUFBQyxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDOUIsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO1FBQzNCLGVBQWUsR0FBRyxLQUFLLENBQUM7S0FDekI7SUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFeEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFCO0lBRUQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLHNCQUFzQixDQUN0QixDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUM1RCxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksZ0JBQWdCLENBQ2hCLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQzVELGVBQWUsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sTUFBTSxHQUNSLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQjtJQUMzQyxVQUFVLEVBQUUsY0FBYztJQUMxQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2VudiwgRnVzZWRCYXRjaE5vcm0sIEZ1c2VkQmF0Y2hOb3JtQXR0cnMsIEZ1c2VkQmF0Y2hOb3JtSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0JhdGNoTm9ybVByb2dyYW19IGZyb20gJy4uL2JhdGNobm9ybV9ncHUnO1xuaW1wb3J0IHtCYXRjaE5vcm1QYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9iYXRjaG5vcm1fcGFja2VkX2dwdSc7XG5cbmV4cG9ydCBjb25zdCBiYXRjaE5vcm06IChwYXJhbXM6IHtcbiAgaW5wdXRzOiBGdXNlZEJhdGNoTm9ybUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IEZ1c2VkQmF0Y2hOb3JtQXR0cnNcbn0pID0+IFRlbnNvckluZm8gPSAoe2lucHV0cywgYmFja2VuZCwgYXR0cnN9KSA9PiB7XG4gIGNvbnN0IHt4LCBtZWFuLCB2YXJpYW5jZSwgb2Zmc2V0LCBzY2FsZX0gPSBpbnB1dHM7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICBtZWFuLnNoYXBlLmxlbmd0aCA9PT0gdmFyaWFuY2Uuc2hhcGUubGVuZ3RoLFxuICAgICAgKCkgPT4gJ0JhdGNoIG5vcm1hbGl6YXRpb24gZ3JhZGllbnQgcmVxdWlyZXMgbWVhbiBhbmQgdmFyaWFuY2UgdG8gaGF2ZSAnICtcbiAgICAgICAgICAnZXF1YWwgcmFua3MuJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgb2Zmc2V0ID09IG51bGwgfHwgbWVhbi5zaGFwZS5sZW5ndGggPT09IG9mZnNldC5zaGFwZS5sZW5ndGgsXG4gICAgICAoKSA9PiAnQmF0Y2ggbm9ybWFsaXphdGlvbiBncmFkaWVudCByZXF1aXJlcyBtZWFuIGFuZCBvZmZzZXQgdG8gaGF2ZSAnICtcbiAgICAgICAgICAnZXF1YWwgcmFua3MuJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgc2NhbGUgPT0gbnVsbCB8fCBtZWFuLnNoYXBlLmxlbmd0aCA9PT0gc2NhbGUuc2hhcGUubGVuZ3RoLFxuICAgICAgKCkgPT4gJ0JhdGNoIG5vcm1hbGl6YXRpb24gZ3JhZGllbnQgcmVxdWlyZXMgbWVhbiBhbmQgc2NhbGUgdG8gaGF2ZSAnICtcbiAgICAgICAgICAnZXF1YWwgcmFua3MuJyk7XG5cbiAgbGV0IHt2YXJpYW5jZUVwc2lsb259ID0gYXR0cnM7XG4gIGlmICh2YXJpYW5jZUVwc2lsb24gPT0gbnVsbCkge1xuICAgIHZhcmlhbmNlRXBzaWxvbiA9IDAuMDAxO1xuICB9XG5cbiAgY29uc3QgZmluYWxJbnB1dHMgPSBbeCwgbWVhbiwgdmFyaWFuY2VdO1xuXG4gIGxldCBvZmZzZXRTaGFwZSA9IG51bGw7XG4gIGlmIChvZmZzZXQgIT0gbnVsbCkge1xuICAgIG9mZnNldFNoYXBlID0gb2Zmc2V0LnNoYXBlO1xuICAgIGZpbmFsSW5wdXRzLnB1c2gob2Zmc2V0KTtcbiAgfVxuXG4gIGxldCBzY2FsZVNoYXBlID0gbnVsbDtcbiAgaWYgKHNjYWxlICE9IG51bGwpIHtcbiAgICBzY2FsZVNoYXBlID0gc2NhbGUuc2hhcGU7XG4gICAgZmluYWxJbnB1dHMucHVzaChzY2FsZSk7XG4gIH1cblxuICBjb25zdCBwcm9ncmFtID0gZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19OT1JNQUxJWkFUSU9OJykgP1xuICAgICAgbmV3IEJhdGNoTm9ybVBhY2tlZFByb2dyYW0oXG4gICAgICAgICAgeC5zaGFwZSwgbWVhbi5zaGFwZSwgdmFyaWFuY2Uuc2hhcGUsIG9mZnNldFNoYXBlLCBzY2FsZVNoYXBlLFxuICAgICAgICAgIHZhcmlhbmNlRXBzaWxvbikgOlxuICAgICAgbmV3IEJhdGNoTm9ybVByb2dyYW0oXG4gICAgICAgICAgeC5zaGFwZSwgbWVhbi5zaGFwZSwgdmFyaWFuY2Uuc2hhcGUsIG9mZnNldFNoYXBlLCBzY2FsZVNoYXBlLFxuICAgICAgICAgIHZhcmlhbmNlRXBzaWxvbik7XG4gIGNvbnN0IG91dHB1dCA9XG4gICAgICBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBmaW5hbElucHV0cywgZmluYWxJbnB1dHNbMF0uZHR5cGUpO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5leHBvcnQgY29uc3QgYmF0Y2hOb3JtQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZ1c2VkQmF0Y2hOb3JtLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogYmF0Y2hOb3JtIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class SliceProgram {\n constructor(destSize) {\n this.variableNames = ['source'];\n this.outputShape = destSize;\n this.rank = destSize.length;\n const dtype = getCoordsDataType(this.rank);\n this.customUniforms = [{ name: 'start', arrayIndex: this.rank, type: 'int' }];\n const sourceCoords = getCoords(this.rank);\n let body;\n const coordSum = destSize.map((_, i) => {\n return `sourceLoc.${coords[i]} = start[${i}] + coords.${coords[i]};`;\n });\n body = `\n ${dtype} sourceLoc;\n ${dtype} coords = getOutputCoords();\n ${coordSum.join('\\n')}\n `;\n this.userCode = `\n void main() {\n ${body}\n setOutput(getSource(${sourceCoords}));\n }\n `;\n }\n}\nconst coords = ['x', 'y', 'z', 'w', 'u', 'v'];\nfunction getCoords(rank) {\n if (rank === 1) {\n return 'sourceLoc';\n }\n else if (rank <= 6) {\n return coords.slice(0, rank).map(x => 'sourceLoc.' + x).join(',');\n }\n else {\n throw Error(`Slicing for rank ${rank} is not yet supported`);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2VfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9zbGljZV9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGlCQUFpQixFQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFFakUsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFBWSxRQUFrQjtRQU45QixrQkFBYSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFPekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRTVCLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxJQUFZLENBQUM7UUFDakIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxPQUFPLGFBQWEsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsY0FBYyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksR0FBRztVQUNELEtBQUs7VUFDTCxLQUFLO1VBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7T0FDdEIsQ0FBQztRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUc7O1VBRVYsSUFBSTs4QkFDZ0IsWUFBWTs7S0FFckMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUU5QyxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzdCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNkLE9BQU8sV0FBVyxDQUFDO0tBQ3BCO1NBQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuRTtTQUFNO1FBQ0wsTUFBTSxLQUFLLENBQUMsb0JBQW9CLElBQUksdUJBQXVCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDb29yZHNEYXRhVHlwZSwgVW5pZm9ybVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFNsaWNlUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3NvdXJjZSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIHJhbms6IG51bWJlcjtcbiAgY3VzdG9tVW5pZm9ybXM6IEFycmF5PHtuYW1lOiBzdHJpbmc7IGFycmF5SW5kZXg6IG51bWJlcjsgdHlwZTogVW5pZm9ybVR5cGU7fT47XG5cbiAgY29uc3RydWN0b3IoZGVzdFNpemU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGRlc3RTaXplO1xuICAgIHRoaXMucmFuayA9IGRlc3RTaXplLmxlbmd0aDtcblxuICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUodGhpcy5yYW5rKTtcbiAgICB0aGlzLmN1c3RvbVVuaWZvcm1zID0gW3tuYW1lOiAnc3RhcnQnLCBhcnJheUluZGV4OiB0aGlzLnJhbmssIHR5cGU6ICdpbnQnfV07XG4gICAgY29uc3Qgc291cmNlQ29vcmRzID0gZ2V0Q29vcmRzKHRoaXMucmFuayk7XG5cbiAgICBsZXQgYm9keTogc3RyaW5nO1xuICAgIGNvbnN0IGNvb3JkU3VtID0gZGVzdFNpemUubWFwKChfLCBpKSA9PiB7XG4gICAgICByZXR1cm4gYHNvdXJjZUxvYy4ke2Nvb3Jkc1tpXX0gPSBzdGFydFske2l9XSArIGNvb3Jkcy4ke2Nvb3Jkc1tpXX07YDtcbiAgICB9KTtcbiAgICBib2R5ID0gYFxuICAgICAgICAke2R0eXBlfSBzb3VyY2VMb2M7XG4gICAgICAgICR7ZHR5cGV9IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAke2Nvb3JkU3VtLmpvaW4oJ1xcbicpfVxuICAgICAgYDtcbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke2JvZHl9XG4gICAgICAgIHNldE91dHB1dChnZXRTb3VyY2UoJHtzb3VyY2VDb29yZHN9KSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuXG5jb25zdCBjb29yZHMgPSBbJ3gnLCAneScsICd6JywgJ3cnLCAndScsICd2J107XG5cbmZ1bmN0aW9uIGdldENvb3JkcyhyYW5rOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAocmFuayA9PT0gMSkge1xuICAgIHJldHVybiAnc291cmNlTG9jJztcbiAgfSBlbHNlIGlmIChyYW5rIDw9IDYpIHtcbiAgICByZXR1cm4gY29vcmRzLnNsaWNlKDAsIHJhbmspLm1hcCh4ID0+ICdzb3VyY2VMb2MuJyArIHgpLmpvaW4oJywnKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcihgU2xpY2luZyBmb3IgcmFuayAke3Jhbmt9IGlzIG5vdCB5ZXQgc3VwcG9ydGVkYCk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport class SlicePackedProgram {\n constructor(destSize) {\n this.variableNames = ['source'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = destSize;\n this.rank = destSize.length;\n this.customUniforms = [{ name: 'start', arrayIndex: this.rank, type: 'int' }];\n const dtype = getCoordsDataType(this.rank);\n const coords = getChannels('coords', this.rank);\n const sourceLoc = getChannels('sourceLoc', this.rank);\n const innerDims = this.rank === 1 ? 'sourceLoc' : `vec2(${sourceLoc.slice(-2).join()})`;\n const getChannel = `getChannel(getSource(${sourceLoc.join()}), ${innerDims})`;\n const 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 `;\n const 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 `;\n const sourceLocSetup = this.rank <= 4 ?\n `sourceLoc = coords +\n ${dtype}(${destSize.map((_, i) => `start[${i}]`).join()});` :\n destSize.map((_, i) => `${sourceLoc[i]} = ${coords[i]} + start[${i}];`)\n .join('\\n');\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2VfcGFja2VkX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvc2xpY2VfcGFja2VkX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFFakUsTUFBTSxPQUFPLGtCQUFrQjtJQVM3QixZQUFZLFFBQWtCO1FBUjlCLGtCQUFhLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQU9sQixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEQsTUFBTSxTQUFTLEdBQ1gsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztRQUMxRSxNQUFNLFVBQVUsR0FDWix3QkFBd0IsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLFNBQVMsR0FBRyxDQUFDO1FBQy9ELE1BQU0sUUFBUSxHQUFHO21CQUNGLFVBQVU7Y0FDZixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO3FCQUNmLFVBQVU7WUFDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDOztLQUUvQixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2NBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7cUJBQ2YsVUFBVTtnQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Y0FDcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO3VCQUNmLFVBQVU7OztLQUc1QixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuQztjQUNNLEtBQUssSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2lCQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRzs7VUFFVixLQUFLO1VBQ0wsS0FBSztVQUNMLGNBQWM7O1VBRWQsUUFBUTtVQUNSLFFBQVE7OztLQUdiLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDaGFubmVsc30gZnJvbSAnLi9wYWNraW5nX3V0aWwnO1xuaW1wb3J0IHtnZXRDb29yZHNEYXRhVHlwZSwgVW5pZm9ybVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFNsaWNlUGFja2VkUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3NvdXJjZSddO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIHJhbms6IG51bWJlcjtcbiAgY3VzdG9tVW5pZm9ybXM6IEFycmF5PHtuYW1lOiBzdHJpbmc7IGFycmF5SW5kZXg6IG51bWJlcjsgdHlwZTogVW5pZm9ybVR5cGU7fT47XG5cbiAgY29uc3RydWN0b3IoZGVzdFNpemU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGRlc3RTaXplO1xuICAgIHRoaXMucmFuayA9IGRlc3RTaXplLmxlbmd0aDtcbiAgICB0aGlzLmN1c3RvbVVuaWZvcm1zID0gW3tuYW1lOiAnc3RhcnQnLCBhcnJheUluZGV4OiB0aGlzLnJhbmssIHR5cGU6ICdpbnQnfV07XG4gICAgY29uc3QgZHR5cGUgPSBnZXRDb29yZHNEYXRhVHlwZSh0aGlzLnJhbmspO1xuICAgIGNvbnN0IGNvb3JkcyA9IGdldENoYW5uZWxzKCdjb29yZHMnLCB0aGlzLnJhbmspO1xuICAgIGNvbnN0IHNvdXJjZUxvYyA9IGdldENoYW5uZWxzKCdzb3VyY2VMb2MnLCB0aGlzLnJhbmspO1xuXG4gICAgY29uc3QgaW5uZXJEaW1zID1cbiAgICAgICAgdGhpcy5yYW5rID09PSAxID8gJ3NvdXJjZUxvYycgOiBgdmVjMigke3NvdXJjZUxvYy5zbGljZSgtMikuam9pbigpfSlgO1xuICAgIGNvbnN0IGdldENoYW5uZWwgPVxuICAgICAgICBgZ2V0Q2hhbm5lbChnZXRTb3VyY2UoJHtzb3VyY2VMb2Muam9pbigpfSksICR7aW5uZXJEaW1zfSlgO1xuICAgIGNvbnN0IHVwcGVyUm93ID0gYFxuICAgICAgcmVzdWx0LnggPSAke2dldENoYW5uZWx9O1xuICAgICAgaWYgKCsrJHtjb29yZHNbdGhpcy5yYW5rIC0gMV19IDwgJHtkZXN0U2l6ZVt0aGlzLnJhbmsgLSAxXX0pIHtcbiAgICAgICAgKyske3NvdXJjZUxvY1t0aGlzLnJhbmsgLSAxXX07XG4gICAgICAgIHJlc3VsdC55ID0gJHtnZXRDaGFubmVsfTtcbiAgICAgICAgLS0ke3NvdXJjZUxvY1t0aGlzLnJhbmsgLSAxXX07XG4gICAgICB9XG4gICAgYDtcbiAgICBjb25zdCBsb3dlclJvdyA9IHRoaXMucmFuayA9PT0gMSA/ICcnIDogYFxuICAgICAgLS0ke2Nvb3Jkc1t0aGlzLnJhbmsgLSAxXX07XG4gICAgICBpZiAoKyske2Nvb3Jkc1t0aGlzLnJhbmsgLSAyXX0gPCAke2Rlc3RTaXplW3RoaXMucmFuayAtIDJdfSkge1xuICAgICAgICArKyR7c291cmNlTG9jW3RoaXMucmFuayAtIDJdfTtcbiAgICAgICAgcmVzdWx0LnogPSAke2dldENoYW5uZWx9O1xuICAgICAgICBpZiAoKyske2Nvb3Jkc1t0aGlzLnJhbmsgLSAxXX0gPCAke2Rlc3RTaXplW3RoaXMucmFuayAtIDFdfSkge1xuICAgICAgICAgICsrJHtzb3VyY2VMb2NbdGhpcy5yYW5rIC0gMV19O1xuICAgICAgICAgIHJlc3VsdC53ID0gJHtnZXRDaGFubmVsfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGA7XG5cbiAgICBjb25zdCBzb3VyY2VMb2NTZXR1cCA9IHRoaXMucmFuayA8PSA0ID9cbiAgICAgICAgYHNvdXJjZUxvYyA9IGNvb3JkcyArXG4gICAgICAgICAgICAke2R0eXBlfSgke2Rlc3RTaXplLm1hcCgoXywgaSkgPT4gYHN0YXJ0WyR7aX1dYCkuam9pbigpfSk7YCA6XG4gICAgICAgIGRlc3RTaXplLm1hcCgoXywgaSkgPT4gYCR7c291cmNlTG9jW2ldfSA9ICR7Y29vcmRzW2ldfSArIHN0YXJ0WyR7aX1dO2ApXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgJHtkdHlwZX0gY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgICR7ZHR5cGV9IHNvdXJjZUxvYztcbiAgICAgICAgJHtzb3VyY2VMb2NTZXR1cH1cbiAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAuKTtcbiAgICAgICAgJHt1cHBlclJvd31cbiAgICAgICAgJHtsb3dlclJvd31cbiAgICAgICAgc2V0T3V0cHV0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, Slice, slice_util, util } from '@tensorflow/tfjs-core';\nimport { sliceImplCPU } from '../kernel_utils/shared';\nimport { SliceProgram } from '../slice_gpu';\nimport { SlicePackedProgram } from '../slice_packed_gpu';\nfunction shallowSlice(x, begin, size, backend) {\n const xTexData = backend.texData.get(x.dataId);\n const t = backend.makeTensorInfo(size, x.dtype);\n const newTexData = backend.texData.get(t.dataId);\n // Copy texture data from the original tensor.\n Object.assign(newTexData, xTexData);\n newTexData.refCount = 1;\n newTexData.shape = size;\n newTexData.dtype = x.dtype;\n let flatOffset = slice_util.computeFlatOffset(begin, util.computeStrides(x.shape));\n if (xTexData.slice) {\n // We are slicing an already sliced tensor, so we have to accumulate\n // the offset.\n flatOffset += xTexData.slice.flatOffset;\n }\n newTexData.slice = {\n flatOffset,\n // Point to the original dataId, which is used to do ref counting.\n origDataId: xTexData.slice && xTexData.slice.origDataId || x.dataId\n };\n // Increase the ref count for that data bucket.\n const refCount = backend.dataRefCount.get(newTexData.slice.origDataId) || 1;\n backend.dataRefCount.set(newTexData.slice.origDataId, refCount + 1);\n return t;\n}\nexport function slice(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { begin, size } = attrs;\n const [$begin, $size] = slice_util.parseSliceParams(x, begin, size);\n slice_util.assertParamsValid(x, $begin, $size);\n if (util.sizeFromShape($size) === 0) {\n return backend.makeTensorInfo($size, x.dtype, []);\n }\n // Run on cpu if dtype is string. For string, the backend represents it\n // as Uint8Array[], where each Uint8Array is a character. Given that the\n // computation is only on the outer array, uploading the whole data onto\n // gpu is wasteful. Also, currently webgl doesn't have a design to\n // upload and retrieve Uint8Array[] between cpu and gpu. Therefore, we\n // just run the kernel on cpu if dtype is string.\n if (backend.shouldExecuteOnCPU([x]) || x.dtype === 'string') {\n const xTexData = backend.texData.get(x.dataId);\n const outValues = sliceImplCPU(xTexData.values, $begin, $size, x.shape, x.dtype);\n return backend.makeTensorInfo($size, x.dtype, outValues);\n }\n const { isPacked } = backend.texData.get(x.dataId);\n const isContinous = slice_util.isSliceContinous(x.shape, $begin, $size);\n if (isPacked || !isContinous) {\n const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n new SlicePackedProgram($size) :\n new SliceProgram($size);\n const customValues = [$begin];\n return backend.runWebGLProgram(program, [x], x.dtype, customValues);\n }\n backend.uploadToGPU(x.dataId);\n return shallowSlice(x, $begin, $size, backend);\n}\nexport const sliceConfig = {\n kernelName: Slice,\n backendName: 'webgl',\n kernelFunc: slice\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvU2xpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBNEIsS0FBSyxFQUFFLFVBQVUsRUFBbUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHOUksT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsU0FBUyxZQUFZLENBQ2pCLENBQWEsRUFBRSxLQUFlLEVBQUUsSUFBYyxFQUFFLE9BQXlCO0lBQzNFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELDhDQUE4QztJQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwQyxVQUFVLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN4QixVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN4QixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0IsSUFBSSxVQUFVLEdBQ1YsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtRQUNsQixvRUFBb0U7UUFDcEUsY0FBYztRQUNkLFVBQVUsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztLQUN6QztJQUNELFVBQVUsQ0FBQyxLQUFLLEdBQUc7UUFDakIsVUFBVTtRQUNWLGtFQUFrRTtRQUNsRSxVQUFVLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTTtLQUNwRSxDQUFDO0lBRUYsK0NBQStDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVFLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUNqQixJQUF5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUU1QixNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRS9DLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ25EO0lBRUQsdUVBQXVFO0lBQ3ZFLHdFQUF3RTtJQUN4RSx3RUFBd0U7SUFDeEUsa0VBQWtFO0lBQ2xFLHNFQUFzRTtJQUN0RSxpREFBaUQ7SUFDakQsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQzFCLFFBQVEsQ0FBQyxNQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEUsSUFBSSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDNUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztLQUNyRTtJQUNELE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLE9BQU8sWUFBWSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxLQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2VudiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTbGljZSwgc2xpY2VfdXRpbCwgU2xpY2VBdHRycywgU2xpY2VJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3NsaWNlSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5pbXBvcnQge1NsaWNlUHJvZ3JhbX0gZnJvbSAnLi4vc2xpY2VfZ3B1JztcbmltcG9ydCB7U2xpY2VQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9zbGljZV9wYWNrZWRfZ3B1JztcblxuZnVuY3Rpb24gc2hhbGxvd1NsaWNlKFxuICAgIHg6IFRlbnNvckluZm8sIGJlZ2luOiBudW1iZXJbXSwgc2l6ZTogbnVtYmVyW10sIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wpIHtcbiAgY29uc3QgeFRleERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgY29uc3QgdCA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8oc2l6ZSwgeC5kdHlwZSk7XG4gIGNvbnN0IG5ld1RleERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHQuZGF0YUlkKTtcbiAgLy8gQ29weSB0ZXh0dXJlIGRhdGEgZnJvbSB0aGUgb3JpZ2luYWwgdGVuc29yLlxuICBPYmplY3QuYXNzaWduKG5ld1RleERhdGEsIHhUZXhEYXRhKTtcbiAgbmV3VGV4RGF0YS5yZWZDb3VudCA9IDE7XG4gIG5ld1RleERhdGEuc2hhcGUgPSBzaXplO1xuICBuZXdUZXhEYXRhLmR0eXBlID0geC5kdHlwZTtcbiAgbGV0IGZsYXRPZmZzZXQgPVxuICAgICAgc2xpY2VfdXRpbC5jb21wdXRlRmxhdE9mZnNldChiZWdpbiwgdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKSk7XG4gIGlmICh4VGV4RGF0YS5zbGljZSkge1xuICAgIC8vIFdlIGFyZSBzbGljaW5nIGFuIGFscmVhZHkgc2xpY2VkIHRlbnNvciwgc28gd2UgaGF2ZSB0byBhY2N1bXVsYXRlXG4gICAgLy8gdGhlIG9mZnNldC5cbiAgICBmbGF0T2Zmc2V0ICs9IHhUZXhEYXRhLnNsaWNlLmZsYXRPZmZzZXQ7XG4gIH1cbiAgbmV3VGV4RGF0YS5zbGljZSA9IHtcbiAgICBmbGF0T2Zmc2V0LFxuICAgIC8vIFBvaW50IHRvIHRoZSBvcmlnaW5hbCBkYXRhSWQsIHdoaWNoIGlzIHVzZWQgdG8gZG8gcmVmIGNvdW50aW5nLlxuICAgIG9yaWdEYXRhSWQ6IHhUZXhEYXRhLnNsaWNlICYmIHhUZXhEYXRhLnNsaWNlLm9yaWdEYXRhSWQgfHwgeC5kYXRhSWRcbiAgfTtcblxuICAvLyBJbmNyZWFzZSB0aGUgcmVmIGNvdW50IGZvciB0aGF0IGRhdGEgYnVja2V0LlxuICBjb25zdCByZWZDb3VudCA9IGJhY2tlbmQuZGF0YVJlZkNvdW50LmdldChuZXdUZXhEYXRhLnNsaWNlLm9yaWdEYXRhSWQpIHx8IDE7XG4gIGJhY2tlbmQuZGF0YVJlZkNvdW50LnNldChuZXdUZXhEYXRhLnNsaWNlLm9yaWdEYXRhSWQsIHJlZkNvdW50ICsgMSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UoXG4gICAgYXJnczoge2lucHV0czogU2xpY2VJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF0dHJzOiBTbGljZUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2JlZ2luLCBzaXplfSA9IGF0dHJzO1xuXG4gIGNvbnN0IFskYmVnaW4sICRzaXplXSA9IHNsaWNlX3V0aWwucGFyc2VTbGljZVBhcmFtcyh4LCBiZWdpbiwgc2l6ZSk7XG4gIHNsaWNlX3V0aWwuYXNzZXJ0UGFyYW1zVmFsaWQoeCwgJGJlZ2luLCAkc2l6ZSk7XG5cbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZSgkc2l6ZSkgPT09IDApIHtcbiAgICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbygkc2l6ZSwgeC5kdHlwZSwgW10pO1xuICB9XG5cbiAgLy8gUnVuIG9uIGNwdSBpZiBkdHlwZSBpcyBzdHJpbmcuIEZvciBzdHJpbmcsIHRoZSBiYWNrZW5kIHJlcHJlc2VudHMgaXRcbiAgLy8gYXMgVWludDhBcnJheVtdLCB3aGVyZSBlYWNoIFVpbnQ4QXJyYXkgaXMgYSBjaGFyYWN0ZXIuIEdpdmVuIHRoYXQgdGhlXG4gIC8vIGNvbXB1dGF0aW9uIGlzIG9ubHkgb24gdGhlIG91dGVyIGFycmF5LCB1cGxvYWRpbmcgdGhlIHdob2xlIGRhdGEgb250b1xuICAvLyBncHUgaXMgd2FzdGVmdWwuIEFsc28sIGN1cnJlbnRseSB3ZWJnbCBkb2Vzbid0IGhhdmUgYSBkZXNpZ24gdG9cbiAgLy8gdXBsb2FkIGFuZCByZXRyaWV2ZSBVaW50OEFycmF5W10gYmV0d2VlbiBjcHUgYW5kIGdwdS4gVGhlcmVmb3JlLCB3ZVxuICAvLyBqdXN0IHJ1biB0aGUga2VybmVsIG9uIGNwdSBpZiBkdHlwZSBpcyBzdHJpbmcuXG4gIGlmIChiYWNrZW5kLnNob3VsZEV4ZWN1dGVPbkNQVShbeF0pIHx8IHguZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgeFRleERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgICBjb25zdCBvdXRWYWx1ZXMgPSBzbGljZUltcGxDUFUoXG4gICAgICAgIHhUZXhEYXRhLnZhbHVlcyBhcyBUeXBlZEFycmF5LCAkYmVnaW4sICRzaXplLCB4LnNoYXBlLCB4LmR0eXBlKTtcbiAgICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbygkc2l6ZSwgeC5kdHlwZSwgb3V0VmFsdWVzKTtcbiAgfVxuXG4gIGNvbnN0IHtpc1BhY2tlZH0gPSBiYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgY29uc3QgaXNDb250aW5vdXMgPSBzbGljZV91dGlsLmlzU2xpY2VDb250aW5vdXMoeC5zaGFwZSwgJGJlZ2luLCAkc2l6ZSk7XG4gIGlmIChpc1BhY2tlZCB8fCAhaXNDb250aW5vdXMpIHtcbiAgICBjb25zdCBwcm9ncmFtID0gZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19BUlJBWV9PUEVSQVRJT05TJykgP1xuICAgICAgICBuZXcgU2xpY2VQYWNrZWRQcm9ncmFtKCRzaXplKSA6XG4gICAgICAgIG5ldyBTbGljZVByb2dyYW0oJHNpemUpO1xuICAgIGNvbnN0IGN1c3RvbVZhbHVlcyA9IFskYmVnaW5dO1xuICAgIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeF0sIHguZHR5cGUsIGN1c3RvbVZhbHVlcyk7XG4gIH1cbiAgYmFja2VuZC51cGxvYWRUb0dQVSh4LmRhdGFJZCk7XG4gIHJldHVybiBzaGFsbG93U2xpY2UoeCwgJGJlZ2luLCAkc2l6ZSwgYmFja2VuZCk7XG59XG5cbmV4cG9ydCBjb25zdCBzbGljZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTbGljZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHNsaWNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, BatchToSpaceND, util } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nimport { transpose } from './Transpose';\nexport const batchToSpaceND = (args) => {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { blockShape, crops } = attrs;\n util.assert(x.shape.length <= 4, () => 'batchToSpaceND for rank > 4 with a WebGL backend not ' +\n 'implemented yet');\n const prod = blockShape.reduce((a, b) => a * b);\n const reshaped = backend_util.getReshaped(x.shape, blockShape, prod);\n const permuted = backend_util.getPermuted(reshaped.length, blockShape.length);\n const reshapedPermuted = backend_util.getReshapedPermuted(x.shape, blockShape, prod);\n const sliceBeginCoords = backend_util.getSliceBeginCoords(crops, blockShape.length);\n const sliceSize = backend_util.getSliceSize(reshapedPermuted, crops, blockShape.length);\n const toDispose = [];\n const reshapedIntermediate = reshape({ inputs: { x }, backend, attrs: { shape: reshaped } });\n const transposedIntermediate = transpose({ inputs: { x: reshapedIntermediate }, backend, attrs: { perm: permuted } });\n const reshapedIntermediate2 = reshape({\n inputs: { x: transposedIntermediate },\n backend,\n attrs: { shape: reshapedPermuted }\n });\n const sliced = slice({\n inputs: { x: reshapedIntermediate2 },\n backend,\n attrs: { begin: sliceBeginCoords, size: sliceSize }\n });\n toDispose.push(reshapedIntermediate);\n toDispose.push(transposedIntermediate);\n toDispose.push(reshapedIntermediate2);\n toDispose.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return sliced;\n};\nexport const batchToSpaceNDConfig = {\n kernelName: BatchToSpaceND,\n backendName: 'webgl',\n kernelFunc: batchToSpaceND\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hUb1NwYWNlTkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQmF0Y2hUb1NwYWNlTkQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQW1GLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTFKLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLElBSTlCLEVBQWMsRUFBRTtJQUNmLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWxDLElBQUksQ0FBQyxNQUFNLENBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUNuQixHQUFHLEVBQUUsQ0FBQyx1REFBdUQ7UUFDekQsaUJBQWlCLENBQUMsQ0FBQztJQUMzQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRWhELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RSxNQUFNLGdCQUFnQixHQUNsQixZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsTUFBTSxnQkFBZ0IsR0FDbEIsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0QsTUFBTSxTQUFTLEdBQ1gsWUFBWSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFFLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUVyQixNQUFNLG9CQUFvQixHQUN0QixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUM5RCxNQUFNLHNCQUFzQixHQUFHLFNBQVMsQ0FDcEMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUMzRSxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQztRQUNwQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUM7UUFDbkMsT0FBTztRQUNQLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBQztLQUNqQyxDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLHFCQUFxQixFQUFDO1FBQ2xDLE9BQU87UUFDUCxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQztLQUNsRCxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUV0QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWlCO0lBQ2hELFVBQVUsRUFBRSxjQUFjO0lBQzFCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxjQUF1QztDQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQmF0Y2hUb1NwYWNlTkQsIEJhdGNoVG9TcGFjZU5EQXR0cnMsIEJhdGNoVG9TcGFjZU5ESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5cbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4vU2xpY2UnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vVHJhbnNwb3NlJztcblxuZXhwb3J0IGNvbnN0IGJhdGNoVG9TcGFjZU5EID0gKGFyZ3M6IHtcbiAgaW5wdXRzOiBCYXRjaFRvU3BhY2VORElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IEJhdGNoVG9TcGFjZU5EQXR0cnNcbn0pOiBUZW5zb3JJbmZvID0+IHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YmxvY2tTaGFwZSwgY3JvcHN9ID0gYXR0cnM7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4LnNoYXBlLmxlbmd0aCA8PSA0LFxuICAgICAgKCkgPT4gJ2JhdGNoVG9TcGFjZU5EIGZvciByYW5rID4gNCB3aXRoIGEgV2ViR0wgYmFja2VuZCBub3QgJyArXG4gICAgICAgICAgJ2ltcGxlbWVudGVkIHlldCcpO1xuICBjb25zdCBwcm9kID0gYmxvY2tTaGFwZS5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiKTtcblxuICBjb25zdCByZXNoYXBlZCA9IGJhY2tlbmRfdXRpbC5nZXRSZXNoYXBlZCh4LnNoYXBlLCBibG9ja1NoYXBlLCBwcm9kKTtcbiAgY29uc3QgcGVybXV0ZWQgPSBiYWNrZW5kX3V0aWwuZ2V0UGVybXV0ZWQocmVzaGFwZWQubGVuZ3RoLCBibG9ja1NoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IHJlc2hhcGVkUGVybXV0ZWQgPVxuICAgICAgYmFja2VuZF91dGlsLmdldFJlc2hhcGVkUGVybXV0ZWQoeC5zaGFwZSwgYmxvY2tTaGFwZSwgcHJvZCk7XG4gIGNvbnN0IHNsaWNlQmVnaW5Db29yZHMgPVxuICAgICAgYmFja2VuZF91dGlsLmdldFNsaWNlQmVnaW5Db29yZHMoY3JvcHMsIGJsb2NrU2hhcGUubGVuZ3RoKTtcbiAgY29uc3Qgc2xpY2VTaXplID1cbiAgICAgIGJhY2tlbmRfdXRpbC5nZXRTbGljZVNpemUocmVzaGFwZWRQZXJtdXRlZCwgY3JvcHMsIGJsb2NrU2hhcGUubGVuZ3RoKTtcblxuICBjb25zdCB0b0Rpc3Bvc2UgPSBbXTtcblxuICBjb25zdCByZXNoYXBlZEludGVybWVkaWF0ZSA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogcmVzaGFwZWR9fSk7XG4gIGNvbnN0IHRyYW5zcG9zZWRJbnRlcm1lZGlhdGUgPSB0cmFuc3Bvc2UoXG4gICAgICB7aW5wdXRzOiB7eDogcmVzaGFwZWRJbnRlcm1lZGlhdGV9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGVkfX0pO1xuICBjb25zdCByZXNoYXBlZEludGVybWVkaWF0ZTIgPSByZXNoYXBlKHtcbiAgICBpbnB1dHM6IHt4OiB0cmFuc3Bvc2VkSW50ZXJtZWRpYXRlfSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7c2hhcGU6IHJlc2hhcGVkUGVybXV0ZWR9XG4gIH0pO1xuICBjb25zdCBzbGljZWQgPSBzbGljZSh7XG4gICAgaW5wdXRzOiB7eDogcmVzaGFwZWRJbnRlcm1lZGlhdGUyfSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7YmVnaW46IHNsaWNlQmVnaW5Db29yZHMsIHNpemU6IHNsaWNlU2l6ZX1cbiAgfSk7XG5cbiAgdG9EaXNwb3NlLnB1c2gocmVzaGFwZWRJbnRlcm1lZGlhdGUpO1xuICB0b0Rpc3Bvc2UucHVzaCh0cmFuc3Bvc2VkSW50ZXJtZWRpYXRlKTtcbiAgdG9EaXNwb3NlLnB1c2gocmVzaGFwZWRJbnRlcm1lZGlhdGUyKTtcblxuICB0b0Rpc3Bvc2UuZm9yRWFjaCh0ID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odCkpO1xuXG4gIHJldHVybiBzbGljZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgYmF0Y2hUb1NwYWNlTkRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQmF0Y2hUb1NwYWNlTkQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBiYXRjaFRvU3BhY2VORCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Bincount } from '@tensorflow/tfjs-core';\nimport { bincountImplCPU } from '../kernel_utils/shared';\nexport function bincount(args) {\n const { inputs, backend, attrs } = args;\n const { x, weights } = inputs;\n const { size } = attrs;\n const xVals = backend.readSync(x.dataId);\n const weightsVals = backend.readSync(weights.dataId);\n const outVals = bincountImplCPU(xVals, weightsVals, weights.dtype, weights.shape, size);\n return backend.makeTensorInfo([size], weights.dtype, outVals);\n}\nexport const bincountConfig = {\n kernelName: Bincount,\n backendName: 'webgl',\n kernelFunc: bincount\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQmluY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBa0YsTUFBTSx1QkFBdUIsQ0FBQztBQUdoSSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUl4QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUM1QixNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBQ3ZELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBRW5FLE1BQU0sT0FBTyxHQUNULGVBQWUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUU1RSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxRQUFpQztDQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0JpbmNvdW50LCBCaW5jb3VudEF0dHJzLCBCaW5jb3VudElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtiaW5jb3VudEltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gYmluY291bnQoYXJnczoge1xuICBpbnB1dHM6IEJpbmNvdW50SW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogQmluY291bnRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgd2VpZ2h0c30gPSBpbnB1dHM7XG4gIGNvbnN0IHtzaXplfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5yZWFkU3luYyh4LmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgd2VpZ2h0c1ZhbHMgPSBiYWNrZW5kLnJlYWRTeW5jKHdlaWdodHMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IG91dFZhbHMgPVxuICAgICAgYmluY291bnRJbXBsQ1BVKHhWYWxzLCB3ZWlnaHRzVmFscywgd2VpZ2h0cy5kdHlwZSwgd2VpZ2h0cy5zaGFwZSwgc2l6ZSk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oW3NpemVdLCB3ZWlnaHRzLmR0eXBlLCBvdXRWYWxzKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJpbmNvdW50Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEJpbmNvdW50LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogYmluY291bnQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { BitwiseAnd, env } from '@tensorflow/tfjs-core';\nimport { BinaryOpProgram } from '../binaryop_gpu';\nimport { BinaryOpPackedProgram } from '../binaryop_packed_gpu';\nimport { bitwiseAndImplCPU as cpuBitwiseAnd } from '../kernel_utils/shared';\nexport const BITWISEAND = `\n int r = int(a.r) & int(b.r);\n int g = int(a.g) & int(b.g);\n int rb = int(a.b) & int(b.b);\n int ra = int(a.a) & int(b.a);\n return vec4(r, g, rb, ra);\n`;\nexport const BITWISEAND_UNPACKED = `\n return float(int(a.r) & int(b.r));\n`;\nexport function bitwiseAnd(args) {\n const { inputs, backend } = args;\n const { a, b } = inputs;\n const shouldUsePackedProgram = env().getBool('WEBGL_PACK_BINARY_OPERATIONS');\n const versionNumber = env().getNumber('WEBGL_VERSION');\n // The type of a and b are ensured to be `int32` in core, therefore no need to\n // consider other type situations.\n if ((backend.shouldExecuteOnCPU([a, b])) || versionNumber === 1) {\n const aVals = backend.texData.get(a.dataId).values;\n const bVals = backend.texData.get(b.dataId).values;\n const [outValues, outShape] = cpuBitwiseAnd(a.shape, b.shape, aVals, bVals, a.dtype);\n const out = backend.makeTensorInfo(outShape, a.dtype);\n const outData = backend.texData.get(out.dataId);\n outData.values = outValues;\n return out;\n }\n let program;\n if (shouldUsePackedProgram) {\n program = new BinaryOpPackedProgram(BITWISEAND, a.shape, b.shape, false);\n }\n else {\n program = new BinaryOpProgram(BITWISEAND_UNPACKED, a.shape, b.shape);\n }\n return backend.runWebGLProgram(program, [a, b], a.dtype);\n}\nexport const bitwiseAndConfig = {\n kernelName: BitwiseAnd,\n backendName: 'webgl',\n kernelFunc: bitwiseAnd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0d2lzZUFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9CaXR3aXNlQW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQW9CLEdBQUcsRUFBbUQsTUFBTSx1QkFBdUIsQ0FBQztBQUUxSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGlCQUFpQixJQUFJLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRzs7Ozs7O0NBTXpCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRzs7Q0FFbEMsQ0FBQztBQUVGLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFHMUI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN0QixNQUFNLHNCQUFzQixHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUV2RCw4RUFBOEU7SUFDOUUsa0NBQWtDO0lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUU7UUFDL0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7UUFDakUsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FDdkIsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzNCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxJQUFJLE9BQThDLENBQUM7SUFDbkQsSUFBSSxzQkFBc0IsRUFBRTtRQUMxQixPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzFFO1NBQU07UUFDTCxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEU7SUFFRCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWlCO0lBQzVDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxVQUFtQztDQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0JpdHdpc2VBbmQsIEJpdHdpc2VBbmRJbnB1dHMsIGVudiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7QmluYXJ5T3BQcm9ncmFtfSBmcm9tICcuLi9iaW5hcnlvcF9ncHUnO1xuaW1wb3J0IHtCaW5hcnlPcFBhY2tlZFByb2dyYW19IGZyb20gJy4uL2JpbmFyeW9wX3BhY2tlZF9ncHUnO1xuaW1wb3J0IHtiaXR3aXNlQW5kSW1wbENQVSBhcyBjcHVCaXR3aXNlQW5kfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuZXhwb3J0IGNvbnN0IEJJVFdJU0VBTkQgPSBgXG4gIGludCByID0gaW50KGEucikgJiBpbnQoYi5yKTtcbiAgaW50IGcgPSBpbnQoYS5nKSAmIGludChiLmcpO1xuICBpbnQgcmIgPSBpbnQoYS5iKSAmIGludChiLmIpO1xuICBpbnQgcmEgPSBpbnQoYS5hKSAmIGludChiLmEpO1xuICByZXR1cm4gdmVjNChyLCBnLCByYiwgcmEpO1xuYDtcblxuZXhwb3J0IGNvbnN0IEJJVFdJU0VBTkRfVU5QQUNLRUQgPSBgXG4gIHJldHVybiBmbG9hdChpbnQoYS5yKSAmIGludChiLnIpKTtcbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBiaXR3aXNlQW5kKGFyZ3M6IHtcbiAgaW5wdXRzOiBCaXR3aXNlQW5kSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHthLCBifSA9IGlucHV0cztcbiAgY29uc3Qgc2hvdWxkVXNlUGFja2VkUHJvZ3JhbSA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfQklOQVJZX09QRVJBVElPTlMnKTtcbiAgY29uc3QgdmVyc2lvbk51bWJlciA9IGVudigpLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpO1xuXG4gIC8vIFRoZSB0eXBlIG9mIGEgYW5kIGIgYXJlIGVuc3VyZWQgdG8gYmUgYGludDMyYCBpbiBjb3JlLCB0aGVyZWZvcmUgbm8gbmVlZCB0b1xuICAvLyBjb25zaWRlciBvdGhlciB0eXBlIHNpdHVhdGlvbnMuXG4gIGlmICgoYmFja2VuZC5zaG91bGRFeGVjdXRlT25DUFUoW2EsIGJdKSkgfHwgdmVyc2lvbk51bWJlciA9PT0gMSkge1xuICAgIGNvbnN0IGFWYWxzID0gYmFja2VuZC50ZXhEYXRhLmdldChhLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gICAgY29uc3QgYlZhbHMgPSBiYWNrZW5kLnRleERhdGEuZ2V0KGIuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBbb3V0VmFsdWVzLCBvdXRTaGFwZV0gPVxuICAgICAgICBjcHVCaXR3aXNlQW5kKGEuc2hhcGUsIGIuc2hhcGUsIGFWYWxzLCBiVmFscywgYS5kdHlwZSk7XG5cbiAgICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG91dFNoYXBlLCBhLmR0eXBlKTtcbiAgICBjb25zdCBvdXREYXRhID0gYmFja2VuZC50ZXhEYXRhLmdldChvdXQuZGF0YUlkKTtcbiAgICBvdXREYXRhLnZhbHVlcyA9IG91dFZhbHVlcztcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgbGV0IHByb2dyYW06IEJpbmFyeU9wUHJvZ3JhbXxCaW5hcnlPcFBhY2tlZFByb2dyYW07XG4gIGlmIChzaG91bGRVc2VQYWNrZWRQcm9ncmFtKSB7XG4gICAgcHJvZ3JhbSA9IG5ldyBCaW5hcnlPcFBhY2tlZFByb2dyYW0oQklUV0lTRUFORCwgYS5zaGFwZSwgYi5zaGFwZSwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHByb2dyYW0gPSBuZXcgQmluYXJ5T3BQcm9ncmFtKEJJVFdJU0VBTkRfVU5QQUNLRUQsIGEuc2hhcGUsIGIuc2hhcGUpO1xuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFthLCBiXSwgYS5kdHlwZSk7XG59XG5cbmV4cG9ydCBjb25zdCBiaXR3aXNlQW5kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEJpdHdpc2VBbmQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBiaXR3aXNlQW5kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, BroadcastArgs } from '@tensorflow/tfjs-core';\nexport function broadcastArgs(args) {\n const { inputs, backend } = args;\n const { s0, s1 } = inputs;\n const s0Vals = backend.readSync(s0.dataId);\n const s1Vals = backend.readSync(s1.dataId);\n const broadcastShape = backend_util.assertAndGetBroadcastShape(Array.from(s0Vals), Array.from(s1Vals));\n return backend.makeTensorInfo([broadcastShape.length], 'int32', Int32Array.from(broadcastShape));\n}\nexport const broadcastArgsConfig = {\n kernelName: BroadcastArgs,\n backendName: 'webgl',\n kernelFunc: broadcastArgs\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJvYWRjYXN0QXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Ccm9hZGNhc3RBcmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsYUFBYSxFQUE0RCxNQUFNLHVCQUF1QixDQUFDO0FBRzdILE1BQU0sVUFBVSxhQUFhLENBQUMsSUFHN0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsRUFBRSxFQUFFLEVBQUUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV4QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUN6RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUV6RCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsMEJBQTBCLENBQzFELEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FDekIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxhQUFhO0NBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBCcm9hZGNhc3RBcmdzLCBCcm9hZGNhc3RBcmdzSW5wdXRzLCBLZXJuZWxDb25maWcsIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5leHBvcnQgZnVuY3Rpb24gYnJvYWRjYXN0QXJncyhhcmdzOiB7XG4gIGlucHV0czogQnJvYWRjYXN0QXJnc0lucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7czAsIHMxfSA9IGlucHV0cztcblxuICBjb25zdCBzMFZhbHMgPSBiYWNrZW5kLnJlYWRTeW5jKHMwLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgczFWYWxzID0gYmFja2VuZC5yZWFkU3luYyhzMS5kYXRhSWQpIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgYnJvYWRjYXN0U2hhcGUgPSBiYWNrZW5kX3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoXG4gICAgICBBcnJheS5mcm9tKHMwVmFscyksIEFycmF5LmZyb20oczFWYWxzKSk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICBbYnJvYWRjYXN0U2hhcGUubGVuZ3RoXSwgJ2ludDMyJywgSW50MzJBcnJheS5mcm9tKGJyb2FkY2FzdFNoYXBlKSk7XG59XG5cbmV4cG9ydCBjb25zdCBicm9hZGNhc3RBcmdzQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEJyb2FkY2FzdEFyZ3MsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBicm9hZGNhc3RBcmdzXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { NotEqual } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { notEqualImplCPU } from '../kernel_utils/shared';\nconst NOT_EQUAL = `return float(a != b);`;\nexport const notEqual = binaryKernelFunc({ opSnippet: NOT_EQUAL, cpuKernelImpl: notEqualImplCPU, dtype: 'bool' });\nexport const notEqualConfig = {\n kernelName: NotEqual,\n backendName: 'webgl',\n kernelFunc: notEqual,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90RXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvTm90RXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQ3BDLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtOb3RFcXVhbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7S2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7bm90RXF1YWxJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuY29uc3QgTk9UX0VRVUFMID0gYHJldHVybiBmbG9hdChhICE9IGIpO2A7XG5cbmV4cG9ydCBjb25zdCBub3RFcXVhbCA9IGJpbmFyeUtlcm5lbEZ1bmMoXG4gICAge29wU25pcHBldDogTk9UX0VRVUFMLCBjcHVLZXJuZWxJbXBsOiBub3RFcXVhbEltcGxDUFUsIGR0eXBlOiAnYm9vbCd9KTtcblxuZXhwb3J0IGNvbnN0IG5vdEVxdWFsQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE5vdEVxdWFsLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogbm90RXF1YWwsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Real } from '@tensorflow/tfjs-core';\nimport { identity } from './Identity';\nexport function real(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n const inputData = backend.texData.get(input.dataId);\n return identity({ inputs: { x: inputData.complexTensorInfos.real }, backend });\n}\nexport const realConfig = {\n kernelName: Real,\n backendName: 'webgl',\n kernelFunc: real\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9SZWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsSUFBSSxFQUF5QixNQUFNLHVCQUF1QixDQUFDO0FBRzdGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEMsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFxRDtJQUV4RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwRCxPQUFPLFFBQVEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJlYWwsIFJlYWxJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tICcuL0lkZW50aXR5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWwoYXJnczoge2lucHV0czogUmVhbElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbnB1dH0gPSBpbnB1dHM7XG4gIGNvbnN0IGlucHV0RGF0YSA9IGJhY2tlbmQudGV4RGF0YS5nZXQoaW5wdXQuZGF0YUlkKTtcblxuICByZXR1cm4gaWRlbnRpdHkoe2lucHV0czoge3g6IGlucHV0RGF0YS5jb21wbGV4VGVuc29ySW5mb3MucmVhbH0sIGJhY2tlbmR9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlYWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmVhbCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHJlYWwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as tf from '@tensorflow/tfjs-core';\nimport { Cast, util } from '@tensorflow/tfjs-core';\nimport { castImplCPU } from '../kernel_utils/shared';\nimport { complex } from './Complex';\nimport { identity } from './Identity';\nimport { notEqual } from './NotEqual';\nimport { real } from './Real';\nimport { int } from '../kernel_utils/int';\nexport function cast(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { dtype } = attrs;\n // Casting to complex64.\n if (dtype === 'complex64') {\n if (x.dtype === 'complex64') {\n return identity({ inputs: { x }, backend });\n }\n // TODO(annxingyuan): Import kernel function once zeros is modularized.\n const zerosTensor = tf.zeros(x.shape);\n const floatX = cast({ inputs: { x }, backend, attrs: { dtype: 'float32' } });\n const result = complex({ inputs: { real: floatX, imag: zerosTensor }, backend });\n zerosTensor.dispose();\n backend.disposeIntermediateTensorInfo(floatX);\n return result;\n }\n // Casting from complex64\n if (x.dtype === 'complex64') {\n const realPart = real({ inputs: { input: x }, backend });\n const result = cast({ inputs: { x: realPart }, backend, attrs: { dtype } });\n backend.disposeIntermediateTensorInfo(realPart);\n return result;\n }\n if (!util.hasEncodingLoss(x.dtype, dtype)) {\n // We don't change the underlying data, since we cast to higher\n // precision.\n const result = identity({ inputs: { x }, backend });\n return { dataId: result.dataId, shape: result.shape, dtype };\n }\n if (backend.shouldExecuteOnCPU([x])) {\n const values = backend.texData.get(x.dataId).values;\n const [resultShape, resultType, resultData] = castImplCPU(values, x.shape, x.dtype, dtype);\n return backend.makeTensorInfo(resultShape, resultType, resultData);\n }\n if (dtype === 'int32') {\n return int(x, backend);\n }\n if (dtype === 'bool') {\n const zerosTensorInfo = backend.makeTensorInfo([], 'bool', util.getTypedArrayFromDType('bool', 1));\n const binaryInputs = { a: x, b: zerosTensorInfo };\n const result = notEqual({ inputs: binaryInputs, backend });\n backend.disposeIntermediateTensorInfo(zerosTensorInfo);\n return result;\n }\n throw new Error(`Error in Cast: failed to cast ${x.dtype} to ${dtype}`);\n}\nexport const castConfig = {\n kernelName: Cast,\n backendName: 'webgl',\n kernelFunc: cast\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9DYXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUMsT0FBTyxFQUFlLElBQUksRUFBMkUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHeEksT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhDLE1BQU0sVUFBVSxJQUFJLENBQ2hCLElBQXVFO0lBRXpFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdEIsd0JBQXdCO0lBQ3hCLElBQUksS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUN6QixJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQzNCLE9BQU8sUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztTQUN6QztRQUVELHVFQUF1RTtRQUN2RSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFD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Q0FBaUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0ICogYXMgdGYgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7QmluYXJ5SW5wdXRzLCBDYXN0LCBDYXN0QXR0cnMsIENhc3RJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7Y2FzdEltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuL0NvbXBsZXgnO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSAnLi9JZGVudGl0eSc7XG5pbXBvcnQge25vdEVxdWFsfSBmcm9tICcuL05vdEVxdWFsJztcbmltcG9ydCB7cmVhbH0gZnJvbSAnLi9SZWFsJztcblxuaW1wb3J0IHtpbnR9IGZyb20gJy4uL2tlcm5lbF91dGlscy9pbnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FzdChcbiAgICBhcmdzOiB7aW5wdXRzOiBDYXN0SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCBhdHRyczogQ2FzdEF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2R0eXBlfSA9IGF0dHJzO1xuXG4gIC8vIENhc3RpbmcgdG8gY29tcGxleDY0LlxuICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgaWYgKHguZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICByZXR1cm4gaWRlbnRpdHkoe2lucHV0czoge3h9LCBiYWNrZW5kfSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETyhhbm54aW5neXVhbik6IEltcG9ydCBrZXJuZWwgZnVuY3Rpb24gb25jZSB6ZXJvcyBpcyBtb2R1bGFyaXplZC5cbiAgICBjb25zdCB6ZXJvc1RlbnNvciA9IHRmLnplcm9zKHguc2hhcGUpO1xuICAgIGNvbnN0IGZsb2F0WCA9IGNhc3Qoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge2R0eXBlOiAnZmxvYXQzMid9fSk7XG5cbiAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICBjb21wbGV4KHtpbnB1dHM6IHtyZWFsOiBmbG9hdFgsIGltYWc6IHplcm9zVGVuc29yfSwgYmFja2VuZH0pO1xuXG4gICAgemVyb3NUZW5zb3IuZGlzcG9zZSgpO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZmxvYXRYKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBDYXN0aW5nIGZyb20gY29tcGxleDY0XG4gIGlmICh4LmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWxQYXJ0ID0gcmVhbCh7aW5wdXRzOiB7aW5wdXQ6IHh9LCBiYWNrZW5kfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gY2FzdCh7aW5wdXRzOiB7eDogcmVhbFBhcnR9LCBiYWNrZW5kLCBhdHRyczoge2R0eXBlfX0pO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbFBhcnQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIXV0aWwuaGFzRW5jb2RpbmdMb3NzKHguZHR5cGUsIGR0eXBlKSkge1xuICAgIC8vIFdlIGRvbid0IGNoYW5nZSB0aGUgdW5kZXJseWluZyBkYXRhLCBzaW5jZSB3ZSBjYXN0IHRvIGhpZ2hlclxuICAgIC8vIHByZWNpc2lvbi5cbiAgICBjb25zdCByZXN1bHQgPSBpZGVudGl0eSh7aW5wdXRzOiB7eH0sIGJhY2tlbmR9KTtcbiAgICByZXR1cm4ge2RhdGFJZDogcmVzdWx0LmRhdGFJZCwgc2hhcGU6IHJlc3VsdC5zaGFwZSwgZHR5cGV9O1xuICB9XG5cbiAgaWYgKGJhY2tlbmQuc2hvdWxkRXhlY3V0ZU9uQ1BVKFt4XSkpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBbcmVzdWx0U2hhcGUsIHJlc3VsdFR5cGUsIHJlc3VsdERhdGFdID1cbiAgICAgICAgY2FzdEltcGxDUFUodmFsdWVzLCB4LnNoYXBlLCB4LmR0eXBlLCBkdHlwZSk7XG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsIHJlc3VsdFR5cGUsIHJlc3VsdERhdGEpO1xuICB9XG5cbiAgaWYgKGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgcmV0dXJuIGludCh4LCBiYWNrZW5kKTtcbiAgfVxuXG4gIGlmIChkdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgY29uc3QgemVyb3NUZW5zb3JJbmZvID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgW10sICdib29sJywgdXRpbC5nZXRUeXBlZEFycmF5RnJvbURUeXBlKCdib29sJywgMSkpO1xuXG4gICAgY29uc3QgYmluYXJ5SW5wdXRzOiBCaW5hcnlJbnB1dHMgPSB7YTogeCwgYjogemVyb3NUZW5zb3JJbmZvfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5vdEVxdWFsKHtpbnB1dHM6IGJpbmFyeUlucHV0cywgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh6ZXJvc1RlbnNvckluZm8pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIENhc3Q6IGZhaWxlZCB0byBjYXN0ICR7eC5kdHlwZX0gdG8gJHtkdHlwZX1gKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNhc3RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ2FzdCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNhc3QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { UnaryOpProgram } from '../unaryop_gpu';\nconst TO_INT = `return float(int(x));`;\nexport function int(input, backend) {\n const program = new UnaryOpProgram(input.shape, TO_INT);\n const output = backend.runWebGLProgram(program, [input], 'int32');\n return { dataId: output.dataId, shape: output.shape, dtype: output.dtype };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxfdXRpbHMvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQztBQUV2QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBeUI7SUFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDO0FBQzNFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7VW5hcnlPcFByb2dyYW19IGZyb20gJy4uL3VuYXJ5b3BfZ3B1JztcblxuY29uc3QgVE9fSU5UID0gYHJldHVybiBmbG9hdChpbnQoeCkpO2A7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnQoaW5wdXQ6IFRlbnNvckluZm8sIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wpOiBUZW5zb3JJbmZvIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBVbmFyeU9wUHJvZ3JhbShpbnB1dC5zaGFwZSwgVE9fSU5UKTtcbiAgY29uc3Qgb3V0cHV0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW2lucHV0XSwgJ2ludDMyJyk7XG4gIHJldHVybiB7ZGF0YUlkOiBvdXRwdXQuZGF0YUlkLCBzaGFwZTogb3V0cHV0LnNoYXBlLCBkdHlwZTogb3V0cHV0LmR0eXBlfTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Ceil } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { ceilImplCPU } from '../kernel_utils/shared';\nconst CEIL = `return ceil(x);`;\nexport const ceil = unaryKernelFunc({ opSnippet: CEIL, packedOpSnippet: CEIL, cpuKernelImpl: ceilImplCPU });\nexport const ceilConfig = {\n kernelName: Ceil,\n backendName: 'webgl',\n kernelFunc: ceil\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2VpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9DZWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUMvQixFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQztBQUUxRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0NlaWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuY30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7Y2VpbEltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5jb25zdCBDRUlMID0gYHJldHVybiBjZWlsKHgpO2A7XG5cbmV4cG9ydCBjb25zdCBjZWlsID0gdW5hcnlLZXJuZWxGdW5jKFxuICAgIHtvcFNuaXBwZXQ6IENFSUwsIHBhY2tlZE9wU25pcHBldDogQ0VJTCwgY3B1S2VybmVsSW1wbDogY2VpbEltcGxDUFV9KTtcblxuZXhwb3J0IGNvbnN0IGNlaWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ2VpbCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNlaWwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ClipProgram {\n constructor(aShape) {\n this.variableNames = ['A'];\n this.customUniforms = [\n { name: 'minVal', type: 'float' },\n { name: 'maxVal', type: 'float' }\n ];\n this.outputShape = aShape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2NsaXBfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE1BQU0sT0FBTyxXQUFXO0lBU3RCLFlBQVksTUFBZ0I7UUFSNUIsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBR3RCLG1CQUFjLEdBQUc7WUFDZixFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQXNCLEVBQUM7WUFDOUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFzQixFQUFDO1NBQy9DLENBQUM7UUFHQSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs7OztLQVdmLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtVbmlmb3JtVHlwZX0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXInO1xuXG5leHBvcnQgY2xhc3MgQ2xpcFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgY3VzdG9tVW5pZm9ybXMgPSBbXG4gICAge25hbWU6ICdtaW5WYWwnLCB0eXBlOiAnZmxvYXQnIGFzIFVuaWZvcm1UeXBlfSxcbiAgICB7bmFtZTogJ21heFZhbCcsIHR5cGU6ICdmbG9hdCcgYXMgVW5pZm9ybVR5cGV9XG4gIF07XG5cbiAgY29uc3RydWN0b3IoYVNoYXBlOiBudW1iZXJbXSkge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBhU2hhcGU7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBmbG9hdCB2YWx1ZSA9IGdldEFBdE91dENvb3JkcygpO1xuICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSB7XG4gICAgICAgICAgc2V0T3V0cHV0KHZhbHVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRPdXRwdXQoY2xhbXAodmFsdWUsIG1pblZhbCwgbWF4VmFsKSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ClipPackedProgram {\n constructor(aShape) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.customUniforms = [\n { name: 'minVal', type: 'float' },\n { name: 'maxVal', type: 'float' }\n ];\n this.outputShape = aShape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcF9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9jbGlwX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsTUFBTSxPQUFPLGlCQUFpQjtJQVc1QixZQUFZLE1BQWdCO1FBVjVCLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUdwQixtQkFBYyxHQUFHO1lBQ2YsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFzQixFQUFDO1lBQzlDLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBc0IsRUFBQztTQUMvQyxDQUFDO1FBR0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRzs7Ozs7Ozs7Ozs7S0FXZixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7VW5pZm9ybVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIENsaXBQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnQSddO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIGN1c3RvbVVuaWZvcm1zID0gW1xuICAgIHtuYW1lOiAnbWluVmFsJywgdHlwZTogJ2Zsb2F0JyBhcyBVbmlmb3JtVHlwZX0sXG4gICAge25hbWU6ICdtYXhWYWwnLCB0eXBlOiAnZmxvYXQnIGFzIFVuaWZvcm1UeXBlfVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKGFTaGFwZTogbnVtYmVyW10pIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gYVNoYXBlO1xuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIHZlYzQgdmFsdWUgPSBnZXRBQXRPdXRDb29yZHMoKTtcblxuICAgICAgICBpZiAoYW55KGlzbmFuKHZhbHVlKSkpIHtcbiAgICAgICAgICBzZXRPdXRwdXQodmFsdWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldE91dHB1dChjbGFtcCh2YWx1ZSwgdmVjNChtaW5WYWwpLCB2ZWM0KG1heFZhbCkpKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ClipByValue, env } from '@tensorflow/tfjs-core';\nimport { ClipProgram } from '../clip_gpu';\nimport { ClipPackedProgram } from '../clip_packed_gpu';\nexport function clipByValue(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { clipValueMin, clipValueMax } = attrs;\n let program;\n if (env().getBool('WEBGL_PACK_CLIP')) {\n program = new ClipPackedProgram(x.shape);\n }\n else {\n program = new ClipProgram(x.shape);\n }\n const customValues = [[clipValueMin], [clipValueMax]];\n return backend.runWebGLProgram(program, [x], x.dtype, customValues);\n}\nexport const clipByValueConfig = {\n kernelName: ClipByValue,\n backendName: 'webgl',\n kernelFunc: clipByValue\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpcEJ5VmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQ2xpcEJ5VmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFdBQVcsRUFBdUMsR0FBRyxFQUF1QyxNQUFNLHVCQUF1QixDQUFDO0FBR2xJLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUkzQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTNDLElBQUksT0FBTyxDQUFDO0lBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUNwQyxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDMUM7U0FBTTtRQUNMLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEM7SUFDRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q2xpcEJ5VmFsdWUsIENsaXBCeVZhbHVlQXR0cnMsIENsaXBCeVZhbHVlSW5wdXRzLCBlbnYsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7Q2xpcFByb2dyYW19IGZyb20gJy4uL2NsaXBfZ3B1JztcbmltcG9ydCB7Q2xpcFBhY2tlZFByb2dyYW19IGZyb20gJy4uL2NsaXBfcGFja2VkX2dwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlwQnlWYWx1ZShhcmdzOiB7XG4gIGlucHV0czogQ2xpcEJ5VmFsdWVJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBDbGlwQnlWYWx1ZUF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2NsaXBWYWx1ZU1pbiwgY2xpcFZhbHVlTWF4fSA9IGF0dHJzO1xuXG4gIGxldCBwcm9ncmFtO1xuICBpZiAoZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19DTElQJykpIHtcbiAgICBwcm9ncmFtID0gbmV3IENsaXBQYWNrZWRQcm9ncmFtKHguc2hhcGUpO1xuICB9IGVsc2Uge1xuICAgIHByb2dyYW0gPSBuZXcgQ2xpcFByb2dyYW0oeC5zaGFwZSk7XG4gIH1cbiAgY29uc3QgY3VzdG9tVmFsdWVzID0gW1tjbGlwVmFsdWVNaW5dLCBbY2xpcFZhbHVlTWF4XV07XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeF0sIHguZHR5cGUsIGN1c3RvbVZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGlwQnlWYWx1ZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDbGlwQnlWYWx1ZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNsaXBCeVZhbHVlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ComplexAbsProgram {\n constructor(shape) {\n this.variableNames = ['real', 'imag'];\n this.outputShape = shape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleF9hYnNfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9jb21wbGV4X2Fic19ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QixZQUFZLEtBQWU7UUFKM0Isa0JBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUsvQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs7Ozs7O0tBYWYsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBDb21wbGV4QWJzUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3JlYWwnLCAnaW1hZyddO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3Ioc2hhcGU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IHNoYXBlO1xuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGZsb2F0IHJlID0gYWJzKGdldFJlYWxBdE91dENvb3JkcygpKTtcbiAgICAgICAgZmxvYXQgaW0gPSBhYnMoZ2V0SW1hZ0F0T3V0Q29vcmRzKCkpO1xuICAgICAgICBmbG9hdCBteCA9IG1heChyZSwgaW0pO1xuXG4gICAgICAgIC8vIHNhZGx5IHRoZSBsZW5ndGggZnVuY3Rpb24gaW4gZ2xzbCBpcyBub3QgdW5kZXJmbG93LXNhZmVcbiAgICAgICAgLy8gKGF0IGxlYXN0IG5vdCBvbiBJbnRlbCBHUFVzKS4gU28gdGhlIHNhZmUgc29sdXRpb24gaXNcbiAgICAgICAgLy8gdG8gZW5zdXJlIHVuZGVyZmxvdy1zYWZldHkgaW4gYWxsIGNhc2VzLlxuICAgICAgICBzZXRPdXRwdXQoXG4gICAgICAgICAgbXggPT0gMC4wID8gMC4wIDogbXggKiBsZW5ndGgodmVjMigxLCBtaW4ocmUsIGltKS9teCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ComplexAbs } from '@tensorflow/tfjs-core';\nimport { ComplexAbsProgram } from '../complex_abs_gpu';\n// Returns a TensorInfo with the complex shape and the dataId of the\n// underlying part. We need to do this because a reshaped complex tensor is\n// not reflected in its parts.\nfunction makeComplexComponentTensorInfo(complexTensor, complexPart) {\n return {\n dataId: complexPart.dataId,\n dtype: complexPart.dtype,\n shape: complexTensor.shape\n };\n}\nexport function complexAbs(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n const xData = backend.texData.get(x.dataId);\n const program = new ComplexAbsProgram(x.shape);\n const programInputs = [\n makeComplexComponentTensorInfo(x, xData.complexTensorInfos.real),\n makeComplexComponentTensorInfo(x, xData.complexTensorInfos.imag),\n ];\n return backend.runWebGLProgram(program, programInputs, programInputs[0].dtype);\n}\nexport const complexAbsConfig = {\n kernelName: ComplexAbs,\n backendName: 'webgl',\n kernelFunc: complexAbs\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGxleEFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Db21wbGV4QWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQXlELE1BQU0sdUJBQXVCLENBQUM7QUFHekcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsb0VBQW9FO0FBQ3BFLDJFQUEyRTtBQUMzRSw4QkFBOEI7QUFDOUIsU0FBUyw4QkFBOEIsQ0FDbkMsYUFBeUIsRUFBRSxXQUF1QjtJQUNwRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQzFCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztRQUN4QixLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUs7S0FDM0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUN0QixJQUEyRDtJQUM3RCxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRW5CLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLGFBQWEsR0FBRztRQUNwQiw4QkFBOEIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztRQUNoRSw4QkFBOEIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztLQUNqRSxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUMxQixPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWlCO0lBQzVDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxVQUFtQztDQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0NvbXBsZXhBYnMsIENvbXBsZXhBYnNJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7Q29tcGxleEFic1Byb2dyYW19IGZyb20gJy4uL2NvbXBsZXhfYWJzX2dwdSc7XG5cbi8vIFJldHVybnMgYSBUZW5zb3JJbmZvIHdpdGggdGhlIGNvbXBsZXggc2hhcGUgYW5kIHRoZSBkYXRhSWQgb2YgdGhlXG4vLyB1bmRlcmx5aW5nIHBhcnQuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIGEgcmVzaGFwZWQgY29tcGxleCB0ZW5zb3IgaXNcbi8vIG5vdCByZWZsZWN0ZWQgaW4gaXRzIHBhcnRzLlxuZnVuY3Rpb24gbWFrZUNvbXBsZXhDb21wb25lbnRUZW5zb3JJbmZvKFxuICAgIGNvbXBsZXhUZW5zb3I6IFRlbnNvckluZm8sIGNvbXBsZXhQYXJ0OiBUZW5zb3JJbmZvKTogVGVuc29ySW5mbyB7XG4gIHJldHVybiB7XG4gICAgZGF0YUlkOiBjb21wbGV4UGFydC5kYXRhSWQsXG4gICAgZHR5cGU6IGNvbXBsZXhQYXJ0LmR0eXBlLFxuICAgIHNoYXBlOiBjb21wbGV4VGVuc29yLnNoYXBlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4QWJzKFxuICAgIGFyZ3M6IHtpbnB1dHM6IENvbXBsZXhBYnNJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuXG4gIGNvbnN0IHhEYXRhID0gYmFja2VuZC50ZXhEYXRhLmdldCh4LmRhdGFJZCk7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21wbGV4QWJzUHJvZ3JhbSh4LnNoYXBlKTtcbiAgY29uc3QgcHJvZ3JhbUlucHV0cyA9IFtcbiAgICBtYWtlQ29tcGxleENvbXBvbmVudFRlbnNvckluZm8oeCwgeERhdGEuY29tcGxleFRlbnNvckluZm9zLnJlYWwpLFxuICAgIG1ha2VDb21wbGV4Q29tcG9uZW50VGVuc29ySW5mbyh4LCB4RGF0YS5jb21wbGV4VGVuc29ySW5mb3MuaW1hZyksXG4gIF07XG5cbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKFxuICAgICAgcHJvZ3JhbSwgcHJvZ3JhbUlucHV0cywgcHJvZ3JhbUlucHV0c1swXS5kdHlwZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjb21wbGV4QWJzQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbXBsZXhBYnMsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBjb21wbGV4QWJzIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nexport class ConcatProgram {\n // Concats 2d tensors along axis=1. See comments in MathBackendWebGL.concat().\n constructor(shapes) {\n this.outputShape = [];\n this.outputShape = backend_util.computeOutShape(shapes, 1 /* axis */);\n this.variableNames = shapes.map((_, i) => `T${i}`);\n const offsets = new Array(shapes.length - 1);\n offsets[0] = shapes[0][1];\n for (let i = 1; i < offsets.length; i++) {\n offsets[i] = offsets[i - 1] + shapes[i][1];\n }\n const snippets = [`if (yC < ${offsets[0]}) setOutput(getT0(yR, yC));`];\n for (let i = 1; i < offsets.length; i++) {\n const shift = offsets[i - 1];\n snippets.push(`else if (yC < ${offsets[i]}) ` +\n `setOutput(getT${i}(yR, yC-${shift}));`);\n }\n const lastIndex = offsets.length;\n const lastShift = offsets[offsets.length - 1];\n snippets.push(`else setOutput(getT${lastIndex}(yR, yC-${lastShift}));`);\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0X2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvY29uY2F0X2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbkQsTUFBTSxPQUFPLGFBQWE7SUFLeEIsOEVBQThFO0lBQzlFLFlBQVksTUFBK0I7UUFKM0MsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFLekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5ELE1BQU0sT0FBTyxHQUFhLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkQsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLElBQUksQ0FDVCxpQkFBaUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUMvQixpQkFBaUIsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLENBQUM7U0FDOUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLFNBQVMsV0FBVyxTQUFTLEtBQUssQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxRQUFRLEdBQUc7Ozs7OztVQU1WLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDOztLQUVoQyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgQ29uY2F0UHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXM6IHN0cmluZ1tdO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICAvLyBDb25jYXRzIDJkIHRlbnNvcnMgYWxvbmcgYXhpcz0xLiBTZWUgY29tbWVudHMgaW4gTWF0aEJhY2tlbmRXZWJHTC5jb25jYXQoKS5cbiAgY29uc3RydWN0b3Ioc2hhcGVzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPikge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dFNoYXBlKHNoYXBlcywgMSAvKiBheGlzICovKTtcbiAgICB0aGlzLnZhcmlhYmxlTmFtZXMgPSBzaGFwZXMubWFwKChfLCBpKSA9PiBgVCR7aX1gKTtcblxuICAgIGNvbnN0IG9mZnNldHM6IG51bWJlcltdID0gbmV3IEFycmF5KHNoYXBlcy5sZW5ndGggLSAxKTtcbiAgICBvZmZzZXRzWzBdID0gc2hhcGVzWzBdWzFdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2Zmc2V0c1tpXSA9IG9mZnNldHNbaSAtIDFdICsgc2hhcGVzW2ldWzFdO1xuICAgIH1cblxuICAgIGNvbnN0IHNuaXBwZXRzID0gW2BpZiAoeUMgPCAke29mZnNldHNbMF19KSBzZXRPdXRwdXQoZ2V0VDAoeVIsIHlDKSk7YF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaGlmdCA9IG9mZnNldHNbaSAtIDFdO1xuICAgICAgc25pcHBldHMucHVzaChcbiAgICAgICAgICBgZWxzZSBpZiAoeUMgPCAke29mZnNldHNbaV19KSBgICtcbiAgICAgICAgICBgc2V0T3V0cHV0KGdldFQke2l9KHlSLCB5Qy0ke3NoaWZ0fSkpO2ApO1xuICAgIH1cbiAgICBjb25zdCBsYXN0SW5kZXggPSBvZmZzZXRzLmxlbmd0aDtcbiAgICBjb25zdCBsYXN0U2hpZnQgPSBvZmZzZXRzW29mZnNldHMubGVuZ3RoIC0gMV07XG4gICAgc25pcHBldHMucHVzaChgZWxzZSBzZXRPdXRwdXQoZ2V0VCR7bGFzdEluZGV4fSh5UiwgeUMtJHtsYXN0U2hpZnR9KSk7YCk7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjMiBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IHlSID0gY29vcmRzLng7XG4gICAgICAgIGludCB5QyA9IGNvb3Jkcy55O1xuXG4gICAgICAgICR7c25pcHBldHMuam9pbignXFxuICAgICAgICAnKX1cbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { getChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport class ConcatPackedProgram {\n constructor(shapes, axis) {\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = [];\n this.outputShape = backend_util.computeOutShape(shapes, axis);\n const shape = this.outputShape;\n const rank = shape.length;\n const dtype = getCoordsDataType(rank);\n const coords = getChannels('coords', rank);\n const channels = ['x', 'y', 'z', 'w', 'u', 'v'].slice(0, rank);\n this.variableNames = shapes.map((_, i) => `T${i}`);\n const offsets = new Array(shapes.length - 1);\n offsets[0] = shapes[0][axis];\n for (let i = 1; i < offsets.length; i++) {\n offsets[i] = offsets[i - 1] + shapes[i][axis];\n }\n const channel = channels[axis];\n const lastChannels = channels.slice(-2);\n const allChannels = channels.join();\n let getValueSnippet = `if (${channel} < ${offsets[0]}) {\n return getChannel(\n getT0(${allChannels}), vec2(${lastChannels.join()}));\n }`;\n for (let i = 1; i < offsets.length; i++) {\n const shift = offsets[i - 1];\n // Note: the >= comparison below may seem unnecessary given the check\n // above but is needed to workaround branch execution issues on some\n // devices. It makes all the conditions exclusive without relying on\n // execution order.\n getValueSnippet += `\n if (${channel} < ${offsets[i]} && ${channel} >= ${offsets[i - 1]}) {\n return getChannel(\n getT${i}(${shiftedChannels(channels, channel, shift)}),\n vec2(${shiftedChannels(lastChannels, channel, shift)}));\n }`;\n }\n const lastIndex = offsets.length;\n const shift = offsets[offsets.length - 1];\n getValueSnippet += `\n return getChannel(\n getT${lastIndex}(${shiftedChannels(channels, channel, shift)}),\n vec2(${shiftedChannels(lastChannels, channel, shift)}));`;\n this.userCode = `\n float getValue(${channels.map(x => '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 `;\n }\n}\n/**\n * Return an expression for coordinates into a vector where a given channel\n * will be offset by [shift].\n *\n * @param channels the channels to consider\n * @param channel the channel we want shifted\n * @param shift the amount to subtract from the channel.\n *\n * @returns a string of the form 'x, y-[shift], z' where any one channel can\n * have the shift applied.\n */\nfunction shiftedChannels(channels, channel, shift) {\n const channelIdx = channels.indexOf(channel);\n const res = channels.map((c, idx) => {\n if (idx === channelIdx) {\n return `${c} - ${shift}`;\n }\n else {\n return c;\n }\n });\n return res.join();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0X3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2NvbmNhdF9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxPQUFPLG1CQUFtQjtJQU85QixZQUFZLE1BQWtCLEVBQUUsSUFBWTtRQUw1QyxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUl6QixJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxD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Q0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Y0FDckMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQ0FDbkIsTUFBTTs7OztLQUlqQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWtCLEVBQUUsT0FBZSxFQUFFLEtBQWE7SUFDekUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2xDLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRTtZQUN0QixPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQztTQUNWO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5pbXBvcnQge2dldENoYW5uZWxzfSBmcm9tICcuL3BhY2tpbmdfdXRpbCc7XG5pbXBvcnQge2dldENvb3Jkc0RhdGFUeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBjbGFzcyBDb25jYXRQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lczogc3RyaW5nW107XG4gIHBhY2tlZElucHV0cyA9IHRydWU7XG4gIHBhY2tlZE91dHB1dCA9IHRydWU7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXSA9IFtdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNoYXBlczogbnVtYmVyW11bXSwgYXhpczogbnVtYmVyKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0U2hhcGUoc2hhcGVzLCBheGlzKTtcbiAgICBjb25zdCBzaGFwZSA9IHRoaXMub3V0cHV0U2hhcGU7XG4gICAgY29uc3QgcmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgICBjb25zdCBkdHlwZSA9IGdldENvb3Jkc0RhdGFUeXBlKHJhbmspO1xuICAgIGNvbnN0IGNvb3JkcyA9IGdldENoYW5uZWxzKCdjb29yZHMnLCByYW5rKTtcbiAgICBjb25zdCBjaGFubmVscyA9IFsneCcsICd5JywgJ3onLCAndycsICd1JywgJ3YnXS5zbGljZSgwLCByYW5rKTtcbiAgICB0aGlzLnZhcmlhYmxlTmFtZXMgPSBzaGFwZXMubWFwKChfLCBpKSA9PiBgVCR7aX1gKTtcblxuICAgIGNvbnN0IG9mZnNldHM6IG51bWJlcltdID0gbmV3IEFycmF5KHNoYXBlcy5sZW5ndGggLSAxKTtcbiAgICBvZmZzZXRzWzBdID0gc2hhcGVzWzBdW2F4aXNdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2Zmc2V0c1tpXSA9IG9mZnNldHNbaSAtIDFdICsgc2hhcGVzW2ldW2F4aXNdO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWwgPSBjaGFubmVsc1theGlzXTtcbiAgICBjb25zdCBsYXN0Q2hhbm5lbHMgPSBjaGFubmVscy5zbGljZSgtMik7XG4gICAgY29uc3QgYWxsQ2hhbm5lbHMgPSBjaGFubmVscy5qb2luKCk7XG5cbiAgICBsZXQgZ2V0VmFsdWVTbmlwcGV0ID0gYGlmICgke2NoYW5uZWx9IDwgJHtvZmZzZXRzWzBdfSkge1xuICAgICAgICByZXR1cm4gZ2V0Q2hhbm5lbChcbiAgICAgICAgICAgIGdldFQwKCR7YWxsQ2hhbm5lbHN9KSwgdmVjMigke2xhc3RDaGFubmVscy5qb2luKCl9KSk7XG4gICAgICAgIH1gO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2hpZnQgPSBvZmZzZXRzW2kgLSAxXTtcbiAgICAgIC8vIE5vdGU6IHRoZSA+PSBjb21wYXJpc29uIGJlbG93IG1heSBzZWVtIHVubmVjZXNzYXJ5IGdpdmVuIHRoZSBjaGVja1xuICAgICAgLy8gYWJvdmUgYnV0IGlzIG5lZWRlZCB0byB3b3JrYXJvdW5kIGJyYW5jaCBleGVjdXRpb24gaXNzdWVzIG9uIHNvbWVcbiAgICAgIC8vIGRldmljZXMuIEl0IG1ha2VzIGFsbCB0aGUgY29uZGl0aW9ucyBleGNsdXNpdmUgd2l0aG91dCByZWx5aW5nIG9uXG4gICAgICAvLyBleGVjdXRpb24gb3JkZXIuXG4gICAgICBnZXRWYWx1ZVNuaXBwZXQgKz0gYFxuICAgICAgICBpZiAoJHtjaGFubmVsfSA8ICR7b2Zmc2V0c1tpXX0gICYmICR7Y2hhbm5lbH0gPj0gJHtvZmZzZXRzW2kgLSAxXX0pIHtcbiAgICAgICAgICByZXR1cm4gZ2V0Q2hhbm5lbChcbiAgICAgICAgICAgIGdldFQke2l9KCR7c2hpZnRlZENoYW5uZWxzKGNoYW5uZWxzLCBjaGFubmVsLCBzaGlmdCl9KSxcbiAgICAgICAgICAgIHZlYzIoJHtzaGlmdGVkQ2hhbm5lbHMobGFzdENoYW5uZWxzLCBjaGFubmVsLCBzaGlmdCl9KSk7XG4gICAgICAgIH1gO1xuICAgIH1cbiAgICBjb25zdCBsYXN0SW5kZXggPSBvZmZzZXRzLmxlbmd0aDtcbiAgICBjb25zdCBzaGlmdCA9IG9mZnNldHNbb2Zmc2V0cy5sZW5ndGggLSAxXTtcbiAgICBnZXRWYWx1ZVNuaXBwZXQgKz0gYFxuICAgICAgICByZXR1cm4gZ2V0Q2hhbm5lbChcbiAgICAgICAgICBnZXRUJHtsYXN0SW5kZXh9KCR7c2hpZnRlZENoYW5uZWxzKGNoYW5uZWxzLCBjaGFubmVsLCBzaGlmdCl9KSxcbiAgICAgICAgICB2ZWMyKCR7c2hpZnRlZENoYW5uZWxzKGxhc3RDaGFubmVscywgY2hhbm5lbCwgc2hpZnQpfSkpO2A7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgZmxvYXQgZ2V0VmFsdWUoJHtjaGFubmVscy5tYXAoeCA9PiAnaW50ICcgKyB4KX0pIHtcbiAgICAgICAgJHtnZXRWYWx1ZVNuaXBwZXR9XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgJHtkdHlwZX0gY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNChnZXRWYWx1ZSgke2Nvb3Jkc30pLCAwLiwgMC4sIDAuKTtcblxuICAgICAgICAke2Nvb3Jkc1tyYW5rIC0gMV19ID0gJHtjb29yZHNbcmFuayAtIDFdfSArIDE7XG4gICAgICAgIGlmICgke2Nvb3Jkc1tyYW5rIC0gMV19IDwgJHtzaGFwZVtyYW5rIC0gMV19KSB7XG4gICAgICAgICAgcmVzdWx0LmcgPSBnZXRWYWx1ZSgke2Nvb3Jkc30pO1xuICAgICAgICB9XG5cbiAgICAgICAgJHtjb29yZHNbcmFuayAtIDJdfSA9ICR7Y29vcmRzW3JhbmsgLSAyXX0gKyAxO1xuICAgICAgICBpZiAoJHtjb29yZHNbcmFuayAtIDJdfSA8ICR7c2hhcGVbcmFuayAtIDJdfSkge1xuICAgICAgICAgIHJlc3VsdC5hID0gZ2V0VmFsdWUoJHtjb29yZHN9KTtcbiAgICAgICAgfVxuXG4gICAgICAgICR7Y29vcmRzW3JhbmsgLSAxXX0gPSAke2Nvb3Jkc1tyYW5rIC0gMV19IC0gMTtcbiAgICAgICAgaWYgKCR7Y29vcmRzW3JhbmsgLSAyXX0gPCAke3NoYXBlW3JhbmsgLSAyXX0gJiZcbiAgICAgICAgICAgICR7Y29vcmRzW3JhbmsgLSAxXX0gPCAke3NoYXBlW3JhbmsgLSAxXX0pIHtcbiAgICAgICAgICByZXN1bHQuYiA9IGdldFZhbHVlKCR7Y29vcmRzfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0T3V0cHV0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiBhbiBleHByZXNzaW9uIGZvciBjb29yZGluYXRlcyBpbnRvIGEgdmVjdG9yIHdoZXJlIGEgZ2l2ZW4gY2hhbm5lbFxuICogd2lsbCBiZSBvZmZzZXQgYnkgW3NoaWZ0XS5cbiAqXG4gKiBAcGFyYW0gY2hhbm5lbHMgdGhlIGNoYW5uZWxzIHRvIGNvbnNpZGVyXG4gKiBAcGFyYW0gY2hhbm5lbCB0aGUgY2hhbm5lbCB3ZSB3YW50IHNoaWZ0ZWRcbiAqIEBwYXJhbSBzaGlmdCAgdGhlIGFtb3VudCB0byBzdWJ0cmFjdCBmcm9tIHRoZSBjaGFubmVsLlxuICpcbiAqIEByZXR1cm5zIGEgc3RyaW5nIG9mIHRoZSBmb3JtICd4LCB5LVtzaGlmdF0sIHonIHdoZXJlIGFueSBvbmUgY2hhbm5lbCBjYW5cbiAqIGhhdmUgdGhlIHNoaWZ0IGFwcGxpZWQuXG4gKi9cbmZ1bmN0aW9uIHNoaWZ0ZWRDaGFubmVscyhjaGFubmVsczogc3RyaW5nW10sIGNoYW5uZWw6IHN0cmluZywgc2hpZnQ6IG51bWJlcikge1xuICBjb25zdCBjaGFubmVsSWR4ID0gY2hhbm5lbHMuaW5kZXhPZihjaGFubmVsKTtcbiAgY29uc3QgcmVzID0gY2hhbm5lbHMubWFwKChjLCBpZHgpID0+IHtcbiAgICBpZiAoaWR4ID09PSBjaGFubmVsSWR4KSB7XG4gICAgICByZXR1cm4gYCR7Y30gLSAke3NoaWZ0fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXMuam9pbigpO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Imag } from '@tensorflow/tfjs-core';\nimport { identity } from './Identity';\nexport function imag(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n const inputData = backend.texData.get(input.dataId);\n return identity({ inputs: { x: inputData.complexTensorInfos.imag }, backend });\n}\nexport const imagConfig = {\n kernelName: Imag,\n backendName: 'webgl',\n kernelFunc: imag\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9JbWFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQW1ELE1BQU0sdUJBQXVCLENBQUM7QUFHN0YsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQXFEO0lBRXhFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXBELE9BQU8sUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0ltYWcsIEltYWdJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4vSWRlbnRpdHknO1xuXG5leHBvcnQgZnVuY3Rpb24gaW1hZyhhcmdzOiB7aW5wdXRzOiBJbWFnSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2lucHV0fSA9IGlucHV0cztcbiAgY29uc3QgaW5wdXREYXRhID0gYmFja2VuZC50ZXhEYXRhLmdldChpbnB1dC5kYXRhSWQpO1xuXG4gIHJldHVybiBpZGVudGl0eSh7aW5wdXRzOiB7eDogaW5wdXREYXRhLmNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnfSwgYmFja2VuZH0pO1xufVxuXG5leHBvcnQgY29uc3QgaW1hZ0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBJbWFnLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogaW1hZyBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, env, util } from '@tensorflow/tfjs-core';\nimport { ConcatProgram } from '../concat_gpu';\nimport { ConcatPackedProgram } from '../concat_packed_gpu';\nimport { concatImplCPU } from '../kernel_utils/shared';\nimport { CLONE, UnaryOpProgram } from '../unaryop_gpu';\nimport { UnaryOpPackedProgram } from '../unaryop_packed_gpu';\nimport { complex } from './Complex';\nimport { imag } from './Imag';\nimport { real } from './Real';\nimport { reshape } from './Reshape';\nexport function concatImpl(inputs, axis, backend) {\n const dtype = inputs[0].dtype;\n if (dtype === 'complex64') {\n const reals = inputs.map((t) => real({ inputs: { input: t }, backend }));\n const imags = inputs.map((t) => imag({ inputs: { input: t }, backend }));\n const realConcated = concatImpl(reals, axis, backend);\n const imagConcated = concatImpl(imags, axis, backend);\n const result = complex({ inputs: { real: realConcated, imag: imagConcated }, backend });\n reals.forEach(r => backend.disposeIntermediateTensorInfo(r));\n imags.forEach(i => backend.disposeIntermediateTensorInfo(i));\n backend.disposeIntermediateTensorInfo(realConcated);\n backend.disposeIntermediateTensorInfo(imagConcated);\n return result;\n }\n let runOnCpu = backend.shouldExecuteOnCPU(inputs);\n // Run on cpu if dtype is string. For string, the backend represents it\n // as Uint8Array[], where each Uint8Array is a character. Given that the\n // computation is only on the outer array, uploading the whole data onto\n // gpu is wasteful. Also, currently webgl doesn't have a design to\n // upload and retrieve Uint8Array[] between cpu and gpu. Therefore, we\n // just run the kernel on cpu if dtype is string.\n if (dtype === 'string') {\n runOnCpu = true;\n }\n if (runOnCpu) {\n // Any concat of n-dimensional tensors across any axis can be reduced to\n // a concatenation of two-dimensional tensors across the axis 1 by first\n // partitioning the axes of the original tensors into those less than the\n // axis to be concatenated and the rest. Then reshape the tensors\n // into a two-dimensional tensor by collapsing these two sets of axes and\n // concatenate the resulting matrices across the axis 1, finally reshaping\n // the result to have the proper shape.\n const tensors2D = inputs.map(t => {\n const innerSize = util.sizeFromShape(t.shape.slice(axis));\n const shape = [-1, innerSize];\n return reshape({ inputs: { x: t }, backend, attrs: { shape } });\n });\n const inputsValShapes = tensors2D.map(t => {\n return { vals: backend.readSync(t.dataId), shape: t.shape };\n });\n // Concats 2d tensors along axis=1.\n const outShape = backend_util.computeOutShape(tensors2D.map(t => t.shape), 1 /* axis */);\n const simplyConcat = tensors2D[0].shape[0] === 1;\n const outVals = concatImplCPU(inputsValShapes, outShape, dtype, simplyConcat);\n const finalOutShape = backend_util.computeOutShape(inputs.map(t => t.shape), axis);\n const outInfo = backend.makeTensorInfo(finalOutShape, dtype, outVals);\n tensors2D.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return outInfo;\n }\n // Keep only non-empty tensors (ignore tensors with 0 in their shape).\n const $inputs = inputs.filter(t => util.sizeFromShape(t.shape) > 0);\n const shouldPack = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') &&\n $inputs[0].shape.length > 1;\n if ($inputs.length === 1) {\n // Clone tensor.\n const program = shouldPack ?\n new UnaryOpProgram(inputs[0].shape, CLONE) :\n new UnaryOpPackedProgram(inputs[0].shape, CLONE);\n return backend.runWebGLProgram(program, inputs, dtype);\n }\n const maxTexturesInShader = env().getNumber('WEBGL_MAX_TEXTURES_IN_SHADER');\n if ($inputs.length > maxTexturesInShader) {\n const reducedInputs = [];\n for (let i = 0; i < $inputs.length; i += maxTexturesInShader) {\n const subArray = $inputs.slice(i, i + maxTexturesInShader);\n reducedInputs.push(concatImpl(subArray, axis, backend));\n }\n const result = concatImpl(reducedInputs, axis, backend);\n for (const i of reducedInputs) {\n backend.disposeIntermediateTensorInfo(i);\n }\n return result;\n }\n if (shouldPack) {\n const program = new ConcatPackedProgram($inputs.map(t => t.shape), axis);\n return backend.runWebGLProgram(program, $inputs, dtype);\n }\n const { tensors2D, outShape } = computeTensors2D($inputs, axis, backend);\n const program = new ConcatProgram(tensors2D.map(t => t.shape));\n const result = backend.runWebGLProgram(program, tensors2D, dtype);\n tensors2D.forEach(r => backend.disposeIntermediateTensorInfo(r));\n const reshapedResult = reshape({ inputs: { x: result }, attrs: { shape: outShape }, backend });\n backend.disposeIntermediateTensorInfo(result);\n return reshapedResult;\n}\nfunction computeTensors2D(inputs, axis, backend) {\n // Any concat of n-dimensional tensors across any axis can be reduced to\n // a concatenation of two-dimensional tensors across the axis 1 by first\n // partitioning the axes of the original tensors into those less than the\n // axis to be concatenated and the rest. Then reshape the tensors\n // into a two-dimensional tensor by collapsing these two sets of axes and\n // concatenate the resulting matrices across the axis 1, finally reshaping\n // the result to have the proper shape.\n const outShape = backend_util.computeOutShape(inputs.map(t => t.shape), axis);\n const tensors2D = inputs.map(x => reshape({\n inputs: { x },\n attrs: { shape: [-1, util.sizeFromShape(x.shape.slice(axis))] },\n backend\n }));\n return { tensors2D, outShape };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uY2F0X2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQ29uY2F0X2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBZ0IsR0FBRyxFQUFjLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3hGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxLQUFLLEVBQUUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsVUFBVSxDQUN0QixNQUFvQixFQUFFLElBQVksRUFBRSxPQUF5QjtJQUMvRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlCLElBQUksS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUN6QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxF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S0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQztRQUM3RCxPQUFPO0tBQ1IsQ0FBQyxDQUFDLENBQUM7SUFFUixPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBDb25jYXRJbnB1dHMsIGVudiwgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7Q29uY2F0UHJvZ3JhbX0gZnJvbSAnLi4vY29uY2F0X2dwdSc7XG5pbXBvcnQge0NvbmNhdFBhY2tlZFByb2dyYW19IGZyb20gJy4uL2NvbmNhdF9wYWNrZWRfZ3B1JztcbmltcG9ydCB7Y29uY2F0SW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5pbXBvcnQge0NMT05FLCBVbmFyeU9wUHJvZ3JhbX0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuaW1wb3J0IHtVbmFyeU9wUGFja2VkUHJvZ3JhbX0gZnJvbSAnLi4vdW5hcnlvcF9wYWNrZWRfZ3B1JztcblxuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuL0NvbXBsZXgnO1xuaW1wb3J0IHtpbWFnfSBmcm9tICcuL0ltYWcnO1xuaW1wb3J0IHtyZWFsfSBmcm9tICcuL1JlYWwnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0SW1wbChcbiAgICBpbnB1dHM6IENvbmNhdElucHV0cywgYXhpczogbnVtYmVyLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMKTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IGR0eXBlID0gaW5wdXRzWzBdLmR0eXBlO1xuICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgY29uc3QgcmVhbHMgPSBpbnB1dHMubWFwKCh0KSA9PiByZWFsKHtpbnB1dHM6IHtpbnB1dDogdH0sIGJhY2tlbmR9KSk7XG4gICAgY29uc3QgaW1hZ3MgPSBpbnB1dHMubWFwKCh0KSA9PiBpbWFnKHtpbnB1dHM6IHtpbnB1dDogdH0sIGJhY2tlbmR9KSk7XG5cbiAgICBjb25zdCByZWFsQ29uY2F0ZWQgPSBjb25jYXRJbXBsKHJlYWxzLCBheGlzLCBiYWNrZW5kKTtcbiAgICBjb25zdCBpbWFnQ29uY2F0ZWQgPSBjb25jYXRJbXBsKGltYWdzLCBheGlzLCBiYWNrZW5kKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgIGNvbXBsZXgoe2lucHV0czoge3JlYWw6IHJlYWxDb25jYXRlZCwgaW1hZzogaW1hZ0NvbmNhdGVkfSwgYmFja2VuZH0pO1xuXG4gICAgcmVhbHMuZm9yRWFjaChyID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocikpO1xuICAgIGltYWdzLmZvckVhY2goaSA9PiBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGkpKTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlYWxDb25jYXRlZCk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbWFnQ29uY2F0ZWQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGxldCBydW5PbkNwdSA9IGJhY2tlbmQuc2hvdWxkRXhlY3V0ZU9uQ1BVKGlucHV0cyk7XG5cbiAgLy8gUnVuIG9uIGNwdSBpZiBkdHlwZSBpcyBzdHJpbmcuIEZvciBzdHJpbmcsIHRoZSBiYWNrZW5kIHJlcHJlc2VudHMgaXRcbiAgLy8gYXMgVWludDhBcnJheVtdLCB3aGVyZSBlYWNoIFVpbnQ4QXJyYXkgaXMgYSBjaGFyYWN0ZXIuIEdpdmVuIHRoYXQgdGhlXG4gIC8vIGNvbXB1dGF0aW9uIGlzIG9ubHkgb24gdGhlIG91dGVyIGFycmF5LCB1cGxvYWRpbmcgdGhlIHdob2xlIGRhdGEgb250b1xuICAvLyBncHUgaXMgd2FzdGVmdWwuIEFsc28sIGN1cnJlbnRseSB3ZWJnbCBkb2Vzbid0IGhhdmUgYSBkZXNpZ24gdG9cbiAgLy8gdXBsb2FkIGFuZCByZXRyaWV2ZSBVaW50OEFycmF5W10gYmV0d2VlbiBjcHUgYW5kIGdwdS4gVGhlcmVmb3JlLCB3ZVxuICAvLyBqdXN0IHJ1biB0aGUga2VybmVsIG9uIGNwdSBpZiBkdHlwZSBpcyBzdHJpbmcuXG4gIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBydW5PbkNwdSA9IHRydWU7XG4gIH1cblxuICBpZiAocnVuT25DcHUpIHtcbiAgICAvLyBBbnkgY29uY2F0IG9mIG4tZGltZW5zaW9uYWwgdGVuc29ycyBhY3Jvc3MgYW55IGF4aXMgY2FuIGJlIHJlZHVjZWQgdG9cbiAgICAvLyBhIGNvbmNhdGVuYXRpb24gb2YgdHdvLWRpbWVuc2lvbmFsIHRlbnNvcnMgYWNyb3NzIHRoZSBheGlzIDEgYnkgZmlyc3RcbiAgICAvLyBwYXJ0aXRpb25pbmcgdGhlIGF4ZXMgb2YgdGhlIG9yaWdpbmFsIHRlbnNvcnMgaW50byB0aG9zZSBsZXNzIHRoYW4gdGhlXG4gICAgLy8gYXhpcyB0byBiZSBjb25jYXRlbmF0ZWQgYW5kIHRoZSByZXN0LiBUaGVuIHJlc2hhcGUgdGhlIHRlbnNvcnNcbiAgICAvLyBpbnRvIGEgdHdvLWRpbWVuc2lvbmFsIHRlbnNvciBieSBjb2xsYXBzaW5nIHRoZXNlIHR3byBzZXRzIG9mIGF4ZXMgYW5kXG4gICAgLy8gY29uY2F0ZW5hdGUgdGhlIHJlc3VsdGluZyBtYXRyaWNlcyBhY3Jvc3MgdGhlIGF4aXMgMSwgZmluYWxseSByZXNoYXBpbmdcbiAgICAvLyB0aGUgcmVzdWx0IHRvIGhhdmUgdGhlIHByb3BlciBzaGFwZS5cbiAgICBjb25zdCB0ZW5zb3JzMkQgPSBpbnB1dHMubWFwKHQgPT4ge1xuICAgICAgY29uc3QgaW5uZXJTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHQuc2hhcGUuc2xpY2UoYXhpcykpO1xuICAgICAgY29uc3Qgc2hhcGUgPSBbLTEsIGlubmVyU2l6ZV07XG4gICAgICByZXR1cm4gcmVzaGFwZSh7aW5wdXRzOiB7eDogdH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGV9fSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dHNWYWxTaGFwZXMgPSB0ZW5zb3JzMkQubWFwKHQgPT4ge1xuICAgICAgcmV0dXJuIHt2YWxzOiBiYWNrZW5kLnJlYWRTeW5jKHQuZGF0YUlkKSwgc2hhcGU6IHQuc2hhcGV9O1xuICAgIH0pO1xuXG4gICAgLy8gQ29uY2F0cyAyZCB0ZW5zb3JzIGFsb25nIGF4aXM9MS5cbiAgICBjb25zdCBvdXRTaGFwZSA9XG4gICAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0U2hhcGUodGVuc29yczJELm1hcCh0ID0+IHQuc2hhcGUpLCAxIC8qIGF4aXMgKi8pO1xuICAgIGNvbnN0IHNpbXBseUNvbmNhdCA9IHRlbnNvcnMyRFswXS5zaGFwZVswXSA9PT0gMTtcbiAgICBjb25zdCBvdXRWYWxzID1cbiAgICAgICAgY29uY2F0SW1wbENQVShpbnB1dHNWYWxTaGFwZXMsIG91dFNoYXBlLCBkdHlwZSwgc2ltcGx5Q29uY2F0KTtcblxuICAgIGNvbnN0IGZpbmFsT3V0U2hhcGUgPVxuICAgICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dFNoYXBlKGlucHV0cy5tYXAodCA9PiB0LnNoYXBlKSwgYXhpcyk7XG5cbiAgICBjb25zdCBvdXRJbmZvID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhmaW5hbE91dFNoYXBlLCBkdHlwZSwgb3V0VmFscyk7XG5cbiAgICB0ZW5zb3JzMkQuZm9yRWFjaCh0ID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odCkpO1xuXG4gICAgcmV0dXJuIG91dEluZm87XG4gIH1cblxuICAvLyBLZWVwIG9ubHkgbm9uLWVtcHR5IHRlbnNvcnMgKGlnbm9yZSB0ZW5zb3JzIHdpdGggMCBpbiB0aGVpciBzaGFwZSkuXG4gIGNvbnN0ICRpbnB1dHMgPSBpbnB1dHMuZmlsdGVyKHQgPT4gdXRpbC5zaXplRnJvbVNoYXBlKHQuc2hhcGUpID4gMCk7XG5cbiAgY29uc3Qgc2hvdWxkUGFjazogYm9vbGVhbiA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfQVJSQVlfT1BFUkFUSU9OUycpICYmXG4gICAgICAkaW5wdXRzWzBdLnNoYXBlLmxlbmd0aCA+IDE7XG5cbiAgaWYgKCRpbnB1dHMubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gQ2xvbmUgdGVuc29yLlxuICAgIGNvbnN0IHByb2dyYW0gPSBzaG91bGRQYWNrID9cbiAgICAgICAgbmV3IFVuYXJ5T3BQcm9ncmFtKGlucHV0c1swXS5zaGFwZSwgQ0xPTkUpIDpcbiAgICAgICAgbmV3IFVuYXJ5T3BQYWNrZWRQcm9ncmFtKGlucHV0c1swXS5zaGFwZSwgQ0xPTkUpO1xuICAgIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBpbnB1dHMsIGR0eXBlKTtcbiAgfVxuXG4gIGNvbnN0IG1heFRleHR1cmVzSW5TaGFkZXIgPSBlbnYoKS5nZXROdW1iZXIoJ1dFQkdMX01BWF9URVhUVVJFU19JTl9TSEFERVInKTtcbiAgaWYgKCRpbnB1dHMubGVuZ3RoID4gbWF4VGV4dHVyZXNJblNoYWRlcikge1xuICAgIGNvbnN0IHJlZHVjZWRJbnB1dHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8ICRpbnB1dHMubGVuZ3RoOyBpICs9IG1heFRleHR1cmVzSW5TaGFkZXIpIHtcbiAgICAgIGNvbnN0IHN1YkFycmF5ID0gJGlucHV0cy5zbGljZShpLCBpICsgbWF4VGV4dHVyZXNJblNoYWRlcik7XG4gICAgICByZWR1Y2VkSW5wdXRzLnB1c2goY29uY2F0SW1wbChzdWJBcnJheSwgYXhpcywgYmFja2VuZCkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBjb25jYXRJbXBsKHJlZHVjZWRJbnB1dHMsIGF4aXMsIGJhY2tlbmQpO1xuXG4gICAgZm9yIChjb25zdCBpIG9mIHJlZHVjZWRJbnB1dHMpIHtcbiAgICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChzaG91bGRQYWNrKSB7XG4gICAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb25jYXRQYWNrZWRQcm9ncmFtKCRpbnB1dHMubWFwKHQgPT4gdC5zaGFwZSksIGF4aXMpO1xuICAgIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCAkaW5wdXRzLCBkdHlwZSk7XG4gIH1cblxuICBjb25zdCB7dGVuc29yczJELCBvdXRTaGFwZX0gPSBjb21wdXRlVGVuc29yczJEKCRpbnB1dHMsIGF4aXMsIGJhY2tlbmQpO1xuICBjb25zdCBwcm9ncmFtID1cbiAgICAgIG5ldyBDb25jYXRQcm9ncmFtKHRlbnNvcnMyRC5tYXAodCA9PiB0LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlcl0pKTtcbiAgY29uc3QgcmVzdWx0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgdGVuc29yczJELCBkdHlwZSk7XG5cbiAgdGVuc29yczJELmZvckVhY2gociA9PiBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHIpKTtcbiAgY29uc3QgcmVzaGFwZWRSZXN1bHQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVzdWx0fSwgYXR0cnM6IHtzaGFwZTogb3V0U2hhcGV9LCBiYWNrZW5kfSk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzdWx0KTtcblxuICByZXR1cm4gcmVzaGFwZWRSZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVUZW5zb3JzMkQoXG4gICAgaW5wdXRzOiBDb25jYXRJbnB1dHMsIGF4aXM6IG51bWJlciwgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCkge1xuICAvLyBBbnkgY29uY2F0IG9mIG4tZGltZW5zaW9uYWwgdGVuc29ycyBhY3Jvc3MgYW55IGF4aXMgY2FuIGJlIHJlZHVjZWQgdG9cbiAgLy8gYSBjb25jYXRlbmF0aW9uIG9mIHR3by1kaW1lbnNpb25hbCB0ZW5zb3JzIGFjcm9zcyB0aGUgYXhpcyAxIGJ5IGZpcnN0XG4gIC8vIHBhcnRpdGlvbmluZyB0aGUgYXhlcyBvZiB0aGUgb3JpZ2luYWwgdGVuc29ycyBpbnRvIHRob3NlIGxlc3MgdGhhbiB0aGVcbiAgLy8gYXhpcyB0byBiZSBjb25jYXRlbmF0ZWQgYW5kIHRoZSByZXN0LiBUaGVuIHJlc2hhcGUgdGhlIHRlbnNvcnNcbiAgLy8gaW50byBhIHR3by1kaW1lbnNpb25hbCB0ZW5zb3IgYnkgY29sbGFwc2luZyB0aGVzZSB0d28gc2V0cyBvZiBheGVzIGFuZFxuICAvLyBjb25jYXRlbmF0ZSB0aGUgcmVzdWx0aW5nIG1hdHJpY2VzIGFjcm9zcyB0aGUgYXhpcyAxLCBmaW5hbGx5IHJlc2hhcGluZ1xuICAvLyB0aGUgcmVzdWx0IHRvIGhhdmUgdGhlIHByb3BlciBzaGFwZS5cbiAgY29uc3Qgb3V0U2hhcGUgPSBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dFNoYXBlKGlucHV0cy5tYXAodCA9PiB0LnNoYXBlKSwgYXhpcyk7XG4gIGNvbnN0IHRlbnNvcnMyRCA9IGlucHV0cy5tYXAoXG4gICAgICB4ID0+IHJlc2hhcGUoe1xuICAgICAgICBpbnB1dHM6IHt4fSxcbiAgICAgICAgYXR0cnM6IHtzaGFwZTogWy0xLCB1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZS5zbGljZShheGlzKSldfSxcbiAgICAgICAgYmFja2VuZFxuICAgICAgfSkpO1xuXG4gIHJldHVybiB7dGVuc29yczJELCBvdXRTaGFwZX07XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Concat, util } from '@tensorflow/tfjs-core';\nimport { concatImpl } from './Concat_impl';\nimport { identity } from './Identity';\nexport function concat(args) {\n const { inputs, backend, attrs } = args;\n const { axis } = attrs;\n const $axis = util.parseAxisParam(axis, inputs[0].shape)[0];\n const shapes = inputs.map(t => t.shape);\n backend_util.assertParamsConsistent(shapes, $axis);\n const outShape = backend_util.computeOutShape(inputs.map(t => t.shape), $axis);\n if (util.sizeFromShape(outShape) === 0) {\n return backend.makeTensorInfo(outShape, inputs[0].dtype, []);\n }\n // Keep only non-empty tensors (ignore tensors with 0 in their shape).\n const $inputs = inputs.filter(t => util.sizeFromShape(t.shape) > 0);\n if ($inputs.length === 1) {\n return identity({ inputs: { x: $inputs[0] }, backend });\n }\n return concatImpl($inputs, $axis, backend);\n}\nexport const concatConfig = {\n kernelName: Concat,\n backendName: 'webgl',\n kernelFunc: concat\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uY2F0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0NvbmNhdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBbUUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbEksT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQ3lFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFbkQsTUFBTSxRQUFRLEdBQ1YsWUFBWSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWxFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzlEO0lBRUQsc0VBQXNFO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7S0FDckQ7SUFFRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29uY2F0LCBDb25jYXRBdHRycywgQ29uY2F0SW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge2NvbmNhdEltcGx9IGZyb20gJy4vQ29uY2F0X2ltcGwnO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSAnLi9JZGVudGl0eSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoXG4gICAgYXJnczpcbiAgICAgICAge2lucHV0czogQ29uY2F0SW5wdXRzLCBhdHRyczogQ29uY2F0QXR0cnMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2F4aXN9ID0gYXR0cnM7XG5cbiAgY29uc3QgJGF4aXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIGlucHV0c1swXS5zaGFwZSlbMF07XG5cbiAgY29uc3Qgc2hhcGVzID0gaW5wdXRzLm1hcCh0ID0+IHQuc2hhcGUpO1xuICBiYWNrZW5kX3V0aWwuYXNzZXJ0UGFyYW1zQ29uc2lzdGVudChzaGFwZXMsICRheGlzKTtcblxuICBjb25zdCBvdXRTaGFwZSA9XG4gICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dFNoYXBlKGlucHV0cy5tYXAodCA9PiB0LnNoYXBlKSwgJGF4aXMpO1xuXG4gIGlmICh1dGlsLnNpemVGcm9tU2hhcGUob3V0U2hhcGUpID09PSAwKSB7XG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0U2hhcGUsIGlucHV0c1swXS5kdHlwZSwgW10pO1xuICB9XG5cbiAgLy8gS2VlcCBvbmx5IG5vbi1lbXB0eSB0ZW5zb3JzIChpZ25vcmUgdGVuc29ycyB3aXRoIDAgaW4gdGhlaXIgc2hhcGUpLlxuICBjb25zdCAkaW5wdXRzID0gaW5wdXRzLmZpbHRlcih0ID0+IHV0aWwuc2l6ZUZyb21TaGFwZSh0LnNoYXBlKSA+IDApO1xuICBpZiAoJGlucHV0cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gaWRlbnRpdHkoe2lucHV0czoge3g6ICRpbnB1dHNbMF19LCBiYWNrZW5kfSk7XG4gIH1cblxuICByZXR1cm4gY29uY2F0SW1wbCgkaW5wdXRzLCAkYXhpcywgYmFja2VuZCk7XG59XG5cbmV4cG9ydCBjb25zdCBjb25jYXRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29uY2F0LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogY29uY2F0IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class Conv2DProgram {\n constructor(convInfo, addBias = false, activation = null, hasPreluActivationWeights = false, hasLeakyreluAlpha = false) {\n this.variableNames = ['x', 'W'];\n this.outputShape = convInfo.outShape;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const inputDepthNearestVec4 = Math.floor(convInfo.inChannels / 4) * 4;\n const inputDepthVec4Remainder = convInfo.inChannels % 4;\n const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n const rowDim = isChannelsLast ? 1 : 2;\n const colDim = isChannelsLast ? 2 : 3;\n const channelDim = isChannelsLast ? 3 : 1;\n let activationSnippet = '', applyActivationSnippet = '';\n if (activation) {\n if (hasPreluActivationWeights) {\n activationSnippet = `float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${activation}\n }`;\n }\n else if (hasLeakyreluAlpha) {\n activationSnippet = `float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${activation}\n }`;\n }\n else {\n activationSnippet = `\n float activation(float x) {\n ${activation}\n }\n `;\n }\n applyActivationSnippet = `result = activation(result);`;\n }\n const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n if (addBias) {\n this.variableNames.push('bias');\n }\n if (hasPreluActivationWeights) {\n this.variableNames.push('preluActivationWeights');\n }\n if (hasLeakyreluAlpha) {\n this.variableNames.push('leakyreluAlpha');\n }\n 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 `;\n }\n}\nexport class Conv3DProgram {\n constructor(convInfo) {\n this.variableNames = ['x', 'W'];\n this.outputShape = convInfo.outShape;\n const padFront = convInfo.padInfo.front;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationDepth = convInfo.dilationDepth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const filterDepth = convInfo.filterDepth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const inputDepthNearestVec4 = Math.floor(convInfo.inChannels / 4) * 4;\n const inputDepthVec4Remainder = convInfo.inChannels % 4;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2NvbnZfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE1BQU0sT0FBTyxhQUFhO0lBS3hCLFlBQ0ksUUFBaUMsRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUNsRCxhQUFxQixJQUFJLEVBQUUseUJBQXlCLEdBQUcsS0FBSyxFQUM1RCxpQkFBaUIsR0FBRyxLQUFLO1FBUDdCLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFRekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDN0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBRXpDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RSxNQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxVQUFVLEtB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dUJBQXVCLEtBQUssQ0FBQzs7NENBRVoscUJBQXFCOzRDQUNyQixxQkFBcUI7OztxQ0FHNUIscUJBQXFCO3FDQUNyQixxQkFBcUI7OzsyQkFHL0IsdUJBQXVCLEtBQUssQ0FBQzs7NENBRVoscUJBQXFCOzRDQUNyQixxQkFBcUI7NENBQ3JCLHFCQUFxQjs7O3FDQUc1QixxQkFBcUI7cUNBQ3JCLHFCQUFxQjtxQ0FDckIscUJBQXFCOzs7Ozs7Ozs7S0FTckQsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIENvbnYyRFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWyd4JywgJ1cnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252MkRJbmZvLCBhZGRCaWFzID0gZmFsc2UsXG4gICAgICBhY3RpdmF0aW9uOiBzdHJpbmcgPSBudWxsLCBoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gZmFsc2UsXG4gICAgICBoYXNMZWFreXJlbHVBbHBoYSA9IGZhbHNlKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGNvbnZJbmZvLm91dFNoYXBlO1xuICAgIGNvbnN0IHBhZFRvcCA9IGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICAgIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gICAgY29uc3Qgc3RyaWRlSGVpZ2h0ID0gY29udkluZm8uc3RyaWRlSGVpZ2h0O1xuICAgIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gICAgY29uc3QgZGlsYXRpb25IZWlnaHQgPSBjb252SW5mby5kaWxhdGlvbkhlaWdodDtcbiAgICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgICBjb25zdCBmaWx0ZXJIZWlnaHQgPSBjb252SW5mby5maWx0ZXJIZWlnaHQ7XG4gICAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcblxuICAgIGNvbnN0IGlucHV0RGVwdGhOZWFyZXN0VmVjNCA9IE1hdGguZmxvb3IoY29udkluZm8uaW5DaGFubmVscyAvIDQpICogNDtcbiAgICBjb25zdCBpbnB1dERlcHRoVmVjNFJlbWFpbmRlciA9IGNvbnZJbmZvLmluQ2hhbm5lbHMgJSA0O1xuICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gY29udkluZm8uZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCc7XG5cbiAgICBjb25zdCByb3dEaW0gPSBpc0NoYW5uZWxzTGFzdCA/IDEgOiAyO1xuICAgIGNvbnN0IGNvbERpbSA9IGlzQ2hhbm5lbHNMYXN0ID8gMiA6IDM7XG4gICAgY29uc3QgY2hhbm5lbERpbSA9IGlzQ2hhbm5lbHNMYXN0ID8gMyA6IDE7XG5cbiAgICBsZXQgYWN0aXZhdGlvblNuaXBwZXQgPSAnJywgYXBwbHlBY3RpdmF0aW9uU25pcHBldCA9ICcnO1xuICAgIGlmIChhY3RpdmF0aW9uKSB7XG4gICAgICBpZiAoaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cykge1xuICAgICAgICBhY3RpdmF0aW9uU25pcHBldCA9IGBmbG9hdCBhY3RpdmF0aW9uKGZsb2F0IGEpIHtcbiAgICAgICAgICBmbG9hdCBiID0gZ2V0UHJlbHVBY3RpdmF0aW9uV2VpZ2h0c0F0T3V0Q29vcmRzKCk7XG4gICAgICAgICAgJHthY3RpdmF0aW9ufVxuICAgICAgICB9YDtcbiAgICAgIH0gZWxzZSBpZiAoaGFzTGVha3lyZWx1QWxwaGEpIHtcbiAgICAgICAgYWN0aXZhdGlvblNuaXBwZXQgPSBgZmxvYXQgYWN0aXZhdGlvbihmbG9hdCBhKSB7XG4gICAgICAgICAgZmxvYXQgYiA9IGdldExlYWt5cmVsdUFscGhhQXRPdXRDb29yZHMoKTtcbiAgICAgICAgICAke2FjdGl2YXRpb259XG4gICAgICAgIH1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZhdGlvblNuaXBwZXQgPSBgXG4gICAgICAgICAgZmxvYXQgYWN0aXZhdGlvbihmbG9hdCB4KSB7XG4gICAgICAgICAgICAke2FjdGl2YXRpb259XG4gICAgICAgICAgfVxuICAgICAgICBgO1xuICAgICAgfVxuXG4gICAgICBhcHBseUFjdGl2YXRpb25TbmlwcGV0ID0gYHJlc3VsdCA9IGFjdGl2YXRpb24ocmVzdWx0KTtgO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZEJpYXNTbmlwcGV0ID0gYWRkQmlhcyA/ICdyZXN1bHQgKz0gZ2V0Qmlhc0F0T3V0Q29vcmRzKCk7JyA6ICcnO1xuICAgIGlmIChhZGRCaWFzKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZXMucHVzaCgnYmlhcycpO1xuICAgIH1cblxuICAgIGlmIChoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZXMucHVzaCgncHJlbHVBY3RpdmF0aW9uV2VpZ2h0cycpO1xuICAgIH1cblxuICAgIGlmIChoYXNMZWFreXJlbHVBbHBoYSkge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ2xlYWt5cmVsdUFscGhhJyk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgICR7YWN0aXZhdGlvblNuaXBwZXR9XG5cbiAgICAgIGNvbnN0IGl2ZWMyIHN0cmlkZXMgPSBpdmVjMigke3N0cmlkZUhlaWdodH0sICR7c3RyaWRlV2lkdGh9KTtcbiAgICAgIGNvbnN0IGl2ZWMyIHBhZHMgPSBpdmVjMigke3BhZFRvcH0sICR7cGFkTGVmdH0pO1xuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHNbMF07XG4gICAgICAgIGludCBkMiA9IGNvb3Jkc1ske2NoYW5uZWxEaW19XTtcblxuICAgICAgICBpdmVjMiB4UkNDb3JuZXIgPVxuICAgICAgICAgICAgaXZlYzIoY29vcmRzWyR7cm93RGltfV0sIGNvb3Jkc1ske2NvbERpbX1dKSAqIHN0cmlkZXMgLSBwYWRzO1xuICAgICAgICBpbnQgeFJDb3JuZXIgPSB4UkNDb3JuZXIueDtcbiAgICAgICAgaW50IHhDQ29ybmVyID0geFJDQ29ybmVyLnk7XG5cbiAgICAgICAgLy8gQ29udm9sdmUgeCg/LCA/LCBkMSkgd2l0aCB3KDosIDosIGQxLCBkMikgdG8gZ2V0IHkoeVIsIHlDLCBkMikuXG4gICAgICAgIC8vID8gPSB0byBiZSBkZXRlcm1pbmVkLiA6ID0gYWNyb3NzIGFsbCB2YWx1ZXMgaW4gdGhhdCBheGlzLlxuICAgICAgICBmbG9hdCBkb3RQcm9kID0gMC4wO1xuICAgICAgICBmb3IgKGludCB3UiA9IDA7IHdSIDwgJHtmaWx0ZXJIZWlnaHR9OyB3UisrKSB7XG4gICAgICAgICAgaW50IHhSID0geFJDb3JuZXIgKyB3UiAqICR7ZGlsYXRpb25IZWlnaHR9O1xuXG4gICAgICAgICAgaWYgKHhSIDwgMCB8fCB4UiA+PSAke2NvbnZJbmZvLmluSGVpZ2h0fSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChpbnQgd0MgPSAwOyB3QyA8ICR7ZmlsdGVyV2lkdGh9OyB3QysrKSB7XG4gICAgICAgICAgICBpbnQgeEMgPSB4Q0Nvcm5lciArIHdDICogJHtkaWxhdGlvbldpZHRofTtcblxuICAgICAgICAgICAgaWYgKHhDIDwgMCB8fCB4QyA+PSAke2NvbnZJbmZvLmluV2lkdGh9KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGludCBkMSA9IDA7IGQxIDwgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9OyBkMSArPSA0KSB7XG4gICAgICAgICAgICAgIHZlYzQgd1ZhbHVlcyA9IHZlYzQoXG4gICAgICAgICAgICAgICAgZ2V0Vyh3Uiwgd0MsIGQxLCBkMiksXG4gICAgICAgICAgICAgICAgZ2V0Vyh3Uiwgd0MsIGQxICsgMSwgZDIpLFxuICAgICAgICAgICAgICAgIGdldFcod1IsIHdDLCBkMSArIDIsIGQyKSxcbiAgICAgICAgICAgICAgICBnZXRXKHdSLCB3QywgZDEgKyAzLCBkMilcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoJHtpc0NoYW5uZWxzTGFzdH0pIHtcbiAgICAgICAgICAgICAgICB2ZWM0IHhWYWx1ZXMgPSB2ZWM0KFxuICAgICAgICAgICAgICAgICAgZ2V0WChiYXRjaCwgeFIsIHhDLCBkMSksXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCB4UiwgeEMsIGQxICsgMSksXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCB4UiwgeEMsIGQxICsgMiksXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCB4UiwgeEMsIGQxICsgMylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRvdFByb2QgKz0gZG90KHhWYWx1ZXMsIHdWYWx1ZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZlYzQgeFZhbHVlcyA9IHZlYzQoXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCBkMSwgeFIsIHhDKSxcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsIGQxICsgMSwgeFIsIHhDKSxcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsIGQxICsgMiwgeFIsIHhDKSxcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsIGQxICsgMywgeFIsIHhDKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPSBkb3QoeFZhbHVlcywgd1ZhbHVlcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCR7aW5wdXREZXB0aFZlYzRSZW1haW5kZXIgPT09IDF9KSB7XG5cbiAgICAgICAgICAgICAgaWYgKCR7aXNDaGFubmVsc0xhc3R9KSB7XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPVxuICAgICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCB4UiwgeEMsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSkgKlxuICAgICAgICAgICAgICAgICAgICBnZXRXKHdSLCB3QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9LCBkMik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPVxuICAgICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0sIHhSLCB4QykgKlxuICAgICAgICAgICAgICAgICAgICBnZXRXKHdSLCB3QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9LCBkMik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmICgke2lucHV0RGVwdGhWZWM0UmVtYWluZGVyID09PSAyfSkge1xuICAgICAgICAgICAgICB2ZWMyIHdWYWx1ZXMgPSB2ZWMyKFxuICAgICAgICAgICAgICAgIGdldFcod1IsIHdDLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0sIGQyKSxcbiAgICAgICAgICAgICAgICBnZXRXKHdSLCB3QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9ICsgMSwgZDIpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKCR7aXNDaGFubmVsc0xhc3R9KSB7XG4gICAgICAgICAgICAgICAgdmVjMiB4VmFsdWVzID0gdmVjMihcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsIHhSLCB4QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9KSxcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsIHhSLCB4QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9ICsgMSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRvdFByb2QgKz0gZG90KHhWYWx1ZXMsIHdWYWx1ZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZlYzIgeFZhbHVlcyA9IHZlYzIoXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0sIHhSLCB4QyksXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0gKyAxLCB4UiwgeEMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkb3RQcm9kICs9IGRvdCh4VmFsdWVzLCB3VmFsdWVzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR7aW5wdXREZXB0aFZlYzRSZW1haW5kZXIgPT09IDN9KSB7XG4gICAgICAgICAgICAgIHZlYzMgd1ZhbHVlcyA9IHZlYzMoXG4gICAgICAgICAgICAgICAgZ2V0Vyh3Uiwgd0MsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSwgZDIpLFxuICAgICAgICAgICAgICAgIGdldFcod1IsIHdDLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0gKyAxLCBkMiksXG4gICAgICAgICAgICAgICAgZ2V0Vyh3Uiwgd0MsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSArIDIsIGQyKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGlmICgke2lzQ2hhbm5lbHNMYXN0fSkge1xuICAgICAgICAgICAgICAgIHZlYzMgeFZhbHVlcyA9IHZlYzMoXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCB4UiwgeEMsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSksXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCB4UiwgeEMsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSArIDEpLFxuICAgICAgICAgICAgICAgICAgZ2V0WChiYXRjaCwgeFIsIHhDLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0gKyAyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPSBkb3QoeFZhbHVlcywgd1ZhbHVlcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmVjMyB4VmFsdWVzID0gdmVjMyhcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSwgeFIsIHhDKSxcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSArIDEsIHhSLCB4QyksXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0gKyAyLCB4UiwgeEMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkb3RQcm9kICs9IGRvdCh4VmFsdWVzLCB3VmFsdWVzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmxvYXQgcmVzdWx0ID0gZG90UHJvZDtcbiAgICAgICAgJHthZGRCaWFzU25pcHBldH1cbiAgICAgICAgJHthcHBseUFjdGl2YXRpb25TbmlwcGV0fVxuICAgICAgICBzZXRPdXRwdXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb252M0RQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCcsICdXJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb252SW5mbzogYmFja2VuZF91dGlsLkNvbnYzREluZm8pIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gY29udkluZm8ub3V0U2hhcGU7XG4gICAgY29uc3QgcGFkRnJvbnQgPSBjb252SW5mby5wYWRJbmZvLmZyb250O1xuICAgIGNvbnN0IHBhZFRvcCA9IGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICAgIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gICAgY29uc3Qgc3RyaWRlRGVwdGggPSBjb252SW5mby5zdHJpZGVEZXB0aDtcbiAgICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gICAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgICBjb25zdCBkaWxhdGlvbkRlcHRoID0gY29udkluZm8uZGlsYXRpb25EZXB0aDtcbiAgICBjb25zdCBkaWxhdGlvbkhlaWdodCA9IGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0O1xuICAgIGNvbnN0IGRpbGF0aW9uV2lkdGggPSBjb252SW5mby5kaWxhdGlvbldpZHRoO1xuICAgIGNvbnN0IGZpbHRlckRlcHRoID0gY29udkluZm8uZmlsdGVyRGVwdGg7XG4gICAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICAgIGNvbnN0IGZpbHRlcldpZHRoID0gY29udkluZm8uZmlsdGVyV2lkdGg7XG5cbiAgICBjb25zdCBpbnB1dERlcHRoTmVhcmVzdFZlYzQgPSBNYXRoLmZsb29yKGNvbnZJbmZvLmluQ2hhbm5lbHMgLyA0KSAqIDQ7XG4gICAgY29uc3QgaW5wdXREZXB0aFZlYzRSZW1haW5kZXIgPSBjb252SW5mby5pbkNoYW5uZWxzICUgNDtcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICBjb25zdCBpdmVjMyBzdHJpZGVzID0gaXZlYzMoJHtzdHJpZGVEZXB0aH0sICR7c3RyaWRlSGVpZ2h0fSwgJHtcbiAgICAgICAgc3RyaWRlV2lkdGh9KTtcbiAgICAgIGNvbnN0IGl2ZWMzIHBhZHMgPSBpdmVjMygke3BhZEZyb250fSwgJHtwYWRUb3B9LCAke3BhZExlZnR9KTtcblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjNSBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IGJhdGNoID0gY29vcmRzLng7XG4gICAgICAgIGludCBkMiA9IGNvb3Jkcy51O1xuXG4gICAgICAgIGl2ZWMzIHhGUkNDb3JuZXIgPSBpdmVjMyhjb29yZHMueSwgY29vcmRzLnosIGNvb3Jkcy53KSAqIHN0cmlkZXMgLSBwYWRzO1xuICAgICAgICBpbnQgeEZDb3JuZXIgPSB4RlJDQ29ybmVyLng7XG4gICAgICAgIGludCB4UkNvcm5lciA9IHhGUkNDb3JuZXIueTtcbiAgICAgICAgaW50IHhDQ29ybmVyID0geEZSQ0Nvcm5lci56O1xuXG4gICAgICAgIC8vIENvbnZvbHZlIHgoPywgPywgPywgZDEpIHdpdGggdyg6LCA6LCA6LCBkMSwgZDIpIHRvIGdldFxuICAgICAgICAvLyB5KHlGLCB5UiwgeUMsIGQyKS4gPyA9IHRvIGJlIGRldGVybWluZWQuIDogPSBhY3Jvc3MgYWxsXG4gICAgICAgIC8vIHZhbHVlcyBpbiB0aGF0IGF4aXMuXG4gICAgICAgIGZsb2F0IGRvdFByb2QgPSAwLjA7XG4gICAgICAgIGZvciAoaW50IHdGID0gMDsgd0YgPCAke2ZpbHRlckRlcHRofTsgd0YrKykge1xuICAgICAgICAgIGludCB4RiA9IHhGQ29ybmVyICsgd0YgKiAke2RpbGF0aW9uRGVwdGh9O1xuXG4gICAgICAgICAgaWYgKHhGIDwgMCB8fCB4RiA+PSAke2NvbnZJbmZvLmluRGVwdGh9KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGludCB3UiA9IDA7IHdSIDwgJHtmaWx0ZXJIZWlnaHR9OyB3UisrKSB7XG4gICAgICAgICAgICBpbnQgeFIgPSB4UkNvcm5lciArIHdSICogJHtkaWxhdGlvbkhlaWdodH07XG5cbiAgICAgICAgICAgIGlmICh4UiA8IDAgfHwgeFIgPj0gJHtjb252SW5mby5pbkhlaWdodH0pIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaW50IHdDID0gMDsgd0MgPCAke2ZpbHRlcldpZHRofTsgd0MrKykge1xuICAgICAgICAgICAgICBpbnQgeEMgPSB4Q0Nvcm5lciArIHdDICogJHtkaWxhdGlvbldpZHRofTtcblxuICAgICAgICAgICAgICBpZiAoeEMgPCAwIHx8IHhDID49ICR7Y29udkluZm8uaW5XaWR0aH0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoaW50IGQxID0gMDsgZDEgPCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH07IGQxICs9IDQpIHtcbiAgICAgICAgICAgICAgICB2ZWM0IHhWYWx1ZXMgPSB2ZWM0KFxuICAgICAgICAgICAgICAgICAgZ2V0WChiYXRjaCwgeEYsIHhSLCB4QywgZDEpLFxuICAgICAgICAgICAgICAgICAgZ2V0WChiYXRjaCwgeEYsIHhSLCB4QywgZDEgKyAxKSxcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsIHhGLCB4UiwgeEMsIGQxICsgMiksXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCB4RiwgeFIsIHhDLCBkMSArIDMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB2ZWM0IHdWYWx1ZXMgPSB2ZWM0KFxuICAgICAgICAgICAgICAgICAgZ2V0Vyh3Riwgd1IsIHdDLCBkMSwgZDIpLFxuICAgICAgICAgICAgICAgICAgZ2V0Vyh3Riwgd1IsIHdDLCBkMSArIDEsIGQyKSxcbiAgICAgICAgICAgICAgICAgIGdldFcod0YsIHdSLCB3QywgZDEgKyAyLCBkMiksXG4gICAgICAgICAgICAgICAgICBnZXRXKHdGLCB3Uiwgd0MsIGQxICsgMywgZDIpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGRvdFByb2QgKz0gZG90KHhWYWx1ZXMsIHdWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCR7aW5wdXREZXB0aFZlYzRSZW1haW5kZXIgPT09IDF9KSB7XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPVxuICAgICAgICAgICAgICAgICAgZ2V0WChiYXRjaCwgeEYsIHhSLCB4QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9KSAqXG4gICAgICAgICAgICAgICAgICBnZXRXKHdGLCB3Uiwgd0MsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSwgZDIpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCR7aW5wdXREZXB0aFZlYzRSZW1haW5kZXIgPT09IDJ9KSB7XG4gICAgICAgICAgICAgICAgdmVjMiB4VmFsdWVzID0gdmVjMihcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsIHhGLCB4UiwgeEMsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSksXG4gICAgICAgICAgICAgICAgICBnZXRYKGJhdGNoLCB4RiwgeFIsIHhDLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0gKyAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdmVjMiB3VmFsdWVzID0gdmVjMihcbiAgICAgICAgICAgICAgICAgIGdldFcod0YsIHdSLCB3QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9LCBkMiksXG4gICAgICAgICAgICAgICAgICBnZXRXKHdGLCB3Uiwgd0MsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSArIDEsIGQyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPSBkb3QoeFZhbHVlcywgd1ZhbHVlcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHtpbnB1dERlcHRoVmVjNFJlbWFpbmRlciA9PT0gM30pIHtcbiAgICAgICAgICAgICAgICB2ZWMzIHhWYWx1ZXMgPSB2ZWMzKFxuICAgICAgICAgICAgICAgICAgZ2V0WChiYXRjaCwgeEYsIHhSLCB4QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9KSxcbiAgICAgICAgICAgICAgICAgIGdldFgoYmF0Y2gsIHhGLCB4UiwgeEMsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSArIDEpLFxuICAgICAgICAgICAgICAgICAgZ2V0WChiYXRjaCwgeEYsIHhSLCB4QywgJHtpbnB1dERlcHRoTmVhcmVzdFZlYzR9ICsgMilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHZlYzMgd1ZhbHVlcyA9IHZlYzMoXG4gICAgICAgICAgICAgICAgICBnZXRXKHdGLCB3Uiwgd0MsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSwgZDIpLFxuICAgICAgICAgICAgICAgICAgZ2V0Vyh3Riwgd1IsIHdDLCAke2lucHV0RGVwdGhOZWFyZXN0VmVjNH0gKyAxLCBkMiksXG4gICAgICAgICAgICAgICAgICBnZXRXKHdGLCB3Uiwgd0MsICR7aW5wdXREZXB0aE5lYXJlc3RWZWM0fSArIDIsIGQyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPSBkb3QoeFZhbHVlcywgd1ZhbHVlcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0T3V0cHV0KGRvdFByb2QpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { useShapeUniforms } from './gpgpu_math';\nexport class Conv2DPackedProgram {\n constructor(convInfo, addBias = false, activation = null, hasPreluActivation = false, hasLeakyReluAlpha = false) {\n this.variableNames = ['x', 'W'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.customUniforms = [\n { name: 'pads', type: 'ivec2' },\n { name: 'strides', type: 'ivec2' },\n { name: 'dilations', type: 'ivec2' },\n { name: 'inDims', type: 'ivec2' },\n ];\n this.outputShape = convInfo.outShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n const padLeft = convInfo.padInfo.left;\n const strideWidth = convInfo.strideWidth;\n const dilationWidth = convInfo.dilationWidth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const texelsAcross = filterWidth;\n let mainLoop = `\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;\n for (let c = 0; c < filterWidth; c++) {\n 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};`;\n }\n /**\n * This vectorized implementation works by gathering the values needed for\n * each output channel's dot product into vec4's and then multiplying them\n * all together (this happens in the final double for-loop below). Most of\n * the main loop consists of constructing these vec4's with the minimum\n * number of texture2D calls, which means making use of all four returned\n * values from a texture2D call at once.\n */\n mainLoop += `\n for (int r = 0; r < ${filterHeight}; r++) {\n for (int d1 = 0; d1 < ${convInfo.inChannels}; d1 += 2) {\n `;\n for (let c = 0; c < filterWidth; c++) {\n 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);`;\n }\n mainLoop += `\n xR = xRCorner + r * dilations[0];\n if (xR >=0 && xR < inDims[0]) {\n `;\n for (let texelC = 0; texelC < (texelsAcross + 1) / 2; texelC++) {\n const colIndex = texelC * 2;\n mainLoop += `\n xC = xCCorner + ${colIndex * dilationWidth};\n `;\n if (strideWidth === 1) {\n if (colIndex < filterWidth) {\n // If padding is odd, the outer texels have to be composed.\n if (padLeft % 2 === 1) {\n // TODO: Ensure vec4 previous does not result in redundant sample,\n // and avoid setting xTexelRC's that exceed the boundary in the\n // first place rather than resetting them to vec4(0)).\n // To compute xCOffset:\n // - If padding is odd, we must add 1 to ensure we ask for an\n // even-numbered row.\n // - We subtract 2 to access the previous texel.\n 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 `;\n // This texel has been read in previous iteration if the dilation\n // is 1.\n if (dilationWidth === 1 && colIndex > 0) {\n mainLoop += `\n xC${colIndex} = vec4(xTexelC${colIndex - 2}.zw, xTexelC${colIndex}.xy);\n `;\n }\n else {\n 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 `;\n }\n }\n else {\n // Padding is even, so xRC corresponds to a single texel.\n 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 `;\n }\n if (colIndex + 1 < filterWidth) {\n // If dilation is even, the second entry should match the first\n // (either both are composed or both are single samples). But if\n // dilation is odd, then the second entry should be the opposite\n // of the first (if the first is composed, the second is a single\n // sample, and vice versa.)\n const nextTexelOffset = padLeft % 2 === 0 ?\n util.nearestLargerEven(dilationWidth) :\n dilationWidth;\n if ((dilationWidth % 2 === 0 && padLeft % 2 === 1) ||\n (dilationWidth % 2 !== 0 && padLeft % 2 !== 1)) {\n 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 `;\n // If dilation > 1 then the xRC's will not be able to share any\n // values, so each xRC will require two unique calls to getX.\n if (dilationWidth > 1) {\n mainLoop += `\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${colIndex + 1} = vec4(previous.zw, xTexelC${colIndex + 1}.xy);\n } else {\n xC${colIndex + 1} = vec4(0.0, 0.0, xTexelC${colIndex + 1}.xy);\n }\n `;\n }\n else {\n mainLoop += `\n xC${colIndex + 1} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.xy);\n `;\n }\n }\n else {\n // If dilation is 1 and padding is odd, we have already read the\n // texel when constructing the previous x value. Here we can\n // simply skip the texture read.\n if (nextTexelOffset === 1) {\n mainLoop += `\n xC${colIndex + 1} = xTexelC${colIndex};\n `;\n }\n else {\n 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 `;\n }\n }\n }\n }\n }\n else { // stride === 2\n if (colIndex < filterWidth) {\n // Depending on whether padLeft is even or odd, we want either the\n // xy or zw channels from X texels for xC${colIndex}. If padLeft is\n // even, xC${colIndex +1} is simply the zw channels of texels we've\n // already sampled. But if padLeft is odd, xC{$c + 1}.zw will\n // need to come from the xy channels of a new texel, hence the `\n // vec4\n // final` initialized below.\n if (padLeft % 2 === 1) {\n 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 `;\n if (colIndex + 1 < filterWidth) {\n 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 `;\n }\n }\n else {\n 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 `;\n if (colIndex + 1 < filterWidth) {\n mainLoop += `\n xC${colIndex + 1} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.zw);\n `;\n }\n }\n }\n }\n // localize the dotProd accumulation within the loop, the theory is for\n // GPU with limited cache, accumulate sum across large amount of\n // veriables will cause lots of cache misses. (i.e. 5x5 filter will have\n // 50 variables)\n if (colIndex < filterWidth) {\n mainLoop += `\n wTexel = getW(r, ${colIndex}, d1, d2);\n dotProd += xC${colIndex}.xxzz * vec4(wTexel.xy, wTexel.xy);\n if(d1 + 1 < ${convInfo.inChannels}) {\n dotProd += xC${colIndex}.yyww * vec4(wTexel.zw, wTexel.zw);\n }\n `;\n if (colIndex + 1 < filterWidth) {\n mainLoop += `\n wTexel = getW(r, ${colIndex + 1}, d1, d2);\n dotProd += xC${colIndex + 1}.xxzz * vec4(wTexel.xy, wTexel.xy);\n if(d1 + 1 < ${convInfo.inChannels}) {\n dotProd += xC${colIndex + 1}.yyww * vec4(wTexel.zw, wTexel.zw);\n }\n `;\n }\n }\n }\n mainLoop += `\n }\n `;\n mainLoop += `\n }\n `;\n mainLoop += `\n }\n `;\n let activationSnippet = '', applyActivationSnippet = '';\n if (activation) {\n if (hasPreluActivation) {\n activationSnippet = `vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n ${activation}\n }`;\n }\n else if (hasLeakyReluAlpha) {\n activationSnippet = `vec4 activation(vec4 a) {\n vec4 b = getLeakyreluAlphaAtOutCoords();\n ${activation}\n }`;\n }\n else {\n activationSnippet = `vec4 activation(vec4 x) {\n ${activation}\n }`;\n }\n applyActivationSnippet = `result = activation(result);`;\n }\n const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n if (addBias) {\n this.variableNames.push('bias');\n }\n if (hasPreluActivation) {\n this.variableNames.push('preluActivationWeights');\n }\n if (hasLeakyReluAlpha) {\n this.variableNames.push('leakyreluAlpha');\n }\n 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 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9jb252X3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUYsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUU1RCxNQUFNLE9BQU8sbUJBQW1CO0lBYzlCLFlBQ0ksUUFBaUMsRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUNsRCxhQUFxQixJQUFJLEVBQUUsa0JBQWtCLEdBQUcsS0FBSyxFQUNyRCxpQkFBaUIsR0FBRyxLQUFLO1FBaEI3QixrQkFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBSXBCLG1CQUFjLEdBQUc7WUFDZixFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUU7WUFDdkMsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO1lBQzFDLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRTtZQUM1QyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUU7U0FDMUMsQ0FBQztRQU1BLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN0QyxNQUFN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LElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqQztRQUVELElBQUksa0JBQWtCLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7U0FDWixpQkFBaUI7Ozs7Ozs7Ozs7Ozs7V0FhZixRQUFROzs7V0FHUixjQUFjO1dBQ2Qsc0JBQXNCOzs7TUFHM0IsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuIGltcG9ydCB7YmFja2VuZF91dGlsLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG4gaW1wb3J0IHtHUEdQVVByb2dyYW0sIHVzZVNoYXBlVW5pZm9ybXN9IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbiBleHBvcnQgY2xhc3MgQ29udjJEUGFja2VkUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gICB2YXJpYWJsZU5hbWVzID0gWyd4JywgJ1cnXTtcbiAgIHBhY2tlZElucHV0cyA9IHRydWU7XG4gICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuICAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICAgdXNlckNvZGU6IHN0cmluZztcbiAgIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW47XG4gICBjdXN0b21Vbmlmb3JtcyA9IFtcbiAgICAge25hbWU6ICdwYWRzJywgdHlwZTogJ2l2ZWMyJyBhcyBjb25zdCB9LFxuICAgICB7bmFtZTogJ3N0cmlkZXMnLCB0eXBlOiAnaXZlYzInIGFzIGNvbnN0IH0sXG4gICAgIHtuYW1lOiAnZGlsYXRpb25zJywgdHlwZTogJ2l2ZWMyJyBhcyBjb25zdCB9LFxuICAgICB7bmFtZTogJ2luRGltcycsIHR5cGU6ICdpdmVjMicgYXMgY29uc3QgfSxcbiAgIF07XG5cbiAgIGNvbnN0cnVjdG9yKFxuICAgICAgIGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjJESW5mbywgYWRkQmlhcyA9IGZhbHNlLFxuICAgICAgIGFjdGl2YXRpb246IHN0cmluZyA9IG51bGwsIGhhc1ByZWx1QWN0aXZhdGlvbiA9IGZhbHNlLFxuICAgICAgIGhhc0xlYWt5UmVsdUFscGhhID0gZmFsc2UpIHtcbiAgICAgdGhpcy5vdXRwdXRTaGFwZSA9IGNvbnZJbmZvLm91dFNoYXBlO1xuICAgICB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPSB1c2VTaGFwZVVuaWZvcm1zKHRoaXMub3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgY29uc3QgcGFkTGVmdCA9IGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcbiAgICAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgICAgY29uc3QgZGlsYXRpb25XaWR0aCA9IGNvbnZJbmZvLmRpbGF0aW9uV2lkdGg7XG4gICAgIGNvbnN0IGZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmZpbHRlckhlaWdodDtcbiAgICAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcbiAgICAgY29uc3QgdGV4ZWxzQWNyb3NzID0gZmlsdGVyV2lkdGg7XG5cbiAgICAgbGV0IG1haW5Mb29wID0gYFxuICAgICAgIGludCB4UjsgaW50IHhDOyBpbnQgeENPZmZzZXQ7XG4gICAgICAgdmVjNCB3VGV4ZWw7IHZlYzQgcHJldmlvdXM7IHZlYzQgZmluYWw7YDtcblxuICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGZpbHRlcldpZHRoOyBjKyspIHtcbiAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgIHZlYzQgeFRleGVsQyR7YyAqIDJ9O1xuICAgICAgICAgICBpbnQgeFRleGVsQyR7YyAqIDJ9UmVhZHk7XG4gICAgICAgICAgIHZlYzQgeFRleGVsQyR7YyAqIDIgKyAxfTtcbiAgICAgICAgICAgaW50IHhUZXhlbEMke2MgKiAyICsgMX1SZWFkeTtcbiAgICAgICAgICAgdmVjNCB4QyR7Y307YDtcbiAgICAgfVxuXG4gICAgIC8qKlxuICAgICAgKiBUaGlzIHZlY3Rvcml6ZWQgaW1wbGVtZW50YXRpb24gd29ya3MgYnkgZ2F0aGVyaW5nIHRoZSB2YWx1ZXMgbmVlZGVkIGZvclxuICAgICAgKiBlYWNoIG91dHB1dCBjaGFubmVsJ3MgZG90IHByb2R1Y3QgaW50byB2ZWM0J3MgYW5kIHRoZW4gbXVsdGlwbHlpbmcgdGhlbVxuICAgICAgKiBhbGwgdG9nZXRoZXIgKHRoaXMgaGFwcGVucyBpbiB0aGUgZmluYWwgZG91YmxlIGZvci1sb29wIGJlbG93KS4gTW9zdCBvZlxuICAgICAgKiB0aGUgbWFpbiBsb29wIGNvbnNpc3RzIG9mIGNvbnN0cnVjdGluZyB0aGVzZSB2ZWM0J3Mgd2l0aCB0aGUgbWluaW11bVxuICAgICAgKiBudW1iZXIgb2YgdGV4dHVyZTJEIGNhbGxzLCB3aGljaCBtZWFucyBtYWtpbmcgdXNlIG9mIGFsbCBmb3VyIHJldHVybmVkXG4gICAgICAqIHZhbHVlcyBmcm9tIGEgdGV4dHVyZTJEIGNhbGwgYXQgb25jZS5cbiAgICAgICovXG4gICAgIG1haW5Mb29wICs9IGBcbiAgICAgZm9yIChpbnQgciA9IDA7IHIgPCAke2ZpbHRlckhlaWdodH07IHIrKykge1xuICAgICAgZm9yIChpbnQgZDEgPSAwOyBkMSA8ICR7Y29udkluZm8uaW5DaGFubmVsc307IGQxICs9IDIpIHtcbiAgICAgICBgO1xuICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGZpbHRlcldpZHRoOyBjKyspIHtcbiAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgIHhUZXhlbEMke2MgKiAyfSA9IHZlYzQoMC4wKTtcbiAgICAgICAgICAgeFRleGVsQyR7YyAqIDJ9UmVhZHkgPSAwO1xuICAgICAgICAgICB4VGV4ZWxDJHtjICogMiArIDF9ID0gdmVjNCgwLjApO1xuICAgICAgICAgICB4VGV4ZWxDJHtjICogMiArIDF9UmVhZHkgPSAwO1xuICAgICAgICAgICB4QyR7Y30gPSB2ZWM0KDAuMCk7YDtcbiAgICAgfVxuICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICB4UiA9IHhSQ29ybmVyICsgciAqIGRpbGF0aW9uc1swXTtcbiAgICAgICAgIGlmICh4UiA+PTAgJiYgeFIgPCBpbkRpbXNbMF0pIHtcbiAgICAgICBgO1xuXG4gICAgIGZvciAobGV0IHRleGVsQyA9IDA7IHRleGVsQyA8ICh0ZXhlbHNBY3Jvc3MgKyAxKSAvIDI7IHRleGVsQysrKSB7XG4gICAgICAgY29uc3QgY29sSW5kZXggPSB0ZXhlbEMgKiAyO1xuXG4gICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICB4QyA9IHhDQ29ybmVyICsgJHtjb2xJbmRleCAqIGRpbGF0aW9uV2lkdGh9O1xuICAgICAgICAgICBgO1xuXG4gICAgICAgaWYgKHN0cmlkZVdpZHRoID09PSAxKSB7XG4gICAgICAgICBpZiAoY29sSW5kZXggPCBmaWx0ZXJXaWR0aCkge1xuICAgICAgICAgICAvLyBJZiBwYWRkaW5nIGlzIG9kZCwgdGhlIG91dGVyIHRleGVscyBoYXZlIHRvIGJlIGNvbXBvc2VkLlxuICAgICAgICAgICBpZiAocGFkTGVmdCAlIDIgPT09IDEpIHtcbiAgICAgICAgICAgICAvLyBUT0RPOiBFbnN1cmUgdmVjNCBwcmV2aW91cyBkb2VzIG5vdCByZXN1bHQgaW4gcmVkdW5kYW50IHNhbXBsZSxcbiAgICAgICAgICAgICAvLyBhbmQgYXZvaWQgc2V0dGluZyB4VGV4ZWxSQydzIHRoYXQgZXhjZWVkIHRoZSBib3VuZGFyeSBpbiB0aGVcbiAgICAgICAgICAgICAvLyBmaXJzdCBwbGFjZSByYXRoZXIgdGhhbiByZXNldHRpbmcgdGhlbSB0byB2ZWM0KDApKS5cblxuICAgICAgICAgICAgIC8vIFRvIGNvbXB1dGUgeENPZmZzZXQ6XG4gICAgICAgICAgICAgLy8gLSBJZiBwYWRkaW5nIGlzIG9kZCwgd2UgbXVzdCBhZGQgMSB0byBlbnN1cmUgd2UgYXNrIGZvciBhblxuICAgICAgICAgICAgIC8vIGV2ZW4tbnVtYmVyZWQgcm93LlxuICAgICAgICAgICAgIC8vIC0gV2Ugc3VidHJhY3QgMiB0byBhY2Nlc3MgdGhlIHByZXZpb3VzIHRleGVsLlxuXG4gICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICB4Q09mZnNldCA9IHhDICsgMTtcbiAgICAgICAgICAgICAgICAgaWYgKHhDT2Zmc2V0ID49IDAgJiYgeENPZmZzZXQgPCBpbkRpbXNbMV0gJiYgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgIGNvbEluZGV4fVJlYWR5ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH0gPSBnZXRYKGJhdGNoLCB4UiwgeENPZmZzZXQsIGQxKTtcblxuICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFudWFsbHkgY2xlYXIgdW51c2VkIGNoYW5uZWxzIGluIGNhc2VcbiAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSByZWFkaW5nIGZyb20gcmVjeWNsZWQgdGV4dHVyZS5cbiAgICAgICAgICAgICAgICAgICBpZiAoeENPZmZzZXQgKyAxID49IGluRGltc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXh9Lnp3ID0gdmVjMigwLjApO1xuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH1SZWFkeSA9IDE7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgLy8gVGhpcyB0ZXhlbCBoYXMgYmVlbiByZWFkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiB0aGUgZGlsYXRpb25cbiAgICAgICAgICAgICAvLyBpcyAxLlxuICAgICAgICAgICAgIGlmIChkaWxhdGlvbldpZHRoID09PSAxICYmIGNvbEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXh9ID0gdmVjNCh4VGV4ZWxDJHtjb2xJbmRleCAtIDJ9Lnp3LCB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICAgICBjb2xJbmRleH0ueHkpO1xuICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgICAgeENPZmZzZXQgPSB4QyArIDEgLSAyO1xuXG4gICAgICAgICAgICAgICAgICAgaWYgKHhDT2Zmc2V0ID49IDAgJiYgeENPZmZzZXQgPCBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gZ2V0WChiYXRjaCwgeFIsIHhDT2Zmc2V0LCBkMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFudWFsbHkgY2xlYXIgdW51c2VkIGNoYW5uZWxzIGluIGNhc2VcbiAgICAgICAgICAgICAgICAgICAgIC8vIHdlJ3JlIHJlYWRpbmcgZnJvbSByZWN5Y2xlZCB0ZXh0dXJlLlxuICAgICAgICAgICAgICAgICAgICAgaWYgKHhDT2Zmc2V0ICsgMSA+PSBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMuencgPSB2ZWMyKDAuMCk7XG4gICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgIHhDJHtjb2xJbmRleH0gPSB2ZWM0KHByZXZpb3VzLnp3LCB4VGV4ZWxDJHtjb2xJbmRleH0ueHkpO1xuICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXh9ID0gdmVjNCgwLjAsIDAuMCwgeFRleGVsQyR7Y29sSW5kZXh9Lnh5KTtcbiAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgLy8gUGFkZGluZyBpcyBldmVuLCBzbyB4UkMgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgdGV4ZWwuXG4gICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICBpZiAoeEMgPj0gMCAmJiB4QyA8IGluRGltc1sxXSAmJiB4VGV4ZWxDJHtjb2xJbmRleH1SZWFkeSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXh9ID0gZ2V0WChiYXRjaCwgeFIsIHhDLCBkMSk7XG4gICAgICAgICAgICAgICAgICAgaWYgKHhDICsgMSA+PSBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4fS56dyA9IHZlYzIoMC4wKTtcbiAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXh9UmVhZHkgPSAxO1xuICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgeEMke2NvbEluZGV4fSA9IHhUZXhlbEMke2NvbEluZGV4fTtcbiAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgfVxuXG4gICAgICAgICAgIGlmIChjb2xJbmRleCArIDEgPCBmaWx0ZXJXaWR0aCkge1xuICAgICAgICAgICAgIC8vIElmIGRpbGF0aW9uIGlzIGV2ZW4sIHRoZSBzZWNvbmQgZW50cnkgc2hvdWxkIG1hdGNoIHRoZSBmaXJzdFxuICAgICAgICAgICAgIC8vIChlaXRoZXIgYm90aCBhcmUgY29tcG9zZWQgb3IgYm90aCBhcmUgc2luZ2xlIHNhbXBsZXMpLiBCdXQgaWZcbiAgICAgICAgICAgICAvLyBkaWxhdGlvbiBpcyBvZGQsIHRoZW4gdGhlIHNlY29uZCBlbnRyeSBzaG91bGQgYmUgdGhlIG9wcG9zaXRlXG4gICAgICAgICAgICAgLy8gb2YgdGhlIGZpcnN0IChpZiB0aGUgZmlyc3QgaXMgY29tcG9zZWQsIHRoZSBzZWNvbmQgaXMgYSBzaW5nbGVcbiAgICAgICAgICAgICAvLyBzYW1wbGUsIGFuZCB2aWNlIHZlcnNhLilcblxuICAgICAgICAgICAgIGNvbnN0IG5leHRUZXhlbE9mZnNldCA9IHBhZExlZnQgJSAyID09PSAwID9cbiAgICAgICAgICAgICAgICAgdXRpbC5uZWFyZXN0TGFyZ2VyRXZlbihkaWxhdGlvbldpZHRoKSA6XG4gICAgICAgICAgICAgICAgIGRpbGF0aW9uV2lkdGg7XG5cbiAgICAgICAgICAgICBpZiAoKGRpbGF0aW9uV2lkdGggJSAyID09PSAwICYmIHBhZExlZnQgJSAyID09PSAxKSB8fFxuICAgICAgICAgICAgICAgICAoZGlsYXRpb25XaWR0aCAlIDIgIT09IDAgJiYgcGFkTGVmdCAlIDIgIT09IDEpKSB7XG4gICAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgICAgeENPZmZzZXQgPSB4QyArIGltb2QocGFkc1sxXSwgMikgKyAke25leHRUZXhlbE9mZnNldH07XG5cbiAgICAgICAgICAgICAgICAgICBpZiAoeENPZmZzZXQgPj0gMCAmJiB4Q09mZnNldCA8IGluRGltc1sxXSAmJiB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICAgICBjb2xJbmRleCArIDF9UmVhZHkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfSA9IGdldFgoYmF0Y2gsIHhSLCB4Q09mZnNldCwgZDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIG1hbnVhbGx5IGNsZWFyIHVudXNlZCBjaGFubmVscyBpbiBjYXNlXG4gICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSByZWFkaW5nIGZyb20gcmVjeWNsZWQgdGV4dHVyZS5cbiAgICAgICAgICAgICAgICAgICAgIGlmICh4Q09mZnNldCArIDEgPj0gaW5EaW1zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4ICsgMX0uencgPSB2ZWMyKDAuMCk7XG4gICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleCArIDF9UmVhZHkgPSAxO1xuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAvLyBJZiBkaWxhdGlvbiA+IDEgdGhlbiB0aGUgeFJDJ3Mgd2lsbCBub3QgYmUgYWJsZSB0byBzaGFyZSBhbnlcbiAgICAgICAgICAgICAgIC8vIHZhbHVlcywgc28gZWFjaCB4UkMgd2lsbCByZXF1aXJlIHR3byB1bmlxdWUgY2FsbHMgdG8gZ2V0WC5cbiAgICAgICAgICAgICAgIGlmIChkaWxhdGlvbldpZHRoID4gMSkge1xuICAgICAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgICAgICB4Q09mZnNldCAtPSAyO1xuICAgICAgICAgICAgICAgICAgICAgaWYgKHhDT2Zmc2V0ID49IDAgJiYgeENPZmZzZXQgPCBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGdldFgoYmF0Y2gsIHhSLCB4Q09mZnNldCwgZDEpO1xuICAgICAgICAgICAgICAgICAgICAgIHhDJHtjb2xJbmRleCArIDF9ID0gdmVjNChwcmV2aW91cy56dywgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleCArIDF9Lnh5KTtcbiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgeEMke2NvbEluZGV4ICsgMX0gPSB2ZWM0KDAuMCwgMC4wLCB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbEluZGV4ICsgMX0ueHkpO1xuICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgIG1haW5Mb29wICs9IGBcbiAgICAgICAgICAgICAgICAgICAgIHhDJHtjb2xJbmRleCArIDF9ID0gdmVjNCh4VGV4ZWxDJHtjb2xJbmRleH0uencsIHhUZXhlbEMke1xuICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXggKyAxfS54eSk7XG4gICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgIC8vIElmIGRpbGF0aW9uIGlzIDEgYW5kIHBhZGRpbmcgaXMgb2RkLCB3ZSBoYXZlIGFscmVhZHkgcmVhZCB0aGVcbiAgICAgICAgICAgICAgIC8vIHRleGVsIHdoZW4gY29uc3RydWN0aW5nIHRoZSBwcmV2aW91cyB4IHZhbHVlLiBIZXJlIHdlIGNhblxuICAgICAgICAgICAgICAgLy8gc2ltcGx5IHNraXAgdGhlIHRleHR1cmUgcmVhZC5cbiAgICAgICAgICAgICAgIGlmIChuZXh0VGV4ZWxPZmZzZXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgeEMke2NvbEluZGV4ICsgMX0gPSB4VGV4ZWxDJHtjb2xJbmRleH07XG4gICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgeENPZmZzZXQgPSB4QyArICR7bmV4dFRleGVsT2Zmc2V0fTtcblxuICAgICAgICAgICAgICAgICAgICAgaWYgKHhDT2Zmc2V0ID49IDAgJiYgeENPZmZzZXQgPCBpbkRpbXNbMV0gJiYgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgICAgICBjb2xJbmRleCArIDF9UmVhZHkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleCArIDF9ID0gZ2V0WChiYXRjaCwgeFIsIHhDT2Zmc2V0LCBkMSk7XG4gICAgICAgICAgICAgICAgICAgICAgIGlmICh4Q09mZnNldCArIDEgPj0gaW5EaW1zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfS56dyA9IHZlYzIoMC4wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleCArIDF9UmVhZHkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXggKyAxfSA9IHhUZXhlbEMke2NvbEluZGV4ICsgMX07XG4gICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgIH0gZWxzZSB7ICAvLyBzdHJpZGUgPT09IDJcbiAgICAgICAgIGlmIChjb2xJbmRleCA8IGZpbHRlcldpZHRoKSB7XG4gICAgICAgICAgIC8vIERlcGVuZGluZyBvbiB3aGV0aGVyIHBhZExlZnQgaXMgZXZlbiBvciBvZGQsIHdlIHdhbnQgZWl0aGVyIHRoZVxuICAgICAgICAgICAvLyB4eSBvciB6dyBjaGFubmVscyBmcm9tIFggdGV4ZWxzIGZvciB4QyR7Y29sSW5kZXh9LiBJZiBwYWRMZWZ0IGlzXG4gICAgICAgICAgIC8vIGV2ZW4sIHhDJHtjb2xJbmRleCArMX0gaXMgc2ltcGx5IHRoZSB6dyBjaGFubmVscyBvZiB0ZXhlbHMgd2UndmVcbiAgICAgICAgICAgLy8gYWxyZWFkeSBzYW1wbGVkLiBCdXQgaWYgcGFkTGVmdCBpcyBvZGQsIHhDeyRjICsgMX0uencgd2lsbFxuICAgICAgICAgICAvLyBuZWVkIHRvIGNvbWUgZnJvbSB0aGUgeHkgY2hhbm5lbHMgb2YgYSBuZXcgdGV4ZWwsIGhlbmNlIHRoZSBgXG4gICAgICAgICAgIC8vIHZlYzRcbiAgICAgICAgICAgLy8gZmluYWxgIGluaXRpYWxpemVkIGJlbG93LlxuICAgICAgICAgICBpZiAocGFkTGVmdCAlIDIgPT09IDEpIHtcbiAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgIHhDT2Zmc2V0ID0geEMgKyAxIC0gc3RyaWRlc1sxXTtcbiAgICAgICAgICAgICAgICAgaWYoeENPZmZzZXQgPj0gMCAmJiB4Q09mZnNldCA8IGluRGltc1sxXSAmJiB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICAgY29sSW5kZXh9UmVhZHkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4fSA9IGdldFgoYmF0Y2gsIHhSLCB4Q09mZnNldCwgZDEpO1xuICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFudWFsbHkgY2xlYXIgdW51c2VkIGNoYW5uZWxzIGluIGNhc2VcbiAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSByZWFkaW5nIGZyb20gcmVjeWNsZWQgdGV4dHVyZS5cbiAgICAgICAgICAgICAgICAgICBpZiAoeENPZmZzZXQgKyAxID49IGluRGltc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXh9Lnp3ID0gdmVjMigwLjApO1xuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH1SZWFkeSA9IDE7XG4gICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICBpZih4QyArIDEgPj0gMCAmJiB4QyArIDEgPCBpbkRpbXNbMV0gJiYgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgIGNvbEluZGV4ICsgMX1SZWFkeSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfSA9IGdldFgoYmF0Y2gsIHhSLCB4QyArIDEsIGQxKTtcbiAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIG1hbnVhbGx5IGNsZWFyIHVudXNlZCBjaGFubmVscyBpbiBjYXNlXG4gICAgICAgICAgICAgICAgICAgLy8gd2UncmUgcmVhZGluZyBmcm9tIHJlY3ljbGVkIHRleHR1cmUuXG4gICAgICAgICAgICAgICAgICAgaWYgKHhDICsgMiA+PSBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4ICsgMX0uencgPSB2ZWMyKDAuMCk7XG4gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4ICsgMX1SZWFkeSA9IDE7XG4gICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXh9ID0gdmVjNCh4VGV4ZWxDJHtjb2xJbmRleH0uencsIHhUZXhlbEMke1xuICAgICAgICAgICAgICAgICBjb2xJbmRleCArIDF9Lnp3KTtcbiAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgICBpZiAoY29sSW5kZXggKyAxIDwgZmlsdGVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgIG1haW5Mb29wICs9IGBcbiAgICAgICAgICAgICAgICAgICBmaW5hbCA9IHZlYzQoMC4wKTtcbiAgICAgICAgICAgICAgICAgICB4Q09mZnNldCA9IHhDICsgMSArIHN0cmlkZXNbMV07XG4gICAgICAgICAgICAgICAgICAgaWYoeENPZmZzZXQgPj0gMCAmJiB4Q09mZnNldCA8IGluRGltc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAgZmluYWwgPSBnZXRYKGJhdGNoLCB4UiwgeENPZmZzZXQsIGQxKTtcbiAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgeEMke2NvbEluZGV4ICsgMX0gPSB2ZWM0KHhUZXhlbEMke2NvbEluZGV4ICsgMX0ueHksIGZpbmFsLnh5KTtcbiAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICBpZih4QyA+PSAwICYmIHhDIDwgaW5EaW1zWzFdICYmIHhUZXhlbEMke2NvbEluZGV4fVJlYWR5ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH0gPSBnZXRYKGJhdGNoLCB4UiwgeEMsIGQxKTtcbiAgICAgICAgICAgICAgICAgICBpZiAoeEMgKyAxID49IGluRGltc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXh9Lnp3ID0gdmVjMigwLjApO1xuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH1SZWFkeSA9IDE7XG4gICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICB4Q09mZnNldCA9IHhDICsgc3RyaWRlc1sxXTtcbiAgICAgICAgICAgICAgICAgaWYoeENPZmZzZXQgPj0gMCAmJiB4Q09mZnNldCA8IGluRGltc1sxXSAmJiB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICAgY29sSW5kZXggKyAxfVJlYWR5ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleCArIDF9ID0gZ2V0WChiYXRjaCwgeFIsIHhDT2Zmc2V0LCBkMSk7XG4gICAgICAgICAgICAgICAgICAgaWYgKHhDT2Zmc2V0ICsgMSA+PSBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4ICsgMX0uencgPSB2ZWMyKDAuKTtcbiAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfVJlYWR5ID0gMTtcbiAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgIHhDJHtjb2xJbmRleH0gPSB2ZWM0KFxuICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4fS54eSwgeFRleGVsQyR7Y29sSW5kZXggKyAxfS54eSk7XG4gICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgaWYgKGNvbEluZGV4ICsgMSA8IGZpbHRlcldpZHRoKSB7XG4gICAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgICAgeEMke2NvbEluZGV4ICsgMX0gPSB2ZWM0KHhUZXhlbEMke2NvbEluZGV4fS56dywgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgICAgY29sSW5kZXggKyAxfS56dyk7XG4gICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgfVxuXG4gICAgICAgLy8gbG9jYWxpemUgdGhlIGRvdFByb2QgYWNjdW11bGF0aW9uIHdpdGhpbiB0aGUgbG9vcCwgdGhlIHRoZW9yeSBpcyBmb3JcbiAgICAgICAvLyBHUFUgd2l0aCBsaW1pdGVkIGNhY2hlLCBhY2N1bXVsYXRlIHN1bSBhY3Jvc3MgbGFyZ2UgYW1vdW50IG9mXG4gICAgICAgLy8gdmVyaWFibGVzIHdpbGwgY2F1c2UgbG90cyBvZiBjYWNoZSBtaXNzZXMuIChpLmUuIDV4NSBmaWx0ZXIgd2lsbCBoYXZlXG4gICAgICAgLy8gNTAgdmFyaWFibGVzKVxuICAgICAgIGlmIChjb2xJbmRleCA8IGZpbHRlcldpZHRoKSB7XG4gICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgd1RleGVsID0gZ2V0VyhyLCAke2NvbEluZGV4fSwgZDEsIGQyKTtcbiAgICAgICAgICAgICBkb3RQcm9kICs9IHhDJHtjb2xJbmRleH0ueHh6eiAqIHZlYzQod1RleGVsLnh5LCB3VGV4ZWwueHkpO1xuICAgICAgICAgICAgIGlmKGQxICsgMSA8ICR7Y29udkluZm8uaW5DaGFubmVsc30pIHtcbiAgICAgICAgICAgICAgIGRvdFByb2QgKz0geEMke2NvbEluZGV4fS55eXd3ICogdmVjNCh3VGV4ZWwuencsIHdUZXhlbC56dyk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICBgO1xuXG4gICAgICAgICBpZiAoY29sSW5kZXggKyAxIDwgZmlsdGVyV2lkdGgpIHtcbiAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgd1RleGVsID0gZ2V0VyhyLCAke2NvbEluZGV4ICsgMX0sIGQxLCBkMik7XG4gICAgICAgICAgICAgICBkb3RQcm9kICs9IHhDJHtjb2xJbmRleCArIDF9Lnh4enogKiB2ZWM0KHdUZXhlbC54eSwgd1RleGVsLnh5KTtcbiAgICAgICAgICAgICAgIGlmKGQxICsgMSA8ICR7Y29udkluZm8uaW5DaGFubmVsc30pIHtcbiAgICAgICAgICAgICAgICAgZG90UHJvZCArPSB4QyR7Y29sSW5kZXggKyAxfS55eXd3ICogdmVjNCh3VGV4ZWwuencsIHdUZXhlbC56dyk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgYDtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cbiAgICAgbWFpbkxvb3AgKz0gYFxuICAgICB9XG4gICBgO1xuICAgbWFpbkxvb3AgKz0gYFxuICAgICB9XG4gICBgO1xuICAgbWFpbkxvb3AgKz0gYFxuICAgICB9XG4gICBgO1xuXG4gICAgIGxldCBhY3RpdmF0aW9uU25pcHBldCA9ICcnLCBhcHBseUFjdGl2YXRpb25TbmlwcGV0ID0gJyc7XG4gICAgIGlmIChhY3RpdmF0aW9uKSB7XG4gICAgICAgaWYgKGhhc1ByZWx1QWN0aXZhdGlvbikge1xuICAgICAgICAgYWN0aXZhdGlvblNuaXBwZXQgPSBgdmVjNCBhY3RpdmF0aW9uKHZlYzQgYSkge1xuICAgICAgICAgICB2ZWM0IGIgPSBnZXRQcmVsdUFjdGl2YXRpb25XZWlnaHRzQXRPdXRDb29yZHMoKTtcbiAgICAgICAgICAgJHthY3RpdmF0aW9ufVxuICAgICAgICAgfWA7XG4gICAgICAgfSBlbHNlIGlmIChoYXNMZWFreVJlbHVBbHBoYSkge1xuICAgICAgICAgYWN0aXZhdGlvblNuaXBwZXQgPSBgdmVjNCBhY3RpdmF0aW9uKHZlYzQgYSkge1xuICAgICAgICAgICB2ZWM0IGIgPSBnZXRMZWFreXJlbHVBbHBoYUF0T3V0Q29vcmRzKCk7XG4gICAgICAgICAgICR7YWN0aXZhdGlvbn1cbiAgICAgICAgIH1gO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICBhY3RpdmF0aW9uU25pcHBldCA9IGB2ZWM0IGFjdGl2YXRpb24odmVjNCB4KSB7XG4gICAgICAgICAgICR7YWN0aXZhdGlvbn1cbiAgICAgICAgIH1gO1xuICAgICAgIH1cblxuICAgICAgIGFwcGx5QWN0aXZhdGlvblNuaXBwZXQgPSBgcmVzdWx0ID0gYWN0aXZhdGlvbihyZXN1bHQpO2A7XG4gICAgIH1cblxuICAgICBjb25zdCBhZGRCaWFzU25pcHBldCA9IGFkZEJpYXMgPyAncmVzdWx0ICs9IGdldEJpYXNBdE91dENvb3JkcygpOycgOiAnJztcbiAgICAgaWYgKGFkZEJpYXMpIHtcbiAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXMucHVzaCgnYmlhcycpO1xuICAgICB9XG5cbiAgICAgaWYgKGhhc1ByZWx1QWN0aXZhdGlvbikge1xuICAgICAgIHRoaXMudmFyaWFibGVOYW1lcy5wdXNoKCdwcmVsdUFjdGl2YXRpb25XZWlnaHRzJyk7XG4gICAgIH1cbiAgICAgaWYgKGhhc0xlYWt5UmVsdUFscGhhKSB7XG4gICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ2xlYWt5cmVsdUFscGhhJyk7XG4gICAgIH1cblxuICAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICR7YWN0aXZhdGlvblNuaXBwZXR9XG5cbiAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICBpdmVjNCBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgIGludCBiYXRjaCA9IGNvb3Jkcy54O1xuICAgICAgICAgaXZlYzIgeFJDQ29ybmVyID0gY29vcmRzLnl6ICogc3RyaWRlcyAtIHBhZHM7XG4gICAgICAgICBpbnQgZDIgPSBjb29yZHMudztcbiAgICAgICAgIGludCB4UkNvcm5lciA9IHhSQ0Nvcm5lci54O1xuICAgICAgICAgaW50IHhDQ29ybmVyID0geFJDQ29ybmVyLnk7XG5cbiAgICAgICAgIC8vaW50aWFsaXplIGRvdFByb2Qgd2l0aCBhIHNtYWxsIGVwc2lsb24gc2VlbXMgdG8gcmVkdWNlIEdQVSBhY2N1cmFjeSBsb3NzLlxuICAgICAgICAgdmVjNCBkb3RQcm9kID0gdmVjNCgwLjAwMDAwMDAwMDAwMDAwMSk7XG5cbiAgICAgICAgICR7bWFpbkxvb3B9XG5cbiAgICAgICAgIHZlYzQgcmVzdWx0ID0gZG90UHJvZCAtIHZlYzQoMC4wMDAwMDAwMDAwMDAwMDEpO1xuICAgICAgICAgJHthZGRCaWFzU25pcHBldH1cbiAgICAgICAgICR7YXBwbHlBY3RpdmF0aW9uU25pcHBldH1cbiAgICAgICAgIHNldE91dHB1dChyZXN1bHQpO1xuICAgICAgIH1cbiAgICAgYDtcbiAgIH1cbiB9XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from './glsl_version';\nimport { useShapeUniforms } from './gpgpu_math';\nexport class Im2ColPackedProgram {\n constructor(outputShape, convInfo) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.customUniforms = [\n { name: 'inputShape', type: 'ivec4' },\n { name: 'pad', type: 'ivec2' },\n { name: 'stride', type: 'ivec2' },\n { name: 'dilation', type: 'ivec2' },\n { name: 'inChannels', type: 'int' },\n { name: 'itemsPerBlockRow', type: 'int' },\n { name: 'outWidth', type: 'int' },\n ];\n this.outputShape = outputShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n const { dataFormat } = convInfo;\n const glsl = getGlslDifferences();\n const isChannelsLast = dataFormat === 'channelsLast';\n const rowDim = isChannelsLast ? 1 : 2;\n const colDim = isChannelsLast ? 2 : 3;\n const boundsCheckingSnippet = this.enableShapeUniforms ?\n 'if(blockIndex < outShape[2] && pos < outShape[1]) {' :\n `if(blockIndex < ${outputShape[2]} && pos < ${outputShape[1]}) {`;\n let unrolled = ``;\n for (let row = 0; row <= 1; row++) {\n for (let col = 0; col <= 1; col++) {\n unrolled += `\n blockIndex = rc.z + ${col};\n pos = rc.y + ${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(rc.x, d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result[${row * 2 + col}] = getChannel(\n getA(rc.x, ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n `;\n }\n }\n this.userCode = `\n void main() {\n ivec3 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW0yY29sX3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2ltMmNvbF9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBZSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUU1RCxNQUFNLE9BQU8sbUJBQW1CO0lBaUI5QixZQUFZLFdBQXFCLEVBQUUsUUFBaUM7UUFoQnBFLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUlwQixtQkFBYyxHQUFHO1lBQ2YsRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO1lBQzdDLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRTtZQUN0QyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUU7WUFDekMsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO1lBQzNDLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBYyxFQUFFO1lBQzNDLEVBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxLQUFjLEVBQUU7WUFDakQsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFjLEVBQUU7U0FDMUMsQ0FBQztRQUdBLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sRUFBQyxVQUFVLEVBQUMsR0FBRyxRQUFRLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLGNBQWMsR0FBRyxVQUFVLEtBQUssY0FBYyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3BELHFEQUFxRCxDQUFDLENBQUM7WUFDdkQsbUJBQW1CLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN0RSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFbEIsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNqQyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNqQyxRQUFRLElBQUk7Z0NBQ1ksR0FBRzt5QkFDVixHQUFHOztZQUVoQixxQkFBcUI7Ozs7aUNBSUEsTUFBTTs7Ozs7Ozs7bUNBUUosTUFBTTs7OztzQkFJbkIsY0FBYzs7MkJBRVQsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHOzs7OzsyQkFLYixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUc7Ozs7Ozs7U0FPL0IsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs7VUFTVixRQUFROztVQUVSLElBQUksQ0FBQyxNQUFNOztLQUVoQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7Z2V0R2xzbERpZmZlcmVuY2VzfSBmcm9tICcuL2dsc2xfdmVyc2lvbic7XG5pbXBvcnQge0dQR1BVUHJvZ3JhbSwgdXNlU2hhcGVVbmlmb3Jtc30gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIEltMkNvbFBhY2tlZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHBhY2tlZElucHV0cyA9IHRydWU7XG4gIHBhY2tlZE91dHB1dCA9IHRydWU7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcbiAgY3VzdG9tVW5pZm9ybXMgPSBbXG4gICAge25hbWU6ICdpbnB1dFNoYXBlJywgdHlwZTogJ2l2ZWM0JyBhcyBjb25zdCB9LFxuICAgIHtuYW1lOiAncGFkJywgdHlwZTogJ2l2ZWMyJyBhcyBjb25zdCB9LFxuICAgIHtuYW1lOiAnc3RyaWRlJywgdHlwZTogJ2l2ZWMyJyBhcyBjb25zdCB9LFxuICAgIHtuYW1lOiAnZGlsYXRpb24nLCB0eXBlOiAnaXZlYzInIGFzIGNvbnN0IH0sXG4gICAge25hbWU6ICdpbkNoYW5uZWxzJywgdHlwZTogJ2ludCcgYXMgY29uc3QgfSxcbiAgICB7bmFtZTogJ2l0ZW1zUGVyQmxvY2tSb3cnLCB0eXBlOiAnaW50JyBhcyBjb25zdCB9LFxuICAgIHtuYW1lOiAnb3V0V2lkdGgnLCB0eXBlOiAnaW50JyBhcyBjb25zdCB9LFxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKG91dHB1dFNoYXBlOiBudW1iZXJbXSwgY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252MkRJbmZvKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlO1xuICAgIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA9IHVzZVNoYXBlVW5pZm9ybXModGhpcy5vdXRwdXRTaGFwZS5sZW5ndGgpO1xuICAgIGNvbnN0IHtkYXRhRm9ybWF0fSA9IGNvbnZJbmZvO1xuICAgIGNvbnN0IGdsc2wgPSBnZXRHbHNsRGlmZmVyZW5jZXMoKTtcbiAgICBjb25zdCBpc0NoYW5uZWxzTGFzdCA9IGRhdGFGb3JtYXQgPT09ICdjaGFubmVsc0xhc3QnO1xuICAgIGNvbnN0IHJvd0RpbSA9IGlzQ2hhbm5lbHNMYXN0ID8gMSA6IDI7XG4gICAgY29uc3QgY29sRGltID0gaXNDaGFubmVsc0xhc3QgPyAyIDogMztcblxuICAgIGNvbnN0IGJvdW5kc0NoZWNraW5nU25pcHBldCA9IHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA/XG4gICAgICAgICdpZihibG9ja0luZGV4IDwgb3V0U2hhcGVbMl0gJiYgcG9zIDwgb3V0U2hhcGVbMV0pIHsnIDpcbiAgICAgICAgYGlmKGJsb2NrSW5kZXggPCAke291dHB1dFNoYXBlWzJdfSAmJiBwb3MgPCAke291dHB1dFNoYXBlWzFdfSkge2A7XG4gICAgbGV0IHVucm9sbGVkID0gYGA7XG5cbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPD0gMTsgcm93KyspIHtcbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8PSAxOyBjb2wrKykge1xuICAgICAgICB1bnJvbGxlZCArPSBgXG4gICAgICAgICAgYmxvY2tJbmRleCA9IHJjLnogKyAke2NvbH07XG4gICAgICAgICAgcG9zID0gcmMueSArICR7cm93fTtcblxuICAgICAgICAgICR7Ym91bmRzQ2hlY2tpbmdTbmlwcGV0fVxuICAgICAgICAgICAgb2Zmc2V0WSA9IGludChibG9ja0luZGV4IC8gb3V0V2lkdGgpICogc3RyaWRlWzBdIC0gcGFkWzBdO1xuICAgICAgICAgICAgZDAgPSBvZmZzZXRZICsgZGlsYXRpb25bMF0gKiAocG9zIC8gaXRlbXNQZXJCbG9ja1Jvdyk7XG5cbiAgICAgICAgICAgIGlmKGQwIDwgaW5wdXRTaGFwZVske3Jvd0RpbX1dICYmIGQwID49IDApIHtcbiAgICAgICAgICAgICAgLy8gVXNlIGN1c3RvbSBpbW9kIGluc3RlYWQgbW9kLiBPbiBJbnRlbCBHUFUsIG1vZCBtYXkgZ2VuZXJhdGVcbiAgICAgICAgICAgICAgLy8gdW5leHBlY3RlZCB2YWx1ZS5cbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGZqcy9pc3N1ZXMvNTQ0N1xuICAgICAgICAgICAgICBvZmZzZXRYID0gaW1vZChibG9ja0luZGV4LCBvdXRXaWR0aCkgKiBzdHJpZGVbMV0gLSBwYWRbMV07XG4gICAgICAgICAgICAgIGQxID0gb2Zmc2V0WCArIGRpbGF0aW9uWzFdICogKGltb2QocG9zLCBpdGVtc1BlckJsb2NrUm93KSAvXG4gICAgICAgICAgICAgICAgICBpbkNoYW5uZWxzKTtcblxuICAgICAgICAgICAgICBpZihkMSA8IGlucHV0U2hhcGVbJHtjb2xEaW19XSAmJiBkMSA+PSAwKSB7XG5cbiAgICAgICAgICAgICAgICBjaCA9IGltb2QocG9zLCBpbkNoYW5uZWxzKTtcblxuICAgICAgICAgICAgICAgIGlmICgke2lzQ2hhbm5lbHNMYXN0fSkge1xuICAgICAgICAgICAgICAgICAgaW5uZXJEaW1zID0gdmVjMihkMSwgY2gpO1xuICAgICAgICAgICAgICAgICAgcmVzdWx0WyR7cm93ICogMiArIGNvbH1dID0gZ2V0Q2hhbm5lbChcbiAgICAgICAgICAgICAgICAgICAgZ2V0QShyYy54LCBkMCwgaW50KGlubmVyRGltcy54KSxcbiAgICAgICAgICAgICAgICAgICAgaW50KGlubmVyRGltcy55KSksIGlubmVyRGltcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlubmVyRGltcyA9IHZlYzIoZDAsIGQxKTtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdFske3JvdyAqIDIgKyBjb2x9XSA9IGdldENoYW5uZWwoXG4gICAgICAgICAgICAgICAgICAgIGdldEEocmMueCwgY2gsIGludChpbm5lckRpbXMueCksXG4gICAgICAgICAgICAgICAgICAgIGludChpbm5lckRpbXMueSkpLCBpbm5lckRpbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjMyByYyA9IGdldE91dHB1dENvb3JkcygpO1xuXG4gICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwKTtcblxuICAgICAgICBpbnQgYmxvY2tJbmRleCwgcG9zLCBvZmZzZXRZLCBkMCwgb2Zmc2V0WCwgZDEsIGNoO1xuICAgICAgICB2ZWMyIGlubmVyRGltcztcblxuICAgICAgICAke3Vucm9sbGVkfVxuXG4gICAgICAgICR7Z2xzbC5vdXRwdXR9ID0gcmVzdWx0O1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { Im2ColPackedProgram } from '../im2col_packed_gpu';\nimport { mapActivationToShaderProgram } from '../kernel_utils/kernel_funcs_utils';\nimport { MatMulPackedProgram } from '../mulmat_packed_gpu';\nimport * as webgl_util from '../webgl_util';\nimport { batchMatMulImpl, MATMUL_SHARED_DIM_THRESHOLD } from './BatchMatMul_impl';\nimport { identity } from './Identity';\nimport { reshape } from './Reshape';\n// Both conv2dByMatMul and conv2dWithIm2Row fuse height and width into one\n// dimension to compute batchMatMul, so bias and activation weights are also\n// supposed to fuse the two dimensions into one.\n//\n// This function computes the target shape for fusing height and width\n// dimensions. Returning null means the shape is already compatible.\n//\n// Even though the bias is not supposed to be a 3-D or a 4-D (including\n// batch) tensor and PReLU activiation weights is not supposed to be a 4-D\n// tensor, we still need to support them, because we haven't disabled\n// them for NHWC format.\n// https://github.com/tensorflow/tfjs/blob/b53bd47e880367ae57493f0ea628abaf08db2d5d/tfjs-core/src/ops/fused/conv2d.ts#L181-L196\nfunction getShapeForBatchMatMul(shape, isChannelsLast) {\n const length = shape.length;\n if (length >= 3) {\n return isChannelsLast ?\n [\n ...shape.slice(0, -3) /* batch */,\n shape[length - 3] * shape[length - 2] /* height * width */,\n shape[length - 1] /* channel */\n ] :\n [\n ...shape.slice(0, -3) /* batch */, shape[length - 3] /* channel */,\n shape[length - 2] * shape[length - 1] /* height * width */\n ];\n }\n else if (!isChannelsLast && length === 1 && shape[0] > 1) {\n return [shape[0], 1];\n }\n else {\n return null;\n }\n}\n// For 1x1 kernels that iterate through every point in the input, convolution\n// can be expressed as matrix multiplication (without need for memory\n// remapping).\nexport function conv2dByMatMul({ x, filter, convInfo, backend, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) {\n // Reshapes conv2D input to 2D tensors, uses matMul and then reshape the\n // result from 2D to 4D.\n const xShape = x.shape;\n const xTexData = backend.texData.get(x.dataId);\n const sharedMatMulDim = convInfo.inChannels;\n const outerShapeX = xShape[0] * xShape[1] * xShape[2];\n const outerShapeFilter = convInfo.outChannels;\n const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n const transposeA = false;\n const transposeB = false;\n let out;\n const intermediates = [];\n if (preluActivationWeights != null) {\n const targetShape = getShapeForBatchMatMul(preluActivationWeights.shape, isChannelsLast);\n if (targetShape != null) {\n preluActivationWeights = reshape({\n inputs: { x: preluActivationWeights },\n backend,\n attrs: { shape: targetShape }\n });\n intermediates.push(preluActivationWeights);\n }\n }\n if (bias != null) {\n const targetShape = getShapeForBatchMatMul(bias.shape, isChannelsLast);\n if (targetShape != null) {\n bias = reshape({ inputs: { x: bias }, backend, attrs: { shape: targetShape } });\n intermediates.push(bias);\n }\n }\n // TODO: Once reduction ops are packed, batchMatMul will always be packed\n // and we can remove this condition.\n const batchMatMulWillBeUnpacked = (outerShapeX === 1 || outerShapeFilter === 1) &&\n sharedMatMulDim > MATMUL_SHARED_DIM_THRESHOLD;\n // The algorithm in the if condition assumes (1) the output will be packed,\n // (2) x is packed, (3) x isChannelsLast, (4) x's packed texture is already\n // on GPU, (5) col is odd, (6) the width, height and inChannels are the same\n // for xTexData.shape and xShape.\n const canOptimize = !batchMatMulWillBeUnpacked && xTexData.isPacked &&\n isChannelsLast && xTexData.texture != null && xShape[2] % 2 !== 0 &&\n util.arraysEqual(xTexData.shape.slice(-3), xShape.slice(-3));\n if (canOptimize) {\n // We avoid expensive packed 2x2 reshape by padding col count to next,\n // even number. When col is odd, the result of packed batchMatMul is\n // the same (has the same texture layout and and values in the texture) as\n // it is for next even col. We make the odd-cols tensor to look like\n // even-cols tensor before the operation and, after the batchMatMul,\n // fix the even-cols result to have odd number of cols.\n const targetShape = xShape[0] * xShape[1] * (xShape[2] + 1);\n const xReshaped = {\n dataId: x.dataId,\n shape: [1, targetShape, convInfo.inChannels],\n dtype: x.dtype\n };\n // xTexData.shape gets referenced from GPGPUBinary.inShapeInfos.\n // Decrementing col count, after batchMatMul->...->compileProgram leads to\n // invalid col count within the reference in GPGPUBinary.inShapeInfos.\n // Alternative fix would be to provide a copy to GPGPUBinary.inShapeInfos\n // in compileProgram method, but that would affect compilation of all\n // programs - instead, provide a copy here, with even col count, before\n // calling batchMatMul->...->compileProgram and after that, the original\n // xTexData.shape is restored.\n const originalXTexDataShape = xTexData.shape;\n xTexData.shape = xTexData.shape.slice();\n xTexData.shape[xTexData.shape.length - 2]++;\n util.assert(webgl_util.isReshapeFree(xTexData.shape, xReshaped.shape), () => `packed reshape ${xTexData.shape} to ${xReshaped.shape} isn't free`);\n const filterReshaped = reshape({\n inputs: { x: filter },\n backend,\n attrs: { shape: [1, convInfo.inChannels, convInfo.outChannels] }\n });\n intermediates.push(filterReshaped);\n const pointwiseConv = batchMatMulImpl({\n a: xReshaped,\n b: filterReshaped,\n backend,\n transposeA,\n transposeB,\n bias,\n activation,\n preluActivationWeights,\n leakyreluAlpha\n });\n const pointwiseConvTexData = backend.texData.get(pointwiseConv.dataId);\n util.assert(pointwiseConvTexData.isPacked, () => 'batchMatMul result is expected to be packed');\n // Restore the input shape to original.\n xTexData.shape = originalXTexDataShape;\n // Set the output shape - there is no need for expensive reshape as data\n // layout is already correct.\n pointwiseConvTexData.shape = convInfo.outShape;\n out = identity({ inputs: { x: pointwiseConv }, backend });\n out.shape = convInfo.outShape;\n intermediates.push(pointwiseConv);\n }\n else {\n const numCols = convInfo.outHeight * convInfo.outWidth;\n const xReshaped = reshape({\n inputs: { x },\n backend,\n attrs: {\n shape: isChannelsLast ?\n [convInfo.batchSize, numCols, convInfo.inChannels] :\n [convInfo.batchSize, convInfo.inChannels, numCols]\n }\n });\n const filterReshaped = reshape({\n inputs: { x: filter },\n backend,\n attrs: { shape: [1, convInfo.inChannels, convInfo.outChannels] }\n });\n const result = batchMatMulImpl({\n a: isChannelsLast ? xReshaped : filterReshaped,\n b: isChannelsLast ? filterReshaped : xReshaped,\n transposeA: !isChannelsLast,\n transposeB,\n backend,\n bias,\n activation,\n preluActivationWeights,\n leakyreluAlpha\n });\n out = reshape({ inputs: { x: result }, backend, attrs: { shape: convInfo.outShape } });\n intermediates.push(xReshaped);\n intermediates.push(filterReshaped);\n intermediates.push(result);\n }\n for (const i of intermediates) {\n backend.disposeIntermediateTensorInfo(i);\n }\n return out;\n}\n// Implements the im2row algorithm as outlined in \"High Performance\n// Convolutional Neural Networks for Document Processing\" (Suvisoft, 2006)\nexport function conv2dWithIm2Row({ x, filter, convInfo, backend, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) {\n // Rearranges conv2d input so each block to be convolved over forms the\n // column of a new matrix with shape [filterWidth * filterHeight *\n // inChannels, outHeight * outWidth]. The filter is also rearranged so each\n // output channel forms a row of a new matrix with shape [outChannels,\n // filterWidth * filterHeight * inChannels]. The convolution is then\n // computed by multiplying these matrices and reshaping the result.\n const { filterWidth, filterHeight, inChannels, outWidth, outHeight, dataFormat } = convInfo;\n const isChannelsLast = dataFormat === 'channelsLast';\n const sharedDim = filterWidth * filterHeight * inChannels;\n const numCols = outHeight * outWidth;\n const x2ColShape = [convInfo.batchSize, sharedDim, numCols];\n const transposeA = true;\n const transposeB = false;\n const intermediates = [];\n if (preluActivationWeights != null) {\n const targetShape = getShapeForBatchMatMul(preluActivationWeights.shape, isChannelsLast);\n if (targetShape != null) {\n preluActivationWeights = reshape({\n inputs: { x: preluActivationWeights },\n backend,\n attrs: { shape: targetShape }\n });\n intermediates.push(preluActivationWeights);\n }\n }\n if (bias != null) {\n const targetShape = getShapeForBatchMatMul(bias.shape, isChannelsLast);\n if (targetShape != null) {\n bias = reshape({ inputs: { x: bias }, backend, attrs: { shape: targetShape } });\n intermediates.push(bias);\n }\n }\n const w2Row = reshape({\n inputs: { x: filter },\n backend,\n attrs: { shape: [1, sharedDim, util.sizeFromShape(filter.shape) / sharedDim] }\n });\n intermediates.push(w2Row);\n const im2ColProgram = new Im2ColPackedProgram(x2ColShape, convInfo);\n const customValues = [\n x.shape, [convInfo.padInfo.top, convInfo.padInfo.left],\n [convInfo.strideHeight, convInfo.strideWidth],\n [convInfo.dilationHeight, convInfo.dilationWidth], [convInfo.inChannels],\n [convInfo.filterWidth * convInfo.inChannels], [convInfo.outWidth]\n ];\n const im2Col = backend.runWebGLProgram(im2ColProgram, [x], 'float32', customValues);\n const im2ColReshaped = reshape({ inputs: { x: im2Col }, backend, attrs: { shape: x2ColShape } });\n intermediates.push(im2Col);\n intermediates.push(im2ColReshaped);\n const hasBias = bias != null;\n const hasPreluActivationWeights = preluActivationWeights != null;\n const hasLeakyreluAlpha = activation === 'leakyrelu';\n const fusedActivation = activation ? mapActivationToShaderProgram(activation, true) : null;\n const matmulProgram = new MatMulPackedProgram(isChannelsLast ? im2ColReshaped.shape :\n w2Row.shape, isChannelsLast ? w2Row.shape :\n im2ColReshaped.shape, isChannelsLast ? [convInfo.batchSize, numCols, convInfo.outChannels] :\n [convInfo.batchSize, convInfo.outChannels, numCols], transposeA, transposeB, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha);\n const inputs = isChannelsLast ? [im2ColReshaped, w2Row] : [w2Row, im2ColReshaped];\n if (bias) {\n inputs.push(bias);\n }\n if (hasPreluActivationWeights) {\n inputs.push(preluActivationWeights);\n }\n if (hasLeakyreluAlpha) {\n const $leakyreluAlpha = backend.makeTensorInfo([], 'float32', util.createScalarValue(leakyreluAlpha, 'float32'));\n inputs.push($leakyreluAlpha);\n intermediates.push($leakyreluAlpha);\n }\n const product = backend.runWebGLProgram(matmulProgram, inputs, 'float32');\n const out = reshape({ inputs: { x: product }, backend, attrs: { shape: convInfo.outShape } });\n intermediates.push(product);\n for (const i of intermediates) {\n backend.disposeIntermediateTensorInfo(i);\n }\n return out;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJEX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQ29udjJEX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUtyRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1QyxPQUFPLEVBQUMsZUFBZSxFQUFFLDJCQUEyQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBYWxDLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsZ0RBQWdEO0FBQ2hELEVBQUU7QUFDRixzRUFBc0U7QUFDdEUsb0VBQW9FO0FBQ3BFLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsMEVBQTBFO0FBQzFFLHFFQUFxRTtBQUNyRSx3QkFBd0I7QUFDeEIsK0hBQStIO0FBQy9ILFNBQVMsc0JBQXNCLENBQzNCLEtBQWUsRUFBRSxjQUF1QjtJQUMxQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzVCLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtRQUNmLE9BQU8sY0FBYyxDQUFDLENBQUM7WUFDbkI7Z0JBQ0UsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7Z0JBQ2pDLEtBQUss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QUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN2RSxJQUFJLElBQUksRUFBRTtRQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbkI7SUFDRCxJQUFJLHlCQUF5QixFQUFFO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztLQUNyQztJQUNELElBQUksaUJBQWlCLEVBQUU7UUFDckIsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FDMUMsRUFBRSxFQUFFLFNBQVMsRUFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBc0MsRUFDdEMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDckM7SUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUNmLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUV4RSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLEtBQUssTUFBTSxDQUFDLElBQUksYUFBYSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbi8vIGltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb21cbi8vICcuLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9icm9hZGNhc3RfdXRpbCc7XG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtJbTJDb2xQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9pbTJjb2xfcGFja2VkX2dwdSc7XG5pbXBvcnQge21hcEFjdGl2YXRpb25Ub1NoYWRlclByb2dyYW19IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtNYXRNdWxQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9tdWxtYXRfcGFja2VkX2dwdSc7XG5pbXBvcnQgKiBhcyB3ZWJnbF91dGlsIGZyb20gJy4uL3dlYmdsX3V0aWwnO1xuXG5pbXBvcnQge2JhdGNoTWF0TXVsSW1wbCwgTUFUTVVMX1NIQVJFRF9ESU1fVEhSRVNIT0xEfSBmcm9tICcuL0JhdGNoTWF0TXVsX2ltcGwnO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSAnLi9JZGVudGl0eSc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbnR5cGUgQ29udjJEQ29uZmlnID0ge1xuICB4OiBUZW5zb3JJbmZvLFxuICBmaWx0ZXI6IFRlbnNvckluZm8sXG4gIGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjJESW5mbyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYmlhcz86IFRlbnNvckluZm8sXG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHM/OiBUZW5zb3JJbmZvLFxuICBsZWFreXJlbHVBbHBoYT86IG51bWJlcixcbiAgYWN0aXZhdGlvbj86IGJhY2tlbmRfdXRpbC5BY3RpdmF0aW9uXG59O1xuXG4vLyBCb3RoIGNvbnYyZEJ5TWF0TXVsIGFuZCBjb252MmRXaXRoSW0yUm93IGZ1c2UgaGVpZ2h0IGFuZCB3aWR0aCBpbnRvIG9uZVxuLy8gZGltZW5zaW9uIHRvIGNvbXB1dGUgYmF0Y2hNYXRNdWwsIHNvIGJpYXMgYW5kIGFjdGl2YXRpb24gd2VpZ2h0cyBhcmUgYWxzb1xuLy8gc3VwcG9zZWQgdG8gZnVzZSB0aGUgdHdvIGRpbWVuc2lvbnMgaW50byBvbmUuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgdGFyZ2V0IHNoYXBlIGZvciBmdXNpbmcgaGVpZ2h0IGFuZCB3aWR0aFxuLy8gZGltZW5zaW9ucy4gUmV0dXJuaW5nIG51bGwgbWVhbnMgdGhlIHNoYXBlIGlzIGFscmVhZHkgY29tcGF0aWJsZS5cbi8vXG4vLyBFdmVuIHRob3VnaCB0aGUgYmlhcyBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgYSAzLUQgb3IgYSA0LUQgKGluY2x1ZGluZ1xuLy8gYmF0Y2gpIHRlbnNvciBhbmQgUFJlTFUgYWN0aXZpYXRpb24gd2VpZ2h0cyBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgYSA0LURcbi8vIHRlbnNvciwgd2Ugc3RpbGwgbmVlZCB0byBzdXBwb3J0IHRoZW0sIGJlY2F1c2Ugd2UgaGF2ZW4ndCBkaXNhYmxlZFxuLy8gdGhlbSBmb3IgTkhXQyBmb3JtYXQuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2Jsb2IvYjUzYmQ0N2U4ODAzNjdhZTU3NDkzZjBlYTYyOGFiYWYwOGRiMmQ1ZC90ZmpzLWNvcmUvc3JjL29wcy9mdXNlZC9jb252MmQudHMjTDE4MS1MMTk2XG5mdW5jdGlvbiBnZXRTaGFwZUZvckJhdGNoTWF0TXVsKFxuICAgIHNoYXBlOiBudW1iZXJbXSwgaXNDaGFubmVsc0xhc3Q6IGJvb2xlYW4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxlbmd0aCA9IHNoYXBlLmxlbmd0aDtcbiAgaWYgKGxlbmd0aCA+PSAzKSB7XG4gICAgcmV0dXJuIGlzQ2hhbm5lbHNMYXN0ID9cbiAgICAgICAgW1xuICAgICAgICAgIC4uLnNoYXBlLnNsaWNlKDAsIC0zKSAvKiBiYXRjaCAqLyxcbiAgICAgICAgICBzaGFwZVtsZW5ndGggLSAzXSAqIHNoYXBlW2xlbmd0aCAtIDJdIC8qIGhlaWdodCAqIHdpZHRoICovLFxuICAgICAgICAgIHNoYXBlW2xlbmd0aCAtIDFdIC8qIGNoYW5uZWwgKi9cbiAgICAgICAgXSA6XG4gICAgICAgIFtcbiAgICAgICAgICAuLi5zaGFwZS5zbGljZSgwLCAtMykgLyogYmF0Y2ggKi8sIHNoYXBlW2xlbmd0aCAtIDNdIC8qIGNoYW5uZWwgKi8sXG4gICAgICAgICAgc2hhcGVbbGVuZ3RoIC0gMl0gKiBzaGFwZVtsZW5ndGggLSAxXSAvKiBoZWlnaHQgKiB3aWR0aCAqL1xuICAgICAgICBdO1xuICB9IGVsc2UgaWYgKCFpc0NoYW5uZWxzTGFzdCAmJiBsZW5ndGggPT09IDEgJiYgc2hhcGVbMF0gPiAxKSB7XG4gICAgcmV0dXJuIFtzaGFwZVswXSwgMV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8gRm9yIDF4MSBrZXJuZWxzIHRoYXQgaXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5IHBvaW50IGluIHRoZSBpbnB1dCwgY29udm9sdXRpb25cbi8vIGNhbiBiZSBleHByZXNzZWQgYXMgbWF0cml4IG11bHRpcGxpY2F0aW9uICh3aXRob3V0IG5lZWQgZm9yIG1lbW9yeVxuLy8gcmVtYXBwaW5nKS5cbmV4cG9ydCBmdW5jdGlvbiBjb252MmRCeU1hdE11bCh7XG4gIHgsXG4gIGZpbHRlcixcbiAgY29udkluZm8sXG4gIGJhY2tlbmQsXG4gIGJpYXMgPSBudWxsLFxuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gbnVsbCxcbiAgbGVha3lyZWx1QWxwaGEgPSAwLFxuICBhY3RpdmF0aW9uID0gbnVsbFxufTogQ29udjJEQ29uZmlnKSB7XG4gIC8vIFJlc2hhcGVzIGNvbnYyRCBpbnB1dCB0byAyRCB0ZW5zb3JzLCB1c2VzIG1hdE11bCBhbmQgdGhlbiByZXNoYXBlIHRoZVxuICAvLyByZXN1bHQgZnJvbSAyRCB0byA0RC5cbiAgY29uc3QgeFNoYXBlID0geC5zaGFwZTtcbiAgY29uc3QgeFRleERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgY29uc3Qgc2hhcmVkTWF0TXVsRGltID0gY29udkluZm8uaW5DaGFubmVscztcbiAgY29uc3Qgb3V0ZXJTaGFwZVggPSB4U2hhcGVbMF0gKiB4U2hhcGVbMV0gKiB4U2hhcGVbMl07XG4gIGNvbnN0IG91dGVyU2hhcGVGaWx0ZXIgPSBjb252SW5mby5vdXRDaGFubmVscztcbiAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBjb252SW5mby5kYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JztcbiAgY29uc3QgdHJhbnNwb3NlQSA9IGZhbHNlO1xuICBjb25zdCB0cmFuc3Bvc2VCID0gZmFsc2U7XG5cbiAgbGV0IG91dDogVGVuc29ySW5mbztcbiAgY29uc3QgaW50ZXJtZWRpYXRlczogVGVuc29ySW5mb1tdID0gW107XG5cbiAgaWYgKHByZWx1QWN0aXZhdGlvbldlaWdodHMgIT0gbnVsbCkge1xuICAgIGNvbnN0IHRhcmdldFNoYXBlID1cbiAgICAgICAgZ2V0U2hhcGVGb3JCYXRjaE1hdE11bChwcmVsdUFjdGl2YXRpb25XZWlnaHRzLnNoYXBlLCBpc0NoYW5uZWxzTGFzdCk7XG4gICAgaWYgKHRhcmdldFNoYXBlICE9IG51bGwpIHtcbiAgICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHMgPSByZXNoYXBlKHtcbiAgICAgICAgaW5wdXRzOiB7eDogcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c30sXG4gICAgICAgIGJhY2tlbmQsXG4gICAgICAgIGF0dHJzOiB7c2hhcGU6IHRhcmdldFNoYXBlfVxuICAgICAgfSk7XG4gICAgICBpbnRlcm1lZGlhdGVzLnB1c2gocHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgIGNvbnN0IHRhcmdldFNoYXBlID0gZ2V0U2hhcGVGb3JCYXRjaE1hdE11bChiaWFzLnNoYXBlLCBpc0NoYW5uZWxzTGFzdCk7XG4gICAgaWYgKHRhcmdldFNoYXBlICE9IG51bGwpIHtcbiAgICAgIGJpYXMgPSByZXNoYXBlKHtpbnB1dHM6IHt4OiBiaWFzfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogdGFyZ2V0U2hhcGV9fSk7XG4gICAgICBpbnRlcm1lZGlhdGVzLnB1c2goYmlhcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogT25jZSByZWR1Y3Rpb24gb3BzIGFyZSBwYWNrZWQsIGJhdGNoTWF0TXVsIHdpbGwgYWx3YXlzIGJlIHBhY2tlZFxuICAvLyBhbmQgd2UgY2FuIHJlbW92ZSB0aGlzIGNvbmRpdGlvbi5cbiAgY29uc3QgYmF0Y2hNYXRNdWxXaWxsQmVVbnBhY2tlZCA9XG4gICAgICAob3V0ZXJTaGFwZVggPT09IDEgfHwgb3V0ZXJTaGFwZUZpbHRlciA9PT0gMSkgJiZcbiAgICAgIHNoYXJlZE1hdE11bERpbSA+IE1BVE1VTF9TSEFSRURfRElNX1RIUkVTSE9MRDtcblxuICAvLyBUaGUgYWxnb3JpdGhtIGluIHRoZSBpZiBjb25kaXRpb24gYXNzdW1lcyAoMSkgdGhlIG91dHB1dCB3aWxsIGJlIHBhY2tlZCxcbiAgLy8gKDIpIHggaXMgcGFja2VkLCAoMykgeCBpc0NoYW5uZWxzTGFzdCwgKDQpICB4J3MgcGFja2VkIHRleHR1cmUgaXMgYWxyZWFkeVxuICAvLyBvbiBHUFUsICg1KSBjb2wgaXMgb2RkLCAoNikgdGhlIHdpZHRoLCBoZWlnaHQgYW5kIGluQ2hhbm5lbHMgYXJlIHRoZSBzYW1lXG4gIC8vIGZvciB4VGV4RGF0YS5zaGFwZSBhbmQgeFNoYXBlLlxuICBjb25zdCBjYW5PcHRpbWl6ZSA9ICFiYXRjaE1hdE11bFdpbGxCZVVucGFja2VkICYmIHhUZXhEYXRhLmlzUGFja2VkICYmXG4gICAgICBpc0NoYW5uZWxzTGFzdCAmJiB4VGV4RGF0YS50ZXh0dXJlICE9IG51bGwgJiYgeFNoYXBlWzJdICUgMiAhPT0gMCAmJlxuICAgICAgdXRpbC5hcnJheXNFcXVhbCh4VGV4RGF0YS5zaGFwZS5zbGljZSgtMyksIHhTaGFwZS5zbGljZSgtMykpO1xuXG4gIGlmIChjYW5PcHRpbWl6ZSkge1xuICAgIC8vIFdlIGF2b2lkIGV4cGVuc2l2ZSBwYWNrZWQgMngyIHJlc2hhcGUgYnkgcGFkZGluZyBjb2wgY291bnQgdG8gbmV4dCxcbiAgICAvLyBldmVuIG51bWJlci4gV2hlbiBjb2wgaXMgb2RkLCB0aGUgcmVzdWx0IG9mIHBhY2tlZCBiYXRjaE1hdE11bCBpc1xuICAgIC8vIHRoZSBzYW1lIChoYXMgdGhlIHNhbWUgdGV4dHVyZSBsYXlvdXQgYW5kIGFuZCB2YWx1ZXMgaW4gdGhlIHRleHR1cmUpIGFzXG4gICAgLy8gaXQgaXMgZm9yIG5leHQgZXZlbiBjb2wuIFdlIG1ha2UgdGhlIG9kZC1jb2xzIHRlbnNvciB0byBsb29rIGxpa2VcbiAgICAvLyBldmVuLWNvbHMgdGVuc29yIGJlZm9yZSB0aGUgb3BlcmF0aW9uIGFuZCwgYWZ0ZXIgdGhlIGJhdGNoTWF0TXVsLFxuICAgIC8vIGZpeCB0aGUgZXZlbi1jb2xzIHJlc3VsdCB0byBoYXZlIG9kZCBudW1iZXIgb2YgY29scy5cbiAgICBjb25zdCB0YXJnZXRTaGFwZSA9IHhTaGFwZVswXSAqIHhTaGFwZVsxXSAqICh4U2hhcGVbMl0gKyAxKTtcbiAgICBjb25zdCB4UmVzaGFwZWQ6IFRlbnNvckluZm8gPSB7XG4gICAgICBkYXRhSWQ6IHguZGF0YUlkLFxuICAgICAgc2hhcGU6IFsxLCB0YXJnZXRTaGFwZSwgY29udkluZm8uaW5DaGFubmVsc10sXG4gICAgICBkdHlwZTogeC5kdHlwZVxuICAgIH07XG4gICAgLy8geFRleERhdGEuc2hhcGUgZ2V0cyByZWZlcmVuY2VkIGZyb20gR1BHUFVCaW5hcnkuaW5TaGFwZUluZm9zLlxuICAgIC8vIERlY3JlbWVudGluZyBjb2wgY291bnQsIGFmdGVyIGJhdGNoTWF0TXVsLT4uLi4tPmNvbXBpbGVQcm9ncmFtIGxlYWRzIHRvXG4gICAgLy8gaW52YWxpZCBjb2wgY291bnQgd2l0aGluIHRoZSByZWZlcmVuY2UgaW4gR1BHUFVCaW5hcnkuaW5TaGFwZUluZm9zLlxuICAgIC8vIEFsdGVybmF0aXZlIGZpeCB3b3VsZCBiZSB0byBwcm92aWRlIGEgY29weSB0byBHUEdQVUJpbmFyeS5pblNoYXBlSW5mb3NcbiAgICAvLyBpbiBjb21waWxlUHJvZ3JhbSBtZXRob2QsIGJ1dCB0aGF0IHdvdWxkIGFmZmVjdCBjb21waWxhdGlvbiBvZiBhbGxcbiAgICAvLyBwcm9ncmFtcyAtIGluc3RlYWQsIHByb3ZpZGUgYSBjb3B5IGhlcmUsIHdpdGggZXZlbiBjb2wgY291bnQsIGJlZm9yZVxuICAgIC8vIGNhbGxpbmcgYmF0Y2hNYXRNdWwtPi4uLi0+Y29tcGlsZVByb2dyYW0gYW5kIGFmdGVyIHRoYXQsIHRoZSBvcmlnaW5hbFxuICAgIC8vIHhUZXhEYXRhLnNoYXBlIGlzIHJlc3RvcmVkLlxuICAgIGNvbnN0IG9yaWdpbmFsWFRleERhdGFTaGFwZSA9IHhUZXhEYXRhLnNoYXBlO1xuICAgIHhUZXhEYXRhLnNoYXBlID0geFRleERhdGEuc2hhcGUuc2xpY2UoKTtcbiAgICB4VGV4RGF0YS5zaGFwZVt4VGV4RGF0YS5zaGFwZS5sZW5ndGggLSAyXSsrO1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICB3ZWJnbF91dGlsLmlzUmVzaGFwZUZyZWUoeFRleERhdGEuc2hhcGUsIHhSZXNoYXBlZC5zaGFwZSksXG4gICAgICAgICgpID0+IGBwYWNrZWQgcmVzaGFwZSAke3hUZXhEYXRhLnNoYXBlfSB0byAke1xuICAgICAgICAgICAgeFJlc2hhcGVkLnNoYXBlfSBpc24ndCBmcmVlYCk7XG4gICAgY29uc3QgZmlsdGVyUmVzaGFwZWQgPSByZXNoYXBlKHtcbiAgICAgIGlucHV0czoge3g6IGZpbHRlcn0sXG4gICAgICBiYWNrZW5kLFxuICAgICAgYXR0cnM6IHtzaGFwZTogWzEsIGNvbnZJbmZvLmluQ2hhbm5lbHMsIGNvbnZJbmZvLm91dENoYW5uZWxzXX1cbiAgICB9KTtcbiAgICBpbnRlcm1lZGlhdGVzLnB1c2goZmlsdGVyUmVzaGFwZWQpO1xuICAgIGNvbnN0IHBvaW50d2lzZUNvbnYgPSBiYXRjaE1hdE11bEltcGwoe1xuICAgICAgYTogeFJlc2hhcGVkLFxuICAgICAgYjogZmlsdGVyUmVzaGFwZWQsXG4gICAgICBiYWNrZW5kLFxuICAgICAgdHJhbnNwb3NlQSxcbiAgICAgIHRyYW5zcG9zZUIsXG4gICAgICBiaWFzLFxuICAgICAgYWN0aXZhdGlvbixcbiAgICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHMsXG4gICAgICBsZWFreXJlbHVBbHBoYVxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9pbnR3aXNlQ29udlRleERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHBvaW50d2lzZUNvbnYuZGF0YUlkKTtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgcG9pbnR3aXNlQ29udlRleERhdGEuaXNQYWNrZWQsXG4gICAgICAgICgpID0+ICdiYXRjaE1hdE11bCByZXN1bHQgaXMgZXhwZWN0ZWQgdG8gYmUgcGFja2VkJyk7XG4gICAgLy8gUmVzdG9yZSB0aGUgaW5wdXQgc2hhcGUgdG8gb3JpZ2luYWwuXG4gICAgeFRleERhdGEuc2hhcGUgPSBvcmlnaW5hbFhUZXhEYXRhU2hhcGU7XG4gICAgLy8gU2V0IHRoZSBvdXRwdXQgc2hhcGUgLSB0aGVyZSBpcyBubyBuZWVkIGZvciBleHBlbnNpdmUgcmVzaGFwZSBhcyBkYXRhXG4gICAgLy8gbGF5b3V0IGlzIGFscmVhZHkgY29ycmVjdC5cbiAgICBwb2ludHdpc2VDb252VGV4RGF0YS5zaGFwZSA9IGNvbnZJbmZvLm91dFNoYXBlO1xuXG4gICAgb3V0ID0gaWRlbnRpdHkoe2lucHV0czoge3g6IHBvaW50d2lzZUNvbnZ9LCBiYWNrZW5kfSk7XG4gICAgb3V0LnNoYXBlID0gY29udkluZm8ub3V0U2hhcGU7XG5cbiAgICBpbnRlcm1lZGlhdGVzLnB1c2gocG9pbnR3aXNlQ29udik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbnVtQ29scyA9IGNvbnZJbmZvLm91dEhlaWdodCAqIGNvbnZJbmZvLm91dFdpZHRoO1xuICAgIGNvbnN0IHhSZXNoYXBlZCA9IHJlc2hhcGUoe1xuICAgICAgaW5wdXRzOiB7eH0sXG4gICAgICBiYWNrZW5kLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgc2hhcGU6IGlzQ2hhbm5lbHNMYXN0ID9cbiAgICAgICAgICAgIFtjb252SW5mby5iYXRjaFNpemUsIG51bUNvbHMsIGNvbnZJbmZvLmluQ2hhbm5lbHNdIDpcbiAgICAgICAgICAgIFtjb252SW5mby5iYXRjaFNpemUsIGNvbnZJbmZvLmluQ2hhbm5lbHMsIG51bUNvbHNdXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZmlsdGVyUmVzaGFwZWQgPSByZXNoYXBlKHtcbiAgICAgIGlucHV0czoge3g6IGZpbHRlcn0sXG4gICAgICBiYWNrZW5kLFxuICAgICAgYXR0cnM6IHtzaGFwZTogWzEsIGNvbnZJbmZvLmluQ2hhbm5lbHMsIGNvbnZJbmZvLm91dENoYW5uZWxzXX1cbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBiYXRjaE1hdE11bEltcGwoe1xuICAgICAgYTogaXNDaGFubmVsc0xhc3QgPyB4UmVzaGFwZWQgOiBmaWx0ZXJSZXNoYXBlZCxcbiAgICAgIGI6IGlzQ2hhbm5lbHNMYXN0ID8gZmlsdGVyUmVzaGFwZWQgOiB4UmVzaGFwZWQsXG4gICAgICB0cmFuc3Bvc2VBOiAhaXNDaGFubmVsc0xhc3QsXG4gICAgICB0cmFuc3Bvc2VCLFxuICAgICAgYmFja2VuZCxcbiAgICAgIGJpYXMsXG4gICAgICBhY3RpdmF0aW9uLFxuICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyxcbiAgICAgIGxlYWt5cmVsdUFscGhhXG4gICAgfSk7XG5cbiAgICBvdXQgPSByZXNoYXBlKFxuICAgICAgICB7aW5wdXRzOiB7eDogcmVzdWx0fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogY29udkluZm8ub3V0U2hhcGV9fSk7XG5cbiAgICBpbnRlcm1lZGlhdGVzLnB1c2goeFJlc2hhcGVkKTtcbiAgICBpbnRlcm1lZGlhdGVzLnB1c2goZmlsdGVyUmVzaGFwZWQpO1xuICAgIGludGVybWVkaWF0ZXMucHVzaChyZXN1bHQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBpIG9mIGludGVybWVkaWF0ZXMpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGkpO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuLy8gSW1wbGVtZW50cyB0aGUgaW0ycm93IGFsZ29yaXRobSBhcyBvdXRsaW5lZCBpbiBcIkhpZ2ggUGVyZm9ybWFuY2Vcbi8vIENvbnZvbHV0aW9uYWwgTmV1cmFsIE5ldHdvcmtzIGZvciBEb2N1bWVudCBQcm9jZXNzaW5nXCIgKFN1dmlzb2Z0LCAyMDA2KVxuZXhwb3J0IGZ1bmN0aW9uIGNvbnYyZFdpdGhJbTJSb3coe1xuICB4LFxuICBmaWx0ZXIsXG4gIGNvbnZJbmZvLFxuICBiYWNrZW5kLFxuICBiaWFzID0gbnVsbCxcbiAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9IG51bGwsXG4gIGxlYWt5cmVsdUFscGhhID0gMCxcbiAgYWN0aXZhdGlvbiA9IG51bGxcbn06IENvbnYyRENvbmZpZykge1xuICAvLyBSZWFycmFuZ2VzIGNvbnYyZCBpbnB1dCBzbyBlYWNoIGJsb2NrIHRvIGJlIGNvbnZvbHZlZCBvdmVyIGZvcm1zIHRoZVxuICAvLyBjb2x1bW4gb2YgYSBuZXcgbWF0cml4IHdpdGggc2hhcGUgW2ZpbHRlcldpZHRoICogZmlsdGVySGVpZ2h0ICpcbiAgLy8gaW5DaGFubmVscywgb3V0SGVpZ2h0ICogb3V0V2lkdGhdLiBUaGUgZmlsdGVyIGlzIGFsc28gcmVhcnJhbmdlZCBzbyBlYWNoXG4gIC8vIG91dHB1dCBjaGFubmVsIGZvcm1zIGEgcm93IG9mIGEgbmV3IG1hdHJpeCB3aXRoIHNoYXBlIFtvdXRDaGFubmVscyxcbiAgLy8gZmlsdGVyV2lkdGggKiBmaWx0ZXJIZWlnaHQgKiBpbkNoYW5uZWxzXS4gVGhlIGNvbnZvbHV0aW9uIGlzIHRoZW5cbiAgLy8gY29tcHV0ZWQgYnkgbXVsdGlwbHlpbmcgdGhlc2UgbWF0cmljZXMgYW5kIHJlc2hhcGluZyB0aGUgcmVzdWx0LlxuICBjb25zdCB7XG4gICAgZmlsdGVyV2lkdGgsXG4gICAgZmlsdGVySGVpZ2h0LFxuICAgIGluQ2hhbm5lbHMsXG4gICAgb3V0V2lkdGgsXG4gICAgb3V0SGVpZ2h0LFxuICAgIGRhdGFGb3JtYXRcbiAgfSA9IGNvbnZJbmZvO1xuXG4gIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCc7XG5cbiAgY29uc3Qgc2hhcmVkRGltID0gZmlsdGVyV2lkdGggKiBmaWx0ZXJIZWlnaHQgKiBpbkNoYW5uZWxzO1xuICBjb25zdCBudW1Db2xzID0gb3V0SGVpZ2h0ICogb3V0V2lkdGg7XG4gIGNvbnN0IHgyQ29sU2hhcGUgPSBbY29udkluZm8uYmF0Y2hTaXplLCBzaGFyZWREaW0sIG51bUNvbHNdO1xuICBjb25zdCB0cmFuc3Bvc2VBID0gdHJ1ZTtcbiAgY29uc3QgdHJhbnNwb3NlQiA9IGZhbHNlO1xuXG4gIGNvbnN0IGludGVybWVkaWF0ZXM6IFRlbnNvckluZm9bXSA9IFtdO1xuXG4gIGlmIChwcmVsdUFjdGl2YXRpb25XZWlnaHRzICE9IG51bGwpIHtcbiAgICBjb25zdCB0YXJnZXRTaGFwZSA9XG4gICAgICAgIGdldFNoYXBlRm9yQmF0Y2hNYXRNdWwocHJlbHVBY3RpdmF0aW9uV2VpZ2h0cy5zaGFwZSwgaXNDaGFubmVsc0xhc3QpO1xuICAgIGlmICh0YXJnZXRTaGFwZSAhPSBudWxsKSB7XG4gICAgICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gcmVzaGFwZSh7XG4gICAgICAgIGlucHV0czoge3g6IHByZWx1QWN0aXZhdGlvbldlaWdodHN9LFxuICAgICAgICBiYWNrZW5kLFxuICAgICAgICBhdHRyczoge3NoYXBlOiB0YXJnZXRTaGFwZX1cbiAgICAgIH0pO1xuICAgICAgaW50ZXJtZWRpYXRlcy5wdXNoKHByZWx1QWN0aXZhdGlvbldlaWdodHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChiaWFzICE9IG51bGwpIHtcbiAgICBjb25zdCB0YXJnZXRTaGFwZSA9IGdldFNoYXBlRm9yQmF0Y2hNYXRNdWwoYmlhcy5zaGFwZSwgaXNDaGFubmVsc0xhc3QpO1xuICAgIGlmICh0YXJnZXRTaGFwZSAhPSBudWxsKSB7XG4gICAgICBiaWFzID0gcmVzaGFwZSh7aW5wdXRzOiB7eDogYmlhc30sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IHRhcmdldFNoYXBlfX0pO1xuICAgICAgaW50ZXJtZWRpYXRlcy5wdXNoKGJpYXMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHcyUm93ID0gcmVzaGFwZSh7XG4gICAgaW5wdXRzOiB7eDogZmlsdGVyfSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7c2hhcGU6IFsxLCBzaGFyZWREaW0sIHV0aWwuc2l6ZUZyb21TaGFwZShmaWx0ZXIuc2hhcGUpIC8gc2hhcmVkRGltXX1cbiAgfSk7XG4gIGludGVybWVkaWF0ZXMucHVzaCh3MlJvdyk7XG5cbiAgY29uc3QgaW0yQ29sUHJvZ3JhbSA9IG5ldyBJbTJDb2xQYWNrZWRQcm9ncmFtKHgyQ29sU2hhcGUsIGNvbnZJbmZvKTtcbiAgY29uc3QgY3VzdG9tVmFsdWVzID0gW1xuICAgIHguc2hhcGUsIFtjb252SW5mby5wYWRJbmZvLnRvcCwgY29udkluZm8ucGFkSW5mby5sZWZ0XSxcbiAgICBbY29udkluZm8uc3RyaWRlSGVpZ2h0LCBjb252SW5mby5zdHJpZGVXaWR0aF0sXG4gICAgW2NvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LCBjb252SW5mby5kaWxhdGlvbldpZHRoXSwgW2NvbnZJbmZvLmluQ2hhbm5lbHNdLFxuICAgIFtjb252SW5mby5maWx0ZXJXaWR0aCAqIGNvbnZJbmZvLmluQ2hhbm5lbHNdLCBbY29udkluZm8ub3V0V2lkdGhdXG4gIF07XG4gIGNvbnN0IGltMkNvbCA9XG4gICAgICBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShpbTJDb2xQcm9ncmFtLCBbeF0sICdmbG9hdDMyJywgY3VzdG9tVmFsdWVzKTtcbiAgY29uc3QgaW0yQ29sUmVzaGFwZWQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogaW0yQ29sfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogeDJDb2xTaGFwZX19KTtcblxuICBpbnRlcm1lZGlhdGVzLnB1c2goaW0yQ29sKTtcbiAgaW50ZXJtZWRpYXRlcy5wdXNoKGltMkNvbFJlc2hhcGVkKTtcblxuICBjb25zdCBoYXNCaWFzID0gYmlhcyAhPSBudWxsO1xuICBjb25zdCBoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyAhPSBudWxsO1xuICBjb25zdCBoYXNMZWFreXJlbHVBbHBoYSA9IGFjdGl2YXRpb24gPT09ICdsZWFreXJlbHUnO1xuICBjb25zdCBmdXNlZEFjdGl2YXRpb24gPVxuICAgICAgYWN0aXZhdGlvbiA/IG1hcEFjdGl2YXRpb25Ub1NoYWRlclByb2dyYW0oYWN0aXZhdGlvbiwgdHJ1ZSkgOiBudWxsO1xuICBjb25zdCBtYXRtdWxQcm9ncmFtID0gbmV3IE1hdE11bFBhY2tlZFByb2dyYW0oXG4gICAgICBpc0NoYW5uZWxzTGFzdCA/IGltMkNvbFJlc2hhcGVkLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHcyUm93LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgIGlzQ2hhbm5lbHNMYXN0ID8gdzJSb3cuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgaW0yQ29sUmVzaGFwZWQuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgaXNDaGFubmVsc0xhc3QgPyBbY29udkluZm8uYmF0Y2hTaXplLCBudW1Db2xzLCBjb252SW5mby5vdXRDaGFubmVsc10gOlxuICAgICAgICAgICAgICAgICAgICAgICBbY29udkluZm8uYmF0Y2hTaXplLCBjb252SW5mby5vdXRDaGFubmVscywgbnVtQ29sc10sXG4gICAgICB0cmFuc3Bvc2VBLCB0cmFuc3Bvc2VCLCBoYXNCaWFzLCBmdXNlZEFjdGl2YXRpb24sXG4gICAgICBoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzLCBoYXNMZWFreXJlbHVBbHBoYSk7XG4gIGNvbnN0IGlucHV0czogVGVuc29ySW5mb1tdID1cbiAgICAgIGlzQ2hhbm5lbHNMYXN0ID8gW2ltMkNvbFJlc2hhcGVkLCB3MlJvd10gOiBbdzJSb3csIGltMkNvbFJlc2hhcGVkXTtcbiAgaWYgKGJpYXMpIHtcbiAgICBpbnB1dHMucHVzaChiaWFzKTtcbiAgfVxuICBpZiAoaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cykge1xuICAgIGlucHV0cy5wdXNoKHByZWx1QWN0aXZhdGlvbldlaWdodHMpO1xuICB9XG4gIGlmIChoYXNMZWFreXJlbHVBbHBoYSkge1xuICAgIGNvbnN0ICRsZWFreXJlbHVBbHBoYSA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICAgIFtdLCAnZmxvYXQzMicsXG4gICAgICAgIHV0aWwuY3JlYXRlU2NhbGFyVmFsdWUobGVha3lyZWx1QWxwaGEgYXMgdW5rbm93biBhcyAnZmxvYXQzMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zsb2F0MzInKSk7XG4gICAgaW5wdXRzLnB1c2goJGxlYWt5cmVsdUFscGhhKTtcbiAgICBpbnRlcm1lZGlhdGVzLnB1c2goJGxlYWt5cmVsdUFscGhhKTtcbiAgfVxuICBjb25zdCBwcm9kdWN0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0obWF0bXVsUHJvZ3JhbSwgaW5wdXRzLCAnZmxvYXQzMicpO1xuICBjb25zdCBvdXQgPSByZXNoYXBlKFxuICAgICAge2lucHV0czoge3g6IHByb2R1Y3R9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBjb252SW5mby5vdXRTaGFwZX19KTtcblxuICBpbnRlcm1lZGlhdGVzLnB1c2gocHJvZHVjdCk7XG4gIGZvciAoY29uc3QgaSBvZiBpbnRlcm1lZGlhdGVzKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv2D, env } from '@tensorflow/tfjs-core';\nimport { Conv2DProgram } from '../conv_gpu';\nimport { Conv2DPackedProgram } from '../conv_packed_gpu';\nimport { conv2dByMatMul, conv2dWithIm2Row } from './Conv2D_impl';\nimport { reshape } from './Reshape';\nexport function conv2d(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dataFormat, dilations, dimRoundingMode } = attrs;\n const $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad, dimRoundingMode, false /* depthwise */, $dataFormat);\n let out;\n if (convInfo.filterHeight === 1 && convInfo.filterWidth === 1 &&\n convInfo.dilationHeight === 1 && convInfo.dilationWidth === 1 &&\n convInfo.strideHeight === 1 && convInfo.strideWidth === 1 &&\n (convInfo.padInfo.type === 'SAME' || convInfo.padInfo.type === 'VALID')) {\n out = conv2dByMatMul({ x, filter, convInfo, backend });\n }\n else if (convInfo.strideWidth <= 2 && $dataFormat === 'channelsLast'\n && env().getBool('WEBGL_EXP_CONV')) {\n const program = new Conv2DPackedProgram(convInfo);\n const customValues = [\n [convInfo.padInfo.top, convInfo.padInfo.left],\n [convInfo.strideHeight, convInfo.strideWidth],\n [convInfo.dilationHeight, convInfo.dilationWidth],\n [convInfo.inHeight, convInfo.inWidth]\n ];\n out =\n backend.runWebGLProgram(program, [x, filter], 'float32', customValues);\n }\n else if (env().getBool('WEBGL_CONV_IM2COL')) {\n out = conv2dWithIm2Row({ x, filter, convInfo, backend });\n }\n else {\n const program = new Conv2DProgram(convInfo);\n out = backend.runWebGLProgram(program, [x, filter], 'float32');\n }\n const outReshaped = reshape({ inputs: { x: out }, backend, attrs: { shape: convInfo.outShape } });\n backend.disposeIntermediateTensorInfo(out);\n return outReshaped;\n}\nexport const conv2DConfig = {\n kernelName: Conv2D,\n backendName: 'webgl',\n kernelFunc: conv2d,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0NvbnYyRC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBNkIsR0FBRyxFQUF1QyxNQUFNLHVCQUF1QixDQUFDO0FBR2pJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQ3lFO0lBQzNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyRSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBeUMsRUFDM0MsTUFBTSxDQUFDLEtBQXlDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQ3pFLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pELElBQUksR0FBZSxDQUFDO0lBRXBCLElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxDQUFDO1FBQ3pELFFBQVEsQ0FBQyxjQUFjLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssQ0FBQztRQUM3RCxRQUFRLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsV0FBVyxLQUFLLENBQUM7UUFDekQsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLEVBQUU7UUFDM0UsR0FBRyxHQUFHLGNBQWMsQ0FBQyxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7S0FDdEQ7U0FBTSxJQUFJLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLFdBQVcsS0FBSyxjQUFjO1dBQ2pFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNoQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQUc7WUFDbkIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUM3QyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUM3QyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUNqRCxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUN0QyxDQUFDO1FBQ0YsR0FBRztZQUNDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUM1RTtTQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7UUFDN0MsR0FBRyxHQUFHLGdCQUFnQixDQUFDLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztLQUN4RDtTQUFNO1FBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2hFO0lBRUQsTUFBTSxXQUFXLEdBQ2IsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUM1RSxPQUFPLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0MsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBaUI7SUFDeEMsVUFBVSxFQUFFLE1BQU07SUFDbEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLE1BQStCO0NBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBDb252MkQsIENvbnYyREF0dHJzLCBDb252MkRJbnB1dHMsIGVudiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtDb252MkRQcm9ncmFtfSBmcm9tICcuLi9jb252X2dwdSc7XG5pbXBvcnQge0NvbnYyRFBhY2tlZFByb2dyYW19IGZyb20gJy4uL2NvbnZfcGFja2VkX2dwdSc7XG5pbXBvcnQge2NvbnYyZEJ5TWF0TXVsLCBjb252MmRXaXRoSW0yUm93fSBmcm9tICcuL0NvbnYyRF9pbXBsJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnYyZChcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBDb252MkRJbnB1dHMsIGF0dHJzOiBDb252MkRBdHRycywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGZpbHRlcn0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9ucywgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGNvbnN0ICRkYXRhRm9ybWF0ID0gYmFja2VuZF91dGlsLmNvbnZlcnRDb252MkREYXRhRm9ybWF0KGRhdGFGb3JtYXQpO1xuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBmaWx0ZXIuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHN0cmlkZXMsIGRpbGF0aW9ucywgcGFkLFxuICAgICAgZGltUm91bmRpbmdNb2RlLCBmYWxzZSAvKiBkZXB0aHdpc2UgKi8sICRkYXRhRm9ybWF0KTtcbiAgbGV0IG91dDogVGVuc29ySW5mbztcblxuICBpZiAoY29udkluZm8uZmlsdGVySGVpZ2h0ID09PSAxICYmIGNvbnZJbmZvLmZpbHRlcldpZHRoID09PSAxICYmXG4gICAgICBjb252SW5mby5kaWxhdGlvbkhlaWdodCA9PT0gMSAmJiBjb252SW5mby5kaWxhdGlvbldpZHRoID09PSAxICYmXG4gICAgICBjb252SW5mby5zdHJpZGVIZWlnaHQgPT09IDEgJiYgY29udkluZm8uc3RyaWRlV2lkdGggPT09IDEgJiZcbiAgICAgIChjb252SW5mby5wYWRJbmZvLnR5cGUgPT09ICdTQU1FJyB8fCBjb252SW5mby5wYWRJbmZvLnR5cGUgPT09ICdWQUxJRCcpKSB7XG4gICAgb3V0ID0gY29udjJkQnlNYXRNdWwoe3gsIGZpbHRlciwgY29udkluZm8sIGJhY2tlbmR9KTtcbiAgfSBlbHNlIGlmIChjb252SW5mby5zdHJpZGVXaWR0aCA8PSAyICYmICRkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0J1xuICAgICYmIGVudigpLmdldEJvb2woJ1dFQkdMX0VYUF9DT05WJylcbiAgICApIHtcbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IENvbnYyRFBhY2tlZFByb2dyYW0oY29udkluZm8pO1xuICAgIGNvbnN0IGN1c3RvbVZhbHVlcyA9IFtcbiAgICAgIFtjb252SW5mby5wYWRJbmZvLnRvcCwgY29udkluZm8ucGFkSW5mby5sZWZ0XSxcbiAgICAgIFtjb252SW5mby5zdHJpZGVIZWlnaHQsIGNvbnZJbmZvLnN0cmlkZVdpZHRoXSxcbiAgICAgIFtjb252SW5mby5kaWxhdGlvbkhlaWdodCwgY29udkluZm8uZGlsYXRpb25XaWR0aF0sXG4gICAgICBbY29udkluZm8uaW5IZWlnaHQsIGNvbnZJbmZvLmluV2lkdGhdXG4gICAgXTtcbiAgICBvdXQgPVxuICAgICAgICBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeCwgZmlsdGVyXSwgJ2Zsb2F0MzInLCBjdXN0b21WYWx1ZXMpO1xuICB9IGVsc2UgaWYgKGVudigpLmdldEJvb2woJ1dFQkdMX0NPTlZfSU0yQ09MJykpIHtcbiAgICBvdXQgPSBjb252MmRXaXRoSW0yUm93KHt4LCBmaWx0ZXIsIGNvbnZJbmZvLCBiYWNrZW5kfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb252MkRQcm9ncmFtKGNvbnZJbmZvKTtcbiAgICBvdXQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeCwgZmlsdGVyXSwgJ2Zsb2F0MzInKTtcbiAgfVxuXG4gIGNvbnN0IG91dFJlc2hhcGVkID1cbiAgICAgIHJlc2hhcGUoe2lucHV0czoge3g6IG91dH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IGNvbnZJbmZvLm91dFNoYXBlfX0pO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKG91dCk7XG5cbiAgcmV0dXJuIG91dFJlc2hhcGVkO1xufVxuXG5leHBvcnQgY29uc3QgY29udjJEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbnYyRCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNvbnYyZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class Conv2DDerFilterProgram {\n constructor(convInfo) {\n this.variableNames = ['x', 'dy'];\n this.outputShape = convInfo.filterShape;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n 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 ${isChannelsLast ?\n `float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);` :\n `float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);`}\n }\n }\n }\n setOutput(dotProd);\n }\n `;\n }\n}\nexport class Conv2DDerInputProgram {\n constructor(convInfo) {\n this.variableNames = ['dy', 'W'];\n this.outputShape = convInfo.inShape;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n const padTop = filterHeight - 1 - convInfo.padInfo.top;\n const padLeft = filterWidth - 1 - convInfo.padInfo.left;\n const rowDim = isChannelsLast ? 1 : 2;\n const colDim = isChannelsLast ? 2 : 3;\n const channelDim = isChannelsLast ? 3 : 1;\n 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 `;\n }\n}\nexport class Conv3DDerFilterProgram {\n constructor(convInfo) {\n this.variableNames = ['x', 'dy'];\n this.outputShape = convInfo.filterShape;\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const padFront = convInfo.padInfo.front;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n 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 `;\n }\n}\nexport class Conv3DDerInputProgram {\n constructor(convInfo) {\n this.variableNames = ['dy', 'W'];\n this.outputShape = convInfo.inShape;\n const filterDepth = convInfo.filterDepth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const padFront = filterDepth - 1 - convInfo.padInfo.front;\n const padTop = filterHeight - 1 - convInfo.padInfo.top;\n const padLeft = filterWidth - 1 - convInfo.padInfo.left;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl9iYWNrcHJvcF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2NvbnZfYmFja3Byb3BfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE1BQU0sT0FBTyxzQkFBc0I7SUFLakMsWUFBWSxRQUFpQztRQUo3QyxrQkFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBSzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUV4QyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDdEMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUM7UUFFOUQsSUFBSSxDQUFDLFFBQVEsR0FBRzs7Ozs7Ozs7Ozs7OzhCQVlVLFFBQVEsQ0FBQyxTQUFTO2tDQUNkLFFBQVEsQ0FBQyxTQUFTO2lDQUNuQixZQUFZLE1BQU0sTUFBTTs7a0NBRXZCLFFBQVEsQ0FBQyxRQUFROzs7O29DQUlmLFFBQVEsQ0FBQyxRQUFRO21DQUNsQixXQUFXLE1BQU0sT0FBTzs7b0NBRXZCLFFBQVEsQ0FBQyxPQUFPOzs7O2dCQUlwQyxjQUFjLENBQUEsQ0FBQztZQUNsQjs7NkNBRWdDLENBQUMsQ0FBQztZQUNsQzs7NkNBRWdDOzs7Ozs7S0FNeEMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFBWSxRQUFpQztRQUo3QyxrQkFBYSxHQUFHLENBQUMsSUFBSSxF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LENBQUM7UUFDekMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDekMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBRXpDLE1BQU0sUUFBUSxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDMUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2RCxNQUFNLE9BQU8sR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBRXhELElBQUksQ0FBQyxRQUFRLEdBQUc7aUNBQ2EsUUFBUSxLQUFLLE1BQU0sS0FBSyxPQUFPOzs7Ozs7Ozs7Ozs7OztnQ0FjaEMsV0FBVztnREFDSyxXQUFXOztvQ0FFdkIsUUFBUSxDQUFDLFFBQVE7Ozs7O3lCQUs1QixXQUFXOztrQ0FFRixZQUFZO2tEQUNJLFlBQVk7O3NDQUV4QixRQUFRLENBQUMsU0FBUzs7Ozs7OzJCQU03QixZQUFZOztvQ0FFSCxXQUFXO29EQUNLLFdBQVc7O3dDQUV2QixRQUFRLENBQUMsUUFBUTs7Ozs7OzZCQU01QixXQUFXOztzQ0FFRixRQUFRLENBQUMsV0FBVzs7Ozs7Ozs7OztLQVVyRCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgQ29udjJERGVyRmlsdGVyUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnLCAnZHknXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjJESW5mbykge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5maWx0ZXJTaGFwZTtcblxuICAgIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgICBjb25zdCBzdHJpZGVXaWR0aCA9IGNvbnZJbmZvLnN0cmlkZVdpZHRoO1xuICAgIGNvbnN0IHBhZFRvcCA9IGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICAgIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gICAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBjb252SW5mby5kYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JztcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgd1IgPSBjb29yZHMueDtcbiAgICAgICAgaW50IHdDID0gY29vcmRzLnk7XG4gICAgICAgIGludCBkMSA9IGNvb3Jkcy56O1xuICAgICAgICBpbnQgZDIgPSBjb29yZHMudztcblxuICAgICAgICAvLyBDb252b2x2ZSB4KD8sID8sIGQxKSB3aXRoIGR5KDosIDosIGQyKSB0byBnZXQgZHcod1IsIHdDLCBkMSwgZDIpLlxuICAgICAgICAvLyA/ID0gdG8gYmUgZGV0ZXJtaW5lZC4gOiA9IGFjcm9zcyBhbGwgdmFsdWVzIGluIHRoYXQgYXhpcy5cbiAgICAgICAgZmxvYXQgZG90UHJvZCA9IDAuMDtcblxuICAgICAgICBmb3IgKGludCBiID0gMDsgYiA8ICR7Y29udkluZm8uYmF0Y2hTaXplfTsgYisrKSB7XG4gICAgICAgICAgZm9yIChpbnQgeVIgPSAwOyB5UiA8ICR7Y29udkluZm8ub3V0SGVpZ2h0fTsgeVIrKykge1xuICAgICAgICAgICAgaW50IHhSID0gd1IgKyB5UiAqICR7c3RyaWRlSGVpZ2h0fSAtICR7cGFkVG9wfTtcblxuICAgICAgICAgICAgaWYgKHhSIDwgMCB8fCB4UiA+PSAke2NvbnZJbmZvLmluSGVpZ2h0fSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpbnQgeUMgPSAwOyB5QyA8ICR7Y29udkluZm8ub3V0V2lkdGh9OyB5QysrKSB7XG4gICAgICAgICAgICAgIGludCB4QyA9IHdDICsgeUMgKiAke3N0cmlkZVdpZHRofSAtICR7cGFkTGVmdH07XG5cbiAgICAgICAgICAgICAgaWYgKHhDIDwgMCB8fCB4QyA+PSAke2NvbnZJbmZvLmluV2lkdGh9KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAke2lzQ2hhbm5lbHNMYXN0P1xuICAgICAgICAgICAgIGBmbG9hdCBkeVZhbHVlID0gZ2V0RHkoYiwgeVIsIHlDLCBkMik7XG4gICAgICAgICAgICAgIGZsb2F0IHhWYWx1ZSA9IGdldFgoYiwgeFIsIHhDLCBkMSk7XG4gICAgICAgICAgICAgIGRvdFByb2QgKz0gKHhWYWx1ZSAqIGR5VmFsdWUpO2AgOlxuICAgICAgICAgICAgIGBmbG9hdCBkeVZhbHVlID0gZ2V0RHkoYiwgZDIsIHlSLCB5Qyk7XG4gICAgICAgICAgICAgIGZsb2F0IHhWYWx1ZSA9IGdldFgoYiwgZDEsIHhSLCB4Qyk7XG4gICAgICAgICAgICAgIGRvdFByb2QgKz0gKHhWYWx1ZSAqIGR5VmFsdWUpO2B9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldE91dHB1dChkb3RQcm9kKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb252MkREZXJJbnB1dFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydkeScsICdXJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb252SW5mbzogYmFja2VuZF91dGlsLkNvbnYyREluZm8pIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gY29udkluZm8uaW5TaGFwZTtcblxuICAgIGNvbnN0IGZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmZpbHRlckhlaWdodDtcbiAgICBjb25zdCBmaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmZpbHRlcldpZHRoO1xuICAgIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgICBjb25zdCBzdHJpZGVXaWR0aCA9IGNvbnZJbmZvLnN0cmlkZVdpZHRoO1xuICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gY29udkluZm8uZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCc7XG5cbiAgICBjb25zdCBwYWRUb3AgPSBmaWx0ZXJIZWlnaHQgLSAxIC0gY29udkluZm8ucGFkSW5mby50b3A7XG4gICAgY29uc3QgcGFkTGVmdCA9IGZpbHRlcldpZHRoIC0gMSAtIGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcblxuICAgIGNvbnN0IHJvd0RpbSA9IGlzQ2hhbm5lbHNMYXN0ID8gMSA6IDI7XG4gICAgY29uc3QgY29sRGltID0gaXNDaGFubmVsc0xhc3QgPyAyIDogMztcbiAgICBjb25zdCBjaGFubmVsRGltID0gaXNDaGFubmVsc0xhc3QgPyAzIDogMTtcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICBjb25zdCBpdmVjMiBwYWRzID0gaXZlYzIoJHtwYWRUb3B9LCAke3BhZExlZnR9KTtcblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjNCBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IGJhdGNoID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgZDEgPSBjb29yZHNbJHtjaGFubmVsRGltfV07XG5cbiAgICAgICAgaXZlYzIgZHlDb3JuZXIgPSBpdmVjMihjb29yZHNbJHtyb3dEaW19XSwgY29vcmRzWyR7Y29sRGltfV0pIC0gcGFkcztcbiAgICAgICAgaW50IGR5UkNvcm5lciA9IGR5Q29ybmVyLng7XG4gICAgICAgIGludCBkeUNDb3JuZXIgPSBkeUNvcm5lci55O1xuXG4gICAgICAgIC8vIENvbnZvbHZlIGR5KD8sID8sIGQyKSB3aXRoIHcoOiwgOiwgZDEsIGQyKSB0byBjb21wdXRlIGR4KHhSLCB4QywgZDEpLlxuICAgICAgICAvLyA/ID0gdG8gYmUgZGV0ZXJtaW5lZC4gOiA9IGFjcm9zcyBhbGwgdmFsdWVzIGluIHRoYXQgYXhpcy5cbiAgICAgICAgZmxvYXQgZG90UHJvZCA9IDAuMDtcbiAgICAgICAgZm9yIChpbnQgd1IgPSAwOyB3UiA8ICR7ZmlsdGVySGVpZ2h0fTsgd1IrKykge1xuICAgICAgICAgIGZsb2F0IGR5UiA9IGZsb2F0KGR5UkNvcm5lciArIHdSKSAvICR7c3RyaWRlSGVpZ2h0fS4wO1xuXG4gICAgICAgICAgaWYgKGR5UiA8IDAuMCB8fCBkeVIgPj0gJHtjb252SW5mby5vdXRIZWlnaHR9LjAgfHwgZnJhY3QoZHlSKSA+IDAuMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGludCBpZHlSID0gaW50KGR5Uik7XG5cbiAgICAgICAgICBpbnQgd1JQZXJtID0gJHtmaWx0ZXJIZWlnaHR9IC0gMSAtIHdSO1xuXG4gICAgICAgICAgZm9yIChpbnQgd0MgPSAwOyB3QyA8ICR7ZmlsdGVyV2lkdGh9OyB3QysrKSB7XG4gICAgICAgICAgICBmbG9hdCBkeUMgPSBmbG9hdChkeUNDb3JuZXIgKyB3QykgLyAke3N0cmlkZVdpZHRofS4wO1xuXG4gICAgICAgICAgICBpZiAoZHlDIDwgMC4wIHx8IGR5QyA+PSAke2NvbnZJbmZvLm91dFdpZHRofS4wIHx8XG4gICAgICAgICAgICAgICAgZnJhY3QoZHlDKSA+IDAuMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGludCBpZHlDID0gaW50KGR5Qyk7XG5cbiAgICAgICAgICAgIGludCB3Q1Blcm0gPSAke2ZpbHRlcldpZHRofSAtIDEgLSB3QztcblxuICAgICAgICAgICAgZm9yIChpbnQgZDIgPSAwOyBkMiA8ICR7Y29udkluZm8ub3V0Q2hhbm5lbHN9OyBkMisrKSB7XG5cbiAgICAgICAgICAgICAgaWYgKCR7aXNDaGFubmVsc0xhc3R9KSB7XG4gICAgICAgICAgICAgICAgZmxvYXQgeFZhbHVlID0gZ2V0RHkoYmF0Y2gsIGlkeVIsIGlkeUMsIGQyKTtcbiAgICAgICAgICAgICAgICBmbG9hdCB3VmFsdWUgPSBnZXRXKHdSUGVybSwgd0NQZXJtLCBkMSwgZDIpO1xuICAgICAgICAgICAgICAgIGRvdFByb2QgKz0geFZhbHVlICogd1ZhbHVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZsb2F0IHhWYWx1ZSA9IGdldER5KGJhdGNoLCBkMiwgaWR5UiwgaWR5Qyk7XG4gICAgICAgICAgICAgICAgZmxvYXQgd1ZhbHVlID0gZ2V0Vyh3UlBlcm0sIHdDUGVybSwgZDEsIGQyKTtcbiAgICAgICAgICAgICAgICBkb3RQcm9kICs9IHhWYWx1ZSAqIHdWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldE91dHB1dChkb3RQcm9kKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb252M0REZXJGaWx0ZXJQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCcsICdkeSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252M0RJbmZvKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGNvbnZJbmZvLmZpbHRlclNoYXBlO1xuXG4gICAgY29uc3Qgc3RyaWRlRGVwdGggPSBjb252SW5mby5zdHJpZGVEZXB0aDtcbiAgICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gICAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgICBjb25zdCBwYWRGcm9udCA9IGNvbnZJbmZvLnBhZEluZm8uZnJvbnQ7XG4gICAgY29uc3QgcGFkVG9wID0gY29udkluZm8ucGFkSW5mby50b3A7XG4gICAgY29uc3QgcGFkTGVmdCA9IGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM1IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgd0YgPSBjb29yZHMueDtcbiAgICAgICAgaW50IHdSID0gY29vcmRzLnk7XG4gICAgICAgIGludCB3QyA9IGNvb3Jkcy56O1xuICAgICAgICBpbnQgZDEgPSBjb29yZHMudztcbiAgICAgICAgaW50IGQyID0gY29vcmRzLnU7XG5cbiAgICAgICAgZmxvYXQgZG90UHJvZCA9IDAuMDtcblxuICAgICAgICBmb3IgKGludCBiID0gMDsgYiA8ICR7Y29udkluZm8uYmF0Y2hTaXplfTsgYisrKSB7XG4gICAgICAgICAgZm9yIChpbnQgeUYgPSAwOyB5RiA8ICR7Y29udkluZm8ub3V0RGVwdGh9OyB5RisrKSB7XG4gICAgICAgICAgICBpbnQgeEYgPSB3RiArIHlGICogJHtzdHJpZGVEZXB0aH0gLSAke3BhZEZyb250fTtcblxuICAgICAgICAgICAgaWYgKHhGIDwgMCB8fCB4RiA+PSAke2NvbnZJbmZvLmluRGVwdGh9KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGludCB5UiA9IDA7IHlSIDwgJHtjb252SW5mby5vdXRIZWlnaHR9OyB5UisrKSB7XG4gICAgICAgICAgICAgIGludCB4UiA9IHdSICsgeVIgKiAke3N0cmlkZUhlaWdodH0gLSAke3BhZFRvcH07XG5cbiAgICAgICAgICAgICAgaWYgKHhSIDwgMCB8fCB4UiA+PSAke2NvbnZJbmZvLmluSGVpZ2h0fSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChpbnQgeUMgPSAwOyB5QyA8ICR7Y29udkluZm8ub3V0V2lkdGh9OyB5QysrKSB7XG4gICAgICAgICAgICAgICAgaW50IHhDID0gd0MgKyB5QyAqICR7c3RyaWRlV2lkdGh9IC0gJHtwYWRMZWZ0fTtcblxuICAgICAgICAgICAgICAgIGlmICh4QyA8IDAgfHwgeEMgPj0gJHtjb252SW5mby5pbldpZHRofSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmxvYXQgZHlWYWx1ZSA9IGdldER5KGIsIHlGLCB5UiwgeUMsIGQyKTtcbiAgICAgICAgICAgICAgICBmbG9hdCB4VmFsdWUgPSBnZXRYKGIsIHhGLCB4UiwgeEMsIGQxKTtcbiAgICAgICAgICAgICAgICBkb3RQcm9kICs9ICh4VmFsdWUgKiBkeVZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRPdXRwdXQoZG90UHJvZCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29udjNERGVySW5wdXRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnZHknLCAnVyddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252M0RJbmZvKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGNvbnZJbmZvLmluU2hhcGU7XG5cbiAgICBjb25zdCBmaWx0ZXJEZXB0aCA9IGNvbnZJbmZvLmZpbHRlckRlcHRoO1xuICAgIGNvbnN0IGZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmZpbHRlckhlaWdodDtcbiAgICBjb25zdCBmaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmZpbHRlcldpZHRoO1xuICAgIGNvbnN0IHN0cmlkZURlcHRoID0gY29udkluZm8uc3RyaWRlRGVwdGg7XG4gICAgY29uc3Qgc3RyaWRlSGVpZ2h0ID0gY29udkluZm8uc3RyaWRlSGVpZ2h0O1xuICAgIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG5cbiAgICBjb25zdCBwYWRGcm9udCA9IGZpbHRlckRlcHRoIC0gMSAtIGNvbnZJbmZvLnBhZEluZm8uZnJvbnQ7XG4gICAgY29uc3QgcGFkVG9wID0gZmlsdGVySGVpZ2h0IC0gMSAtIGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICAgIGNvbnN0IHBhZExlZnQgPSBmaWx0ZXJXaWR0aCAtIDEgLSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgY29uc3QgaXZlYzMgcGFkcyA9IGl2ZWMzKCR7cGFkRnJvbnR9LCAke3BhZFRvcH0sICR7cGFkTGVmdH0pO1xuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM1IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHMueDtcbiAgICAgICAgaW50IGQxID0gY29vcmRzLnU7XG5cblxuICAgICAgICBpdmVjMyBkeUNvcm5lciA9IGl2ZWMzKGNvb3Jkcy55LCBjb29yZHMueiwgY29vcmRzLncpIC0gcGFkcztcbiAgICAgICAgaW50IGR5RkNvcm5lciA9IGR5Q29ybmVyLng7XG4gICAgICAgIGludCBkeVJDb3JuZXIgPSBkeUNvcm5lci55O1xuICAgICAgICBpbnQgZHlDQ29ybmVyID0gZHlDb3JuZXIuejtcblxuICAgICAgICBmbG9hdCBkb3RQcm9kID0gMC4wO1xuICAgICAgICBmb3IgKGludCB3RiA9IDA7IHdGIDwgJHtmaWx0ZXJEZXB0aH07IHdGKyspIHtcbiAgICAgICAgICBmbG9hdCBkeUYgPSBmbG9hdChkeUZDb3JuZXIgKyB3RikgLyAke3N0cmlkZURlcHRofS4wO1xuXG4gICAgICAgICAgaWYgKGR5RiA8IDAuMCB8fCBkeUYgPj0gJHtjb252SW5mby5vdXREZXB0aH0uMCB8fCBmcmFjdChkeUYpID4gMC4wKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW50IGlkeUYgPSBpbnQoZHlGKTtcblxuICAgICAgICAgIGludCB3RlBlcm0gPSAke2ZpbHRlckRlcHRofSAtIDEgLSB3RjtcblxuICAgICAgICAgIGZvciAoaW50IHdSID0gMDsgd1IgPCAke2ZpbHRlckhlaWdodH07IHdSKyspIHtcbiAgICAgICAgICAgIGZsb2F0IGR5UiA9IGZsb2F0KGR5UkNvcm5lciArIHdSKSAvICR7c3RyaWRlSGVpZ2h0fS4wO1xuXG4gICAgICAgICAgICBpZiAoZHlSIDwgMC4wIHx8IGR5UiA+PSAke2NvbnZJbmZvLm91dEhlaWdodH0uMCB8fFxuICAgICAgICAgICAgICBmcmFjdChkeVIpID4gMC4wKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50IGlkeVIgPSBpbnQoZHlSKTtcblxuICAgICAgICAgICAgaW50IHdSUGVybSA9ICR7ZmlsdGVySGVpZ2h0fSAtIDEgLSB3UjtcblxuICAgICAgICAgICAgZm9yIChpbnQgd0MgPSAwOyB3QyA8ICR7ZmlsdGVyV2lkdGh9OyB3QysrKSB7XG4gICAgICAgICAgICAgIGZsb2F0IGR5QyA9IGZsb2F0KGR5Q0Nvcm5lciArIHdDKSAvICR7c3RyaWRlV2lkdGh9LjA7XG5cbiAgICAgICAgICAgICAgaWYgKGR5QyA8IDAuMCB8fCBkeUMgPj0gJHtjb252SW5mby5vdXRXaWR0aH0uMCB8fFxuICAgICAgICAgICAgICAgICAgZnJhY3QoZHlDKSA+IDAuMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGludCBpZHlDID0gaW50KGR5Qyk7XG5cbiAgICAgICAgICAgICAgaW50IHdDUGVybSA9ICR7ZmlsdGVyV2lkdGh9IC0gMSAtIHdDO1xuXG4gICAgICAgICAgICAgIGZvciAoaW50IGQyID0gMDsgZDIgPCAke2NvbnZJbmZvLm91dENoYW5uZWxzfTsgZDIrKykge1xuICAgICAgICAgICAgICAgIGZsb2F0IHhWYWx1ZSA9IGdldER5KGJhdGNoLCBpZHlGLCBpZHlSLCBpZHlDLCBkMik7XG4gICAgICAgICAgICAgICAgZmxvYXQgd1ZhbHVlID0gZ2V0Vyh3RlBlcm0sIHdSUGVybSwgd0NQZXJtLCBkMSwgZDIpO1xuICAgICAgICAgICAgICAgIGRvdFByb2QgKz0geFZhbHVlICogd1ZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldE91dHB1dChkb3RQcm9kKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv2DBackpropFilter } from '@tensorflow/tfjs-core';\nimport { Conv2DDerFilterProgram } from '../conv_backprop_gpu';\nexport function conv2DBackpropFilter(args) {\n const { inputs, backend, attrs } = args;\n const { x, dy } = inputs;\n const { strides, pad, dataFormat, dimRoundingMode, filterShape } = attrs;\n const $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filterShape, strides, 1 /* dilations */, pad, dimRoundingMode, false /* depthwise */, $dataFormat);\n const program = new Conv2DDerFilterProgram(convInfo);\n return backend.runWebGLProgram(program, [x, dy], 'float32');\n}\nexport const conv2DBackpropFilterConfig = {\n kernelName: Conv2DBackpropFilter,\n backendName: 'webgl',\n kernelFunc: conv2DBackpropFilter,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJEQmFja3Byb3BGaWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQ29udjJEQmFja3Byb3BGaWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBa0YsTUFBTSx1QkFBdUIsQ0FBQztBQUcxSixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFJcEM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdkUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFDakUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQzlELFdBQVcsQ0FBQyxDQUFDO0lBRWpCLE1BQU0sT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQWlCO0lBQ3RELFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLG9CQUE2QztDQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjJEQmFja3Byb3BGaWx0ZXIsIENvbnYyREJhY2twcm9wRmlsdGVyQXR0cnMsIENvbnYyREJhY2twcm9wRmlsdGVySW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0NvbnYyRERlckZpbHRlclByb2dyYW19IGZyb20gJy4uL2NvbnZfYmFja3Byb3BfZ3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnYyREJhY2twcm9wRmlsdGVyKGFyZ3M6IHtcbiAgaW5wdXRzOiBDb252MkRCYWNrcHJvcEZpbHRlcklucHV0cyxcbiAgYXR0cnM6IENvbnYyREJhY2twcm9wRmlsdGVyQXR0cnMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0xcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGR5fSA9IGlucHV0cztcbiAgY29uc3Qge3N0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGltUm91bmRpbmdNb2RlLCBmaWx0ZXJTaGFwZX0gPSBhdHRycztcblxuICBjb25zdCAkZGF0YUZvcm1hdCA9IGJhY2tlbmRfdXRpbC5jb252ZXJ0Q29udjJERGF0YUZvcm1hdChkYXRhRm9ybWF0KTtcbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBmaWx0ZXJTaGFwZSwgc3RyaWRlcyxcbiAgICAgIDEgLyogZGlsYXRpb25zICovLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZmFsc2UgLyogZGVwdGh3aXNlICovLFxuICAgICAgJGRhdGFGb3JtYXQpO1xuXG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgQ29udjJERGVyRmlsdGVyUHJvZ3JhbShjb252SW5mbyk7XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeCwgZHldLCAnZmxvYXQzMicpO1xufVxuXG5leHBvcnQgY29uc3QgY29udjJEQmFja3Byb3BGaWx0ZXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29udjJEQmFja3Byb3BGaWx0ZXIsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBjb252MkRCYWNrcHJvcEZpbHRlciBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { useShapeUniforms } from './gpgpu_math';\nexport class Conv2DDerInputPackedProgram {\n constructor(convInfo) {\n this.variableNames = ['dy', 'W'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.customUniforms = [\n { name: 'strides', type: 'vec2' },\n ];\n this.outputShape = convInfo.inShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const padTop = filterHeight - 1 - convInfo.padInfo.top;\n const padLeft = filterWidth - 1 - convInfo.padInfo.left;\n 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\n ivec2 dyCorner = ivec2(coords[1], coords[2]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n vec4 result = vec4(0.);\n for (int wR = 0; wR < ${filterHeight}; wR++) {\n float dyR = float(dyRCorner + wR) / strides[0];\n if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n int wRPerm = ${filterHeight} - 1 - wR;\n\n for (int wC = 0; wC < ${filterWidth}; wC++) {\n int wCPerm = ${filterWidth} - 1 - wC;\n\n float dyC = float(dyCCorner + wC) / strides[1];\n bool idyCVal = (dyC >= 0.0) && (dyC < ${convInfo.outWidth}.0)\n && (fract(dyC) == 0.0);\n int idyC = int(dyC);\n\n float dyC2 = float(dyCCorner + wC + 1) / strides[1];\n bool idyCVal2 = (dyC2 >= 0.0) && (dyC2 < ${convInfo.outWidth}.0)\n && (fract(dyC2) == 0.0);\n int idyC2 = int(dyC2);\n\n if (idyCVal && idyCVal2) {\n for (int d2 = 0; d2 < ${convInfo.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec4 dySample2 = (idyC / 2 == idyC2 / 2) ?\n dySample : getDy(batch, idyR, idyC2, d2);\n\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n\n dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample2.xy : dySample2.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal) {\n for (int d2 = 0; d2 < ${convInfo.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal2) {\n for (int d2 = 0; d2 < ${convInfo.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC2, d2);\n vec2 dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n }\n }\n }\n setOutput(result);\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl9iYWNrcHJvcF9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9jb252X2JhY2twcm9wX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFlLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTVELE1BQU0sT0FBTywyQkFBMkI7SUFXdEMsWUFBWSxRQUFpQztRQVY3QyxrQkFBYSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBSXBCLG1CQUFjLEdBQUc7WUFDZixFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQWUsRUFBRTtTQUMxQyxDQUFDO1FBR0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJFLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUV6QyxNQUFNLE1BQU0sR0FBRyxZQUFZLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFeEQsSUFBSSxDQUFDLFFBQVEsR0FBRztpQ0FDYSxNQUFNLEtBQUssT0FBTzs7Ozs7Ozs7Ozs7O2dDQVluQixZQUFZOztvQ0FFUixRQUFRLENBQUMsU0FBUzs7Ozt5QkFJN0IsWUFBWTs7a0NBRUgsV0FBVzsyQkFDbEIsV0FBVzs7O29EQUdjLFFBQVEsQ0FBQyxRQUFROzs7Ozt1REFLZCxRQUFRLENBQUMsUUFBUTs7Ozs7c0NBS2xDLFFBQVEsQ0FBQyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7OztzQ0FpQnBCLFFBQVEsQ0FBQyxXQUFXOzs7Ozs7Ozs7c0NBU3BCLFFBQVEsQ0FBQyxXQUFXOzs7Ozs7Ozs7Ozs7O0tBYXJELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtHUEdQVVByb2dyYW0sIHVzZVNoYXBlVW5pZm9ybXN9IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBDb252MkREZXJJbnB1dFBhY2tlZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydkeScsICdXJ107XG4gIHBhY2tlZElucHV0cyA9IHRydWU7XG4gIHBhY2tlZE91dHB1dCA9IHRydWU7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcbiAgY3VzdG9tVW5pZm9ybXMgPSBbXG4gICAge25hbWU6ICdzdHJpZGVzJywgdHlwZTogJ3ZlYzInIGFzIGNvbnN0IH0sXG4gIF07XG5cbiAgY29uc3RydWN0b3IoY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252MkRJbmZvKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGNvbnZJbmZvLmluU2hhcGU7XG4gICAgdGhpcy5lbmFibGVTaGFwZVVuaWZvcm1zID0gdXNlU2hhcGVVbmlmb3Jtcyh0aGlzLm91dHB1dFNoYXBlLmxlbmd0aCk7XG5cbiAgICBjb25zdCBmaWx0ZXJIZWlnaHQgPSBjb252SW5mby5maWx0ZXJIZWlnaHQ7XG4gICAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcblxuICAgIGNvbnN0IHBhZFRvcCA9IGZpbHRlckhlaWdodCAtIDEgLSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgICBjb25zdCBwYWRMZWZ0ID0gZmlsdGVyV2lkdGggLSAxIC0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGNvbnN0IGl2ZWMyIHBhZHMgPSBpdmVjMigke3BhZFRvcH0sICR7cGFkTGVmdH0pO1xuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHNbMF07XG4gICAgICAgIGludCBkMSA9IGNvb3Jkc1szXTtcblxuICAgICAgICBpdmVjMiBkeUNvcm5lciA9IGl2ZWMyKGNvb3Jkc1sxXSwgY29vcmRzWzJdKSAtIHBhZHM7XG4gICAgICAgIGludCBkeVJDb3JuZXIgPSBkeUNvcm5lci54O1xuICAgICAgICBpbnQgZHlDQ29ybmVyID0gZHlDb3JuZXIueTtcblxuICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4pO1xuICAgICAgICBmb3IgKGludCB3UiA9IDA7IHdSIDwgJHtmaWx0ZXJIZWlnaHR9OyB3UisrKSB7XG4gICAgICAgICAgZmxvYXQgZHlSID0gZmxvYXQoZHlSQ29ybmVyICsgd1IpIC8gc3RyaWRlc1swXTtcbiAgICAgICAgICBpZiAoZHlSIDwgMC4wIHx8IGR5UiA+PSAke2NvbnZJbmZvLm91dEhlaWdodH0uMCB8fCBmcmFjdChkeVIpID4gMC4wKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW50IGlkeVIgPSBpbnQoZHlSKTtcbiAgICAgICAgICBpbnQgd1JQZXJtID0gJHtmaWx0ZXJIZWlnaHR9IC0gMSAtIHdSO1xuXG4gICAgICAgICAgZm9yIChpbnQgd0MgPSAwOyB3QyA8ICR7ZmlsdGVyV2lkdGh9OyB3QysrKSB7XG4gICAgICAgICAgICBpbnQgd0NQZXJtID0gJHtmaWx0ZXJXaWR0aH0gLSAxIC0gd0M7XG5cbiAgICAgICAgICAgIGZsb2F0IGR5QyA9IGZsb2F0KGR5Q0Nvcm5lciArIHdDKSAvIHN0cmlkZXNbMV07XG4gICAgICAgICAgICBib29sIGlkeUNWYWwgPSAoZHlDID49IDAuMCkgJiYgKGR5QyA8ICR7Y29udkluZm8ub3V0V2lkdGh9LjApXG4gICAgICAgICAgICAgICYmIChmcmFjdChkeUMpID09IDAuMCk7XG4gICAgICAgICAgICBpbnQgaWR5QyA9IGludChkeUMpO1xuXG4gICAgICAgICAgICBmbG9hdCBkeUMyID0gZmxvYXQoZHlDQ29ybmVyICsgd0MgKyAxKSAvIHN0cmlkZXNbMV07XG4gICAgICAgICAgICBib29sIGlkeUNWYWwyID0gKGR5QzIgPj0gMC4wKSAmJiAoZHlDMiA8ICR7Y29udkluZm8ub3V0V2lkdGh9LjApXG4gICAgICAgICAgICAgICYmIChmcmFjdChkeUMyKSA9PSAwLjApO1xuICAgICAgICAgICAgaW50IGlkeUMyID0gaW50KGR5QzIpO1xuXG4gICAgICAgICAgICBpZiAoaWR5Q1ZhbCAmJiBpZHlDVmFsMikge1xuICAgICAgICAgICAgICBmb3IgKGludCBkMiA9IDA7IGQyIDwgJHtjb252SW5mby5vdXRDaGFubmVsc307IGQyICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2ZWM0IHdWYWx1ZSA9IGdldFcod1JQZXJtLCB3Q1Blcm0sIGQxLCBkMik7XG4gICAgICAgICAgICAgICAgdmVjNCBkeVNhbXBsZSA9IGdldER5KGJhdGNoLCBpZHlSLCBpZHlDLCBkMik7XG4gICAgICAgICAgICAgICAgdmVjNCBkeVNhbXBsZTIgPSAoaWR5QyAvIDIgPT0gaWR5QzIgLyAyKSA/XG4gICAgICAgICAgICAgICAgICBkeVNhbXBsZSA6IGdldER5KGJhdGNoLCBpZHlSLCBpZHlDMiwgZDIpO1xuXG4gICAgICAgICAgICAgICAgdmVjMiBkeVZhbHVlID0gbW9kKGZsb2F0KGlkeUMpLCAyLikgPT0gMC4gP1xuICAgICAgICAgICAgICAgICAgZHlTYW1wbGUueHkgOiBkeVNhbXBsZS56dztcbiAgICAgICAgICAgICAgICByZXN1bHQueHkgKz0gdmVjMihkb3QoZHlWYWx1ZSwgd1ZhbHVlLnh5KSxcbiAgICAgICAgICAgICAgICAgIGRvdChkeVZhbHVlLCB3VmFsdWUuencpKTtcblxuICAgICAgICAgICAgICAgIGR5VmFsdWUgPSBtb2QoZmxvYXQoaWR5QzIpLCAyLikgPT0gMC4gP1xuICAgICAgICAgICAgICAgICAgZHlTYW1wbGUyLnh5IDogZHlTYW1wbGUyLnp3O1xuICAgICAgICAgICAgICAgIHJlc3VsdC56dyArPSB2ZWMyKGRvdChkeVZhbHVlLCB3VmFsdWUueHkpLFxuICAgICAgICAgICAgICAgICAgZG90KGR5VmFsdWUsIHdWYWx1ZS56dykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlkeUNWYWwpIHtcbiAgICAgICAgICAgICAgZm9yIChpbnQgZDIgPSAwOyBkMiA8ICR7Y29udkluZm8ub3V0Q2hhbm5lbHN9OyBkMiArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmVjNCB3VmFsdWUgPSBnZXRXKHdSUGVybSwgd0NQZXJtLCBkMSwgZDIpO1xuICAgICAgICAgICAgICAgIHZlYzQgZHlTYW1wbGUgPSBnZXREeShiYXRjaCwgaWR5UiwgaWR5QywgZDIpO1xuICAgICAgICAgICAgICAgIHZlYzIgZHlWYWx1ZSA9IG1vZChmbG9hdChpZHlDKSwgMi4pID09IDAuID9cbiAgICAgICAgICAgICAgICAgIGR5U2FtcGxlLnh5IDogZHlTYW1wbGUuenc7XG4gICAgICAgICAgICAgICAgcmVzdWx0Lnh5ICs9IHZlYzIoZG90KGR5VmFsdWUsIHdWYWx1ZS54eSksXG4gICAgICAgICAgICAgICAgICBkb3QoZHlWYWx1ZSwgd1ZhbHVlLnp3KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaWR5Q1ZhbDIpIHtcbiAgICAgICAgICAgICAgZm9yIChpbnQgZDIgPSAwOyBkMiA8ICR7Y29udkluZm8ub3V0Q2hhbm5lbHN9OyBkMiArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmVjNCB3VmFsdWUgPSBnZXRXKHdSUGVybSwgd0NQZXJtLCBkMSwgZDIpO1xuICAgICAgICAgICAgICAgIHZlYzQgZHlTYW1wbGUgPSBnZXREeShiYXRjaCwgaWR5UiwgaWR5QzIsIGQyKTtcbiAgICAgICAgICAgICAgICB2ZWMyIGR5VmFsdWUgPSBtb2QoZmxvYXQoaWR5QzIpLCAyLikgPT0gMC4gP1xuICAgICAgICAgICAgICAgICAgZHlTYW1wbGUueHkgOiBkeVNhbXBsZS56dztcbiAgICAgICAgICAgICAgICByZXN1bHQuencgKz0gdmVjMihkb3QoZHlWYWx1ZSwgd1ZhbHVlLnh5KSxcbiAgICAgICAgICAgICAgICAgIGRvdChkeVZhbHVlLCB3VmFsdWUuencpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRPdXRwdXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv2DBackpropInput, env } from '@tensorflow/tfjs-core';\nimport { Conv2DDerInputProgram } from '../conv_backprop_gpu';\nimport { Conv2DDerInputPackedProgram } from '../conv_backprop_packed_gpu';\nexport function conv2DBackpropInput(args) {\n const { inputs, backend, attrs } = args;\n const { dy, filter } = inputs;\n const { inputShape, strides, pad, dataFormat, dimRoundingMode } = attrs;\n const $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(inputShape, filter.shape, strides, 1 /* dilations */, pad, dimRoundingMode, false, $dataFormat);\n if (env().getBool('WEBGL_PACK_CONV2DTRANSPOSE') &&\n $dataFormat === 'channelsLast') {\n const customValues = [\n [convInfo.strideHeight, convInfo.strideWidth],\n ];\n const program = new Conv2DDerInputPackedProgram(convInfo);\n return backend.runWebGLProgram(program, [dy, filter], 'float32', customValues);\n }\n else {\n const program = new Conv2DDerInputProgram(convInfo);\n return backend.runWebGLProgram(program, [dy, filter], 'float32');\n }\n}\nexport const conv2DBackpropInputConfig = {\n kernelName: Conv2DBackpropInput,\n backendName: 'webgl',\n kernelFunc: conv2DBackpropInput,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJEQmFja3Byb3BJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Db252MkRCYWNrcHJvcElucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQXVELEdBQUcsRUFBMkIsTUFBTSx1QkFBdUIsQ0FBQztBQUc1SixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFJbkM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUF5QyxFQUFFLE9BQU8sRUFDckUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVqRSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztRQUMzQyxXQUFXLEtBQUssY0FBYyxFQUFFO1FBQ2xDLE1BQU0sWUFBWSxHQUFHO1lBQ25CLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDO1NBQzlDLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FDMUIsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUNyRDtTQUFNO1FBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2xFO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFpQjtJQUNyRCxVQUFVLEVBQUUsbUJBQW1CO0lBQy9CLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxtQkFBNEM7Q0FDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIENvbnYyREJhY2twcm9wSW5wdXQsIENvbnYyREJhY2twcm9wSW5wdXRBdHRycywgQ29udjJEQmFja3Byb3BJbnB1dElucHV0cywgZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0NvbnYyRERlcklucHV0UHJvZ3JhbX0gZnJvbSAnLi4vY29udl9iYWNrcHJvcF9ncHUnO1xuaW1wb3J0IHtDb252MkREZXJJbnB1dFBhY2tlZFByb2dyYW19IGZyb20gJy4uL2NvbnZfYmFja3Byb3BfcGFja2VkX2dwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252MkRCYWNrcHJvcElucHV0KGFyZ3M6IHtcbiAgaW5wdXRzOiBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzLFxuICBhdHRyczogQ29udjJEQmFja3Byb3BJbnB1dEF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtkeSwgZmlsdGVyfSA9IGlucHV0cztcbiAgY29uc3Qge2lucHV0U2hhcGUsIHN0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGNvbnN0ICRkYXRhRm9ybWF0ID0gYmFja2VuZF91dGlsLmNvbnZlcnRDb252MkREYXRhRm9ybWF0KGRhdGFGb3JtYXQpO1xuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgIGlucHV0U2hhcGUsIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcyxcbiAgICAgIDEgLyogZGlsYXRpb25zICovLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZmFsc2UsICRkYXRhRm9ybWF0KTtcblxuICBpZiAoZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19DT05WMkRUUkFOU1BPU0UnKSAmJlxuICAgICAgJGRhdGFGb3JtYXQgPT09ICdjaGFubmVsc0xhc3QnKSB7XG4gICAgY29uc3QgY3VzdG9tVmFsdWVzID0gW1xuICAgICAgW2NvbnZJbmZvLnN0cmlkZUhlaWdodCwgY29udkluZm8uc3RyaWRlV2lkdGhdLFxuICAgIF07XG4gICAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb252MkREZXJJbnB1dFBhY2tlZFByb2dyYW0oY29udkluZm8pO1xuICAgIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgICAgcHJvZ3JhbSwgW2R5LCBmaWx0ZXJdLCAnZmxvYXQzMicsIGN1c3RvbVZhbHVlcyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb252MkREZXJJbnB1dFByb2dyYW0oY29udkluZm8pO1xuICAgIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbZHksIGZpbHRlcl0sICdmbG9hdDMyJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYyREJhY2twcm9wSW5wdXRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29udjJEQmFja3Byb3BJbnB1dCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNvbnYyREJhY2twcm9wSW5wdXQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3D } from '@tensorflow/tfjs-core';\nimport { Conv3DProgram } from '../conv_gpu';\nexport function conv3D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dilations } = attrs;\n const convInfo = backend_util.computeConv3DInfo(x.shape, filter.shape, strides, dilations, pad);\n const program = new Conv3DProgram(convInfo);\n return backend.runWebGLProgram(program, [x, filter], 'float32');\n}\nexport const conv3DConfig = {\n kernelName: Conv3D,\n backendName: 'webgl',\n kernelFunc: conv3D,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0NvbnYzRC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBc0QsTUFBTSx1QkFBdUIsQ0FBQztBQUdoSCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQ3lFO0lBQzNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFeEMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBaUQsRUFDbkQsTUFBTSxDQUFDLEtBQWlELEVBQUUsT0FBTyxFQUNqRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIENvbnYzRCwgQ29udjNEQXR0cnMsIENvbnYzRElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtDb252M0RQcm9ncmFtfSBmcm9tICcuLi9jb252X2dwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252M0QoXG4gICAgYXJnczpcbiAgICAgICAge2lucHV0czogQ29udjNESW5wdXRzLCBhdHRyczogQ29udjNEQXR0cnMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgcGFkLCBkaWxhdGlvbnN9ID0gYXR0cnM7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZUNvbnYzREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBmaWx0ZXIuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcyxcbiAgICAgIGRpbGF0aW9ucywgcGFkKTtcblxuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbnYzRFByb2dyYW0oY29udkluZm8pO1xuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3gsIGZpbHRlcl0sICdmbG9hdDMyJyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb252M0RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29udjNELFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogY29udjNEIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3DBackpropFilterV2 } from '@tensorflow/tfjs-core';\nimport { Conv3DDerFilterProgram } from '../conv_backprop_gpu';\nexport function conv3DBackpropFilterV2(args) {\n const { inputs, backend, attrs } = args;\n const { x, dy } = inputs;\n const { strides, pad, filterShape } = attrs;\n const convInfo = backend_util.computeConv3DInfo(x.shape, filterShape, strides, 1 /* dilations */, pad);\n const program = new Conv3DDerFilterProgram(convInfo);\n return backend.runWebGLProgram(program, [x, dy], 'float32');\n}\nexport const conv3DBackpropFilterV2Config = {\n kernelName: Conv3DBackpropFilterV2,\n backendName: 'webgl',\n kernelFunc: conv3DBackpropFilterV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNEQmFja3Byb3BGaWx0ZXJWMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Db252M0RCYWNrcHJvcEZpbHRlclYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsc0JBQXNCLEVBQXNGLE1BQU0sdUJBQXVCLENBQUM7QUFHaEssT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFNUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBSXRDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUxQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUFpRCxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQ3pFLENBQUMsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBaUI7SUFDeEQsVUFBVSxFQUFFLHNCQUFzQjtJQUNsQyxXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsc0JBQStDO0NBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBDb252M0RCYWNrcHJvcEZpbHRlclYyLCBDb252M0RCYWNrcHJvcEZpbHRlclYyQXR0cnMsIENvbnYzREJhY2twcm9wRmlsdGVyVjJJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuY30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7Q29udjNERGVyRmlsdGVyUHJvZ3JhbX0gZnJvbSAnLi4vY29udl9iYWNrcHJvcF9ncHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udjNEQmFja3Byb3BGaWx0ZXJWMihhcmdzOiB7XG4gIGlucHV0czogQ29udjNEQmFja3Byb3BGaWx0ZXJWMklucHV0cyxcbiAgYXR0cnM6IENvbnYzREJhY2twcm9wRmlsdGVyVjJBdHRycyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTFxufSkge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgcGFkLCBmaWx0ZXJTaGFwZX0gPSBhdHRycztcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjNESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2hhcGUsIHN0cmlkZXMsXG4gICAgICAxIC8qIGRpbGF0aW9ucyAqLywgcGFkKTtcblxuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbnYzRERlckZpbHRlclByb2dyYW0oY29udkluZm8pO1xuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3gsIGR5XSwgJ2Zsb2F0MzInKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYzREJhY2twcm9wRmlsdGVyVjJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29udjNEQmFja3Byb3BGaWx0ZXJWMixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNvbnYzREJhY2twcm9wRmlsdGVyVjIgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3DBackpropInputV2 } from '@tensorflow/tfjs-core';\nimport { Conv3DDerInputProgram } from '../conv_backprop_gpu';\nexport function conv3DBackpropInput(args) {\n const { inputs, backend, attrs } = args;\n const { dy, filter } = inputs;\n const { pad, strides, inputShape } = attrs;\n const convInfo = backend_util.computeConv3DInfo(inputShape, filter.shape, strides, 1 /* dilations */, pad);\n const program = new Conv3DDerInputProgram(convInfo);\n return backend.runWebGLProgram(program, [dy, filter], 'float32');\n}\nexport const conv3DBackpropInputConfig = {\n kernelName: Conv3DBackpropInputV2,\n backendName: 'webgl',\n kernelFunc: conv3DBackpropInput,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNEQmFja3Byb3BJbnB1dFYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0NvbnYzREJhY2twcm9wSW5wdXRWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLHFCQUFxQixFQUFvRixNQUFNLHVCQUF1QixDQUFDO0FBRzdKLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTNELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUluQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsRUFBRSxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUM1QixNQUFNLEVBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFekMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQWlELEVBQ3BFLE9BQU8sRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXJDLE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQWlCO0lBQ3JELFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLG1CQUE0QztDQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjNEQmFja3Byb3BJbnB1dFYyLCBDb252M0RCYWNrcHJvcElucHV0VjJBdHRycywgQ29udjNEQmFja3Byb3BJbnB1dFYySW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0NvbnYzRERlcklucHV0UHJvZ3JhbX0gZnJvbSAnLi4vY29udl9iYWNrcHJvcF9ncHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udjNEQmFja3Byb3BJbnB1dChhcmdzOiB7XG4gIGlucHV0czogQ29udjNEQmFja3Byb3BJbnB1dFYySW5wdXRzLFxuICBhdHRyczogQ29udjNEQmFja3Byb3BJbnB1dFYyQXR0cnMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0xcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7cGFkLCBzdHJpZGVzLCBpbnB1dFNoYXBlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVDb252M0RJbmZvKFxuICAgICAgaW5wdXRTaGFwZSwgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBzdHJpZGVzLCAxIC8qIGRpbGF0aW9ucyAqLywgcGFkKTtcblxuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbnYzRERlcklucHV0UHJvZ3JhbShjb252SW5mbyk7XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbZHksIGZpbHRlcl0sICdmbG9hdDMyJyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb252M0RCYWNrcHJvcElucHV0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbnYzREJhY2twcm9wSW5wdXRWMixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNvbnYzREJhY2twcm9wSW5wdXQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cos } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET_PACKED } from '../binaryop_packed_gpu';\nimport { CHECK_NAN_SNIPPET_UNARY, unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst COS = CHECK_NAN_SNIPPET_UNARY + `\n return cos(x);\n`;\nconst COS_PACKED = `\n vec4 result = cos(x);\n bvec4 isNaN = isnan(x);\n ${CHECK_NAN_SNIPPET_PACKED}\n return result;\n`;\nexport const cos = unaryKernelFunc({ opSnippet: COS, packedOpSnippet: COS_PACKED });\nexport const cosConfig = {\n kernelName: Cos,\n backendName: 'webgl',\n kernelFunc: cos,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0Nvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRTVGLE1BQU0sR0FBRyxHQUFHLHVCQUF1QixHQUFHOztDQUVyQyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7OztJQUdmLHdCQUF3Qjs7Q0FFM0IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FDWixlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBRztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0NvcywgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0NIRUNLX05BTl9TTklQUEVUX1BBQ0tFRH0gZnJvbSAnLi4vYmluYXJ5b3BfcGFja2VkX2dwdSc7XG5pbXBvcnQge0NIRUNLX05BTl9TTklQUEVUX1VOQVJZLCB1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuXG5jb25zdCBDT1MgPSBDSEVDS19OQU5fU05JUFBFVF9VTkFSWSArIGBcbiAgcmV0dXJuIGNvcyh4KTtcbmA7XG5cbmNvbnN0IENPU19QQUNLRUQgPSBgXG4gIHZlYzQgcmVzdWx0ID0gY29zKHgpO1xuICBidmVjNCBpc05hTiA9IGlzbmFuKHgpO1xuICAke0NIRUNLX05BTl9TTklQUEVUX1BBQ0tFRH1cbiAgcmV0dXJuIHJlc3VsdDtcbmA7XG5cbmV4cG9ydCBjb25zdCBjb3MgPVxuICAgIHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBDT1MsIHBhY2tlZE9wU25pcHBldDogQ09TX1BBQ0tFRH0pO1xuXG5leHBvcnQgY29uc3QgY29zQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvcyxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNvcyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cosh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst COSH = `\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`;\nexport const cosh = unaryKernelFunc({ opSnippet: COSH });\nexport const coshConfig = {\n kernelName: Cosh,\n backendName: 'webgl',\n kernelFunc: cosh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Db3NoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFbkUsTUFBTSxJQUFJLEdBQUc7OztDQUdaLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0Nvc2gsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgQ09TSCA9IGBcbiAgZmxvYXQgZTJ4ID0gZXhwKC14KTtcbiAgcmV0dXJuIChlMnggKyAxLjAgLyBlMngpIC8gMi4wO1xuYDtcblxuZXhwb3J0IGNvbnN0IGNvc2ggPSB1bmFyeUtlcm5lbEZ1bmMoe29wU25pcHBldDogQ09TSH0pO1xuXG5leHBvcnQgY29uc3QgY29zaENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDb3NoLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogY29zaCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class CropAndResizeProgram {\n constructor(imageShape, boxShape, cropSize, method, extrapolationValue) {\n this.variableNames = ['Image', 'Boxes', 'BoxInd'];\n this.outputShape = [];\n const [batch, imageHeight, imageWidth, depth] = imageShape;\n const [numBoxes,] = boxShape;\n const [cropHeight, cropWidth] = cropSize;\n this.outputShape = [numBoxes, cropHeight, cropWidth, depth];\n const methodId = method === 'bilinear' ? 1 : 0;\n const [inputHeightFloat, inputWidthFloat] = [`${imageHeight - 1}.0`, `${imageWidth - 1}.0`];\n const [heightRatio, heightScale, inY] = cropHeight > 1 ?\n [\n `${(imageHeight - 1) / (cropHeight - 1)}`,\n '(y2-y1) * height_ratio',\n `y1*${inputHeightFloat} + float(y)*(height_scale)`,\n ] :\n [\n '0.0',\n '0.0',\n `0.5 * (y1+y2) * ${inputHeightFloat}`,\n ];\n const [widthRatio, widthScale, inX] = cropWidth > 1 ?\n [\n `${(imageWidth - 1) / (cropWidth - 1)}`,\n '(x2-x1) * width_ratio',\n `x1*${inputWidthFloat} + float(x)*(width_scale)`,\n ] :\n [\n '0.0',\n '0.0',\n `0.5 * (x1+x2) * ${inputWidthFloat}`,\n ];\n // Reference implementation\n // tslint:disable-next-line:max-line-length\n // https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/crop_and_resize_op_gpu.cu.cc\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcF9hbmRfcmVzaXplX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvY3JvcF9hbmRfcmVzaXplX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBSy9CLFlBQ0ksVUFBNEMsRUFBRSxRQUEwQixFQUN4RSxRQUEwQixFQUFFLE1BQTRCLEVBQ3hELGtCQUEwQjtRQVA5QixrQkFBYSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3QyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQU96QixNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxRQUFRLEVBQUcsR0FBRyxRQUFRLENBQUM7UUFDOUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsR0FDckMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBELE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRDtnQkFDRSxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUN6Qyx3QkFBd0I7Z0JBQ3hCLE1BQU0sZ0JBQWdCLDRCQUE0QjthQUNuRCxDQUFDLENBQUM7WUFDSDtnQkFDRSxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsbUJBQW1CLGdCQUFnQixFQUFFO2FBQ3RDLENBQUM7UUFDTixNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakQ7Z0JBQ0UsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsdUJBQXVCO2dCQUN2QixNQUFNLGVBQWUsMkJBQTJCO2FBQ2pELENBQUMsQ0FBQztZQUNIO2dCQUNFLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxtQkFBbUIsZUFBZSxFQUFFO2FBQ3JDLENBQUM7UUFFTiwyQkFBMkI7UUFDM0IsMkNBQTJDO1FBQzNDLDRHQUE0RztRQUM1RyxJQUFJLENBQUMsUUFBUSxHQUFHO3lDQUNxQixXQUFXO3dDQUNaLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBZ0JqQixLQUFLOzs7OytCQUlQLFdBQVc7OEJBQ1osVUFBVTs7dUJBRWpCLEdBQUc7bUNBQ1MsZ0JBQWdCOzRCQUN2QixrQkFBa0I7Ozt1QkFHdkIsR0FBRzttQ0FDUyxlQUFlOzRCQUN0QixrQkFBa0I7Ozs7O2FBS2pDLFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdCaEIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBDcm9wQW5kUmVzaXplUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0ltYWdlJywgJ0JveGVzJywgJ0JveEluZCddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIGltYWdlU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBib3hTaGFwZTogW251bWJlciwgbnVtYmVyXSxcbiAgICAgIGNyb3BTaXplOiBbbnVtYmVyLCBudW1iZXJdLCBtZXRob2Q6ICdiaWxpbmVhcid8J25lYXJlc3QnLFxuICAgICAgZXh0cmFwb2xhdGlvblZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBbYmF0Y2gsIGltYWdlSGVpZ2h0LCBpbWFnZVdpZHRoLCBkZXB0aF0gPSBpbWFnZVNoYXBlO1xuICAgIGNvbnN0IFtudW1Cb3hlcywgXSA9IGJveFNoYXBlO1xuICAgIGNvbnN0IFtjcm9wSGVpZ2h0LCBjcm9wV2lkdGhdID0gY3JvcFNpemU7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IFtudW1Cb3hlcywgY3JvcEhlaWdodCwgY3JvcFdpZHRoLCBkZXB0aF07XG4gICAgY29uc3QgbWV0aG9kSWQgPSBtZXRob2QgPT09ICdiaWxpbmVhcicgPyAxIDogMDtcblxuICAgIGNvbnN0IFtpbnB1dEhlaWdodEZsb2F0LCBpbnB1dFdpZHRoRmxvYXRdID1cbiAgICAgICAgW2Ake2ltYWdlSGVpZ2h0IC0gMX0uMGAsIGAke2ltYWdlV2lkdGggLSAxfS4wYF07XG5cbiAgICBjb25zdCBbaGVpZ2h0UmF0aW8sIGhlaWdodFNjYWxlLCBpblldID0gY3JvcEhlaWdodCA+IDEgP1xuICAgICAgICBbXG4gICAgICAgICAgYCR7KGltYWdlSGVpZ2h0IC0gMSkgLyAoY3JvcEhlaWdodCAtIDEpfWAsXG4gICAgICAgICAgJyh5Mi15MSkgKiBoZWlnaHRfcmF0aW8nLFxuICAgICAgICAgIGB5MSoke2lucHV0SGVpZ2h0RmxvYXR9ICsgZmxvYXQoeSkqKGhlaWdodF9zY2FsZSlgLFxuICAgICAgICBdIDpcbiAgICAgICAgW1xuICAgICAgICAgICcwLjAnLFxuICAgICAgICAgICcwLjAnLFxuICAgICAgICAgIGAwLjUgKiAoeTEreTIpICogJHtpbnB1dEhlaWdodEZsb2F0fWAsXG4gICAgICAgIF07XG4gICAgY29uc3QgW3dpZHRoUmF0aW8sIHdpZHRoU2NhbGUsIGluWF0gPSBjcm9wV2lkdGggPiAxID9cbiAgICAgICAgW1xuICAgICAgICAgIGAkeyhpbWFnZVdpZHRoIC0gMSkgLyAoY3JvcFdpZHRoIC0gMSl9YCxcbiAgICAgICAgICAnKHgyLXgxKSAqIHdpZHRoX3JhdGlvJyxcbiAgICAgICAgICBgeDEqJHtpbnB1dFdpZHRoRmxvYXR9ICsgZmxvYXQoeCkqKHdpZHRoX3NjYWxlKWAsXG4gICAgICAgIF0gOlxuICAgICAgICBbXG4gICAgICAgICAgJzAuMCcsXG4gICAgICAgICAgJzAuMCcsXG4gICAgICAgICAgYDAuNSAqICh4MSt4MikgKiAke2lucHV0V2lkdGhGbG9hdH1gLFxuICAgICAgICBdO1xuXG4gICAgLy8gUmVmZXJlbmNlIGltcGxlbWVudGF0aW9uXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvYmxvYi9tYXN0ZXIvdGVuc29yZmxvdy9jb3JlL2tlcm5lbHMvY3JvcF9hbmRfcmVzaXplX29wX2dwdS5jdS5jY1xuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICBjb25zdCBmbG9hdCBoZWlnaHRfcmF0aW8gPSBmbG9hdCgke2hlaWdodFJhdGlvfSk7XG4gICAgICBjb25zdCBmbG9hdCB3aWR0aF9yYXRpbyA9IGZsb2F0KCR7d2lkdGhSYXRpb30pO1xuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjNCBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IGIgPSBjb29yZHNbMF07XG4gICAgICAgIGludCB5ID0gY29vcmRzWzFdO1xuICAgICAgICBpbnQgeCA9IGNvb3Jkc1syXTtcbiAgICAgICAgaW50IGQgPSBjb29yZHNbM107XG5cbiAgICAgICAgLy8gZ2V0IGJveCB2YWxzXG4gICAgICAgIGZsb2F0IHkxID0gZ2V0Qm94ZXMoYiwwKTtcbiAgICAgICAgZmxvYXQgeDEgPSBnZXRCb3hlcyhiLDEpO1xuICAgICAgICBmbG9hdCB5MiA9IGdldEJveGVzKGIsMik7XG4gICAgICAgIGZsb2F0IHgyID0gZ2V0Qm94ZXMoYiwzKTtcblxuICAgICAgICAvLyBnZXQgaW1hZ2UgaW4gYmF0Y2ggaW5kZXhcbiAgICAgICAgaW50IGJJbmQgPSByb3VuZChnZXRCb3hJbmQoYikpO1xuICAgICAgICBpZihiSW5kIDwgMCB8fCBiSW5kID49ICR7YmF0Y2h9KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZmxvYXQgaGVpZ2h0X3NjYWxlID0gJHtoZWlnaHRTY2FsZX07XG4gICAgICAgIGZsb2F0IHdpZHRoX3NjYWxlID0gJHt3aWR0aFNjYWxlfTtcblxuICAgICAgICBmbG9hdCBpbl95ID0gJHtpbll9O1xuICAgICAgICBpZiggaW5feSA8IDAuMCB8fCBpbl95ID4gJHtpbnB1dEhlaWdodEZsb2F0fSApIHtcbiAgICAgICAgICBzZXRPdXRwdXQoZmxvYXQoJHtleHRyYXBvbGF0aW9uVmFsdWV9KSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZsb2F0IGluX3ggPSAke2luWH07XG4gICAgICAgIGlmKCBpbl94IDwgMC4wIHx8IGluX3ggPiAke2lucHV0V2lkdGhGbG9hdH0gKSB7XG4gICAgICAgICAgc2V0T3V0cHV0KGZsb2F0KCR7ZXh0cmFwb2xhdGlvblZhbHVlfSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZlYzIgc291cmNlRnJhY0luZGV4Q1IgPSB2ZWMyKGluX3gsaW5feSk7XG4gICAgICAgIGlmKCR7bWV0aG9kSWR9ID09IDEpIHtcbiAgICAgICAgICAvLyBDb21wdXRlIHRoZSBmb3VyIGludGVnZXIgaW5kaWNlcy5cbiAgICAgICAgICBpdmVjMiBzb3VyY2VGbG9vckNSID0gaXZlYzIoc291cmNlRnJhY0luZGV4Q1IpO1xuICAgICAgICAgIGl2ZWMyIHNvdXJjZUNlaWxDUiA9IGl2ZWMyKGNlaWwoc291cmNlRnJhY0luZGV4Q1IpKTtcblxuICAgICAgICAgIGZsb2F0IHRvcExlZnQgPSBnZXRJbWFnZShiLCBzb3VyY2VGbG9vckNSLnksIHNvdXJjZUZsb29yQ1IueCwgZCk7XG4gICAgICAgICAgZmxvYXQgYm90dG9tTGVmdCA9IGdldEltYWdlKGIsIHNvdXJjZUNlaWxDUi55LCBzb3VyY2VGbG9vckNSLngsIGQpO1xuICAgICAgICAgIGZsb2F0IHRvcFJpZ2h0ID0gZ2V0SW1hZ2UoYiwgc291cmNlRmxvb3JDUi55LCBzb3VyY2VDZWlsQ1IueCwgZCk7XG4gICAgICAgICAgZmxvYXQgYm90dG9tUmlnaHQgPSBnZXRJbWFnZShiLCBzb3VyY2VDZWlsQ1IueSwgc291cmNlQ2VpbENSLngsIGQpO1xuXG4gICAgICAgICAgdmVjMiBmcmFjQ1IgPSBzb3VyY2VGcmFjSW5kZXhDUiAtIHZlYzIoc291cmNlRmxvb3JDUik7XG5cbiAgICAgICAgICBmbG9hdCB0b3AgPSB0b3BMZWZ0ICsgKHRvcFJpZ2h0IC0gdG9wTGVmdCkgKiBmcmFjQ1IueDtcbiAgICAgICAgICBmbG9hdCBib3R0b20gPSBib3R0b21MZWZ0ICsgKGJvdHRvbVJpZ2h0IC0gYm90dG9tTGVmdCkgKiBmcmFjQ1IueDtcbiAgICAgICAgICBmbG9hdCBuZXdWYWx1ZSA9IHRvcCArIChib3R0b20gLSB0b3ApICogZnJhY0NSLnk7XG4gICAgICAgICAgc2V0T3V0cHV0KG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjb29yZGluYXRvcnMgb2YgbmVhcmVzdCBuZWlnaGJvciBwb2ludC5cbiAgICAgICAgICBpdmVjMiBzb3VyY2VOZWFyZXN0Q1IgPSBpdmVjMihmbG9vcihcbiAgICAgICAgICAgIHNvdXJjZUZyYWNJbmRleENSICsgdmVjMigwLjUsMC41KSkpO1xuICAgICAgICAgIGZsb2F0IG5ld1ZhbHVlID0gZ2V0SW1hZ2UoYiwgc291cmNlTmVhcmVzdENSLnksIHNvdXJjZU5lYXJlc3RDUi54LCBkKTtcbiAgICAgICAgICBzZXRPdXRwdXQobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { CropAndResize } from '@tensorflow/tfjs-core';\nimport { CropAndResizeProgram } from '../crop_and_resize_gpu';\nexport const cropAndResize = (args) => {\n const { inputs, backend, attrs } = args;\n const { image, boxes, boxInd } = inputs;\n const { cropSize, method, extrapolationValue } = attrs;\n const program = new CropAndResizeProgram(image.shape, boxes.shape, cropSize, method, extrapolationValue);\n return backend.runWebGLProgram(program, [image, boxes, boxInd], 'float32');\n};\nexport const cropAndResizeConfig = {\n kernelName: CropAndResize,\n backendName: 'webgl',\n kernelFunc: cropAndResize\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JvcEFuZFJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Dcm9wQW5kUmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxhQUFhLEVBQWdGLE1BQU0sdUJBQXVCLENBQUM7QUFHbkksT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFJN0IsRUFBYyxFQUFFO0lBQ2YsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN0QyxNQUFNLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG9CQUFvQixDQUNwQyxLQUFLLENBQUMsS0FBeUMsRUFDL0MsS0FBSyxDQUFDLEtBQXlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFpQjtJQUMvQyxVQUFVLEVBQUUsYUFBYTtJQUN6QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsYUFBc0M7Q0FDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtDcm9wQW5kUmVzaXplLCBDcm9wQW5kUmVzaXplQXR0cnMsIENyb3BBbmRSZXNpemVJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7Q3JvcEFuZFJlc2l6ZVByb2dyYW19IGZyb20gJy4uL2Nyb3BfYW5kX3Jlc2l6ZV9ncHUnO1xuXG5leHBvcnQgY29uc3QgY3JvcEFuZFJlc2l6ZSA9IChhcmdzOiB7XG4gIGlucHV0czogQ3JvcEFuZFJlc2l6ZUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IENyb3BBbmRSZXNpemVBdHRyc1xufSk6IFRlbnNvckluZm8gPT4ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7aW1hZ2UsIGJveGVzLCBib3hJbmR9ID0gaW5wdXRzO1xuICBjb25zdCB7Y3JvcFNpemUsIG1ldGhvZCwgZXh0cmFwb2xhdGlvblZhbHVlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgQ3JvcEFuZFJlc2l6ZVByb2dyYW0oXG4gICAgICBpbWFnZS5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgIGJveGVzLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlcl0sIGNyb3BTaXplLCBtZXRob2QsIGV4dHJhcG9sYXRpb25WYWx1ZSk7XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbaW1hZ2UsIGJveGVzLCBib3hJbmRdLCAnZmxvYXQzMicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyb3BBbmRSZXNpemVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ3JvcEFuZFJlc2l6ZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGNyb3BBbmRSZXNpemUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","import { getCoordsDataType } from './shader_compiler';\nexport var CumOpType;\n(function (CumOpType) {\n CumOpType[\"Prod\"] = \"*\";\n CumOpType[\"Sum\"] = \"+\";\n})(CumOpType || (CumOpType = {}));\nexport class CumProgram {\n constructor(op, outputShape, exclusive, reverse) {\n this.op = op;\n this.outputShape = outputShape;\n this.variableNames = ['x'];\n this.customUniforms = [{ name: 'index', type: 'float' }];\n const rank = this.outputShape.length;\n const initVal = this.op === CumOpType.Prod ? '1.0' : '0.0';\n const val = exclusive ? initVal : `getX(${getCoords(rank, 'coords', this.op)})`;\n const length = this.outputShape[this.outputShape.length - 1];\n let condition = '';\n let idxString = '';\n // When exclusive is set, the cum op becomes roll op that copies the\n // value from the previous index based on the direction specified by the\n // reverse flag.\n if (exclusive) {\n condition = reverse ? `end != ${length - 1}` : 'end != 0';\n idxString = reverse ? 'end + 1' : 'end - 1';\n }\n else {\n condition = reverse ? `end + pow2 < ${length}` : 'end >= pow2';\n idxString = (reverse ? 'end + pow2' : 'end - pow2');\n }\n this.userCode = `\n void main() {\n ${getCoordsDataType(rank)} coords = getOutputCoords();\n int end = ${getFinalCoord(rank, 'coords', this.op)};\n float val = ${val};\n int pow2 = int(pow(2.0, index));\n if (${condition}) {\n int idx = ${idxString};\n ${getFinalCoord(rank, 'coords', this.op)} = idx;\n val ${this.op}= getX(${getCoords(rank, 'coords', this.op)});\n }\n setOutput(val);\n }\n `;\n }\n}\nfunction getCoords(rank, name, op) {\n if (rank === 1) {\n return `${name}`;\n }\n else if (rank === 2) {\n return `${name}.x, ${name}.y`;\n }\n else if (rank === 3) {\n return `${name}.x, ${name}.y, ${name}.z`;\n }\n else if (rank === 4) {\n return `${name}.x, ${name}.y, ${name}.z, ${name}.w`;\n }\n else {\n throw new Error(`Cumulative ${op} for rank ${rank} is not yet supported`);\n }\n}\nfunction getFinalCoord(rank, name, op) {\n if (rank === 1) {\n return `${name}`;\n }\n else if (rank === 2) {\n return `${name}.y`;\n }\n else if (rank === 3) {\n return `${name}.z`;\n }\n else if (rank === 4) {\n return `${name}.w`;\n }\n else {\n throw new Error(`Cumulative ${op} for rank ${rank} is not yet supported`);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VtX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvY3VtX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGlCQUFpQixFQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFFakUsTUFBTSxDQUFOLElBQVksU0FHWDtBQUhELFdBQVksU0FBUztJQUNuQix1QkFBVSxDQUFBO0lBQ1Ysc0JBQVMsQ0FBQTtBQUNYLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sT0FBTyxVQUFVO0lBS3JCLFlBQ1csRUFBYSxFQUFTLFdBQXFCLEVBQUUsU0FBa0IsRUFDdEUsT0FBZ0I7UUFEVCxPQUFFLEdBQUYsRUFBRSxDQUFXO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQVU7UUFMdEQsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLG1CQUFjLEdBQUcsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQXNCLEVBQUMsQ0FBQyxDQUFDO1FBSy9ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0QsTUFBTSxHQUFHLEdBQ0wsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLG9FQUFvRTtRQUNwRSx3RUFBd0U7UUFDeEUsZ0JBQWdCO1FBQ2hCLElBQUksU0FBUyxFQUFFO1lBQ2IsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUMxRCxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUM3QzthQUFNO1lBQ0wsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDL0QsU0FBUyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRzs7VUFFVixpQkFBaUIsQ0FBQyxJQUFJLENBQUM7b0JBQ2IsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztzQkFDcEMsR0FBRzs7Y0FFWCxTQUFTO3NCQUNELFNBQVM7WUFDbkIsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLEVBQUUsVUFBVSxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDOzs7O0tBSTlELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEVBQWE7SUFDMUQsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2QsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDO0tBQ2xCO1NBQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUM7S0FDL0I7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxHQUFHLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUM7S0FDMUM7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxHQUFHLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDO0tBQ3JEO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxhQUFhLElBQUksdUJBQXVCLENBQUMsQ0FBQztLQUMzRTtBQUNILENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEVBQWE7SUFDOUQsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2QsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDO0tBQ2xCO1NBQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQztLQUNwQjtTQUFNLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNyQixPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUM7S0FDcEI7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDO0tBQ3BCO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxhQUFhLElBQUksdUJBQXVCLENBQUMsQ0FBQztLQUMzRTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGUsIFVuaWZvcm1UeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBlbnVtIEN1bU9wVHlwZSB7XG4gIFByb2QgPSAnKicsXG4gIFN1bSA9ICcrJyxcbn1cblxuZXhwb3J0IGNsYXNzIEN1bVByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWyd4J107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIGN1c3RvbVVuaWZvcm1zID0gW3tuYW1lOiAnaW5kZXgnLCB0eXBlOiAnZmxvYXQnIGFzIFVuaWZvcm1UeXBlfV07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwdWJsaWMgb3A6IEN1bU9wVHlwZSwgcHVibGljIG91dHB1dFNoYXBlOiBudW1iZXJbXSwgZXhjbHVzaXZlOiBib29sZWFuLFxuICAgICAgcmV2ZXJzZTogYm9vbGVhbikge1xuICAgIGNvbnN0IHJhbmsgPSB0aGlzLm91dHB1dFNoYXBlLmxlbmd0aDtcbiAgICBjb25zdCBpbml0VmFsID0gdGhpcy5vcCA9PT0gQ3VtT3BUeXBlLlByb2QgPyAnMS4wJyA6ICcwLjAnO1xuICAgIGNvbnN0IHZhbCA9XG4gICAgICAgIGV4Y2x1c2l2ZSA/IGluaXRWYWwgOiBgZ2V0WCgke2dldENvb3JkcyhyYW5rLCAnY29vcmRzJywgdGhpcy5vcCl9KWA7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5vdXRwdXRTaGFwZVt0aGlzLm91dHB1dFNoYXBlLmxlbmd0aCAtIDFdO1xuICAgIGxldCBjb25kaXRpb24gPSAnJztcbiAgICBsZXQgaWR4U3RyaW5nID0gJyc7XG4gICAgLy8gV2hlbiBleGNsdXNpdmUgaXMgc2V0LCB0aGUgY3VtIG9wIGJlY29tZXMgcm9sbCBvcCB0aGF0IGNvcGllcyB0aGVcbiAgICAvLyB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBpbmRleCBiYXNlZCBvbiB0aGUgZGlyZWN0aW9uIHNwZWNpZmllZCBieSB0aGVcbiAgICAvLyByZXZlcnNlIGZsYWcuXG4gICAgaWYgKGV4Y2x1c2l2ZSkge1xuICAgICAgY29uZGl0aW9uID0gcmV2ZXJzZSA/IGBlbmQgIT0gJHtsZW5ndGggLSAxfWAgOiAnZW5kICE9IDAnO1xuICAgICAgaWR4U3RyaW5nID0gcmV2ZXJzZSA/ICdlbmQgKyAxJyA6ICdlbmQgLSAxJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZGl0aW9uID0gcmV2ZXJzZSA/IGBlbmQgKyBwb3cyIDwgJHtsZW5ndGh9YCA6ICdlbmQgPj0gcG93Mic7XG4gICAgICBpZHhTdHJpbmcgPSAocmV2ZXJzZSA/ICdlbmQgKyBwb3cyJyA6ICdlbmQgLSBwb3cyJyk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgJHtnZXRDb29yZHNEYXRhVHlwZShyYW5rKX0gY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBlbmQgPSAke2dldEZpbmFsQ29vcmQocmFuaywgJ2Nvb3JkcycsIHRoaXMub3ApfTtcbiAgICAgICAgZmxvYXQgdmFsID0gJHt2YWx9O1xuICAgICAgICBpbnQgcG93MiA9IGludChwb3coMi4wLCBpbmRleCkpO1xuICAgICAgICBpZiAoJHtjb25kaXRpb259KSB7XG4gICAgICAgICAgaW50IGlkeCA9ICR7aWR4U3RyaW5nfTtcbiAgICAgICAgICAke2dldEZpbmFsQ29vcmQocmFuaywgJ2Nvb3JkcycsIHRoaXMub3ApfSA9IGlkeDtcbiAgICAgICAgICB2YWwgJHt0aGlzLm9wfT0gZ2V0WCgke2dldENvb3JkcyhyYW5rLCAnY29vcmRzJywgdGhpcy5vcCl9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRPdXRwdXQodmFsKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvb3JkcyhyYW5rOiBudW1iZXIsIG5hbWU6IHN0cmluZywgb3A6IEN1bU9wVHlwZSk6IHN0cmluZyB7XG4gIGlmIChyYW5rID09PSAxKSB7XG4gICAgcmV0dXJuIGAke25hbWV9YDtcbiAgfSBlbHNlIGlmIChyYW5rID09PSAyKSB7XG4gICAgcmV0dXJuIGAke25hbWV9LngsICR7bmFtZX0ueWA7XG4gIH0gZWxzZSBpZiAocmFuayA9PT0gMykge1xuICAgIHJldHVybiBgJHtuYW1lfS54LCAke25hbWV9LnksICR7bmFtZX0uemA7XG4gIH0gZWxzZSBpZiAocmFuayA9PT0gNCkge1xuICAgIHJldHVybiBgJHtuYW1lfS54LCAke25hbWV9LnksICR7bmFtZX0ueiwgJHtuYW1lfS53YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEN1bXVsYXRpdmUgJHtvcH0gZm9yIHJhbmsgJHtyYW5rfSBpcyBub3QgeWV0IHN1cHBvcnRlZGApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEZpbmFsQ29vcmQocmFuazogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIG9wOiBDdW1PcFR5cGUpOiBzdHJpbmcge1xuICBpZiAocmFuayA9PT0gMSkge1xuICAgIHJldHVybiBgJHtuYW1lfWA7XG4gIH0gZWxzZSBpZiAocmFuayA9PT0gMikge1xuICAgIHJldHVybiBgJHtuYW1lfS55YDtcbiAgfSBlbHNlIGlmIChyYW5rID09PSAzKSB7XG4gICAgcmV0dXJuIGAke25hbWV9LnpgO1xuICB9IGVsc2UgaWYgKHJhbmsgPT09IDQpIHtcbiAgICByZXR1cm4gYCR7bmFtZX0ud2A7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDdW11bGF0aXZlICR7b3B9IGZvciByYW5rICR7cmFua30gaXMgbm90IHlldCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { CumProgram } from '../cum_gpu';\nimport { identity } from './Identity';\nimport { transpose } from './Transpose';\nexport function cumImpl(op, x, backend, axis, exclusive, reverse) {\n const xRank = x.shape.length;\n const permutation = backend_util.getAxesPermutation([axis], xRank);\n let permutedX = x;\n if (permutation != null) {\n permutedX = transpose({ inputs: { x }, backend, attrs: { perm: permutation } });\n }\n const permutedAxis = backend_util.getInnerMostAxes(1, xRank)[0];\n if (permutedAxis !== xRank - 1) {\n throw new Error(`WebGL cumprod shader expects an inner-most axis=${x.shape.length - 1} ` +\n `but got axis=${axis}`);\n }\n const size = permutedX.shape[permutedAxis];\n let result = identity({ inputs: { x: permutedX }, backend });\n // Use cum parallel algorithm, inspired by:\n // https://developer.nvidia.com/gpugems/gpugems3/part-vi-gpu-computing/chapter-39-parallel-prefix-sum-scan-cuda\n // Note: although the algorithm is called sum, it works for any associtative\n // operator with an identity.\n for (let i = 0; i <= Math.ceil(Math.log2(size)) - 1; i++) {\n const program = new CumProgram(op, permutedX.shape, false, reverse);\n const customValues = [[i]];\n const prevResult = result;\n result =\n backend.runWebGLProgram(program, [result], result.dtype, customValues);\n backend.disposeIntermediateTensorInfo(prevResult);\n }\n // For exclusive cum, shift the end result in the direction of product or sum\n // and add 1 for product or 0 for sum to the front index.\n if (exclusive) {\n const program = new CumProgram(op, permutedX.shape, exclusive, reverse);\n const prevResult = result;\n result = backend.runWebGLProgram(program, [result], result.dtype);\n backend.disposeIntermediateTensorInfo(prevResult);\n }\n if (permutation != null) {\n const reversePermutation = backend_util.getUndoAxesPermutation(permutation);\n const reverseTransposedResult = transpose({ inputs: { x: result }, backend, attrs: { perm: reversePermutation } });\n backend.disposeIntermediateTensorInfo(result);\n backend.disposeIntermediateTensorInfo(permutedX);\n return reverseTransposedResult;\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VtX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvQ3VtX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBRy9ELE9BQU8sRUFBWSxVQUFVLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFakQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxPQUFPLENBQ25CLEVBQWEsRUFBRSxDQUFhLEVBQUUsT0FBeUIsRUFBRSxJQUFZLEVBQ3JFLFNBQWtCLEVBQUUsT0FBZ0I7SUFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDN0IsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtRQUN2QixTQUFTLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUMsRUFBQyxDQUFDLENBQUM7S0FDM0U7SUFDRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhFLElBQUksWUFBWSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FDWCxtREFDSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUc7WUFDekIsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7S0FDN0I7SUFDRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxTQUFTLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQ3pELDJDQUEyQztJQUMzQywrR0FBK0c7SUFDL0csNEVBQTRFO0lBQzVFLDZCQUE2QjtJQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRSxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDMUIsTUFBTTtZQUNGLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRSxPQUFPLENBQUMsNkJBQTZCLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDbkQ7SUFDRCw2RUFBNkU7SUFDN0UseURBQXlEO0lBQ3pELElBQUksU0FBUyxFQUFFO1FBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUMxQixNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ25EO0lBRUQsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sdUJBQXVCLEdBQUcsU0FBUyxDQUNyQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBRXZFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakQsT0FBTyx1QkFBdUIsQ0FBQztLQUNoQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtDdW1PcFR5cGUsIEN1bVByb2dyYW19IGZyb20gJy4uL2N1bV9ncHUnO1xuXG5pbXBvcnQge2lkZW50aXR5fSBmcm9tICcuL0lkZW50aXR5JztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjdW1JbXBsKFxuICAgIG9wOiBDdW1PcFR5cGUsIHg6IFRlbnNvckluZm8sIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF4aXM6IG51bWJlcixcbiAgICBleGNsdXNpdmU6IGJvb2xlYW4sIHJldmVyc2U6IGJvb2xlYW4pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3QgeFJhbmsgPSB4LnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgcGVybXV0YXRpb24gPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKFtheGlzXSwgeFJhbmspO1xuICBsZXQgcGVybXV0ZWRYID0geDtcbiAgaWYgKHBlcm11dGF0aW9uICE9IG51bGwpIHtcbiAgICBwZXJtdXRlZFggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGF0aW9ufX0pO1xuICB9XG4gIGNvbnN0IHBlcm11dGVkQXhpcyA9IGJhY2tlbmRfdXRpbC5nZXRJbm5lck1vc3RBeGVzKDEsIHhSYW5rKVswXTtcblxuICBpZiAocGVybXV0ZWRBeGlzICE9PSB4UmFuayAtIDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBXZWJHTCBjdW1wcm9kIHNoYWRlciBleHBlY3RzIGFuIGlubmVyLW1vc3QgYXhpcz0ke1xuICAgICAgICAgICAgeC5zaGFwZS5sZW5ndGggLSAxfSBgICtcbiAgICAgICAgYGJ1dCBnb3QgYXhpcz0ke2F4aXN9YCk7XG4gIH1cbiAgY29uc3Qgc2l6ZSA9IHBlcm11dGVkWC5zaGFwZVtwZXJtdXRlZEF4aXNdO1xuICBsZXQgcmVzdWx0ID0gaWRlbnRpdHkoe2lucHV0czoge3g6IHBlcm11dGVkWH0sIGJhY2tlbmR9KTtcbiAgLy8gVXNlIGN1bSBwYXJhbGxlbCBhbGdvcml0aG0sIGluc3BpcmVkIGJ5OlxuICAvLyBodHRwczovL2RldmVsb3Blci5udmlkaWEuY29tL2dwdWdlbXMvZ3B1Z2VtczMvcGFydC12aS1ncHUtY29tcHV0aW5nL2NoYXB0ZXItMzktcGFyYWxsZWwtcHJlZml4LXN1bS1zY2FuLWN1ZGFcbiAgLy8gTm90ZTogYWx0aG91Z2ggdGhlIGFsZ29yaXRobSBpcyBjYWxsZWQgc3VtLCBpdCB3b3JrcyBmb3IgYW55IGFzc29jaXRhdGl2ZVxuICAvLyBvcGVyYXRvciB3aXRoIGFuIGlkZW50aXR5LlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IE1hdGguY2VpbChNYXRoLmxvZzIoc2l6ZSkpIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDdW1Qcm9ncmFtKG9wLCBwZXJtdXRlZFguc2hhcGUsIGZhbHNlLCByZXZlcnNlKTtcbiAgICBjb25zdCBjdXN0b21WYWx1ZXMgPSBbW2ldXTtcbiAgICBjb25zdCBwcmV2UmVzdWx0ID0gcmVzdWx0O1xuICAgIHJlc3VsdCA9XG4gICAgICAgIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFtyZXN1bHRdLCByZXN1bHQuZHR5cGUsIGN1c3RvbVZhbHVlcyk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhwcmV2UmVzdWx0KTtcbiAgfVxuICAvLyBGb3IgZXhjbHVzaXZlIGN1bSwgc2hpZnQgdGhlIGVuZCByZXN1bHQgaW4gdGhlIGRpcmVjdGlvbiBvZiBwcm9kdWN0IG9yIHN1bVxuICAvLyBhbmQgYWRkIDEgZm9yIHByb2R1Y3Qgb3IgMCBmb3Igc3VtIHRvIHRoZSBmcm9udCBpbmRleC5cbiAgaWYgKGV4Y2x1c2l2ZSkge1xuICAgIGNvbnN0IHByb2dyYW0gPSBuZXcgQ3VtUHJvZ3JhbShvcCwgcGVybXV0ZWRYLnNoYXBlLCBleGNsdXNpdmUsIHJldmVyc2UpO1xuICAgIGNvbnN0IHByZXZSZXN1bHQgPSByZXN1bHQ7XG4gICAgcmVzdWx0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3Jlc3VsdF0sIHJlc3VsdC5kdHlwZSk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhwcmV2UmVzdWx0KTtcbiAgfVxuXG4gIGlmIChwZXJtdXRhdGlvbiAhPSBudWxsKSB7XG4gICAgY29uc3QgcmV2ZXJzZVBlcm11dGF0aW9uID0gYmFja2VuZF91dGlsLmdldFVuZG9BeGVzUGVybXV0YXRpb24ocGVybXV0YXRpb24pO1xuICAgIGNvbnN0IHJldmVyc2VUcmFuc3Bvc2VkUmVzdWx0ID0gdHJhbnNwb3NlKFxuICAgICAgICB7aW5wdXRzOiB7eDogcmVzdWx0fSwgYmFja2VuZCwgYXR0cnM6IHtwZXJtOiByZXZlcnNlUGVybXV0YXRpb259fSk7XG5cbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlc3VsdCk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhwZXJtdXRlZFgpO1xuXG4gICAgcmV0dXJuIHJldmVyc2VUcmFuc3Bvc2VkUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cumprod } from '@tensorflow/tfjs-core';\nimport { CumOpType } from '../cum_gpu';\nimport { cumImpl } from './Cum_impl';\nexport function cumprod(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, exclusive, reverse } = attrs;\n return cumImpl(CumOpType.Prod, x, backend, axis, exclusive, reverse);\n}\nexport const cumprodConfig = {\n kernelName: Cumprod,\n backendName: 'webgl',\n kernelFunc: cumprod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VtcHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9DdW1wcm9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxPQUFPLEVBQW9FLE1BQU0sdUJBQXVCLENBQUM7QUFHakgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE1BQU0sVUFBVSxPQUFPLENBQUMsSUFJdkI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFekMsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q3VtcHJvZCwgQ3VtcHJvZEF0dHJzLCBDdW1wcm9kSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0N1bU9wVHlwZX0gZnJvbSAnLi4vY3VtX2dwdSc7XG5pbXBvcnQge2N1bUltcGx9IGZyb20gJy4vQ3VtX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3VtcHJvZChhcmdzOiB7XG4gIGlucHV0czogQ3VtcHJvZElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IEN1bXByb2RBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBleGNsdXNpdmUsIHJldmVyc2V9ID0gYXR0cnM7XG5cbiAgcmV0dXJuIGN1bUltcGwoQ3VtT3BUeXBlLlByb2QsIHgsIGJhY2tlbmQsIGF4aXMsIGV4Y2x1c2l2ZSwgcmV2ZXJzZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjdW1wcm9kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEN1bXByb2QsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBjdW1wcm9kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cumsum } from '@tensorflow/tfjs-core';\nimport { CumOpType } from '../cum_gpu';\nimport { cumImpl } from './Cum_impl';\nexport function cumsum(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, exclusive, reverse } = attrs;\n return cumImpl(CumOpType.Sum, x, backend, axis, exclusive, reverse);\n}\nexport const cumsumConfig = {\n kernelName: Cumsum,\n backendName: 'webgl',\n kernelFunc: cumsum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3Vtc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0N1bXN1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFrRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVuQyxNQUFNLFVBQVUsTUFBTSxDQUNsQixJQUN5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDekMsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBaUI7SUFDeEMsVUFBVSxFQUFFLE1BQU07SUFDbEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLE1BQStCO0NBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q3Vtc3VtLCBDdW1zdW1BdHRycywgQ3Vtc3VtSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0N1bU9wVHlwZX0gZnJvbSAnLi4vY3VtX2dwdSc7XG5pbXBvcnQge2N1bUltcGx9IGZyb20gJy4vQ3VtX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3Vtc3VtKFxuICAgIGFyZ3M6XG4gICAgICAgIHtpbnB1dHM6IEN1bXN1bUlucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCwgYXR0cnM6IEN1bXN1bUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2F4aXMsIGV4Y2x1c2l2ZSwgcmV2ZXJzZX0gPSBhdHRycztcbiAgcmV0dXJuIGN1bUltcGwoQ3VtT3BUeXBlLlN1bSwgeCwgYmFja2VuZCwgYXhpcywgZXhjbHVzaXZlLCByZXZlcnNlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGN1bXN1bUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDdW1zdW0sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBjdW1zdW0gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { DenseBincount } from '@tensorflow/tfjs-core';\nimport { bincountImplCPU, bincountReduceImplCPU } from '../kernel_utils/shared';\nexport function denseBincount(args) {\n const { inputs, backend, attrs } = args;\n const { x, weights } = inputs;\n const { size, binaryOutput } = attrs;\n if (x.shape.length === 1) {\n const xVals = backend.readSync(x.dataId);\n const weightsVals = backend.readSync(weights.dataId);\n const outVals = bincountImplCPU(xVals, weightsVals, weights.dtype, weights.shape, size);\n return backend.makeTensorInfo([size], weights.dtype, outVals);\n }\n else if (x.shape.length === 2) {\n const xBuf = backend.bufferSync(x);\n const weightsBuf = backend.bufferSync(weights);\n const outBuf = bincountReduceImplCPU(xBuf, weightsBuf, size, binaryOutput);\n return backend.makeTensorInfo(outBuf.shape, weights.dtype, outBuf.values);\n }\n throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank` +\n `${x.shape.length}.`);\n}\nexport const denseBincountConfig = {\n kernelName: DenseBincount,\n backendName: 'webgl',\n kernelFunc: denseBincount\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVuc2VCaW5jb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9EZW5zZUJpbmNvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxhQUFhLEVBQWtHLE1BQU0sdUJBQXVCLENBQUM7QUFHckosT0FBTyxFQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTlFLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFJN0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFbkMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFlLENBQUM7UUFDdkQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFlLENBQUM7UUFFbkUsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTVFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDL0Q7U0FBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFrQixDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFrQixPQUFPLENBQUMsQ0FBQztRQUVoRSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUUzRSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzRTtJQUVELE1BQU0sSUFBSSxLQUFLLENBQ1gsb0VBQW9FO1FBQ3BFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUI7SUFDL0MsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLGFBQXNDO0NBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGVuc2VCaW5jb3VudCwgRGVuc2VCaW5jb3VudEF0dHJzLCBEZW5zZUJpbmNvdW50SW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJhbmssIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge2JpbmNvdW50SW1wbENQVSwgYmluY291bnRSZWR1Y2VJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlbnNlQmluY291bnQoYXJnczoge1xuICBpbnB1dHM6IERlbnNlQmluY291bnRJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBEZW5zZUJpbmNvdW50QXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIHdlaWdodHN9ID0gaW5wdXRzO1xuICBjb25zdCB7c2l6ZSwgYmluYXJ5T3V0cHV0fSA9IGF0dHJzO1xuXG4gIGlmICh4LnNoYXBlLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IHhWYWxzID0gYmFja2VuZC5yZWFkU3luYyh4LmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCB3ZWlnaHRzVmFscyA9IGJhY2tlbmQucmVhZFN5bmMod2VpZ2h0cy5kYXRhSWQpIGFzIFR5cGVkQXJyYXk7XG5cbiAgICBjb25zdCBvdXRWYWxzID1cbiAgICAgICAgYmluY291bnRJbXBsQ1BVKHhWYWxzLCB3ZWlnaHRzVmFscywgd2VpZ2h0cy5kdHlwZSwgd2VpZ2h0cy5zaGFwZSwgc2l6ZSk7XG5cbiAgICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbc2l6ZV0sIHdlaWdodHMuZHR5cGUsIG91dFZhbHMpO1xuICB9IGVsc2UgaWYgKHguc2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgeEJ1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYzxSYW5rLCAnZmxvYXQzMic+KHgpO1xuICAgIGNvbnN0IHdlaWdodHNCdWYgPSBiYWNrZW5kLmJ1ZmZlclN5bmM8UmFuaywgJ2Zsb2F0MzInPih3ZWlnaHRzKTtcblxuICAgIGNvbnN0IG91dEJ1ZiA9IGJpbmNvdW50UmVkdWNlSW1wbENQVSh4QnVmLCB3ZWlnaHRzQnVmLCBzaXplLCBiaW5hcnlPdXRwdXQpO1xuXG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0QnVmLnNoYXBlLCB3ZWlnaHRzLmR0eXBlLCBvdXRCdWYudmFsdWVzKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFcnJvciBpbiBkZW5zZUJpbmNvdW50OiBpbnB1dCBtdXN0IGJlIGF0IG1vc3QgcmFuayAyLCBidXQgZ290IHJhbmtgICtcbiAgICAgIGAke3guc2hhcGUubGVuZ3RofS5gKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlbnNlQmluY291bnRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRGVuc2VCaW5jb3VudCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGRlbnNlQmluY291bnQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class DepthToSpaceProgram {\n constructor(outputShape, blockSize, dataFormat) {\n this.variableNames = ['x'];\n this.outputShape = [];\n this.outputShape = outputShape;\n this.blockSize = blockSize;\n this.dataFormat = dataFormat;\n 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 `;\n }\n getHeightCoordString() {\n if (this.dataFormat === 'NHWC') {\n return `coords[1]`;\n }\n else {\n return `coords[2]`;\n }\n }\n getWidthCoordString() {\n if (this.dataFormat === 'NHWC') {\n return `coords[2]`;\n }\n else {\n return `coords[3]`;\n }\n }\n getDepthCoordString() {\n if (this.dataFormat === 'NHWC') {\n return `coords[3]`;\n }\n else {\n return `coords[1]`;\n }\n }\n getOutputDepthSize() {\n if (this.dataFormat === 'NHWC') {\n return this.outputShape[3];\n }\n else {\n return this.outputShape[1];\n }\n }\n getInputSamplingString() {\n if (this.dataFormat === 'NHWC') {\n return `getX(b, in_h, in_w, in_d)`;\n }\n else {\n return `getX(b, in_d, in_h, in_w)`;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGhfdG9fc3BhY2VfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9kZXB0aF90b19zcGFjZV9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQU85QixZQUNJLFdBQXFCLEVBQUUsU0FBaUIsRUFBRSxVQUF5QjtRQVB2RSxrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFPekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRzs7OztnQkFJSixJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFOzt1QkFFbkIsU0FBUzsrQkFDRCxTQUFTO3VCQUNqQixTQUFTOytCQUNELFNBQVM7bUNBQ0wsU0FBUztVQUNsQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Ozt1QkFHWixJQUFJLENBQUMsc0JBQXNCLEVBQUU7OztHQUdqRCxDQUFDO0lBQ0YsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTSxFQUFFO1lBQzlCLE9BQU8sV0FBVyxDQUFDO1NBQ3BCO2FBQU07WUFDTCxPQUFPLFdBQVcsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUM5QixPQUFPLFdBQVcsQ0FBQztTQUNwQjthQUFNO1lBQ0wsT0FBTyxXQUFXLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxNQUFNLEVBQUU7WUFDOUIsT0FBTyxXQUFXLENBQUM7U0FDcEI7YUFBTTtZQUNMLE9BQU8sV0FBVyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTSxFQUFFO1lBQzlCLE9BQU8sMkJBQTJCLENBQUM7U0FDcEM7YUFBTTtZQUNMLE9BQU8sMkJBQTJCLENBQUM7U0FDcEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgRGVwdGhUb1NwYWNlUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xuICBkYXRhRm9ybWF0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBvdXRwdXRTaGFwZTogbnVtYmVyW10sIGJsb2NrU2l6ZTogbnVtYmVyLCBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlO1xuICAgIHRoaXMuYmxvY2tTaXplID0gYmxvY2tTaXplO1xuICAgIHRoaXMuZGF0YUZvcm1hdCA9IGRhdGFGb3JtYXQ7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICB2b2lkIG1haW4oKSB7XG4gICAgICBpdmVjNCBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgIGludCBiID0gY29vcmRzWzBdO1xuICAgICAgaW50IGggPSAke3RoaXMuZ2V0SGVpZ2h0Q29vcmRTdHJpbmcoKX07XG4gICAgICBpbnQgdyA9ICR7dGhpcy5nZXRXaWR0aENvb3JkU3RyaW5nKCl9O1xuICAgICAgaW50IGQgPSAke3RoaXMuZ2V0RGVwdGhDb29yZFN0cmluZygpfTtcblxuICAgICAgaW50IGluX2ggPSBoIC8gJHtibG9ja1NpemV9O1xuICAgICAgaW50IG9mZnNldF9oID0gaW1vZChoLCAke2Jsb2NrU2l6ZX0pO1xuICAgICAgaW50IGluX3cgPSB3IC8gJHtibG9ja1NpemV9O1xuICAgICAgaW50IG9mZnNldF93ID0gaW1vZCh3LCAke2Jsb2NrU2l6ZX0pO1xuICAgICAgaW50IG9mZnNldF9kID0gKG9mZnNldF9oICogJHtibG9ja1NpemV9ICsgb2Zmc2V0X3cpICpcbiAgICAgICAgJHt0aGlzLmdldE91dHB1dERlcHRoU2l6ZSgpfTtcbiAgICAgIGludCBpbl9kID0gZCArIG9mZnNldF9kO1xuXG4gICAgICBmbG9hdCByZXN1bHQgPSAke3RoaXMuZ2V0SW5wdXRTYW1wbGluZ1N0cmluZygpfTtcbiAgICAgIHNldE91dHB1dChyZXN1bHQpO1xuICAgIH1cbiAgYDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SGVpZ2h0Q29vcmRTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kYXRhRm9ybWF0ID09PSAnTkhXQycpIHtcbiAgICAgIHJldHVybiBgY29vcmRzWzFdYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBjb29yZHNbMl1gO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0V2lkdGhDb29yZFN0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRhdGFGb3JtYXQgPT09ICdOSFdDJykge1xuICAgICAgcmV0dXJuIGBjb29yZHNbMl1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYGNvb3Jkc1szXWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXB0aENvb3JkU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZGF0YUZvcm1hdCA9PT0gJ05IV0MnKSB7XG4gICAgICByZXR1cm4gYGNvb3Jkc1szXWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgY29vcmRzWzFdYDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE91dHB1dERlcHRoU2l6ZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmRhdGFGb3JtYXQgPT09ICdOSFdDJykge1xuICAgICAgcmV0dXJuIHRoaXMub3V0cHV0U2hhcGVbM107XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm91dHB1dFNoYXBlWzFdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5wdXRTYW1wbGluZ1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRhdGFGb3JtYXQgPT09ICdOSFdDJykge1xuICAgICAgcmV0dXJuIGBnZXRYKGIsIGluX2gsIGluX3csIGluX2QpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBnZXRYKGIsIGluX2QsIGluX2gsIGluX3cpYDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { DepthToSpace } from '@tensorflow/tfjs-core';\nimport { DepthToSpaceProgram } from '../depth_to_space_gpu';\nexport function depthToSpace(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { blockSize, dataFormat } = attrs;\n const batchSize = x.shape[0];\n const inputHeight = (dataFormat === 'NHWC') ? x.shape[1] : x.shape[2];\n const inputWidth = (dataFormat === 'NHWC') ? x.shape[2] : x.shape[3];\n const inputDepth = (dataFormat === 'NHWC') ? x.shape[3] : x.shape[1];\n const outputHeight = inputHeight * blockSize;\n const outputWidth = inputWidth * blockSize;\n const outputDepth = inputDepth / (blockSize * blockSize);\n const outputShape = (dataFormat === 'NHWC') ?\n [batchSize, outputHeight, outputWidth, outputDepth] :\n [batchSize, outputDepth, outputHeight, outputWidth];\n const program = new DepthToSpaceProgram(outputShape, blockSize, dataFormat);\n return backend.runWebGLProgram(program, [x], x.dtype);\n}\nexport const depthToSpaceConfig = {\n kernelName: DepthToSpace,\n backendName: 'webgl',\n kernelFunc: depthToSpace\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGhUb1NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0RlcHRoVG9TcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE4RSxNQUFNLHVCQUF1QixDQUFDO0FBR2hJLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFJNUI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0QyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJFLE1BQU0sWUFBWSxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDN0MsTUFBTSxXQUFXLEdBQUcsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxVQUFVLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFekQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUV4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUUsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWlCO0lBQzlDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxZQUFxQztDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RlcHRoVG9TcGFjZSwgRGVwdGhUb1NwYWNlQXR0cnMsIERlcHRoVG9TcGFjZUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtEZXB0aFRvU3BhY2VQcm9ncmFtfSBmcm9tICcuLi9kZXB0aF90b19zcGFjZV9ncHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVwdGhUb1NwYWNlKGFyZ3M6IHtcbiAgaW5wdXRzOiBEZXB0aFRvU3BhY2VJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBEZXB0aFRvU3BhY2VBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtibG9ja1NpemUsIGRhdGFGb3JtYXR9ID0gYXR0cnM7XG5cbiAgY29uc3QgYmF0Y2hTaXplID0geC5zaGFwZVswXTtcbiAgY29uc3QgaW5wdXRIZWlnaHQgPSAoZGF0YUZvcm1hdCA9PT0gJ05IV0MnKSA/IHguc2hhcGVbMV0gOiB4LnNoYXBlWzJdO1xuICBjb25zdCBpbnB1dFdpZHRoID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgPyB4LnNoYXBlWzJdIDogeC5zaGFwZVszXTtcbiAgY29uc3QgaW5wdXREZXB0aCA9IChkYXRhRm9ybWF0ID09PSAnTkhXQycpID8geC5zaGFwZVszXSA6IHguc2hhcGVbMV07XG5cbiAgY29uc3Qgb3V0cHV0SGVpZ2h0ID0gaW5wdXRIZWlnaHQgKiBibG9ja1NpemU7XG4gIGNvbnN0IG91dHB1dFdpZHRoID0gaW5wdXRXaWR0aCAqIGJsb2NrU2l6ZTtcbiAgY29uc3Qgb3V0cHV0RGVwdGggPSBpbnB1dERlcHRoIC8gKGJsb2NrU2l6ZSAqIGJsb2NrU2l6ZSk7XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSAoZGF0YUZvcm1hdCA9PT0gJ05IV0MnKSA/XG4gICAgICBbYmF0Y2hTaXplLCBvdXRwdXRIZWlnaHQsIG91dHB1dFdpZHRoLCBvdXRwdXREZXB0aF0gOlxuICAgICAgW2JhdGNoU2l6ZSwgb3V0cHV0RGVwdGgsIG91dHB1dEhlaWdodCwgb3V0cHV0V2lkdGhdO1xuXG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgRGVwdGhUb1NwYWNlUHJvZ3JhbShvdXRwdXRTaGFwZSwgYmxvY2tTaXplLCBkYXRhRm9ybWF0KTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFt4XSwgeC5kdHlwZSk7XG59XG5cbmV4cG9ydCBjb25zdCBkZXB0aFRvU3BhY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRGVwdGhUb1NwYWNlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogZGVwdGhUb1NwYWNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { useShapeUniforms } from './gpgpu_math';\nexport class DepthwiseConv2DProgram {\n constructor(convInfo, addBias = false, activation = null, hasPreluActivation = false, hasLeakyReluAlpha = false) {\n this.variableNames = ['x', 'W'];\n this.customUniforms = [\n { name: 'pads', type: 'ivec2' },\n { name: 'strides', type: 'ivec2' },\n { name: 'dilations', type: 'ivec2' },\n { name: 'inDims', type: 'ivec2' },\n ];\n this.outputShape = convInfo.outShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const channelMul = convInfo.outChannels / convInfo.inChannels;\n let activationSnippet = '', applyActivationSnippet = '';\n if (activation) {\n if (hasPreluActivation) {\n activationSnippet = `float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${activation}\n }`;\n }\n else if (hasLeakyReluAlpha) {\n activationSnippet = `float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${activation}\n }`;\n }\n else {\n activationSnippet = `\n float activation(float x) {\n ${activation}\n }\n `;\n }\n applyActivationSnippet = `result = activation(result);`;\n }\n const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n if (addBias) {\n this.variableNames.push('bias');\n }\n if (hasPreluActivation) {\n this.variableNames.push('preluActivationWeights');\n }\n if (hasLeakyReluAlpha) {\n this.variableNames.push('leakyreluAlpha');\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl9ncHVfZGVwdGh3aXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9jb252X2dwdV9kZXB0aHdpc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFlLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTVELE1BQU0sT0FBTyxzQkFBc0I7SUFZakMsWUFDSSxRQUFpQyxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQ2xELGFBQXFCLElBQUksRUFBRSxrQkFBa0IsR0FBRyxLQUFLLEVBQ3JELGlCQUFpQixHQUFHLEtBQUs7UUFkN0Isa0JBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUkzQixtQkFBYyxHQUFHO1lBQ2YsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO1lBQ3ZDLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRTtZQUMxQyxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUU7WUFDNUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO1NBQzFDLENBQUM7UUFNQSxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUU5RCxJQUFJLGlCQUFpQixHQUFHLEVBQUUsRUFBRSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDeEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLGtCQUFrQixFQUFFO2dCQUN0QixpQkFBaUIsR0FBRzs7WUFFaEIsVUFBVTtVQUNaLENBQUM7YUFDSjtpQkFBTSxJQUFJLGlCQUFpQixFQUFFO2dCQUM1QixpQkFBaUIsR0FBRzs7WUFFaEIsVUFBVTtVQUNaLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxpQkFBaUIsR0FBRzs7Y0FFZCxVQUFVOztTQUVmLENBQUM7YUFDSDtZQUVELHNCQUFzQixHQUFHLDhCQUE4QixDQUFDO1NBQ3pEO1FBRUQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hFLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakM7UUFFRCxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO1FBQ1osaUJBQWlCOzs7Ozs7O3dCQU9ELFVBQVU7NEJBQ04sVUFBVTs7Ozs7Ozs7O2dDQVNOLFlBQVk7Ozs7Ozs7a0NBT1YsV0FBVzs7Ozs7Ozs7Ozs7Ozs7VUFjbkMsY0FBYztVQUNkLHNCQUFzQjs7O0tBRzNCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtHUEdQVVByb2dyYW0sIHVzZVNoYXBlVW5pZm9ybXN9IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBEZXB0aHdpc2VDb252MkRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCcsICdXJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgZW5hYmxlU2hhcGVVbmlmb3JtczogYm9vbGVhbjtcbiAgY3VzdG9tVW5pZm9ybXMgPSBbXG4gICAge25hbWU6ICdwYWRzJywgdHlwZTogJ2l2ZWMyJyBhcyBjb25zdCB9LFxuICAgIHtuYW1lOiAnc3RyaWRlcycsIHR5cGU6ICdpdmVjMicgYXMgY29uc3QgfSxcbiAgICB7bmFtZTogJ2RpbGF0aW9ucycsIHR5cGU6ICdpdmVjMicgYXMgY29uc3QgfSxcbiAgICB7bmFtZTogJ2luRGltcycsIHR5cGU6ICdpdmVjMicgYXMgY29uc3QgfSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjJESW5mbywgYWRkQmlhcyA9IGZhbHNlLFxuICAgICAgYWN0aXZhdGlvbjogc3RyaW5nID0gbnVsbCwgaGFzUHJlbHVBY3RpdmF0aW9uID0gZmFsc2UsXG4gICAgICBoYXNMZWFreVJlbHVBbHBoYSA9IGZhbHNlKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGNvbnZJbmZvLm91dFNoYXBlO1xuICAgIHRoaXMuZW5hYmxlU2hhcGVVbmlmb3JtcyA9IHVzZVNoYXBlVW5pZm9ybXModGhpcy5vdXRwdXRTaGFwZS5sZW5ndGgpO1xuXG4gICAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICAgIGNvbnN0IGZpbHRlcldpZHRoID0gY29udkluZm8uZmlsdGVyV2lkdGg7XG4gICAgY29uc3QgY2hhbm5lbE11bCA9IGNvbnZJbmZvLm91dENoYW5uZWxzIC8gY29udkluZm8uaW5DaGFubmVscztcblxuICAgIGxldCBhY3RpdmF0aW9uU25pcHBldCA9ICcnLCBhcHBseUFjdGl2YXRpb25TbmlwcGV0ID0gJyc7XG4gICAgaWYgKGFjdGl2YXRpb24pIHtcbiAgICAgIGlmIChoYXNQcmVsdUFjdGl2YXRpb24pIHtcbiAgICAgICAgYWN0aXZhdGlvblNuaXBwZXQgPSBgZmxvYXQgYWN0aXZhdGlvbihmbG9hdCBhKSB7XG4gICAgICAgICAgZmxvYXQgYiA9IGdldFByZWx1QWN0aXZhdGlvbldlaWdodHNBdE91dENvb3JkcygpO1xuICAgICAgICAgICR7YWN0aXZhdGlvbn1cbiAgICAgICAgfWA7XG4gICAgICB9IGVsc2UgaWYgKGhhc0xlYWt5UmVsdUFscGhhKSB7XG4gICAgICAgIGFjdGl2YXRpb25TbmlwcGV0ID0gYGZsb2F0IGFjdGl2YXRpb24oZmxvYXQgYSkge1xuICAgICAgICAgIGZsb2F0IGIgPSBnZXRMZWFreXJlbHVBbHBoYUF0T3V0Q29vcmRzKCk7XG4gICAgICAgICAgJHthY3RpdmF0aW9ufVxuICAgICAgICB9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2YXRpb25TbmlwcGV0ID0gYFxuICAgICAgICAgIGZsb2F0IGFjdGl2YXRpb24oZmxvYXQgeCkge1xuICAgICAgICAgICAgJHthY3RpdmF0aW9ufVxuICAgICAgICAgIH1cbiAgICAgICAgYDtcbiAgICAgIH1cblxuICAgICAgYXBwbHlBY3RpdmF0aW9uU25pcHBldCA9IGByZXN1bHQgPSBhY3RpdmF0aW9uKHJlc3VsdCk7YDtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRCaWFzU25pcHBldCA9IGFkZEJpYXMgPyAncmVzdWx0ICs9IGdldEJpYXNBdE91dENvb3JkcygpOycgOiAnJztcbiAgICBpZiAoYWRkQmlhcykge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ2JpYXMnKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzUHJlbHVBY3RpdmF0aW9uKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZXMucHVzaCgncHJlbHVBY3RpdmF0aW9uV2VpZ2h0cycpO1xuICAgIH1cbiAgICBpZiAoaGFzTGVha3lSZWx1QWxwaGEpIHtcbiAgICAgIHRoaXMudmFyaWFibGVOYW1lcy5wdXNoKCdsZWFreXJlbHVBbHBoYScpO1xuICAgIH1cblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAke2FjdGl2YXRpb25TbmlwcGV0fVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHMueDtcbiAgICAgICAgaXZlYzIgeFJDQ29ybmVyID0gY29vcmRzLnl6ICogc3RyaWRlcyAtIHBhZHM7XG4gICAgICAgIGludCBkMiA9IGNvb3Jkcy53O1xuICAgICAgICBpbnQgZDEgPSBkMiAvICR7Y2hhbm5lbE11bH07XG4gICAgICAgIGludCBxID0gZDIgLSBkMSAqICR7Y2hhbm5lbE11bH07XG5cbiAgICAgICAgaW50IHhSQ29ybmVyID0geFJDQ29ybmVyLng7XG4gICAgICAgIGludCB4Q0Nvcm5lciA9IHhSQ0Nvcm5lci55O1xuXG4gICAgICAgIC8vIENvbnZvbHZlIHgoPywgPywgZDEpIHdpdGggdyg6LCA6LCBkMSwgcSkgdG8gZ2V0IHkoeVIsIHlDLCBkMikuXG4gICAgICAgIC8vID8gPSB0byBiZSBkZXRlcm1pbmVkLiA6ID0gYWNyb3NzIGFsbCB2YWx1ZXMgaW4gdGhhdCBheGlzLlxuICAgICAgICBmbG9hdCBkb3RQcm9kID0gMC4wO1xuICAgICAgICAvLyBUTyBETyhkc21pbGtvdik6IEZsYXR0ZW4gdGhlIHR3byBmb3IgbG9vcHMgYW5kIHZlYzQgdGhlIG9wZXJhdGlvbnMuXG4gICAgICAgIGZvciAoaW50IHdSID0gMDsgd1IgPCAke2ZpbHRlckhlaWdodH07IHdSKyspIHtcbiAgICAgICAgICBpbnQgeFIgPSB4UkNvcm5lciArIHdSICogZGlsYXRpb25zWzBdO1xuXG4gICAgICAgICAgaWYgKHhSIDwgMCB8fCB4UiA+PSBpbkRpbXNbMF0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoaW50IHdDID0gMDsgd0MgPCAke2ZpbHRlcldpZHRofTsgd0MrKykge1xuICAgICAgICAgICAgaW50IHhDID0geENDb3JuZXIgKyB3QyAqIGRpbGF0aW9uc1sxXTtcblxuICAgICAgICAgICAgaWYgKHhDIDwgMCB8fCB4QyA+PSBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsb2F0IHhWYWwgPSBnZXRYKGJhdGNoLCB4UiwgeEMsIGQxKTtcbiAgICAgICAgICAgIGZsb2F0IHdWYWwgPSBnZXRXKHdSLCB3QywgZDEsIHEpO1xuICAgICAgICAgICAgZG90UHJvZCArPSB4VmFsICogd1ZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmbG9hdCByZXN1bHQgPSBkb3RQcm9kO1xuICAgICAgICAke2FkZEJpYXNTbmlwcGV0fVxuICAgICAgICAke2FwcGx5QWN0aXZhdGlvblNuaXBwZXR9XG4gICAgICAgIHNldE91dHB1dChyZXN1bHQpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { useShapeUniforms } from './gpgpu_math';\nexport class DepthwiseConvPacked2DProgram {\n constructor(convInfo, addBias = false, activation = null, hasPreluActivation = false, hasLeakyReluAlpha = false) {\n this.variableNames = ['x', 'W'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.customUniforms = [\n { name: 'pads', type: 'ivec2' },\n { name: 'strides', type: 'ivec2' },\n { name: 'dilations', type: 'ivec2' },\n { name: 'inDims', type: 'ivec2' },\n ];\n this.outputShape = convInfo.outShape;\n this.enableShapeUniforms = useShapeUniforms(this.outputShape.length);\n const channelMul = convInfo.outChannels / convInfo.inChannels;\n const padLeft = convInfo.padInfo.left;\n const strideWidth = convInfo.strideWidth;\n const dilationWidth = convInfo.dilationWidth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const texelsAcross = filterWidth;\n let mainLoop = `\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;\n for (let c = 0; c < filterWidth; c++) {\n 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};`;\n }\n /**\n * This vectorized implementation works by gathering the values needed for\n * each output channel's dot product into vec4's and then multiplying them\n * all together (this happens in the final double for-loop below). Most of\n * the main loop consists of constructing these vec4's with the minimum\n * number of texture2D calls, which means making use of all four returned\n * values from a texture2D call at once.\n */\n mainLoop += `\n for (int r = 0; r < ${filterHeight}; r++) {\n `;\n for (let c = 0; c < filterWidth; c++) {\n 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);`;\n }\n mainLoop += `\n xR = xRCorner + r * dilations[0];\n if (xR >=0 && xR < inDims[0]) {\n `;\n for (let texelC = 0; texelC < (texelsAcross + 1) / 2; texelC++) {\n const colIndex = texelC * 2;\n mainLoop += `\n xC = xCCorner + ${colIndex * dilationWidth};\n `;\n if (strideWidth === 1) {\n if (colIndex < filterWidth) {\n // If padding is odd, the outer texels have to be composed.\n if (padLeft % 2 === 1) {\n // TODO: Ensure vec4 previous does not result in redundant sample,\n // and avoid setting xTexelRC's that exceed the boundary in the\n // first place rather than resetting them to vec4(0)).\n // To compute xCOffset:\n // - If padding is odd, we must add 1 to ensure we ask for an\n // even-numbered row.\n // - We subtract 2 to access the previous texel.\n 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 `;\n // This texel has been read in previous iteration if the dilation\n // is 1.\n if (dilationWidth === 1 && colIndex > 0) {\n mainLoop += `\n xC${colIndex} = vec4(xTexelC${colIndex - 2}.zw, xTexelC${colIndex}.xy);\n `;\n }\n else {\n 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 `;\n }\n }\n else {\n // Padding is even, so xRC corresponds to a single texel.\n 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 `;\n }\n if (colIndex + 1 < filterWidth) {\n // If dilation is even, the second entry should match the first\n // (either both are composed or both are single samples). But if\n // dilation is odd, then the second entry should be the opposite\n // of the first (if the first is composed, the second is a single\n // sample, and vice versa.)\n const nextTexelOffset = padLeft % 2 === 0 ?\n util.nearestLargerEven(dilationWidth) :\n dilationWidth;\n if ((dilationWidth % 2 === 0 && padLeft % 2 === 1) ||\n (dilationWidth % 2 !== 0 && padLeft % 2 !== 1)) {\n 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 `;\n // If dilation > 1 then the xRC's will not be able to share any\n // values, so each xRC will require two unique calls to getX.\n if (dilationWidth > 1) {\n mainLoop += `\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${colIndex + 1} = vec4(previous.zw, xTexelC${colIndex + 1}.xy);\n } else {\n xC${colIndex + 1} = vec4(0.0, 0.0, xTexelC${colIndex + 1}.xy);\n }\n `;\n }\n else {\n mainLoop += `\n xC${colIndex + 1} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.xy);\n `;\n }\n }\n else {\n // If dilation is 1 and padding is odd, we have already read the\n // texel when constructing the previous x value. Here we can\n // simply skip the texture read.\n if (nextTexelOffset === 1) {\n mainLoop += `\n xC${colIndex + 1} = xTexelC${colIndex};\n `;\n }\n else {\n 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 `;\n }\n }\n }\n }\n }\n else { // stride === 2\n if (colIndex < filterWidth) {\n // Depending on whether padLeft is even or odd, we want either the\n // xy or zw channels from X texels for xC${colIndex}. If padLeft is\n // even, xC${colIndex +1} is simply the zw channels of texels we've\n // already sampled. But if padLeft is odd, xC{$c + 1}.zw will\n // need to come from the xy channels of a new texel, hence the `\n // vec4\n // final` initialized below.\n if (padLeft % 2 === 1) {\n 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 `;\n if (colIndex + 1 < filterWidth) {\n 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 `;\n }\n }\n else {\n 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 `;\n if (colIndex + 1 < filterWidth) {\n mainLoop += `\n xC${colIndex + 1} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.zw);\n `;\n }\n }\n }\n }\n // localize the dotProd accumulation within the loop, the theory is for\n // GPU with limited cache, accumulate sum across large amount of\n // veriables will cause lots of cache misses. (i.e. 5x5 filter will have\n // 50 variables)\n if (colIndex < filterWidth) {\n mainLoop += `\n wTexel = getW(r, ${colIndex}, d1, q);\n dotProd += xC${colIndex} * vec4(wTexel.xz, wTexel.xz);\n `;\n if (colIndex + 1 < filterWidth) {\n mainLoop += `\n wTexel = getW(r, ${colIndex + 1}, d1, q);\n dotProd += xC${colIndex + 1} * vec4(wTexel.xz, wTexel.xz);\n `;\n }\n }\n }\n mainLoop += `\n }\n `;\n mainLoop += `\n }\n `;\n let activationSnippet = '', applyActivationSnippet = '';\n if (activation) {\n if (hasPreluActivation) {\n activationSnippet = `vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n ${activation}\n }`;\n }\n else if (hasLeakyReluAlpha) {\n activationSnippet = `vec4 activation(vec4 a) {\n vec4 b = getLeakyreluAlphaAtOutCoords();\n ${activation}\n }`;\n }\n else {\n activationSnippet = `vec4 activation(vec4 x) {\n ${activation}\n }`;\n }\n applyActivationSnippet = `result = activation(result);`;\n }\n const addBiasSnippet = addBias ? 'result += getBiasAtOutCoords();' : '';\n if (addBias) {\n this.variableNames.push('bias');\n }\n if (hasPreluActivation) {\n this.variableNames.push('preluActivationWeights');\n }\n if (hasLeakyReluAlpha) {\n this.variableNames.push('leakyreluAlpha');\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl9wYWNrZWRfZ3B1X2RlcHRod2lzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvY29udl9wYWNrZWRfZ3B1X2RlcHRod2lzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFlLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTVELE1BQU0sT0FBTyw0QkFBNEI7SUFjdkMsWUFDSSxRQUFpQyxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQ2xELGFBQXFCLElBQUksRUFBRSxrQkFBa0IsR0FBRyxLQUFLLEVBQ3JELGlCQUFpQixHQUFHLEtBQUs7UUFoQjdCLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0IsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFJcEIsbUJBQWMsR0FBRztZQUNmLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRTtZQUN2QyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUU7WUFDMUMsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO1lBQzVDLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRTtTQUMxQyxDQUFDO1FBTUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEdBQUcs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QixFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO1FBQ1osaUJBQWlCOzs7Ozs7O3dCQU9ELFVBQVU7NEJBQ04sVUFBVTs7Ozs7OztVQU81QixRQUFROzs7VUFHUixjQUFjO1VBQ2Qsc0JBQXNCOzs7S0FHM0IsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtLCB1c2VTaGFwZVVuaWZvcm1zfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgRGVwdGh3aXNlQ29udlBhY2tlZDJEUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnLCAnVyddO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIGVuYWJsZVNoYXBlVW5pZm9ybXM6IGJvb2xlYW47XG4gIGN1c3RvbVVuaWZvcm1zID0gW1xuICAgIHtuYW1lOiAncGFkcycsIHR5cGU6ICdpdmVjMicgYXMgY29uc3QgfSxcbiAgICB7bmFtZTogJ3N0cmlkZXMnLCB0eXBlOiAnaXZlYzInIGFzIGNvbnN0IH0sXG4gICAge25hbWU6ICdkaWxhdGlvbnMnLCB0eXBlOiAnaXZlYzInIGFzIGNvbnN0IH0sXG4gICAge25hbWU6ICdpbkRpbXMnLCB0eXBlOiAnaXZlYzInIGFzIGNvbnN0IH0sXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBjb252SW5mbzogYmFja2VuZF91dGlsLkNvbnYyREluZm8sIGFkZEJpYXMgPSBmYWxzZSxcbiAgICAgIGFjdGl2YXRpb246IHN0cmluZyA9IG51bGwsIGhhc1ByZWx1QWN0aXZhdGlvbiA9IGZhbHNlLFxuICAgICAgaGFzTGVha3lSZWx1QWxwaGEgPSBmYWxzZSkge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5vdXRTaGFwZTtcbiAgICB0aGlzLmVuYWJsZVNoYXBlVW5pZm9ybXMgPSB1c2VTaGFwZVVuaWZvcm1zKHRoaXMub3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICBjb25zdCBjaGFubmVsTXVsID0gY29udkluZm8ub3V0Q2hhbm5lbHMgLyBjb252SW5mby5pbkNoYW5uZWxzO1xuICAgIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gICAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgICBjb25zdCBmaWx0ZXJIZWlnaHQgPSBjb252SW5mby5maWx0ZXJIZWlnaHQ7XG4gICAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcbiAgICBjb25zdCB0ZXhlbHNBY3Jvc3MgPSBmaWx0ZXJXaWR0aDtcblxuICAgIGxldCBtYWluTG9vcCA9IGBcbiAgICAgIGludCB4UjsgaW50IHhDOyBpbnQgeENPZmZzZXQ7XG4gICAgICB2ZWM0IHdUZXhlbDsgdmVjNCBwcmV2aW91czsgdmVjNCBmaW5hbDtgO1xuXG4gICAgZm9yIChsZXQgYyA9IDA7IGMgPCBmaWx0ZXJXaWR0aDsgYysrKSB7XG4gICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgdmVjNCB4VGV4ZWxDJHtjICogMn07XG4gICAgICAgICAgaW50IHhUZXhlbEMke2MgKiAyfVJlYWR5O1xuICAgICAgICAgIHZlYzQgeFRleGVsQyR7YyAqIDIgKyAxfTtcbiAgICAgICAgICBpbnQgeFRleGVsQyR7YyAqIDIgKyAxfVJlYWR5O1xuICAgICAgICAgIHZlYzQgeEMke2N9O2A7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyB2ZWN0b3JpemVkIGltcGxlbWVudGF0aW9uIHdvcmtzIGJ5IGdhdGhlcmluZyB0aGUgdmFsdWVzIG5lZWRlZCBmb3JcbiAgICAgKiBlYWNoIG91dHB1dCBjaGFubmVsJ3MgZG90IHByb2R1Y3QgaW50byB2ZWM0J3MgYW5kIHRoZW4gbXVsdGlwbHlpbmcgdGhlbVxuICAgICAqIGFsbCB0b2dldGhlciAodGhpcyBoYXBwZW5zIGluIHRoZSBmaW5hbCBkb3VibGUgZm9yLWxvb3AgYmVsb3cpLiBNb3N0IG9mXG4gICAgICogdGhlIG1haW4gbG9vcCBjb25zaXN0cyBvZiBjb25zdHJ1Y3RpbmcgdGhlc2UgdmVjNCdzIHdpdGggdGhlIG1pbmltdW1cbiAgICAgKiBudW1iZXIgb2YgdGV4dHVyZTJEIGNhbGxzLCB3aGljaCBtZWFucyBtYWtpbmcgdXNlIG9mIGFsbCBmb3VyIHJldHVybmVkXG4gICAgICogdmFsdWVzIGZyb20gYSB0ZXh0dXJlMkQgY2FsbCBhdCBvbmNlLlxuICAgICAqL1xuICAgIG1haW5Mb29wICs9IGBcbiAgICBmb3IgKGludCByID0gMDsgciA8ICR7ZmlsdGVySGVpZ2h0fTsgcisrKSB7XG4gICAgICBgO1xuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgZmlsdGVyV2lkdGg7IGMrKykge1xuICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgIHhUZXhlbEMke2MgKiAyfSA9IHZlYzQoMC4wKTtcbiAgICAgICAgICB4VGV4ZWxDJHtjICogMn1SZWFkeSA9IDA7XG4gICAgICAgICAgeFRleGVsQyR7YyAqIDIgKyAxfSA9IHZlYzQoMC4wKTtcbiAgICAgICAgICB4VGV4ZWxDJHtjICogMiArIDF9UmVhZHkgPSAwO1xuICAgICAgICAgIHhDJHtjfSA9IHZlYzQoMC4wKTtgO1xuICAgIH1cbiAgICBtYWluTG9vcCArPSBgXG4gICAgICAgIHhSID0geFJDb3JuZXIgKyByICogZGlsYXRpb25zWzBdO1xuICAgICAgICBpZiAoeFIgPj0wICYmIHhSIDwgaW5EaW1zWzBdKSB7XG4gICAgICBgO1xuXG4gICAgZm9yIChsZXQgdGV4ZWxDID0gMDsgdGV4ZWxDIDwgKHRleGVsc0Fjcm9zcyArIDEpIC8gMjsgdGV4ZWxDKyspIHtcbiAgICAgIGNvbnN0IGNvbEluZGV4ID0gdGV4ZWxDICogMjtcblxuICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgIHhDID0geENDb3JuZXIgKyAke2NvbEluZGV4ICogZGlsYXRpb25XaWR0aH07XG4gICAgICAgICAgYDtcblxuICAgICAgaWYgKHN0cmlkZVdpZHRoID09PSAxKSB7XG4gICAgICAgIGlmIChjb2xJbmRleCA8IGZpbHRlcldpZHRoKSB7XG4gICAgICAgICAgLy8gSWYgcGFkZGluZyBpcyBvZGQsIHRoZSBvdXRlciB0ZXhlbHMgaGF2ZSB0byBiZSBjb21wb3NlZC5cbiAgICAgICAgICBpZiAocGFkTGVmdCAlIDIgPT09IDEpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEVuc3VyZSB2ZWM0IHByZXZpb3VzIGRvZXMgbm90IHJlc3VsdCBpbiByZWR1bmRhbnQgc2FtcGxlLFxuICAgICAgICAgICAgLy8gYW5kIGF2b2lkIHNldHRpbmcgeFRleGVsUkMncyB0aGF0IGV4Y2VlZCB0aGUgYm91bmRhcnkgaW4gdGhlXG4gICAgICAgICAgICAvLyBmaXJzdCBwbGFjZSByYXRoZXIgdGhhbiByZXNldHRpbmcgdGhlbSB0byB2ZWM0KDApKS5cblxuICAgICAgICAgICAgLy8gVG8gY29tcHV0ZSB4Q09mZnNldDpcbiAgICAgICAgICAgIC8vIC0gSWYgcGFkZGluZyBpcyBvZGQsIHdlIG11c3QgYWRkIDEgdG8gZW5zdXJlIHdlIGFzayBmb3IgYW5cbiAgICAgICAgICAgIC8vIGV2ZW4tbnVtYmVyZWQgcm93LlxuICAgICAgICAgICAgLy8gLSBXZSBzdWJ0cmFjdCAyIHRvIGFjY2VzcyB0aGUgcHJldmlvdXMgdGV4ZWwuXG5cbiAgICAgICAgICAgIG1haW5Mb29wICs9IGBcbiAgICAgICAgICAgICAgICB4Q09mZnNldCA9IHhDICsgMTtcbiAgICAgICAgICAgICAgICBpZiAoeENPZmZzZXQgPj0gMCAmJiB4Q09mZnNldCA8IGluRGltc1sxXSAmJiB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICBjb2xJbmRleH1SZWFkeSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH0gPSBnZXRYKGJhdGNoLCB4UiwgeENPZmZzZXQsIGQxKTtcblxuICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBtYW51YWxseSBjbGVhciB1bnVzZWQgY2hhbm5lbHMgaW4gY2FzZVxuICAgICAgICAgICAgICAgICAgLy8gd2UncmUgcmVhZGluZyBmcm9tIHJlY3ljbGVkIHRleHR1cmUuXG4gICAgICAgICAgICAgICAgICBpZiAoeENPZmZzZXQgKyAxID49IGluRGltc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH0uencgPSB2ZWMyKDAuMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH1SZWFkeSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgLy8gVGhpcyB0ZXhlbCBoYXMgYmVlbiByZWFkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiB0aGUgZGlsYXRpb25cbiAgICAgICAgICAgIC8vIGlzIDEuXG4gICAgICAgICAgICBpZiAoZGlsYXRpb25XaWR0aCA9PT0gMSAmJiBjb2xJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgIHhDJHtjb2xJbmRleH0gPSB2ZWM0KHhUZXhlbEMke2NvbEluZGV4IC0gMn0uencsIHhUZXhlbEMke1xuICAgICAgICAgICAgICAgICAgY29sSW5kZXh9Lnh5KTtcbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICAgeENPZmZzZXQgPSB4QyArIDEgLSAyO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoeENPZmZzZXQgPj0gMCAmJiB4Q09mZnNldCA8IGluRGltc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGdldFgoYmF0Y2gsIHhSLCB4Q09mZnNldCwgZDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFudWFsbHkgY2xlYXIgdW51c2VkIGNoYW5uZWxzIGluIGNhc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgcmVhZGluZyBmcm9tIHJlY3ljbGVkIHRleHR1cmUuXG4gICAgICAgICAgICAgICAgICAgIGlmICh4Q09mZnNldCArIDEgPj0gaW5EaW1zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMuencgPSB2ZWMyKDAuMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXh9ID0gdmVjNChwcmV2aW91cy56dywgeFRleGVsQyR7Y29sSW5kZXh9Lnh5KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHhDJHtjb2xJbmRleH0gPSB2ZWM0KDAuMCwgMC4wLCB4VGV4ZWxDJHtjb2xJbmRleH0ueHkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUGFkZGluZyBpcyBldmVuLCBzbyB4UkMgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgdGV4ZWwuXG4gICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgaWYgKHhDID49IDAgJiYgeEMgPCBpbkRpbXNbMV0gJiYgeFRleGVsQyR7Y29sSW5kZXh9UmVhZHkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXh9ID0gZ2V0WChiYXRjaCwgeFIsIHhDLCBkMSk7XG4gICAgICAgICAgICAgICAgICBpZiAoeEMgKyAxID49IGluRGltc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH0uencgPSB2ZWMyKDAuMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH1SZWFkeSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeEMke2NvbEluZGV4fSA9IHhUZXhlbEMke2NvbEluZGV4fTtcbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2xJbmRleCArIDEgPCBmaWx0ZXJXaWR0aCkge1xuICAgICAgICAgICAgLy8gSWYgZGlsYXRpb24gaXMgZXZlbiwgdGhlIHNlY29uZCBlbnRyeSBzaG91bGQgbWF0Y2ggdGhlIGZpcnN0XG4gICAgICAgICAgICAvLyAoZWl0aGVyIGJvdGggYXJlIGNvbXBvc2VkIG9yIGJvdGggYXJlIHNpbmdsZSBzYW1wbGVzKS4gQnV0IGlmXG4gICAgICAgICAgICAvLyBkaWxhdGlvbiBpcyBvZGQsIHRoZW4gdGhlIHNlY29uZCBlbnRyeSBzaG91bGQgYmUgdGhlIG9wcG9zaXRlXG4gICAgICAgICAgICAvLyBvZiB0aGUgZmlyc3QgKGlmIHRoZSBmaXJzdCBpcyBjb21wb3NlZCwgdGhlIHNlY29uZCBpcyBhIHNpbmdsZVxuICAgICAgICAgICAgLy8gc2FtcGxlLCBhbmQgdmljZSB2ZXJzYS4pXG5cbiAgICAgICAgICAgIGNvbnN0IG5leHRUZXhlbE9mZnNldCA9IHBhZExlZnQgJSAyID09PSAwID9cbiAgICAgICAgICAgICAgICB1dGlsLm5lYXJlc3RMYXJnZXJFdmVuKGRpbGF0aW9uV2lkdGgpIDpcbiAgICAgICAgICAgICAgICBkaWxhdGlvbldpZHRoO1xuXG4gICAgICAgICAgICBpZiAoKGRpbGF0aW9uV2lkdGggJSAyID09PSAwICYmIHBhZExlZnQgJSAyID09PSAxKSB8fFxuICAgICAgICAgICAgICAgIChkaWxhdGlvbldpZHRoICUgMiAhPT0gMCAmJiBwYWRMZWZ0ICUgMiAhPT0gMSkpIHtcbiAgICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICAgeENPZmZzZXQgPSB4QyArIGltb2QocGFkc1sxXSwgMikgKyAke25leHRUZXhlbE9mZnNldH07XG5cbiAgICAgICAgICAgICAgICAgIGlmICh4Q09mZnNldCA+PSAwICYmIHhDT2Zmc2V0IDwgaW5EaW1zWzFdICYmIHhUZXhlbEMke1xuICAgICAgICAgICAgICAgICAgY29sSW5kZXggKyAxfVJlYWR5ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfSA9IGdldFgoYmF0Y2gsIHhSLCB4Q09mZnNldCwgZDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFudWFsbHkgY2xlYXIgdW51c2VkIGNoYW5uZWxzIGluIGNhc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgcmVhZGluZyBmcm9tIHJlY3ljbGVkIHRleHR1cmUuXG4gICAgICAgICAgICAgICAgICAgIGlmICh4Q09mZnNldCArIDEgPj0gaW5EaW1zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfS56dyA9IHZlYzIoMC4wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleCArIDF9UmVhZHkgPSAxO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAvLyBJZiBkaWxhdGlvbiA+IDEgdGhlbiB0aGUgeFJDJ3Mgd2lsbCBub3QgYmUgYWJsZSB0byBzaGFyZSBhbnlcbiAgICAgICAgICAgICAgLy8gdmFsdWVzLCBzbyBlYWNoIHhSQyB3aWxsIHJlcXVpcmUgdHdvIHVuaXF1ZSBjYWxscyB0byBnZXRYLlxuICAgICAgICAgICAgICBpZiAoZGlsYXRpb25XaWR0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgICAgIHhDT2Zmc2V0IC09IDI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4Q09mZnNldCA+PSAwICYmIHhDT2Zmc2V0IDwgaW5EaW1zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGdldFgoYmF0Y2gsIHhSLCB4Q09mZnNldCwgZDEpO1xuICAgICAgICAgICAgICAgICAgICAgeEMke2NvbEluZGV4ICsgMX0gPSB2ZWM0KHByZXZpb3VzLnp3LCB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXggKyAxfS54eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXggKyAxfSA9IHZlYzQoMC4wLCAwLjAsIHhUZXhlbEMke1xuICAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleCArIDF9Lnh5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5Mb29wICs9IGBcbiAgICAgICAgICAgICAgICAgICAgeEMke2NvbEluZGV4ICsgMX0gPSB2ZWM0KHhUZXhlbEMke2NvbEluZGV4fS56dywgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgICAgIGNvbEluZGV4ICsgMX0ueHkpO1xuICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBkaWxhdGlvbiBpcyAxIGFuZCBwYWRkaW5nIGlzIG9kZCwgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlXG4gICAgICAgICAgICAgIC8vIHRleGVsIHdoZW4gY29uc3RydWN0aW5nIHRoZSBwcmV2aW91cyB4IHZhbHVlLiBIZXJlIHdlIGNhblxuICAgICAgICAgICAgICAvLyBzaW1wbHkgc2tpcCB0aGUgdGV4dHVyZSByZWFkLlxuICAgICAgICAgICAgICBpZiAobmV4dFRleGVsT2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXggKyAxfSA9IHhUZXhlbEMke2NvbEluZGV4fTtcbiAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgICAgIHhDT2Zmc2V0ID0geEMgKyAke25leHRUZXhlbE9mZnNldH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHhDT2Zmc2V0ID49IDAgJiYgeENPZmZzZXQgPCBpbkRpbXNbMV0gJiYgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgICAgIGNvbEluZGV4ICsgMX1SZWFkeSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfSA9IGdldFgoYmF0Y2gsIHhSLCB4Q09mZnNldCwgZDEpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh4Q09mZnNldCArIDEgPj0gaW5EaW1zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleCArIDF9Lnp3ID0gdmVjMigwLjApO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleCArIDF9UmVhZHkgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgeEMke2NvbEluZGV4ICsgMX0gPSB4VGV4ZWxDJHtjb2xJbmRleCArIDF9O1xuICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgeyAgLy8gc3RyaWRlID09PSAyXG4gICAgICAgIGlmIChjb2xJbmRleCA8IGZpbHRlcldpZHRoKSB7XG4gICAgICAgICAgLy8gRGVwZW5kaW5nIG9uIHdoZXRoZXIgcGFkTGVmdCBpcyBldmVuIG9yIG9kZCwgd2Ugd2FudCBlaXRoZXIgdGhlXG4gICAgICAgICAgLy8geHkgb3IgencgY2hhbm5lbHMgZnJvbSBYIHRleGVscyBmb3IgeEMke2NvbEluZGV4fS4gSWYgcGFkTGVmdCBpc1xuICAgICAgICAgIC8vIGV2ZW4sIHhDJHtjb2xJbmRleCArMX0gaXMgc2ltcGx5IHRoZSB6dyBjaGFubmVscyBvZiB0ZXhlbHMgd2UndmVcbiAgICAgICAgICAvLyBhbHJlYWR5IHNhbXBsZWQuIEJ1dCBpZiBwYWRMZWZ0IGlzIG9kZCwgeEN7JGMgKyAxfS56dyB3aWxsXG4gICAgICAgICAgLy8gbmVlZCB0byBjb21lIGZyb20gdGhlIHh5IGNoYW5uZWxzIG9mIGEgbmV3IHRleGVsLCBoZW5jZSB0aGUgYFxuICAgICAgICAgIC8vIHZlYzRcbiAgICAgICAgICAvLyBmaW5hbGAgaW5pdGlhbGl6ZWQgYmVsb3cuXG4gICAgICAgICAgaWYgKHBhZExlZnQgJSAyID09PSAxKSB7XG4gICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgeENPZmZzZXQgPSB4QyArIDEgLSBzdHJpZGVzWzFdO1xuICAgICAgICAgICAgICAgIGlmKHhDT2Zmc2V0ID49IDAgJiYgeENPZmZzZXQgPCBpbkRpbXNbMV0gJiYgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgY29sSW5kZXh9UmVhZHkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXh9ID0gZ2V0WChiYXRjaCwgeFIsIHhDT2Zmc2V0LCBkMSk7XG4gICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIG1hbnVhbGx5IGNsZWFyIHVudXNlZCBjaGFubmVscyBpbiBjYXNlXG4gICAgICAgICAgICAgICAgICAvLyB3ZSdyZSByZWFkaW5nIGZyb20gcmVjeWNsZWQgdGV4dHVyZS5cbiAgICAgICAgICAgICAgICAgIGlmICh4Q09mZnNldCArIDEgPj0gaW5EaW1zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4fS56dyA9IHZlYzIoMC4wKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4fVJlYWR5ID0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZih4QyArIDEgPj0gMCAmJiB4QyArIDEgPCBpbkRpbXNbMV0gJiYgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgY29sSW5kZXggKyAxfVJlYWR5ID09IDApIHtcbiAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4ICsgMX0gPSBnZXRYKGJhdGNoLCB4UiwgeEMgKyAxLCBkMSk7XG4gICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIG1hbnVhbGx5IGNsZWFyIHVudXNlZCBjaGFubmVscyBpbiBjYXNlXG4gICAgICAgICAgICAgICAgICAvLyB3ZSdyZSByZWFkaW5nIGZyb20gcmVjeWNsZWQgdGV4dHVyZS5cbiAgICAgICAgICAgICAgICAgIGlmICh4QyArIDIgPj0gaW5EaW1zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4ICsgMX0uencgPSB2ZWMyKDAuMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleCArIDF9UmVhZHkgPSAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHhDJHtjb2xJbmRleH0gPSB2ZWM0KHhUZXhlbEMke2NvbEluZGV4fS56dywgeFRleGVsQyR7XG4gICAgICAgICAgICAgICAgY29sSW5kZXggKyAxfS56dyk7XG4gICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIGlmIChjb2xJbmRleCArIDEgPCBmaWx0ZXJXaWR0aCkge1xuICAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgICBmaW5hbCA9IHZlYzQoMC4wKTtcbiAgICAgICAgICAgICAgICAgIHhDT2Zmc2V0ID0geEMgKyAxICsgc3RyaWRlc1sxXTtcbiAgICAgICAgICAgICAgICAgIGlmKHhDT2Zmc2V0ID49IDAgJiYgeENPZmZzZXQgPCBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWwgPSBnZXRYKGJhdGNoLCB4UiwgeENPZmZzZXQsIGQxKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHhDJHtjb2xJbmRleCArIDF9ID0gdmVjNCh4VGV4ZWxDJHtjb2xJbmRleCArIDF9Lnh5LCBmaW5hbC54eSk7XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICAgIGlmKHhDID49IDAgJiYgeEMgPCBpbkRpbXNbMV0gJiYgeFRleGVsQyR7Y29sSW5kZXh9UmVhZHkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXh9ID0gZ2V0WChiYXRjaCwgeFIsIHhDLCBkMSk7XG4gICAgICAgICAgICAgICAgICBpZiAoeEMgKyAxID49IGluRGltc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH0uencgPSB2ZWMyKDAuMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB4VGV4ZWxDJHtjb2xJbmRleH1SZWFkeSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeENPZmZzZXQgPSB4QyArIHN0cmlkZXNbMV07XG4gICAgICAgICAgICAgICAgaWYoeENPZmZzZXQgPj0gMCAmJiB4Q09mZnNldCA8IGluRGltc1sxXSAmJiB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICBjb2xJbmRleCArIDF9UmVhZHkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfSA9IGdldFgoYmF0Y2gsIHhSLCB4Q09mZnNldCwgZDEpO1xuICAgICAgICAgICAgICAgICAgaWYgKHhDT2Zmc2V0ICsgMSA+PSBpbkRpbXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfS56dyA9IHZlYzIoMC4pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgeFRleGVsQyR7Y29sSW5kZXggKyAxfVJlYWR5ID0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXh9ID0gdmVjNChcbiAgICAgICAgICAgICAgICAgIHhUZXhlbEMke2NvbEluZGV4fS54eSwgeFRleGVsQyR7Y29sSW5kZXggKyAxfS54eSk7XG4gICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIGlmIChjb2xJbmRleCArIDEgPCBmaWx0ZXJXaWR0aCkge1xuICAgICAgICAgICAgICBtYWluTG9vcCArPSBgXG4gICAgICAgICAgICAgICAgICB4QyR7Y29sSW5kZXggKyAxfSA9IHZlYzQoeFRleGVsQyR7Y29sSW5kZXh9Lnp3LCB4VGV4ZWxDJHtcbiAgICAgICAgICAgICAgICAgIGNvbEluZGV4ICsgMX0uencpO1xuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGxvY2FsaXplIHRoZSBkb3RQcm9kIGFjY3VtdWxhdGlvbiB3aXRoaW4gdGhlIGxvb3AsIHRoZSB0aGVvcnkgaXMgZm9yXG4gICAgICAvLyBHUFUgd2l0aCBsaW1pdGVkIGNhY2hlLCBhY2N1bXVsYXRlIHN1bSBhY3Jvc3MgbGFyZ2UgYW1vdW50IG9mXG4gICAgICAvLyB2ZXJpYWJsZXMgd2lsbCBjYXVzZSBsb3RzIG9mIGNhY2hlIG1pc3Nlcy4gKGkuZS4gNXg1IGZpbHRlciB3aWxsIGhhdmVcbiAgICAgIC8vIDUwIHZhcmlhYmxlcylcbiAgICAgIGlmIChjb2xJbmRleCA8IGZpbHRlcldpZHRoKSB7XG4gICAgICAgIG1haW5Mb29wICs9IGBcbiAgICAgICAgICAgIHdUZXhlbCA9IGdldFcociwgJHtjb2xJbmRleH0sIGQxLCBxKTtcbiAgICAgICAgICAgIGRvdFByb2QgKz0geEMke2NvbEluZGV4fSAqIHZlYzQod1RleGVsLnh6LCB3VGV4ZWwueHopO1xuICAgICAgICAgIGA7XG5cbiAgICAgICAgaWYgKGNvbEluZGV4ICsgMSA8IGZpbHRlcldpZHRoKSB7XG4gICAgICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgICAgICB3VGV4ZWwgPSBnZXRXKHIsICR7Y29sSW5kZXggKyAxfSwgZDEsIHEpO1xuICAgICAgICAgICAgICBkb3RQcm9kICs9IHhDJHtjb2xJbmRleCArIDF9ICogdmVjNCh3VGV4ZWwueHosIHdUZXhlbC54eik7XG4gICAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIG1haW5Mb29wICs9IGBcbiAgICB9XG4gIGA7XG4gICAgbWFpbkxvb3AgKz0gYFxuICAgICAgfVxuICAgIGA7XG5cbiAgICBsZXQgYWN0aXZhdGlvblNuaXBwZXQgPSAnJywgYXBwbHlBY3RpdmF0aW9uU25pcHBldCA9ICcnO1xuICAgIGlmIChhY3RpdmF0aW9uKSB7XG4gICAgICBpZiAoaGFzUHJlbHVBY3RpdmF0aW9uKSB7XG4gICAgICAgIGFjdGl2YXRpb25TbmlwcGV0ID0gYHZlYzQgYWN0aXZhdGlvbih2ZWM0IGEpIHtcbiAgICAgICAgICB2ZWM0IGIgPSBnZXRQcmVsdUFjdGl2YXRpb25XZWlnaHRzQXRPdXRDb29yZHMoKTtcbiAgICAgICAgICAke2FjdGl2YXRpb259XG4gICAgICAgIH1gO1xuICAgICAgfSBlbHNlIGlmIChoYXNMZWFreVJlbHVBbHBoYSkge1xuICAgICAgICBhY3RpdmF0aW9uU25pcHBldCA9IGB2ZWM0IGFjdGl2YXRpb24odmVjNCBhKSB7XG4gICAgICAgICAgdmVjNCBiID0gZ2V0TGVha3lyZWx1QWxwaGFBdE91dENvb3JkcygpO1xuICAgICAgICAgICR7YWN0aXZhdGlvbn1cbiAgICAgICAgfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0aW9uU25pcHBldCA9IGB2ZWM0IGFjdGl2YXRpb24odmVjNCB4KSB7XG4gICAgICAgICAgJHthY3RpdmF0aW9ufVxuICAgICAgICB9YDtcbiAgICAgIH1cblxuICAgICAgYXBwbHlBY3RpdmF0aW9uU25pcHBldCA9IGByZXN1bHQgPSBhY3RpdmF0aW9uKHJlc3VsdCk7YDtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRCaWFzU25pcHBldCA9IGFkZEJpYXMgPyAncmVzdWx0ICs9IGdldEJpYXNBdE91dENvb3JkcygpOycgOiAnJztcbiAgICBpZiAoYWRkQmlhcykge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVzLnB1c2goJ2JpYXMnKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzUHJlbHVBY3RpdmF0aW9uKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZXMucHVzaCgncHJlbHVBY3RpdmF0aW9uV2VpZ2h0cycpO1xuICAgIH1cbiAgICBpZiAoaGFzTGVha3lSZWx1QWxwaGEpIHtcbiAgICAgIHRoaXMudmFyaWFibGVOYW1lcy5wdXNoKCdsZWFreXJlbHVBbHBoYScpO1xuICAgIH1cblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAke2FjdGl2YXRpb25TbmlwcGV0fVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHMueDtcbiAgICAgICAgaXZlYzIgeFJDQ29ybmVyID0gY29vcmRzLnl6ICogc3RyaWRlcyAtIHBhZHM7XG4gICAgICAgIGludCBkMiA9IGNvb3Jkcy53O1xuICAgICAgICBpbnQgZDEgPSBkMiAvICR7Y2hhbm5lbE11bH07XG4gICAgICAgIGludCBxID0gZDIgLSBkMSAqICR7Y2hhbm5lbE11bH07XG4gICAgICAgIGludCB4UkNvcm5lciA9IHhSQ0Nvcm5lci54O1xuICAgICAgICBpbnQgeENDb3JuZXIgPSB4UkNDb3JuZXIueTtcblxuICAgICAgICAvL2ludGlhbGl6ZSBkb3RQcm9kIHdpdGggYSBzbWFsbCBlcHNpbG9uIHNlZW1zIHRvIHJlZHVjZSBHUFUgYWNjdXJhY3kgbG9zcy5cbiAgICAgICAgdmVjNCBkb3RQcm9kID0gdmVjNCgwLjAwMDAwMDAwMDAwMDAwMSk7XG5cbiAgICAgICAgJHttYWluTG9vcH1cblxuICAgICAgICB2ZWM0IHJlc3VsdCA9IGRvdFByb2QgLSB2ZWM0KDAuMDAwMDAwMDAwMDAwMDAxKTtcbiAgICAgICAgJHthZGRCaWFzU25pcHBldH1cbiAgICAgICAgJHthcHBseUFjdGl2YXRpb25TbmlwcGV0fVxuICAgICAgICBzZXRPdXRwdXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, DepthwiseConv2dNative, env, util } from '@tensorflow/tfjs-core';\nimport { DepthwiseConv2DProgram } from '../conv_gpu_depthwise';\nimport { DepthwiseConvPacked2DProgram } from '../conv_packed_gpu_depthwise';\nexport function depthwiseConv2dNative(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dilations, dimRoundingMode } = attrs;\n let $dilations = dilations;\n if ($dilations == null) {\n $dilations = [1, 1];\n }\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, $dilations), () => 'Error in depthwiseConv2d: Either strides or dilations must be ' +\n `1. Got strides ${strides} and dilations '${$dilations}'`);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad, dimRoundingMode, true /* depthwise */);\n let program;\n if (env().getBool('WEBGL_PACK_DEPTHWISECONV') && convInfo.strideWidth <= 2 &&\n convInfo.outChannels / convInfo.inChannels === 1) {\n program = new DepthwiseConvPacked2DProgram(convInfo);\n }\n else {\n program = new DepthwiseConv2DProgram(convInfo);\n }\n const customValues = [\n [convInfo.padInfo.top, convInfo.padInfo.left],\n [convInfo.strideHeight, convInfo.strideWidth],\n [convInfo.dilationHeight, convInfo.dilationWidth],\n [convInfo.inHeight, convInfo.inWidth]\n ];\n return backend.runWebGLProgram(program, [x, filter], 'float32', customValues);\n}\nexport const depthwiseConv2dNativeConfig = {\n kernelName: DepthwiseConv2dNative,\n backendName: 'webgl',\n kernelFunc: depthwiseConv2dNative,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGh3aXNlQ29udjJkTmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0RlcHRod2lzZUNvbnYyZE5hdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLHFCQUFxQixFQUEyRCxHQUFHLEVBQTRCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3hLLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRTFFLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUlyQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXpELElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUMzQixJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDdEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3JCO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxZQUFZLENBQUMsOEJBQThCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUNoRSxHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsa0JBQWtCLE9BQU8sbUJBQW1CLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFFbkUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBeUMsRUFDM0MsTUFBTSxDQUFDLEtBQXlDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFDckUsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFaEQsSUFBSSxPQUE0RCxDQUFDO0lBQ2pFLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxDQUFDO1FBQ3RFLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7UUFDcEQsT0FBTyxHQUFHLElBQUksNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdEQ7U0FBTTtRQUNMLE9BQU8sR0FBRyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ2hEO0lBQ0QsTUFBTSxZQUFZLEdBQUc7UUFDbkIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM3QyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUM3QyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNqRCxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztLQUN0QyxDQUFDO0lBQ0YsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFpQjtJQUN2RCxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxxQkFBOEM7Q0FDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERlcHRod2lzZUNvbnYyZE5hdGl2ZSwgRGVwdGh3aXNlQ29udjJkTmF0aXZlQXR0cnMsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUlucHV0cywgZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0RlcHRod2lzZUNvbnYyRFByb2dyYW19IGZyb20gJy4uL2NvbnZfZ3B1X2RlcHRod2lzZSc7XG5pbXBvcnQge0RlcHRod2lzZUNvbnZQYWNrZWQyRFByb2dyYW19IGZyb20gJy4uL2NvbnZfcGFja2VkX2dwdV9kZXB0aHdpc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVwdGh3aXNlQ29udjJkTmF0aXZlKGFyZ3M6IHtcbiAgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVJbnB1dHMsXG4gIGF0dHJzOiBEZXB0aHdpc2VDb252MmROYXRpdmVBdHRycyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTFxufSkge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgZmlsdGVyfSA9IGlucHV0cztcbiAgY29uc3Qge3N0cmlkZXMsIHBhZCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGV9ID0gYXR0cnM7XG5cbiAgbGV0ICRkaWxhdGlvbnMgPSBkaWxhdGlvbnM7XG4gIGlmICgkZGlsYXRpb25zID09IG51bGwpIHtcbiAgICAkZGlsYXRpb25zID0gWzEsIDFdO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICBiYWNrZW5kX3V0aWwuZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZXMsICRkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGRlcHRod2lzZUNvbnYyZDogRWl0aGVyIHN0cmlkZXMgb3IgZGlsYXRpb25zIG11c3QgYmUgJyArXG4gICAgICAgICAgYDEuIEdvdCBzdHJpZGVzICR7c3RyaWRlc30gYW5kIGRpbGF0aW9ucyAnJHskZGlsYXRpb25zfSdgKTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBmaWx0ZXIuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHN0cmlkZXMsICRkaWxhdGlvbnMsXG4gICAgICBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgdHJ1ZSAvKiBkZXB0aHdpc2UgKi8pO1xuXG4gIGxldCBwcm9ncmFtOiBEZXB0aHdpc2VDb252MkRQcm9ncmFtfERlcHRod2lzZUNvbnZQYWNrZWQyRFByb2dyYW07XG4gIGlmIChlbnYoKS5nZXRCb29sKCdXRUJHTF9QQUNLX0RFUFRIV0lTRUNPTlYnKSAmJiBjb252SW5mby5zdHJpZGVXaWR0aCA8PSAyICYmXG4gICAgICBjb252SW5mby5vdXRDaGFubmVscyAvIGNvbnZJbmZvLmluQ2hhbm5lbHMgPT09IDEpIHtcbiAgICBwcm9ncmFtID0gbmV3IERlcHRod2lzZUNvbnZQYWNrZWQyRFByb2dyYW0oY29udkluZm8pO1xuICB9IGVsc2Uge1xuICAgIHByb2dyYW0gPSBuZXcgRGVwdGh3aXNlQ29udjJEUHJvZ3JhbShjb252SW5mbyk7XG4gIH1cbiAgY29uc3QgY3VzdG9tVmFsdWVzID0gW1xuICAgIFtjb252SW5mby5wYWRJbmZvLnRvcCwgY29udkluZm8ucGFkSW5mby5sZWZ0XSxcbiAgICBbY29udkluZm8uc3RyaWRlSGVpZ2h0LCBjb252SW5mby5zdHJpZGVXaWR0aF0sXG4gICAgW2NvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LCBjb252SW5mby5kaWxhdGlvbldpZHRoXSxcbiAgICBbY29udkluZm8uaW5IZWlnaHQsIGNvbnZJbmZvLmluV2lkdGhdXG4gIF07XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeCwgZmlsdGVyXSwgJ2Zsb2F0MzInLCBjdXN0b21WYWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgZGVwdGh3aXNlQ29udjJkTmF0aXZlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERlcHRod2lzZUNvbnYyZE5hdGl2ZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGRlcHRod2lzZUNvbnYyZE5hdGl2ZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class DepthwiseConv2DDerFilterProgram {\n constructor(convInfo) {\n this.variableNames = ['x', 'dy'];\n this.outputShape = convInfo.filterShape;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n const channelMul = convInfo.outChannels / convInfo.inChannels;\n 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 `;\n }\n}\nexport class DepthwiseConv2DDerInputProgram {\n constructor(convInfo) {\n this.variableNames = ['dy', 'W'];\n this.outputShape = convInfo.inShape;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const padTop = filterHeight - 1 - convInfo.padInfo.top;\n const padLeft = filterWidth - 1 - convInfo.padInfo.left;\n const channelMul = convInfo.outChannels / convInfo.inChannels;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl9iYWNrcHJvcF9ncHVfZGVwdGh3aXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9jb252X2JhY2twcm9wX2dwdV9kZXB0aHdpc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsTUFBTSxPQUFPLCtCQUErQjtJQUsxQyxZQUFZLFFBQWlDO1FBSjdDLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFLMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBRXhDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFFOUQsSUFBSSxDQUFDLFFBQVEsR0FBRzs7Ozs7Ozt3QkFPSSxVQUFVOzs7Ozs4QkFLSixRQUFRLENBQUMsU0FBUztrQ0FDZCxRQUFRLENBQUMsU0FBUztpQ0FDbkIsWUFBWSxNQUFNLE1BQU07O2tDQUV2QixRQUFRLENBQUMsUUFBUTs7OztvQ0FJZixRQUFRLENBQUMsUUFBUTttQ0FDbEIsV0FBVyxNQUFNLE9BQU87O29DQUV2QixRQUFRLENBQUMsT0FBTzs7Ozs7Ozs7Ozs7O0tBWS9DLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sOEJBQThCO0lBS3pDLFlBQVksUUFBaUM7UUFKN0Msa0JBQWEsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUsxQixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFFcEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUV6QyxNQUFNLE1BQU0sR0FBRyxZQUFZLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDeEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBRTlELElBQUksQ0FBQyxRQUFRLEdBQUc7aUNBQ2EsTUFBTSxLQUFLLE9BQU87Ozs7Ozs7Ozs7OztnQ0FZbkIsWUFBWTtnREFDSSxZQUFZOztvQ0FFeEIsUUFBUSxDQUFDLFNBQVM7Ozs7O3lCQUs3QixZQUFZOztrQ0FFSCxXQUFXO2tEQUNLLFdBQVc7O3NDQUV2QixRQUFRLENBQUMsUUFBUTs7Ozs7OzJCQU01QixXQUFXOzs7b0NBR0YsVUFBVTs4QkFDaEIsVUFBVTs7Ozs7Ozs7O0tBU25DLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBEZXB0aHdpc2VDb252MkREZXJGaWx0ZXJQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCcsICdkeSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252MkRJbmZvKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGNvbnZJbmZvLmZpbHRlclNoYXBlO1xuXG4gICAgY29uc3Qgc3RyaWRlSGVpZ2h0ID0gY29udkluZm8uc3RyaWRlSGVpZ2h0O1xuICAgIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gICAgY29uc3QgcGFkVG9wID0gY29udkluZm8ucGFkSW5mby50b3A7XG4gICAgY29uc3QgcGFkTGVmdCA9IGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcbiAgICBjb25zdCBjaGFubmVsTXVsID0gY29udkluZm8ub3V0Q2hhbm5lbHMgLyBjb252SW5mby5pbkNoYW5uZWxzO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCB3UiA9IGNvb3Jkcy54O1xuICAgICAgICBpbnQgd0MgPSBjb29yZHMueTtcbiAgICAgICAgaW50IGQxID0gY29vcmRzLno7XG4gICAgICAgIGludCBkbSA9IGNvb3Jkcy53O1xuICAgICAgICBpbnQgZDIgPSBkMSAqICR7Y2hhbm5lbE11bH0gKyBkbTtcblxuICAgICAgICBmbG9hdCBkb3RQcm9kID0gMC4wO1xuXG4gICAgICAgIC8vIFRPIERPOiBWZWM0IG92ZXIgdGhlIGJhdGNoIHNpemVcbiAgICAgICAgZm9yIChpbnQgYiA9IDA7IGIgPCAke2NvbnZJbmZvLmJhdGNoU2l6ZX07IGIrKykge1xuICAgICAgICAgIGZvciAoaW50IHlSID0gMDsgeVIgPCAke2NvbnZJbmZvLm91dEhlaWdodH07IHlSKyspIHtcbiAgICAgICAgICAgIGludCB4UiA9IHdSICsgeVIgKiAke3N0cmlkZUhlaWdodH0gLSAke3BhZFRvcH07XG5cbiAgICAgICAgICAgIGlmICh4UiA8IDAgfHwgeFIgPj0gJHtjb252SW5mby5pbkhlaWdodH0pIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaW50IHlDID0gMDsgeUMgPCAke2NvbnZJbmZvLm91dFdpZHRofTsgeUMrKykge1xuICAgICAgICAgICAgICBpbnQgeEMgPSB3QyArIHlDICogJHtzdHJpZGVXaWR0aH0gLSAke3BhZExlZnR9O1xuXG4gICAgICAgICAgICAgIGlmICh4QyA8IDAgfHwgeEMgPj0gJHtjb252SW5mby5pbldpZHRofSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZmxvYXQgZHlWYWx1ZSA9IGdldER5KGIsIHlSLCB5QywgZDIpO1xuICAgICAgICAgICAgICBmbG9hdCB4VmFsdWUgPSBnZXRYKGIsIHhSLCB4QywgZDEpO1xuICAgICAgICAgICAgICBkb3RQcm9kICs9ICh4VmFsdWUgKiBkeVZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0T3V0cHV0KGRvdFByb2QpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRod2lzZUNvbnYyRERlcklucHV0UHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ2R5JywgJ1cnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjJESW5mbykge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5pblNoYXBlO1xuXG4gICAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICAgIGNvbnN0IGZpbHRlcldpZHRoID0gY29udkluZm8uZmlsdGVyV2lkdGg7XG4gICAgY29uc3Qgc3RyaWRlSGVpZ2h0ID0gY29udkluZm8uc3RyaWRlSGVpZ2h0O1xuICAgIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG5cbiAgICBjb25zdCBwYWRUb3AgPSBmaWx0ZXJIZWlnaHQgLSAxIC0gY29udkluZm8ucGFkSW5mby50b3A7XG4gICAgY29uc3QgcGFkTGVmdCA9IGZpbHRlcldpZHRoIC0gMSAtIGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcbiAgICBjb25zdCBjaGFubmVsTXVsID0gY29udkluZm8ub3V0Q2hhbm5lbHMgLyBjb252SW5mby5pbkNoYW5uZWxzO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGNvbnN0IGl2ZWMyIHBhZHMgPSBpdmVjMigke3BhZFRvcH0sICR7cGFkTGVmdH0pO1xuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHNbMF07XG4gICAgICAgIGludCBkMSA9IGNvb3Jkc1szXTtcbiAgICAgICAgaXZlYzIgZHlDb3JuZXIgPSBjb29yZHMueXogLSBwYWRzO1xuICAgICAgICBpbnQgZHlSQ29ybmVyID0gZHlDb3JuZXIueDtcbiAgICAgICAgaW50IGR5Q0Nvcm5lciA9IGR5Q29ybmVyLnk7XG5cbiAgICAgICAgZmxvYXQgZG90UHJvZCA9IDAuMDtcblxuICAgICAgICBmb3IgKGludCB3UiA9IDA7IHdSIDwgJHtmaWx0ZXJIZWlnaHR9OyB3UisrKSB7XG4gICAgICAgICAgZmxvYXQgZHlSID0gZmxvYXQoZHlSQ29ybmVyICsgd1IpIC8gJHtzdHJpZGVIZWlnaHR9LjA7XG5cbiAgICAgICAgICBpZiAoZHlSIDwgMC4wIHx8IGR5UiA+PSAke2NvbnZJbmZvLm91dEhlaWdodH0uMCB8fCBmcmFjdChkeVIpID4gMC4wKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW50IGlkeVIgPSBpbnQoZHlSKTtcblxuICAgICAgICAgIGludCB3UlBlcm0gPSAke2ZpbHRlckhlaWdodH0gLSAxIC0gd1I7XG5cbiAgICAgICAgICBmb3IgKGludCB3QyA9IDA7IHdDIDwgJHtmaWx0ZXJXaWR0aH07IHdDKyspIHtcbiAgICAgICAgICAgIGZsb2F0IGR5QyA9IGZsb2F0KGR5Q0Nvcm5lciArIHdDKSAvICR7c3RyaWRlV2lkdGh9LjA7XG5cbiAgICAgICAgICAgIGlmIChkeUMgPCAwLjAgfHwgZHlDID49ICR7Y29udkluZm8ub3V0V2lkdGh9LjAgfHxcbiAgICAgICAgICAgICAgICBmcmFjdChkeUMpID4gMC4wKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50IGlkeUMgPSBpbnQoZHlDKTtcblxuICAgICAgICAgICAgaW50IHdDUGVybSA9ICR7ZmlsdGVyV2lkdGh9IC0gMSAtIHdDO1xuXG4gICAgICAgICAgICAvLyBUTyBETzogVmVjNCBvdmVyIHRoZSBjaGFubmVsTXVsXG4gICAgICAgICAgICBmb3IgKGludCBkbSA9IDA7IGRtIDwgJHtjaGFubmVsTXVsfTsgZG0rKykge1xuICAgICAgICAgICAgICBpbnQgZDIgPSBkMSAqICR7Y2hhbm5lbE11bH0gKyBkbTtcbiAgICAgICAgICAgICAgZmxvYXQgeFZhbHVlID0gZ2V0RHkoYmF0Y2gsIGlkeVIsIGlkeUMsIGQyKTtcbiAgICAgICAgICAgICAgZmxvYXQgd1ZhbHVlID0gZ2V0Vyh3UlBlcm0sIHdDUGVybSwgZDEsIGRtKTtcbiAgICAgICAgICAgICAgZG90UHJvZCArPSB4VmFsdWUgKiB3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldE91dHB1dChkb3RQcm9kKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, DepthwiseConv2dNativeBackpropFilter } from '@tensorflow/tfjs-core';\nimport { DepthwiseConv2DDerFilterProgram } from '../conv_backprop_gpu_depthwise';\nexport function depthwiseConv2dNativeBackpropFilter(args) {\n const { inputs, backend, attrs } = args;\n const { x, dy } = inputs;\n const { strides, dilations, pad, dimRoundingMode, filterShape } = attrs;\n const convInfo = backend_util.computeConv2DInfo(x.shape, filterShape, strides, dilations, pad, dimRoundingMode, true /* depthwise */);\n const program = new DepthwiseConv2DDerFilterProgram(convInfo);\n return backend.runWebGLProgram(program, [x, dy], 'float32');\n}\nexport const depthwiseConv2dNativeBackpropFilterConfig = {\n kernelName: DepthwiseConv2dNativeBackpropFilter,\n backendName: 'webgl',\n kernelFunc: depthwiseConv2dNativeBackpropFilter\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxtQ0FBbUMsRUFBZ0gsTUFBTSx1QkFBdUIsQ0FBQztBQUd2TSxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRSxNQUFNLFVBQVUsbUNBQW1DLENBQUMsSUFJbkQ7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdEUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBeUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUNqRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBK0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5Q0FBeUMsR0FBaUI7SUFDckUsVUFBVSxFQUFFLG1DQUFtQztJQUMvQyxXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsbUNBQTREO0NBQ3pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciwgRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJBdHRycywgRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuY30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7RGVwdGh3aXNlQ29udjJERGVyRmlsdGVyUHJvZ3JhbX0gZnJvbSAnLi4vY29udl9iYWNrcHJvcF9ncHVfZGVwdGh3aXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyKGFyZ3M6IHtcbiAgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlcklucHV0cyxcbiAgYXR0cnM6IERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQXR0cnMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0xcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGR5fSA9IGlucHV0cztcbiAgY29uc3Qge3N0cmlkZXMsIGRpbGF0aW9ucywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGZpbHRlclNoYXBlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVDb252MkRJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2hhcGUsIHN0cmlkZXMsXG4gICAgICBkaWxhdGlvbnMsIHBhZCwgZGltUm91bmRpbmdNb2RlLCB0cnVlIC8qIGRlcHRod2lzZSAqLyk7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBEZXB0aHdpc2VDb252MkREZXJGaWx0ZXJQcm9ncmFtKGNvbnZJbmZvKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFt4LCBkeV0sICdmbG9hdDMyJyk7XG59XG5cbmV4cG9ydCBjb25zdCBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlckNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlcixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, DepthwiseConv2dNativeBackpropInput } from '@tensorflow/tfjs-core';\nimport { DepthwiseConv2DDerInputProgram } from '../conv_backprop_gpu_depthwise';\nexport function depthwiseConv2dNativeBackpropInput(args) {\n const { inputs, backend, attrs } = args;\n const { dy, filter } = inputs;\n const { strides, dilations, pad, dimRoundingMode, inputShape } = attrs;\n const convInfo = backend_util.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad, dimRoundingMode, true /* depthwise */);\n const program = new DepthwiseConv2DDerInputProgram(convInfo);\n return backend.runWebGLProgram(program, [dy, filter], 'float32');\n}\nexport const depthwiseConv2dNativeBackpropInputConfig = {\n kernelName: DepthwiseConv2dNativeBackpropInput,\n backendName: 'webgl',\n kernelFunc: depthwiseConv2dNativeBackpropInput\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9EZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsa0NBQWtDLEVBQThHLE1BQU0sdUJBQXVCLENBQUM7QUFHcE0sT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFOUUsTUFBTSxVQUFVLGtDQUFrQyxDQUFDLElBSWxEO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzVCLE1BQU0sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUF5QyxFQUFFLE9BQU8sRUFDckUsU0FBUyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTNELE1BQU0sT0FBTyxHQUFHLElBQUksOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0QsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sd0NBQXdDLEdBQWlCO0lBQ3BFLFVBQVUsRUFBRSxrQ0FBa0M7SUFDOUMsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLGtDQUEyRDtDQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dCwgRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dEF0dHJzLCBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0SW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0RlcHRod2lzZUNvbnYyRERlcklucHV0UHJvZ3JhbX0gZnJvbSAnLi4vY29udl9iYWNrcHJvcF9ncHVfZGVwdGh3aXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQoYXJnczoge1xuICBpbnB1dHM6IERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXRJbnB1dHMsXG4gIGF0dHJzOiBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0QXR0cnMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0xcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgZGlsYXRpb25zLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgaW5wdXRTaGFwZX0gPSBhdHRycztcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgIGlucHV0U2hhcGUsIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcyxcbiAgICAgIGRpbGF0aW9ucywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIHRydWUgLyogZGVwdGh3aXNlICovKTtcblxuICBjb25zdCBwcm9ncmFtID0gbmV3IERlcHRod2lzZUNvbnYyRERlcklucHV0UHJvZ3JhbShjb252SW5mbyk7XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbZHksIGZpbHRlcl0sICdmbG9hdDMyJyk7XG59XG5cbmV4cG9ydCBjb25zdCBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class DiagProgram {\n constructor(size) {\n this.variableNames = ['X'];\n this.outputShape = [size, size];\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ19ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2RpYWdfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBS3RCLFlBQVksSUFBWTtRQUp4QixrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFLcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7S0FNZixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIERpYWdQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnWCddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IFtzaXplLCBzaXplXTtcbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgIGl2ZWMyIGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIGZsb2F0IHZhbCA9IGNvb3Jkc1swXSA9PSBjb29yZHNbMV0gPyBnZXRYKGNvb3Jkc1swXSkgOiAwLjA7XG4gICAgICAgICAgc2V0T3V0cHV0KHZhbCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Diag, util } from '@tensorflow/tfjs-core';\nimport { DiagProgram } from '../diag_gpu';\nimport { reshape } from './Reshape';\nexport function diag(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n const outShape = [...x.shape, ...x.shape];\n const xSize = util.sizeFromShape(x.shape);\n const flat = reshape({ inputs: { x }, backend, attrs: { shape: [xSize] } });\n const program = new DiagProgram(xSize);\n const res = backend.runWebGLProgram(program, [flat], flat.dtype);\n const out = reshape({ inputs: { x: res }, backend, attrs: { shape: outShape } });\n backend.disposeIntermediateTensorInfo(flat);\n backend.disposeIntermediateTensorInfo(res);\n return out;\n}\nexport const diagConfig = {\n kernelName: Diag,\n backendName: 'webgl',\n kernelFunc: diag\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9EaWFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQW9ELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR25HLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQXFEO0lBRXhFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFMUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUUzRSxPQUFPLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGlhZywgRGlhZ0lucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtEaWFnUHJvZ3JhbX0gZnJvbSAnLi4vZGlhZ19ncHUnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlhZyhhcmdzOiB7aW5wdXRzOiBEaWFnSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuXG4gIGNvbnN0IG91dFNoYXBlID0gWy4uLnguc2hhcGUsIC4uLnguc2hhcGVdO1xuICBjb25zdCB4U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSh4LnNoYXBlKTtcblxuICBjb25zdCBmbGF0ID0gcmVzaGFwZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IFt4U2l6ZV19fSk7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBEaWFnUHJvZ3JhbSh4U2l6ZSk7XG4gIGNvbnN0IHJlcyA9IGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFtmbGF0XSwgZmxhdC5kdHlwZSk7XG5cbiAgY29uc3Qgb3V0ID0gcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVzfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogb3V0U2hhcGV9fSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhmbGF0KTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXMpO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBkaWFnQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERpYWcsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBkaWFnIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class Dilation2DProgram {\n constructor(convInfo) {\n this.variableNames = ['x', 'W'];\n this.outputShape = convInfo.outShape;\n const { inHeight, inWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth } = convInfo;\n const { top: padTop, left: padLeft } = padInfo;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlsYXRpb25fZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9kaWxhdGlvbl9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QixZQUFZLFFBQWlDO1FBSjdDLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFLekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBRXJDLE1BQU0sRUFDSixRQUFRLEVBQ1IsT0FBTyxFQUNQLE9BQU8sRUFDUCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixXQUFXLEVBQ1gsY0FBYyxFQUNkLGFBQWEsRUFDZCxHQUFHLFFBQVEsQ0FBQztRQUViLE1BQU0sRUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsR0FBRyxPQUFPLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsR0FBRztvQ0FDZ0IsWUFBWSxLQUFLLFdBQVc7aUNBQy9CLE1BQU0sS0FBSyxPQUFPOzs7Ozs7Ozs7Ozs7OzhCQWFyQixZQUFZO2lDQUNULGNBQWM7O2tDQUViLFFBQVE7a0NBQ1IsV0FBVztxQ0FDUixhQUFhOztzQ0FFWixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7O0tBZ0J4QyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgRGlsYXRpb24yRFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWyd4JywgJ1cnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjJESW5mbykge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5vdXRTaGFwZTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGluSGVpZ2h0LFxuICAgICAgaW5XaWR0aCxcbiAgICAgIHBhZEluZm8sXG4gICAgICBzdHJpZGVIZWlnaHQsXG4gICAgICBzdHJpZGVXaWR0aCxcbiAgICAgIGZpbHRlckhlaWdodCxcbiAgICAgIGZpbHRlcldpZHRoLFxuICAgICAgZGlsYXRpb25IZWlnaHQsXG4gICAgICBkaWxhdGlvbldpZHRoXG4gICAgfSA9IGNvbnZJbmZvO1xuXG4gICAgY29uc3Qge3RvcDogcGFkVG9wLCBsZWZ0OiBwYWRMZWZ0fSA9IHBhZEluZm87XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgY29uc3QgaXZlYzIgc3RyaWRlcyA9IGl2ZWMyKCR7c3RyaWRlSGVpZ2h0fSwgJHtzdHJpZGVXaWR0aH0pO1xuICAgICAgY29uc3QgaXZlYzIgcGFkcyA9IGl2ZWMyKCR7cGFkVG9wfSwgJHtwYWRMZWZ0fSk7XG4gICAgICBjb25zdCBmbG9hdCBuZWdfaW5maW5pdHkgPSAtMy40ZTM4O1xuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHMueDtcbiAgICAgICAgaW50IGQxID0gY29vcmRzLnc7XG4gICAgICAgIGl2ZWMyIG91dFRvcExlZnRDb3JuZXIgPVxuICAgICAgICAgICAgY29vcmRzLnl6ICogc3RyaWRlcyAtIHBhZHM7XG4gICAgICAgIGludCBoQmVnID0gb3V0VG9wTGVmdENvcm5lci54O1xuICAgICAgICBpbnQgd0JlZyA9IG91dFRvcExlZnRDb3JuZXIueTtcblxuICAgICAgICBmbG9hdCBjdXJWYWwgPSBuZWdfaW5maW5pdHk7XG4gICAgICAgIGZvciAoaW50IGggPSAwOyBoIDwgJHtmaWx0ZXJIZWlnaHR9OyBoKyspIHtcbiAgICAgICAgICBpbnQgaEluID0gaEJlZyArIGggKiAke2RpbGF0aW9uSGVpZ2h0fTtcblxuICAgICAgICAgIGlmIChoSW4gPj0gMCAmJiBoSW4gPCAke2luSGVpZ2h0fSkge1xuICAgICAgICAgICAgZm9yIChpbnQgdyA9IDA7IHcgPCAke2ZpbHRlcldpZHRofTsgdysrKSB7XG4gICAgICAgICAgICAgIGludCB3SW4gPSB3QmVnICsgdyAqICR7ZGlsYXRpb25XaWR0aH07XG5cbiAgICAgICAgICAgICAgaWYgKHdJbiA+PSAwICYmIHdJbiA8ICR7aW5XaWR0aH0pIHtcbiAgICAgICAgICAgICAgICBmbG9hdCB4VmFsID0gZ2V0WChiYXRjaCwgaEluLCB3SW4sIGQxKTtcbiAgICAgICAgICAgICAgICBmbG9hdCB3VmFsID0gZ2V0VyhoLCB3LCBkMSk7XG5cbiAgICAgICAgICAgICAgICBmbG9hdCB2YWwgPSB4VmFsICsgd1ZhbDtcbiAgICAgICAgICAgICAgICBpZiAodmFsID4gY3VyVmFsKSB7XG4gICAgICAgICAgICAgICAgICBjdXJWYWwgPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmxvYXQgcmVzdWx0ID0gY3VyVmFsO1xuICAgICAgICBzZXRPdXRwdXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Dilation2D } from '@tensorflow/tfjs-core';\nimport { Dilation2DProgram } from '../dilation_gpu';\nimport { reshape } from './Reshape';\nexport function dilation2D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dilations } = attrs;\n const convInfo = backend_util.computeDilation2DInfo(x.shape, filter.shape, strides, pad, 'NHWC' /* dataFormat */, dilations);\n let out;\n const program = new Dilation2DProgram(convInfo);\n out = backend.runWebGLProgram(program, [x, filter], 'float32');\n const outReshaped = reshape({ inputs: { x: out }, backend, attrs: { shape: convInfo.outShape } });\n backend.disposeIntermediateTensorInfo(out);\n return outReshaped;\n}\nexport const dilation2DConfig = {\n kernelName: Dilation2D,\n backendName: 'webgl',\n kernelFunc: dilation2D,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlsYXRpb24yRC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9EaWxhdGlvbjJELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUEwRSxNQUFNLHVCQUF1QixDQUFDO0FBR3hJLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUkxQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFeEMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUMvQyxDQUFDLENBQUMsS0FBeUMsRUFDM0MsTUFBTSxDQUFDLEtBQWlDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFDdEQsTUFBTSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLElBQUksR0FBZSxDQUFDO0lBRXBCLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsR0FBRyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sV0FBVyxHQUNiLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDNUUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBaUI7SUFDNUMsVUFBVSxFQUFFLFVBQVU7SUFDdEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFVBQW1DO0NBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEaWxhdGlvbjJELCBEaWxhdGlvbjJEQXR0cnMsIERpbGF0aW9uMkRJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7RGlsYXRpb24yRFByb2dyYW19IGZyb20gJy4uL2RpbGF0aW9uX2dwdSc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWxhdGlvbjJEKGFyZ3M6IHtcbiAgaW5wdXRzOiBEaWxhdGlvbjJESW5wdXRzLFxuICBhdHRyczogRGlsYXRpb24yREF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgcGFkLCBkaWxhdGlvbnN9ID0gYXR0cnM7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZURpbGF0aW9uMkRJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHN0cmlkZXMsIHBhZCxcbiAgICAgICdOSFdDJyAvKiBkYXRhRm9ybWF0ICovLCBkaWxhdGlvbnMpO1xuICBsZXQgb3V0OiBUZW5zb3JJbmZvO1xuXG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgRGlsYXRpb24yRFByb2dyYW0oY29udkluZm8pO1xuICBvdXQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeCwgZmlsdGVyXSwgJ2Zsb2F0MzInKTtcblxuICBjb25zdCBvdXRSZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiBvdXR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBjb252SW5mby5vdXRTaGFwZX19KTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhvdXQpO1xuXG4gIHJldHVybiBvdXRSZXNoYXBlZDtcbn1cblxuZXhwb3J0IGNvbnN0IGRpbGF0aW9uMkRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRGlsYXRpb24yRCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGRpbGF0aW9uMkQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Einsum, util } from '@tensorflow/tfjs-core';\nimport { multiply } from './Multiply';\nimport { reshape } from './Reshape';\nimport { sum } from './Sum';\nimport { transpose } from './Transpose';\nexport function einsum(args) {\n const { inputs, backend, attrs } = args;\n const { equation } = attrs;\n const tensors = inputs;\n const { allDims, summedDims, idDims } = backend_util.decodeEinsumEquation(equation, tensors.length);\n backend_util.checkEinsumDimSizes(allDims.length, idDims, tensors);\n const { path, steps } = backend_util.getEinsumComputePath(summedDims, idDims);\n const nSteps = steps.length;\n let out = null;\n let numDimsRemaining = allDims.length;\n const tensorsToDispose = [];\n for (let i = 0; i < nSteps; ++i) {\n for (const idTerm of steps[i]) {\n const { permutationIndices: perm, expandDims: dimsToExpand } = backend_util.getEinsumPermutation(numDimsRemaining, idDims[idTerm]);\n let x;\n if (backend_util.isIdentityPermutation(perm)) {\n x = tensors[idTerm];\n }\n else {\n x = transpose({ inputs: { x: tensors[idTerm] }, backend, attrs: { perm } });\n tensorsToDispose.push(x);\n }\n const targetShape = x.shape.slice();\n for (let k = 0; k < dimsToExpand.length; ++k) {\n targetShape.splice(dimsToExpand[k], 0, 1);\n }\n if (!util.arraysEqual(x.shape, targetShape)) {\n x = reshape({ inputs: { x }, backend, attrs: { shape: targetShape } });\n tensorsToDispose.push(x);\n }\n if (out === null) {\n out = x;\n }\n else {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n out = multiply({ inputs: { a: x, b: out }, backend });\n tensorsToDispose.push(out);\n }\n }\n if (i < nSteps - 1) {\n if (path[i] >= 0) {\n out = sum({\n inputs: { x: out },\n backend,\n attrs: {\n axis: path[i] - (allDims.length - numDimsRemaining),\n keepDims: false\n }\n });\n tensorsToDispose.push(out);\n }\n numDimsRemaining--;\n }\n }\n // Clean up intermediate tensors.\n for (const tensorInfo of tensorsToDispose) {\n if (tensorInfo === out) {\n continue;\n }\n backend.disposeIntermediateTensorInfo(tensorInfo);\n }\n return out;\n}\nexport const einsumConfig = {\n kernelName: Einsum,\n backendName: 'webgl',\n kernelFunc: einsum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWluc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0VpbnN1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBMkUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJMUksT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsTUFBTSxDQUNsQixJQUN5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFrQixDQUFDO0lBRW5DLE1BQU0sRUFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyxHQUMvQixZQUFZLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxZQUFZLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsTUFBTSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTVFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDNUIsSUFBSSxHQUFHLEdBQW9CLElBQUks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QVUsS0FBSyxHQUFHLEVBQUU7WUFDdEIsU0FBUztTQUNWO1FBQ0QsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ25EO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEVpbnN1bSwgRWluc3VtQXR0cnMsIEVpbnN1bUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3IsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5cbmltcG9ydCB7bXVsdGlwbHl9IGZyb20gJy4vTXVsdGlwbHknO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHtzdW19IGZyb20gJy4vU3VtJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlaW5zdW0oXG4gICAgYXJnczpcbiAgICAgICAge2lucHV0czogRWluc3VtSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCBhdHRyczogRWluc3VtQXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2VxdWF0aW9ufSA9IGF0dHJzO1xuICBjb25zdCB0ZW5zb3JzID0gaW5wdXRzIGFzIFRlbnNvcltdO1xuXG4gIGNvbnN0IHthbGxEaW1zLCBzdW1tZWREaW1zLCBpZERpbXN9ID1cbiAgICAgIGJhY2tlbmRfdXRpbC5kZWNvZGVFaW5zdW1FcXVhdGlvbihlcXVhdGlvbiwgdGVuc29ycy5sZW5ndGgpO1xuICBiYWNrZW5kX3V0aWwuY2hlY2tFaW5zdW1EaW1TaXplcyhhbGxEaW1zLmxlbmd0aCwgaWREaW1zLCB0ZW5zb3JzKTtcbiAgY29uc3Qge3BhdGgsIHN0ZXBzfSA9IGJhY2tlbmRfdXRpbC5nZXRFaW5zdW1Db21wdXRlUGF0aChzdW1tZWREaW1zLCBpZERpbXMpO1xuXG4gIGNvbnN0IG5TdGVwcyA9IHN0ZXBzLmxlbmd0aDtcbiAgbGV0IG91dDogVGVuc29ySW5mb3xudWxsID0gbnVsbDtcbiAgbGV0IG51bURpbXNSZW1haW5pbmcgPSBhbGxEaW1zLmxlbmd0aDtcbiAgY29uc3QgdGVuc29yc1RvRGlzcG9zZTogVGVuc29ySW5mb1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgblN0ZXBzOyArK2kpIHtcbiAgICBmb3IgKGNvbnN0IGlkVGVybSBvZiBzdGVwc1tpXSkge1xuICAgICAgY29uc3Qge3Blcm11dGF0aW9uSW5kaWNlczogcGVybSwgZXhwYW5kRGltczogZGltc1RvRXhwYW5kfSA9XG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldEVpbnN1bVBlcm11dGF0aW9uKG51bURpbXNSZW1haW5pbmcsIGlkRGltc1tpZFRlcm1dKTtcbiAgICAgIGxldCB4OiBUZW5zb3JJbmZvO1xuICAgICAgaWYgKGJhY2tlbmRfdXRpbC5pc0lkZW50aXR5UGVybXV0YXRpb24ocGVybSkpIHtcbiAgICAgICAgeCA9IHRlbnNvcnNbaWRUZXJtXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3g6IHRlbnNvcnNbaWRUZXJtXX0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybX19KTtcbiAgICAgICAgdGVuc29yc1RvRGlzcG9zZS5wdXNoKHgpO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0U2hhcGU6IG51bWJlcltdID0geC5zaGFwZS5zbGljZSgpO1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBkaW1zVG9FeHBhbmQubGVuZ3RoOyArK2spIHtcbiAgICAgICAgdGFyZ2V0U2hhcGUuc3BsaWNlKGRpbXNUb0V4cGFuZFtrXSwgMCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXRpbC5hcnJheXNFcXVhbCh4LnNoYXBlLCB0YXJnZXRTaGFwZSkpIHtcbiAgICAgICAgeCA9IHJlc2hhcGUoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiB0YXJnZXRTaGFwZX19KTtcbiAgICAgICAgdGVuc29yc1RvRGlzcG9zZS5wdXNoKHgpO1xuICAgICAgfVxuICAgICAgaWYgKG91dCA9PT0gbnVsbCkge1xuICAgICAgICBvdXQgPSB4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgICBvdXQgPSBtdWx0aXBseSh7aW5wdXRzOiB7YTogeCwgYjogb3V0fSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG4gICAgICAgIHRlbnNvcnNUb0Rpc3Bvc2UucHVzaChvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaSA8IG5TdGVwcyAtIDEpIHtcbiAgICAgIGlmIChwYXRoW2ldID49IDApIHtcbiAgICAgICAgb3V0ID0gc3VtKHtcbiAgICAgICAgICBpbnB1dHM6IHt4OiBvdXR9LFxuICAgICAgICAgIGJhY2tlbmQsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGF4aXM6IHBhdGhbaV0gLSAoYWxsRGltcy5sZW5ndGggLSBudW1EaW1zUmVtYWluaW5nKSxcbiAgICAgICAgICAgIGtlZXBEaW1zOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRlbnNvcnNUb0Rpc3Bvc2UucHVzaChvdXQpO1xuICAgICAgfVxuICAgICAgbnVtRGltc1JlbWFpbmluZy0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIENsZWFuIHVwIGludGVybWVkaWF0ZSB0ZW5zb3JzLlxuICBmb3IgKGNvbnN0IHRlbnNvckluZm8gb2YgdGVuc29yc1RvRGlzcG9zZSkge1xuICAgIGlmICh0ZW5zb3JJbmZvID09PSBvdXQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHRlbnNvckluZm8pO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGVpbnN1bUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFaW5zdW0sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBlaW5zdW0gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Elu } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst ELU = `return (x >= 0.0) ? x : (exp(x) - 1.0);`;\nconst 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`;\nconst elu = unaryKernelFunc({ opSnippet: ELU, packedOpSnippet: ELU_PACKED });\nexport const eluConfig = {\n kernelName: Elu,\n backendName: 'webgl',\n kernelFunc: elu\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWx1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0VsdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUEyQixNQUFNLHVCQUF1QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRSxNQUFNLEdBQUcsR0FBRyx5Q0FBeUMsQ0FBQztBQUV0RCxNQUFNLFVBQVUsR0FBRzs7Ozs7Ozs7O0NBU2xCLENBQUM7QUFFRixNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFbHUsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuY30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgRUxVID0gYHJldHVybiAoeCA+PSAwLjApID8geCA6IChleHAoeCkgLSAxLjApO2A7XG5cbmNvbnN0IEVMVV9QQUNLRUQgPSBgXG4gIHZlYzQgcmVzdWx0O1xuXG4gIHJlc3VsdC5yID0gKHguciA+PSAwLjApID8geC5yIDogKGV4cCh4LnIpIC0gMS4wKTtcbiAgcmVzdWx0LmcgPSAoeC5nID49IDAuMCkgPyB4LmcgOiAoZXhwKHguZykgLSAxLjApO1xuICByZXN1bHQuYiA9ICh4LmIgPj0gMC4wKSA/IHguYiA6IChleHAoeC5iKSAtIDEuMCk7XG4gIHJlc3VsdC5hID0gKHguYSA+PSAwLjApID8geC5hIDogKGV4cCh4LmEpIC0gMS4wKTtcblxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuY29uc3QgZWx1ID0gdW5hcnlLZXJuZWxGdW5jKHtvcFNuaXBwZXQ6IEVMVSwgcGFja2VkT3BTbmlwcGV0OiBFTFVfUEFDS0VEfSk7XG5cbmV4cG9ydCBjb25zdCBlbHVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRWx1LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogZWx1IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { EluGrad, env } from '@tensorflow/tfjs-core';\nimport { BinaryOpProgram } from '../binaryop_gpu';\nimport { BinaryOpPackedProgram } from '../binaryop_packed_gpu';\nconst ELU_DER = `return (b >= 0.0) ? a : a * (b + 1.0);`;\nconst 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`;\nexport const eluGrad = (args) => {\n const { inputs, backend } = args;\n const { dy, y } = inputs;\n const program = env().getBool('WEBGL_PACK_BINARY_OPERATIONS') ?\n new BinaryOpPackedProgram(ELU_DER_PACKED, dy.shape, y.shape) :\n new BinaryOpProgram(ELU_DER, dy.shape, y.shape);\n return backend.runWebGLProgram(program, [dy, y], dy.dtype);\n};\nexport const eluGradConfig = {\n kernelName: EluGrad,\n backendName: 'webgl',\n kernelFunc: eluGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWx1R3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9FbHVHcmFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxPQUFPLEVBQWlCLEdBQUcsRUFBdUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd4RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsTUFBTSxPQUFPLEdBQUcsd0NBQXdDLENBQUM7QUFDekQsTUFBTSxjQUFjLEdBQUc7OztDQUd0QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUNoQixDQUFDLElBQXdELEVBQWMsRUFBRTtJQUN2RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV2QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUkscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RWx1R3JhZCwgRWx1R3JhZElucHV0cywgZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0JpbmFyeU9wUHJvZ3JhbX0gZnJvbSAnLi4vYmluYXJ5b3BfZ3B1JztcbmltcG9ydCB7QmluYXJ5T3BQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9iaW5hcnlvcF9wYWNrZWRfZ3B1JztcblxuY29uc3QgRUxVX0RFUiA9IGByZXR1cm4gKGIgPj0gMC4wKSA/IGEgOiBhICogKGIgKyAxLjApO2A7XG5jb25zdCBFTFVfREVSX1BBQ0tFRCA9IGBcbiAgdmVjNCBiR1RFWmVybyA9IHZlYzQoZ3JlYXRlclRoYW5FcXVhbChiLCB2ZWM0KDAuKSkpO1xuICByZXR1cm4gKGJHVEVaZXJvICogYSkgKyAoKHZlYzQoMS4wKSAtIGJHVEVaZXJvKSAqIChhICogKGIgKyB2ZWM0KDEuMCkpKSk7XG5gO1xuXG5leHBvcnQgY29uc3QgZWx1R3JhZCA9XG4gICAgKGFyZ3M6IHtpbnB1dHM6IEVsdUdyYWRJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTogVGVuc29ySW5mbyA9PiB7XG4gICAgICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gICAgICBjb25zdCB7ZHksIHl9ID0gaW5wdXRzO1xuXG4gICAgICBjb25zdCBwcm9ncmFtID0gZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19CSU5BUllfT1BFUkFUSU9OUycpID9cbiAgICAgICAgICBuZXcgQmluYXJ5T3BQYWNrZWRQcm9ncmFtKEVMVV9ERVJfUEFDS0VELCBkeS5zaGFwZSwgeS5zaGFwZSkgOlxuICAgICAgICAgIG5ldyBCaW5hcnlPcFByb2dyYW0oRUxVX0RFUiwgZHkuc2hhcGUsIHkuc2hhcGUpO1xuICAgICAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFtkeSwgeV0sIGR5LmR0eXBlKTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgZWx1R3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFbHVHcmFkLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogZWx1R3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Equal } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { equalImplCPU } from '../kernel_utils/shared';\nconst PACKED_EQUAL = `\n return vec4(equal(a, b));\n`;\nconst EQUAL = `return float(a == b);`;\nexport const equal = binaryKernelFunc({\n opSnippet: EQUAL,\n packedOpSnippet: PACKED_EQUAL,\n dtype: 'bool',\n cpuKernelImpl: equalImplCPU,\n});\nexport const equalConfig = {\n kernelName: Equal,\n backendName: 'webgl',\n kernelFunc: equal\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvRXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBMkIsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsTUFBTSxZQUFZLEdBQUc7O0NBRXBCLENBQUM7QUFFRixNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7SUFDcEMsU0FBUyxFQUFFLEtBQUs7SUFDaEIsZUFBZSxFQUFFLFlBQVk7SUFDN0IsS0FBSyxFQUFFLE1BQU07SUFDYixhQUFhLEVBQUUsWUFBWTtDQUM1QixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxLQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VxdWFsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtlcXVhbEltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuY29uc3QgUEFDS0VEX0VRVUFMID0gYFxuICByZXR1cm4gdmVjNChlcXVhbChhLCBiKSk7XG5gO1xuXG5jb25zdCBFUVVBTCA9IGByZXR1cm4gZmxvYXQoYSA9PSBiKTtgO1xuXG5leHBvcnQgY29uc3QgZXF1YWwgPSBiaW5hcnlLZXJuZWxGdW5jKHtcbiAgb3BTbmlwcGV0OiBFUVVBTCxcbiAgcGFja2VkT3BTbmlwcGV0OiBQQUNLRURfRVFVQUwsXG4gIGR0eXBlOiAnYm9vbCcsXG4gIGNwdUtlcm5lbEltcGw6IGVxdWFsSW1wbENQVSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZXF1YWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRXF1YWwsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBlcXVhbCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Erf } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst 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 = ${backend_util.ERF_P};\n float a1 = ${backend_util.ERF_A1};\n float a2 = ${backend_util.ERF_A2};\n float a3 = ${backend_util.ERF_A3};\n float a4 = ${backend_util.ERF_A4};\n float a5 = ${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`;\nexport const erf = unaryKernelFunc({ opSnippet: ERF });\nexport const erfConfig = {\n kernelName: Erf,\n backendName: 'webgl',\n kernelFunc: erf,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0VyZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRSxNQUFNLEdBQUcsR0FBRzs7OztjQUlFLFlBQVksQ0FBQyxLQUFLO2VBQ2pCLFlBQVksQ0FBQyxNQUFNO2VBQ25CLFlBQVksQ0FBQyxNQUFNO2VBQ25CLFlBQVksQ0FBQyxNQUFNO2VBQ25CLFlBQVksQ0FBQyxNQUFNO2VBQ25CLFlBQVksQ0FBQyxNQUFNOzs7Ozs7Q0FNakMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEVyZiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4va2VybmVsX3V0aWxzL2tlcm5lbF9mdW5jc191dGlscyc7XG5cbmNvbnN0IEVSRiA9IGBcbiAgLy8gRXJyb3IgZnVuY3Rpb24gaXMgY2FsY3VsYXRlZCBhcHByb3hpbWF0ZWx5IHdpdGggZWxlbWVudGFyeSBmdW5jdGlvbi5cbiAgLy8gU2VlIFwiSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucyB3aXRoIEZvcm11bGFzLFxuICAvLyBHcmFwaHMsIGFuZCBNYXRoZW1hdGljYWwgVGFibGVzXCIsIEFicmFtb3dpdHogYW5kIFN0ZWd1bi5cbiAgZmxvYXQgcCA9ICR7YmFja2VuZF91dGlsLkVSRl9QfTtcbiAgZmxvYXQgYTEgPSAke2JhY2tlbmRfdXRpbC5FUkZfQTF9O1xuICBmbG9hdCBhMiA9ICR7YmFja2VuZF91dGlsLkVSRl9BMn07XG4gIGZsb2F0IGEzID0gJHtiYWNrZW5kX3V0aWwuRVJGX0EzfTtcbiAgZmxvYXQgYTQgPSAke2JhY2tlbmRfdXRpbC5FUkZfQTR9O1xuICBmbG9hdCBhNSA9ICR7YmFja2VuZF91dGlsLkVSRl9BNX07XG5cbiAgZmxvYXQgc2lnbiA9IHNpZ24oeCk7XG4gIHggPSBhYnMoeCk7XG4gIGZsb2F0IHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICByZXR1cm4gc2lnbiAqICgxLjAgLSAoKCgoKGE1KnQgKyBhNCkqdCkgKyBhMykqdCArIGEyKSp0ICsgYTEpKnQqZXhwKC14KngpKTtcbmA7XG5cbmV4cG9ydCBjb25zdCBlcmYgPSB1bmFyeUtlcm5lbEZ1bmMoe29wU25pcHBldDogRVJGfSk7XG5cbmV4cG9ydCBjb25zdCBlcmZDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRXJmLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogZXJmLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Exp } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET_UNARY, unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { expImplCPU } from '../kernel_utils/shared';\nexport const EXP = CHECK_NAN_SNIPPET_UNARY + `\n return exp(x);\n`;\nconst EXP_PACKED = `\n vec4 result = exp(x);\n bvec4 isNaN = isnan(x);\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`;\nexport const exp = unaryKernelFunc({\n opSnippet: EXP,\n packedOpSnippet: EXP_PACKED,\n cpuKernelImpl: expImplCPU,\n dtype: 'float32',\n});\nexport const expConfig = {\n kernelName: Exp,\n backendName: 'webgl',\n kernelFunc: exp\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0V4cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUEyQixNQUFNLHVCQUF1QixDQUFDO0FBRXBFLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLHVCQUF1QixHQUFHOztDQUU1QyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7Ozs7Ozs7OztDQVNsQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQztJQUNqQyxTQUFTLEVBQUUsR0FBRztJQUNkLGVBQWUsRUFBRSxVQUFVO0lBQzNCLGFBQWEsRUFBRSxVQUFVO0lBQ3pCLEtBQUssRUFBRSxTQUFTO0NBQ2pCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFeHAsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuY30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVF9VTkFSWSwgdW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7ZXhwSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmV4cG9ydCBjb25zdCBFWFAgPSBDSEVDS19OQU5fU05JUFBFVF9VTkFSWSArIGBcbiAgcmV0dXJuIGV4cCh4KTtcbmA7XG5cbmNvbnN0IEVYUF9QQUNLRUQgPSBgXG4gIHZlYzQgcmVzdWx0ID0gZXhwKHgpO1xuICBidmVjNCBpc05hTiA9IGlzbmFuKHgpO1xuICByZXN1bHQuciA9IGlzTmFOLnIgPyB4LnIgOiByZXN1bHQucjtcbiAgcmVzdWx0LmcgPSBpc05hTi5nID8geC5nIDogcmVzdWx0Lmc7XG4gIHJlc3VsdC5iID0gaXNOYU4uYiA/IHguYiA6IHJlc3VsdC5iO1xuICByZXN1bHQuYSA9IGlzTmFOLmEgPyB4LmEgOiByZXN1bHQuYTtcblxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IGV4cCA9IHVuYXJ5S2VybmVsRnVuYyh7XG4gIG9wU25pcHBldDogRVhQLFxuICBwYWNrZWRPcFNuaXBwZXQ6IEVYUF9QQUNLRUQsXG4gIGNwdUtlcm5lbEltcGw6IGV4cEltcGxDUFUsXG4gIGR0eXBlOiAnZmxvYXQzMicsXG59KTtcblxuZXhwb3J0IGNvbnN0IGV4cENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFeHAsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBleHAgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ExpandDims, util } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nexport function expandDims(args) {\n const { inputs, attrs, backend } = args;\n const { dim } = attrs;\n const { input } = inputs;\n const inputRank = input.shape.length;\n const newShape = input.shape.slice();\n let $dim = dim;\n if (dim < 0) {\n // Negative value is counted from the tail of rank.\n util.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`);\n $dim = inputRank + dim + 1;\n }\n newShape.splice($dim, 0, 1);\n return reshape({ inputs: { x: input }, backend, attrs: { shape: newShape } });\n}\nexport const expandDimsConfig = {\n kernelName: ExpandDims,\n backendName: 'webgl',\n kernelFunc: expandDims,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwYW5kRGltcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9FeHBhbmREaW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQTJFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2hJLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUkxQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsR0FBRyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFdkIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUM7SUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7UUFDWCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFDdkIsR0FBRyxFQUFFLENBQUMsaUNBQWlDLENBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQ3BELFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTVCLE9BQU8sT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBaUI7SUFDNUMsVUFBVSxFQUFFLFVBQVU7SUFDdEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFVBQW1DO0NBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0V4cGFuZERpbXMsIEV4cGFuZERpbXNBdHRycywgRXhwYW5kRGltc0lucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kRGltcyhhcmdzOiB7XG4gIGlucHV0czogRXhwYW5kRGltc0lucHV0cyxcbiAgYXR0cnM6IEV4cGFuZERpbXNBdHRycyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBhdHRycywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7ZGltfSA9IGF0dHJzO1xuICBjb25zdCB7aW5wdXR9ID0gaW5wdXRzO1xuXG4gIGNvbnN0IGlucHV0UmFuayA9IGlucHV0LnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgbmV3U2hhcGUgPSBpbnB1dC5zaGFwZS5zbGljZSgpO1xuICBsZXQgJGRpbSA9IGRpbTtcbiAgaWYgKGRpbSA8IDApIHtcbiAgICAvLyBOZWdhdGl2ZSB2YWx1ZSBpcyBjb3VudGVkIGZyb20gdGhlIHRhaWwgb2YgcmFuay5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgLShpbnB1dFJhbmsgKyAxKSA8PSBkaW0sXG4gICAgICAgICgpID0+IGBBeGlzIG11c3QgYmUgaW4gdGhlIGludGVydmFsIFskey0gKGlucHV0UmFuayArIDEpfSwgJHtcbiAgICAgICAgICAgIGlucHV0UmFua31dYCk7XG4gICAgJGRpbSA9IGlucHV0UmFuayArIGRpbSArIDE7XG4gIH1cbiAgbmV3U2hhcGUuc3BsaWNlKCRkaW0sIDAsIDEpO1xuXG4gIHJldHVybiByZXNoYXBlKHtpbnB1dHM6IHt4OiBpbnB1dH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IG5ld1NoYXBlfX0pO1xufVxuXG5leHBvcnQgY29uc3QgZXhwYW5kRGltc0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFeHBhbmREaW1zLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogZXhwYW5kRGltcyBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Expm1 } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { expm1ImplCPU } from '../kernel_utils/shared';\nconst EXPM1 = `return exp(x) - 1.0;`;\nexport const expm1 = unaryKernelFunc({ opSnippet: EXPM1, packedOpSnippet: EXPM1, cpuKernelImpl: expm1ImplCPU });\nexport const expm1Config = {\n kernelName: Expm1,\n backendName: 'webgl',\n kernelFunc: expm1\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwbTEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvRXhwbTEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBMkIsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE1BQU0sS0FBSyxHQUFHLHNCQUFzQixDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQ2hDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLEtBQThCO0NBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RXhwbTEsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuY30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7ZXhwbTFJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuY29uc3QgRVhQTTEgPSBgcmV0dXJuIGV4cCh4KSAtIDEuMDtgO1xuXG5leHBvcnQgY29uc3QgZXhwbTEgPSB1bmFyeUtlcm5lbEZ1bmMoXG4gICAge29wU25pcHBldDogRVhQTTEsIHBhY2tlZE9wU25pcHBldDogRVhQTTEsIGNwdUtlcm5lbEltcGw6IGV4cG0xSW1wbENQVX0pO1xuXG5leHBvcnQgY29uc3QgZXhwbTFDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRXhwbTEsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBleHBtMSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class FFTProgram {\n constructor(component, inputShape, inverse) {\n this.variableNames = ['real', 'imag'];\n const innerDim = inputShape[1];\n this.outputShape = inputShape;\n const exponentMultiplierSnippet = inverse ? `2.0 * ${Math.PI}` : `-2.0 * ${Math.PI}`;\n const resultDenominator = inverse ? `${innerDim}.0` : '1.0';\n let opString;\n if (component === 'real') {\n opString = 'return real * expR - imag * expI;';\n }\n else if (component === 'imag') {\n opString = 'return real * expI + imag * expR;';\n }\n else {\n throw new Error(`FFT component must be either \"real\" or \"imag\", got ${component}.`);\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmZ0X2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvZmZ0X2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8sVUFBVTtJQUtyQixZQUNJLFNBQXdCLEVBQUUsVUFBNEIsRUFDdEQsT0FBZ0I7UUFOcEIsa0JBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQU8vQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFFOUIsTUFBTSx5QkFBeUIsR0FDM0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUU1RCxJQUFJLFFBQWdCLENBQUM7UUFDckIsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFO1lBQ3hCLFFBQVEsR0FBRyxtQ0FBbUMsQ0FBQztTQUNoRDthQUFNLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUMvQixRQUFRLEdBQUcsbUNBQW1DLENBQUM7U0FDaEQ7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQ1gsc0RBQXNELFNBQVMsR0FBRyxDQUFDLENBQUM7U0FDekU7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO3lDQUNxQix5QkFBeUI7OztVQUd4RCxRQUFROzs7O2tEQUlnQyxRQUFROzs7Ozs7OEJBTTVCLFFBQVE7Ozs7Ozs7Ozt5REFTbUIsaUJBQWlCOzs7Ozs7Ozs7O0tBVXJFLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgRkZUUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3JlYWwnLCAnaW1hZyddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBjb21wb25lbnQ6ICdyZWFsJ3wnaW1hZycsIGlucHV0U2hhcGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICBpbnZlcnNlOiBib29sZWFuKSB7XG4gICAgY29uc3QgaW5uZXJEaW0gPSBpbnB1dFNoYXBlWzFdO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlO1xuXG4gICAgY29uc3QgZXhwb25lbnRNdWx0aXBsaWVyU25pcHBldCA9XG4gICAgICAgIGludmVyc2UgPyBgMi4wICogJHtNYXRoLlBJfWAgOiBgLTIuMCAqICR7TWF0aC5QSX1gO1xuICAgIGNvbnN0IHJlc3VsdERlbm9taW5hdG9yID0gaW52ZXJzZSA/IGAke2lubmVyRGltfS4wYCA6ICcxLjAnO1xuXG4gICAgbGV0IG9wU3RyaW5nOiBzdHJpbmc7XG4gICAgaWYgKGNvbXBvbmVudCA9PT0gJ3JlYWwnKSB7XG4gICAgICBvcFN0cmluZyA9ICdyZXR1cm4gcmVhbCAqIGV4cFIgLSBpbWFnICogZXhwSTsnO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50ID09PSAnaW1hZycpIHtcbiAgICAgIG9wU3RyaW5nID0gJ3JldHVybiByZWFsICogZXhwSSArIGltYWcgKiBleHBSOyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRkZUIGNvbXBvbmVudCBtdXN0IGJlIGVpdGhlciBcInJlYWxcIiBvciBcImltYWdcIiwgZ290ICR7Y29tcG9uZW50fS5gKTtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgY29uc3QgZmxvYXQgZXhwb25lbnRNdWx0aXBsaWVyID0gJHtleHBvbmVudE11bHRpcGxpZXJTbmlwcGV0fTtcblxuICAgICAgZmxvYXQgdW5hcnlPcENvbXBsZXgoZmxvYXQgcmVhbCwgZmxvYXQgZXhwUiwgZmxvYXQgaW1hZywgZmxvYXQgZXhwSSkge1xuICAgICAgICAke29wU3RyaW5nfVxuICAgICAgfVxuXG4gICAgICBmbG9hdCBtdWxNYXRERlQoaW50IGJhdGNoLCBpbnQgaW5kZXgpIHtcbiAgICAgICAgZmxvYXQgaW5kZXhSYXRpbyA9IGZsb2F0KGluZGV4KSAvIGZsb2F0KCR7aW5uZXJEaW19KTtcbiAgICAgICAgZmxvYXQgZXhwb25lbnRNdWx0aXBsaWVyVGltZXNJbmRleFJhdGlvID1cbiAgICAgICAgICAgIGV4cG9uZW50TXVsdGlwbGllciAqIGluZGV4UmF0aW87XG5cbiAgICAgICAgZmxvYXQgcmVzdWx0ID0gMC4wO1xuXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgJHtpbm5lckRpbX07IGkrKykge1xuICAgICAgICAgIC8vIHggPSAoLTJ8MiAqIFBJIC8gTikgKiBpbmRleCAqIGk7XG4gICAgICAgICAgZmxvYXQgeCA9IGV4cG9uZW50TXVsdGlwbGllclRpbWVzSW5kZXhSYXRpbyAqIGZsb2F0KGkpO1xuICAgICAgICAgIGZsb2F0IGV4cFIgPSBjb3MoeCk7XG4gICAgICAgICAgZmxvYXQgZXhwSSA9IHNpbih4KTtcbiAgICAgICAgICBmbG9hdCByZWFsID0gZ2V0UmVhbChiYXRjaCwgaSk7XG4gICAgICAgICAgZmxvYXQgaW1hZyA9IGdldEltYWcoYmF0Y2gsIGkpO1xuXG4gICAgICAgICAgcmVzdWx0ICs9XG4gICAgICAgICAgICAgIHVuYXJ5T3BDb21wbGV4KHJlYWwsIGV4cFIsIGltYWcsIGV4cEkpIC8gJHtyZXN1bHREZW5vbWluYXRvcn07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWMyIGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBzZXRPdXRwdXQobXVsTWF0REZUKGNvb3Jkc1swXSwgY29vcmRzWzFdKSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { FFTProgram } from '../fft_gpu';\nimport { complex } from './Complex';\nimport { reshape } from './Reshape';\nexport function fftImpl(x, inverse, backend) {\n const xData = backend.texData.get(x.dataId);\n const inputSize = util.sizeFromShape(x.shape);\n // Collapse all outer dimensions to a single batch dimension.\n const innerDimensionSize = x.shape[x.shape.length - 1];\n const batch = inputSize / innerDimensionSize;\n const input2D = reshape({ inputs: { x }, backend, attrs: { shape: [batch, innerDimensionSize] } });\n const xShape = input2D.shape;\n const realProgram = new FFTProgram('real', xShape, inverse);\n const imagProgram = new FFTProgram('imag', xShape, inverse);\n const inputs = [\n {\n dataId: xData.complexTensorInfos.real.dataId,\n dtype: xData.complexTensorInfos.real.dtype,\n shape: xShape\n },\n {\n dataId: xData.complexTensorInfos.imag.dataId,\n dtype: xData.complexTensorInfos.imag.dtype,\n shape: xShape\n }\n ];\n const realPart = backend.runWebGLProgram(realProgram, inputs, 'float32');\n const imagPart = backend.runWebGLProgram(imagProgram, inputs, 'float32');\n const complexOutput = complex({ inputs: { real: realPart, imag: imagPart }, backend });\n backend.disposeIntermediateTensorInfo(realPart);\n backend.disposeIntermediateTensorInfo(imagPart);\n const complexOutputReshaped = reshape({ inputs: { x: complexOutput }, backend, attrs: { shape: x.shape } });\n backend.disposeIntermediateTensorInfo(input2D);\n backend.disposeIntermediateTensorInfo(complexOutput);\n return complexOutputReshaped;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZUX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvRkZUX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFhLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3ZELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFdEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxPQUFPLENBQ25CLENBQWEsRUFBRSxPQUFnQixFQUFFLE9BQXlCO0lBQzVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5Qyw2REFBNkQ7SUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sS0FBSyxHQUFHLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztJQUU3QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ25CLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUF5QixDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1RCxNQUFNLE1BQU0sR0FBRztRQUNiO1lBQ0UsTUFBTSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUM1QyxLQUFLLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLO1lBQzFDLEtBQUssRUFBRSxNQUFNO1NBQ2Q7UUFDRDtZQUNFLE1BQU0sRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDNUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSztZQUMxQyxLQUFLLEVBQUUsTUFBTTtTQUNkO0tBQ0YsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFekUsTUFBTSxhQUFhLEdBQ2YsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUVqRSxPQUFPLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWhELE1BQU0scUJBQXFCLEdBQ3ZCLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxhQUFhLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFFNUUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRCxPQUFPLHFCQUFxQixDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7RkZUUHJvZ3JhbX0gZnJvbSAnLi4vZmZ0X2dwdSc7XG5cbmltcG9ydCB7Y29tcGxleH0gZnJvbSAnLi9Db21wbGV4JztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZmdEltcGwoXG4gICAgeDogVGVuc29ySW5mbywgaW52ZXJzZTogYm9vbGVhbiwgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCk6IFRlbnNvckluZm8ge1xuICBjb25zdCB4RGF0YSA9IGJhY2tlbmQudGV4RGF0YS5nZXQoeC5kYXRhSWQpO1xuXG4gIGNvbnN0IGlucHV0U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSh4LnNoYXBlKTtcbiAgLy8gQ29sbGFwc2UgYWxsIG91dGVyIGRpbWVuc2lvbnMgdG8gYSBzaW5nbGUgYmF0Y2ggZGltZW5zaW9uLlxuICBjb25zdCBpbm5lckRpbWVuc2lvblNpemUgPSB4LnNoYXBlW3guc2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGJhdGNoID0gaW5wdXRTaXplIC8gaW5uZXJEaW1lbnNpb25TaXplO1xuXG4gIGNvbnN0IGlucHV0MkQgPSByZXNoYXBlKFxuICAgICAge2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBbYmF0Y2gsIGlubmVyRGltZW5zaW9uU2l6ZV19fSk7XG5cbiAgY29uc3QgeFNoYXBlID0gaW5wdXQyRC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCByZWFsUHJvZ3JhbSA9IG5ldyBGRlRQcm9ncmFtKCdyZWFsJywgeFNoYXBlLCBpbnZlcnNlKTtcbiAgY29uc3QgaW1hZ1Byb2dyYW0gPSBuZXcgRkZUUHJvZ3JhbSgnaW1hZycsIHhTaGFwZSwgaW52ZXJzZSk7XG5cbiAgY29uc3QgaW5wdXRzID0gW1xuICAgIHtcbiAgICAgIGRhdGFJZDogeERhdGEuY29tcGxleFRlbnNvckluZm9zLnJlYWwuZGF0YUlkLFxuICAgICAgZHR5cGU6IHhEYXRhLmNvbXBsZXhUZW5zb3JJbmZvcy5yZWFsLmR0eXBlLFxuICAgICAgc2hhcGU6IHhTaGFwZVxuICAgIH0sXG4gICAge1xuICAgICAgZGF0YUlkOiB4RGF0YS5jb21wbGV4VGVuc29ySW5mb3MuaW1hZy5kYXRhSWQsXG4gICAgICBkdHlwZTogeERhdGEuY29tcGxleFRlbnNvckluZm9zLmltYWcuZHR5cGUsXG4gICAgICBzaGFwZTogeFNoYXBlXG4gICAgfVxuICBdO1xuXG4gIGNvbnN0IHJlYWxQYXJ0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocmVhbFByb2dyYW0sIGlucHV0cywgJ2Zsb2F0MzInKTtcbiAgY29uc3QgaW1hZ1BhcnQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShpbWFnUHJvZ3JhbSwgaW5wdXRzLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGNvbXBsZXhPdXRwdXQgPVxuICAgICAgY29tcGxleCh7aW5wdXRzOiB7cmVhbDogcmVhbFBhcnQsIGltYWc6IGltYWdQYXJ0fSwgYmFja2VuZH0pO1xuXG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbFBhcnQpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGltYWdQYXJ0KTtcblxuICBjb25zdCBjb21wbGV4T3V0cHV0UmVzaGFwZWQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogY29tcGxleE91dHB1dH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IHguc2hhcGV9fSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbnB1dDJEKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhjb21wbGV4T3V0cHV0KTtcbiAgcmV0dXJuIGNvbXBsZXhPdXRwdXRSZXNoYXBlZDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FFT } from '@tensorflow/tfjs-core';\nimport { fftImpl } from './FFT_impl';\nexport function fft(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n return fftImpl(input, false /* inverse */, backend);\n}\nexport const fftConfig = {\n kernelName: FFT,\n backendName: 'webgl',\n kernelFunc: fft\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZULmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0ZGVC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUFzQyxNQUFNLHVCQUF1QixDQUFDO0FBSS9FLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFvRDtJQUV0RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXZCLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtGRlQsIEZGVElucHV0cywgS2VybmVsQ29uZmlnLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5pbXBvcnQge2ZmdEltcGx9IGZyb20gJy4vRkZUX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZmZ0KGFyZ3M6IHtpbnB1dHM6IEZGVElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbnB1dH0gPSBpbnB1dHM7XG5cbiAgcmV0dXJuIGZmdEltcGwoaW5wdXQsIGZhbHNlIC8qIGludmVyc2UgKi8sIGJhY2tlbmQpO1xufVxuXG5leHBvcnQgY29uc3QgZmZ0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZGVCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGZmdFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class FillProgram {\n constructor(shape, value) {\n this.outputShape = [];\n this.customUniforms = [{ name: 'value', type: 'float' }];\n this.variableNames = ['x'];\n this.outputShape = shape;\n this.userCode = `\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsbF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2ZpbGxfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE1BQU0sT0FBTyxXQUFXO0lBTXRCLFlBQVksS0FBZSxFQUFFLEtBQWE7UUFKMUMsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFFM0IsbUJBQWMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBc0IsRUFBQyxDQUFDLENBQUM7UUFHL0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUksQ0FBQyxRQUFRLEdBQUc7Ozs7O0tBS2YsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5pbXBvcnQge1VuaWZvcm1UeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBjbGFzcyBGaWxsUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXM6IHN0cmluZ1tdO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgY3VzdG9tVW5pZm9ybXMgPSBbe25hbWU6ICd2YWx1ZScsIHR5cGU6ICdmbG9hdCcgYXMgVW5pZm9ybVR5cGV9XTtcblxuICBjb25zdHJ1Y3RvcihzaGFwZTogbnVtYmVyW10sIHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnZhcmlhYmxlTmFtZXMgPSBbJ3gnXTtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gc2hhcGU7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAvLyBJbnB1dCBjYW4gYmUgb2J0YWluZWQgZnJvbSB1bmlmb3JtIHZhbHVlLlxuICAgICAgICBzZXRPdXRwdXQodmFsdWUpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Fill, util } from '@tensorflow/tfjs-core';\nimport { FillProgram } from '../fill_gpu';\nexport function fill(args) {\n const { backend, attrs } = args;\n const { shape, value } = attrs;\n let { dtype } = attrs;\n dtype = dtype || util.inferDtype(value);\n if (dtype === 'string') {\n // String type should be handled in CPU memory.\n const values = util.getArrayFromDType(dtype, util.sizeFromShape(shape));\n values.fill(value);\n return backend.makeTensorInfo(shape, dtype, values);\n }\n else {\n const program = new FillProgram(shape, value);\n const customValues = [[value]];\n return backend.runWebGLProgram(program, [], dtype, customValues);\n }\n}\nexport const fillConfig = {\n kernelName: Fill,\n backendName: 'webgl',\n kernelFunc: fill\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9GaWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQW1ELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFeEMsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFtRDtJQUV0RSxNQUFNLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUM5QixNQUFNLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixJQUFJLEVBQUMsS0FBSyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXBCLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4QyxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEIsK0NBQStDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDN0IsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDckQ7U0FBTTtRQUNMLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFlLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBZSxDQUFDLENBQUMsQ0FBQztRQUN6QyxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDbEU7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtGaWxsLCBGaWxsQXR0cnMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7RmlsbFByb2dyYW19IGZyb20gJy4uL2ZpbGxfZ3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGwoYXJnczoge2JhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF0dHJzOiBGaWxsQXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtzaGFwZSwgdmFsdWV9ID0gYXR0cnM7XG4gIGxldCB7ZHR5cGV9ID0gYXR0cnM7XG5cbiAgZHR5cGUgPSBkdHlwZSB8fCB1dGlsLmluZmVyRHR5cGUodmFsdWUpO1xuXG4gIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTdHJpbmcgdHlwZSBzaG91bGQgYmUgaGFuZGxlZCBpbiBDUFUgbWVtb3J5LlxuICAgIGNvbnN0IHZhbHVlcyA9IHV0aWwuZ2V0QXJyYXlGcm9tRFR5cGUoZHR5cGUsIHV0aWwuc2l6ZUZyb21TaGFwZShzaGFwZSkpO1xuICAgIHZhbHVlcy5maWxsKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oc2hhcGUsIGR0eXBlLCB2YWx1ZXMpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHByb2dyYW0gPSBuZXcgRmlsbFByb2dyYW0oc2hhcGUsIHZhbHVlIGFzIG51bWJlcik7XG4gICAgY29uc3QgY3VzdG9tVmFsdWVzID0gW1t2YWx1ZSBhcyBudW1iZXJdXTtcbiAgICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW10sIGR0eXBlLCBjdXN0b21WYWx1ZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWxsQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZpbGwsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBmaWxsIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class FlipLeftRightProgram {\n constructor(imageShape) {\n this.variableNames = ['Image'];\n this.outputShape = [];\n const imageWidth = imageShape[2];\n this.outputShape = imageShape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpcF9sZWZ0X3JpZ2h0X2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvZmxpcF9sZWZ0X3JpZ2h0X2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBSy9CLFlBQVksVUFBNEM7UUFKeEQsa0JBQWEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBSXpCLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUU5QixJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozt5QkFLSyxVQUFVOzt1Q0FFSSxVQUFVOzs7Ozs7O0tBTzVDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgRmxpcExlZnRSaWdodFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydJbWFnZSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihpbWFnZVNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgIGNvbnN0IGltYWdlV2lkdGggPSBpbWFnZVNoYXBlWzJdO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBpbWFnZVNoYXBlO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIGludCB4ID0gY29vcmRzWzJdO1xuXG4gICAgICAgICAgaW50IGNvb3JkWCA9ICR7aW1hZ2VXaWR0aH0gLSB4IC0gMTtcbiAgICAgICAgICBmbG9hdCBvdXRwdXRWYWx1ZTtcbiAgICAgICAgICBpZihjb29yZFggPj0gMCAmJiBjb29yZFggPCAke2ltYWdlV2lkdGh9KSB7XG4gICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IGdldEltYWdlKGNvb3Jkc1swXSwgY29vcmRzWzFdLCBjb29yZFgsIGNvb3Jkc1szXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dFZhbHVlID0gZ2V0SW1hZ2UoY29vcmRzWzBdLCBjb29yZHNbMV0sIGNvb3Jkc1syXSwgY29vcmRzWzNdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0T3V0cHV0KG91dHB1dFZhbHVlKTtcbiAgICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FlipLeftRight } from '@tensorflow/tfjs-core';\nimport { FlipLeftRightProgram } from '../flip_left_right_gpu';\nexport const flipLeftRightConfig = {\n kernelName: FlipLeftRight,\n backendName: 'webgl',\n kernelFunc: ({ inputs, backend }) => {\n const { image } = inputs;\n const webglBackend = backend;\n const program = new FlipLeftRightProgram(image.shape);\n const output = webglBackend.runWebGLProgram(program, [image], image.dtype);\n return output;\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxpcExlZnRSaWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9GbGlwTGVmdFJpZ2h0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxhQUFhLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFHekUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxFQUFFLEVBQUU7UUFDaEMsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLE1BQTZCLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsT0FBMkIsQ0FBQztRQUVqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG9CQUFvQixDQUFFLEtBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBUZW5zb3I0RH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7RmxpcExlZnRSaWdodCwgRmxpcExlZnRSaWdodElucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7RmxpcExlZnRSaWdodFByb2dyYW19IGZyb20gJy4uL2ZsaXBfbGVmdF9yaWdodF9ncHUnO1xuXG5leHBvcnQgY29uc3QgZmxpcExlZnRSaWdodENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBGbGlwTGVmdFJpZ2h0LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogKHtpbnB1dHMsIGJhY2tlbmR9KSA9PiB7XG4gICAgY29uc3Qge2ltYWdlfSA9IGlucHV0cyBhcyBGbGlwTGVmdFJpZ2h0SW5wdXRzO1xuICAgIGNvbnN0IHdlYmdsQmFja2VuZCA9IGJhY2tlbmQgYXMgTWF0aEJhY2tlbmRXZWJHTDtcblxuICAgIGNvbnN0IHByb2dyYW0gPSBuZXcgRmxpcExlZnRSaWdodFByb2dyYW0oKGltYWdlIGFzIFRlbnNvcjREKS5zaGFwZSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gd2ViZ2xCYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbaW1hZ2VdLCBpbWFnZS5kdHlwZSk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Floor } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { floorImplCPU } from '../kernel_utils/shared';\nconst FLOOR = `return floor(x);`;\nexport const floor = unaryKernelFunc({ opSnippet: FLOOR, packedOpSnippet: FLOOR, cpuKernelImpl: floorImplCPU });\nexport const floorConfig = {\n kernelName: Floor,\n backendName: 'webgl',\n kernelFunc: floor,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvRmxvb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFcEQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FDaEMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsS0FBSztDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Rmxvb3IsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7Zmxvb3JJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuY29uc3QgRkxPT1IgPSBgcmV0dXJuIGZsb29yKHgpO2A7XG5cbmV4cG9ydCBjb25zdCBmbG9vciA9IHVuYXJ5S2VybmVsRnVuYyhcbiAgICB7b3BTbmlwcGV0OiBGTE9PUiwgcGFja2VkT3BTbmlwcGV0OiBGTE9PUiwgY3B1S2VybmVsSW1wbDogZmxvb3JJbXBsQ1BVfSk7XG5cbmV4cG9ydCBjb25zdCBmbG9vckNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBGbG9vcixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGZsb29yLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FloorDiv } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\n// We use native integer division to deal with floating point imprecision. Since\n// we implement floor division and glsl implements truncated division, we\n// correct for this by subtracting 1 from result when the result is negative and\n// there is a remainder.\nconst 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`;\nconst 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`;\nexport const floorDiv = binaryKernelFunc({ opSnippet: INT_DIV, packedOpSnippet: INT_DIV_PACKED, dtype: 'int32' });\nexport const floorDivConfig = {\n kernelName: FloorDiv,\n backendName: 'webgl',\n kernelFunc: floorDiv\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvb3JEaXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvRmxvb3JEaXYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBMkIsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxnRkFBZ0Y7QUFDaEYseUVBQXlFO0FBQ3pFLGdGQUFnRjtBQUNoRix3QkFBd0I7QUFDeEIsTUFBTSxPQUFPLEdBQUc7Ozs7Ozs7Ozs7Q0FVZixDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCdEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FDcEMsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsUUFBaUM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtGbG9vckRpdiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuXG4vLyBXZSB1c2UgbmF0aXZlIGludGVnZXIgZGl2aXNpb24gdG8gZGVhbCB3aXRoIGZsb2F0aW5nIHBvaW50IGltcHJlY2lzaW9uLiBTaW5jZVxuLy8gd2UgaW1wbGVtZW50IGZsb29yIGRpdmlzaW9uIGFuZCBnbHNsIGltcGxlbWVudHMgdHJ1bmNhdGVkIGRpdmlzaW9uLCB3ZVxuLy8gY29ycmVjdCBmb3IgdGhpcyBieSBzdWJ0cmFjdGluZyAxIGZyb20gcmVzdWx0IHdoZW4gdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSBhbmRcbi8vIHRoZXJlIGlzIGEgcmVtYWluZGVyLlxuY29uc3QgSU5UX0RJViA9IGBcbiAgZmxvYXQgcyA9IHNpZ24oYSkgKiBzaWduKGIpO1xuICBpbnQgaWEgPSByb3VuZChhKTtcbiAgaW50IGliID0gcm91bmQoYik7XG4gIGlmIChpYiAhPSAwKSB7XG4gICAgLy8gV2luZG93cyAoRDNEKSB3YW50cyBndWFyYW50ZWVkIG5vbi16ZXJvIGludCBkaXZpc2lvbiBhdCBjb21waWxlLXRpbWUuXG4gICAgcmV0dXJuIGZsb2F0KGlkaXYoaWEsIGliLCBzKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuYDtcblxuY29uc3QgSU5UX0RJVl9QQUNLRUQgPSBgXG4gIGl2ZWM0IGlhID0gcm91bmQoYSk7XG4gIGl2ZWM0IGliID0gcm91bmQoYik7XG4gIGJ2ZWM0IGNvbmQgPSBub3RFcXVhbChpYiwgaXZlYzQoMCkpO1xuICBpdmVjNCByZXN1bHQgPSBpdmVjNCgwKTtcbiAgdmVjNCBzID0gc2lnbihhKSAqIHNpZ24oYik7XG5cbiAgLy8gV2luZG93cyAoRDNEKSB3YW50cyBndWFyYW50ZWVkIG5vbi16ZXJvIGludCBkaXZpc2lvbiBhdCBjb21waWxlLXRpbWUuXG4gIGlmIChjb25kWzBdKSB7XG4gICAgcmVzdWx0WzBdID0gaWRpdihpYVswXSwgaWJbMF0sIHNbMF0pO1xuICB9XG4gIGlmIChjb25kWzFdKSB7XG4gICAgcmVzdWx0WzFdID0gaWRpdihpYVsxXSwgaWJbMV0sIHNbMV0pO1xuICB9XG4gIGlmIChjb25kWzJdKSB7XG4gICAgcmVzdWx0WzJdID0gaWRpdihpYVsyXSwgaWJbMl0sIHNbMl0pO1xuICB9XG4gIGlmIChjb25kWzNdKSB7XG4gICAgcmVzdWx0WzNdID0gaWRpdihpYVszXSwgaWJbM10sIHNbM10pO1xuICB9XG4gIHJldHVybiB2ZWM0KHJlc3VsdCk7XG5gO1xuXG5leHBvcnQgY29uc3QgZmxvb3JEaXYgPSBiaW5hcnlLZXJuZWxGdW5jKFxuICAgIHtvcFNuaXBwZXQ6IElOVF9ESVYsIHBhY2tlZE9wU25pcHBldDogSU5UX0RJVl9QQUNLRUQsIGR0eXBlOiAnaW50MzInfSk7XG5cbmV4cG9ydCBjb25zdCBmbG9vckRpdkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBGbG9vckRpdixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGZsb29yRGl2IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from '../../glsl_version';\nexport class FromPixelsProgram {\n constructor(outputShape) {\n this.variableNames = ['A'];\n const glsl = getGlslDifferences();\n const [height, width,] = outputShape;\n this.outputShape = outputShape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbV9waXhlbHNfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0Zyb21QaXhlbHNfdXRpbHMvZnJvbV9waXhlbHNfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR3RELE1BQU0sT0FBTyxpQkFBaUI7SUFLNUIsWUFBWSxXQUFxQjtRQUpqQyxrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFLcEIsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRyxHQUFHLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7dURBTW1DLEtBQUssT0FBTyxNQUFNOzt3QkFFakQsSUFBSSxDQUFDLFNBQVM7Ozs7Ozs7Ozs7Ozs7O0tBY2pDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Z2V0R2xzbERpZmZlcmVuY2VzfSBmcm9tICcuLi8uLi9nbHNsX3ZlcnNpb24nO1xuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4uLy4uL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgRnJvbVBpeGVsc1Byb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydBJ107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihvdXRwdXRTaGFwZTogbnVtYmVyW10pIHtcbiAgICBjb25zdCBnbHNsID0gZ2V0R2xzbERpZmZlcmVuY2VzKCk7XG4gICAgY29uc3QgW2hlaWdodCwgd2lkdGgsIF0gPSBvdXRwdXRTaGFwZTtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gb3V0cHV0U2hhcGU7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzMgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCB0ZXhSID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgdGV4QyA9IGNvb3Jkc1sxXTtcbiAgICAgICAgaW50IGRlcHRoID0gY29vcmRzWzJdO1xuICAgICAgICB2ZWMyIHV2ID0gKHZlYzIodGV4QywgdGV4UikgKyBoYWxmQ1IpIC8gdmVjMigke3dpZHRofS4wLCAke2hlaWdodH0uMCk7XG5cbiAgICAgICAgdmVjNCB2YWx1ZXMgPSAke2dsc2wudGV4dHVyZTJEfShBLCB1dik7XG4gICAgICAgIGZsb2F0IHZhbHVlO1xuICAgICAgICBpZiAoZGVwdGggPT0gMCkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVzLnI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVzLmc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMikge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVzLmI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVzLmE7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRPdXRwdXQoZmxvb3IodmFsdWUgKiAyNTUuMCArIDAuNSkpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlslDifferences } from '../../glsl_version';\nexport class FromPixelsPackedProgram {\n constructor(outputShape) {\n this.variableNames = ['A'];\n this.packedInputs = false;\n this.packedOutput = true;\n const glsl = getGlslDifferences();\n const [height, width,] = outputShape;\n this.outputShape = outputShape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbV9waXhlbHNfcGFja2VkX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Gcm9tUGl4ZWxzX3V0aWxzL2Zyb21fcGl4ZWxzX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHdEQsTUFBTSxPQUFPLHVCQUF1QjtJQU9sQyxZQUFZLFdBQXFCO1FBTmpDLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUd0QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUdsQixNQUFNLElBQUksR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFHLEdBQUcsV0FBVyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs4QkFlVSxLQUFLLE9BQU8sTUFBTTs0QkFDcEIsSUFBSSxDQUFDLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7VUFnQmhDLElBQUksQ0FBQyxNQUFNOztLQUVoQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2dldEdsc2xEaWZmZXJlbmNlc30gZnJvbSAnLi4vLi4vZ2xzbF92ZXJzaW9uJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuLi8uLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIEZyb21QaXhlbHNQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnQSddO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHBhY2tlZElucHV0cyA9IGZhbHNlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKG91dHB1dFNoYXBlOiBudW1iZXJbXSkge1xuICAgIGNvbnN0IGdsc2wgPSBnZXRHbHNsRGlmZmVyZW5jZXMoKTtcbiAgICBjb25zdCBbaGVpZ2h0LCB3aWR0aCwgXSA9IG91dHB1dFNoYXBlO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjMyBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IHRleFIgPSBjb29yZHNbMF07XG4gICAgICAgIGludCB0ZXhDID0gY29vcmRzWzFdO1xuICAgICAgICBpbnQgZGVwdGggPSBjb29yZHNbMl07XG5cbiAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAuKTtcblxuICAgICAgICBmb3IoaW50IHJvdz0wOyByb3c8PTE7IHJvdysrKSB7XG4gICAgICAgICAgZm9yKGludCBjb2w9MDsgY29sPD0xOyBjb2wrKykge1xuICAgICAgICAgICAgdGV4QyA9IGNvb3Jkc1sxXSArIHJvdztcbiAgICAgICAgICAgIGRlcHRoID0gY29vcmRzWzJdICsgY29sO1xuXG4gICAgICAgICAgICB2ZWMyIHV2ID0gKHZlYzIodGV4QywgdGV4UikgKyBoYWxmQ1IpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgdmVjMigke3dpZHRofS4wLCAke2hlaWdodH0uMCk7XG4gICAgICAgICAgICB2ZWM0IHZhbHVlcyA9ICR7Z2xzbC50ZXh0dXJlMkR9KEEsIHV2KTtcbiAgICAgICAgICAgIGZsb2F0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKGRlcHRoID09IDApIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXMucjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMSkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlcy5nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXB0aCA9PSAyKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzLmI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlcHRoID09IDMpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXMuYTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0W3JvdyAqIDIgKyBjb2xdID0gZmxvb3IodmFsdWUgKiAyNTUuMCArIDAuNSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJHtnbHNsLm91dHB1dH0gPSByZXN1bHQ7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nimport { FromPixels } from '@tensorflow/tfjs-core';\nimport { TextureUsage } from '../tex_util';\nimport { FromPixelsProgram } from './FromPixels_utils/from_pixels_gpu';\nimport { FromPixelsPackedProgram } from './FromPixels_utils/from_pixels_packed_gpu';\nexport const fromPixelsConfig = {\n kernelName: FromPixels,\n backendName: 'webgl',\n kernelFunc: fromPixels,\n};\nlet fromPixels2DContext;\nlet willReadFrequently = env().getBool('CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU');\nfunction fromPixels(args) {\n const { inputs, backend, attrs } = args;\n let { pixels } = inputs;\n const { numChannels } = attrs;\n const isVideo = typeof (HTMLVideoElement) !== 'undefined' &&\n pixels instanceof HTMLVideoElement;\n const isImage = typeof (HTMLImageElement) !== 'undefined' &&\n pixels instanceof HTMLImageElement;\n const [width, height] = isVideo ?\n [\n pixels.videoWidth,\n pixels.videoHeight\n ] :\n [pixels.width, pixels.height];\n const texShape = [height, width];\n const outShape = [height, width, numChannels];\n if (isImage || isVideo) {\n const newWillReadFrequently = env().getBool('CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU');\n if (fromPixels2DContext == null ||\n newWillReadFrequently !== willReadFrequently) {\n willReadFrequently = newWillReadFrequently;\n fromPixels2DContext =\n document.createElement('canvas').getContext('2d', { willReadFrequently });\n }\n fromPixels2DContext.canvas.width = width;\n fromPixels2DContext.canvas.height = height;\n fromPixels2DContext.drawImage(pixels, 0, 0, width, height);\n pixels = fromPixels2DContext.canvas;\n }\n const tempPixelHandle = backend.makeTensorInfo(texShape, 'int32');\n // This is a byte texture with pixels.\n backend.texData.get(tempPixelHandle.dataId).usage = TextureUsage.PIXELS;\n backend.gpgpu.uploadPixelDataToTexture(backend.getTexture(tempPixelHandle.dataId), pixels);\n const program = env().getBool('WEBGL_PACK') ?\n new FromPixelsPackedProgram(outShape) :\n new FromPixelsProgram(outShape);\n const res = backend.runWebGLProgram(program, [tempPixelHandle], 'int32');\n backend.disposeData(tempPixelHandle.dataId);\n return res;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJvbVBpeGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Gcm9tUGl4ZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQXVDLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUFDLFVBQVUsRUFBb0MsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRWxGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFpQjtJQUM1QyxVQUFVLEVBQUUsVUFBVTtJQUN0QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsVUFBbUM7Q0FDaEQsQ0FBQztBQUVGLElBQUksbUJBQTZDLENBQUM7QUFDbEQsSUFBSSxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUVoRixTQUFTLFVBQVUsQ0FBQyxJQUluQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxJQUFJLEVBQUMsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3RCLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFNUIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssV0FBVztRQUNyRCxNQUFNLFlBQVksZ0JBQWdCLENBQUM7SUFDdkMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssV0FBVztRQUNyRCxNQUFNLFlBQVksZ0JBQWdCLENBQUM7SUFDdkMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUM3QjtZQUNHLE1BQTJCLENBQUMsVUFBVTtZQUN0QyxNQUEyQixDQUFDLFdBQVc7U0FDekMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsQyxNQUFNLFFBQVEsR0FBcUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRTtRQUN0QixNQUFNLHFCQUFxQixHQUN2QixHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUMzRCxJQUFJLG1CQUFtQixJQUFJLElBQUk7WUFDM0IscUJBQXFCLEtBQUssa0JBQWtCLEVBQUU7WUFDaEQsa0JBQWtCLEdBQUcscUJBQXFCLENBQUM7WUFDM0MsbUJBQW1CO2dCQUNmLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUN2QyxJQUFJLEVBQUUsRUFBQyxrQkFBa0IsRUFBQyxDQUFDLENBQUM7U0FDckM7UUFFRCxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN6QyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUMzQyxtQkFBbUIsQ0FBQyxTQUFTLENBQ3pCLE1BQTJELEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFDakUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25CLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7S0FDckM7SUFFRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRSxzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQ2xDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQW1CLENBQUMsQ0FBQztJQUNyRSxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtlbnYsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7RnJvbVBpeGVscywgRnJvbVBpeGVsc0F0dHJzLCBGcm9tUGl4ZWxzSW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtUZXh0dXJlVXNhZ2V9IGZyb20gJy4uL3RleF91dGlsJztcblxuaW1wb3J0IHtGcm9tUGl4ZWxzUHJvZ3JhbX0gZnJvbSAnLi9Gcm9tUGl4ZWxzX3V0aWxzL2Zyb21fcGl4ZWxzX2dwdSc7XG5pbXBvcnQge0Zyb21QaXhlbHNQYWNrZWRQcm9ncmFtfSBmcm9tICcuL0Zyb21QaXhlbHNfdXRpbHMvZnJvbV9waXhlbHNfcGFja2VkX2dwdSc7XG5cbmV4cG9ydCBjb25zdCBmcm9tUGl4ZWxzQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZyb21QaXhlbHMsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBmcm9tUGl4ZWxzIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG5cbmxldCBmcm9tUGl4ZWxzMkRDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5sZXQgd2lsbFJlYWRGcmVxdWVudGx5ID0gZW52KCkuZ2V0Qm9vbCgnQ0FOVkFTMkRfV0lMTF9SRUFEX0ZSRVFVRU5UTFlfRk9SX0dQVScpO1xuXG5mdW5jdGlvbiBmcm9tUGl4ZWxzKGFyZ3M6IHtcbiAgaW5wdXRzOiBGcm9tUGl4ZWxzSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogRnJvbVBpeGVsc0F0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGxldCB7cGl4ZWxzfSA9IGlucHV0cztcbiAgY29uc3Qge251bUNoYW5uZWxzfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGlzVmlkZW8gPSB0eXBlb2YgKEhUTUxWaWRlb0VsZW1lbnQpICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgcGl4ZWxzIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudDtcbiAgY29uc3QgaXNJbWFnZSA9IHR5cGVvZiAoSFRNTEltYWdlRWxlbWVudCkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBwaXhlbHMgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50O1xuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSBpc1ZpZGVvID9cbiAgICAgIFtcbiAgICAgICAgKHBpeGVscyBhcyBIVE1MVmlkZW9FbGVtZW50KS52aWRlb1dpZHRoLFxuICAgICAgICAocGl4ZWxzIGFzIEhUTUxWaWRlb0VsZW1lbnQpLnZpZGVvSGVpZ2h0XG4gICAgICBdIDpcbiAgICAgIFtwaXhlbHMud2lkdGgsIHBpeGVscy5oZWlnaHRdO1xuXG4gIGNvbnN0IHRleFNoYXBlOiBbbnVtYmVyLCBudW1iZXJdID0gW2hlaWdodCwgd2lkdGhdO1xuICBjb25zdCBvdXRTaGFwZSA9IFtoZWlnaHQsIHdpZHRoLCBudW1DaGFubmVsc107XG5cbiAgaWYgKGlzSW1hZ2UgfHwgaXNWaWRlbykge1xuICAgIGNvbnN0IG5ld1dpbGxSZWFkRnJlcXVlbnRseSA9XG4gICAgICAgIGVudigpLmdldEJvb2woJ0NBTlZBUzJEX1dJTExfUkVBRF9GUkVRVUVOVExZX0ZPUl9HUFUnKTtcbiAgICBpZiAoZnJvbVBpeGVsczJEQ29udGV4dCA9PSBudWxsIHx8XG4gICAgICAgIG5ld1dpbGxSZWFkRnJlcXVlbnRseSAhPT0gd2lsbFJlYWRGcmVxdWVudGx5KSB7XG4gICAgICB3aWxsUmVhZEZyZXF1ZW50bHkgPSBuZXdXaWxsUmVhZEZyZXF1ZW50bHk7XG4gICAgICBmcm9tUGl4ZWxzMkRDb250ZXh0ID1cbiAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KFxuICAgICAgICAgICAgICAnMmQnLCB7d2lsbFJlYWRGcmVxdWVudGx5fSk7XG4gICAgfVxuXG4gICAgZnJvbVBpeGVsczJEQ29udGV4dC5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBmcm9tUGl4ZWxzMkRDb250ZXh0LmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgZnJvbVBpeGVsczJEQ29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHBpeGVscyBhcyBIVE1MVmlkZW9FbGVtZW50IHwgSFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwLCAwLCAwLFxuICAgICAgICB3aWR0aCwgaGVpZ2h0KTtcbiAgICBwaXhlbHMgPSBmcm9tUGl4ZWxzMkRDb250ZXh0LmNhbnZhcztcbiAgfVxuXG4gIGNvbnN0IHRlbXBQaXhlbEhhbmRsZSA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8odGV4U2hhcGUsICdpbnQzMicpO1xuICAvLyBUaGlzIGlzIGEgYnl0ZSB0ZXh0dXJlIHdpdGggcGl4ZWxzLlxuICBiYWNrZW5kLnRleERhdGEuZ2V0KHRlbXBQaXhlbEhhbmRsZS5kYXRhSWQpLnVzYWdlID0gVGV4dHVyZVVzYWdlLlBJWEVMUztcbiAgYmFja2VuZC5ncGdwdS51cGxvYWRQaXhlbERhdGFUb1RleHR1cmUoXG4gICAgICBiYWNrZW5kLmdldFRleHR1cmUodGVtcFBpeGVsSGFuZGxlLmRhdGFJZCksIHBpeGVscyBhcyBJbWFnZURhdGEpO1xuICBjb25zdCBwcm9ncmFtID0gZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDSycpID9cbiAgICAgIG5ldyBGcm9tUGl4ZWxzUGFja2VkUHJvZ3JhbShvdXRTaGFwZSkgOlxuICAgICAgbmV3IEZyb21QaXhlbHNQcm9ncmFtKG91dFNoYXBlKTtcbiAgY29uc3QgcmVzID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3RlbXBQaXhlbEhhbmRsZV0sICdpbnQzMicpO1xuICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHRlbXBQaXhlbEhhbmRsZS5kYXRhSWQpO1xuICByZXR1cm4gcmVzO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, env, FusedConv2D, util } from '@tensorflow/tfjs-core';\nimport { Conv2DProgram } from '../conv_gpu';\nimport { Conv2DPackedProgram } from '../conv_packed_gpu';\nimport { mapActivationToShaderProgram } from '../kernel_utils/kernel_funcs_utils';\nimport { conv2dByMatMul, conv2dWithIm2Row } from './Conv2D_impl';\nimport { reshape } from './Reshape';\nexport function fusedConv2d(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter, bias, preluActivationWeights } = inputs;\n const { strides, pad, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs;\n const $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad, dimRoundingMode, false /* depthwise */, $dataFormat);\n let out;\n const intermediates = [];\n const hasBias = bias != null;\n const hasPreluActivationWeights = preluActivationWeights != null;\n const hasLeakyreluAlpha = activation === 'leakyrelu';\n const prepareInputs = () => {\n const inputs = [x, filter];\n // If the input is a 1-D tensor, align it with the channels.\n //\n // For fusedConv2d, the inputs (x, W, bias, preluActivationWeights) are\n // supposed to be aligned with the dataFormat. The 4-D tensor inputs or\n // scalar inputs are originally aligned, but the 1-D tensor inputs are\n // supposed to be aligned with the channels (only bias and PReLU activation\n // weights could be a 1-D tensor).\n const alignInputWithDataFormat = (input, dataFormat) => {\n if (dataFormat === 'NCHW' && input.shape.length === 1 &&\n input.shape[0] !== 1) {\n const alignedInput = reshape({\n inputs: { x: input },\n backend,\n attrs: { shape: [input.shape[0], 1, 1] }\n });\n intermediates.push(alignedInput);\n return alignedInput;\n }\n return input;\n };\n if (hasBias) {\n inputs.push(alignInputWithDataFormat(bias, dataFormat));\n }\n if (hasPreluActivationWeights) {\n inputs.push(alignInputWithDataFormat(preluActivationWeights, dataFormat));\n }\n if (hasLeakyreluAlpha) {\n const $leakyreluAlpha = backend.makeTensorInfo([], 'float32', util.createScalarValue(leakyreluAlpha, 'float32'));\n inputs.push($leakyreluAlpha);\n intermediates.push($leakyreluAlpha);\n }\n return inputs;\n };\n if (convInfo.filterHeight === 1 && convInfo.filterWidth === 1 &&\n convInfo.dilationHeight === 1 && convInfo.dilationWidth === 1 &&\n convInfo.strideHeight === 1 && convInfo.strideWidth === 1 &&\n (convInfo.padInfo.type === 'SAME' || convInfo.padInfo.type === 'VALID')) {\n out = conv2dByMatMul({\n x,\n filter,\n convInfo,\n backend,\n bias,\n activation,\n preluActivationWeights,\n leakyreluAlpha\n });\n }\n else if (convInfo.strideWidth <= 2 && $dataFormat === 'channelsLast'\n && env().getBool('WEBGL_EXP_CONV')) {\n const fusedActivation = activation ? mapActivationToShaderProgram(activation, true) : null;\n const program = new Conv2DPackedProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha);\n const customValues = [\n [convInfo.padInfo.top, convInfo.padInfo.left],\n [convInfo.strideHeight, convInfo.strideWidth],\n [convInfo.dilationHeight, convInfo.dilationWidth],\n [convInfo.inHeight, convInfo.inWidth]\n ];\n const inputs = prepareInputs();\n out = backend.runWebGLProgram(program, inputs, 'float32', customValues);\n }\n else if (env().getBool('WEBGL_CONV_IM2COL')) {\n out = conv2dWithIm2Row({\n x,\n filter,\n convInfo,\n backend,\n bias,\n activation,\n preluActivationWeights,\n leakyreluAlpha\n });\n }\n else {\n const fusedActivation = activation ? mapActivationToShaderProgram(activation, false) : null;\n const program = new Conv2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha);\n const inputs = prepareInputs();\n out = backend.runWebGLProgram(program, inputs, 'float32');\n }\n const outReshaped = reshape({ inputs: { x: out }, backend, attrs: { shape: convInfo.outShape } });\n intermediates.push(out);\n intermediates.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return outReshaped;\n}\nexport const fusedConv2DConfig = {\n kernelName: FusedConv2D,\n backendName: 'webgl',\n kernelFunc: fusedConv2d,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVzZWRDb252MkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvRnVzZWRDb252MkQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUE2RSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd0SixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRWhGLE9BQU8sRUFBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsV0FBVyxDQUFDLElBSTNCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN6RCxNQUFNLEVBQ0osT0FBTyxFQUNQLEdBQUcsRUFDSCxVQUFVLEVBQ1YsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsY0FBYyxFQUNmLEdBQUcsS0FBSyxDQUFDO0lBRVYsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQzNDLE1BQU0sQ0FBQyxLQUF5QyxFQUFFLE9BQU8sRUFBRSxTQUFT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QUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQzdCLFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUM3RCxpQkFBaUIsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQy9CLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDM0Q7SUFFRCxNQUFNLFdBQVcsR0FDYixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRTVFLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJFLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBlbnYsIEZ1c2VkQ29udjJELCBGdXNlZENvbnYyREF0dHJzLCBGdXNlZENvbnYyRElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtDb252MkRQcm9ncmFtfSBmcm9tICcuLi9jb252X2dwdSc7XG5pbXBvcnQge0NvbnYyRFBhY2tlZFByb2dyYW19IGZyb20gJy4uL2NvbnZfcGFja2VkX2dwdSc7XG5pbXBvcnQge21hcEFjdGl2YXRpb25Ub1NoYWRlclByb2dyYW19IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuXG5pbXBvcnQge2NvbnYyZEJ5TWF0TXVsLCBjb252MmRXaXRoSW0yUm93fSBmcm9tICcuL0NvbnYyRF9pbXBsJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZ1c2VkQ29udjJkKGFyZ3M6IHtcbiAgaW5wdXRzOiBGdXNlZENvbnYyRElucHV0cyxcbiAgYXR0cnM6IEZ1c2VkQ29udjJEQXR0cnMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0xcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGZpbHRlciwgYmlhcywgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c30gPSBpbnB1dHM7XG4gIGNvbnN0IHtcbiAgICBzdHJpZGVzLFxuICAgIHBhZCxcbiAgICBkYXRhRm9ybWF0LFxuICAgIGRpbGF0aW9ucyxcbiAgICBkaW1Sb3VuZGluZ01vZGUsXG4gICAgYWN0aXZhdGlvbixcbiAgICBsZWFreXJlbHVBbHBoYVxuICB9ID0gYXR0cnM7XG5cbiAgY29uc3QgJGRhdGFGb3JtYXQgPSBiYWNrZW5kX3V0aWwuY29udmVydENvbnYyRERhdGFGb3JtYXQoZGF0YUZvcm1hdCk7XG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVDb252MkRJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcywgZGlsYXRpb25zLCBwYWQsXG4gICAgICBkaW1Sb3VuZGluZ01vZGUsIGZhbHNlIC8qIGRlcHRod2lzZSAqLywgJGRhdGFGb3JtYXQpO1xuICBsZXQgb3V0OiBUZW5zb3JJbmZvO1xuICBjb25zdCBpbnRlcm1lZGlhdGVzOiBUZW5zb3JJbmZvW10gPSBbXTtcblxuICBjb25zdCBoYXNCaWFzID0gYmlhcyAhPSBudWxsO1xuICBjb25zdCBoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyAhPSBudWxsO1xuICBjb25zdCBoYXNMZWFreXJlbHVBbHBoYSA9IGFjdGl2YXRpb24gPT09ICdsZWFreXJlbHUnO1xuXG4gIGNvbnN0IHByZXBhcmVJbnB1dHMgPSAoKTogVGVuc29ySW5mb1tdID0+IHtcbiAgICBjb25zdCBpbnB1dHM6IFRlbnNvckluZm9bXSA9IFt4LCBmaWx0ZXJdO1xuXG4gICAgLy8gSWYgdGhlIGlucHV0IGlzIGEgMS1EIHRlbnNvciwgYWxpZ24gaXQgd2l0aCB0aGUgY2hhbm5lbHMuXG4gICAgLy9cbiAgICAvLyBGb3IgZnVzZWRDb252MmQsIHRoZSBpbnB1dHMgKHgsIFcsIGJpYXMsIHByZWx1QWN0aXZhdGlvbldlaWdodHMpIGFyZVxuICAgIC8vIHN1cHBvc2VkIHRvIGJlIGFsaWduZWQgd2l0aCB0aGUgZGF0YUZvcm1hdC4gVGhlIDQtRCB0ZW5zb3IgaW5wdXRzIG9yXG4gICAgLy8gc2NhbGFyIGlucHV0cyBhcmUgb3JpZ2luYWxseSBhbGlnbmVkLCBidXQgdGhlIDEtRCB0ZW5zb3IgaW5wdXRzIGFyZVxuICAgIC8vIHN1cHBvc2VkIHRvIGJlIGFsaWduZWQgd2l0aCB0aGUgY2hhbm5lbHMgKG9ubHkgYmlhcyBhbmQgUFJlTFUgYWN0aXZhdGlvblxuICAgIC8vIHdlaWdodHMgY291bGQgYmUgYSAxLUQgdGVuc29yKS5cbiAgICBjb25zdCBhbGlnbklucHV0V2l0aERhdGFGb3JtYXQgPVxuICAgICAgICAoaW5wdXQ6IFRlbnNvckluZm8sIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVycpOiBUZW5zb3JJbmZvID0+IHtcbiAgICAgICAgICBpZiAoZGF0YUZvcm1hdCA9PT0gJ05DSFcnICYmIGlucHV0LnNoYXBlLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICBpbnB1dC5zaGFwZVswXSAhPT0gMSkge1xuICAgICAgICAgICAgY29uc3QgYWxpZ25lZElucHV0ID0gcmVzaGFwZSh7XG4gICAgICAgICAgICAgIGlucHV0czoge3g6IGlucHV0fSxcbiAgICAgICAgICAgICAgYmFja2VuZCxcbiAgICAgICAgICAgICAgYXR0cnM6IHtzaGFwZTogW2lucHV0LnNoYXBlWzBdLCAxLCAxXX1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW50ZXJtZWRpYXRlcy5wdXNoKGFsaWduZWRJbnB1dCk7XG4gICAgICAgICAgICByZXR1cm4gYWxpZ25lZElucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH07XG5cbiAgICBpZiAoaGFzQmlhcykge1xuICAgICAgaW5wdXRzLnB1c2goYWxpZ25JbnB1dFdpdGhEYXRhRm9ybWF0KGJpYXMsIGRhdGFGb3JtYXQpKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cykge1xuICAgICAgaW5wdXRzLnB1c2goYWxpZ25JbnB1dFdpdGhEYXRhRm9ybWF0KHByZWx1QWN0aXZhdGlvbldlaWdodHMsIGRhdGFGb3JtYXQpKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzTGVha3lyZWx1QWxwaGEpIHtcbiAgICAgIGNvbnN0ICRsZWFreXJlbHVBbHBoYSA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICAgICAgW10sICdmbG9hdDMyJyxcbiAgICAgICAgICB1dGlsLmNyZWF0ZVNjYWxhclZhbHVlKGxlYWt5cmVsdUFscGhhIGFzIHVua25vd24gYXMgJ2Zsb2F0MzInLCAnZmxvYXQzMicpKTtcbiAgICAgIGlucHV0cy5wdXNoKCRsZWFreXJlbHVBbHBoYSk7XG4gICAgICBpbnRlcm1lZGlhdGVzLnB1c2goJGxlYWt5cmVsdUFscGhhKTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0cztcbiAgfTtcblxuICBpZiAoY29udkluZm8uZmlsdGVySGVpZ2h0ID09PSAxICYmIGNvbnZJbmZvLmZpbHRlcldpZHRoID09PSAxICYmXG4gICAgICBjb252SW5mby5kaWxhdGlvbkhlaWdodCA9PT0gMSAmJiBjb252SW5mby5kaWxhdGlvbldpZHRoID09PSAxICYmXG4gICAgICBjb252SW5mby5zdHJpZGVIZWlnaHQgPT09IDEgJiYgY29udkluZm8uc3RyaWRlV2lkdGggPT09IDEgJiZcbiAgICAgIChjb252SW5mby5wYWRJbmZvLnR5cGUgPT09ICdTQU1FJyB8fCBjb252SW5mby5wYWRJbmZvLnR5cGUgPT09ICdWQUxJRCcpKSB7XG4gICAgb3V0ID0gY29udjJkQnlNYXRNdWwoe1xuICAgICAgeCxcbiAgICAgIGZpbHRlcixcbiAgICAgIGNvbnZJbmZvLFxuICAgICAgYmFja2VuZCxcbiAgICAgIGJpYXMsXG4gICAgICBhY3RpdmF0aW9uLFxuICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyxcbiAgICAgIGxlYWt5cmVsdUFscGhhXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoY29udkluZm8uc3RyaWRlV2lkdGggPD0gMiAmJiAkZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCdcbiAgICAmJiBlbnYoKS5nZXRCb29sKCdXRUJHTF9FWFBfQ09OVicpXG4gICAgKSB7XG4gICAgICBjb25zdCBmdXNlZEFjdGl2YXRpb24gPVxuICAgICAgICAgIGFjdGl2YXRpb24gPyBtYXBBY3RpdmF0aW9uVG9TaGFkZXJQcm9ncmFtKGFjdGl2YXRpb24sIHRydWUpIDogbnVsbDtcbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IENvbnYyRFBhY2tlZFByb2dyYW0oXG4gICAgICBjb252SW5mbywgaGFzQmlhcywgZnVzZWRBY3RpdmF0aW9uLCBoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzLFxuICAgICAgaGFzTGVha3lyZWx1QWxwaGEpO1xuICAgIGNvbnN0IGN1c3RvbVZhbHVlcyA9IFtcbiAgICAgIFtjb252SW5mby5wYWRJbmZvLnRvcCwgY29udkluZm8ucGFkSW5mby5sZWZ0XSxcbiAgICAgIFtjb252SW5mby5zdHJpZGVIZWlnaHQsIGNvbnZJbmZvLnN0cmlkZVdpZHRoXSxcbiAgICAgIFtjb252SW5mby5kaWxhdGlvbkhlaWdodCwgY29udkluZm8uZGlsYXRpb25XaWR0aF0sXG4gICAgICBbY29udkluZm8uaW5IZWlnaHQsIGNvbnZJbmZvLmluV2lkdGhdXG4gICAgXTtcbiAgICBjb25zdCBpbnB1dHMgPSBwcmVwYXJlSW5wdXRzKCk7XG4gICAgb3V0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgaW5wdXRzLCAnZmxvYXQzMicsIGN1c3RvbVZhbHVlcyk7XG4gIH0gZWxzZSBpZiAoZW52KCkuZ2V0Qm9vbCgnV0VCR0xfQ09OVl9JTTJDT0wnKSkge1xuICAgIG91dCA9IGNvbnYyZFdpdGhJbTJSb3coe1xuICAgICAgeCxcbiAgICAgIGZpbHRlcixcbiAgICAgIGNvbnZJbmZvLFxuICAgICAgYmFja2VuZCxcbiAgICAgIGJpYXMsXG4gICAgICBhY3RpdmF0aW9uLFxuICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyxcbiAgICAgIGxlYWt5cmVsdUFscGhhXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZnVzZWRBY3RpdmF0aW9uID1cbiAgICAgICAgYWN0aXZhdGlvbiA/IG1hcEFjdGl2YXRpb25Ub1NoYWRlclByb2dyYW0oYWN0aXZhdGlvbiwgZmFsc2UpIDogbnVsbDtcbiAgICBjb25zdCBwcm9ncmFtID0gbmV3IENvbnYyRFByb2dyYW0oXG4gICAgICAgIGNvbnZJbmZvLCBoYXNCaWFzLCBmdXNlZEFjdGl2YXRpb24sIGhhc1ByZWx1QWN0aXZhdGlvbldlaWdodHMsXG4gICAgICAgIGhhc0xlYWt5cmVsdUFscGhhKTtcblxuICAgIGNvbnN0IGlucHV0cyA9IHByZXBhcmVJbnB1dHMoKTtcbiAgICBvdXQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBpbnB1dHMsICdmbG9hdDMyJyk7XG4gIH1cblxuICBjb25zdCBvdXRSZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiBvdXR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBjb252SW5mby5vdXRTaGFwZX19KTtcblxuICBpbnRlcm1lZGlhdGVzLnB1c2gob3V0KTtcbiAgaW50ZXJtZWRpYXRlcy5mb3JFYWNoKHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG5cbiAgcmV0dXJuIG91dFJlc2hhcGVkO1xufVxuXG5leHBvcnQgY29uc3QgZnVzZWRDb252MkRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRnVzZWRDb252MkQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBmdXNlZENvbnYyZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, env, FusedDepthwiseConv2D, util } from '@tensorflow/tfjs-core';\nimport { DepthwiseConv2DProgram } from '../conv_gpu_depthwise';\nimport { DepthwiseConvPacked2DProgram } from '../conv_packed_gpu_depthwise';\nimport { mapActivationToShaderProgram } from '../kernel_utils/kernel_funcs_utils';\nexport function fusedDepthwiseConv2D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter, bias, preluActivationWeights } = inputs;\n const { strides, pad, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs;\n const intermediates = [];\n let $dilations = dilations;\n if ($dilations == null) {\n $dilations = [1, 1];\n }\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, $dilations), () => 'Error in depthwiseConv2d: Either strides or dilations must be ' +\n `1. Got strides ${strides} and dilations '${$dilations}'`);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad, dimRoundingMode, true /* depthwise */);\n const shouldPackDepthwiseConv = env().getBool('WEBGL_PACK_DEPTHWISECONV') &&\n convInfo.strideWidth <= 2 &&\n convInfo.outChannels / convInfo.inChannels === 1;\n const fusedActivation = activation ?\n mapActivationToShaderProgram(activation, shouldPackDepthwiseConv) :\n null;\n const programInputs = [x, filter];\n const hasBias = bias != null;\n const hasPreluActivationWeights = preluActivationWeights != null;\n const hasLeakyreluAlpha = activation === 'leakyrelu';\n if (hasBias) {\n programInputs.push(bias);\n }\n if (hasPreluActivationWeights) {\n programInputs.push(preluActivationWeights);\n }\n if (hasLeakyreluAlpha) {\n const $leakyreluAlpha = backend.makeTensorInfo([], 'float32', util.createScalarValue(leakyreluAlpha, 'float32'));\n programInputs.push($leakyreluAlpha);\n intermediates.push($leakyreluAlpha);\n }\n let program;\n if (shouldPackDepthwiseConv) {\n program = new DepthwiseConvPacked2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha);\n }\n else {\n program = new DepthwiseConv2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha);\n }\n const customValues = [\n [convInfo.padInfo.top, convInfo.padInfo.left],\n [convInfo.strideHeight, convInfo.strideWidth],\n [convInfo.dilationHeight, convInfo.dilationWidth],\n [convInfo.inHeight, convInfo.inWidth]\n ];\n const result = backend.runWebGLProgram(program, programInputs, 'float32', customValues);\n intermediates.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return result;\n}\nexport const fusedDepthwiseConv2DConfig = {\n kernelName: FusedDepthwiseConv2D,\n backendName: 'webgl',\n kernelFunc: fusedDepthwiseConv2D,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVzZWREZXB0aHdpc2VDb252MkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvRnVzZWREZXB0aHdpc2VDb252MkQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQStGLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2pMLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRWhGLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUlwQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDekQsTUFBTSxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFDLEdBQ3hFLEtBQUssQ0FBQztJQUVWLE1BQU0sYUFBYSxHQUFpQixFQUFFLENBQUM7SUFFdkMsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQzNCLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtRQUN0QixVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDckI7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUNQLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQ2hFLEdBQUcsRUFBRSxDQUFDLGdF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QTZDO0NBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBlbnYsIEZ1c2VkRGVwdGh3aXNlQ29udjJELCBGdXNlZERlcHRod2lzZUNvbnYyREF0dHJzLCBGdXNlZERlcHRod2lzZUNvbnYyRElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtEZXB0aHdpc2VDb252MkRQcm9ncmFtfSBmcm9tICcuLi9jb252X2dwdV9kZXB0aHdpc2UnO1xuaW1wb3J0IHtEZXB0aHdpc2VDb252UGFja2VkMkRQcm9ncmFtfSBmcm9tICcuLi9jb252X3BhY2tlZF9ncHVfZGVwdGh3aXNlJztcbmltcG9ydCB7bWFwQWN0aXZhdGlvblRvU2hhZGVyUHJvZ3JhbX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL2tlcm5lbF9mdW5jc191dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmdXNlZERlcHRod2lzZUNvbnYyRChhcmdzOiB7XG4gIGlucHV0czogRnVzZWREZXB0aHdpc2VDb252MkRJbnB1dHMsXG4gIGF0dHJzOiBGdXNlZERlcHRod2lzZUNvbnYyREF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBmaWx0ZXIsIGJpYXMsIHByZWx1QWN0aXZhdGlvbldlaWdodHN9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgcGFkLCBkaWxhdGlvbnMsIGRpbVJvdW5kaW5nTW9kZSwgYWN0aXZhdGlvbiwgbGVha3lyZWx1QWxwaGF9ID1cbiAgICAgIGF0dHJzO1xuXG4gIGNvbnN0IGludGVybWVkaWF0ZXM6IFRlbnNvckluZm9bXSA9IFtdO1xuXG4gIGxldCAkZGlsYXRpb25zID0gZGlsYXRpb25zO1xuICBpZiAoJGRpbGF0aW9ucyA9PSBudWxsKSB7XG4gICAgJGRpbGF0aW9ucyA9IFsxLCAxXTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYmFja2VuZF91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCAkZGlsYXRpb25zKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBkZXB0aHdpc2VDb252MmQ6IEVpdGhlciBzdHJpZGVzIG9yIGRpbGF0aW9ucyBtdXN0IGJlICcgK1xuICAgICAgICAgIGAxLiBHb3Qgc3RyaWRlcyAke3N0cmlkZXN9IGFuZCBkaWxhdGlvbnMgJyR7JGRpbGF0aW9uc30nYCk7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBzdHJpZGVzLCAkZGlsYXRpb25zLFxuICAgICAgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIHRydWUgLyogZGVwdGh3aXNlICovKTtcblxuICBjb25zdCBzaG91bGRQYWNrRGVwdGh3aXNlQ29udiA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfREVQVEhXSVNFQ09OVicpICYmXG4gICAgICBjb252SW5mby5zdHJpZGVXaWR0aCA8PSAyICYmXG4gICAgICBjb252SW5mby5vdXRDaGFubmVscyAvIGNvbnZJbmZvLmluQ2hhbm5lbHMgPT09IDE7XG4gIGNvbnN0IGZ1c2VkQWN0aXZhdGlvbiA9IGFjdGl2YXRpb24gP1xuICAgICAgbWFwQWN0aXZhdGlvblRvU2hhZGVyUHJvZ3JhbShhY3RpdmF0aW9uLCBzaG91bGRQYWNrRGVwdGh3aXNlQ29udikgOlxuICAgICAgbnVsbDtcbiAgY29uc3QgcHJvZ3JhbUlucHV0czogVGVuc29ySW5mb1tdID0gW3gsIGZpbHRlcl07XG5cbiAgY29uc3QgaGFzQmlhcyA9IGJpYXMgIT0gbnVsbDtcbiAgY29uc3QgaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9IHByZWx1QWN0aXZhdGlvbldlaWdodHMgIT0gbnVsbDtcbiAgY29uc3QgaGFzTGVha3lyZWx1QWxwaGEgPSBhY3RpdmF0aW9uID09PSAnbGVha3lyZWx1JztcblxuICBpZiAoaGFzQmlhcykge1xuICAgIHByb2dyYW1JbnB1dHMucHVzaChiaWFzKTtcbiAgfVxuICBpZiAoaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cykge1xuICAgIHByb2dyYW1JbnB1dHMucHVzaChwcmVsdUFjdGl2YXRpb25XZWlnaHRzKTtcbiAgfVxuICBpZiAoaGFzTGVha3lyZWx1QWxwaGEpIHtcbiAgICBjb25zdCAkbGVha3lyZWx1QWxwaGEgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgICBbXSwgJ2Zsb2F0MzInLFxuICAgICAgICB1dGlsLmNyZWF0ZVNjYWxhclZhbHVlKGxlYWt5cmVsdUFscGhhIGFzIHVua25vd24gYXMgJ2Zsb2F0MzInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbG9hdDMyJykpO1xuICAgIHByb2dyYW1JbnB1dHMucHVzaCgkbGVha3lyZWx1QWxwaGEpO1xuICAgIGludGVybWVkaWF0ZXMucHVzaCgkbGVha3lyZWx1QWxwaGEpO1xuICB9XG5cbiAgbGV0IHByb2dyYW06IERlcHRod2lzZUNvbnYyRFByb2dyYW18RGVwdGh3aXNlQ29udlBhY2tlZDJEUHJvZ3JhbTtcbiAgaWYgKHNob3VsZFBhY2tEZXB0aHdpc2VDb252KSB7XG4gICAgcHJvZ3JhbSA9IG5ldyBEZXB0aHdpc2VDb252UGFja2VkMkRQcm9ncmFtKFxuICAgICAgICBjb252SW5mbywgaGFzQmlhcywgZnVzZWRBY3RpdmF0aW9uLCBoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzLFxuICAgICAgICBoYXNMZWFreXJlbHVBbHBoYSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvZ3JhbSA9IG5ldyBEZXB0aHdpc2VDb252MkRQcm9ncmFtKFxuICAgICAgICBjb252SW5mbywgaGFzQmlhcywgZnVzZWRBY3RpdmF0aW9uLCBoYXNQcmVsdUFjdGl2YXRpb25XZWlnaHRzLFxuICAgICAgICBoYXNMZWFreXJlbHVBbHBoYSk7XG4gIH1cbiAgY29uc3QgY3VzdG9tVmFsdWVzID0gW1xuICAgIFtjb252SW5mby5wYWRJbmZvLnRvcCwgY29udkluZm8ucGFkSW5mby5sZWZ0XSxcbiAgICBbY29udkluZm8uc3RyaWRlSGVpZ2h0LCBjb252SW5mby5zdHJpZGVXaWR0aF0sXG4gICAgW2NvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LCBjb252SW5mby5kaWxhdGlvbldpZHRoXSxcbiAgICBbY29udkluZm8uaW5IZWlnaHQsIGNvbnZJbmZvLmluV2lkdGhdXG4gIF07XG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgICBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBwcm9ncmFtSW5wdXRzLCAnZmxvYXQzMicsIGN1c3RvbVZhbHVlcyk7XG5cbiAgaW50ZXJtZWRpYXRlcy5mb3JFYWNoKHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGZ1c2VkRGVwdGh3aXNlQ29udjJEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZ1c2VkRGVwdGh3aXNlQ29udjJELFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogZnVzZWREZXB0aHdpc2VDb252MkQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","import { getCoordsDataType } from './shader_compiler';\nexport class GatherNDProgram {\n constructor(sliceDim, strides, shape, paramsShape) {\n this.sliceDim = sliceDim;\n this.strides = strides;\n this.paramsShape = paramsShape;\n this.variableNames = ['x', 'indices'];\n this.outputShape = shape;\n const dtype = getCoordsDataType(shape.length);\n let mainLoop = `\n int index;`;\n for (let j = 0; j < this.sliceDim; j++) {\n mainLoop += `\n index = round(getIndices(coords[0], ${j}));\n out_of_bounds = out_of_bounds || index < 0;\n out_of_bounds = out_of_bounds || index >= ${this.paramsShape[j]};\n flattenIndex += index * ${this.strides[j]};`;\n }\n this.userCode = `\n void main() {\n ${dtype} coords = getOutputCoords();\n int flattenIndex = 0;\n bool out_of_bounds = false;\n\n ${mainLoop}\n\n setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1]));\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0aGVyX25kX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvZ2F0aGVyX25kX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDWSxRQUFnQixFQUFVLE9BQWlCLEVBQUUsS0FBZSxFQUM1RCxXQUFxQjtRQURyQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUMzQyxnQkFBVyxHQUFYLFdBQVcsQ0FBVTtRQUxqQyxrQkFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBTS9CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QyxJQUFJLFFBQVEsR0FBRztlQUNKLENBQUM7UUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxRQUFRLElBQUk7Z0RBQzhCLENBQUM7O3NEQUVLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29DQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDbEQ7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHOztZQUVSLEtBQUs7Ozs7WUFJTCxRQUFROzs7O09BSWIsQ0FBQztJQUNOLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDb29yZHNEYXRhVHlwZX0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXInO1xuXG5leHBvcnQgY2xhc3MgR2F0aGVyTkRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCcsICdpbmRpY2VzJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHNsaWNlRGltOiBudW1iZXIsIHByaXZhdGUgc3RyaWRlczogbnVtYmVyW10sIHNoYXBlOiBudW1iZXJbXSxcbiAgICAgIHByaXZhdGUgcGFyYW1zU2hhcGU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IHNoYXBlO1xuICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUoc2hhcGUubGVuZ3RoKTtcblxuICAgIGxldCBtYWluTG9vcCA9IGBcbiAgICBpbnQgaW5kZXg7YDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuc2xpY2VEaW07IGorKykge1xuICAgICAgbWFpbkxvb3AgKz0gYFxuICAgICAgICAgIGluZGV4ID0gcm91bmQoZ2V0SW5kaWNlcyhjb29yZHNbMF0sICR7an0pKTtcbiAgICAgICAgICBvdXRfb2ZfYm91bmRzID0gb3V0X29mX2JvdW5kcyB8fCBpbmRleCA8IDA7XG4gICAgICAgICAgb3V0X29mX2JvdW5kcyA9IG91dF9vZl9ib3VuZHMgfHwgaW5kZXggPj0gJHt0aGlzLnBhcmFtc1NoYXBlW2pdfTtcbiAgICAgICAgICBmbGF0dGVuSW5kZXggKz0gaW5kZXggKiAke3RoaXMuc3RyaWRlc1tqXX07YDtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgICR7ZHR5cGV9IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIGludCBmbGF0dGVuSW5kZXggPSAwO1xuICAgICAgICAgIGJvb2wgb3V0X29mX2JvdW5kcyA9IGZhbHNlO1xuXG4gICAgICAgICAgJHttYWluTG9vcH1cblxuICAgICAgICAgIHNldE91dHB1dChvdXRfb2ZfYm91bmRzID8gMC4wIDogZ2V0WChmbGF0dGVuSW5kZXgsIGNvb3Jkc1sxXSkpO1xuICAgICAgICB9XG4gICAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, GatherNd, util } from '@tensorflow/tfjs-core';\nimport { GatherNDProgram } from '../gather_nd_gpu';\nimport { gatherNdImplCPU } from '../kernel_utils/shared';\nimport { reshape } from './Reshape';\nexport function gatherNd(args) {\n const { inputs, backend } = args;\n const { params, indices } = inputs;\n const indicesShape = indices.shape;\n const sliceRank = indicesShape[indicesShape.length - 1];\n const paramsSize = util.sizeFromShape(params.shape);\n const [resultShape, numSlices, sliceSize, strides] = backend_util.prepareAndValidate(params, indices);\n const flattenIndices = reshape({ inputs: { x: indices }, backend, attrs: { shape: [numSlices, sliceRank] } });\n const flattenX = reshape({\n inputs: { x: params },\n backend,\n attrs: { shape: [(util.sizeFromShape(params.shape) / sliceSize), sliceSize] }\n });\n if (backend.shouldExecuteOnCPU([params, indices]) ||\n params.dtype === 'string') {\n const indicesData = backend.readSync(indices.dataId);\n const paramsBuf = backend.bufferSync(params);\n const outValue = gatherNdImplCPU(indicesData, paramsBuf, params.dtype, numSlices, sliceRank, sliceSize, strides, params.shape, paramsSize);\n return backend.makeTensorInfo(resultShape, params.dtype, outValue.values);\n }\n const program = new GatherNDProgram(sliceRank, strides, [numSlices, sliceSize], params.shape);\n const res = backend.runWebGLProgram(program, [flattenX, flattenIndices], flattenX.dtype);\n const reshaped = reshape({ inputs: { x: res }, backend, attrs: { shape: resultShape } });\n backend.disposeIntermediateTensorInfo(flattenIndices);\n backend.disposeIntermediateTensorInfo(flattenX);\n backend.disposeIntermediateTensorInfo(res);\n return reshaped;\n}\nexport const gatherNdConfig = {\n kernelName: GatherNd,\n backendName: 'webgl',\n kernelFunc: gatherNd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyTmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvR2F0aGVyTmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxRQUFRLEVBQTBFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzNJLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsUUFBUSxDQUNwQixJQUF5RDtJQUMzRCxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUVqQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ25DLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBELE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FDOUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVyRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQzFCLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUM7UUFDbkIsT0FBTztRQUNQLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUM7S0FDNUUsQ0FBQyxDQUFDO0lBRUgsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFlLENBQUM7UUFDbkUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBa0IsTUFBTSxDQUFDLENBQUM7UUFDOUQsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUM1QixXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQ3JFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZDLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDM0U7SUFDRCxNQUFNLE9BQU8sR0FDVCxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUM1RCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FDL0IsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6RCxNQUFNLFFBQVEsR0FDVixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxXQUFXLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFFdEUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0MsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFFBQWlDO0NBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBHYXRoZXJOZCwgR2F0aGVyTmRJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmFuaywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7R2F0aGVyTkRQcm9ncmFtfSBmcm9tICcuLi9nYXRoZXJfbmRfZ3B1JztcbmltcG9ydCB7Z2F0aGVyTmRJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2F0aGVyTmQoXG4gICAgYXJnczoge2lucHV0czogR2F0aGVyTmRJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3BhcmFtcywgaW5kaWNlc30gPSBpbnB1dHM7XG5cbiAgY29uc3QgaW5kaWNlc1NoYXBlID0gaW5kaWNlcy5zaGFwZTtcbiAgY29uc3Qgc2xpY2VSYW5rID0gaW5kaWNlc1NoYXBlW2luZGljZXNTaGFwZS5sZW5ndGggLSAxXTtcbiAgY29uc3QgcGFyYW1zU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShwYXJhbXMuc2hhcGUpO1xuXG4gIGNvbnN0IFtyZXN1bHRTaGFwZSwgbnVtU2xpY2VzLCBzbGljZVNpemUsIHN0cmlkZXNdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5wcmVwYXJlQW5kVmFsaWRhdGUocGFyYW1zLCBpbmRpY2VzKTtcblxuICBjb25zdCBmbGF0dGVuSW5kaWNlcyA9IHJlc2hhcGUoXG4gICAgICB7aW5wdXRzOiB7eDogaW5kaWNlc30sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IFtudW1TbGljZXMsIHNsaWNlUmFua119fSk7XG4gIGNvbnN0IGZsYXR0ZW5YID0gcmVzaGFwZSh7XG4gICAgaW5wdXRzOiB7eDogcGFyYW1zfSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7c2hhcGU6IFsodXRpbC5zaXplRnJvbVNoYXBlKHBhcmFtcy5zaGFwZSkgLyBzbGljZVNpemUpLCBzbGljZVNpemVdfVxuICB9KTtcblxuICBpZiAoYmFja2VuZC5zaG91bGRFeGVjdXRlT25DUFUoW3BhcmFtcywgaW5kaWNlc10pIHx8XG4gICAgICBwYXJhbXMuZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgaW5kaWNlc0RhdGEgPSBiYWNrZW5kLnJlYWRTeW5jKGluZGljZXMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICAgIGNvbnN0IHBhcmFtc0J1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYzxSYW5rLCAnZmxvYXQzMic+KHBhcmFtcyk7XG4gICAgY29uc3Qgb3V0VmFsdWUgPSBnYXRoZXJOZEltcGxDUFUoXG4gICAgICAgIGluZGljZXNEYXRhLCBwYXJhbXNCdWYsIHBhcmFtcy5kdHlwZSwgbnVtU2xpY2VzLCBzbGljZVJhbmssIHNsaWNlU2l6ZSxcbiAgICAgICAgc3RyaWRlcywgcGFyYW1zLnNoYXBlLCBwYXJhbXNTaXplKTtcblxuICAgIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlc3VsdFNoYXBlLCBwYXJhbXMuZHR5cGUsIG91dFZhbHVlLnZhbHVlcyk7XG4gIH1cbiAgY29uc3QgcHJvZ3JhbSA9XG4gICAgICBuZXcgR2F0aGVyTkRQcm9ncmFtKHNsaWNlUmFuaywgc3RyaWRlcywgW251bVNsaWNlcywgc2xpY2VTaXplXSwgXG4gICAgICAgIHBhcmFtcy5zaGFwZSk7XG4gIGNvbnN0IHJlcyA9IGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKFxuICAgICAgcHJvZ3JhbSwgW2ZsYXR0ZW5YLCBmbGF0dGVuSW5kaWNlc10sIGZsYXR0ZW5YLmR0eXBlKTtcblxuICBjb25zdCByZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZXN9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiByZXN1bHRTaGFwZX19KTtcblxuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGZsYXR0ZW5JbmRpY2VzKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhmbGF0dGVuWCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzKTtcblxuICByZXR1cm4gcmVzaGFwZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBnYXRoZXJOZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBHYXRoZXJOZCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGdhdGhlck5kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class GatherProgram {\n constructor(aShape, outputShape) {\n this.variableNames = ['A', 'indices'];\n this.outputShape = outputShape;\n this.rank = outputShape.length;\n const dtype = getCoordsDataType(this.rank);\n const sourceCoords = getSourceCoords(aShape, 2);\n this.userCode = `\n void main() {\n ${dtype} resRC = getOutputCoords();\n int index = int(getIndices(resRC.x, resRC.z));\n float inBounds = (index >= 0) && (index < ${aShape[2]}) ? 1.0 : 0.0;\n setOutput(inBounds * getA(${sourceCoords}));\n }\n `;\n }\n}\n// The input and output are always flattened into rank 4 tensors.\nfunction getSourceCoords(aShape, axis) {\n const currentCoords = ['resRC.x', 'resRC.y', 'resRC.z', 'resRC.w'];\n const sourceCoords = [];\n for (let i = 0; i < aShape.length; i++) {\n if (i === 2) {\n sourceCoords.push('index');\n }\n else {\n sourceCoords.push(`${currentCoords[i]}`);\n }\n }\n return sourceCoords.join();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0aGVyX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvZ2F0aGVyX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUlwRCxNQUFNLE9BQU8sYUFBYTtJQU14QixZQUFZLE1BQW1CLEVBQUUsV0FBd0I7UUFMekQsa0JBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQU0vQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLFFBQVEsR0FBRzs7VUFFVixLQUFLOztvREFFcUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQ0FDekIsWUFBWTs7S0FFM0MsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELGlFQUFpRTtBQUNqRSxTQUFTLGVBQWUsQ0FBQyxNQUFtQixFQUFFLElBQVk7SUFDeEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVuRSxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QjthQUFNO1lBQ0wsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUM7S0FDRjtJQUNELE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDb29yZHNEYXRhVHlwZX0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXInO1xuXG5leHBvcnQgdHlwZSBHYXRoZXJTaGFwZSA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgY2xhc3MgR2F0aGVyUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnLCAnaW5kaWNlcyddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIHJhbms6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihhU2hhcGU6IEdhdGhlclNoYXBlLCBvdXRwdXRTaGFwZTogR2F0aGVyU2hhcGUpIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gb3V0cHV0U2hhcGU7XG4gICAgdGhpcy5yYW5rID0gb3V0cHV0U2hhcGUubGVuZ3RoO1xuICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUodGhpcy5yYW5rKTtcbiAgICBjb25zdCBzb3VyY2VDb29yZHMgPSBnZXRTb3VyY2VDb29yZHMoYVNoYXBlLCAyKTtcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICR7ZHR5cGV9IHJlc1JDID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBpbmRleCA9IGludChnZXRJbmRpY2VzKHJlc1JDLngsIHJlc1JDLnopKTtcbiAgICAgICAgZmxvYXQgaW5Cb3VuZHMgPSAoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgJHthU2hhcGVbMl19KSA/IDEuMCA6IDAuMDtcbiAgICAgICAgc2V0T3V0cHV0KGluQm91bmRzICogZ2V0QSgke3NvdXJjZUNvb3Jkc30pKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG5cbi8vIFRoZSBpbnB1dCBhbmQgb3V0cHV0IGFyZSBhbHdheXMgZmxhdHRlbmVkIGludG8gcmFuayA0IHRlbnNvcnMuXG5mdW5jdGlvbiBnZXRTb3VyY2VDb29yZHMoYVNoYXBlOiBHYXRoZXJTaGFwZSwgYXhpczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgY3VycmVudENvb3JkcyA9IFsncmVzUkMueCcsICdyZXNSQy55JywgJ3Jlc1JDLnonLCAncmVzUkMudyddO1xuXG4gIGNvbnN0IHNvdXJjZUNvb3JkcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSAyKSB7XG4gICAgICBzb3VyY2VDb29yZHMucHVzaCgnaW5kZXgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc291cmNlQ29vcmRzLnB1c2goYCR7Y3VycmVudENvb3Jkc1tpXX1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNvdXJjZUNvb3Jkcy5qb2luKCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, GatherV2, util, env } from '@tensorflow/tfjs-core';\nimport { GatherProgram } from '../gather_gpu';\nimport { gatherV2ImplCPU } from '../kernel_utils/shared';\nimport { reshape } from './Reshape';\nexport function gatherV2(args) {\n const { inputs, backend, attrs } = args;\n const { x, indices } = inputs;\n const { axis, batchDims } = attrs;\n const parsedAxis = util.parseAxisParam(axis, x.shape)[0];\n if (env().get('DEBUG')) {\n // In debug mode, throw error when any index is out of bound.\n // Otherwise, just fill out of bounds with zeroes.\n const indicesVals = backend.readSync(indices.dataId);\n const axisDim = x.shape[parsedAxis];\n for (let i = 0; i < indicesVals.length; ++i) {\n const index = indicesVals[i];\n util.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`);\n }\n }\n const shapeInfo = backend_util.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, batchDims);\n const indicesSize = util.sizeFromShape(indices.shape);\n const toDispose = [];\n const flattenX = reshape({\n inputs: { x },\n backend,\n attrs: {\n shape: [\n shapeInfo.batchSize, shapeInfo.outerSize, shapeInfo.dimSize,\n shapeInfo.sliceSize\n ]\n }\n });\n const flattenIndex = reshape({\n inputs: { x: indices },\n backend,\n attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] }\n });\n toDispose.push(flattenX);\n toDispose.push(flattenIndex);\n const flattenOutputShape = [\n shapeInfo.batchSize, shapeInfo.outerSize, indicesSize / shapeInfo.batchSize,\n shapeInfo.sliceSize\n ];\n if (backend.shouldExecuteOnCPU([x, indices]) || x.dtype === 'string') {\n const indicesBuf = backend.bufferSync(flattenIndex);\n const xBuf = backend.bufferSync(flattenX);\n const outBuf = gatherV2ImplCPU(xBuf, indicesBuf, flattenOutputShape);\n toDispose.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return backend.makeTensorInfo(shapeInfo.outputShape, outBuf.dtype, outBuf.values);\n }\n const program = new GatherProgram(flattenX.shape, flattenOutputShape);\n const res = backend.runWebGLProgram(program, [flattenX, flattenIndex], flattenX.dtype);\n toDispose.push(res);\n const reshaped = reshape({ inputs: { x: res }, backend, attrs: { shape: shapeInfo.outputShape } });\n toDispose.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return reshaped;\n}\nexport const gatherV2Config = {\n kernelName: GatherV2,\n backendName: 'webgl',\n kernelFunc: gatherV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyVjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvR2F0aGVyVjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxRQUFRLEVBQW1GLElBQUksRUFBRSxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd6SixPQUFPLEVBQUMsYUFBYSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFJeEI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3RCLDZEQUE2RDtRQUM3RCxrREFBa0Q7UUFDbEQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFlLENBQUM7UUFDbkUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcs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RSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDeEUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxRQUFpQztDQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgR2F0aGVyVjIsIEdhdGhlclYyQXR0cnMsIEdhdGhlclYySW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWwsIGVudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7R2F0aGVyUHJvZ3JhbSwgR2F0aGVyU2hhcGV9IGZyb20gJy4uL2dhdGhlcl9ncHUnO1xuaW1wb3J0IHtnYXRoZXJWMkltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJWMihhcmdzOiB7XG4gIGlucHV0czogR2F0aGVyVjJJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBHYXRoZXJWMkF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBpbmRpY2VzfSA9IGlucHV0cztcbiAgY29uc3Qge2F4aXMsIGJhdGNoRGltc30gPSBhdHRycztcblxuICBjb25zdCBwYXJzZWRBeGlzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShheGlzLCB4LnNoYXBlKVswXTtcbiAgaWYgKGVudigpLmdldCgnREVCVUcnKSkge1xuICAgIC8vIEluIGRlYnVnIG1vZGUsIHRocm93IGVycm9yIHdoZW4gYW55IGluZGV4IGlzIG91dCBvZiBib3VuZC5cbiAgICAvLyBPdGhlcndpc2UsIGp1c3QgZmlsbCBvdXQgb2YgYm91bmRzIHdpdGggemVyb2VzLlxuICAgIGNvbnN0IGluZGljZXNWYWxzID0gYmFja2VuZC5yZWFkU3luYyhpbmRpY2VzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBheGlzRGltID0geC5zaGFwZVtwYXJzZWRBeGlzXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXNWYWxzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGluZGljZXNWYWxzW2ldO1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGluZGV4IDw9IGF4aXNEaW0gLSAxICYmIGluZGV4ID49IDAsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYEdhdGhlclYyOiB0aGUgaW5kZXggdmFsdWUgJHtpbmRleH0gaXMgbm90IGluIFswLCAke2F4aXNEaW0gLSAxfV1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzaGFwZUluZm8gPSBiYWNrZW5kX3V0aWwuc2VnbWVudF91dGlsLmNvbGxlY3RHYXRoZXJPcFNoYXBlSW5mbyhcbiAgICAgIHgsIGluZGljZXMsIHBhcnNlZEF4aXMsIGJhdGNoRGltcyk7XG5cbiAgY29uc3QgaW5kaWNlc1NpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoaW5kaWNlcy5zaGFwZSk7XG5cbiAgY29uc3QgdG9EaXNwb3NlID0gW107XG5cbiAgY29uc3QgZmxhdHRlblggPSByZXNoYXBlKHtcbiAgICBpbnB1dHM6IHt4fSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7XG4gICAgICBzaGFwZTogW1xuICAgICAgICBzaGFwZUluZm8uYmF0Y2hTaXplLCBzaGFwZUluZm8ub3V0ZXJTaXplLCBzaGFwZUluZm8uZGltU2l6ZSxcbiAgICAgICAgc2hhcGVJbmZvLnNsaWNlU2l6ZVxuICAgICAgXVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZmxhdHRlbkluZGV4ID0gcmVzaGFwZSh7XG4gICAgaW5wdXRzOiB7eDogaW5kaWNlc30sXG4gICAgYmFja2VuZCxcbiAgICBhdHRyczoge3NoYXBlOiBbc2hhcGVJbmZvLmJhdGNoU2l6ZSwgaW5kaWNlc1NpemUgLyBzaGFwZUluZm8uYmF0Y2hTaXplXX1cbiAgfSk7XG5cbiAgdG9EaXNwb3NlLnB1c2goZmxhdHRlblgpO1xuICB0b0Rpc3Bvc2UucHVzaChmbGF0dGVuSW5kZXgpO1xuXG4gIGNvbnN0IGZsYXR0ZW5PdXRwdXRTaGFwZSA9IFtcbiAgICBzaGFwZUluZm8uYmF0Y2hTaXplLCBzaGFwZUluZm8ub3V0ZXJTaXplLCBpbmRpY2VzU2l6ZSAvIHNoYXBlSW5mby5iYXRjaFNpemUsXG4gICAgc2hhcGVJbmZvLnNsaWNlU2l6ZVxuICBdO1xuXG4gIGlmIChiYWNrZW5kLnNob3VsZEV4ZWN1dGVPbkNQVShbeCwgaW5kaWNlc10pIHx8IHguZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgaW5kaWNlc0J1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYyhmbGF0dGVuSW5kZXgpO1xuICAgIGNvbnN0IHhCdWYgPSBiYWNrZW5kLmJ1ZmZlclN5bmMoZmxhdHRlblgpO1xuICAgIGNvbnN0IG91dEJ1ZiA9IGdhdGhlclYySW1wbENQVSh4QnVmLCBpbmRpY2VzQnVmLCBmbGF0dGVuT3V0cHV0U2hhcGUpO1xuXG4gICAgdG9EaXNwb3NlLmZvckVhY2godCA9PiBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHQpKTtcblxuICAgIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgICBzaGFwZUluZm8ub3V0cHV0U2hhcGUsIG91dEJ1Zi5kdHlwZSwgb3V0QnVmLnZhbHVlcyBhcyBUeXBlZEFycmF5KTtcbiAgfVxuXG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgR2F0aGVyUHJvZ3JhbShmbGF0dGVuWC5zaGFwZSBhcyBHYXRoZXJTaGFwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5PdXRwdXRTaGFwZSBhcyBHYXRoZXJTaGFwZSk7XG4gIGNvbnN0IHJlcyA9IGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKFxuICAgICAgcHJvZ3JhbSwgW2ZsYXR0ZW5YLCBmbGF0dGVuSW5kZXhdLCBmbGF0dGVuWC5kdHlwZSk7XG4gIHRvRGlzcG9zZS5wdXNoKHJlcyk7XG5cbiAgY29uc3QgcmVzaGFwZWQgPSByZXNoYXBlKFxuICAgICAge2lucHV0czoge3g6IHJlc30sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IHNoYXBlSW5mby5vdXRwdXRTaGFwZX19KTtcbiAgdG9EaXNwb3NlLmZvckVhY2godCA9PiBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHQpKTtcbiAgcmV0dXJuIHJlc2hhcGVkO1xufVxuXG5leHBvcnQgY29uc3QgZ2F0aGVyVjJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogR2F0aGVyVjIsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBnYXRoZXJWMiBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Greater } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { greaterImplCPU } from '../kernel_utils/shared';\nconst GREATER = `return float(a > b);`;\nconst GREATER_PACKED = `\n return vec4(greaterThan(a, b));\n`;\nexport const greater = binaryKernelFunc({\n opSnippet: GREATER,\n packedOpSnippet: GREATER_PACKED,\n cpuKernelImpl: greaterImplCPU,\n dtype: 'bool'\n});\nexport const greaterConfig = {\n kernelName: Greater,\n backendName: 'webgl',\n kernelFunc: greater\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JlYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9HcmVhdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxPQUFPLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFFeEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE1BQU0sT0FBTyxHQUFHLHNCQUFzQixDQUFDO0FBQ3ZDLE1BQU0sY0FBYyxHQUFHOztDQUV0QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDO0lBQ3RDLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLGVBQWUsRUFBRSxjQUFjO0lBQy9CLGFBQWEsRUFBRSxjQUFjO0lBQzdCLEtBQUssRUFBRSxNQUFNO0NBQ2QsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsT0FBZ0M7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHcmVhdGVyLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4va2VybmVsX3V0aWxzL2tlcm5lbF9mdW5jc191dGlscyc7XG5pbXBvcnQge2dyZWF0ZXJJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuY29uc3QgR1JFQVRFUiA9IGByZXR1cm4gZmxvYXQoYSA+IGIpO2A7XG5jb25zdCBHUkVBVEVSX1BBQ0tFRCA9IGBcbiAgcmV0dXJuIHZlYzQoZ3JlYXRlclRoYW4oYSwgYikpO1xuYDtcblxuZXhwb3J0IGNvbnN0IGdyZWF0ZXIgPSBiaW5hcnlLZXJuZWxGdW5jKHtcbiAgb3BTbmlwcGV0OiBHUkVBVEVSLFxuICBwYWNrZWRPcFNuaXBwZXQ6IEdSRUFURVJfUEFDS0VELFxuICBjcHVLZXJuZWxJbXBsOiBncmVhdGVySW1wbENQVSxcbiAgZHR5cGU6ICdib29sJ1xufSk7XG5cbmV4cG9ydCBjb25zdCBncmVhdGVyQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEdyZWF0ZXIsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBncmVhdGVyIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { GreaterEqual } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { greaterEqualImplCPU } from '../kernel_utils/shared';\nconst GREATER_EQUAL = `return float(a >= b);`;\nconst GREATER_EQUAL_PACKED = `\n return vec4(greaterThanEqual(a, b));\n`;\nexport const greaterEqual = binaryKernelFunc({\n opSnippet: GREATER_EQUAL,\n packedOpSnippet: GREATER_EQUAL_PACKED,\n dtype: 'bool',\n cpuKernelImpl: greaterEqualImplCPU\n});\nexport const greaterEqualConfig = {\n kernelName: GreaterEqual,\n backendName: 'webgl',\n kernelFunc: greaterEqual\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JlYXRlckVxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0dyZWF0ZXJFcXVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUEyQixNQUFNLHVCQUF1QixDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTNELE1BQU0sYUFBYSxHQUFHLHVCQUF1QixDQUFDO0FBQzlDLE1BQU0sb0JBQW9CLEdBQUc7O0NBRTVCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7SUFDM0MsU0FBUyxFQUFFLGFBQWE7SUFDeEIsZUFBZSxFQUFFLG9CQUFvQjtJQUNyQyxLQUFLLEVBQUUsTUFBTTtJQUNiLGFBQWEsRUFBRSxtQkFBbUI7Q0FDbkMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWlCO0lBQzlDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxZQUFxQztDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dyZWF0ZXJFcXVhbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7Z3JlYXRlckVxdWFsSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmNvbnN0IEdSRUFURVJfRVFVQUwgPSBgcmV0dXJuIGZsb2F0KGEgPj0gYik7YDtcbmNvbnN0IEdSRUFURVJfRVFVQUxfUEFDS0VEID0gYFxuICByZXR1cm4gdmVjNChncmVhdGVyVGhhbkVxdWFsKGEsIGIpKTtcbmA7XG5cbmV4cG9ydCBjb25zdCBncmVhdGVyRXF1YWwgPSBiaW5hcnlLZXJuZWxGdW5jKHtcbiAgb3BTbmlwcGV0OiBHUkVBVEVSX0VRVUFMLFxuICBwYWNrZWRPcFNuaXBwZXQ6IEdSRUFURVJfRVFVQUxfUEFDS0VELFxuICBkdHlwZTogJ2Jvb2wnLFxuICBjcHVLZXJuZWxJbXBsOiBncmVhdGVyRXF1YWxJbXBsQ1BVXG59KTtcblxuZXhwb3J0IGNvbnN0IGdyZWF0ZXJFcXVhbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBHcmVhdGVyRXF1YWwsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBncmVhdGVyRXF1YWwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IFFT } from '@tensorflow/tfjs-core';\nimport { fftImpl } from './FFT_impl';\nexport function ifft(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n return fftImpl(input, true /* inverse */, backend);\n}\nexport const ifftConfig = {\n kernelName: IFFT,\n backendName: 'webgl',\n kernelFunc: ifft\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUZGVC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9JRkZULnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQXVDLE1BQU0sdUJBQXVCLENBQUM7QUFJakYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVuQyxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQXFEO0lBRXhFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFdkIsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtJRkZULCBJRkZUSW5wdXRzLCBLZXJuZWxDb25maWcsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5cbmltcG9ydCB7ZmZ0SW1wbH0gZnJvbSAnLi9GRlRfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpZmZ0KGFyZ3M6IHtpbnB1dHM6IElGRlRJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7aW5wdXR9ID0gaW5wdXRzO1xuXG4gIHJldHVybiBmZnRJbXBsKGlucHV0LCB0cnVlIC8qIGludmVyc2UgKi8sIGJhY2tlbmQpO1xufVxuXG5leHBvcnQgY29uc3QgaWZmdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBJRkZULFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogaWZmdFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsFinite } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst IS_FINITE = `return float(!isnan(x) && !isinf(x));`;\nexport const isFinite = unaryKernelFunc({ opSnippet: IS_FINITE, dtype: 'bool' });\nexport const isFiniteConfig = {\n kernelName: IsFinite,\n backendName: 'webgl',\n kernelFunc: isFinite,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNGaW5pdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvSXNGaW5pdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRSxNQUFNLFNBQVMsR0FBRyx1Q0FBdUMsQ0FBQztBQUUxRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7SXNGaW5pdGUsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgSVNfRklOSVRFID0gYHJldHVybiBmbG9hdCghaXNuYW4oeCkgJiYgIWlzaW5mKHgpKTtgO1xuXG5leHBvcnQgY29uc3QgaXNGaW5pdGUgPSB1bmFyeUtlcm5lbEZ1bmMoe29wU25pcHBldDogSVNfRklOSVRFLCBkdHlwZTogJ2Jvb2wnfSk7XG5cbmV4cG9ydCBjb25zdCBpc0Zpbml0ZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBJc0Zpbml0ZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGlzRmluaXRlLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsInf } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst IS_INF = `return float(isinf(x));`;\nexport const isInf = unaryKernelFunc({ opSnippet: IS_INF, dtype: 'bool' });\nexport const isInfConfig = {\n kernelName: IsInf,\n backendName: 'webgl',\n kernelFunc: isInf,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNJbmYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvSXNJbmYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRSxNQUFNLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQztBQUV6QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7SXNJbmYsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgSVNfSU5GID0gYHJldHVybiBmbG9hdChpc2luZih4KSk7YDtcblxuZXhwb3J0IGNvbnN0IGlzSW5mID0gdW5hcnlLZXJuZWxGdW5jKHtvcFNuaXBwZXQ6IElTX0lORiwgZHR5cGU6ICdib29sJ30pO1xuXG5leHBvcnQgY29uc3QgaXNJbmZDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogSXNJbmYsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBpc0luZixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsNan } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst IS_NAN = `return float(isnan(x));`;\nexport const isNaN = unaryKernelFunc({ opSnippet: IS_NAN, dtype: 'bool' });\nexport const isNaNConfig = {\n kernelName: IsNan,\n backendName: 'webgl',\n kernelFunc: isNaN,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNOYU4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvSXNOYU4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRSxNQUFNLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQztBQUV6QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7SXNOYW4sIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgSVNfTkFOID0gYHJldHVybiBmbG9hdChpc25hbih4KSk7YDtcblxuZXhwb3J0IGNvbnN0IGlzTmFOID0gdW5hcnlLZXJuZWxGdW5jKHtvcFNuaXBwZXQ6IElTX05BTiwgZHR5cGU6ICdib29sJ30pO1xuXG5leHBvcnQgY29uc3QgaXNOYU5Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogSXNOYW4sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBpc05hTixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Less } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { lessImplCPU } from '../kernel_utils/shared';\nconst LESS = `return float(a < b);`;\nconst LESS_PACKED = `\n return vec4(lessThan(a, b));\n`;\nexport const less = binaryKernelFunc({\n opSnippet: LESS,\n packedOpSnippet: LESS_PACKED,\n cpuKernelImpl: lessImplCPU,\n dtype: 'bool'\n});\nexport const lessConfig = {\n kernelName: Less,\n backendName: 'webgl',\n kernelFunc: less\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9MZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRW5ELE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDO0FBQ3BDLE1BQU0sV0FBVyxHQUFHOztDQUVuQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDO0lBQ25DLFNBQVMsRUFBRSxJQUFJO0lBQ2YsZUFBZSxFQUFFLFdBQVc7SUFDNUIsYUFBYSxFQUFFLFdBQVc7SUFDMUIsS0FBSyxFQUFFLE1BQU07Q0FDZCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTGVzc30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7bGVzc0ltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5jb25zdCBMRVNTID0gYHJldHVybiBmbG9hdChhIDwgYik7YDtcbmNvbnN0IExFU1NfUEFDS0VEID0gYFxuICByZXR1cm4gdmVjNChsZXNzVGhhbihhLCBiKSk7XG5gO1xuXG5leHBvcnQgY29uc3QgbGVzcyA9IGJpbmFyeUtlcm5lbEZ1bmMoe1xuICBvcFNuaXBwZXQ6IExFU1MsXG4gIHBhY2tlZE9wU25pcHBldDogTEVTU19QQUNLRUQsXG4gIGNwdUtlcm5lbEltcGw6IGxlc3NJbXBsQ1BVLFxuICBkdHlwZTogJ2Jvb2wnXG59KTtcblxuZXhwb3J0IGNvbnN0IGxlc3NDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTGVzcyxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGxlc3MgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LessEqual } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { lessEqualImplCPU } from '../kernel_utils/shared';\nexport const LESS_EQUAL = `return float(a <= b);`;\nexport const LESS_EQUAL_PACKED = `\n return vec4(lessThanEqual(a, b));\n`;\nexport const lessEqual = binaryKernelFunc({\n opSnippet: LESS_EQUAL,\n packedOpSnippet: LESS_EQUAL_PACKED,\n cpuKernelImpl: lessEqualImplCPU,\n dtype: 'bool'\n});\nexport const lessEqualConfig = {\n kernelName: LessEqual,\n backendName: 'webgl',\n kernelFunc: lessEqual\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVzc0VxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0xlc3NFcXVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRzs7Q0FFaEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztJQUN4QyxTQUFTLEVBQUUsVUFBVTtJQUNyQixlQUFlLEVBQUUsaUJBQWlCO0lBQ2xDLGFBQWEsRUFBRSxnQkFBZ0I7SUFDL0IsS0FBSyxFQUFFLE1BQU07Q0FDZCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTGVzc0VxdWFsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtsZXNzRXF1YWxJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuZXhwb3J0IGNvbnN0IExFU1NfRVFVQUwgPSBgcmV0dXJuIGZsb2F0KGEgPD0gYik7YDtcbmV4cG9ydCBjb25zdCBMRVNTX0VRVUFMX1BBQ0tFRCA9IGBcbiAgcmV0dXJuIHZlYzQobGVzc1RoYW5FcXVhbChhLCBiKSk7XG5gO1xuXG5leHBvcnQgY29uc3QgbGVzc0VxdWFsID0gYmluYXJ5S2VybmVsRnVuYyh7XG4gIG9wU25pcHBldDogTEVTU19FUVVBTCxcbiAgcGFja2VkT3BTbmlwcGV0OiBMRVNTX0VRVUFMX1BBQ0tFRCxcbiAgY3B1S2VybmVsSW1wbDogbGVzc0VxdWFsSW1wbENQVSxcbiAgZHR5cGU6ICdib29sJ1xufSk7XG5cbmV4cG9ydCBjb25zdCBsZXNzRXF1YWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTGVzc0VxdWFsLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogbGVzc0VxdWFsIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LinSpace } from '@tensorflow/tfjs-core';\nimport { linSpaceImplCPU } from '../kernel_utils/shared';\nexport function linSpace(args) {\n const { backend, attrs } = args;\n const { start, stop, num } = attrs;\n // TODO: Use CPU implementation due to the precision problem in Safari.\n const outVals = linSpaceImplCPU(start, stop, num);\n return backend.makeTensorInfo([outVals.length], 'float32', outVals);\n}\nexport const linSpaceConfig = {\n kernelName: LinSpace,\n backendName: 'webgl',\n kernelFunc: linSpace\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluU3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvTGluU3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixRQUFRLEVBQTRCLE1BQU0sdUJBQXVCLENBQUM7QUFHcEcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE1BQU0sVUFBVSxRQUFRLENBQ3BCLElBQXVEO0lBQ3pELE1BQU0sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzlCLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVqQyx1RUFBdUU7SUFDdkUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbEQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsUUFBaUM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIExpblNwYWNlLCBMaW5TcGFjZUF0dHJzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtsaW5TcGFjZUltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGluU3BhY2UoXG4gICAgYXJnczoge2JhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF0dHJzOiBMaW5TcGFjZUF0dHJzfSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3N0YXJ0LCBzdG9wLCBudW19ID0gYXR0cnM7XG5cbiAgLy8gVE9ETzogVXNlIENQVSBpbXBsZW1lbnRhdGlvbiBkdWUgdG8gdGhlIHByZWNpc2lvbiBwcm9ibGVtIGluIFNhZmFyaS5cbiAgY29uc3Qgb3V0VmFscyA9IGxpblNwYWNlSW1wbENQVShzdGFydCwgc3RvcCwgbnVtKTtcbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oW291dFZhbHMubGVuZ3RoXSwgJ2Zsb2F0MzInLCBvdXRWYWxzKTtcbn1cblxuZXhwb3J0IGNvbnN0IGxpblNwYWNlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExpblNwYWNlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogbGluU3BhY2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Log } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET_UNARY, unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { logImplCPU } from '../kernel_utils/shared';\n// Windows chrome return 0 if the input is negative value. We will specifically\n// return NaN if the input is 0 to solve compatiblity issue.\nconst LOG = CHECK_NAN_SNIPPET_UNARY + `\n return x < 0.0 ? 0./0. : log(x);\n`;\nconst LOG_PACKED = `\n vec4 result = log(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r);\n result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g);\n result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b);\n result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a);\n return result;\n`;\nexport const log = unaryKernelFunc({ opSnippet: LOG, packedOpSnippet: LOG_PACKED, cpuKernelImpl: logImplCPU });\nexport const logConfig = {\n kernelName: Log,\n backendName: 'webgl',\n kernelFunc: log\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXBFLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFbEQsK0VBQStFO0FBQy9FLDREQUE0RDtBQUM1RCxNQUFNLEdBQUcsR0FBRyx1QkFBdUIsR0FBRzs7Q0FFckMsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHOzs7Ozs7OztDQVFsQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FDOUIsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7QUFFOUUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTG9nfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0NIRUNLX05BTl9TTklQUEVUX1VOQVJZLCB1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtsb2dJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuLy8gV2luZG93cyBjaHJvbWUgcmV0dXJuIDAgaWYgdGhlIGlucHV0IGlzIG5lZ2F0aXZlIHZhbHVlLiBXZSB3aWxsIHNwZWNpZmljYWxseVxuLy8gcmV0dXJuIE5hTiBpZiB0aGUgaW5wdXQgaXMgMCB0byBzb2x2ZSBjb21wYXRpYmxpdHkgaXNzdWUuXG5jb25zdCBMT0cgPSBDSEVDS19OQU5fU05JUFBFVF9VTkFSWSArIGBcbiAgcmV0dXJuIHggPCAwLjAgPyAwLi8wLiA6IGxvZyh4KTtcbmA7XG5cbmNvbnN0IExPR19QQUNLRUQgPSBgXG4gIHZlYzQgcmVzdWx0ID0gbG9nKHgpO1xuICBidmVjNCBpc05hTiA9IGlzbmFuKHgpO1xuICByZXN1bHQuciA9IGlzTmFOLnIgPyB4LnIgOiAoeC5yIDwgMC4wID8gMC4vMC4gOiByZXN1bHQucik7XG4gIHJlc3VsdC5nID0gaXNOYU4uZyA/IHguZyA6ICh4LmcgPCAwLjAgPyAwLi8wLiA6IHJlc3VsdC5nKTtcbiAgcmVzdWx0LmIgPSBpc05hTi5iID8geC5iIDogKHguYiA8IDAuMCA/IDAuLzAuIDogcmVzdWx0LmIpO1xuICByZXN1bHQuYSA9IGlzTmFOLmEgPyB4LmEgOiAoeC5hIDwgMC4wID8gMC4vMC4gOiByZXN1bHQuYSk7XG4gIHJldHVybiByZXN1bHQ7XG5gO1xuXG5leHBvcnQgY29uc3QgbG9nID0gdW5hcnlLZXJuZWxGdW5jKFxuICAgIHtvcFNuaXBwZXQ6IExPRywgcGFja2VkT3BTbmlwcGV0OiBMT0dfUEFDS0VELCBjcHVLZXJuZWxJbXBsOiBsb2dJbXBsQ1BVfSk7XG5cbmV4cG9ydCBjb25zdCBsb2dDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTG9nLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogbG9nIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Log1p } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET_UNARY, unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst LOG1P = CHECK_NAN_SNIPPET_UNARY + `\n return log(1.0 + x);\n`;\nexport const log1p = unaryKernelFunc({ opSnippet: LOG1P });\nexport const log1pConfig = {\n kernelName: Log1p,\n backendName: 'webgl',\n kernelFunc: log1p,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nMXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvTG9nMXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEtBQUssRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUU1RixNQUFNLEtBQUssR0FBRyx1QkFBdUIsR0FBRzs7Q0FFdkMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBMb2cxcH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVF9VTkFSWSwgdW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgTE9HMVAgPSBDSEVDS19OQU5fU05JUFBFVF9VTkFSWSArIGBcbiAgcmV0dXJuIGxvZygxLjAgKyB4KTtcbmA7XG5cbmV4cG9ydCBjb25zdCBsb2cxcCA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBMT0cxUH0pO1xuXG5leHBvcnQgY29uc3QgbG9nMXBDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTG9nMXAsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBsb2cxcCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalAnd } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst LOGICAL_AND = `return float(a >= 1.0 && b >= 1.0);`;\nconst LOGICAL_AND_PACKED = `\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`;\nexport const logicalAnd = binaryKernelFunc({\n opSnippet: LOGICAL_AND,\n packedOpSnippet: LOGICAL_AND_PACKED,\n dtype: 'bool'\n});\nexport const logicalAndConfig = {\n kernelName: LogicalAnd,\n backendName: 'webgl',\n kernelFunc: logicalAnd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbEFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Mb2dpY2FsQW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFcEUsTUFBTSxXQUFXLEdBQUcscUNBQXFDLENBQUM7QUFDMUQsTUFBTSxrQkFBa0IsR0FBRzs7OztDQUkxQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDO0lBQ3pDLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLGVBQWUsRUFBRSxrQkFBa0I7SUFDbkMsS0FBSyxFQUFFLE1BQU07Q0FDZCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBaUI7SUFDNUMsVUFBVSxFQUFFLFVBQVU7SUFDdEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFVBQW1DO0NBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBMb2dpY2FsQW5kfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuXG5jb25zdCBMT0dJQ0FMX0FORCA9IGByZXR1cm4gZmxvYXQoYSA+PSAxLjAgJiYgYiA+PSAxLjApO2A7XG5jb25zdCBMT0dJQ0FMX0FORF9QQUNLRUQgPSBgXG4gIHJldHVybiB2ZWM0KFxuICAgIHZlYzQoZ3JlYXRlclRoYW5FcXVhbChhLCB2ZWM0KDEuMCkpKSAqXG4gICAgdmVjNChncmVhdGVyVGhhbkVxdWFsKGIsIHZlYzQoMS4wKSkpKTtcbmA7XG5cbmV4cG9ydCBjb25zdCBsb2dpY2FsQW5kID0gYmluYXJ5S2VybmVsRnVuYyh7XG4gIG9wU25pcHBldDogTE9HSUNBTF9BTkQsXG4gIHBhY2tlZE9wU25pcHBldDogTE9HSUNBTF9BTkRfUEFDS0VELFxuICBkdHlwZTogJ2Jvb2wnXG59KTtcblxuZXhwb3J0IGNvbnN0IGxvZ2ljYWxBbmRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTG9naWNhbEFuZCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGxvZ2ljYWxBbmQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalNot } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst LOGICAL_NOT = `return float(!(x >= 1.0));`;\nexport const logicalNot = unaryKernelFunc({ opSnippet: LOGICAL_NOT });\nexport const logicalNotConfig = {\n kernelName: LogicalNot,\n backendName: 'webgl',\n kernelFunc: logicalNot,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbE5vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Mb2dpY2FsTm90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFbkUsTUFBTSxXQUFXLEdBQUcsNEJBQTRCLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFpQjtJQUM1QyxVQUFVLEVBQUUsVUFBVTtJQUN0QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsVUFBVTtDQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTG9naWNhbE5vdH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgTE9HSUNBTF9OT1QgPSBgcmV0dXJuIGZsb2F0KCEoeCA+PSAxLjApKTtgO1xuXG5leHBvcnQgY29uc3QgbG9naWNhbE5vdCA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBMT0dJQ0FMX05PVH0pO1xuXG5leHBvcnQgY29uc3QgbG9naWNhbE5vdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMb2dpY2FsTm90LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogbG9naWNhbE5vdCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalOr } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst LOGICAL_OR = `return float(a >= 1.0 || b >= 1.0);`;\nconst 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`;\nexport const logicalOr = binaryKernelFunc({ opSnippet: LOGICAL_OR, packedOpSnippet: LOGICAL_OR_PACKED, dtype: 'bool' });\nexport const logicalOrConfig = {\n kernelName: LogicalOr,\n backendName: 'webgl',\n kernelFunc: logicalOr\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbE9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0xvZ2ljYWxPci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sVUFBVSxHQUFHLHFDQUFxQyxDQUFDO0FBQ3pELE1BQU0saUJBQWlCLEdBQUc7Ozs7O0NBS3pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQ3JDLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7QUFFaEYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQjtJQUMzQyxVQUFVLEVBQUUsU0FBUztJQUNyQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIExvZ2ljYWxPcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgTE9HSUNBTF9PUiA9IGByZXR1cm4gZmxvYXQoYSA+PSAxLjAgfHwgYiA+PSAxLjApO2A7XG5jb25zdCBMT0dJQ0FMX09SX1BBQ0tFRCA9IGBcbiAgcmV0dXJuIG1pbihcbiAgICB2ZWM0KGdyZWF0ZXJUaGFuRXF1YWwoYSwgdmVjNCgxLjApKSkgK1xuICAgIHZlYzQoZ3JlYXRlclRoYW5FcXVhbChiLCB2ZWM0KDEuMCkpKSxcbiAgICB2ZWM0KDEuMCkpO1xuYDtcblxuZXhwb3J0IGNvbnN0IGxvZ2ljYWxPciA9IGJpbmFyeUtlcm5lbEZ1bmMoXG4gICAge29wU25pcHBldDogTE9HSUNBTF9PUiwgcGFja2VkT3BTbmlwcGV0OiBMT0dJQ0FMX09SX1BBQ0tFRCwgZHR5cGU6ICdib29sJ30pO1xuXG5leHBvcnQgY29uc3QgbG9naWNhbE9yQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExvZ2ljYWxPcixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IGxvZ2ljYWxPciBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class LRNProgram {\n constructor(xShape, radius, bias, alpha, beta) {\n this.variableNames = ['x'];\n this.outputShape = [];\n const rad = radius;\n const maxD = xShape[3] - 1;\n this.outputShape = xShape;\n // optimize pow(bias + alpha * sum, -beta)\n // src: https://github.com/tensorflow/tensorflow/..\n // blob/26033a1644a9c4a5fbe3170ab2e864b6a4ccd4ca/..\n // tensorflow/core/kernels/mkl_lrn_op.cc#L320\n let powOperator;\n const basis = `float(${bias}) + float(${alpha}) * sum`;\n if (beta === 0.5) {\n powOperator = `inversesqrt(${basis})`;\n }\n else if (beta === 1.0) {\n powOperator = `1.0/(${basis})`;\n }\n else {\n powOperator = `exp(log(${basis}) * float(-${beta}));`;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHJuX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvbHJuX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8sVUFBVTtJQUtyQixZQUNJLE1BQWdCLEVBQUUsTUFBYyxFQUFFLElBQVksRUFBRSxLQUFhLEVBQzdELElBQVk7UUFOaEIsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBTXpCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNuQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBRTFCLDBDQUEwQztRQUMxQyxtREFBbUQ7UUFDbkQsbURBQW1EO1FBQ25ELDZDQUE2QztRQUM3QyxJQUFJLFdBQVcsQ0FBQztRQUNoQixNQUFNLEtBQUssR0FBRyxTQUFTLElBQUksYUFBYSxLQUFLLFNBQVMsQ0FBQztRQUN2RCxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDaEIsV0FBVyxHQUFHLGVBQWUsS0FBSyxHQUFHLENBQUM7U0FDdkM7YUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDdkIsV0FBVyxHQUFHLFFBQVEsS0FBSyxHQUFHLENBQUM7U0FDaEM7YUFBTTtZQUNMLFdBQVcsR0FBRyxXQUFXLEtBQUssY0FBYyxJQUFJLEtBQUssQ0FBQztTQUN2RDtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7Ozs7Ozs7Ozt3QkFTSSxHQUFHLFVBQVUsR0FBRzs7b0NBRUosSUFBSTs7Ozs7MEJBS2QsV0FBVzs7O0tBR2hDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgTFJOUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICB4U2hhcGU6IG51bWJlcltdLCByYWRpdXM6IG51bWJlciwgYmlhczogbnVtYmVyLCBhbHBoYTogbnVtYmVyLFxuICAgICAgYmV0YTogbnVtYmVyKSB7XG4gICAgY29uc3QgcmFkID0gcmFkaXVzO1xuICAgIGNvbnN0IG1heEQgPSB4U2hhcGVbM10gLSAxO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSB4U2hhcGU7XG5cbiAgICAvLyBvcHRpbWl6ZSBwb3coYmlhcyArIGFscGhhICogc3VtLCAtYmV0YSlcbiAgICAvLyBzcmM6IGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvLi5cbiAgICAvLyBibG9iLzI2MDMzYTE2NDRhOWM0YTVmYmUzMTcwYWIyZTg2NGI2YTRjY2Q0Y2EvLi5cbiAgICAvLyB0ZW5zb3JmbG93L2NvcmUva2VybmVscy9ta2xfbHJuX29wLmNjI0wzMjBcbiAgICBsZXQgcG93T3BlcmF0b3I7XG4gICAgY29uc3QgYmFzaXMgPSBgZmxvYXQoJHtiaWFzfSkgKyBmbG9hdCgke2FscGhhfSkgKiBzdW1gO1xuICAgIGlmIChiZXRhID09PSAwLjUpIHtcbiAgICAgIHBvd09wZXJhdG9yID0gYGludmVyc2VzcXJ0KCR7YmFzaXN9KWA7XG4gICAgfSBlbHNlIGlmIChiZXRhID09PSAxLjApIHtcbiAgICAgIHBvd09wZXJhdG9yID0gYDEuMC8oJHtiYXNpc30pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG93T3BlcmF0b3IgPSBgZXhwKGxvZygke2Jhc2lzfSkgKiBmbG9hdCgtJHtiZXRhfSkpO2A7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgciA9IGNvb3Jkc1sxXTtcbiAgICAgICAgaW50IGMgPSBjb29yZHNbMl07XG4gICAgICAgIGludCBkID0gY29vcmRzWzNdO1xuICAgICAgICBmbG9hdCB4ID0gZ2V0WChiLCByLCBjLCBkKTtcbiAgICAgICAgZmxvYXQgc3VtID0gMC4wO1xuICAgICAgICBmb3IgKGludCBqID0gLSR7cmFkfTsgaiA8PSAke3JhZH07IGorKykge1xuICAgICAgICAgIGludCBpZHggPSBkICsgajtcbiAgICAgICAgICBpZiAoaWR4ID49IDAgJiYgaWR4IDw9ICAke21heER9KSB7XG4gICAgICAgICAgICBmbG9hdCB6ID0gZ2V0WChiLCByLCBjLCBpZHgpO1xuICAgICAgICAgICAgc3VtICs9IHogKiB6O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmbG9hdCB2YWwgPSB4ICogJHtwb3dPcGVyYXRvcn07XG4gICAgICAgIHNldE91dHB1dCh2YWwpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class LRNPackedProgram {\n constructor(xShape, radius, bias, alpha, beta) {\n this.variableNames = ['x'];\n this.outputShape = [];\n this.packedInputs = true;\n this.packedOutput = true;\n const rad = radius;\n const maxD = xShape[3] - 1;\n this.outputShape = xShape;\n // optimize pow(bias + alpha * sum, -beta)\n // src: https://github.com/tensorflow/tensorflow/..\n // blob/26033a1644a9c4a5fbe3170ab2e864b6a4ccd4ca/..\n // tensorflow/core/kernels/mkl_lrn_op.cc#L320\n let powOperator;\n const basis = `float(${bias}) + float(${alpha}) * sum`;\n if (beta === 0.5) {\n powOperator = `inversesqrt(${basis})`;\n }\n else if (beta === 1.0) {\n powOperator = `1.0/(${basis})`;\n }\n else {\n powOperator = `exp(log(${basis}) * float(-${beta}));`;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHJuX3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2xybl9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7SUFPM0IsWUFDSSxNQUFnQixFQUFFLE1BQWMsRUFBRSxJQUFZLEVBQUUsS0FBYSxFQUM3RCxJQUFZO1FBUmhCLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUUzQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUtsQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUUxQiwwQ0FBMEM7UUFDMUMsbURBQW1EO1FBQ25ELG1EQUFtRDtRQUNuRCw2Q0FBNkM7UUFDN0MsSUFBSSxXQUFXLENBQUM7UUFDaEIsTUFBTSxLQUFLLEdBQUcsU0FBUyxJQUFJLGFBQWEsS0FBSyxTQUFTLENBQUM7UUFDdkQsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ2hCLFdBQVcsR0FBRyxlQUFlLEtBQUssR0FBRyxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ3ZCLFdBQVcsR0FBRyxRQUFRLEtBQUssR0FBRyxDQUFDO1NBQ2hDO2FBQU07WUFDTCxXQUFXLEdBQUcsV0FBVyxLQUFLLGNBQWMsSUFBSSxLQUFLLENBQUM7U0FDdkQ7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7OztnQ0FRWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQ0FDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztpQ0FlbEIsR0FBRzs7Ozs7Ozs7Ozs7eUJBV1gsR0FBRyxVQUFVLEdBQUc7Ozs2REFHb0IsSUFBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBDQXFCdkIsV0FBVzs7O0tBR2hELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgTFJOUGFja2VkUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIHBhY2tlZElucHV0cyA9IHRydWU7XG4gIHBhY2tlZE91dHB1dCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICB4U2hhcGU6IG51bWJlcltdLCByYWRpdXM6IG51bWJlciwgYmlhczogbnVtYmVyLCBhbHBoYTogbnVtYmVyLFxuICAgICAgYmV0YTogbnVtYmVyKSB7XG4gICAgY29uc3QgcmFkID0gcmFkaXVzO1xuICAgIGNvbnN0IG1heEQgPSB4U2hhcGVbM10gLSAxO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSB4U2hhcGU7XG5cbiAgICAvLyBvcHRpbWl6ZSBwb3coYmlhcyArIGFscGhhICogc3VtLCAtYmV0YSlcbiAgICAvLyBzcmM6IGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvLi5cbiAgICAvLyBibG9iLzI2MDMzYTE2NDRhOWM0YTVmYmUzMTcwYWIyZTg2NGI2YTRjY2Q0Y2EvLi5cbiAgICAvLyB0ZW5zb3JmbG93L2NvcmUva2VybmVscy9ta2xfbHJuX29wLmNjI0wzMjBcbiAgICBsZXQgcG93T3BlcmF0b3I7XG4gICAgY29uc3QgYmFzaXMgPSBgZmxvYXQoJHtiaWFzfSkgKyBmbG9hdCgke2FscGhhfSkgKiBzdW1gO1xuICAgIGlmIChiZXRhID09PSAwLjUpIHtcbiAgICAgIHBvd09wZXJhdG9yID0gYGludmVyc2VzcXJ0KCR7YmFzaXN9KWA7XG4gICAgfSBlbHNlIGlmIChiZXRhID09PSAxLjApIHtcbiAgICAgIHBvd09wZXJhdG9yID0gYDEuMC8oJHtiYXNpc30pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG93T3BlcmF0b3IgPSBgZXhwKGxvZygke2Jhc2lzfSkgKiBmbG9hdCgtJHtiZXRhfSkpO2A7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiID0gY29vcmRzLng7XG4gICAgICAgIGludCByID0gY29vcmRzLnk7XG4gICAgICAgIGludCBjID0gY29vcmRzLno7XG4gICAgICAgIGludCBkID0gY29vcmRzLnc7XG5cbiAgICAgICAgYm9vbCBoYXNOZXh0Q29sID0gZCA8ICR7dGhpcy5vdXRwdXRTaGFwZVszXX07XG4gICAgICAgIGJvb2wgaGFzTmV4dFJvdyA9IGMgPCAke3RoaXMub3V0cHV0U2hhcGVbMl19O1xuXG4gICAgICAgIHZlYzQgc3VtID0gdmVjNCgwLik7XG4gICAgICAgIHZlYzQgeEZyYWdBdE91dHB1dENvb3JkcyA9IGdldFgoYiwgciwgYywgZCk7XG5cbiAgICAgICAgdmVjNCB4QXRPdXRwdXRDb29yZHMgPSB2ZWM0KFxuICAgICAgICAgIGdldENoYW5uZWwoeEZyYWdBdE91dHB1dENvb3JkcywgdmVjMihjLCBkKSksXG4gICAgICAgICAgaGFzTmV4dENvbCA/XG4gICAgICAgICAgICBnZXRDaGFubmVsKHhGcmFnQXRPdXRwdXRDb29yZHMsIHZlYzIoYywgZCArIDEpKSA6IDAuMCxcbiAgICAgICAgICBoYXNOZXh0Um93ID9cbiAgICAgICAgICAgIGdldENoYW5uZWwoeEZyYWdBdE91dHB1dENvb3JkcyAsIHZlYzIoYyArIDEsIGQpKSA6IDAuMCxcbiAgICAgICAgICAoaGFzTmV4dFJvdyAmJiBoYXNOZXh0Q29sKSA/XG4gICAgICAgICAgICBnZXRDaGFubmVsKHhGcmFnQXRPdXRwdXRDb29yZHMsIHZlYzIoYyArIDEsIGQgKyAxKSkgOiAwLjBcbiAgICAgICAgKTtcblxuICAgICAgICBpbnQgZmlyc3RDaGFubmVsID0gZCAtICR7cmFkfTtcbiAgICAgICAgdmVjMiBjYWNoZSA9IHZlYzIoMC4pO1xuICAgICAgICBpZihmaXJzdENoYW5uZWwgPj0gMCl7XG4gICAgICAgICAgdmVjNCBmaXJzdENoYW5uZWxGcmFnID0gZ2V0WChiLCByLCBjLCBmaXJzdENoYW5uZWwpO1xuICAgICAgICAgIGNhY2hlLnggPSBnZXRDaGFubmVsKGZpcnN0Q2hhbm5lbEZyYWcsIHZlYzIoYywgZmlyc3RDaGFubmVsKSk7XG4gICAgICAgICAgICBpZihoYXNOZXh0Um93KXtcbiAgICAgICAgICAgICAgY2FjaGUueSA9IGdldENoYW5uZWwoZmlyc3RDaGFubmVsRnJhZywgdmVjMihjICsgMSwgZmlyc3RDaGFubmVsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpdmVjMiBkZXB0aCA9IGl2ZWMyKGQsIGQgKyAxKTtcbiAgICAgICAgZm9yIChpbnQgaiA9IC0gJHtyYWR9OyBqIDw9ICR7cmFkfTsgaisrKSB7XG4gICAgICAgICAgaXZlYzIgaWR4ID0gZGVwdGggKyBqO1xuICAgICAgICAgIGJ2ZWMyIGFib3ZlTG93ZXJCb3VuZCA9IGdyZWF0ZXJUaGFuRXF1YWwoaWR4LCBpdmVjMigwKSk7XG4gICAgICAgICAgYnZlYzIgYmVsb3dVcHBlckJvdW5kID0gbGVzc1RoYW5FcXVhbChpZHgsIGl2ZWMyKCR7bWF4RH0pKTtcblxuICAgICAgICAgIGJvb2wgZGVwdGhJblJhbmdlID0gYWJvdmVMb3dlckJvdW5kLnggJiYgYmVsb3dVcHBlckJvdW5kLng7XG4gICAgICAgICAgYm9vbCBkZXB0aFBsdXNPbmVJblJhbmdlID0gYWJvdmVMb3dlckJvdW5kLnkgJiYgYmVsb3dVcHBlckJvdW5kLnk7XG5cbiAgICAgICAgICBpZihkZXB0aEluUmFuZ2UgfHwgZGVwdGhQbHVzT25lSW5SYW5nZSl7XG4gICAgICAgICAgICB2ZWM0IHogPSB2ZWM0KDAuKTtcbiAgICAgICAgICAgIHZlYzQgeEZyYWdBdEN1cnJlbnREZXB0aDtcbiAgICAgICAgICAgIHoueHogPSBjYWNoZS54eTtcbiAgICAgICAgICAgIGlmKGRlcHRoUGx1c09uZUluUmFuZ2UgJiYgaGFzTmV4dENvbCl7XG4gICAgICAgICAgICAgIHhGcmFnQXRDdXJyZW50RGVwdGggPSBpZHgueSAhPSBkID9cbiAgICAgICAgICAgICAgICBnZXRYKGIsIHIsIGMsIGlkeC55KSA6IHhGcmFnQXRPdXRwdXRDb29yZHM7XG4gICAgICAgICAgICAgIHoueSA9IGdldENoYW5uZWwoeEZyYWdBdEN1cnJlbnREZXB0aCwgdmVjMihjLCBpZHgueSkpO1xuICAgICAgICAgICAgICBpZihoYXNOZXh0Um93KXtcbiAgICAgICAgICAgICAgICB6LncgPSBnZXRDaGFubmVsKHhGcmFnQXRDdXJyZW50RGVwdGgsIHZlYzIoYyArIDEsIGlkeC55KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhY2hlLnh5ID0gei55dztcbiAgICAgICAgICAgIHN1bSArPSB6ICogejtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmVjNCByZXN1bHQgPSB4QXRPdXRwdXRDb29yZHMgKiAke3Bvd09wZXJhdG9yfTtcbiAgICAgICAgc2V0T3V0cHV0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, LRN } from '@tensorflow/tfjs-core';\nimport { LRNProgram } from '../lrn_gpu';\nimport { LRNPackedProgram } from '../lrn_packed_gpu';\nexport const lrn = (args) => {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { depthRadius, bias, alpha, beta } = attrs;\n const program = env().getBool('WEBGL_PACK_NORMALIZATION') ?\n new LRNPackedProgram(x.shape, depthRadius, bias, alpha, beta) :\n new LRNProgram(x.shape, depthRadius, bias, alpha, beta);\n return backend.runWebGLProgram(program, [x], x.dtype);\n};\n// tslint:disable-next-line: variable-name\nexport const LRNConfig = {\n kernelName: LRN,\n backendName: 'webgl',\n kernelFunc: lrn\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTFJOLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL0xSTi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUE0QixHQUFHLEVBQWtDLE1BQU0sdUJBQXVCLENBQUM7QUFHMUcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQ1osQ0FBQyxJQUFxRSxFQUN2RCxFQUFFO0lBQ1gsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUvQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFViwwQ0FBMEM7QUFDMUMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2VudiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBMUk4sIExSTkF0dHJzLCBMUk5JbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0xSTlByb2dyYW19IGZyb20gJy4uL2xybl9ncHUnO1xuaW1wb3J0IHtMUk5QYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9scm5fcGFja2VkX2dwdSc7XG5cbmV4cG9ydCBjb25zdCBscm4gPVxuICAgIChhcmdzOiB7aW5wdXRzOiBMUk5JbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF0dHJzOiBMUk5BdHRyc30pOlxuICAgICAgICBUZW5zb3JJbmZvID0+IHtcbiAgICAgICAgICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICAgICAgICAgIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgICAgICAgICBjb25zdCB7ZGVwdGhSYWRpdXMsIGJpYXMsIGFscGhhLCBiZXRhfSA9IGF0dHJzO1xuXG4gICAgICAgICAgY29uc3QgcHJvZ3JhbSA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfTk9STUFMSVpBVElPTicpID9cbiAgICAgICAgICAgICAgbmV3IExSTlBhY2tlZFByb2dyYW0oeC5zaGFwZSwgZGVwdGhSYWRpdXMsIGJpYXMsIGFscGhhLCBiZXRhKSA6XG4gICAgICAgICAgICAgIG5ldyBMUk5Qcm9ncmFtKHguc2hhcGUsIGRlcHRoUmFkaXVzLCBiaWFzLCBhbHBoYSwgYmV0YSk7XG4gICAgICAgICAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFt4XSwgeC5kdHlwZSk7XG4gICAgICAgIH07XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdmFyaWFibGUtbmFtZVxuZXhwb3J0IGNvbnN0IExSTkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMUk4sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBscm4gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class LRNGradProgram {\n constructor(inputShape, depthRadius, bias, alpha, beta) {\n this.variableNames = ['inputImage', 'outputImage', 'dy'];\n this.outputShape = [];\n this.outputShape = inputShape;\n this.depth = inputShape[3];\n this.depthRadius = depthRadius;\n this.bias = bias;\n this.alpha = alpha;\n this.beta = beta;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHJuX2dyYWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9scm5fZ3JhZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFVekIsWUFDSSxVQUFvQixFQUFFLFdBQW1CLEVBQUUsSUFBWSxFQUFFLEtBQWEsRUFDdEUsSUFBWTtRQVhoQixrQkFBYSxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQVd6QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs4QkFRVSxJQUFJLENBQUMsS0FBSztvREFDWSxXQUFXO3lDQUN0QixJQUFJLENBQUMsS0FBSzswQkFDekIsV0FBVzs7O3NDQUdDLElBQUksQ0FBQyxLQUFLOzs7Ozs7Ozs7Ozs7Ozs7eUJBZXZCLEtBQUssb0JBQW9CLElBQUk7Ozs7Ozs7eUNBT2IsS0FBSzswQkFDcEIsSUFBSTs7OzswQ0FJWSxJQUFJOzs7Ozs7Ozs7Ozs7OztLQWN6QyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIExSTkdyYWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnaW5wdXRJbWFnZScsICdvdXRwdXRJbWFnZScsICdkeSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgZGVwdGhSYWRpdXM6IG51bWJlcjtcbiAgYmlhczogbnVtYmVyO1xuICBhbHBoYTogbnVtYmVyO1xuICBiZXRhOiBudW1iZXI7XG4gIGRlcHRoOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBpbnB1dFNoYXBlOiBudW1iZXJbXSwgZGVwdGhSYWRpdXM6IG51bWJlciwgYmlhczogbnVtYmVyLCBhbHBoYTogbnVtYmVyLFxuICAgICAgYmV0YTogbnVtYmVyKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGlucHV0U2hhcGU7XG4gICAgdGhpcy5kZXB0aCA9IGlucHV0U2hhcGVbM107XG4gICAgdGhpcy5kZXB0aFJhZGl1cyA9IGRlcHRoUmFkaXVzO1xuICAgIHRoaXMuYmlhcyA9IGJpYXM7XG4gICAgdGhpcy5hbHBoYSA9IGFscGhhO1xuICAgIHRoaXMuYmV0YSA9IGJldGE7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgciA9IGNvb3Jkc1sxXTtcbiAgICAgICAgaW50IGMgPSBjb29yZHNbMl07XG5cbiAgICAgICAgZmxvYXQgcmVzdWx0ID0gMC4wO1xuICAgICAgICBmb3IgKGludCBkID0gMDsgZCA8ICR7dGhpcy5kZXB0aH07ICsrZCkge1xuICAgICAgICAgIGludCBkZXB0aEJlZ2luID0gaW50KG1heCgwLjAsIGZsb2F0KGQgLSAke2RlcHRoUmFkaXVzfSkpKTtcbiAgICAgICAgICBpbnQgZGVwdGhFbmQgPSBpbnQobWluKGZsb2F0KCR7dGhpcy5kZXB0aH0pLFxuICAgICAgICAgICAgICBmbG9hdChkICsgJHtkZXB0aFJhZGl1c30gKyAxKSkpO1xuXG4gICAgICAgICAgY29uc3QgaW50IE1JTl9ERVBUSF9CRUdJTiA9IDA7XG4gICAgICAgICAgY29uc3QgaW50IE1BWF9ERVBUSF9FTkQgPSAke3RoaXMuZGVwdGh9O1xuXG4gICAgICAgICAgZmxvYXQgbm9ybSA9IDAuMDtcbiAgICAgICAgICBmb3IgKGludCBrID0gTUlOX0RFUFRIX0JFR0lOOyBrIDwgTUFYX0RFUFRIX0VORDsgKytrKSB7XG4gICAgICAgICAgICBpZiAoayA8IGRlcHRoQmVnaW4pe1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGsgPj0gZGVwdGhCZWdpbiAmJiBrIDwgZGVwdGhFbmQpIHtcbiAgICAgICAgICAgICAgbm9ybSArPSBnZXRJbnB1dEltYWdlKGIsIHIsIGMsIGspICogZ2V0SW5wdXRJbWFnZShiLCByLCBjLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub3JtID0gZmxvYXQoJHthbHBoYX0pICogbm9ybSArIGZsb2F0KCR7Ymlhc30pO1xuXG4gICAgICAgICAgZm9yKGludCBrID0gTUlOX0RFUFRIX0JFR0lOOyBrIDwgTUFYX0RFUFRIX0VORDsgKytrKXtcbiAgICAgICAgICAgIGlmIChrIDwgZGVwdGhCZWdpbil7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoayA+PSBkZXB0aEJlZ2luICYmIGsgPCBkZXB0aEVuZCl7XG4gICAgICAgICAgICAgIGZsb2F0IGR5aSA9IC0yLjAgKiBmbG9hdCgke2FscGhhfSlcbiAgICAgICAgICAgICAgICAqIGZsb2F0KCR7YmV0YX0pXG4gICAgICAgICAgICAgICAgKiBnZXRJbnB1dEltYWdlKGIsIHIsIGMsIGspICogZ2V0T3V0cHV0SW1hZ2UoYiwgciwgYywgZClcbiAgICAgICAgICAgICAgICAvIG5vcm07XG4gICAgICAgICAgICAgIGlmIChrID09IGQpIHtcbiAgICAgICAgICAgICAgICBkeWkgKz0gcG93KG5vcm0sIC0xLjAgKiAke2JldGF9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoayA9PSBjb29yZHNbM10pIHtcbiAgICAgICAgICAgICAgICBkeWkgKj0gZ2V0RHkoYiwgciwgYywgZCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGR5aTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldE91dHB1dChyZXN1bHQpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LRNGrad } from '@tensorflow/tfjs-core';\nimport { LRNGradProgram } from '../lrn_grad_gpu';\nexport const lrnGrad = (args) => {\n const { inputs, backend, attrs } = args;\n const { x, y, dy } = inputs;\n const { depthRadius, bias, alpha, beta } = attrs;\n const program = new LRNGradProgram(x.shape, depthRadius, bias, alpha, beta);\n return backend.runWebGLProgram(program, [x, y, dy], x.dtype);\n};\n// tslint:disable-next-line: variable-name\nexport const LRNGradConfig = {\n kernelName: LRNGrad,\n backendName: 'webgl',\n kernelFunc: lrnGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTFJOR3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9MUk5HcmFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsT0FBTyxFQUEwQyxNQUFNLHVCQUF1QixDQUFDO0FBR2pILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUl2QixFQUFjLEVBQUU7SUFDZixNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzFCLE1BQU0sRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDO0FBRUYsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBMUk5HcmFkLCBMUk5HcmFkQXR0cnMsIExSTkdyYWRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge0xSTkdyYWRQcm9ncmFtfSBmcm9tICcuLi9scm5fZ3JhZF9ncHUnO1xuXG5leHBvcnQgY29uc3QgbHJuR3JhZCA9IChhcmdzOiB7XG4gIGlucHV0czogTFJOR3JhZElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IExSTkdyYWRBdHRyc1xufSk6IFRlbnNvckluZm8gPT4ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgeSwgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7ZGVwdGhSYWRpdXMsIGJpYXMsIGFscGhhLCBiZXRhfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgTFJOR3JhZFByb2dyYW0oeC5zaGFwZSwgZGVwdGhSYWRpdXMsIGJpYXMsIGFscGhhLCBiZXRhKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFt4LCB5LCBkeV0sIHguZHR5cGUpO1xufTtcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB2YXJpYWJsZS1uYW1lXG5leHBvcnQgY29uc3QgTFJOR3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMUk5HcmFkLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogbHJuR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Max } from '@tensorflow/tfjs-core';\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nimport { maxImplCPU } from '../kernel_utils/shared';\nimport { maxImpl } from './Max_impl';\nimport { transposeImpl, transposeImplCPU } from './Transpose_impl';\nexport function max(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { reductionIndices, keepDims } = attrs;\n const xRank = x.shape.length;\n const origAxes = util.parseAxisParam(reductionIndices, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n const maxInputIsTransposed = permutedAxes != null;\n const shouldExecuteOnCPU = backend.shouldExecuteOnCPU([x]);\n let maxInput = x;\n if (maxInputIsTransposed) {\n if (shouldExecuteOnCPU) {\n const xTexData = backend.texData.get(maxInput.dataId);\n const values = xTexData.values;\n const newShape = new Array(xRank);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = x.shape[permutedAxes[i]];\n }\n const maxInputValues = transposeImplCPU(values, x.shape, x.dtype, permutedAxes, newShape);\n maxInput = backend.makeTensorInfo(newShape, x.dtype);\n const maxInputData = backend.texData.get(maxInput.dataId);\n maxInputData.values = maxInputValues;\n }\n else {\n maxInput = transposeImpl(x, permutedAxes, backend);\n }\n axes = backend_util.getInnerMostAxes(axes.length, xRank);\n }\n backend_util.assertAxesAreInnerMostDims('max', axes, xRank);\n const [maxOutShape, reduceShape] = backend_util.computeOutAndReduceShapes(maxInput.shape, axes);\n let outShape = maxOutShape;\n if (keepDims) {\n // rather than reshape at the end, set the target shape here.\n outShape = backend_util.expandShapeToKeepDim(maxOutShape, origAxes);\n }\n let out;\n if (shouldExecuteOnCPU) {\n const xTexData = backend.texData.get(maxInput.dataId);\n const values = xTexData.values;\n const outValues = maxImplCPU(values, util.sizeFromShape(reduceShape), outShape, x.dtype);\n out = backend.makeTensorInfo(outShape, x.dtype);\n const outData = backend.texData.get(out.dataId);\n outData.values = outValues;\n }\n else {\n out = maxImpl(maxInput, reduceShape, outShape, backend);\n }\n if (maxInputIsTransposed) {\n backend.disposeIntermediateTensorInfo(maxInput);\n }\n return out;\n}\nexport const maxConfig = {\n kernelName: Max,\n backendName: 'webgl',\n kernelFunc: max\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL01heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWEsR0FBRyxFQUFrQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxZQUFZLEVBQTRCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR25GLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRSxNQUFNLFVBQVUsR0FBRyxDQUNmLElBQXFFO0lBRXZFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFM0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBQ3BCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEUsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDO0lBQ2xELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFD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QU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxGdW5jLCBNYXgsIE1heEF0dHJzLCBNYXhJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHttYXhJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuaW1wb3J0IHttYXhJbXBsfSBmcm9tICcuL01heF9pbXBsJztcbmltcG9ydCB7dHJhbnNwb3NlSW1wbCwgdHJhbnNwb3NlSW1wbENQVX0gZnJvbSAnLi9UcmFuc3Bvc2VfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgoXG4gICAgYXJnczoge2lucHV0czogTWF4SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCBhdHRyczogTWF4QXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7cmVkdWN0aW9uSW5kaWNlcywga2VlcERpbXN9ID0gYXR0cnM7XG5cbiAgY29uc3QgeFJhbmsgPSB4LnNoYXBlLmxlbmd0aDtcblxuICBjb25zdCBvcmlnQXhlcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0ocmVkdWN0aW9uSW5kaWNlcywgeC5zaGFwZSk7XG4gIGxldCBheGVzID0gb3JpZ0F4ZXM7XG4gIGNvbnN0IHBlcm11dGVkQXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRBeGVzUGVybXV0YXRpb24oYXhlcywgeFJhbmspO1xuICBjb25zdCBtYXhJbnB1dElzVHJhbnNwb3NlZCA9IHBlcm11dGVkQXhlcyAhPSBudWxsO1xuICBjb25zdCBzaG91bGRFeGVjdXRlT25DUFUgPSBiYWNrZW5kLnNob3VsZEV4ZWN1dGVPbkNQVShbeF0pO1xuXG4gIGxldCBtYXhJbnB1dCA9IHg7XG4gIGlmIChtYXhJbnB1dElzVHJhbnNwb3NlZCkge1xuICAgIGlmIChzaG91bGRFeGVjdXRlT25DUFUpIHtcbiAgICAgIGNvbnN0IHhUZXhEYXRhID0gYmFja2VuZC50ZXhEYXRhLmdldChtYXhJbnB1dC5kYXRhSWQpO1xuICAgICAgY29uc3QgdmFsdWVzID0geFRleERhdGEudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgICAgIGNvbnN0IG5ld1NoYXBlOiBudW1iZXJbXSA9IG5ldyBBcnJheSh4UmFuayk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1NoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ld1NoYXBlW2ldID0geC5zaGFwZVtwZXJtdXRlZEF4ZXNbaV1dO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4SW5wdXRWYWx1ZXMgPVxuICAgICAgICAgIHRyYW5zcG9zZUltcGxDUFUodmFsdWVzLCB4LnNoYXBlLCB4LmR0eXBlLCBwZXJtdXRlZEF4ZXMsIG5ld1NoYXBlKTtcblxuICAgICAgbWF4SW5wdXQgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG5ld1NoYXBlLCB4LmR0eXBlKTtcbiAgICAgIGNvbnN0IG1heElucHV0RGF0YSA9IGJhY2tlbmQudGV4RGF0YS5nZXQobWF4SW5wdXQuZGF0YUlkKTtcbiAgICAgIG1heElucHV0RGF0YS52YWx1ZXMgPSBtYXhJbnB1dFZhbHVlcztcbiAgICB9IGVsc2Uge1xuICAgICAgbWF4SW5wdXQgPSB0cmFuc3Bvc2VJbXBsKHgsIHBlcm11dGVkQXhlcywgYmFja2VuZCk7XG4gICAgfVxuXG4gICAgYXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRJbm5lck1vc3RBeGVzKGF4ZXMubGVuZ3RoLCB4UmFuayk7XG4gIH1cblxuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ21heCcsIGF4ZXMsIHhSYW5rKTtcbiAgY29uc3QgW21heE91dFNoYXBlLCByZWR1Y2VTaGFwZV0gPVxuICAgICAgYmFja2VuZF91dGlsLmNvbXB1dGVPdXRBbmRSZWR1Y2VTaGFwZXMobWF4SW5wdXQuc2hhcGUsIGF4ZXMpO1xuXG4gIGxldCBvdXRTaGFwZSA9IG1heE91dFNoYXBlO1xuICBpZiAoa2VlcERpbXMpIHtcbiAgICAvLyByYXRoZXIgdGhhbiByZXNoYXBlIGF0IHRoZSBlbmQsIHNldCB0aGUgdGFyZ2V0IHNoYXBlIGhlcmUuXG4gICAgb3V0U2hhcGUgPSBiYWNrZW5kX3V0aWwuZXhwYW5kU2hhcGVUb0tlZXBEaW0obWF4T3V0U2hhcGUsIG9yaWdBeGVzKTtcbiAgfVxuXG4gIGxldCBvdXQ7XG4gIGlmIChzaG91bGRFeGVjdXRlT25DUFUpIHtcbiAgICBjb25zdCB4VGV4RGF0YSA9IGJhY2tlbmQudGV4RGF0YS5nZXQobWF4SW5wdXQuZGF0YUlkKTtcbiAgICBjb25zdCB2YWx1ZXMgPSB4VGV4RGF0YS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICAgIGNvbnN0IG91dFZhbHVlcyA9XG4gICAgICAgIG1heEltcGxDUFUodmFsdWVzLCB1dGlsLnNpemVGcm9tU2hhcGUocmVkdWNlU2hhcGUpLCBvdXRTaGFwZSwgeC5kdHlwZSk7XG5cbiAgICBvdXQgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG91dFNoYXBlLCB4LmR0eXBlKTtcbiAgICBjb25zdCBvdXREYXRhID0gYmFja2VuZC50ZXhEYXRhLmdldChvdXQuZGF0YUlkKTtcbiAgICBvdXREYXRhLnZhbHVlcyA9IG91dFZhbHVlcztcbiAgfSBlbHNlIHtcbiAgICBvdXQgPSBtYXhJbXBsKG1heElucHV0LCByZWR1Y2VTaGFwZSwgb3V0U2hhcGUsIGJhY2tlbmQpO1xuICB9XG5cbiAgaWYgKG1heElucHV0SXNUcmFuc3Bvc2VkKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhtYXhJbnB1dCk7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgbWF4Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1heCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG1heCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { reduce } from '../kernel_utils/reduce';\nimport { reshape } from '../kernels/Reshape';\nexport function maxImpl(x, reduceShape, outShape, backend) {\n const inSize = util.sizeFromShape(reduceShape);\n const xSize = util.sizeFromShape(x.shape);\n const batchSize = xSize / inSize;\n const reshapedInput = reshape({ inputs: { x }, attrs: { shape: [batchSize, inSize] }, backend });\n const reduced = reduce(reshapedInput, x.dtype, 'max', backend);\n const reshapedOutput = reshape({ inputs: { x: reduced }, attrs: { shape: outShape }, backend });\n backend.disposeIntermediateTensorInfo(reshapedInput);\n backend.disposeIntermediateTensorInfo(reduced);\n return reshapedOutput;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4X2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvTWF4X2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFhLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFM0MsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsQ0FBYSxFQUFFLFdBQXFCLEVBQUUsUUFBa0IsRUFDeEQsT0FBeUI7SUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLE1BQU0sYUFBYSxHQUNmLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFFekUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxNQUFNLGNBQWMsR0FDaEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBRXZFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFL0MsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtyZWR1Y2V9IGZyb20gJy4uL2tlcm5lbF91dGlscy9yZWR1Y2UnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9rZXJuZWxzL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4SW1wbChcbiAgICB4OiBUZW5zb3JJbmZvLCByZWR1Y2VTaGFwZTogbnVtYmVyW10sIG91dFNoYXBlOiBudW1iZXJbXSxcbiAgICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMKTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IGluU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG4gIGNvbnN0IHhTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHguc2hhcGUpO1xuICBjb25zdCBiYXRjaFNpemUgPSB4U2l6ZSAvIGluU2l6ZTtcbiAgY29uc3QgcmVzaGFwZWRJbnB1dCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4fSwgYXR0cnM6IHtzaGFwZTogW2JhdGNoU2l6ZSwgaW5TaXplXX0sIGJhY2tlbmR9KTtcblxuICBjb25zdCByZWR1Y2VkID0gcmVkdWNlKHJlc2hhcGVkSW5wdXQsIHguZHR5cGUsICdtYXgnLCBiYWNrZW5kKTtcbiAgY29uc3QgcmVzaGFwZWRPdXRwdXQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVkdWNlZH0sIGF0dHJzOiB7c2hhcGU6IG91dFNoYXBlfSwgYmFja2VuZH0pO1xuXG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzaGFwZWRJbnB1dCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVkdWNlZCk7XG5cbiAgcmV0dXJuIHJlc2hhcGVkT3V0cHV0O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Maximum } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET } from '../binaryop_gpu';\nimport { CHECK_NAN_SNIPPET_PACKED } from '../binaryop_packed_gpu';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { maximumImplCPU } from '../kernel_utils/shared';\nconst MAXIMUM = CHECK_NAN_SNIPPET + `\n return max(a, b);\n`;\nconst MAXIMUM_PACKED = `\n vec4 result = vec4(max(a, b));\n bvec4 isNaNA = isnan(a);\n bvec4 isNaNB = isnan(b);\n bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n ` +\n CHECK_NAN_SNIPPET_PACKED + `\n return result;\n`;\nexport const maximum = binaryKernelFunc({\n opSnippet: MAXIMUM,\n packedOpSnippet: MAXIMUM_PACKED,\n cpuKernelImpl: maximumImplCPU\n});\nexport const maximumConfig = {\n kernelName: Maximum,\n backendName: 'webgl',\n kernelFunc: maximum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4aW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9NYXhpbXVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFeEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixHQUFHOztDQUVuQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUc7Ozs7O0dBS3BCO0lBQ0Msd0JBQXdCLEdBQUc7O0NBRTlCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUM7SUFDdEMsU0FBUyxFQUFFLE9BQU87SUFDbEIsZUFBZSxFQUFFLGNBQWM7SUFDL0IsYUFBYSxFQUFFLGNBQWM7Q0FDOUIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsT0FBZ0M7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1heGltdW19IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Q0hFQ0tfTkFOX1NOSVBQRVR9IGZyb20gJy4uL2JpbmFyeW9wX2dwdSc7XG5pbXBvcnQge0NIRUNLX05BTl9TTklQUEVUX1BBQ0tFRH0gZnJvbSAnLi4vYmluYXJ5b3BfcGFja2VkX2dwdSc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHttYXhpbXVtSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmNvbnN0IE1BWElNVU0gPSBDSEVDS19OQU5fU05JUFBFVCArIGBcbiAgcmV0dXJuIG1heChhLCBiKTtcbmA7XG5cbmNvbnN0IE1BWElNVU1fUEFDS0VEID0gYFxuICB2ZWM0IHJlc3VsdCA9IHZlYzQobWF4KGEsIGIpKTtcbiAgYnZlYzQgaXNOYU5BID0gaXNuYW4oYSk7XG4gIGJ2ZWM0IGlzTmFOQiA9IGlzbmFuKGIpO1xuICBidmVjNCBpc05hTiA9IGJ2ZWM0KGlzTmFOQS54IHx8IGlzTmFOQi54LCBpc05hTkEueSB8fCBpc05hTkIueSwgaXNOYU5BLnogfHwgaXNOYU5CLnosIGlzTmFOQS53IHx8IGlzTmFOQi53KTtcbiAgYCArXG4gICAgQ0hFQ0tfTkFOX1NOSVBQRVRfUEFDS0VEICsgYFxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IG1heGltdW0gPSBiaW5hcnlLZXJuZWxGdW5jKHtcbiAgb3BTbmlwcGV0OiBNQVhJTVVNLFxuICBwYWNrZWRPcFNuaXBwZXQ6IE1BWElNVU1fUEFDS0VELFxuICBjcHVLZXJuZWxJbXBsOiBtYXhpbXVtSW1wbENQVVxufSk7XG5cbmV4cG9ydCBjb25zdCBtYXhpbXVtQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1heGltdW0sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBtYXhpbXVtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPool, util } from '@tensorflow/tfjs-core';\nimport { Pool2DProgram } from '../pool_gpu';\nimport { assertNotComplex } from '../webgl_util';\nimport { identity } from './Identity';\nexport function maxPool(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n assertNotComplex(x, 'maxPool');\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const dilations = 1;\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in maxPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 &&\n util.arraysEqual(convInfo.inShape, convInfo.outShape)) {\n return identity({ inputs: { x }, backend });\n }\n const maxPoolProgram = new Pool2DProgram(convInfo, 'max', false);\n return backend.runWebGLProgram(maxPoolProgram, [x], x.dtype);\n}\nexport const maxPoolConfig = {\n kernelName: MaxPool,\n backendName: 'webgl',\n kernelFunc: maxPool\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9NYXhQb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQTRCLE9BQU8sRUFBMkMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHckksT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLFVBQVUsT0FBTyxDQUFDLElBSXZCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDMUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRXBCLElBQUksQ0FBQyxNQUFNLENBQ1AsWUFBWSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFDL0QsR0FBRyxFQUFFLENBQUMsMkRBQTJEO1FBQzdELGVBQWUsT0FBTyxtQkFBbUIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUUvRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUF5QyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQ2hFLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckMsSUFBSSxRQUFRLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN6RCxPQUFPLFFBQVEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7S0FDekM7SUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNYXhQb29sLCBNYXhQb29sQXR0cnMsIE1heFBvb2xJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge1Bvb2wyRFByb2dyYW19IGZyb20gJy4uL3Bvb2xfZ3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vd2ViZ2xfdXRpbCc7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tICcuL0lkZW50aXR5JztcblxuZXhwb3J0IGZ1bmN0aW9uIG1heFBvb2woYXJnczoge1xuICBpbnB1dHM6IE1heFBvb2xJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBNYXhQb29sQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBhc3NlcnROb3RDb21wbGV4KHgsICdtYXhQb29sJyk7XG4gIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZX0gPSBhdHRycztcbiAgY29uc3QgZGlsYXRpb25zID0gMTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGJhY2tlbmRfdXRpbC5laXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUoc3RyaWRlcywgZGlsYXRpb25zKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBtYXhQb29sOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wyREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBmaWx0ZXJTaXplLCBzdHJpZGVzLFxuICAgICAgZGlsYXRpb25zLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGlmIChjb252SW5mby5maWx0ZXJXaWR0aCA9PT0gMSAmJiBjb252SW5mby5maWx0ZXJIZWlnaHQgPT09IDEgJiZcbiAgICAgIHV0aWwuYXJyYXlzRXF1YWwoY29udkluZm8uaW5TaGFwZSwgY29udkluZm8ub3V0U2hhcGUpKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICB9XG4gIGNvbnN0IG1heFBvb2xQcm9ncmFtID0gbmV3IFBvb2wyRFByb2dyYW0oY29udkluZm8sICdtYXgnLCBmYWxzZSk7XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShtYXhQb29sUHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2xDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG1heFBvb2wgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPool3D } from '@tensorflow/tfjs-core';\nimport { Pool3DProgram } from '../pool_gpu';\nexport function maxPool3d(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { filterSize, strides, pad, dataFormat, dimRoundingMode } = attrs;\n const dilations = [1, 1, 1];\n const convInfo = backend_util.computePool3DInfo(x.shape, filterSize, strides, dilations, pad, dimRoundingMode, dataFormat);\n const maxPoolProgram = new Pool3DProgram(convInfo, 'max', false);\n return backend.runWebGLProgram(maxPoolProgram, [x], x.dtype);\n}\nexport const maxPool3DConfig = {\n kernelName: MaxPool3D,\n backendName: 'webgl',\n kernelFunc: maxPool3d\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbDNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL01heFBvb2wzRC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixTQUFTLEVBQThDLE1BQU0sdUJBQXVCLENBQUM7QUFHckksT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUxQyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBSXpCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEUsTUFBTSxTQUFTLEdBQTZCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV0RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUFpRCxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQ3hFLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sY0FBYyxHQUFHLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQjtJQUMzQyxVQUFVLEVBQUUsU0FBUztJQUNyQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1heFBvb2wzRCwgTWF4UG9vbDNEQXR0cnMsIE1heFBvb2wzRElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7UG9vbDNEUHJvZ3JhbX0gZnJvbSAnLi4vcG9vbF9ncHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4UG9vbDNkKGFyZ3M6IHtcbiAgaW5wdXRzOiBNYXhQb29sM0RJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBNYXhQb29sM0RBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbVJvdW5kaW5nTW9kZX0gPSBhdHRycztcbiAgY29uc3QgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbMSwgMSwgMV07XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wzREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICBkaWxhdGlvbnMsIHBhZCwgZGltUm91bmRpbmdNb2RlLCBkYXRhRm9ybWF0KTtcbiAgY29uc3QgbWF4UG9vbFByb2dyYW0gPSBuZXcgUG9vbDNEUHJvZ3JhbShjb252SW5mbywgJ21heCcsIGZhbHNlKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKG1heFBvb2xQcm9ncmFtLCBbeF0sIHguZHR5cGUpO1xufVxuXG5leHBvcnQgY29uc3QgbWF4UG9vbDNEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1heFBvb2wzRCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG1heFBvb2wzZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class MaxPool2DBackpropProgram {\n constructor(convInfo) {\n this.variableNames = ['dy', 'maxPos'];\n this.outputShape = convInfo.inShape;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationHeight = convInfo.dilationHeight;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n const lastIndex = effectiveFilterHeight * effectiveFilterWidth - 1;\n 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 `;\n }\n}\nexport class MaxPool3DBackpropProgram {\n constructor(convInfo) {\n this.variableNames = ['dy', 'maxPos'];\n this.outputShape = convInfo.inShape;\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationDepth = convInfo.dilationDepth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front;\n const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n const lastIndex = effectiveFilterDepth * effectiveFilterHeight * effectiveFilterWidth - 1;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4X3Bvb2xfYmFja3Byb3BfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9tYXhfcG9vbF9iYWNrcHJvcF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsTUFBTSxPQUFPLHdCQUF3QjtJQUtuQyxZQUFZLFFBQWlDO1FBSjdDLGtCQUFhLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFLL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQy9DLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1FBQzdELE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1FBRTNELE1BQU0sTUFBTSxHQUFHLHFCQUFxQixHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFakUsTUFBTSxTQUFTLEdBQUcscUJBQXFCLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUc7aUNBQ2EsTUFBTSxLQUFLLE9BQU87Ozs7Ozs7Ozs7Ozs7O2dDQWNuQixxQkFBcUI7a0JBQ25DLGNBQWM7Z0RBQ2dCLFlBQVk7O29DQUV4QixRQUFRLENBQUMsU0FBUzs7Ozs7a0NBS3BCLG9CQUFvQjtrREFDSixXQUFXOztzQ0FFdkIsUUFBUSxDQUFDLFFBQVE7Ozs7Ozs7Z0NBT3ZCLFNBQVM7Ozs7cUNBSUosb0JBQW9COzs7Ozs7OztLQVFwRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtJQUtuQyxZQUFZLFFBQWlDO1FBSjdDLGtCQUFhLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFLL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDekMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUMvQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQzdDLE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1FBQzNELE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1FBQzdELE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1FBRTNELE1BQU0sUUFBUSxHQUFHLG9CQUFvQixHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNuRSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBRWpFLE1BQU0sU0FBUyxHQUNYLG9CQUFvQixHQUFHLHFCQUFxQixHQUFHLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFHO2lDQUNhLFFBQVEsS0FBSyxNQUFNLEtBQUssT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0NBaUJoQyxvQkFBb0I7bUJBQ2pDLGFBQWE7Z0RBQ2dCLFdBQVc7O29DQUV2QixRQUFRLENBQUMsUUFBUTs7Ozs7a0NBS25CLHFCQUFxQjtzQkFDakMsY0FBYztrREFDYyxZQUFZOztzQ0FFeEIsUUFBUSxDQUFDLFNBQVM7Ozs7OztvQ0FNcEIsb0JBQW9CO3dCQUNoQyxhQUFhO29EQUNlLFdBQVc7O3dDQUV2QixRQUFRLENBQUMsUUFBUTs7Ozs7OztrQ0FPdkIsU0FBUzs7Ozs7O3lCQU1sQixxQkFBcUIsTUFBTSxvQkFBb0I7eUJBQy9DLG9CQUFvQjs7Ozs7Ozs7O0tBU3hDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBNYXhQb29sMkRCYWNrcHJvcFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydkeScsICdtYXhQb3MnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjJESW5mbykge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5pblNoYXBlO1xuICAgIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgICBjb25zdCBzdHJpZGVXaWR0aCA9IGNvbnZJbmZvLnN0cmlkZVdpZHRoO1xuICAgIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gICAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0O1xuICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcldpZHRoID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGg7XG5cbiAgICBjb25zdCBwYWRUb3AgPSBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgLSAxIC0gY29udkluZm8ucGFkSW5mby50b3A7XG4gICAgY29uc3QgcGFkTGVmdCA9IGVmZmVjdGl2ZUZpbHRlcldpZHRoIC0gMSAtIGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcblxuICAgIGNvbnN0IGxhc3RJbmRleCA9IGVmZmVjdGl2ZUZpbHRlckhlaWdodCAqIGVmZmVjdGl2ZUZpbHRlcldpZHRoIC0gMTtcbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgY29uc3QgaXZlYzIgcGFkcyA9IGl2ZWMyKCR7cGFkVG9wfSwgJHtwYWRMZWZ0fSk7XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgZCA9IGNvb3Jkc1szXTtcblxuICAgICAgICBpdmVjMiBkeVJDQ29ybmVyID0gY29vcmRzLnl6IC0gcGFkcztcbiAgICAgICAgaW50IGR5UkNvcm5lciA9IGR5UkNDb3JuZXIueDtcbiAgICAgICAgaW50IGR5Q0Nvcm5lciA9IGR5UkNDb3JuZXIueTtcblxuICAgICAgICAvLyBDb252b2x2ZSBkeSg/LCA/LCBkKSB3aXRoIHBvcyBtYXNrKDosIDosIGQpIHRvIGdldCBkeCh4UiwgeEMsIGQpLlxuICAgICAgICAvLyA/ID0gdG8gYmUgZGV0ZXJtaW5lZC4gOiA9IGFjcm9zcyBhbGwgdmFsdWVzIGluIHRoYXQgYXhpcy5cbiAgICAgICAgZmxvYXQgZG90UHJvZCA9IDAuMDtcbiAgICAgICAgZm9yIChpbnQgd1IgPSAwOyB3UiA8ICR7ZWZmZWN0aXZlRmlsdGVySGVpZ2h0fTtcbiAgICAgICAgICB3UiArPSAke2RpbGF0aW9uSGVpZ2h0fSkge1xuICAgICAgICAgIGZsb2F0IGR5UiA9IGZsb2F0KGR5UkNvcm5lciArIHdSKSAvICR7c3RyaWRlSGVpZ2h0fS4wO1xuXG4gICAgICAgICAgaWYgKGR5UiA8IDAuMCB8fCBkeVIgPj0gJHtjb252SW5mby5vdXRIZWlnaHR9LjAgfHwgZnJhY3QoZHlSKSA+IDAuMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGludCBpZHlSID0gaW50KGR5Uik7XG5cbiAgICAgICAgICBmb3IgKGludCB3QyA9IDA7IHdDIDwgJHtlZmZlY3RpdmVGaWx0ZXJXaWR0aH07IHdDKyspIHtcbiAgICAgICAgICAgIGZsb2F0IGR5QyA9IGZsb2F0KGR5Q0Nvcm5lciArIHdDKSAvICR7c3RyaWRlV2lkdGh9LjA7XG5cbiAgICAgICAgICAgIGlmIChkeUMgPCAwLjAgfHwgZHlDID49ICR7Y29udkluZm8ub3V0V2lkdGh9LjAgfHxcbiAgICAgICAgICAgICAgICBmcmFjdChkeUMpID4gMC4wKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50IGlkeUMgPSBpbnQoZHlDKTtcblxuICAgICAgICAgICAgZmxvYXQgZHlWYWx1ZSA9IGdldER5KGIsIGlkeVIsIGlkeUMsIGQpO1xuICAgICAgICAgICAgaW50IG1heFBvc1ZhbHVlID0gJHtsYXN0SW5kZXh9IC0gaW50KGdldE1heFBvcyhiLCBpZHlSLCBpZHlDLCBkKSk7XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCB2YWx1ZSwgY2hlY2sgaXQgYWdhaW5zdCB0aGUgdmFsdWUgZnJvbSB0aGVcbiAgICAgICAgICAgIC8vIHBvc2l0aW9uIG1hdHJpeC5cbiAgICAgICAgICAgIGludCBjdXJQb3NWYWx1ZSA9IHdSICogJHtlZmZlY3RpdmVGaWx0ZXJXaWR0aH0gKyB3QztcbiAgICAgICAgICAgIGZsb2F0IG1hc2sgPSBmbG9hdChtYXhQb3NWYWx1ZSA9PSBjdXJQb3NWYWx1ZSA/IDEuMCA6IDAuMCk7XG5cbiAgICAgICAgICAgIGRvdFByb2QgKz0gZHlWYWx1ZSAqIG1hc2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldE91dHB1dChkb3RQcm9kKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXhQb29sM0RCYWNrcHJvcFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydkeScsICdtYXhQb3MnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjNESW5mbykge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBjb252SW5mby5pblNoYXBlO1xuICAgIGNvbnN0IHN0cmlkZURlcHRoID0gY29udkluZm8uc3RyaWRlRGVwdGg7XG4gICAgY29uc3Qgc3RyaWRlSGVpZ2h0ID0gY29udkluZm8uc3RyaWRlSGVpZ2h0O1xuICAgIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gICAgY29uc3QgZGlsYXRpb25EZXB0aCA9IGNvbnZJbmZvLmRpbGF0aW9uRGVwdGg7XG4gICAgY29uc3QgZGlsYXRpb25IZWlnaHQgPSBjb252SW5mby5kaWxhdGlvbkhlaWdodDtcbiAgICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJEZXB0aCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckRlcHRoO1xuICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckhlaWdodDtcbiAgICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlcldpZHRoO1xuXG4gICAgY29uc3QgcGFkRnJvbnQgPSBlZmZlY3RpdmVGaWx0ZXJEZXB0aCAtIDEgLSBjb252SW5mby5wYWRJbmZvLmZyb250O1xuICAgIGNvbnN0IHBhZFRvcCA9IGVmZmVjdGl2ZUZpbHRlckhlaWdodCAtIDEgLSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgICBjb25zdCBwYWRMZWZ0ID0gZWZmZWN0aXZlRmlsdGVyV2lkdGggLSAxIC0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuXG4gICAgY29uc3QgbGFzdEluZGV4ID1cbiAgICAgICAgZWZmZWN0aXZlRmlsdGVyRGVwdGggKiBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgKiBlZmZlY3RpdmVGaWx0ZXJXaWR0aCAtIDE7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGNvbnN0IGl2ZWMzIHBhZHMgPSBpdmVjMygke3BhZEZyb250fSwgJHtwYWRUb3B9LCAke3BhZExlZnR9KTtcblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjNSBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IGJhdGNoID0gY29vcmRzLng7XG4gICAgICAgIGludCBjaCA9IGNvb3Jkcy51O1xuXG4gICAgICAgIGl2ZWMzIGR5Q29ybmVyID0gaXZlYzMoY29vcmRzLnksIGNvb3Jkcy56LCBjb29yZHMudykgLSBwYWRzO1xuICAgICAgICBpbnQgZHlEQ29ybmVyID0gZHlDb3JuZXIueDtcbiAgICAgICAgaW50IGR5UkNvcm5lciA9IGR5Q29ybmVyLnk7XG4gICAgICAgIGludCBkeUNDb3JuZXIgPSBkeUNvcm5lci56O1xuXG4gICAgICAgIC8vIENvbnZvbHZlIGR5KD8sID8sID8sIGNoKSB3aXRoIHBvcyBtYXNrKDosIDosIDosIGQpIHRvIGdldFxuICAgICAgICAvLyBkeCh4RCwgeFIsIHhDLCBjaCkuXG4gICAgICAgIC8vID8gPSB0byBiZSBkZXRlcm1pbmVkLiA6ID0gYWNyb3NzIGFsbCB2YWx1ZXMgaW4gdGhhdCBheGlzLlxuICAgICAgICBmbG9hdCBkb3RQcm9kID0gMC4wO1xuXG4gICAgICAgIGZvciAoaW50IHdEID0gMDsgd0QgPCAke2VmZmVjdGl2ZUZpbHRlckRlcHRofTtcbiAgICAgICAgICAgd0QgKz0gJHtkaWxhdGlvbkRlcHRofSkge1xuICAgICAgICAgIGZsb2F0IGR5RCA9IGZsb2F0KGR5RENvcm5lciArIHdEKSAvICR7c3RyaWRlRGVwdGh9LjA7XG5cbiAgICAgICAgICBpZiAoZHlEIDwgMC4wIHx8IGR5RCA+PSAke2NvbnZJbmZvLm91dERlcHRofS4wIHx8IGZyYWN0KGR5RCkgPiAwLjApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnQgaWR5RCA9IGludChkeUQpO1xuXG4gICAgICAgICAgZm9yIChpbnQgd1IgPSAwOyB3UiA8ICR7ZWZmZWN0aXZlRmlsdGVySGVpZ2h0fTtcbiAgICAgICAgICAgICAgd1IgKz0gJHtkaWxhdGlvbkhlaWdodH0pIHtcbiAgICAgICAgICAgIGZsb2F0IGR5UiA9IGZsb2F0KGR5UkNvcm5lciArIHdSKSAvICR7c3RyaWRlSGVpZ2h0fS4wO1xuXG4gICAgICAgICAgICBpZiAoZHlSIDwgMC4wIHx8IGR5UiA+PSAke2NvbnZJbmZvLm91dEhlaWdodH0uMCB8fFxuICAgICAgICAgICAgICAgIGZyYWN0KGR5UikgPiAwLjApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnQgaWR5UiA9IGludChkeVIpO1xuXG4gICAgICAgICAgICBmb3IgKGludCB3QyA9IDA7IHdDIDwgJHtlZmZlY3RpdmVGaWx0ZXJXaWR0aH07XG4gICAgICAgICAgICAgICAgd0MgKz0gJHtkaWxhdGlvbldpZHRofSkge1xuICAgICAgICAgICAgICBmbG9hdCBkeUMgPSBmbG9hdChkeUNDb3JuZXIgKyB3QykgLyAke3N0cmlkZVdpZHRofS4wO1xuXG4gICAgICAgICAgICAgIGlmIChkeUMgPCAwLjAgfHwgZHlDID49ICR7Y29udkluZm8ub3V0V2lkdGh9LjAgfHxcbiAgICAgICAgICAgICAgICAgIGZyYWN0KGR5QykgPiAwLjApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpbnQgaWR5QyA9IGludChkeUMpO1xuXG4gICAgICAgICAgICAgIGZsb2F0IGR5VmFsdWUgPSBnZXREeShiYXRjaCwgaWR5RCwgaWR5UiwgaWR5QywgY2gpO1xuICAgICAgICAgICAgICBpbnQgbWF4UG9zVmFsdWUgPSAke2xhc3RJbmRleH0gLVxuICAgICAgICAgICAgICAgICAgaW50KGdldE1heFBvcyhiYXRjaCwgaWR5RCwgaWR5UiwgaWR5QywgY2gpKTtcblxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdmFsdWUsIGNoZWNrIGl0IGFnYWluc3QgdGhlIHZhbHVlIGZyb20gdGhlXG4gICAgICAgICAgICAgIC8vIHBvc2l0aW9uIG1hdHJpeC5cbiAgICAgICAgICAgICAgaW50IGN1clBvc1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgIHdEICogJHtlZmZlY3RpdmVGaWx0ZXJIZWlnaHR9ICogJHtlZmZlY3RpdmVGaWx0ZXJXaWR0aH0gK1xuICAgICAgICAgICAgICAgICAgd1IgKiAke2VmZmVjdGl2ZUZpbHRlcldpZHRofSArIHdDO1xuICAgICAgICAgICAgICBmbG9hdCBtYXNrID0gZmxvYXQobWF4UG9zVmFsdWUgPT0gY3VyUG9zVmFsdWUgPyAxLjAgOiAwLjApO1xuXG4gICAgICAgICAgICAgIGRvdFByb2QgKz0gZHlWYWx1ZSAqIG1hc2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldE91dHB1dChkb3RQcm9kKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPool3DGrad } from '@tensorflow/tfjs-core';\nimport { MaxPool3DBackpropProgram } from '../max_pool_backprop_gpu';\nimport { Pool3DProgram } from '../pool_gpu';\nexport function maxPool3DGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const x = input;\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const dilations = [1, 1, 1];\n const convInfo = backend_util.computePool3DInfo(x.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n const maxPool3dPositionsProgram = new Pool3DProgram(convInfo, 'max', true /* get positions */);\n const maxPool3dPositions = backend.runWebGLProgram(maxPool3dPositionsProgram, [x], x.dtype);\n const maxPoolBackpropProgram = new MaxPool3DBackpropProgram(convInfo);\n const result = backend.runWebGLProgram(maxPoolBackpropProgram, [dy, maxPool3dPositions], x.dtype);\n backend.disposeIntermediateTensorInfo(maxPool3dPositions);\n return result;\n}\nexport const maxPool3DGradConfig = {\n kernelName: MaxPool3DGrad,\n backendName: 'webgl',\n kernelFunc: maxPool3DGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbDNER3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9NYXhQb29sM0RHcmFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQTRCLGFBQWEsRUFBc0QsTUFBTSx1QkFBdUIsQ0FBQztBQUdqSixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFJN0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0IsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLE1BQU0sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDMUQsTUFBTSxTQUFTLEdBQTZCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV0RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUFpRCxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQ3hFLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFckMsTUFBTSx5QkFBeUIsR0FDM0IsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNqRSxNQUFNLGtCQUFrQixHQUNwQixPQUFPLENBQUMsZUFBZSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUNsQyxzQkFBc0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMxRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTWF4UG9vbDNER3JhZCwgTWF4UG9vbDNER3JhZEF0dHJzLCBNYXhQb29sM0RHcmFkSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtNYXhQb29sM0RCYWNrcHJvcFByb2dyYW19IGZyb20gJy4uL21heF9wb29sX2JhY2twcm9wX2dwdSc7XG5pbXBvcnQge1Bvb2wzRFByb2dyYW19IGZyb20gJy4uL3Bvb2xfZ3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIG1heFBvb2wzREdyYWQoYXJnczoge1xuICBpbnB1dHM6IE1heFBvb2wzREdyYWRJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBNYXhQb29sM0RHcmFkQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBpbnB1dH0gPSBpbnB1dHM7XG4gIGNvbnN0IHggPSBpbnB1dDtcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuICBjb25zdCBkaWxhdGlvbnM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFsxLCAxLCAxXTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDNESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSwgc3RyaWRlcyxcbiAgICAgIGRpbGF0aW9ucywgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuXG4gIGNvbnN0IG1heFBvb2wzZFBvc2l0aW9uc1Byb2dyYW0gPVxuICAgICAgbmV3IFBvb2wzRFByb2dyYW0oY29udkluZm8sICdtYXgnLCB0cnVlIC8qIGdldCBwb3NpdGlvbnMgKi8pO1xuICBjb25zdCBtYXhQb29sM2RQb3NpdGlvbnMgPVxuICAgICAgYmFja2VuZC5ydW5XZWJHTFByb2dyYW0obWF4UG9vbDNkUG9zaXRpb25zUHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcbiAgY29uc3QgbWF4UG9vbEJhY2twcm9wUHJvZ3JhbSA9IG5ldyBNYXhQb29sM0RCYWNrcHJvcFByb2dyYW0oY29udkluZm8pO1xuICBjb25zdCByZXN1bHQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgIG1heFBvb2xCYWNrcHJvcFByb2dyYW0sIFtkeSwgbWF4UG9vbDNkUG9zaXRpb25zXSwgeC5kdHlwZSk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8obWF4UG9vbDNkUG9zaXRpb25zKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2wzREdyYWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbDNER3JhZCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG1heFBvb2wzREdyYWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPoolGrad } from '@tensorflow/tfjs-core';\nimport { MaxPool2DBackpropProgram } from '../max_pool_backprop_gpu';\nimport { Pool2DProgram } from '../pool_gpu';\nimport { assertNotComplex } from '../webgl_util';\nexport function maxPoolGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input, output } = inputs;\n const x = input;\n assertNotComplex([input, output], 'maxPoolGrad');\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, 1 /* dilations */, pad, dimRoundingMode);\n const getPositions = true;\n const maxPoolPositionsProgram = new Pool2DProgram(convInfo, 'max', getPositions);\n const maxPoolPositions = backend.runWebGLProgram(maxPoolPositionsProgram, [x], x.dtype);\n const maxPoolBackPropProgram = new MaxPool2DBackpropProgram(convInfo);\n const result = backend.runWebGLProgram(maxPoolBackPropProgram, [dy, maxPoolPositions], x.dtype);\n backend.disposeIntermediateTensorInfo(maxPoolPositions);\n return result;\n}\nexport const maxPoolGradConfig = {\n kernelName: MaxPoolGrad,\n backendName: 'webgl',\n kernelFunc: maxPoolGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbEdyYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvTWF4UG9vbEdyYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLFlBQVksRUFBNEIsV0FBVyxFQUFrRCxNQUFNLHVCQUF1QixDQUFDO0FBRzNJLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sVUFBVSxXQUFXLENBQUMsSUFJM0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25DLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTFELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFDaEUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzFCLE1BQU0sdUJBQXVCLEdBQ3pCLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckQsTUFBTSxnQkFBZ0IsR0FDbEIsT0FBTyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuRSxNQUFNLHNCQUFzQixHQUFHLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FDbEMsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0QsT0FBTyxDQUFDLDZCQUE2QixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFpQjtJQUM3QyxVQUFVLEVBQUUsV0FBVztJQUN2QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsV0FBb0M7Q0FDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1heFBvb2xHcmFkLCBNYXhQb29sR3JhZEF0dHJzLCBNYXhQb29sR3JhZElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7TWF4UG9vbDJEQmFja3Byb3BQcm9ncmFtfSBmcm9tICcuLi9tYXhfcG9vbF9iYWNrcHJvcF9ncHUnO1xuaW1wb3J0IHtQb29sMkRQcm9ncmFtfSBmcm9tICcuLi9wb29sX2dwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL3dlYmdsX3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4UG9vbEdyYWQoYXJnczoge1xuICBpbnB1dHM6IE1heFBvb2xHcmFkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogTWF4UG9vbEdyYWRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7ZHksIGlucHV0LCBvdXRwdXR9ID0gaW5wdXRzO1xuICBjb25zdCB4ID0gaW5wdXQ7XG4gIGFzc2VydE5vdENvbXBsZXgoW2lucHV0LCBvdXRwdXRdLCAnbWF4UG9vbEdyYWQnKTtcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVQb29sMkRJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSwgc3RyaWRlcyxcbiAgICAgIDEgLyogZGlsYXRpb25zICovLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IGdldFBvc2l0aW9ucyA9IHRydWU7XG4gIGNvbnN0IG1heFBvb2xQb3NpdGlvbnNQcm9ncmFtID1cbiAgICAgIG5ldyBQb29sMkRQcm9ncmFtKGNvbnZJbmZvLCAnbWF4JywgZ2V0UG9zaXRpb25zKTtcbiAgY29uc3QgbWF4UG9vbFBvc2l0aW9uczogVGVuc29ySW5mbyA9XG4gICAgICBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShtYXhQb29sUG9zaXRpb25zUHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcblxuICBjb25zdCBtYXhQb29sQmFja1Byb3BQcm9ncmFtID0gbmV3IE1heFBvb2wyREJhY2twcm9wUHJvZ3JhbShjb252SW5mbyk7XG4gIGNvbnN0IHJlc3VsdCA9IGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKFxuICAgICAgbWF4UG9vbEJhY2tQcm9wUHJvZ3JhbSwgW2R5LCBtYXhQb29sUG9zaXRpb25zXSwgeC5kdHlwZSk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8obWF4UG9vbFBvc2l0aW9ucyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhQb29sR3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBNYXhQb29sR3JhZCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG1heFBvb2xHcmFkIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { MaxPoolWithArgmax } from '@tensorflow/tfjs-core';\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nimport { maxPoolWithArgmaxImpl } from './MaxPoolWithArgmax_impl';\nexport const maxPoolWithArgmaxConfig = {\n kernelName: MaxPoolWithArgmax,\n backendName: 'webgl',\n kernelFunc: ({ inputs, attrs, backend }) => {\n const { x } = inputs;\n const { filterSize, strides, pad, includeBatchInIndex } = attrs;\n const webglBackend = backend;\n util.assert(x.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${x.shape.length}.`);\n const dilations = [1, 1];\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in maxPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, dilations, pad);\n const [result, indexes] = maxPoolWithArgmaxImpl(x, includeBatchInIndex, convInfo, webglBackend);\n return [result, indexes];\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbFdpdGhBcmdtYXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvTWF4UG9vbFdpdGhBcmdtYXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGlCQUFpQixFQUFrRCxNQUFNLHVCQUF1QixDQUFDO0FBQ3pHLE9BQU8sRUFBQyxZQUFZLEVBQWdCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQjtJQUNuRCxVQUFVLEVBQUUsaUJBQWlCO0lBQzdCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFpQyxDQUFDO1FBQzlDLE1BQU0sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBQyxHQUNqRCxLQUEwQyxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLE9BQTJCLENBQUM7UUFFakQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQ3BCLEdBQUcsRUFBRSxDQUFDLHVEQUNGLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLFNBQVMsR0FBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FDUCxZQUFZLENBQUMsOEJBQThCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUMvRCxHQUFHLEVBQUUsQ0FBQywyREFBMkQ7WUFDN0QsZUFBZSxPQUFPLG1CQUFtQixTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFDaEUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQ25CLHFCQUFxQixDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtNYXhQb29sV2l0aEFyZ21heCwgTWF4UG9vbFdpdGhBcmdtYXhBdHRycywgTWF4UG9vbFdpdGhBcmdtYXhJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5pbXBvcnQge21heFBvb2xXaXRoQXJnbWF4SW1wbH0gZnJvbSAnLi9NYXhQb29sV2l0aEFyZ21heF9pbXBsJztcblxuZXhwb3J0IGNvbnN0IG1heFBvb2xXaXRoQXJnbWF4Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1heFBvb2xXaXRoQXJnbWF4LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogKHtpbnB1dHMsIGF0dHJzLCBiYWNrZW5kfSkgPT4ge1xuICAgIGNvbnN0IHt4fSA9IGlucHV0cyBhcyBNYXhQb29sV2l0aEFyZ21heElucHV0cztcbiAgICBjb25zdCB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkLCBpbmNsdWRlQmF0Y2hJbkluZGV4fSA9XG4gICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTWF4UG9vbFdpdGhBcmdtYXhBdHRycztcbiAgICBjb25zdCB3ZWJnbEJhY2tlbmQgPSBiYWNrZW5kIGFzIE1hdGhCYWNrZW5kV2ViR0w7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgeC5zaGFwZS5sZW5ndGggPT09IDQsXG4gICAgICAgICgpID0+IGBFcnJvciBpbiBtYXhQb29sOiBpbnB1dCBtdXN0IGJlIHJhbmsgNCBidXQgZ290IHJhbmsgJHtcbiAgICAgICAgICAgIHguc2hhcGUubGVuZ3RofS5gKTtcbiAgICBjb25zdCBkaWxhdGlvbnM6IFtudW1iZXIsIG51bWJlcl0gPSBbMSwgMV07XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGJhY2tlbmRfdXRpbC5laXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUoc3RyaWRlcywgZGlsYXRpb25zKSxcbiAgICAgICAgKCkgPT4gJ0Vycm9yIGluIG1heFBvb2w6IEVpdGhlciBzdHJpZGVzIG9yIGRpbGF0aW9ucyBtdXN0IGJlIDEuICcgK1xuICAgICAgICAgICAgYEdvdCBzdHJpZGVzICR7c3RyaWRlc30gYW5kIGRpbGF0aW9ucyAnJHtkaWxhdGlvbnN9J2ApO1xuXG4gICAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wyREluZm8oXG4gICAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICAgIGRpbGF0aW9ucywgcGFkKTtcblxuICAgIGNvbnN0IFtyZXN1bHQsIGluZGV4ZXNdID1cbiAgICAgICAgbWF4UG9vbFdpdGhBcmdtYXhJbXBsKHgsIGluY2x1ZGVCYXRjaEluSW5kZXgsIGNvbnZJbmZvLCB3ZWJnbEJhY2tlbmQpO1xuICAgIHJldHVybiBbcmVzdWx0LCBpbmRleGVzXTtcbiAgfVxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Pool2DProgram } from '../pool_gpu';\nexport function maxPoolWithArgmaxImpl(x, includeBatchInIndex, convInfo, backend) {\n let program = new Pool2DProgram(convInfo, 'max', false);\n const poolOutput = backend.runWebGLProgram(program, [x], 'float32');\n program = new Pool2DProgram(convInfo, 'max', true, true, includeBatchInIndex);\n const indexOutput = backend.runWebGLProgram(program, [x], 'float32');\n return [poolOutput, indexOutput];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbFdpdGhBcmdtYXhfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9NYXhQb29sV2l0aEFyZ21heF9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFMUMsTUFBTSxVQUFVLHFCQUFxQixDQUNqQyxDQUFhLEVBQUUsbUJBQTRCLEVBQzNDLFFBQWlDLEVBQ2pDLE9BQXlCO0lBQzNCLElBQUksT0FBTyxHQUFHLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVwRSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDOUUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRSxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtQb29sMkRQcm9ncmFtfSBmcm9tICcuLi9wb29sX2dwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXhQb29sV2l0aEFyZ21heEltcGwoXG4gICAgeDogVGVuc29ySW5mbywgaW5jbHVkZUJhdGNoSW5JbmRleDogYm9vbGVhbixcbiAgICBjb252SW5mbzogYmFja2VuZF91dGlsLkNvbnYyREluZm8sXG4gICAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCk6IFRlbnNvckluZm9bXSB7XG4gIGxldCBwcm9ncmFtID0gbmV3IFBvb2wyRFByb2dyYW0oY29udkluZm8sICdtYXgnLCBmYWxzZSk7XG4gIGNvbnN0IHBvb2xPdXRwdXQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeF0sICdmbG9hdDMyJyk7XG5cbiAgcHJvZ3JhbSA9IG5ldyBQb29sMkRQcm9ncmFtKGNvbnZJbmZvLCAnbWF4JywgdHJ1ZSwgdHJ1ZSwgaW5jbHVkZUJhdGNoSW5JbmRleCk7XG4gIGNvbnN0IGluZGV4T3V0cHV0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3hdLCAnZmxvYXQzMicpO1xuICByZXR1cm4gW3Bvb2xPdXRwdXQsIGluZGV4T3V0cHV0XTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Mean, util } from '@tensorflow/tfjs-core';\nimport { meanImpl } from './Mean_impl';\nimport { transposeImpl, transposeImplCPU } from './Transpose_impl';\nexport const meanConfig = {\n kernelName: Mean,\n backendName: 'webgl',\n kernelFunc: ({ inputs, attrs, backend }) => {\n const { x } = inputs;\n const { keepDims, axis } = attrs;\n const webglBackend = backend;\n const xRank = x.shape.length;\n const origAxes = util.parseAxisParam(axis, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n const meanInputIsTransposed = permutedAxes != null;\n const shouldExecuteOnCPU = webglBackend.shouldExecuteOnCPU([x]);\n const intermediates = [];\n let meanInput = x;\n if (meanInputIsTransposed) {\n if (shouldExecuteOnCPU) {\n const xTexData = webglBackend.texData.get(meanInput.dataId);\n const values = xTexData.values;\n const newShape = new Array(xRank);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = x.shape[permutedAxes[i]];\n }\n const meanInputValues = transposeImplCPU(values, x.shape, x.dtype, permutedAxes, newShape);\n meanInput = webglBackend.makeTensorInfo(newShape, x.dtype);\n const meanInputData = webglBackend.texData.get(meanInput.dataId);\n meanInputData.values = meanInputValues;\n }\n else {\n meanInput = transposeImpl(x, permutedAxes, webglBackend);\n }\n intermediates.push(meanInput);\n axes = backend_util.getInnerMostAxes(axes.length, xRank);\n }\n backend_util.assertAxesAreInnerMostDims('sum', axes, xRank);\n const [meanOutShape, reduceShape] = backend_util.computeOutAndReduceShapes(meanInput.shape, axes);\n let outShape = meanOutShape;\n if (keepDims) {\n // rather than reshape at the end, set the target shape here.\n outShape = backend_util.expandShapeToKeepDim(meanOutShape, origAxes);\n }\n const out = meanImpl(meanInput, reduceShape, outShape, webglBackend);\n for (const i of intermediates) {\n webglBackend.disposeIntermediateTensorInfo(i);\n }\n return out;\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9NZWFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWdCLElBQUksRUFBaUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJNUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBb0IsQ0FBQztRQUNqQyxNQUFNLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxHQUFHLEtBQTZCLENBQUM7UUFDdkQsTUFBTSxZQUFZLEdBQUcsT0FBMkIsQ0FBQztRQUVqRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEUsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDO1FBQ25ELE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRSxNQUFNLGFBQWEsR0FBaUIsRUFBRSxDQUFDO1FBRXZDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLHFCQUFxQixFQUFFO1lBQ3pCLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3RCLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQW9CLENBQUM7Z0JBRTdDLE1BQU0sUUFBUSxHQUFhLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDeEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELE1BQU0sZUFBZSxHQUNqQixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFdkUsU0FBUyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRSxhQUFhLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQzthQUN4QztpQkFBTTtnQkFDTCxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDMUQ7WUFFRCxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLElBQUksR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMxRDtRQUVELFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQzdCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWxFLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQztRQUM1QixJQUFJLFFBQVEsRUFBRTtZQUNaLDZEQUE2RDtZQUM3RCxRQUFRLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN0RTtRQUVELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNyRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLGFBQWEsRUFBRTtZQUM3QixZQUFZLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0M7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBNZWFuLCBNZWFuQXR0cnMsIE1lYW5JbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5cbmltcG9ydCB7bWVhbkltcGx9IGZyb20gJy4vTWVhbl9pbXBsJztcbmltcG9ydCB7dHJhbnNwb3NlSW1wbCwgdHJhbnNwb3NlSW1wbENQVX0gZnJvbSAnLi9UcmFuc3Bvc2VfaW1wbCc7XG5cbmV4cG9ydCBjb25zdCBtZWFuQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1lYW4sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiAoe2lucHV0cywgYXR0cnMsIGJhY2tlbmR9KSA9PiB7XG4gICAgY29uc3Qge3h9ID0gaW5wdXRzIGFzIE1lYW5JbnB1dHM7XG4gICAgY29uc3Qge2tlZXBEaW1zLCBheGlzfSA9IGF0dHJzIGFzIHVua25vd24gYXMgTWVhbkF0dHJzO1xuICAgIGNvbnN0IHdlYmdsQmFja2VuZCA9IGJhY2tlbmQgYXMgTWF0aEJhY2tlbmRXZWJHTDtcblxuICAgIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG4gICAgY29uc3Qgb3JpZ0F4ZXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIHguc2hhcGUpO1xuXG4gICAgbGV0IGF4ZXMgPSBvcmlnQXhlcztcbiAgICBjb25zdCBwZXJtdXRlZEF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIHhSYW5rKTtcbiAgICBjb25zdCBtZWFuSW5wdXRJc1RyYW5zcG9zZWQgPSBwZXJtdXRlZEF4ZXMgIT0gbnVsbDtcbiAgICBjb25zdCBzaG91bGRFeGVjdXRlT25DUFUgPSB3ZWJnbEJhY2tlbmQuc2hvdWxkRXhlY3V0ZU9uQ1BVKFt4XSk7XG5cbiAgICBjb25zdCBpbnRlcm1lZGlhdGVzOiBUZW5zb3JJbmZvW10gPSBbXTtcblxuICAgIGxldCBtZWFuSW5wdXQgPSB4O1xuICAgIGlmIChtZWFuSW5wdXRJc1RyYW5zcG9zZWQpIHtcbiAgICAgIGlmIChzaG91bGRFeGVjdXRlT25DUFUpIHtcbiAgICAgICAgY29uc3QgeFRleERhdGEgPSB3ZWJnbEJhY2tlbmQudGV4RGF0YS5nZXQobWVhbklucHV0LmRhdGFJZCk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHhUZXhEYXRhLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gICAgICAgIGNvbnN0IG5ld1NoYXBlOiBudW1iZXJbXSA9IG5ldyBBcnJheSh4UmFuayk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3U2hhcGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBuZXdTaGFwZVtpXSA9IHguc2hhcGVbcGVybXV0ZWRBeGVzW2ldXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZWFuSW5wdXRWYWx1ZXMgPVxuICAgICAgICAgICAgdHJhbnNwb3NlSW1wbENQVSh2YWx1ZXMsIHguc2hhcGUsIHguZHR5cGUsIHBlcm11dGVkQXhlcywgbmV3U2hhcGUpO1xuXG4gICAgICAgIG1lYW5JbnB1dCA9IHdlYmdsQmFja2VuZC5tYWtlVGVuc29ySW5mbyhuZXdTaGFwZSwgeC5kdHlwZSk7XG4gICAgICAgIGNvbnN0IG1lYW5JbnB1dERhdGEgPSB3ZWJnbEJhY2tlbmQudGV4RGF0YS5nZXQobWVhbklucHV0LmRhdGFJZCk7XG4gICAgICAgIG1lYW5JbnB1dERhdGEudmFsdWVzID0gbWVhbklucHV0VmFsdWVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVhbklucHV0ID0gdHJhbnNwb3NlSW1wbCh4LCBwZXJtdXRlZEF4ZXMsIHdlYmdsQmFja2VuZCk7XG4gICAgICB9XG5cbiAgICAgIGludGVybWVkaWF0ZXMucHVzaChtZWFuSW5wdXQpO1xuICAgICAgYXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRJbm5lck1vc3RBeGVzKGF4ZXMubGVuZ3RoLCB4UmFuayk7XG4gICAgfVxuXG4gICAgYmFja2VuZF91dGlsLmFzc2VydEF4ZXNBcmVJbm5lck1vc3REaW1zKCdzdW0nLCBheGVzLCB4UmFuayk7XG4gICAgY29uc3QgW21lYW5PdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgICAgYmFja2VuZF91dGlsLmNvbXB1dGVPdXRBbmRSZWR1Y2VTaGFwZXMobWVhbklucHV0LnNoYXBlLCBheGVzKTtcblxuICAgIGxldCBvdXRTaGFwZSA9IG1lYW5PdXRTaGFwZTtcbiAgICBpZiAoa2VlcERpbXMpIHtcbiAgICAgIC8vIHJhdGhlciB0aGFuIHJlc2hhcGUgYXQgdGhlIGVuZCwgc2V0IHRoZSB0YXJnZXQgc2hhcGUgaGVyZS5cbiAgICAgIG91dFNoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG1lYW5PdXRTaGFwZSwgb3JpZ0F4ZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dCA9IG1lYW5JbXBsKG1lYW5JbnB1dCwgcmVkdWNlU2hhcGUsIG91dFNoYXBlLCB3ZWJnbEJhY2tlbmQpO1xuICAgIGZvciAoY29uc3QgaSBvZiBpbnRlcm1lZGlhdGVzKSB7XG4gICAgICB3ZWJnbEJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { reduce } from '../kernel_utils/reduce';\nimport { reshape } from '../kernels/Reshape';\nexport function meanImpl(x, reduceShape, outShape, backend) {\n const inSize = util.sizeFromShape(reduceShape);\n const xSize = util.sizeFromShape(x.shape);\n const batchSize = xSize / inSize;\n const reshapedInput = reshape({ inputs: { x }, attrs: { shape: [batchSize, inSize] }, backend });\n const reduced = reduce(reshapedInput, 'float32', 'mean', backend);\n const reshapedOutput = reshape({ inputs: { x: reduced }, attrs: { shape: outShape }, backend });\n backend.disposeIntermediateTensorInfo(reshapedInput);\n backend.disposeIntermediateTensorInfo(reduced);\n return reshapedOutput;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVhbl9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL01lYW5faW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHdkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUUzQyxNQUFNLFVBQVUsUUFBUSxDQUNwQixDQUFhLEVBQUUsV0FBcUIsRUFBRSxRQUFrQixFQUN4RCxPQUF5QjtJQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDakMsTUFBTSxhQUFhLEdBQ2YsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUV6RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsTUFBTSxjQUFjLEdBQ2hCLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUV2RSxPQUFPLENBQUMsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRS9DLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7cmVkdWNlfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvcmVkdWNlJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4va2VybmVscy9SZXNoYXBlJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1lYW5JbXBsKFxuICAgIHg6IFRlbnNvckluZm8sIHJlZHVjZVNoYXBlOiBudW1iZXJbXSwgb3V0U2hhcGU6IG51bWJlcltdLFxuICAgIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wpOiBUZW5zb3JJbmZvIHtcbiAgY29uc3QgaW5TaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcbiAgY29uc3QgeFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZSk7XG4gIGNvbnN0IGJhdGNoU2l6ZSA9IHhTaXplIC8gaW5TaXplO1xuICBjb25zdCByZXNoYXBlZElucHV0ID1cbiAgICAgIHJlc2hhcGUoe2lucHV0czoge3h9LCBhdHRyczoge3NoYXBlOiBbYmF0Y2hTaXplLCBpblNpemVdfSwgYmFja2VuZH0pO1xuXG4gIGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UocmVzaGFwZWRJbnB1dCwgJ2Zsb2F0MzInLCAnbWVhbicsIGJhY2tlbmQpO1xuICBjb25zdCByZXNoYXBlZE91dHB1dCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZWR1Y2VkfSwgYXR0cnM6IHtzaGFwZTogb3V0U2hhcGV9LCBiYWNrZW5kfSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXNoYXBlZElucHV0KTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZWR1Y2VkKTtcblxuICByZXR1cm4gcmVzaGFwZWRPdXRwdXQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Min, util } from '@tensorflow/tfjs-core';\nimport { reduce } from '../kernel_utils/reduce';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function min(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n const xRank = x.shape.length;\n const origAxes = util.parseAxisParam(axis, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n let permutedX = x;\n if (permutedAxes != null) {\n permutedX = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n axes = backend_util.getInnerMostAxes(axes.length, x.shape.length);\n }\n backend_util.assertAxesAreInnerMostDims('min', axes, xRank);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(permutedX.shape, axes);\n const inSize = util.sizeFromShape(reduceShape);\n const a2D = reshape({ inputs: { x: permutedX }, backend, attrs: { shape: [-1, inSize] } });\n const reduced = reduce(a2D, a2D.dtype, 'min', backend);\n let res;\n if (keepDims) {\n const newShape = backend_util.expandShapeToKeepDim(outShape, origAxes);\n res = reshape({ inputs: { x: reduced }, backend, attrs: { shape: newShape } });\n }\n else {\n res = reshape({ inputs: { x: reduced }, backend, attrs: { shape: outShape } });\n }\n backend.disposeIntermediateTensorInfo(a2D);\n backend.disposeIntermediateTensorInfo(reduced);\n if (permutedAxes != null) {\n backend.disposeIntermediateTensorInfo(permutedX);\n }\n return res;\n}\nexport const minConfig = {\n kernelName: Min,\n backendName: 'webgl',\n kernelFunc: min\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL01pbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixHQUFHLEVBQW1DLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxVQUFVLEdBQUcsQ0FDZixJQUFxRTtJQUV2RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUU3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBQ3BCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixTQUFTLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkU7SUFFRCxZQUFZLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RCxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUN6QixZQUFZLENBQUMseUJBQXlCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUNMLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxTQUFTLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV2RCxJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksUUFBUSxFQUFFO1FBQ1osTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQzFFO1NBQU07UUFDTCxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQzFFO0lBRUQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQyxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7UUFDeEIsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2xEO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNaW4sIE1pbkF0dHJzLCBNaW5JbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3JlZHVjZX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3JlZHVjZSc7XG5cbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4oXG4gICAgYXJnczoge2lucHV0czogTWluSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCBhdHRyczogTWluQXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YXhpcywga2VlcERpbXN9ID0gYXR0cnM7XG5cbiAgY29uc3QgeFJhbmsgPSB4LnNoYXBlLmxlbmd0aDtcblxuICBjb25zdCBvcmlnQXhlcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSk7XG4gIGxldCBheGVzID0gb3JpZ0F4ZXM7XG4gIGNvbnN0IHBlcm11dGVkQXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRBeGVzUGVybXV0YXRpb24oYXhlcywgeFJhbmspO1xuICBsZXQgcGVybXV0ZWRYID0geDtcbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgcGVybXV0ZWRYID0gdHJhbnNwb3NlKHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtwZXJtOiBwZXJtdXRlZEF4ZXN9fSk7XG4gICAgYXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRJbm5lck1vc3RBeGVzKGF4ZXMubGVuZ3RoLCB4LnNoYXBlLmxlbmd0aCk7XG4gIH1cblxuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ21pbicsIGF4ZXMsIHhSYW5rKTtcbiAgY29uc3QgW291dFNoYXBlLCByZWR1Y2VTaGFwZV0gPVxuICAgICAgYmFja2VuZF91dGlsLmNvbXB1dGVPdXRBbmRSZWR1Y2VTaGFwZXMocGVybXV0ZWRYLnNoYXBlLCBheGVzKTtcbiAgY29uc3QgaW5TaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcbiAgY29uc3QgYTJEID1cbiAgICAgIHJlc2hhcGUoe2lucHV0czoge3g6IHBlcm11dGVkWH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IFstMSwgaW5TaXplXX19KTtcbiAgY29uc3QgcmVkdWNlZCA9IHJlZHVjZShhMkQsIGEyRC5kdHlwZSwgJ21pbicsIGJhY2tlbmQpO1xuXG4gIGxldCByZXM7XG4gIGlmIChrZWVwRGltcykge1xuICAgIGNvbnN0IG5ld1NoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG91dFNoYXBlLCBvcmlnQXhlcyk7XG4gICAgcmVzID0gcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVkdWNlZH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IG5ld1NoYXBlfX0pO1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHJlc2hhcGUoe2lucHV0czoge3g6IHJlZHVjZWR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBvdXRTaGFwZX19KTtcbiAgfVxuXG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oYTJEKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZWR1Y2VkKTtcblxuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHBlcm11dGVkWCk7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgY29uc3QgbWluQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1pbixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG1pbiBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Minimum } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET } from '../binaryop_gpu';\nimport { CHECK_NAN_SNIPPET_PACKED } from '../binaryop_packed_gpu';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { minimumImplCPU } from '../kernel_utils/shared';\nconst MINIMUM = CHECK_NAN_SNIPPET + `\n return min(a, b);\n`;\nconst MINIMUM_PACKED = `\n vec4 result = vec4(min(a, b));\n bvec4 isNaNA = isnan(a);\n bvec4 isNaNB = isnan(b);\n bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n ` +\n CHECK_NAN_SNIPPET_PACKED + `\n return result;\n`;\nexport const minimum = binaryKernelFunc({\n opSnippet: MINIMUM,\n packedOpSnippet: MINIMUM_PACKED,\n cpuKernelImpl: minimumImplCPU\n});\nexport const minimumConfig = {\n kernelName: Minimum,\n backendName: 'webgl',\n kernelFunc: minimum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9NaW5pbXVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFeEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixHQUFHOztDQUVuQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUc7Ozs7O0dBS3BCO0lBQ0Msd0JBQXdCLEdBQUc7O0NBRTlCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUM7SUFDdEMsU0FBUyxFQUFFLE9BQU87SUFDbEIsZUFBZSxFQUFFLGNBQWM7SUFDL0IsYUFBYSxFQUFFLGNBQWM7Q0FDOUIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsT0FBZ0M7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1pbmltdW19IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Q0hFQ0tfTkFOX1NOSVBQRVR9IGZyb20gJy4uL2JpbmFyeW9wX2dwdSc7XG5pbXBvcnQge0NIRUNLX05BTl9TTklQUEVUX1BBQ0tFRH0gZnJvbSAnLi4vYmluYXJ5b3BfcGFja2VkX2dwdSc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHttaW5pbXVtSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmNvbnN0IE1JTklNVU0gPSBDSEVDS19OQU5fU05JUFBFVCArIGBcbiAgcmV0dXJuIG1pbihhLCBiKTtcbmA7XG5cbmNvbnN0IE1JTklNVU1fUEFDS0VEID0gYFxuICB2ZWM0IHJlc3VsdCA9IHZlYzQobWluKGEsIGIpKTtcbiAgYnZlYzQgaXNOYU5BID0gaXNuYW4oYSk7XG4gIGJ2ZWM0IGlzTmFOQiA9IGlzbmFuKGIpO1xuICBidmVjNCBpc05hTiA9IGJ2ZWM0KGlzTmFOQS54IHx8IGlzTmFOQi54LCBpc05hTkEueSB8fCBpc05hTkIueSwgaXNOYU5BLnogfHwgaXNOYU5CLnosIGlzTmFOQS53IHx8IGlzTmFOQi53KTtcbiAgYCArXG4gICAgQ0hFQ0tfTkFOX1NOSVBQRVRfUEFDS0VEICsgYFxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IG1pbmltdW0gPSBiaW5hcnlLZXJuZWxGdW5jKHtcbiAgb3BTbmlwcGV0OiBNSU5JTVVNLFxuICBwYWNrZWRPcFNuaXBwZXQ6IE1JTklNVU1fUEFDS0VELFxuICBjcHVLZXJuZWxJbXBsOiBtaW5pbXVtSW1wbENQVVxufSk7XG5cbmV4cG9ydCBjb25zdCBtaW5pbXVtQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1pbmltdW0sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBtaW5pbXVtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class MirrorPadProgram {\n constructor(xShape, paddings, mode) {\n this.variableNames = ['x'];\n this.outputShape = paddings.map((p, i) => p[0] /* beforePad */ + xShape[i] + p[1] /* afterPad */);\n const rank = xShape.length;\n const dtype = getCoordsDataType(rank);\n const start = paddings.map(p => p[0]).join(',');\n const end = paddings.map((p, i) => p[0] + xShape[i]).join(',');\n const unpackedCoords = ['coords[0]', 'coords[1]', 'coords[2]', 'coords[3]'].slice(0, rank);\n const offset = mode === 'reflect' ? 0 : 1;\n if (rank === 1) {\n 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 `;\n return;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlycm9yX3BhZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL21pcnJvcl9wYWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE1BQU0sT0FBTyxnQkFBZ0I7SUFLM0IsWUFDSSxNQUFnQixFQUFFLFFBQWlDLEVBQ25ELElBQTJCO1FBTi9CLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQU9wQixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQzNCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNLGNBQWMsR0FDaEIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLEdBQUc7c0JBQ0EsS0FBSztvQkFDUCxHQUFHOzs7Ozt3Q0FLaUIsTUFBTTs7NENBRUYsTUFBTTs7OztPQUkzQyxDQUFDO1lBQ0YsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRztRQUNaLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSztRQUMvQixLQUFLLFVBQVUsS0FBSyxJQUFJLEdBQUc7OztVQUd6QixLQUFLOzhCQUNlLElBQUk7O2lEQUVlLE1BQU07O3FEQUVGLE1BQU07OztVQUdqRCxLQUFLO3lCQUNVLGNBQWM7O0tBRWxDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDb29yZHNEYXRhVHlwZX0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXInO1xuXG5leHBvcnQgY2xhc3MgTWlycm9yUGFkUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgeFNoYXBlOiBudW1iZXJbXSwgcGFkZGluZ3M6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgICAgbW9kZTogJ3JlZmxlY3QnfCdzeW1tZXRyaWMnKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IHBhZGRpbmdzLm1hcChcbiAgICAgICAgKHAsIGkpID0+IHBbMF0gLyogYmVmb3JlUGFkICovICsgeFNoYXBlW2ldICsgcFsxXSAvKiBhZnRlclBhZCAqLyk7XG4gICAgY29uc3QgcmFuayA9IHhTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgZHR5cGUgPSBnZXRDb29yZHNEYXRhVHlwZShyYW5rKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gcGFkZGluZ3MubWFwKHAgPT4gcFswXSkuam9pbignLCcpO1xuICAgIGNvbnN0IGVuZCA9IHBhZGRpbmdzLm1hcCgocCwgaSkgPT4gcFswXSArIHhTaGFwZVtpXSkuam9pbignLCcpO1xuICAgIGNvbnN0IHVucGFja2VkQ29vcmRzID1cbiAgICAgICAgWydjb29yZHNbMF0nLCAnY29vcmRzWzFdJywgJ2Nvb3Jkc1syXScsICdjb29yZHNbM10nXS5zbGljZSgwLCByYW5rKTtcbiAgICBjb25zdCBvZmZzZXQgPSBtb2RlID09PSAncmVmbGVjdCcgPyAwIDogMTtcblxuICAgIGlmIChyYW5rID09PSAxKSB7XG4gICAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICBpbnQgc3RhcnQgPSAke3N0YXJ0fTtcbiAgICAgICAgaW50IGVuZCA9ICR7ZW5kfTtcblxuICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgaW50IG91dEMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgICBpZiAob3V0QyA8IHN0YXJ0KSB7XG4gICAgICAgICAgICBvdXRDID0gc3RhcnQgKiAyIC0gb3V0QyAtICR7b2Zmc2V0fTtcbiAgICAgICAgICB9IGVsc2UgaWYob3V0QyA+PSBlbmQpIHtcbiAgICAgICAgICAgIG91dEMgPSAoZW5kIC0gMSkgKiAyIC0gb3V0QyArICR7b2Zmc2V0fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0T3V0cHV0KGdldFgob3V0QyAtIHN0YXJ0KSk7XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAke2R0eXBlfSBzdGFydCA9ICR7ZHR5cGV9KCR7c3RhcnR9KTtcbiAgICAgICR7ZHR5cGV9IGVuZCA9ICR7ZHR5cGV9KCR7ZW5kfSk7XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgJHtkdHlwZX0gb3V0QyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8ICR7cmFua307IGkrKykge1xuICAgICAgICAgIGlmIChvdXRDW2ldIDwgc3RhcnRbaV0pIHtcbiAgICAgICAgICAgIG91dENbaV0gPSBzdGFydFtpXSAqIDIgLSBvdXRDW2ldIC0gJHtvZmZzZXR9O1xuICAgICAgICAgIH0gZWxzZSBpZihvdXRDW2ldID49IGVuZFtpXSkge1xuICAgICAgICAgICAgb3V0Q1tpXSA9IChlbmRbaV0gLSAxKSAqIDIgLSBvdXRDW2ldICsgJHtvZmZzZXR9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAke2R0eXBlfSBjb29yZHMgPSBvdXRDIC0gc3RhcnQ7XG4gICAgICAgIHNldE91dHB1dChnZXRYKCR7dW5wYWNrZWRDb29yZHN9KSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\n/**\n * Example shader code for\n * `mirrorPad(tf.tensor1d([1, 2, 3], 'int32'), [[2, 2]], 'reflect')`\n * ```\n * const int start = int(2);\n * const int end = int(5);\n *\n * void main() {\n * int outputLoc = getOutputCoords();\n * vec4 result = vec4(0.);\n *\n * int rc = outputLoc;\n *\n * int source = rc;\n * if (source < start) {\n * source = start * 2 - source - 0;\n * } else if (source >= end) {\n * source = (end - 1) * 2 - source + 0;\n * }\n * source -= start;\n *\n * result[0] = getChannel(getX(source), source);\n * rc += 1;\n * if(rc < 6) {\n * int source = rc;\n * if (source < start) {\n * source = start * 2 - source - 0;\n * } else if (source >= end) {\n * source = (end - 1) * 2 - source + 0;\n * }\n * source -= start;\n *\n * result[1] = getChannel(getX(source), source);\n * }\n *\n * setOutput(result);\n * }\n * ```\n */\nexport class MirrorPadPackedProgram {\n constructor(xShape, paddings, mode) {\n this.variableNames = ['x'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = paddings.map((p, i) => p[0] /* beforePad */ + xShape[i] + p[1] /* afterPad */);\n const rank = xShape.length;\n const dtype = getCoordsDataType(rank);\n const start = paddings.map(p => p[0]).join(',');\n const end = paddings.map((p, i) => p[0] + xShape[i]).join(',');\n const coords = getChannels('rc', rank);\n const source = getChannels('source', rank);\n const cLimit = `${coords[rank - 1]} < ${this.outputShape[rank - 1]}`;\n const innerDims = rank === 1 ? 'source' : `vec2(${source.slice(-2).join()})`;\n const offset = mode === 'reflect' ? 0 : 1;\n let mainLoop = '';\n if (rank === 1) {\n const 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 `;\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 `;\n }\n else {\n const 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 `;\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 `;\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlycm9yX3BhZF9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9taXJyb3JfcGFkX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFPakMsWUFDSSxNQUFnQixFQUFFLFFBQWlDLEVBQ25ELElBQTJCO1FBUi9CLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQU9sQixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQzNCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckUsTUFBTSxTQUFTLEdBQ1gsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDZCxNQUFNLFFBQVEsR0FBRztVQUNiLEtBQUs7OzBDQUUyQixNQUFNOzs4Q0FFRixNQUFNOzs7T0FHN0MsQ0FBQztZQUNGLFFBQVEsR0FBRztVQUNQLEtBQUs7VUFDTCxRQUFRO3NDQUNvQixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sU0FBUztVQUN4RCxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzthQUNiLE1BQU07WUFDUCxRQUFRO3dDQUNvQixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sU0FBUzs7T0FFN0QsQ0FBQztTQUNIO2FBQU07WUFDTCxNQUFNLFFBQVEsR0FBRztVQUNiLEtBQUs7VUFDTCxLQUFLLFNBQVMsS0FBSztVQUNuQixLQUFLLFVBQVUsS0FBSztVQUNwQixLQUFLOzs2Q0FFOEIsTUFBTTtrREFDRCxNQUFNOztPQUVqRCxDQUFDO1lBRUYsUUFBUSxHQUFHO1VBQ1AsS0FBSztVQUNMLFFBQVE7c0NBQ29CLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxTQUFTO1VBQ3hELE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2FBQ2IsTUFBTTtZQUNQLFFBQVE7d0NBQ29CLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxTQUFTOzs7VUFHMUQsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7YUFDYixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNqRCxRQUFRO3dDQUNvQixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sU0FBUztZQUN4RCxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztlQUNiLE1BQU07Y0FDUCxRQUFROzBDQUNvQixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sU0FBUzs7O09BRy9ELENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7Y0FDTixLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUs7Y0FDL0IsS0FBSyxVQUFVLEtBQUssSUFBSSxHQUFHOzs7VUFHL0IsS0FBSzs7VUFFTCxRQUFROzs7S0FHYixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q2hhbm5lbHN9IGZyb20gJy4vcGFja2luZ191dGlsJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuLyoqXG4gKiBFeGFtcGxlIHNoYWRlciBjb2RlIGZvclxuICogYG1pcnJvclBhZCh0Zi50ZW5zb3IxZChbMSwgMiwgM10sICdpbnQzMicpLCBbWzIsIDJdXSwgJ3JlZmxlY3QnKWBcbiAqIGBgYFxuICogICAgY29uc3QgaW50IHN0YXJ0ID0gaW50KDIpO1xuICogICAgY29uc3QgaW50IGVuZCA9IGludCg1KTtcbiAqXG4gKiAgICB2b2lkIG1haW4oKSB7XG4gKiAgICAgICBpbnQgb3V0cHV0TG9jID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gKiAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4pO1xuICpcbiAqICAgICAgIGludCByYyA9IG91dHB1dExvYztcbiAqXG4gKiAgICAgICBpbnQgc291cmNlID0gcmM7XG4gKiAgICAgICBpZiAoc291cmNlIDwgc3RhcnQpIHtcbiAqICAgICAgICAgc291cmNlID0gc3RhcnQgKiAyIC0gc291cmNlIC0gMDtcbiAqICAgICAgIH0gZWxzZSBpZiAoc291cmNlID49IGVuZCkge1xuICogICAgICAgICBzb3VyY2UgPSAoZW5kIC0gMSkgKiAyIC0gc291cmNlICsgMDtcbiAqICAgICAgIH1cbiAqICAgICAgIHNvdXJjZSAtPSBzdGFydDtcbiAqXG4gKiAgICAgICByZXN1bHRbMF0gPSBnZXRDaGFubmVsKGdldFgoc291cmNlKSwgc291cmNlKTtcbiAqICAgICAgIHJjICs9IDE7XG4gKiAgICAgICBpZihyYyA8IDYpIHtcbiAqICAgICAgICAgIGludCBzb3VyY2UgPSByYztcbiAqICAgICAgICAgIGlmIChzb3VyY2UgPCBzdGFydCkge1xuICogICAgICAgICAgICBzb3VyY2UgPSBzdGFydCAqIDIgLSBzb3VyY2UgLSAwO1xuICogICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2UgPj0gZW5kKSB7XG4gKiAgICAgICAgICAgIHNvdXJjZSA9IChlbmQgLSAxKSAqIDIgLSBzb3VyY2UgKyAwO1xuICogICAgICAgICAgfVxuICogICAgICAgICAgc291cmNlIC09IHN0YXJ0O1xuICpcbiAqICAgICAgICAgcmVzdWx0WzFdID0gZ2V0Q2hhbm5lbChnZXRYKHNvdXJjZSksIHNvdXJjZSk7XG4gKiAgICAgICB9XG4gKlxuICogICAgICAgc2V0T3V0cHV0KHJlc3VsdCk7XG4gKiAgICAgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBNaXJyb3JQYWRQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCddO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICB4U2hhcGU6IG51bWJlcltdLCBwYWRkaW5nczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgICBtb2RlOiAncmVmbGVjdCd8J3N5bW1ldHJpYycpIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gcGFkZGluZ3MubWFwKFxuICAgICAgICAocCwgaSkgPT4gcFswXSAvKiBiZWZvcmVQYWQgKi8gKyB4U2hhcGVbaV0gKyBwWzFdIC8qIGFmdGVyUGFkICovKTtcbiAgICBjb25zdCByYW5rID0geFNoYXBlLmxlbmd0aDtcbiAgICBjb25zdCBkdHlwZSA9IGdldENvb3Jkc0RhdGFUeXBlKHJhbmspO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBwYWRkaW5ncy5tYXAocCA9PiBwWzBdKS5qb2luKCcsJyk7XG4gICAgY29uc3QgZW5kID0gcGFkZGluZ3MubWFwKChwLCBpKSA9PiBwWzBdICsgeFNoYXBlW2ldKS5qb2luKCcsJyk7XG4gICAgY29uc3QgY29vcmRzID0gZ2V0Q2hhbm5lbHMoJ3JjJywgcmFuayk7XG4gICAgY29uc3Qgc291cmNlID0gZ2V0Q2hhbm5lbHMoJ3NvdXJjZScsIHJhbmspO1xuICAgIGNvbnN0IGNMaW1pdCA9IGAke2Nvb3Jkc1tyYW5rIC0gMV19IDwgJHt0aGlzLm91dHB1dFNoYXBlW3JhbmsgLSAxXX1gO1xuICAgIGNvbnN0IGlubmVyRGltcyA9XG4gICAgICAgIHJhbmsgPT09IDEgPyAnc291cmNlJyA6IGB2ZWMyKCR7c291cmNlLnNsaWNlKC0yKS5qb2luKCl9KWA7XG4gICAgY29uc3Qgb2Zmc2V0ID0gbW9kZSA9PT0gJ3JlZmxlY3QnID8gMCA6IDE7XG5cbiAgICBsZXQgbWFpbkxvb3AgPSAnJztcbiAgICBpZiAocmFuayA9PT0gMSkge1xuICAgICAgY29uc3QgcGFkU2V0dXAgPSBgXG4gICAgICAgICR7ZHR5cGV9IHNvdXJjZSA9IHJjO1xuICAgICAgICBpZiAoc291cmNlIDwgc3RhcnQpIHtcbiAgICAgICAgICBzb3VyY2UgPSBzdGFydCAqIDIgLSBzb3VyY2UgLSAke29mZnNldH07XG4gICAgICAgIH0gZWxzZSBpZiAoc291cmNlID49IGVuZCkge1xuICAgICAgICAgIHNvdXJjZSA9IChlbmQgLSAxKSAqIDIgLSBzb3VyY2UgKyAke29mZnNldH07XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlIC09IHN0YXJ0O1xuICAgICAgYDtcbiAgICAgIG1haW5Mb29wID0gYFxuICAgICAgICAke2R0eXBlfSByYyA9IG91dHB1dExvYztcbiAgICAgICAgJHtwYWRTZXR1cH1cbiAgICAgICAgcmVzdWx0WzBdID0gZ2V0Q2hhbm5lbChnZXRYKCR7c291cmNlLmpvaW4oKX0pLCAke2lubmVyRGltc30pO1xuICAgICAgICAke2Nvb3Jkc1tyYW5rIC0gMV19ICs9IDE7XG4gICAgICAgIGlmKCR7Y0xpbWl0fSkge1xuICAgICAgICAgICR7cGFkU2V0dXB9XG4gICAgICAgICAgcmVzdWx0WzFdID0gZ2V0Q2hhbm5lbChnZXRYKCR7c291cmNlLmpvaW4oKX0pLCAke2lubmVyRGltc30pO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYWRTZXR1cCA9IGBcbiAgICAgICAgJHtkdHlwZX0gc291cmNlID0gcmM7XG4gICAgICAgICR7ZHR5cGV9IGx0ID0gJHtkdHlwZX0obGVzc1RoYW4oc291cmNlLCBzdGFydCkpO1xuICAgICAgICAke2R0eXBlfSBndGUgPSAke2R0eXBlfShncmVhdGVyVGhhbkVxdWFsKHNvdXJjZSwgZW5kKSk7XG4gICAgICAgICR7ZHR5cGV9IG9yaWcgPSAxIC0gKGx0ICsgZ3RlKTtcbiAgICAgICAgc291cmNlID0gb3JpZyAqIHNvdXJjZSArXG4gICAgICAgICAgICAgICAgbHQgKiAoc3RhcnQgKiAyIC0gc291cmNlIC0gJHtvZmZzZXR9KSArXG4gICAgICAgICAgICAgICAgZ3RlICogKChlbmQgLSAxKSAqIDIgLSBzb3VyY2UgKyAke29mZnNldH0pO1xuICAgICAgICBzb3VyY2UgLT0gc3RhcnQ7XG4gICAgICBgO1xuXG4gICAgICBtYWluTG9vcCA9IGBcbiAgICAgICAgJHtkdHlwZX0gcmMgPSBvdXRwdXRMb2M7XG4gICAgICAgICR7cGFkU2V0dXB9XG4gICAgICAgIHJlc3VsdFswXSA9IGdldENoYW5uZWwoZ2V0WCgke3NvdXJjZS5qb2luKCl9KSwgJHtpbm5lckRpbXN9KTtcbiAgICAgICAgJHtjb29yZHNbcmFuayAtIDFdfSArPSAxO1xuICAgICAgICBpZigke2NMaW1pdH0pIHtcbiAgICAgICAgICAke3BhZFNldHVwfVxuICAgICAgICAgIHJlc3VsdFsxXSA9IGdldENoYW5uZWwoZ2V0WCgke3NvdXJjZS5qb2luKCl9KSwgJHtpbm5lckRpbXN9KTtcbiAgICAgICAgfVxuICAgICAgICByYyA9IG91dHB1dExvYztcbiAgICAgICAgJHtjb29yZHNbcmFuayAtIDJdfSArPSAxO1xuICAgICAgICBpZigke2Nvb3Jkc1tyYW5rIC0gMl19IDwgJHt0aGlzLm91dHB1dFNoYXBlW3JhbmsgLSAyXX0pIHtcbiAgICAgICAgICAke3BhZFNldHVwfVxuICAgICAgICAgIHJlc3VsdFsyXSA9IGdldENoYW5uZWwoZ2V0WCgke3NvdXJjZS5qb2luKCl9KSwgJHtpbm5lckRpbXN9KTtcbiAgICAgICAgICAke2Nvb3Jkc1tyYW5rIC0gMV19ICs9IDE7XG4gICAgICAgICAgaWYoJHtjTGltaXR9KSB7XG4gICAgICAgICAgICAke3BhZFNldHVwfVxuICAgICAgICAgICAgcmVzdWx0WzNdID0gZ2V0Q2hhbm5lbChnZXRYKCR7c291cmNlLmpvaW4oKX0pLCAke2lubmVyRGltc30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYDtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgY29uc3QgJHtkdHlwZX0gc3RhcnQgPSAke2R0eXBlfSgke3N0YXJ0fSk7XG4gICAgICBjb25zdCAke2R0eXBlfSBlbmQgPSAke2R0eXBlfSgke2VuZH0pO1xuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICR7ZHR5cGV9IG91dHB1dExvYyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4pO1xuICAgICAgICAke21haW5Mb29wfVxuICAgICAgICBzZXRPdXRwdXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, MirrorPad } from '@tensorflow/tfjs-core';\nimport { MirrorPadProgram } from '../mirror_pad_gpu';\nimport { MirrorPadPackedProgram } from '../mirror_pad_packed_gpu';\nexport const mirrorPadKernelFunc = ({ inputs, backend, attrs }) => {\n const { x } = inputs;\n const { paddings, mode } = attrs;\n const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n new MirrorPadPackedProgram(x.shape, paddings, mode) :\n new MirrorPadProgram(x.shape, paddings, mode);\n const output = backend.runWebGLProgram(program, [x], x.dtype);\n return output;\n};\nexport const mirrorPadConfig = {\n kernelName: MirrorPad,\n backendName: 'webgl',\n kernelFunc: mirrorPadKernelFunc,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlycm9yUGFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL01pcnJvclBhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUE0QixTQUFTLEVBQThDLE1BQU0sdUJBQXVCLENBQUM7QUFHNUgsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBSWIsQ0FBQyxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEVBQUUsRUFBRTtJQUM5QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRS9CLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQjtJQUMzQyxVQUFVLEVBQUUsU0FBUztJQUNyQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsbUJBQTRDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1pcnJvclBhZCwgTWlycm9yUGFkQXR0cnMsIE1pcnJvclBhZElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7TWlycm9yUGFkUHJvZ3JhbX0gZnJvbSAnLi4vbWlycm9yX3BhZF9ncHUnO1xuaW1wb3J0IHtNaXJyb3JQYWRQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9taXJyb3JfcGFkX3BhY2tlZF9ncHUnO1xuXG5leHBvcnQgY29uc3QgbWlycm9yUGFkS2VybmVsRnVuYzogKHBhcmFtczoge1xuICBpbnB1dHM6IE1pcnJvclBhZElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IE1pcnJvclBhZEF0dHJzXG59KSA9PiBUZW5zb3JJbmZvID0gKHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSkgPT4ge1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtwYWRkaW5ncywgbW9kZX0gPSBhdHRycztcblxuICBjb25zdCBwcm9ncmFtID0gZW52KCkuZ2V0Qm9vbCgnV0VCR0xfUEFDS19BUlJBWV9PUEVSQVRJT05TJykgP1xuICAgICAgbmV3IE1pcnJvclBhZFBhY2tlZFByb2dyYW0oeC5zaGFwZSwgcGFkZGluZ3MsIG1vZGUpIDpcbiAgICAgIG5ldyBNaXJyb3JQYWRQcm9ncmFtKHguc2hhcGUsIHBhZGRpbmdzLCBtb2RlKTtcblxuICBjb25zdCBvdXRwdXQgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeF0sIHguZHR5cGUpO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5leHBvcnQgY29uc3QgbWlycm9yUGFkQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1pcnJvclBhZCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG1pcnJvclBhZEtlcm5lbEZ1bmMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Mod } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET_PACKED } from '../binaryop_packed_gpu';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst MOD = `if (b == 0.0) return NAN;\n return mod(a, b);`;\nconst MOD_PACKED = `\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n ` +\n CHECK_NAN_SNIPPET_PACKED + `\n return result;\n`;\nexport const mod = binaryKernelFunc({\n opSnippet: MOD,\n packedOpSnippet: MOD_PACKED,\n});\nexport const modConfig = {\n kernelName: Mod,\n backendName: 'webgl',\n kernelFunc: mod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL01vZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXBFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sR0FBRyxHQUFHO29CQUNRLENBQUM7QUFFckIsTUFBTSxVQUFVLEdBQUc7OztHQUdoQjtJQUNDLHdCQUF3QixHQUFHOztDQUU5QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDO0lBQ2xDLFNBQVMsRUFBRSxHQUFHO0lBQ2QsZUFBZSxFQUFFLFVBQVU7Q0FDNUIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTW9kfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0NIRUNLX05BTl9TTklQUEVUX1BBQ0tFRH0gZnJvbSAnLi4vYmluYXJ5b3BfcGFja2VkX2dwdSc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuXG5jb25zdCBNT0QgPSBgaWYgKGIgPT0gMC4wKSByZXR1cm4gTkFOO1xuICByZXR1cm4gbW9kKGEsIGIpO2A7XG5cbmNvbnN0IE1PRF9QQUNLRUQgPSBgXG4gIHZlYzQgcmVzdWx0ID0gbW9kKGEsIGIpO1xuICBidmVjNCBpc05hTiA9IGVxdWFsKGIsIHZlYzQoMC4wKSk7XG4gIGAgK1xuICAgIENIRUNLX05BTl9TTklQUEVUX1BBQ0tFRCArIGBcbiAgcmV0dXJuIHJlc3VsdDtcbmA7XG5cbmV4cG9ydCBjb25zdCBtb2QgPSBiaW5hcnlLZXJuZWxGdW5jKHtcbiAgb3BTbmlwcGV0OiBNT0QsXG4gIHBhY2tlZE9wU25pcHBldDogTU9EX1BBQ0tFRCxcbn0pO1xuXG5leHBvcnQgY29uc3QgbW9kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1vZCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG1vZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class MultinomialProgram {\n constructor(batchSize, numOutcomes, numSamples) {\n this.variableNames = ['probs'];\n this.customUniforms = [{ name: 'seed', type: 'float' }];\n this.outputShape = [batchSize, numSamples];\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlub21pYWxfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9tdWx0aW5vbWlhbF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsTUFBTSxPQUFPLGtCQUFrQjtJQU03QixZQUFZLFNBQWlCLEVBQUUsV0FBbUIsRUFBRSxVQUFrQjtRQUx0RSxrQkFBYSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFHMUIsbUJBQWMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBc0IsRUFBQyxDQUFDLENBQUM7UUFHOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs4QkFRVSxXQUFXLEdBQUcsQ0FBQzs7Ozs7Ozs7OzswQkFVbkIsV0FBVyxHQUFHLENBQUM7O0tBRXBDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtVbmlmb3JtVHlwZX0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXInO1xuXG5leHBvcnQgY2xhc3MgTXVsdGlub21pYWxQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsncHJvYnMnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICBjdXN0b21Vbmlmb3JtcyA9IFt7bmFtZTogJ3NlZWQnLCB0eXBlOiAnZmxvYXQnIGFzIFVuaWZvcm1UeXBlfV07XG5cbiAgY29uc3RydWN0b3IoYmF0Y2hTaXplOiBudW1iZXIsIG51bU91dGNvbWVzOiBudW1iZXIsIG51bVNhbXBsZXM6IG51bWJlcikge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBbYmF0Y2hTaXplLCBudW1TYW1wbGVzXTtcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWMyIGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYmF0Y2ggPSBjb29yZHNbMF07XG5cbiAgICAgICAgZmxvYXQgciA9IHJhbmRvbShzZWVkKTtcbiAgICAgICAgZmxvYXQgY2RmID0gMC4wO1xuXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgJHtudW1PdXRjb21lcyAtIDF9OyBpKyspIHtcbiAgICAgICAgICBjZGYgKz0gZ2V0UHJvYnMoYmF0Y2gsIGkpO1xuXG4gICAgICAgICAgaWYgKHIgPCBjZGYpIHtcbiAgICAgICAgICAgIHNldE91dHB1dChmbG9hdChpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbm8gb3RoZXIgZXZlbnQgaGFwcGVuZWQsIGxhc3QgZXZlbnQgaGFwcGVuZWQuXG4gICAgICAgIHNldE91dHB1dChmbG9hdCgke251bU91dGNvbWVzIC0gMX0pKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RealDiv } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\n// Without the equality check div produces 0.9999 for a = b, which when\n// floored can cause errors.\nconst DIV = `\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`;\n// We do the same as in ./binaryop_gpu, with vec4 and ivec4.\n// On Linux, the vectorized implementation produces NaNs when a and b are 0.\nconst 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`;\nexport const realDiv = binaryKernelFunc({ opSnippet: DIV, packedOpSnippet: DIV_PACKED, checkOutOfBounds: true });\nexport const realDivConfig = {\n kernelName: RealDiv,\n backendName: 'webgl',\n kernelFunc: realDiv,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhbERpdi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9SZWFsRGl2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU5QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSx1RUFBdUU7QUFDdkUsNEJBQTRCO0FBQzVCLE1BQU0sR0FBRyxHQUFHOzs7O2NBSUUsQ0FBQztBQUVmLDREQUE0RDtBQUM1RCw0RUFBNEU7QUFDNUUsTUFBTSxVQUFVLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCbEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FDbkMsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxPQUFPO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7UmVhbERpdn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7S2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuLy8gV2l0aG91dCB0aGUgZXF1YWxpdHkgY2hlY2sgZGl2IHByb2R1Y2VzIDAuOTk5OSBmb3IgYSA9IGIsIHdoaWNoIHdoZW5cbi8vIGZsb29yZWQgY2FuIGNhdXNlIGVycm9ycy5cbmNvbnN0IERJViA9IGBcbmlmIChhID09IGIpIHtcbiAgcmV0dXJuIDEuMDtcbn07XG5yZXR1cm4gYSAvIGI7YDtcblxuLy8gV2UgZG8gdGhlIHNhbWUgYXMgaW4gLi9iaW5hcnlvcF9ncHUsIHdpdGggdmVjNCBhbmQgaXZlYzQuXG4vLyBPbiBMaW51eCwgdGhlIHZlY3Rvcml6ZWQgaW1wbGVtZW50YXRpb24gcHJvZHVjZXMgTmFOcyB3aGVuIGEgYW5kIGIgYXJlIDAuXG5jb25zdCBESVZfUEFDS0VEID0gYFxuICAvLyB2ZWM0IG9uZSA9IHZlYzQoZXF1YWwoYSwgYikpO1xuICAvLyByZXR1cm4gb25lICsgKHZlYzQoMS4wKSAtIG9uZSkgKiBhIC8gYjtcbiAgdmVjNCByZXN1bHQgPSBhIC8gYjtcbiAgaWYoYS54ID09IGIueCkge1xuICAgIHJlc3VsdC54ID0gMS47XG4gIH1cbiAgaWYoYS55ID09IGIueSkge1xuICAgIHJlc3VsdC55ID0gMS47XG4gIH1cbiAgaWYoYS56ID09IGIueikge1xuICAgIHJlc3VsdC56ID0gMS47XG4gIH1cbiAgaWYoYS53ID09IGIudykge1xuICAgIHJlc3VsdC53ID0gMS47XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IHJlYWxEaXYgPSBiaW5hcnlLZXJuZWxGdW5jKFxuICAgIHtvcFNuaXBwZXQ6IERJViwgcGFja2VkT3BTbmlwcGV0OiBESVZfUEFDS0VELCBjaGVja091dE9mQm91bmRzOiB0cnVlfSk7XG5cbmV4cG9ydCBjb25zdCByZWFsRGl2Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlYWxEaXYsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiByZWFsRGl2LFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sub } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { subImplCPU as cpuSub } from '../kernel_utils/shared';\nconst SUB = 'return a - b;';\nexport const sub = binaryKernelFunc({\n opSnippet: SUB,\n packedOpSnippet: SUB,\n supportsComplex: true,\n cpuKernelImpl: cpuSub\n});\nexport const subConfig = {\n kernelName: Sub,\n backendName: 'webgl',\n kernelFunc: sub\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1N1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsR0FBRyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUM7QUFFNUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDO0lBQ2xDLFNBQVMsRUFBRSxHQUFHO0lBQ2QsZUFBZSxFQUFFLEdBQUc7SUFDcEIsZUFBZSxFQUFFLElBQUk7SUFDckIsYUFBYSxFQUFFLE1BQU07Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxHQUFHO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTdWJ9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4va2VybmVsX3V0aWxzL2tlcm5lbF9mdW5jc191dGlscyc7XG5pbXBvcnQge3N1YkltcGxDUFUgYXMgY3B1U3VifSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuY29uc3QgU1VCID0gJ3JldHVybiBhIC0gYjsnO1xuXG5leHBvcnQgY29uc3Qgc3ViID0gYmluYXJ5S2VybmVsRnVuYyh7XG4gIG9wU25pcHBldDogU1VCLFxuICBwYWNrZWRPcFNuaXBwZXQ6IFNVQixcbiAgc3VwcG9ydHNDb21wbGV4OiB0cnVlLFxuICBjcHVLZXJuZWxJbXBsOiBjcHVTdWJcbn0pO1xuXG5leHBvcnQgY29uc3Qgc3ViQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFN1YixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHN1YlxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Softmax, util } from '@tensorflow/tfjs-core';\nimport { exp } from './Exp';\nimport { max } from './Max';\nimport { realDiv } from './RealDiv';\nimport { reshape } from './Reshape';\nimport { sub } from './Sub';\nimport { sum } from './Sum';\nexport function softmax(args) {\n const { inputs, backend, attrs } = args;\n const { logits } = inputs;\n const { dim } = attrs;\n const axes = util.parseAxisParam([dim], logits.shape);\n const maxLogit = max({\n inputs: { x: logits },\n backend,\n attrs: { reductionIndices: axes, keepDims: false }\n });\n const expandedShape = backend_util.expandShapeToKeepDim(maxLogit.shape, axes);\n const maxLogitsReshaped = reshape({ inputs: { x: maxLogit }, backend, attrs: { shape: expandedShape } });\n const a = sub({ inputs: { a: logits, b: maxLogitsReshaped }, backend });\n const b = exp({ inputs: { x: a }, backend });\n const sumExp = sum({ inputs: { x: b }, backend, attrs: { axis: axes, keepDims: false } });\n const sumExpReshaped = reshape({ inputs: { x: sumExp }, backend, attrs: { shape: expandedShape } });\n const res = realDiv({ inputs: { a: b, b: sumExpReshaped }, backend });\n backend.disposeIntermediateTensorInfo(maxLogit);\n backend.disposeIntermediateTensorInfo(maxLogitsReshaped);\n backend.disposeIntermediateTensorInfo(a);\n backend.disposeIntermediateTensorInfo(b);\n backend.disposeIntermediateTensorInfo(sumExp);\n backend.disposeIntermediateTensorInfo(sumExpReshaped);\n return res;\n}\nexport const softmaxConfig = {\n kernelName: Softmax,\n backendName: 'webgl',\n kernelFunc: softmax\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdG1heC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Tb2Z0bWF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQTRCLE9BQU8sRUFBMkMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJckksT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUIsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUl2QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sRUFBQyxHQUFHLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV0RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDbkIsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQztRQUNuQixPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7S0FDakQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFOUUsTUFBTSxpQkFBaUIsR0FDbkIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sQ0FBQyxHQUNILEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztJQUM1RSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztJQUN2RCxNQUFNLE1BQU0sR0FDUixHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQyxFQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLGNBQWMsR0FDaEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRTNFLE1BQU0sR0FBRyxHQUNMLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFlLENBQUM7SUFFeEUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV0RCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTb2Z0bWF4LCBTb2Z0bWF4QXR0cnMsIFNvZnRtYXhJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5cbmltcG9ydCB7ZXhwfSBmcm9tICcuL0V4cCc7XG5pbXBvcnQge21heH0gZnJvbSAnLi9NYXgnO1xuaW1wb3J0IHtyZWFsRGl2fSBmcm9tICcuL1JlYWxEaXYnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4vU3ViJztcbmltcG9ydCB7c3VtfSBmcm9tICcuL1N1bSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2Z0bWF4KGFyZ3M6IHtcbiAgaW5wdXRzOiBTb2Z0bWF4SW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogU29mdG1heEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtsb2dpdHN9ID0gaW5wdXRzO1xuICBjb25zdCB7ZGltfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGF4ZXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKFtkaW1dLCBsb2dpdHMuc2hhcGUpO1xuXG4gIGNvbnN0IG1heExvZ2l0ID0gbWF4KHtcbiAgICBpbnB1dHM6IHt4OiBsb2dpdHN9LFxuICAgIGJhY2tlbmQsXG4gICAgYXR0cnM6IHtyZWR1Y3Rpb25JbmRpY2VzOiBheGVzLCBrZWVwRGltczogZmFsc2V9XG4gIH0pO1xuXG4gIGNvbnN0IGV4cGFuZGVkU2hhcGUgPSBiYWNrZW5kX3V0aWwuZXhwYW5kU2hhcGVUb0tlZXBEaW0obWF4TG9naXQuc2hhcGUsIGF4ZXMpO1xuXG4gIGNvbnN0IG1heExvZ2l0c1Jlc2hhcGVkID1cbiAgICAgIHJlc2hhcGUoe2lucHV0czoge3g6IG1heExvZ2l0fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogZXhwYW5kZWRTaGFwZX19KTtcbiAgY29uc3QgYSA9XG4gICAgICBzdWIoe2lucHV0czoge2E6IGxvZ2l0cywgYjogbWF4TG9naXRzUmVzaGFwZWR9LCBiYWNrZW5kfSkgYXMgVGVuc29ySW5mbztcbiAgY29uc3QgYiA9IGV4cCh7aW5wdXRzOiB7eDogYX0sIGJhY2tlbmR9KSBhcyBUZW5zb3JJbmZvO1xuICBjb25zdCBzdW1FeHAgPVxuICAgICAgc3VtKHtpbnB1dHM6IHt4OiBifSwgYmFja2VuZCwgYXR0cnM6IHtheGlzOiBheGVzLCBrZWVwRGltczogZmFsc2V9fSk7XG4gIGNvbnN0IHN1bUV4cFJlc2hhcGVkID1cbiAgICAgIHJlc2hhcGUoe2lucHV0czoge3g6IHN1bUV4cH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IGV4cGFuZGVkU2hhcGV9fSk7XG5cbiAgY29uc3QgcmVzID1cbiAgICAgIHJlYWxEaXYoe2lucHV0czoge2E6IGIsIGI6IHN1bUV4cFJlc2hhcGVkfSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhtYXhMb2dpdCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8obWF4TG9naXRzUmVzaGFwZWQpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGEpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGIpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHN1bUV4cCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oc3VtRXhwUmVzaGFwZWQpO1xuXG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBzb2Z0bWF4Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNvZnRtYXgsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBzb2Z0bWF4IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Multinomial } from '@tensorflow/tfjs-core';\nimport { MultinomialProgram } from '../multinomial_gpu';\nimport { softmax } from './Softmax';\nexport function multinomial(args) {\n const { inputs, backend, attrs } = args;\n const { logits } = inputs;\n const { numSamples, seed, normalized } = attrs;\n const probs = normalized ?\n logits :\n softmax({ inputs: { logits }, backend, attrs: { dim: logits.shape.length - 1 } });\n const batchSize = probs.shape[0];\n const numOutcomes = probs.shape[1];\n const program = new MultinomialProgram(batchSize, numOutcomes, numSamples);\n const customValues = [[seed]];\n const res = backend.runWebGLProgram(program, [probs], 'int32', customValues);\n if (!normalized) {\n backend.disposeIntermediateTensorInfo(probs);\n }\n return res;\n}\nexport const multinomialConfig = {\n kernelName: Multinomial,\n backendName: 'webgl',\n kernelFunc: multinomial\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlub21pYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvTXVsdGlub21pYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixXQUFXLEVBQWtELE1BQU0sdUJBQXVCLENBQUM7QUFHN0gsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsV0FBVyxDQUFDLElBSTNCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDeEIsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTdDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDO1FBQ1IsT0FBTyxDQUNILEVBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRSxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3RSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2YsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlCO0lBQzdDLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxXQUFvQztDQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTXVsdGlub21pYWwsIE11bHRpbm9taWFsQXR0cnMsIE11bHRpbm9taWFsSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtNdWx0aW5vbWlhbFByb2dyYW19IGZyb20gJy4uL211bHRpbm9taWFsX2dwdSc7XG5cbmltcG9ydCB7c29mdG1heH0gZnJvbSAnLi9Tb2Z0bWF4JztcblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpbm9taWFsKGFyZ3M6IHtcbiAgaW5wdXRzOiBNdWx0aW5vbWlhbElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IE11bHRpbm9taWFsQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2xvZ2l0c30gPSBpbnB1dHM7XG4gIGNvbnN0IHtudW1TYW1wbGVzLCBzZWVkLCBub3JtYWxpemVkfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHByb2JzID0gbm9ybWFsaXplZCA/XG4gICAgICBsb2dpdHMgOlxuICAgICAgc29mdG1heChcbiAgICAgICAgICB7aW5wdXRzOiB7bG9naXRzfSwgYmFja2VuZCwgYXR0cnM6IHtkaW06IGxvZ2l0cy5zaGFwZS5sZW5ndGggLSAxfX0pO1xuICBjb25zdCBiYXRjaFNpemUgPSBwcm9icy5zaGFwZVswXTtcbiAgY29uc3QgbnVtT3V0Y29tZXMgPSBwcm9icy5zaGFwZVsxXTtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBNdWx0aW5vbWlhbFByb2dyYW0oYmF0Y2hTaXplLCBudW1PdXRjb21lcywgbnVtU2FtcGxlcyk7XG4gIGNvbnN0IGN1c3RvbVZhbHVlcyA9IFtbc2VlZF1dO1xuICBjb25zdCByZXMgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbcHJvYnNdLCAnaW50MzInLCBjdXN0b21WYWx1ZXMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHByb2JzKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgY29uc3QgbXVsdGlub21pYWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTXVsdGlub21pYWwsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBtdWx0aW5vbWlhbCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, Neg } from '@tensorflow/tfjs-core';\nimport { negImplCPU } from '../kernel_utils/shared';\nimport { CHECK_NAN_SNIPPET, UnaryOpProgram } from '../unaryop_gpu';\nimport { UnaryOpPackedProgram } from '../unaryop_packed_gpu';\nconst NEG = CHECK_NAN_SNIPPET + `\n return -x;\n`;\nconst NEG_PACKED = `\n vec4 result = -x;\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`;\n// This doesn't use unaryKernelFunc because negImplCPU is not of type\n// SimpleUnaryKernelImplCPU.\nexport function neg(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n if (backend.shouldExecuteOnCPU([x])) {\n const xData = backend.texData.get(x.dataId);\n const [outValues, newShape] = negImplCPU(xData.values, x.shape, x.dtype);\n return backend.makeTensorInfo(newShape, x.dtype, outValues);\n }\n let program;\n if (env().getBool('WEBGL_PACK_UNARY_OPERATIONS')) {\n program = new UnaryOpPackedProgram(x.shape, NEG_PACKED);\n }\n else {\n program = new UnaryOpProgram(x.shape, NEG);\n }\n return backend.runWebGLProgram(program, [x], x.dtype);\n}\nexport const negConfig = {\n kernelName: Neg,\n backendName: 'webgl',\n kernelFunc: neg\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL05lZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUE0QixHQUFHLEVBQW9DLE1BQU0sdUJBQXVCLENBQUM7QUFHNUcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRCxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsR0FBRzs7Q0FFL0IsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHOzs7Ozs7Ozs7O0NBVWxCLENBQUM7QUFFRixxRUFBcUU7QUFDckUsNEJBQTRCO0FBQzVCLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBb0Q7SUFFdEUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUVuQixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQ3ZCLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBb0IsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDN0Q7SUFFRCxJQUFJLE9BQTRDLENBQUM7SUFDakQsSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRTtRQUNoRCxPQUFPLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ3pEO1NBQU07UUFDTCxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztLQUM1QztJQUVELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtlbnYsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTmVnLCBOZWdJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge25lZ0ltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVCwgVW5hcnlPcFByb2dyYW19IGZyb20gJy4uL3VuYXJ5b3BfZ3B1JztcbmltcG9ydCB7VW5hcnlPcFBhY2tlZFByb2dyYW19IGZyb20gJy4uL3VuYXJ5b3BfcGFja2VkX2dwdSc7XG5cbmNvbnN0IE5FRyA9IENIRUNLX05BTl9TTklQUEVUICsgYFxuICByZXR1cm4gLXg7XG5gO1xuXG5jb25zdCBORUdfUEFDS0VEID0gYFxuICB2ZWM0IHJlc3VsdCA9IC14O1xuICBidmVjNCBpc05hTiA9IGlzbmFuKHgpO1xuXG4gIHJlc3VsdC5yID0gaXNOYU4uciA/IHguciA6IHJlc3VsdC5yO1xuICByZXN1bHQuZyA9IGlzTmFOLmcgPyB4LmcgOiByZXN1bHQuZztcbiAgcmVzdWx0LmIgPSBpc05hTi5iID8geC5iIDogcmVzdWx0LmI7XG4gIHJlc3VsdC5hID0gaXNOYU4uYSA/IHguYSA6IHJlc3VsdC5hO1xuXG4gIHJldHVybiByZXN1bHQ7XG5gO1xuXG4vLyBUaGlzIGRvZXNuJ3QgdXNlIHVuYXJ5S2VybmVsRnVuYyBiZWNhdXNlIG5lZ0ltcGxDUFUgaXMgbm90IG9mIHR5cGVcbi8vIFNpbXBsZVVuYXJ5S2VybmVsSW1wbENQVS5cbmV4cG9ydCBmdW5jdGlvbiBuZWcoYXJnczoge2lucHV0czogTmVnSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuXG4gIGlmIChiYWNrZW5kLnNob3VsZEV4ZWN1dGVPbkNQVShbeF0pKSB7XG4gICAgY29uc3QgeERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgICBjb25zdCBbb3V0VmFsdWVzLCBuZXdTaGFwZV0gPVxuICAgICAgICBuZWdJbXBsQ1BVKHhEYXRhLnZhbHVlcyBhcyBUeXBlZEFycmF5LCB4LnNoYXBlLCB4LmR0eXBlKTtcbiAgICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhuZXdTaGFwZSwgeC5kdHlwZSwgb3V0VmFsdWVzKTtcbiAgfVxuXG4gIGxldCBwcm9ncmFtOiBVbmFyeU9wUHJvZ3JhbXxVbmFyeU9wUGFja2VkUHJvZ3JhbTtcbiAgaWYgKGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfVU5BUllfT1BFUkFUSU9OUycpKSB7XG4gICAgcHJvZ3JhbSA9IG5ldyBVbmFyeU9wUGFja2VkUHJvZ3JhbSh4LnNoYXBlLCBORUdfUEFDS0VEKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9ncmFtID0gbmV3IFVuYXJ5T3BQcm9ncmFtKHguc2hhcGUsIE5FRyk7XG4gIH1cblxuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5lZ0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBOZWcsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBuZWcgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, kernel_impls, NonMaxSuppressionV3 } from '@tensorflow/tfjs-core';\nconst nonMaxSuppressionV3Impl = kernel_impls.nonMaxSuppressionV3Impl;\nexport function nonMaxSuppressionV3(args) {\n backend_util.warn('tf.nonMaxSuppression() in webgl locks the UI thread. ' +\n 'Call tf.nonMaxSuppressionAsync() instead');\n const { inputs, backend, attrs } = args;\n const { boxes, scores } = inputs;\n const { maxOutputSize, iouThreshold, scoreThreshold } = attrs;\n const boxesVals = backend.readSync(boxes.dataId);\n const scoresVals = backend.readSync(scores.dataId);\n const { selectedIndices } = nonMaxSuppressionV3Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold);\n return backend.makeTensorInfo([selectedIndices.length], 'int32', new Int32Array(selectedIndices));\n}\nexport const nonMaxSuppressionV3Config = {\n kernelName: NonMaxSuppressionV3,\n backendName: 'webgl',\n kernelFunc: nonMaxSuppressionV3\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Ob25NYXhTdXBwcmVzc2lvblYzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUE0QixtQkFBbUIsRUFBa0UsTUFBTSx1QkFBdUIsQ0FBQztBQUVqTCxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztBQUdyRSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFJbkM7SUFDQyxZQUFZLENBQUMsSUFBSSxDQUNiLHVEQUF1RDtRQUN2RCwwQ0FBMEMsQ0FBQyxDQUFDO0lBRWhELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMvQixNQUFNLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFNUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFlLENBQUM7SUFDL0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFlLENBQUM7SUFFakUsTUFBTSxFQUFDLGVBQWUsRUFBQyxHQUFHLHVCQUF1QixDQUM3QyxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFeEUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUN6QixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQWlCO0lBQ3JELFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLG1CQUE0QztDQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwga2VybmVsX2ltcGxzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE5vbk1heFN1cHByZXNzaW9uVjMsIE5vbk1heFN1cHByZXNzaW9uVjNBdHRycywgTm9uTWF4U3VwcHJlc3Npb25WM0lucHV0cywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25WM0ltcGwgPSBrZXJuZWxfaW1wbHMubm9uTWF4U3VwcHJlc3Npb25WM0ltcGw7XG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25WMyhhcmdzOiB7XG4gIGlucHV0czogTm9uTWF4U3VwcHJlc3Npb25WM0lucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IE5vbk1heFN1cHByZXNzaW9uVjNBdHRyc1xufSkge1xuICBiYWNrZW5kX3V0aWwud2FybihcbiAgICAgICd0Zi5ub25NYXhTdXBwcmVzc2lvbigpIGluIHdlYmdsIGxvY2tzIHRoZSBVSSB0aHJlYWQuICcgK1xuICAgICAgJ0NhbGwgdGYubm9uTWF4U3VwcHJlc3Npb25Bc3luYygpIGluc3RlYWQnKTtcblxuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7Ym94ZXMsIHNjb3Jlc30gPSBpbnB1dHM7XG4gIGNvbnN0IHttYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGJveGVzVmFscyA9IGJhY2tlbmQucmVhZFN5bmMoYm94ZXMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBzY29yZXNWYWxzID0gYmFja2VuZC5yZWFkU3luYyhzY29yZXMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IHtzZWxlY3RlZEluZGljZXN9ID0gbm9uTWF4U3VwcHJlc3Npb25WM0ltcGwoXG4gICAgICBib3hlc1ZhbHMsIHNjb3Jlc1ZhbHMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQpO1xuXG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgW3NlbGVjdGVkSW5kaWNlcy5sZW5ndGhdLCAnaW50MzInLCBuZXcgSW50MzJBcnJheShzZWxlY3RlZEluZGljZXMpKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vbk1heFN1cHByZXNzaW9uVjNDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTm9uTWF4U3VwcHJlc3Npb25WMyxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG5vbk1heFN1cHByZXNzaW9uVjMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, kernel_impls, NonMaxSuppressionV4 } from '@tensorflow/tfjs-core';\nconst nonMaxSuppressionV4Impl = kernel_impls.nonMaxSuppressionV4Impl;\nexport function nonMaxSuppressionV4(args) {\n backend_util.warn('tf.nonMaxSuppression() in webgl locks the UI thread. ' +\n 'Call tf.nonMaxSuppressionAsync() instead');\n const { inputs, backend, attrs } = args;\n const { boxes, scores } = inputs;\n const { maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize } = attrs;\n const boxesVals = backend.readSync(boxes.dataId);\n const scoresVals = backend.readSync(scores.dataId);\n const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize);\n return [\n backend.makeTensorInfo([selectedIndices.length], 'int32', new Int32Array(selectedIndices)),\n backend.makeTensorInfo([], 'int32', new Int32Array([validOutputs]))\n ];\n}\nexport const nonMaxSuppressionV4Config = {\n kernelName: NonMaxSuppressionV4,\n backendName: 'webgl',\n kernelFunc: nonMaxSuppressionV4\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WNC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Ob25NYXhTdXBwcmVzc2lvblY0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUE0QixtQkFBbUIsRUFBOEUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3TCxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztBQUlyRSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFJbkM7SUFDQyxZQUFZLENBQUMsSUFBSSxDQUNiLHVEQUF1RDtRQUN2RCwwQ0FBMEMsQ0FBQyxDQUFDO0lBRWhELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMvQixNQUFNLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUMsR0FDbkUsS0FBSyxDQUFDO0lBRVYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFlLENBQUM7SUFDL0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFlLENBQUM7SUFFakUsTUFBTSxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUMsR0FBRyx1QkFBdUIsQ0FDM0QsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFDbEUsa0JBQWtCLENBQUMsQ0FBQztJQUV4QixPQUFPO1FBQ0wsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7S0FDcEUsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBaUI7SUFDckQsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsbUJBQTRDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBrZXJuZWxfaW1wbHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTm9uTWF4U3VwcHJlc3Npb25WNCwgTm9uTWF4U3VwcHJlc3Npb25WNEF0dHJzLCBOb25NYXhTdXBwcmVzc2lvblY0SW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25WNEltcGwgPSBrZXJuZWxfaW1wbHMubm9uTWF4U3VwcHJlc3Npb25WNEltcGw7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBub25NYXhTdXBwcmVzc2lvblY0KGFyZ3M6IHtcbiAgaW5wdXRzOiBOb25NYXhTdXBwcmVzc2lvblY0SW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogTm9uTWF4U3VwcHJlc3Npb25WNEF0dHJzXG59KTogW1RlbnNvckluZm8sIFRlbnNvckluZm9dIHtcbiAgYmFja2VuZF91dGlsLndhcm4oXG4gICAgICAndGYubm9uTWF4U3VwcHJlc3Npb24oKSBpbiB3ZWJnbCBsb2NrcyB0aGUgVUkgdGhyZWFkLiAnICtcbiAgICAgICdDYWxsIHRmLm5vbk1heFN1cHByZXNzaW9uQXN5bmMoKSBpbnN0ZWFkJyk7XG5cbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2JveGVzLCBzY29yZXN9ID0gaW5wdXRzO1xuICBjb25zdCB7bWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCwgcGFkVG9NYXhPdXRwdXRTaXplfSA9XG4gICAgICBhdHRycztcblxuICBjb25zdCBib3hlc1ZhbHMgPSBiYWNrZW5kLnJlYWRTeW5jKGJveGVzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgc2NvcmVzVmFscyA9IGJhY2tlbmQucmVhZFN5bmMoc2NvcmVzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcblxuICBjb25zdCB7c2VsZWN0ZWRJbmRpY2VzLCB2YWxpZE91dHB1dHN9ID0gbm9uTWF4U3VwcHJlc3Npb25WNEltcGwoXG4gICAgICBib3hlc1ZhbHMsIHNjb3Jlc1ZhbHMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsXG4gICAgICBwYWRUb01heE91dHB1dFNpemUpO1xuXG4gIHJldHVybiBbXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgW3NlbGVjdGVkSW5kaWNlcy5sZW5ndGhdLCAnaW50MzInLCBuZXcgSW50MzJBcnJheShzZWxlY3RlZEluZGljZXMpKSxcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFtdLCAnaW50MzInLCBuZXcgSW50MzJBcnJheShbdmFsaWRPdXRwdXRzXSkpXG4gIF07XG59XG5cbmV4cG9ydCBjb25zdCBub25NYXhTdXBwcmVzc2lvblY0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE5vbk1heFN1cHByZXNzaW9uVjQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBub25NYXhTdXBwcmVzc2lvblY0IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, kernel_impls, NonMaxSuppressionV5 } from '@tensorflow/tfjs-core';\nconst nonMaxSuppressionV5Impl = kernel_impls.nonMaxSuppressionV5Impl;\nexport function nonMaxSuppressionV5(args) {\n backend_util.warn('tf.nonMaxSuppression() in webgl locks the UI thread. ' +\n 'Call tf.nonMaxSuppressionAsync() instead');\n const { inputs, backend, attrs } = args;\n const { boxes, scores } = inputs;\n const { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma } = attrs;\n const boxesVals = backend.readSync(boxes.dataId);\n const scoresVals = backend.readSync(scores.dataId);\n const maxOutputSizeVal = maxOutputSize;\n const iouThresholdVal = iouThreshold;\n const scoreThresholdVal = scoreThreshold;\n const softNmsSigmaVal = softNmsSigma;\n const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl(boxesVals, scoresVals, maxOutputSizeVal, iouThresholdVal, scoreThresholdVal, softNmsSigmaVal);\n return [\n backend.makeTensorInfo([selectedIndices.length], 'int32', new Int32Array(selectedIndices)),\n backend.makeTensorInfo([selectedScores.length], 'float32', new Float32Array(selectedScores))\n ];\n}\nexport const nonMaxSuppressionV5Config = {\n kernelName: NonMaxSuppressionV5,\n backendName: 'webgl',\n kernelFunc: nonMaxSuppressionV5\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WNS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Ob25NYXhTdXBwcmVzc2lvblY1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUE0QixtQkFBbUIsRUFBOEUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3TCxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztBQUdyRSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFJbkM7SUFDQyxZQUFZLENBQUMsSUFBSSxDQUNiLHVEQUF1RDtRQUN2RCwwQ0FBMEMsQ0FBQyxDQUFDO0lBRWhELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMvQixNQUFNLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBQy9ELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBRWpFLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0lBQ3ZDLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQztJQUNyQyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztJQUN6QyxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUM7SUFFckMsTUFBTSxFQUFDLGVBQWUsRUFBRSxjQUFjLEVBQUMsR0FBRyx1QkFBdUIsQ0FDN0QsU0FBUyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQ3hELGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXhDLE9BQU87UUFDTCxPQUFPLENBQUMsY0FBYyxDQUNsQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkUsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzFFLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQWlCO0lBQ3JELFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLG1CQUE0QztDQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwga2VybmVsX2ltcGxzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE5vbk1heFN1cHByZXNzaW9uVjUsIE5vbk1heFN1cHByZXNzaW9uVjVBdHRycywgTm9uTWF4U3VwcHJlc3Npb25WNUlucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25WNUltcGwgPSBrZXJuZWxfaW1wbHMubm9uTWF4U3VwcHJlc3Npb25WNUltcGw7XG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25WNShhcmdzOiB7XG4gIGlucHV0czogTm9uTWF4U3VwcHJlc3Npb25WNUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IE5vbk1heFN1cHByZXNzaW9uVjVBdHRyc1xufSk6IFtUZW5zb3JJbmZvLCBUZW5zb3JJbmZvXSB7XG4gIGJhY2tlbmRfdXRpbC53YXJuKFxuICAgICAgJ3RmLm5vbk1heFN1cHByZXNzaW9uKCkgaW4gd2ViZ2wgbG9ja3MgdGhlIFVJIHRocmVhZC4gJyArXG4gICAgICAnQ2FsbCB0Zi5ub25NYXhTdXBwcmVzc2lvbkFzeW5jKCkgaW5zdGVhZCcpO1xuXG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtib3hlcywgc2NvcmVzfSA9IGlucHV0cztcbiAgY29uc3Qge21heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsIHNvZnRObXNTaWdtYX0gPSBhdHRycztcblxuICBjb25zdCBib3hlc1ZhbHMgPSBiYWNrZW5kLnJlYWRTeW5jKGJveGVzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgc2NvcmVzVmFscyA9IGJhY2tlbmQucmVhZFN5bmMoc2NvcmVzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcblxuICBjb25zdCBtYXhPdXRwdXRTaXplVmFsID0gbWF4T3V0cHV0U2l6ZTtcbiAgY29uc3QgaW91VGhyZXNob2xkVmFsID0gaW91VGhyZXNob2xkO1xuICBjb25zdCBzY29yZVRocmVzaG9sZFZhbCA9IHNjb3JlVGhyZXNob2xkO1xuICBjb25zdCBzb2Z0Tm1zU2lnbWFWYWwgPSBzb2Z0Tm1zU2lnbWE7XG5cbiAgY29uc3Qge3NlbGVjdGVkSW5kaWNlcywgc2VsZWN0ZWRTY29yZXN9ID0gbm9uTWF4U3VwcHJlc3Npb25WNUltcGwoXG4gICAgICBib3hlc1ZhbHMsIHNjb3Jlc1ZhbHMsIG1heE91dHB1dFNpemVWYWwsIGlvdVRocmVzaG9sZFZhbCxcbiAgICAgIHNjb3JlVGhyZXNob2xkVmFsLCBzb2Z0Tm1zU2lnbWFWYWwpO1xuXG4gIHJldHVybiBbXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgW3NlbGVjdGVkSW5kaWNlcy5sZW5ndGhdLCAnaW50MzInLCBuZXcgSW50MzJBcnJheShzZWxlY3RlZEluZGljZXMpKSxcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgICBbc2VsZWN0ZWRTY29yZXMubGVuZ3RoXSwgJ2Zsb2F0MzInLCBuZXcgRmxvYXQzMkFycmF5KHNlbGVjdGVkU2NvcmVzKSlcbiAgXTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vbk1heFN1cHByZXNzaW9uVjVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTm9uTWF4U3VwcHJlc3Npb25WNSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IG5vbk1heFN1cHByZXNzaW9uVjUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class OneHotProgram {\n constructor(numIndices, depth, onValue, offValue) {\n this.variableNames = ['indices'];\n this.outputShape = [numIndices, depth];\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25laG90X2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvb25laG90X2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQVF4QixZQUNJLFVBQWtCLEVBQUUsS0FBYSxFQUFFLE9BQWUsRUFBRSxRQUFnQjtRQVJ4RSxrQkFBYSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFTMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsUUFBUSxHQUFHOzs7OzhCQUlVLFFBQVEsWUFBWSxPQUFPOzs7S0FHcEQsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBPbmVIb3RQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnaW5kaWNlcyddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgLy8gQ2FjaGluZyB1bmlmb3JtIGxvY2F0aW9uIGZvciBzcGVlZC5cbiAgc2VlZExvYzogV2ViR0xVbmlmb3JtTG9jYXRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBudW1JbmRpY2VzOiBudW1iZXIsIGRlcHRoOiBudW1iZXIsIG9uVmFsdWU6IG51bWJlciwgb2ZmVmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBbbnVtSW5kaWNlcywgZGVwdGhdO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzIgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBpbmRleCA9IHJvdW5kKGdldEluZGljZXMoY29vcmRzLngpKTtcbiAgICAgICAgc2V0T3V0cHV0KG1peChmbG9hdCgke29mZlZhbHVlfSksIGZsb2F0KCR7b25WYWx1ZX0pLFxuICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KGluZGV4ID09IGNvb3Jkcy55KSkpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { OneHot, util } from '@tensorflow/tfjs-core';\nimport { OneHotProgram } from '../onehot_gpu';\nimport { reshape } from './Reshape';\nexport const oneHot = (args) => {\n const { inputs, backend, attrs } = args;\n const { indices } = inputs;\n const { dtype, depth, onValue, offValue } = attrs;\n const indicesSize = util.sizeFromShape(indices.shape);\n const program = new OneHotProgram(indicesSize, depth, onValue, offValue);\n const reshaped = reshape({ inputs: { x: indices }, backend, attrs: { shape: [indicesSize] } });\n const result = backend.runWebGLProgram(program, [reshaped], dtype);\n backend.disposeIntermediateTensorInfo(reshaped);\n const outShape = [...indices.shape, depth];\n const out = reshape({ inputs: { x: result }, backend, attrs: { shape: outShape } });\n backend.disposeIntermediateTensorInfo(result);\n return out;\n};\nexport const oneHotConfig = {\n kernelName: OneHot,\n backendName: 'webgl',\n kernelFunc: oneHot\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT25lSG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL09uZUhvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLE1BQU0sRUFBeUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHcEgsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBSXRCLEVBQWMsRUFBRTtJQUNmLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLE1BQU0sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekUsTUFBTSxRQUFRLEdBQ1YsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVoRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDOUUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE9uZUhvdCwgT25lSG90QXR0cnMsIE9uZUhvdElucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7T25lSG90UHJvZ3JhbX0gZnJvbSAnLi4vb25laG90X2dwdSc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmV4cG9ydCBjb25zdCBvbmVIb3QgPSAoYXJnczoge1xuICBpbnB1dHM6IE9uZUhvdElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IE9uZUhvdEF0dHJzXG59KTogVGVuc29ySW5mbyA9PiB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbmRpY2VzfSA9IGlucHV0cztcbiAgY29uc3Qge2R0eXBlLCBkZXB0aCwgb25WYWx1ZSwgb2ZmVmFsdWV9ID0gYXR0cnM7XG5cbiAgY29uc3QgaW5kaWNlc1NpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoaW5kaWNlcy5zaGFwZSk7XG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgT25lSG90UHJvZ3JhbShpbmRpY2VzU2l6ZSwgZGVwdGgsIG9uVmFsdWUsIG9mZlZhbHVlKTtcbiAgY29uc3QgcmVzaGFwZWQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogaW5kaWNlc30sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IFtpbmRpY2VzU2l6ZV19fSk7XG4gIGNvbnN0IHJlc3VsdCA9IGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFtyZXNoYXBlZF0sIGR0eXBlKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXNoYXBlZCk7XG5cbiAgY29uc3Qgb3V0U2hhcGUgPSBbLi4uaW5kaWNlcy5zaGFwZSwgZGVwdGhdO1xuICBjb25zdCBvdXQgPSByZXNoYXBlKHtpbnB1dHM6IHt4OiByZXN1bHR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBvdXRTaGFwZX19KTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXN1bHQpO1xuICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGNvbnN0IG9uZUhvdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBPbmVIb3QsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBvbmVIb3QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ZerosLike } from '@tensorflow/tfjs-core';\nimport { complex } from './Complex';\nimport { fill } from './Fill';\nimport { imag } from './Imag';\nimport { real } from './Real';\nexport function zerosLike(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n if (x.dtype === 'complex64') {\n const realPart = real({ inputs: { input: x }, backend });\n const r = zerosLike({ inputs: { x: realPart }, backend });\n const imagPart = imag({ inputs: { input: x }, backend });\n const i = zerosLike({ inputs: { x: imagPart }, backend });\n const result = complex({ inputs: { real: r, imag: i }, backend });\n backend.disposeIntermediateTensorInfo(realPart);\n backend.disposeIntermediateTensorInfo(r);\n backend.disposeIntermediateTensorInfo(imagPart);\n backend.disposeIntermediateTensorInfo(i);\n return result;\n }\n else {\n return fill({\n attrs: {\n shape: x.shape,\n dtype: x.dtype,\n value: x.dtype === 'string' ? '' : 0\n },\n backend\n });\n }\n}\nexport const zerosLikeConfig = {\n kernelName: ZerosLike,\n backendName: 'webgl',\n kernelFunc: zerosLike\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmVyb3NMaWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1plcm9zTGlrZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVDLFNBQVMsRUFBa0IsTUFBTSx1QkFBdUIsQ0FBQztBQUl2RyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE1BQU0sVUFBVSxTQUFTLENBQ3JCLElBQTBEO0lBQzVELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbkIsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUV0RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBRTlELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6QyxPQUFPLE1BQU0sQ0FBQztLQUNmO1NBQU07UUFDTCxPQUFPLElBQUksQ0FBQztZQUNWLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7Z0JBQ2QsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2dCQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsT0FBTztTQUNSLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUI7SUFDM0MsVUFBVSxFQUFFLFNBQVM7SUFDckIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLFNBQWtDO0NBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBaZXJvc0xpa2UsIFplcm9zTGlrZUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcblxuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuL0NvbXBsZXgnO1xuaW1wb3J0IHtmaWxsfSBmcm9tICcuL0ZpbGwnO1xuaW1wb3J0IHtpbWFnfSBmcm9tICcuL0ltYWcnO1xuaW1wb3J0IHtyZWFsfSBmcm9tICcuL1JlYWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gemVyb3NMaWtlKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFplcm9zTGlrZUlucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG5cbiAgaWYgKHguZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgY29uc3QgcmVhbFBhcnQgPSByZWFsKHtpbnB1dHM6IHtpbnB1dDogeH0sIGJhY2tlbmR9KTtcbiAgICBjb25zdCByID0gemVyb3NMaWtlKHtpbnB1dHM6IHt4OiByZWFsUGFydH0sIGJhY2tlbmR9KTtcbiAgICBjb25zdCBpbWFnUGFydCA9IGltYWcoe2lucHV0czoge2lucHV0OiB4fSwgYmFja2VuZH0pO1xuICAgIGNvbnN0IGkgPSB6ZXJvc0xpa2Uoe2lucHV0czoge3g6IGltYWdQYXJ0fSwgYmFja2VuZH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gY29tcGxleCh7aW5wdXRzOiB7cmVhbDogciwgaW1hZzogaX0sIGJhY2tlbmR9KTtcblxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbFBhcnQpO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocik7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbWFnUGFydCk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbGwoe1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgc2hhcGU6IHguc2hhcGUsXG4gICAgICAgIGR0eXBlOiB4LmR0eXBlLFxuICAgICAgICB2YWx1ZTogeC5kdHlwZSA9PT0gJ3N0cmluZycgPyAnJyA6IDBcbiAgICAgIH0sXG4gICAgICBiYWNrZW5kXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHplcm9zTGlrZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBaZXJvc0xpa2UsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiB6ZXJvc0xpa2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { OnesLike } from '@tensorflow/tfjs-core';\nimport { complex } from './Complex';\nimport { fill } from './Fill';\nimport { imag } from './Imag';\nimport { real } from './Real';\nimport { zerosLike } from './ZerosLike';\nexport function onesLike(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n if (x.dtype === 'string') {\n throw new Error('onesLike is not supported under string dtype');\n }\n else if (x.dtype === 'complex64') {\n const realPart = real({ inputs: { input: x }, backend });\n const r = onesLike({ inputs: { x: realPart }, backend });\n const imagPart = imag({ inputs: { input: x }, backend });\n const i = zerosLike({ inputs: { x: imagPart }, backend });\n const result = complex({ inputs: { real: r, imag: i }, backend });\n backend.disposeIntermediateTensorInfo(realPart);\n backend.disposeIntermediateTensorInfo(r);\n backend.disposeIntermediateTensorInfo(imagPart);\n backend.disposeIntermediateTensorInfo(i);\n return result;\n }\n else {\n // TODO(cais, smilkov): Add WebGL shader for onesLike:\n // https://github.com/tensorflow/tfjs/issues/1293\n return fill({ attrs: { shape: x.shape, dtype: x.dtype, value: 1 }, backend });\n }\n}\nexport const onesLikeConfig = {\n kernelName: OnesLike,\n backendName: 'webgl',\n kernelFunc: onesLike\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT25lc0xpa2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvT25lc0xpa2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixRQUFRLEVBQTZCLE1BQU0sdUJBQXVCLENBQUM7QUFJckcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxRQUFRLENBQ3BCLElBQXlEO0lBQzNELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbkIsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7S0FDakU7U0FBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxRQUFRLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxRQUFRLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBRXRELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFFOUQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpDLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7U0FBTTtRQUNMLHNEQUFzRDtRQUN0RCxtREFBbUQ7UUFDbkQsT0FBTyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztLQUMzRTtBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxRQUFpQztDQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgT25lc0xpa2UsIE9uZXNMaWtlSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuXG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4vQ29tcGxleCc7XG5pbXBvcnQge2ZpbGx9IGZyb20gJy4vRmlsbCc7XG5pbXBvcnQge2ltYWd9IGZyb20gJy4vSW1hZyc7XG5pbXBvcnQge3JlYWx9IGZyb20gJy4vUmVhbCc7XG5pbXBvcnQge3plcm9zTGlrZX0gZnJvbSAnLi9aZXJvc0xpa2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gb25lc0xpa2UoXG4gICAgYXJnczoge2lucHV0czogT25lc0xpa2VJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuXG4gIGlmICh4LmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignb25lc0xpa2UgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBzdHJpbmcgZHR5cGUnKTtcbiAgfSBlbHNlIGlmICh4LmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWxQYXJ0ID0gcmVhbCh7aW5wdXRzOiB7aW5wdXQ6IHh9LCBiYWNrZW5kfSk7XG4gICAgY29uc3QgciA9IG9uZXNMaWtlKHtpbnB1dHM6IHt4OiByZWFsUGFydH0sIGJhY2tlbmR9KTtcbiAgICBjb25zdCBpbWFnUGFydCA9IGltYWcoe2lucHV0czoge2lucHV0OiB4fSwgYmFja2VuZH0pO1xuICAgIGNvbnN0IGkgPSB6ZXJvc0xpa2Uoe2lucHV0czoge3g6IGltYWdQYXJ0fSwgYmFja2VuZH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gY29tcGxleCh7aW5wdXRzOiB7cmVhbDogciwgaW1hZzogaX0sIGJhY2tlbmR9KTtcblxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbFBhcnQpO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocik7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbWFnUGFydCk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETyhjYWlzLCBzbWlsa292KTogQWRkIFdlYkdMIHNoYWRlciBmb3Igb25lc0xpa2U6XG4gICAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2lzc3Vlcy8xMjkzXG4gICAgcmV0dXJuIGZpbGwoe2F0dHJzOiB7c2hhcGU6IHguc2hhcGUsIGR0eXBlOiB4LmR0eXBlLCB2YWx1ZTogMX0sIGJhY2tlbmR9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgb25lc0xpa2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogT25lc0xpa2UsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBvbmVzTGlrZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Pack, util } from '@tensorflow/tfjs-core';\nimport { concat } from './Concat';\nimport { expandDims } from './ExpandDims';\nexport function pack(args) {\n const { inputs, backend, attrs } = args;\n const { axis } = attrs;\n if (inputs.length === 1) {\n return expandDims({ inputs: { input: inputs[0] }, backend, attrs: { dim: axis } });\n }\n const shape = inputs[0].shape;\n const dtype = inputs[0].dtype;\n inputs.forEach(t => {\n util.assertShapesMatch(shape, t.shape, 'All tensors passed to stack must have matching shapes');\n util.assert(dtype === t.dtype, () => 'All tensors passed to stack must have matching dtypes');\n });\n const intermediateTensorInfos = [];\n const expandedTensors = inputs.map(t => {\n const expandedT = expandDims({ inputs: { input: t }, backend, attrs: { dim: axis } });\n intermediateTensorInfos.push(expandedT);\n return expandedT;\n });\n const result = concat({ inputs: expandedTensors, backend, attrs: { axis } });\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return result;\n}\nexport const packConfig = {\n kernelName: Pack,\n backendName: 'webgl',\n kernelFunc: pack\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9QYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsSUFBSSxFQUFxQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc5RyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxVQUFVLElBQUksQ0FDaEIsSUFBdUU7SUFFekUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN2QixPQUFPLFVBQVUsQ0FDYixFQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxFQUFDLENBQUMsQ0FBQztLQUNoRTtJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUU5QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FDbEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQ2QsdURBQXVELENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxFQUNqQixHQUFHLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSx1QkFBdUIsR0FBaUIsRUFBRSxDQUFDO0lBQ2pELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDckMsTUFBTSxTQUFTLEdBQ1gsVUFBVSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ2xFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBQyxFQUFDLENBQUMsQ0FBQztJQUV6RSx1QkFBdUIsQ0FBQyxPQUFPLENBQzNCLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBQYWNrLCBQYWNrQXR0cnMsIFBhY2tJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi9Db25jYXQnO1xuaW1wb3J0IHtleHBhbmREaW1zfSBmcm9tICcuL0V4cGFuZERpbXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFjayhcbiAgICBhcmdzOiB7aW5wdXRzOiBQYWNrSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCBhdHRyczogUGFja0F0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtheGlzfSA9IGF0dHJzO1xuXG4gIGlmIChpbnB1dHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGV4cGFuZERpbXMoXG4gICAgICAgIHtpbnB1dHM6IHtpbnB1dDogaW5wdXRzWzBdfSwgYmFja2VuZCwgYXR0cnM6IHtkaW06IGF4aXN9fSk7XG4gIH1cblxuICBjb25zdCBzaGFwZSA9IGlucHV0c1swXS5zaGFwZTtcbiAgY29uc3QgZHR5cGUgPSBpbnB1dHNbMF0uZHR5cGU7XG5cbiAgaW5wdXRzLmZvckVhY2godCA9PiB7XG4gICAgdXRpbC5hc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICAgc2hhcGUsIHQuc2hhcGUsXG4gICAgICAgICdBbGwgdGVuc29ycyBwYXNzZWQgdG8gc3RhY2sgbXVzdCBoYXZlIG1hdGNoaW5nIHNoYXBlcycpO1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBkdHlwZSA9PT0gdC5kdHlwZSxcbiAgICAgICAgKCkgPT4gJ0FsbCB0ZW5zb3JzIHBhc3NlZCB0byBzdGFjayBtdXN0IGhhdmUgbWF0Y2hpbmcgZHR5cGVzJyk7XG4gIH0pO1xuXG4gIGNvbnN0IGludGVybWVkaWF0ZVRlbnNvckluZm9zOiBUZW5zb3JJbmZvW10gPSBbXTtcbiAgY29uc3QgZXhwYW5kZWRUZW5zb3JzID0gaW5wdXRzLm1hcCh0ID0+IHtcbiAgICBjb25zdCBleHBhbmRlZFQgPVxuICAgICAgICBleHBhbmREaW1zKHtpbnB1dHM6IHtpbnB1dDogdH0sIGJhY2tlbmQsIGF0dHJzOiB7ZGltOiBheGlzfX0pO1xuICAgIGludGVybWVkaWF0ZVRlbnNvckluZm9zLnB1c2goZXhwYW5kZWRUKTtcbiAgICByZXR1cm4gZXhwYW5kZWRUO1xuICB9KTtcblxuICBjb25zdCByZXN1bHQgPSBjb25jYXQoe2lucHV0czogZXhwYW5kZWRUZW5zb3JzLCBiYWNrZW5kLCBhdHRyczoge2F4aXN9fSk7XG5cbiAgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MuZm9yRWFjaChcbiAgICAgIHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHBhY2tDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUGFjayxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHBhY2sgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class PadProgram {\n constructor(xShape, paddings, constantValue) {\n this.variableNames = ['x'];\n this.customUniforms = [{ name: 'value', type: 'float' }];\n this.outputShape = paddings.map((p, i) => p[0] /* beforePad */ + xShape[i] + p[1] /* afterPad */);\n const rank = xShape.length;\n const type = getCoordsDataType(rank);\n const start = paddings.map(p => p[0]).join(',');\n const end = paddings.map((p, i) => p[0] + xShape[i]).join(',');\n const unpackedCoords = ['coords[0]', 'coords[1]', 'coords[2]', 'coords[3]'].slice(0, rank);\n if (rank === 1) {\n 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 `;\n return;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvcGFkX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsaUJBQWlCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRSxNQUFNLE9BQU8sVUFBVTtJQU1yQixZQUNJLE1BQWdCLEVBQUUsUUFBaUMsRUFDbkQsYUFBcUI7UUFQekIsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBR3RCLG1CQUFjLEdBQUcsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQXNCLEVBQUMsQ0FBQyxDQUFDO1FBSy9ELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDM0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sY0FBYyxHQUNoQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRztzQkFDQSxLQUFLO29CQUNQLEdBQUc7Ozs7Ozs7Ozs7T0FVaEIsQ0FBQztZQUNGLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUc7UUFDWixJQUFJLFlBQVksSUFBSSxJQUFJLEtBQUs7UUFDN0IsSUFBSSxVQUFVLElBQUksSUFBSSxHQUFHOzs7VUFHdkIsSUFBSTs7OztZQUlGLElBQUk7MkJBQ1csY0FBYzs7O0tBR3BDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDb29yZHNEYXRhVHlwZSwgVW5pZm9ybVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFBhZFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWyd4J107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgY3VzdG9tVW5pZm9ybXMgPSBbe25hbWU6ICd2YWx1ZScsIHR5cGU6ICdmbG9hdCcgYXMgVW5pZm9ybVR5cGV9XTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHhTaGFwZTogbnVtYmVyW10sIHBhZGRpbmdzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICAgIGNvbnN0YW50VmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBwYWRkaW5ncy5tYXAoXG4gICAgICAgIChwLCBpKSA9PiBwWzBdIC8qIGJlZm9yZVBhZCAqLyArIHhTaGFwZVtpXSArIHBbMV0gLyogYWZ0ZXJQYWQgKi8pO1xuICAgIGNvbnN0IHJhbmsgPSB4U2hhcGUubGVuZ3RoO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRDb29yZHNEYXRhVHlwZShyYW5rKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gcGFkZGluZ3MubWFwKHAgPT4gcFswXSkuam9pbignLCcpO1xuICAgIGNvbnN0IGVuZCA9IHBhZGRpbmdzLm1hcCgocCwgaSkgPT4gcFswXSArIHhTaGFwZVtpXSkuam9pbignLCcpO1xuICAgIGNvbnN0IHVucGFja2VkQ29vcmRzID1cbiAgICAgICAgWydjb29yZHNbMF0nLCAnY29vcmRzWzFdJywgJ2Nvb3Jkc1syXScsICdjb29yZHNbM10nXS5zbGljZSgwLCByYW5rKTtcblxuICAgIGlmIChyYW5rID09PSAxKSB7XG4gICAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICBpbnQgc3RhcnQgPSAke3N0YXJ0fTtcbiAgICAgICAgaW50IGVuZCA9ICR7ZW5kfTtcblxuICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgaW50IG91dEMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgICBpZiAob3V0QyA8IHN0YXJ0IHx8IG91dEMgPj0gZW5kKSB7XG4gICAgICAgICAgICBzZXRPdXRwdXQodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRPdXRwdXQoZ2V0WChvdXRDIC0gc3RhcnQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAke3R5cGV9IHN0YXJ0ID0gJHt0eXBlfSgke3N0YXJ0fSk7XG4gICAgICAke3R5cGV9IGVuZCA9ICR7dHlwZX0oJHtlbmR9KTtcblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke3R5cGV9IG91dEMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaWYgKGFueShsZXNzVGhhbihvdXRDLCBzdGFydCkpIHx8IGFueShncmVhdGVyVGhhbkVxdWFsKG91dEMsIGVuZCkpKSB7XG4gICAgICAgICAgc2V0T3V0cHV0KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAke3R5cGV9IGNvb3JkcyA9IG91dEMgLSBzdGFydDtcbiAgICAgICAgICBzZXRPdXRwdXQoZ2V0WCgke3VucGFja2VkQ29vcmRzfSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport class PadPackedProgram {\n constructor(xShape, paddings, constantValue) {\n this.variableNames = ['x'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.customUniforms = [{ name: 'value', type: 'float' }];\n this.outputShape = paddings.map((p, i) => p[0] /* beforePad */ + xShape[i] + p[1] /* afterPad */);\n const rank = xShape.length;\n const dtype = getCoordsDataType(rank);\n const start = paddings.map(p => p[0]).join(',');\n const end = paddings.map((p, i) => p[0] + xShape[i]).join(',');\n const coords = getChannels('rc', rank);\n const source = getChannels('source', rank);\n const cLimit = `${coords[rank - 1]} < ${this.outputShape[rank - 1]}`;\n const innerDims = rank === 1 ? 'source' : `vec2(${source.slice(-2).join()})`;\n const componentSetup = [\n `${dtype} rc = outputLoc;`, `${coords[rank - 1]} += 1;\n if(${cLimit}) {\n `,\n rank === 1 ? '' : `}\n rc = outputLoc;\n ${coords[rank - 2]} += 1;\n if(${coords[rank - 2]} < ${this.outputShape[rank - 2]}) {`,\n rank === 1 ? '' : ` ${coords[rank - 1]} += 1;\n if(${cLimit}) {`\n ];\n const paddingArea = rank === 1 ?\n 'rc < start || rc >= end' :\n 'any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))';\n let mainLoop = '';\n for (let i = 0, j = rank === 1 ? 2 : 4; i < j; i++) {\n 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 `;\n }\n mainLoop += (rank === 1 ? `} ` : `}}`);\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkX3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3BhZF9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsaUJBQWlCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRSxNQUFNLE9BQU8sZ0JBQWdCO0lBUTNCLFlBQ0ksTUFBZ0IsRUFBRSxRQUFpQyxFQUNuRCxhQUFxQjtRQVR6QixrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFHcEIsbUJBQWMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBc0IsRUFBQyxDQUFDLENBQUM7UUFLL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUMzQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sU0FBUyxHQUNYLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztRQUUvRCxNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLEtBQUssa0JBQWtCLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNO09BQ1g7WUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztTQUVmLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2IsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSztZQUMzRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Y0FDL0IsTUFBTSxLQUFLO1NBQ3BCLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUIseUJBQXlCLENBQUMsQ0FBQztZQUMzQiw0REFBNEQsQ0FBQztRQUNqRSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsUUFBUSxJQUFJO1VBQ1IsY0FBYyxDQUFDLENBQUMsQ0FBQztjQUNiLFdBQVc7bUJBQ04sQ0FBQzs7WUFFUixLQUFLO21CQUNFLENBQUMsdUJBQXVCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxTQUFTOztPQUVoRSxDQUFDO1NBQ0g7UUFDRCxRQUFRLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxRQUFRLEdBQUc7Y0FDTixLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUs7Y0FDL0IsS0FBSyxVQUFVLEtBQUssSUFBSSxHQUFHOzs7VUFHL0IsS0FBSzs7VUFFTCxRQUFROzs7S0FHYixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q2hhbm5lbHN9IGZyb20gJy4vcGFja2luZ191dGlsJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGUsIFVuaWZvcm1UeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBjbGFzcyBQYWRQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCddO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIGN1c3RvbVVuaWZvcm1zID0gW3tuYW1lOiAndmFsdWUnLCB0eXBlOiAnZmxvYXQnIGFzIFVuaWZvcm1UeXBlfV07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICB4U2hhcGU6IG51bWJlcltdLCBwYWRkaW5nczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgICBjb25zdGFudFZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gcGFkZGluZ3MubWFwKFxuICAgICAgICAocCwgaSkgPT4gcFswXSAvKiBiZWZvcmVQYWQgKi8gKyB4U2hhcGVbaV0gKyBwWzFdIC8qIGFmdGVyUGFkICovKTtcbiAgICBjb25zdCByYW5rID0geFNoYXBlLmxlbmd0aDtcbiAgICBjb25zdCBkdHlwZSA9IGdldENvb3Jkc0RhdGFUeXBlKHJhbmspO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBwYWRkaW5ncy5tYXAocCA9PiBwWzBdKS5qb2luKCcsJyk7XG4gICAgY29uc3QgZW5kID0gcGFkZGluZ3MubWFwKChwLCBpKSA9PiBwWzBdICsgeFNoYXBlW2ldKS5qb2luKCcsJyk7XG4gICAgY29uc3QgY29vcmRzID0gZ2V0Q2hhbm5lbHMoJ3JjJywgcmFuayk7XG4gICAgY29uc3Qgc291cmNlID0gZ2V0Q2hhbm5lbHMoJ3NvdXJjZScsIHJhbmspO1xuICAgIGNvbnN0IGNMaW1pdCA9IGAke2Nvb3Jkc1tyYW5rIC0gMV19IDwgJHt0aGlzLm91dHB1dFNoYXBlW3JhbmsgLSAxXX1gO1xuICAgIGNvbnN0IGlubmVyRGltcyA9XG4gICAgICAgIHJhbmsgPT09IDEgPyAnc291cmNlJyA6IGB2ZWMyKCR7c291cmNlLnNsaWNlKC0yKS5qb2luKCl9KWA7XG5cbiAgICBjb25zdCBjb21wb25lbnRTZXR1cCA9IFtcbiAgICAgIGAke2R0eXBlfSByYyA9IG91dHB1dExvYztgLCBgJHtjb29yZHNbcmFuayAtIDFdfSArPSAxO1xuICAgICAgIGlmKCR7Y0xpbWl0fSkge1xuICAgICAgYCxcbiAgICAgIHJhbmsgPT09IDEgPyAnJyA6IGB9XG4gICAgICAgcmMgPSBvdXRwdXRMb2M7XG4gICAgICAgJHtjb29yZHNbcmFuayAtIDJdfSArPSAxO1xuICAgICAgIGlmKCR7Y29vcmRzW3JhbmsgLSAyXX0gPCAke3RoaXMub3V0cHV0U2hhcGVbcmFuayAtIDJdfSkge2AsXG4gICAgICByYW5rID09PSAxID8gJycgOiBgICAke2Nvb3Jkc1tyYW5rIC0gMV19ICs9IDE7XG4gICAgICAgICBpZigke2NMaW1pdH0pIHtgXG4gICAgXTtcblxuICAgIGNvbnN0IHBhZGRpbmdBcmVhID0gcmFuayA9PT0gMSA/XG4gICAgICAgICdyYyA8IHN0YXJ0IHx8IHJjID49IGVuZCcgOlxuICAgICAgICAnYW55KGxlc3NUaGFuKHJjLCBzdGFydCkpIHx8IGFueShncmVhdGVyVGhhbkVxdWFsKHJjLCBlbmQpKSc7XG4gICAgbGV0IG1haW5Mb29wID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSByYW5rID09PSAxID8gMiA6IDQ7IGkgPCBqOyBpKyspIHtcbiAgICAgIG1haW5Mb29wICs9IGBcbiAgICAgICAgJHtjb21wb25lbnRTZXR1cFtpXX1cbiAgICAgICAgaWYgKCR7cGFkZGluZ0FyZWF9KSB7XG4gICAgICAgICAgcmVzdWx0WyR7aX1dID0gZmxvYXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICR7ZHR5cGV9IHNvdXJjZSA9IHJjIC0gc3RhcnQ7XG4gICAgICAgICAgcmVzdWx0WyR7aX1dID0gZ2V0Q2hhbm5lbChnZXRYKCR7c291cmNlLmpvaW4oKX0pLCAke2lubmVyRGltc30pO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgIH1cbiAgICBtYWluTG9vcCArPSAocmFuayA9PT0gMSA/IGB9IGAgOiBgfX1gKTtcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICBjb25zdCAke2R0eXBlfSBzdGFydCA9ICR7ZHR5cGV9KCR7c3RhcnR9KTtcbiAgICAgIGNvbnN0ICR7ZHR5cGV9IGVuZCA9ICR7ZHR5cGV9KCR7ZW5kfSk7XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgJHtkdHlwZX0gb3V0cHV0TG9jID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLik7XG4gICAgICAgICR7bWFpbkxvb3B9XG4gICAgICAgIHNldE91dHB1dChyZXN1bHQpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, PadV2, util } from '@tensorflow/tfjs-core';\nimport { PadProgram } from '../pad_gpu';\nimport { PadPackedProgram } from '../pad_packed_gpu';\nimport { fill } from './Fill';\nexport const padV2 = (args) => {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { paddings, constantValue } = attrs;\n if (util.sizeFromShape(x.shape) === 0) {\n // Short-circuit the computation, since x doesn't have value, only\n // the shape is used to compute output shape to pad.\n const outputShape = paddings.map((p, i) => p[0] /* beforePad */ + x.shape[i] + p[1] /* afterPad */);\n return fill({\n backend,\n attrs: { shape: outputShape, value: constantValue, dtype: x.dtype }\n });\n }\n const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n new PadPackedProgram(x.shape, paddings, constantValue) :\n new PadProgram(x.shape, paddings, constantValue);\n const customValues = [[constantValue]];\n return backend.runWebGLProgram(program, [x], x.dtype, customValues);\n};\nexport const padV2Config = {\n kernelName: PadV2,\n backendName: 'webgl',\n kernelFunc: padV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFkVjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUGFkVjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBNEIsS0FBSyxFQUF1QyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd0SCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUNkLENBQUMsSUFBeUUsRUFDM0QsRUFBRTtJQUNYLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxRQUFRLEVBQUUsYUFBYSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXhDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3JDLGtFQUFrRTtRQUNsRSxvREFBb0Q7UUFDcEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDTCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDO1lBQ1YsT0FBTztZQUNQLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQztTQUNsRSxDQUFDLENBQUM7S0FDSjtJQUVELE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVWLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLEtBQThCO0NBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFBhZFYyLCBQYWRWMkF0dHJzLCBQYWRWMklucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7UGFkUHJvZ3JhbX0gZnJvbSAnLi4vcGFkX2dwdSc7XG5pbXBvcnQge1BhZFBhY2tlZFByb2dyYW19IGZyb20gJy4uL3BhZF9wYWNrZWRfZ3B1JztcbmltcG9ydCB7ZmlsbH0gZnJvbSAnLi9GaWxsJztcblxuZXhwb3J0IGNvbnN0IHBhZFYyID1cbiAgICAoYXJnczoge2lucHV0czogUGFkVjJJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF0dHJzOiBQYWRWMkF0dHJzfSk6XG4gICAgICAgIFRlbnNvckluZm8gPT4ge1xuICAgICAgICAgIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gICAgICAgICAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICAgICAgICAgIGNvbnN0IHtwYWRkaW5ncywgY29uc3RhbnRWYWx1ZX0gPSBhdHRycztcblxuICAgICAgICAgIGlmICh1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZSkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFNob3J0LWNpcmN1aXQgdGhlIGNvbXB1dGF0aW9uLCBzaW5jZSB4IGRvZXNuJ3QgaGF2ZSB2YWx1ZSwgb25seVxuICAgICAgICAgICAgLy8gdGhlIHNoYXBlIGlzIHVzZWQgdG8gY29tcHV0ZSBvdXRwdXQgc2hhcGUgdG8gcGFkLlxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBwYWRkaW5ncy5tYXAoXG4gICAgICAgICAgICAgICAgKHAsIGkpID0+XG4gICAgICAgICAgICAgICAgICAgIHBbMF0gLyogYmVmb3JlUGFkICovICsgeC5zaGFwZVtpXSArIHBbMV0gLyogYWZ0ZXJQYWQgKi8pO1xuICAgICAgICAgICAgcmV0dXJuIGZpbGwoe1xuICAgICAgICAgICAgICBiYWNrZW5kLFxuICAgICAgICAgICAgICBhdHRyczoge3NoYXBlOiBvdXRwdXRTaGFwZSwgdmFsdWU6IGNvbnN0YW50VmFsdWUsIGR0eXBlOiB4LmR0eXBlfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcHJvZ3JhbSA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfQVJSQVlfT1BFUkFUSU9OUycpID9cbiAgICAgICAgICAgICAgbmV3IFBhZFBhY2tlZFByb2dyYW0oeC5zaGFwZSwgcGFkZGluZ3MsIGNvbnN0YW50VmFsdWUpIDpcbiAgICAgICAgICAgICAgbmV3IFBhZFByb2dyYW0oeC5zaGFwZSwgcGFkZGluZ3MsIGNvbnN0YW50VmFsdWUpO1xuICAgICAgICAgIGNvbnN0IGN1c3RvbVZhbHVlcyA9IFtbY29uc3RhbnRWYWx1ZV1dO1xuICAgICAgICAgIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbeF0sIHguZHR5cGUsIGN1c3RvbVZhbHVlcyk7XG4gICAgICAgIH07XG5cbmV4cG9ydCBjb25zdCBwYWRWMkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBQYWRWMixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHBhZFYyIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Pow } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET_PACKED } from '../binaryop_packed_gpu';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst 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`;\nconst 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 bvec4 isNaN1 = lessThan(a, vec4(0.0));\n bvec4 isNaN2 = lessThan(floor(b), b);\n bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w);\n ` +\n CHECK_NAN_SNIPPET_PACKED + `\n return result;\n`;\nexport const pow = binaryKernelFunc({ opSnippet: POW, packedOpSnippet: POW_PACKED });\nexport const powConfig = {\n kernelName: Pow,\n backendName: 'webgl',\n kernelFunc: pow\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1Bvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXBFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sR0FBRyxHQUFHOzs7Ozs7Ozs7Q0FTWCxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQmhCO0lBQ0Msd0JBQXdCLEdBQUc7O0NBRTlCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQ1osZ0JBQWdCLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFBvd30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVF9QQUNLRUR9IGZyb20gJy4uL2JpbmFyeW9wX3BhY2tlZF9ncHUnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgUE9XID0gYFxuICBpZihhIDwgMC4wICYmIGZsb29yKGIpIDwgYil7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoYiA9PSAwLjApIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHJldHVybiAocm91bmQobW9kKGIsIDIuMCkpICE9IDEpID9cbiAgICAgIHBvdyhhYnMoYSksIGIpIDogc2lnbihhKSAqIHBvdyhhYnMoYSksIGIpO1xuYDtcblxuY29uc3QgUE9XX1BBQ0tFRCA9IGBcbiAgLy8gaXNNb2RSb3VuZDEgaGFzIDEgZm9yIGNvbXBvbmVudHMgd2l0aCByb3VuZChtb2QoYiwgMi4wKSkgPT0gMSwgMCBvdGhlcndpc2UuXG4gIHZlYzQgaXNNb2RSb3VuZDEgPSB2ZWM0KGVxdWFsKHJvdW5kKG1vZChiLCAyLjApKSwgaXZlYzQoMSkpKTtcbiAgdmVjNCBtdWx0aXBsaWVyID0gc2lnbihhKSAqIGlzTW9kUm91bmQxICsgKHZlYzQoMS4wKSAtIGlzTW9kUm91bmQxKTtcbiAgdmVjNCByZXN1bHQgPSBtdWx0aXBsaWVyICogcG93KGFicyhhKSwgYik7XG5cbiAgLy8gRW5zdXJlIHRoYXQgYV4wID0gMSwgaW5jbHVkaW5nIDBeMCA9IDEgYXMgdGhpcyBjb3JyZXNwb25kIHRvIFRGIGFuZCBKU1xuICBidmVjNCBpc0V4cFplcm8gPSBlcXVhbChiLCB2ZWM0KDAuMCkpO1xuICByZXN1bHQuciA9IGlzRXhwWmVyby5yID8gMS4wIDogcmVzdWx0LnI7XG4gIHJlc3VsdC5nID0gaXNFeHBaZXJvLmcgPyAxLjAgOiByZXN1bHQuZztcbiAgcmVzdWx0LmIgPSBpc0V4cFplcm8uYiA/IDEuMCA6IHJlc3VsdC5iO1xuICByZXN1bHQuYSA9IGlzRXhwWmVyby5hID8gMS4wIDogcmVzdWx0LmE7XG5cbiAgYnZlYzQgaXNOYU4xID0gbGVzc1RoYW4oYSwgdmVjNCgwLjApKTtcbiAgYnZlYzQgaXNOYU4yID0gbGVzc1RoYW4oZmxvb3IoYiksIGIpO1xuICBidmVjNCBpc05hTiA9IGJ2ZWM0KGlzTmFOMS54ICYmIGlzTmFOMi54LCBpc05hTjEueSAmJiBpc05hTjIueSwgaXNOYU4xLnogJiYgaXNOYU4yLnosIGlzTmFOMS53ICYmIGlzTmFOMi53KTtcbiAgYCArXG4gICAgQ0hFQ0tfTkFOX1NOSVBQRVRfUEFDS0VEICsgYFxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IHBvdyA9XG4gICAgYmluYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBQT1csIHBhY2tlZE9wU25pcHBldDogUE9XX1BBQ0tFRH0pO1xuXG5leHBvcnQgY29uc3QgcG93Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFBvdyxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHBvdyBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Prod, sumOutType, util } from '@tensorflow/tfjs-core';\nimport { reduce } from '../kernel_utils/reduce';\nimport { prodImplCPU } from '../kernel_utils/shared';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function prod(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n const xRank = x.shape.length;\n const toDispose = [];\n const origAxes = util.parseAxisParam(axis, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n let permutedX = x;\n if (permutedAxes != null) {\n permutedX = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n axes = backend_util.getInnerMostAxes(axes.length, xRank);\n toDispose.push(permutedX);\n }\n backend_util.assertAxesAreInnerMostDims('prod', axes, xRank);\n let res;\n if (backend.shouldExecuteOnCPU([permutedX])) {\n const xVals = backend.texData.get(permutedX.dataId).values;\n const { outVals, outShape, outDtype } = prodImplCPU(permutedX.shape, permutedX.dtype, xVals, axes);\n res = backend.makeTensorInfo(outShape, outDtype, outVals);\n }\n else {\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(permutedX.shape, axes);\n const inSize = util.sizeFromShape(reduceShape);\n const a2D = reshape({ inputs: { x: permutedX }, backend, attrs: { shape: [-1, inSize] } });\n const outputDType = sumOutType(x.dtype);\n const reduced = reduce(a2D, outputDType, 'prod', backend);\n res = reshape({ inputs: { x: reduced }, backend, attrs: { shape: outShape } });\n toDispose.push(a2D);\n toDispose.push(reduced);\n }\n if (keepDims) {\n toDispose.push(res);\n const newShape = backend_util.expandShapeToKeepDim(res.shape, origAxes);\n res = reshape({ inputs: { x: res }, backend, attrs: { shape: newShape } });\n }\n toDispose.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return res;\n}\nexport const prodConfig = {\n kernelName: Prod,\n backendName: 'webgl',\n kernelFunc: prod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Qcm9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQTRCLElBQUksRUFBeUIsVUFBVSxFQUEwQixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdwSixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRW5ELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsSUFBSSxDQUNoQixJQUF1RTtJQUV6RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM3QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFFckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUNwQixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLFlBQVksSUFB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SUFDaEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFByb2QsIFByb2RBdHRycywgUHJvZElucHV0cywgc3VtT3V0VHlwZSwgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7cmVkdWNlfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvcmVkdWNlJztcbmltcG9ydCB7cHJvZEltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvZChcbiAgICBhcmdzOiB7aW5wdXRzOiBQcm9kSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCBhdHRyczogUHJvZEF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2F4aXMsIGtlZXBEaW1zfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG4gIGNvbnN0IHRvRGlzcG9zZSA9IFtdO1xuXG4gIGNvbnN0IG9yaWdBeGVzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShheGlzLCB4LnNoYXBlKTtcbiAgbGV0IGF4ZXMgPSBvcmlnQXhlcztcbiAgY29uc3QgcGVybXV0ZWRBeGVzID0gYmFja2VuZF91dGlsLmdldEF4ZXNQZXJtdXRhdGlvbihheGVzLCB4UmFuayk7XG4gIGxldCBwZXJtdXRlZFggPSB4O1xuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICBwZXJtdXRlZFggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGVkQXhlc319KTtcbiAgICBheGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsIHhSYW5rKTtcbiAgICB0b0Rpc3Bvc2UucHVzaChwZXJtdXRlZFgpO1xuICB9XG5cbiAgYmFja2VuZF91dGlsLmFzc2VydEF4ZXNBcmVJbm5lck1vc3REaW1zKCdwcm9kJywgYXhlcywgeFJhbmspO1xuXG4gIGxldCByZXM7XG4gIGlmIChiYWNrZW5kLnNob3VsZEV4ZWN1dGVPbkNQVShbcGVybXV0ZWRYXSkpIHtcbiAgICBjb25zdCB4VmFscyA9IGJhY2tlbmQudGV4RGF0YS5nZXQocGVybXV0ZWRYLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gICAgY29uc3Qge291dFZhbHMsIG91dFNoYXBlLCBvdXREdHlwZX0gPVxuICAgICAgICBwcm9kSW1wbENQVShwZXJtdXRlZFguc2hhcGUsIHBlcm11dGVkWC5kdHlwZSwgeFZhbHMsIGF4ZXMpO1xuICAgIHJlcyA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0U2hhcGUsIG91dER0eXBlLCBvdXRWYWxzKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbb3V0U2hhcGUsIHJlZHVjZVNoYXBlXSA9XG4gICAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKHBlcm11dGVkWC5zaGFwZSwgYXhlcyk7XG4gICAgY29uc3QgaW5TaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcbiAgICBjb25zdCBhMkQgPSByZXNoYXBlKFxuICAgICAgICB7aW5wdXRzOiB7eDogcGVybXV0ZWRYfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogWy0xLCBpblNpemVdfX0pO1xuICAgIGNvbnN0IG91dHB1dERUeXBlID0gc3VtT3V0VHlwZSh4LmR0eXBlKTtcbiAgICBjb25zdCByZWR1Y2VkID0gcmVkdWNlKGEyRCwgb3V0cHV0RFR5cGUsICdwcm9kJywgYmFja2VuZCk7XG4gICAgcmVzID0gcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVkdWNlZH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IG91dFNoYXBlfX0pO1xuXG4gICAgdG9EaXNwb3NlLnB1c2goYTJEKTtcbiAgICB0b0Rpc3Bvc2UucHVzaChyZWR1Y2VkKTtcbiAgfVxuXG4gIGlmIChrZWVwRGltcykge1xuICAgIHRvRGlzcG9zZS5wdXNoKHJlcyk7XG4gICAgY29uc3QgbmV3U2hhcGUgPSBiYWNrZW5kX3V0aWwuZXhwYW5kU2hhcGVUb0tlZXBEaW0ocmVzLnNoYXBlLCBvcmlnQXhlcyk7XG4gICAgcmVzID0gcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVzfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogbmV3U2hhcGV9fSk7XG4gIH1cblxuICB0b0Rpc3Bvc2UuZm9yRWFjaCh0ID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odCkpO1xuXG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBwcm9kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFByb2QsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBwcm9kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RaggedGather } from '@tensorflow/tfjs-core';\nimport { raggedGatherImplCPU } from '../kernel_utils/shared';\nexport function raggedGather(args) {\n const { inputs, backend, attrs } = args;\n const { paramsNestedSplits, paramsDenseValues, indices } = inputs;\n const { outputRaggedRank } = attrs;\n const $paramsNestedSplits = paramsNestedSplits.map(t => backend.readSync(t.dataId));\n const $paramsNestedSplitsShapes = paramsNestedSplits.map(t => t.shape);\n const $paramsDenseValues = backend.readSync(paramsDenseValues.dataId);\n const $indices = backend.readSync(indices.dataId);\n const [outputNestedSplits, outputDenseValues, outputDenseValuesShape] = raggedGatherImplCPU($paramsNestedSplits, $paramsNestedSplitsShapes, $paramsDenseValues, paramsDenseValues.shape, paramsDenseValues.dtype, $indices, indices.shape, outputRaggedRank);\n const outputNestedSplitsTensors = outputNestedSplits.map((splits) => backend.makeTensorInfo([splits.length], 'int32', splits));\n const outputDenseValuesTensor = backend.makeTensorInfo(outputDenseValuesShape, paramsDenseValues.dtype, outputDenseValues);\n return outputNestedSplitsTensors.concat([outputDenseValuesTensor]);\n}\nexport const raggedGatherConfig = {\n kernelName: RaggedGather,\n backendName: 'webgl',\n kernelFunc: raggedGather,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkR2F0aGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1JhZ2dlZEdhdGhlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFlBQVksRUFBZ0UsTUFBTSx1QkFBdUIsQ0FBQztBQUc1SSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBSTVCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDaEUsTUFBTSxFQUFDLGdCQUFnQixFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWpDLE1BQU0sbUJBQW1CLEdBQ3JCLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBZSxDQUFDLENBQUM7SUFDMUUsTUFBTSx5QkFBeUIsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkUsTUFBTSxrQkFBa0IsR0FDcEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUVoRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLENBQUMsR0FDakUsbUJBQW1CLENBQ2YsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQ2xFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUMxRCxPQUFPLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFekMsTUFBTSx5QkFBeUIsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQ3BELENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRTFFLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FDbEQsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFeEUsT0FBTyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFpQjtJQUM5QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsWUFBcUM7Q0FDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJhZ2dlZEdhdGhlciwgUmFnZ2VkR2F0aGVyQXR0cnMsIFJhZ2dlZEdhdGhlcklucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7cmFnZ2VkR2F0aGVySW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByYWdnZWRHYXRoZXIoYXJnczoge1xuICBpbnB1dHM6IFJhZ2dlZEdhdGhlcklucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFJhZ2dlZEdhdGhlckF0dHJzXG59KTogVGVuc29ySW5mb1tdIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3BhcmFtc05lc3RlZFNwbGl0cywgcGFyYW1zRGVuc2VWYWx1ZXMsIGluZGljZXN9ID0gaW5wdXRzO1xuICBjb25zdCB7b3V0cHV0UmFnZ2VkUmFua30gPSBhdHRycztcblxuICBjb25zdCAkcGFyYW1zTmVzdGVkU3BsaXRzID1cbiAgICAgIHBhcmFtc05lc3RlZFNwbGl0cy5tYXAodCA9PiBiYWNrZW5kLnJlYWRTeW5jKHQuZGF0YUlkKSBhcyBUeXBlZEFycmF5KTtcbiAgY29uc3QgJHBhcmFtc05lc3RlZFNwbGl0c1NoYXBlcyA9IHBhcmFtc05lc3RlZFNwbGl0cy5tYXAodCA9PiB0LnNoYXBlKTtcbiAgY29uc3QgJHBhcmFtc0RlbnNlVmFsdWVzID1cbiAgICAgIGJhY2tlbmQucmVhZFN5bmMocGFyYW1zRGVuc2VWYWx1ZXMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkaW5kaWNlcyA9IGJhY2tlbmQucmVhZFN5bmMoaW5kaWNlcy5kYXRhSWQpIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgW291dHB1dE5lc3RlZFNwbGl0cywgb3V0cHV0RGVuc2VWYWx1ZXMsIG91dHB1dERlbnNlVmFsdWVzU2hhcGVdID1cbiAgICAgIHJhZ2dlZEdhdGhlckltcGxDUFUoXG4gICAgICAgICAgJHBhcmFtc05lc3RlZFNwbGl0cywgJHBhcmFtc05lc3RlZFNwbGl0c1NoYXBlcywgJHBhcmFtc0RlbnNlVmFsdWVzLFxuICAgICAgICAgIHBhcmFtc0RlbnNlVmFsdWVzLnNoYXBlLCBwYXJhbXNEZW5zZVZhbHVlcy5kdHlwZSwgJGluZGljZXMsXG4gICAgICAgICAgaW5kaWNlcy5zaGFwZSwgb3V0cHV0UmFnZ2VkUmFuayk7XG5cbiAgY29uc3Qgb3V0cHV0TmVzdGVkU3BsaXRzVGVuc29ycyA9IG91dHB1dE5lc3RlZFNwbGl0cy5tYXAoXG4gICAgICAoc3BsaXRzKSA9PiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFtzcGxpdHMubGVuZ3RoXSwgJ2ludDMyJywgc3BsaXRzKSk7XG5cbiAgY29uc3Qgb3V0cHV0RGVuc2VWYWx1ZXNUZW5zb3IgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgb3V0cHV0RGVuc2VWYWx1ZXNTaGFwZSwgcGFyYW1zRGVuc2VWYWx1ZXMuZHR5cGUsIG91dHB1dERlbnNlVmFsdWVzKTtcblxuICByZXR1cm4gb3V0cHV0TmVzdGVkU3BsaXRzVGVuc29ycy5jb25jYXQoW291dHB1dERlbnNlVmFsdWVzVGVuc29yXSk7XG59XG5cbmV4cG9ydCBjb25zdCByYWdnZWRHYXRoZXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmFnZ2VkR2F0aGVyLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogcmFnZ2VkR2F0aGVyIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RaggedRange } from '@tensorflow/tfjs-core';\nimport { raggedRangeImplCPU } from '../kernel_utils/shared';\nexport function raggedRange(args) {\n const { inputs, backend } = args;\n const { starts, limits, deltas } = inputs;\n const $starts = backend.readSync(starts.dataId);\n const $limits = backend.readSync(limits.dataId);\n const $deltas = backend.readSync(deltas.dataId);\n const [rtNestedSplitsData, rtDenseValuesData] = raggedRangeImplCPU($starts, starts.shape, starts.dtype, $limits, limits.shape, $deltas, deltas.shape);\n const rtNestedSplits = backend.makeTensorInfo([rtNestedSplitsData.length], 'int32', rtNestedSplitsData);\n const rtDenseValues = backend.makeTensorInfo([rtDenseValuesData.length], starts.dtype, rtDenseValuesData);\n return [rtNestedSplits, rtDenseValues];\n}\nexport const raggedRangeConfig = {\n kernelName: RaggedRange,\n backendName: 'webgl',\n kernelFunc: raggedRange,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkUmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUmFnZ2VkUmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixXQUFXLEVBQTRDLE1BQU0sdUJBQXVCLENBQUM7QUFHdkgsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsTUFBTSxVQUFVLFdBQVcsQ0FDdkIsSUFBNEQ7SUFFOUQsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXhDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBQzlELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBQzlELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBRTlELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLGtCQUFrQixDQUM5RCxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFDbkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQ3pDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FDeEMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFakUsT0FBTyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlCO0lBQzdDLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxXQUFvQztDQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmFnZ2VkUmFuZ2UsIFJhZ2dlZFJhbmdlSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtyYWdnZWRSYW5nZUltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmFnZ2VkUmFuZ2UoXG4gICAgYXJnczoge2lucHV0czogUmFnZ2VkUmFuZ2VJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTpcbiAgICBbVGVuc29ySW5mbywgVGVuc29ySW5mb10ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtzdGFydHMsIGxpbWl0cywgZGVsdGFzfSA9IGlucHV0cztcblxuICBjb25zdCAkc3RhcnRzID0gYmFja2VuZC5yZWFkU3luYyhzdGFydHMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkbGltaXRzID0gYmFja2VuZC5yZWFkU3luYyhsaW1pdHMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkZGVsdGFzID0gYmFja2VuZC5yZWFkU3luYyhkZWx0YXMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IFtydE5lc3RlZFNwbGl0c0RhdGEsIHJ0RGVuc2VWYWx1ZXNEYXRhXSA9IHJhZ2dlZFJhbmdlSW1wbENQVShcbiAgICAgICRzdGFydHMsIHN0YXJ0cy5zaGFwZSwgc3RhcnRzLmR0eXBlLCAkbGltaXRzLCBsaW1pdHMuc2hhcGUsICRkZWx0YXMsXG4gICAgICBkZWx0YXMuc2hhcGUpO1xuXG4gIGNvbnN0IHJ0TmVzdGVkU3BsaXRzID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgIFtydE5lc3RlZFNwbGl0c0RhdGEubGVuZ3RoXSwgJ2ludDMyJywgcnROZXN0ZWRTcGxpdHNEYXRhKTtcbiAgY29uc3QgcnREZW5zZVZhbHVlcyA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICBbcnREZW5zZVZhbHVlc0RhdGEubGVuZ3RoXSwgc3RhcnRzLmR0eXBlLCBydERlbnNlVmFsdWVzRGF0YSk7XG5cbiAgcmV0dXJuIFtydE5lc3RlZFNwbGl0cywgcnREZW5zZVZhbHVlc107XG59XG5cbmV4cG9ydCBjb25zdCByYWdnZWRSYW5nZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSYWdnZWRSYW5nZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHJhZ2dlZFJhbmdlIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RaggedTensorToTensor } from '@tensorflow/tfjs-core';\nimport { raggedTensorToTensorImplCPU } from '../kernel_utils/shared';\nexport function raggedTensorToTensor(args) {\n const { inputs, backend, attrs } = args;\n const { shape, values, defaultValue, rowPartitionTensors } = inputs;\n const { rowPartitionTypes } = attrs;\n const $shape = backend.readSync(shape.dataId);\n const $values = backend.readSync(values.dataId);\n const $defaultValue = backend.readSync(defaultValue.dataId);\n const $rowPartitionValues = rowPartitionTensors.map(t => backend.readSync(t.dataId));\n const rowPartitionValuesShapes = rowPartitionTensors.map(t => t.shape);\n const [outputShape, output] = raggedTensorToTensorImplCPU($shape, shape.shape, $values, values.shape, values.dtype, $defaultValue, defaultValue.shape, $rowPartitionValues, rowPartitionValuesShapes, rowPartitionTypes);\n return backend.makeTensorInfo(outputShape, values.dtype, output);\n}\nexport const raggedTensorToTensorConfig = {\n kernelName: RaggedTensorToTensor,\n backendName: 'webgl',\n kernelFunc: raggedTensorToTensor,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkVGVuc29yVG9UZW5zb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUmFnZ2VkVGVuc29yVG9UZW5zb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixvQkFBb0IsRUFBZ0YsTUFBTSx1QkFBdUIsQ0FBQztBQUdwSyxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFJcEM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2xFLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVsQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUM1RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUM5RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUMxRSxNQUFNLG1CQUFtQixHQUNyQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQWUsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sd0JBQXdCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsMkJBQTJCLENBQ3JELE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUN2RSxZQUFZLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUNqRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQWlCO0lBQ3RELFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLG9CQUE2QztDQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmFnZ2VkVGVuc29yVG9UZW5zb3IsIFJhZ2dlZFRlbnNvclRvVGVuc29yQXR0cnMsIFJhZ2dlZFRlbnNvclRvVGVuc29ySW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtyYWdnZWRUZW5zb3JUb1RlbnNvckltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmFnZ2VkVGVuc29yVG9UZW5zb3IoYXJnczoge1xuICBpbnB1dHM6IFJhZ2dlZFRlbnNvclRvVGVuc29ySW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogUmFnZ2VkVGVuc29yVG9UZW5zb3JBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7c2hhcGUsIHZhbHVlcywgZGVmYXVsdFZhbHVlLCByb3dQYXJ0aXRpb25UZW5zb3JzfSA9IGlucHV0cztcbiAgY29uc3Qge3Jvd1BhcnRpdGlvblR5cGVzfSA9IGF0dHJzO1xuXG4gIGNvbnN0ICRzaGFwZSA9IGJhY2tlbmQucmVhZFN5bmMoc2hhcGUuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkdmFsdWVzID0gYmFja2VuZC5yZWFkU3luYyh2YWx1ZXMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkZGVmYXVsdFZhbHVlID0gYmFja2VuZC5yZWFkU3luYyhkZWZhdWx0VmFsdWUuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkcm93UGFydGl0aW9uVmFsdWVzID1cbiAgICAgIHJvd1BhcnRpdGlvblRlbnNvcnMubWFwKHQgPT4gYmFja2VuZC5yZWFkU3luYyh0LmRhdGFJZCkgYXMgVHlwZWRBcnJheSk7XG4gIGNvbnN0IHJvd1BhcnRpdGlvblZhbHVlc1NoYXBlcyA9IHJvd1BhcnRpdGlvblRlbnNvcnMubWFwKHQgPT4gdC5zaGFwZSk7XG5cbiAgY29uc3QgW291dHB1dFNoYXBlLCBvdXRwdXRdID0gcmFnZ2VkVGVuc29yVG9UZW5zb3JJbXBsQ1BVKFxuICAgICAgJHNoYXBlLCBzaGFwZS5zaGFwZSwgJHZhbHVlcywgdmFsdWVzLnNoYXBlLCB2YWx1ZXMuZHR5cGUsICRkZWZhdWx0VmFsdWUsXG4gICAgICBkZWZhdWx0VmFsdWUuc2hhcGUsICRyb3dQYXJ0aXRpb25WYWx1ZXMsIHJvd1BhcnRpdGlvblZhbHVlc1NoYXBlcyxcbiAgICAgIHJvd1BhcnRpdGlvblR5cGVzKTtcbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0cHV0U2hhcGUsIHZhbHVlcy5kdHlwZSwgb3V0cHV0KTtcbn1cblxuZXhwb3J0IGNvbnN0IHJhZ2dlZFRlbnNvclRvVGVuc29yQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJhZ2dlZFRlbnNvclRvVGVuc29yLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogcmFnZ2VkVGVuc29yVG9UZW5zb3IgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Range } from '@tensorflow/tfjs-core';\nimport { rangeImplCPU } from '../kernel_utils/shared';\nexport const range = (args) => {\n const { backend, attrs } = args;\n const { start, stop, step, dtype } = attrs;\n const values = rangeImplCPU(start, stop, step, dtype);\n return backend.makeTensorInfo([values.length], dtype, values);\n};\nexport const rangeConfig = {\n kernelName: Range,\n backendName: 'webgl',\n kernelFunc: range\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixLQUFLLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFHOUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FDZCxDQUFDLElBQW9ELEVBQWMsRUFBRTtJQUNuRSxNQUFNLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUM5QixNQUFNLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLEtBQThCO0NBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSYW5nZSwgUmFuZ2VBdHRycywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7cmFuZ2VJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuZXhwb3J0IGNvbnN0IHJhbmdlID1cbiAgICAoYXJnczoge2JhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF0dHJzOiBSYW5nZUF0dHJzfSk6IFRlbnNvckluZm8gPT4ge1xuICAgICAgY29uc3Qge2JhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gICAgICBjb25zdCB7c3RhcnQsIHN0b3AsIHN0ZXAsIGR0eXBlfSA9IGF0dHJzO1xuICAgICAgY29uc3QgdmFsdWVzID0gcmFuZ2VJbXBsQ1BVKHN0YXJ0LCBzdG9wLCBzdGVwLCBkdHlwZSk7XG4gICAgICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbdmFsdWVzLmxlbmd0aF0sIGR0eXBlLCB2YWx1ZXMpO1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCByYW5nZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSYW5nZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHJhbmdlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Reciprocal } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst RECIPROCAL = `return 1.0 / x;`;\nexport const reciprocal = unaryKernelFunc({ opSnippet: RECIPROCAL });\nexport const reciprocalConfig = {\n kernelName: Reciprocal,\n backendName: 'webgl',\n kernelFunc: reciprocal,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjaXByb2NhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9SZWNpcHJvY2FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFbkUsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFpQjtJQUM1QyxVQUFVLEVBQUUsVUFBVTtJQUN0QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsVUFBVTtDQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgUmVjaXByb2NhbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgUkVDSVBST0NBTCA9IGByZXR1cm4gMS4wIC8geDtgO1xuXG5leHBvcnQgY29uc3QgcmVjaXByb2NhbCA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBSRUNJUFJPQ0FMfSk7XG5cbmV4cG9ydCBjb25zdCByZWNpcHJvY2FsQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlY2lwcm9jYWwsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiByZWNpcHJvY2FsLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Relu } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { CHECK_NAN_SNIPPET } from '../unaryop_gpu';\nconst RELU = CHECK_NAN_SNIPPET + `\n return (x < 0.0) ? 0.0 : x;\n`;\nconst 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`;\nexport const relu = unaryKernelFunc({ opSnippet: RELU, packedOpSnippet: RELU_PACKED });\nexport const reluConfig = {\n kernelName: Relu,\n backendName: 'webgl',\n kernelFunc: relu\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9SZWx1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE1BQU0sSUFBSSxHQUFHLGlCQUFpQixHQUFHOztDQUVoQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUc7Ozs7Ozs7Ozs7Q0FVbkIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FDYixlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZWx1fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVH0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuXG5jb25zdCBSRUxVID0gQ0hFQ0tfTkFOX1NOSVBQRVQgKyBgXG4gIHJldHVybiAoeCA8IDAuMCkgPyAwLjAgOiB4O1xuYDtcblxuY29uc3QgUkVMVV9QQUNLRUQgPSBgXG4gIHZlYzQgcmVzdWx0ID0geCAqIHZlYzQoZ3JlYXRlclRoYW5FcXVhbCh4LCB2ZWM0KDAuMCkpKTtcbiAgYnZlYzQgaXNOYU4gPSBpc25hbih4KTtcblxuICByZXN1bHQuciA9IGlzTmFOLnIgPyB4LnIgOiByZXN1bHQucjtcbiAgcmVzdWx0LmcgPSBpc05hTi5nID8geC5nIDogcmVzdWx0Lmc7XG4gIHJlc3VsdC5iID0gaXNOYU4uYiA/IHguYiA6IHJlc3VsdC5iO1xuICByZXN1bHQuYSA9IGlzTmFOLmEgPyB4LmEgOiByZXN1bHQuYTtcblxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IHJlbHUgPVxuICAgIHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBSRUxVLCBwYWNrZWRPcFNuaXBwZXQ6IFJFTFVfUEFDS0VEfSk7XG5cbmV4cG9ydCBjb25zdCByZWx1Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlbHUsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiByZWx1IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Relu6 } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { CHECK_NAN_SNIPPET } from '../unaryop_gpu';\nconst RELU6 = CHECK_NAN_SNIPPET + `\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`;\nconst 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`;\nexport const relu6 = unaryKernelFunc({ opSnippet: RELU6, packedOpSnippet: RELU6_PACKED });\nexport const relu6Config = {\n kernelName: Relu6,\n backendName: 'webgl',\n kernelFunc: relu6\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsdTYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUmVsdTYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLEdBQUc7O0NBRWpDLENBQUM7QUFFRixNQUFNLFlBQVksR0FBRzs7Ozs7Ozs7OztDQVVwQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUNkLGVBQWUsQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7QUFFdkUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsS0FBOEI7Q0FDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJlbHU2fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVH0gZnJvbSAnLi4vdW5hcnlvcF9ncHUnO1xuXG5jb25zdCBSRUxVNiA9IENIRUNLX05BTl9TTklQUEVUICsgYFxuICByZXR1cm4gKHggPCAwLjApID8gMC4wIDogbWluKDYuMCwgeCk7XG5gO1xuXG5jb25zdCBSRUxVNl9QQUNLRUQgPSBgXG4gIHZlYzQgcmVzdWx0ID0gbWluKHgsIHZlYzQoNi4pKSAqIHZlYzQoZ3JlYXRlclRoYW5FcXVhbCh4LCB2ZWM0KDAuMCkpKTtcbiAgYnZlYzQgaXNOYU4gPSBpc25hbih4KTtcblxuICByZXN1bHQuciA9IGlzTmFOLnIgPyB4LnIgOiByZXN1bHQucjtcbiAgcmVzdWx0LmcgPSBpc05hTi5nID8geC5nIDogcmVzdWx0Lmc7XG4gIHJlc3VsdC5iID0gaXNOYU4uYiA/IHguYiA6IHJlc3VsdC5iO1xuICByZXN1bHQuYSA9IGlzTmFOLmEgPyB4LmEgOiByZXN1bHQuYTtcblxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IHJlbHU2ID1cbiAgICB1bmFyeUtlcm5lbEZ1bmMoe29wU25pcHBldDogUkVMVTYsIHBhY2tlZE9wU25pcHBldDogUkVMVTZfUEFDS0VEfSk7XG5cbmV4cG9ydCBjb25zdCByZWx1NkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSZWx1NixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHJlbHU2IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ResizeBilinearProgram {\n constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) {\n this.variableNames = ['A'];\n this.outputShape = [];\n const [batch, oldHeight, oldWidth, depth] = inputShape;\n this.outputShape = [batch, newHeight, newWidth, depth];\n const effectiveInSize = [\n (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n ];\n const effectiveOutSize = [\n (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n ];\n let sourceFracIndexRC;\n if (halfPixelCenters) {\n sourceFracIndexRC =\n `(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC` +\n ` - vec2(0.5)`;\n }\n else {\n sourceFracIndexRC = `vec2(yRC) * effectiveInputOverOutputRatioRC`;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX2JpbGluZWFyX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvcmVzaXplX2JpbGluZWFyX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8scUJBQXFCO0lBS2hDLFlBQ0ksVUFBNEMsRUFBRSxTQUFpQixFQUMvRCxRQUFnQixFQUFFLFlBQXFCLEVBQUUsZ0JBQXlCO1FBTnRFLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQU16QixNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV2RCxNQUFNLGVBQWUsR0FBcUI7WUFDeEMsQ0FBQyxZQUFZLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzNELENBQUMsWUFBWSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUN6RCxDQUFDO1FBRUYsTUFBTSxnQkFBZ0IsR0FBcUI7WUFDekMsQ0FBQyxZQUFZLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzNELENBQUMsWUFBWSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUN6RCxDQUFDO1FBRUYsSUFBSSxpQkFBeUIsQ0FBQztRQUM5QixJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLGlCQUFpQjtnQkFDYiwyREFBMkQ7b0JBQzNELGNBQWMsQ0FBQztTQUNwQjthQUFNO1lBQ0wsaUJBQWlCLEdBQUcsNkNBQTZDLENBQUM7U0FDbkU7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHOztZQUVSLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDeEMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQzt1Q0FDYixTQUFTLE9BQU8sUUFBUTs7Ozs7Ozs7O21DQVM1QixpQkFBaUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBb0IvQyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIFJlc2l6ZUJpbGluZWFyUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBpbnB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgbmV3SGVpZ2h0OiBudW1iZXIsXG4gICAgICBuZXdXaWR0aDogbnVtYmVyLCBhbGlnbkNvcm5lcnM6IGJvb2xlYW4sIGhhbGZQaXhlbENlbnRlcnM6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBbYmF0Y2gsIG9sZEhlaWdodCwgb2xkV2lkdGgsIGRlcHRoXSA9IGlucHV0U2hhcGU7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IFtiYXRjaCwgbmV3SGVpZ2h0LCBuZXdXaWR0aCwgZGVwdGhdO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlSW5TaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgKGFsaWduQ29ybmVycyAmJiBuZXdIZWlnaHQgPiAxKSA/IG9sZEhlaWdodCAtIDEgOiBvbGRIZWlnaHQsXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIG5ld1dpZHRoID4gMSkgPyBvbGRXaWR0aCAtIDEgOiBvbGRXaWR0aFxuICAgIF07XG5cbiAgICBjb25zdCBlZmZlY3RpdmVPdXRTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgKGFsaWduQ29ybmVycyAmJiBuZXdIZWlnaHQgPiAxKSA/IG5ld0hlaWdodCAtIDEgOiBuZXdIZWlnaHQsXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIG5ld1dpZHRoID4gMSkgPyBuZXdXaWR0aCAtIDEgOiBuZXdXaWR0aFxuICAgIF07XG5cbiAgICBsZXQgc291cmNlRnJhY0luZGV4UkM6IHN0cmluZztcbiAgICBpZiAoaGFsZlBpeGVsQ2VudGVycykge1xuICAgICAgc291cmNlRnJhY0luZGV4UkMgPVxuICAgICAgICAgIGAodmVjMih5UkMpICsgdmVjMigwLjUpKSAqIGVmZmVjdGl2ZUlucHV0T3Zlck91dHB1dFJhdGlvUkNgICtcbiAgICAgICAgICBgIC0gdmVjMigwLjUpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc291cmNlRnJhY0luZGV4UkMgPSBgdmVjMih5UkMpICogZWZmZWN0aXZlSW5wdXRPdmVyT3V0cHV0UmF0aW9SQ2A7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGNvbnN0IHZlYzIgZWZmZWN0aXZlSW5wdXRPdmVyT3V0cHV0UmF0aW9SQyA9IHZlYzIoXG4gICAgICAgICAgJHtlZmZlY3RpdmVJblNpemVbMF0gLyBlZmZlY3RpdmVPdXRTaXplWzBdfSxcbiAgICAgICAgICAke2VmZmVjdGl2ZUluU2l6ZVsxXSAvIGVmZmVjdGl2ZU91dFNpemVbMV19KTtcbiAgICAgIGNvbnN0IHZlYzIgaW5wdXRTaGFwZVJDID0gdmVjMigke29sZEhlaWdodH0uMCwgJHtvbGRXaWR0aH0uMCk7XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgZCA9IGNvb3Jkc1szXTtcbiAgICAgICAgaXZlYzIgeVJDID0gY29vcmRzLnl6O1xuXG4gICAgICAgIC8vIEZyYWN0aW9uYWwgc291cmNlIGluZGV4LlxuICAgICAgICB2ZWMyIHNvdXJjZUZyYWNJbmRleFJDID0gJHtzb3VyY2VGcmFjSW5kZXhSQ307XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgZm91ciBpbnRlZ2VyIGluZGljZXMuXG4gICAgICAgIGl2ZWMyIHNvdXJjZUZsb29yUkMgPSBpdmVjMihtYXgoc291cmNlRnJhY0luZGV4UkMsIHZlYzIoMC4wKSkpO1xuICAgICAgICBpdmVjMiBzb3VyY2VDZWlsUkMgPSBpdmVjMihcbiAgICAgICAgICBtaW4oaW5wdXRTaGFwZVJDIC0gMS4wLCBjZWlsKHNvdXJjZUZyYWNJbmRleFJDKSkpO1xuXG4gICAgICAgIGZsb2F0IHRvcExlZnQgPSBnZXRBKGIsIHNvdXJjZUZsb29yUkMueCwgc291cmNlRmxvb3JSQy55LCBkKTtcbiAgICAgICAgZmxvYXQgYm90dG9tTGVmdCA9IGdldEEoYiwgc291cmNlQ2VpbFJDLngsIHNvdXJjZUZsb29yUkMueSwgZCk7XG4gICAgICAgIGZsb2F0IHRvcFJpZ2h0ID0gZ2V0QShiLCBzb3VyY2VGbG9vclJDLngsIHNvdXJjZUNlaWxSQy55LCBkKTtcbiAgICAgICAgZmxvYXQgYm90dG9tUmlnaHQgPSBnZXRBKGIsIHNvdXJjZUNlaWxSQy54LCBzb3VyY2VDZWlsUkMueSwgZCk7XG5cbiAgICAgICAgdmVjMiBmcmFjUkMgPSBzb3VyY2VGcmFjSW5kZXhSQyAtIHZlYzIoc291cmNlRmxvb3JSQyk7XG5cbiAgICAgICAgZmxvYXQgdG9wID0gdG9wTGVmdCArICh0b3BSaWdodCAtIHRvcExlZnQpICogZnJhY1JDLnk7XG4gICAgICAgIGZsb2F0IGJvdHRvbSA9IGJvdHRvbUxlZnQgKyAoYm90dG9tUmlnaHQgLSBib3R0b21MZWZ0KSAqIGZyYWNSQy55O1xuICAgICAgICBmbG9hdCBuZXdWYWx1ZSA9IHRvcCArIChib3R0b20gLSB0b3ApICogZnJhY1JDLng7XG5cbiAgICAgICAgc2V0T3V0cHV0KG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ResizeBilinearPackedProgram {\n constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = [];\n const [batch, oldHeight, oldWidth, depth] = inputShape;\n this.outputShape = [batch, newHeight, newWidth, depth];\n const effectiveInSize = [\n (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n ];\n const effectiveOutSize = [\n (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n ];\n let sourceFracIndexRC;\n if (halfPixelCenters) {\n sourceFracIndexRC = `(vec3(yRC) + vec3(0.5)) * ` +\n `effectiveInputOverOutputRatioRC - vec3(0.5)`;\n }\n else {\n sourceFracIndexRC = `vec3(yRC) * effectiveInputOverOutputRatioRC`;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX2JpbGluZWFyX3BhY2tlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3Jlc2l6ZV9iaWxpbmVhcl9wYWNrZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFPdEMsWUFDSSxVQUE0QyxFQUFFLFNBQWlCLEVBQy9ELFFBQWdCLEVBQUUsWUFBcUIsRUFBRSxnQkFBeUI7UUFSdEUsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBTXpCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXZELE1BQU0sZUFBZSxHQUFxQjtZQUN4QyxDQUFDLFlBQVksSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDM0QsQ0FBQyxZQUFZLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO1NBQ3pELENBQUM7UUFFRixNQUFNLGdCQUFnQixHQUFxQjtZQUN6QyxDQUFDLFlBQVksSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDM0QsQ0FBQyxZQUFZLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO1NBQ3pELENBQUM7UUFFRixJQUFJLGlCQUF5QixDQUFDO1FBQzlCLElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsaUJBQWlCLEdBQUcsNEJBQTRCO2dCQUM1Qyw2Q0FBNkMsQ0FBQztTQUNuRDthQUFNO1lBQ0wsaUJBQWlCLEdBQUcsNkNBQTZDLENBQUM7U0FDbkU7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHOztZQUVSLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDeEMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN4QyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO3VDQUNiLFNBQVMsT0FBTyxRQUFRO3VDQUN4QixRQUFROzs7Ozs7Ozs7Ozs7OzttQ0FjWixpQkFBaUI7Ozs7Ozs7O2dDQVFwQixLQUFLLEdBQUcsQ0FBQzt1Q0FDRixRQUFRLEdBQUcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBZ0Q5QyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcblxuZXhwb3J0IGNsYXNzIFJlc2l6ZUJpbGluZWFyUGFja2VkUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnXTtcbiAgcGFja2VkSW5wdXRzID0gdHJ1ZTtcbiAgcGFja2VkT3V0cHV0ID0gdHJ1ZTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBpbnB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgbmV3SGVpZ2h0OiBudW1iZXIsXG4gICAgICBuZXdXaWR0aDogbnVtYmVyLCBhbGlnbkNvcm5lcnM6IGJvb2xlYW4sIGhhbGZQaXhlbENlbnRlcnM6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBbYmF0Y2gsIG9sZEhlaWdodCwgb2xkV2lkdGgsIGRlcHRoXSA9IGlucHV0U2hhcGU7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IFtiYXRjaCwgbmV3SGVpZ2h0LCBuZXdXaWR0aCwgZGVwdGhdO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlSW5TaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgKGFsaWduQ29ybmVycyAmJiBuZXdIZWlnaHQgPiAxKSA/IG9sZEhlaWdodCAtIDEgOiBvbGRIZWlnaHQsXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIG5ld1dpZHRoID4gMSkgPyBvbGRXaWR0aCAtIDEgOiBvbGRXaWR0aFxuICAgIF07XG5cbiAgICBjb25zdCBlZmZlY3RpdmVPdXRTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgKGFsaWduQ29ybmVycyAmJiBuZXdIZWlnaHQgPiAxKSA/IG5ld0hlaWdodCAtIDEgOiBuZXdIZWlnaHQsXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIG5ld1dpZHRoID4gMSkgPyBuZXdXaWR0aCAtIDEgOiBuZXdXaWR0aFxuICAgIF07XG5cbiAgICBsZXQgc291cmNlRnJhY0luZGV4UkM6IHN0cmluZztcbiAgICBpZiAoaGFsZlBpeGVsQ2VudGVycykge1xuICAgICAgc291cmNlRnJhY0luZGV4UkMgPSBgKHZlYzMoeVJDKSArIHZlYzMoMC41KSkgKiBgICtcbiAgICAgICAgICBgZWZmZWN0aXZlSW5wdXRPdmVyT3V0cHV0UmF0aW9SQyAtIHZlYzMoMC41KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNvdXJjZUZyYWNJbmRleFJDID0gYHZlYzMoeVJDKSAqIGVmZmVjdGl2ZUlucHV0T3Zlck91dHB1dFJhdGlvUkNgO1xuICAgIH1cblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICBjb25zdCB2ZWMzIGVmZmVjdGl2ZUlucHV0T3Zlck91dHB1dFJhdGlvUkMgPSB2ZWMzKFxuICAgICAgICAgICR7ZWZmZWN0aXZlSW5TaXplWzBdIC8gZWZmZWN0aXZlT3V0U2l6ZVswXX0sXG4gICAgICAgICAgJHtlZmZlY3RpdmVJblNpemVbMV0gLyBlZmZlY3RpdmVPdXRTaXplWzFdfSxcbiAgICAgICAgICAke2VmZmVjdGl2ZUluU2l6ZVsxXSAvIGVmZmVjdGl2ZU91dFNpemVbMV19KTtcbiAgICAgIGNvbnN0IHZlYzMgaW5wdXRTaGFwZVJDID0gdmVjMygke29sZEhlaWdodH0uMCwgJHtvbGRXaWR0aH0uMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke29sZFdpZHRofS4wKTtcblxuICAgICAgZmxvYXQgZ2V0QVZhbHVlKGludCBiLCBpbnQgciwgaW50IGMsIGludCBkKSB7XG4gICAgICAgIHJldHVybiBnZXRDaGFubmVsKGdldEEoYiwgciwgYywgZCksIHZlYzIoYywgZCkpO1xuICAgICAgfVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYiA9IGNvb3Jkc1swXTtcbiAgICAgICAgaW50IGQgPSBjb29yZHNbM107XG4gICAgICAgIC8vIENhbGN1bGF0ZSB2YWx1ZXMgZm9yIG5leHQgY29sdW1uIGluIHlSQy56LlxuICAgICAgICBpdmVjMyB5UkMgPSBjb29yZHMueXp6ICsgaXZlYzMoMCwgMCwgMSk7XG5cbiAgICAgICAgLy8gRnJhY3Rpb25hbCBzb3VyY2UgaW5kZXguXG4gICAgICAgIHZlYzMgc291cmNlRnJhY0luZGV4UkMgPSAke3NvdXJjZUZyYWNJbmRleFJDfTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBmb3VyIGludGVnZXIgaW5kaWNlcy5cbiAgICAgICAgaXZlYzMgc291cmNlRmxvb3JSQyA9IGl2ZWMzKG1heChzb3VyY2VGcmFjSW5kZXhSQywgdmVjMygwLjApKSk7XG4gICAgICAgIGl2ZWMzIHNvdXJjZUNlaWxSQyA9IGl2ZWMzKFxuICAgICAgICAgIG1pbihpbnB1dFNoYXBlUkMgLSAxLjAsIGNlaWwoc291cmNlRnJhY0luZGV4UkMpKSk7XG5cbiAgICAgICAgLy8gU2hvdWxkIHdlIGNhbGN1bGF0ZSBuZXh0IGNvbHVtbiBhbmQgcm93IGVsZW1lbnRzIGluIDJ4MiBwYWNrZWQgY2VsbC5cbiAgICAgICAgYm9vbCBoYXNOZXh0Q29sID0gZCA8ICR7ZGVwdGggLSAxfTtcbiAgICAgICAgYm9vbCBoYXNOZXh0Um93ID0gY29vcmRzLnogPCAke25ld1dpZHRoIC0gMX07XG5cbiAgICAgICAgLy8gSW4gcGFyYWxsZWwsIGNvbnN0cnVjdCBmb3VyIGNvcm5lcnMgZm9yIGFsbCBmb3VyIGNvbXBvbmVudHMgaW5cbiAgICAgICAgLy8gcGFja2VkIDJ4MiBjZWxsLlxuICAgICAgICB2ZWM0IHRvcExlZnQgPSB2ZWM0KFxuICAgICAgICAgIGdldEFWYWx1ZShiLCBzb3VyY2VGbG9vclJDLngsIHNvdXJjZUZsb29yUkMueSwgZCksXG4gICAgICAgICAgaGFzTmV4dENvbCA/IGdldEFWYWx1ZShiLCBzb3VyY2VGbG9vclJDLngsIHNvdXJjZUZsb29yUkMueSwgZCArIDEpXG4gICAgICAgICAgICAgICAgICAgICA6IDAuMCxcbiAgICAgICAgICBoYXNOZXh0Um93ID8gZ2V0QVZhbHVlKGIsIHNvdXJjZUZsb29yUkMueCwgc291cmNlRmxvb3JSQy56LCBkKVxuICAgICAgICAgICAgICAgICAgICAgOiAwLjAsXG4gICAgICAgICAgKGhhc05leHRSb3cgJiYgaGFzTmV4dENvbCkgP1xuICAgICAgICAgICAgZ2V0QVZhbHVlKGIsIHNvdXJjZUZsb29yUkMueCwgc291cmNlRmxvb3JSQy56LCBkICsgMSkgOiAwLjApO1xuXG4gICAgICAgIHZlYzQgYm90dG9tTGVmdCA9IHZlYzQoXG4gICAgICAgICAgZ2V0QVZhbHVlKGIsIHNvdXJjZUNlaWxSQy54LCBzb3VyY2VGbG9vclJDLnksIGQpLFxuICAgICAgICAgIGhhc05leHRDb2wgPyBnZXRBVmFsdWUoYiwgc291cmNlQ2VpbFJDLngsIHNvdXJjZUZsb29yUkMueSwgZCArIDEpXG4gICAgICAgICAgICAgICAgICAgICA6IDAuMCxcbiAgICAgICAgICBoYXNOZXh0Um93ID8gZ2V0QVZhbHVlKGIsIHNvdXJjZUNlaWxSQy54LCBzb3VyY2VGbG9vclJDLnosIGQpXG4gICAgICAgICAgICAgICAgICAgICA6IDAuMCxcbiAgICAgICAgICAoaGFzTmV4dFJvdyAmJiBoYXNOZXh0Q29sKSA/XG4gICAgICAgICAgICBnZXRBVmFsdWUoYiwgc291cmNlQ2VpbFJDLngsIHNvdXJjZUZsb29yUkMueiwgZCArIDEpIDogMC4wKTtcblxuICAgICAgICB2ZWM0IHRvcFJpZ2h0ID0gdmVjNChcbiAgICAgICAgICBnZXRBVmFsdWUoYiwgc291cmNlRmxvb3JSQy54LCBzb3VyY2VDZWlsUkMueSwgZCksXG4gICAgICAgICAgaGFzTmV4dENvbCA/IGdldEFWYWx1ZShiLCBzb3VyY2VGbG9vclJDLngsIHNvdXJjZUNlaWxSQy55LCBkICsgMSlcbiAgICAgICAgICAgICAgICAgICAgIDogMC4wLFxuICAgICAgICAgIGhhc05leHRSb3cgPyBnZXRBVmFsdWUoYiwgc291cmNlRmxvb3JSQy54LCBzb3VyY2VDZWlsUkMueiwgZClcbiAgICAgICAgICAgICAgICAgICAgIDogMC4wLFxuICAgICAgICAgIChoYXNOZXh0Um93ICYmIGhhc05leHRDb2wpID9cbiAgICAgICAgICAgIGdldEFWYWx1ZShiLCBzb3VyY2VGbG9vclJDLngsIHNvdXJjZUNlaWxSQy56LCBkICsgMSkgOiAwLjApO1xuXG4gICAgICAgIHZlYzQgYm90dG9tUmlnaHQgPSB2ZWM0KFxuICAgICAgICAgIGdldEFWYWx1ZShiLCBzb3VyY2VDZWlsUkMueCwgc291cmNlQ2VpbFJDLnksIGQpLFxuICAgICAgICAgIGhhc05leHRDb2wgPyBnZXRBVmFsdWUoYiwgc291cmNlQ2VpbFJDLngsIHNvdXJjZUNlaWxSQy55LCBkICsgMSlcbiAgICAgICAgICAgICAgICAgICAgIDogMC4wLFxuICAgICAgICAgIGhhc05leHRSb3cgPyBnZXRBVmFsdWUoYiwgc291cmNlQ2VpbFJDLngsIHNvdXJjZUNlaWxSQy56LCBkKVxuICAgICAgICAgICAgICAgICAgICAgOiAwLjAsXG4gICAgICAgICAgKGhhc05leHRSb3cgJiYgaGFzTmV4dENvbCkgP1xuICAgICAgICAgICAgZ2V0QVZhbHVlKGIsIHNvdXJjZUNlaWxSQy54LCBzb3VyY2VDZWlsUkMueiwgZCArIDEpIDogMC4wKTtcblxuICAgICAgICB2ZWMzIGZyYWNSQyA9IHNvdXJjZUZyYWNJbmRleFJDIC0gdmVjMyhzb3VyY2VGbG9vclJDKTtcblxuICAgICAgICB2ZWM0IHRvcCA9IG1peCh0b3BMZWZ0LCB0b3BSaWdodCwgZnJhY1JDLnl5enopO1xuICAgICAgICB2ZWM0IGJvdHRvbSA9IG1peChib3R0b21MZWZ0LCBib3R0b21SaWdodCwgZnJhY1JDLnl5enopO1xuICAgICAgICB2ZWM0IG5ld1ZhbHVlID0gbWl4KHRvcCwgYm90dG9tLCBmcmFjUkMueCk7XG5cbiAgICAgICAgc2V0T3V0cHV0KG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, ResizeBilinear } from '@tensorflow/tfjs-core';\nimport { ResizeBilinearProgram } from '../resize_bilinear_gpu';\nimport { ResizeBilinearPackedProgram } from '../resize_bilinear_packed_gpu';\nexport function resizeBilinear(args) {\n const { inputs, backend, attrs } = args;\n const { images } = inputs;\n const { alignCorners, halfPixelCenters, size } = attrs;\n const [newHeight, newWidth] = size;\n const program = env().getBool('WEBGL_PACK_IMAGE_OPERATIONS') ?\n new ResizeBilinearPackedProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters) :\n new ResizeBilinearProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters);\n return backend.runWebGLProgram(program, [images], 'float32');\n}\nexport const resizeBilinearConfig = {\n kernelName: ResizeBilinear,\n backendName: 'webgl',\n kernelFunc: resizeBilinear\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplQmlsaW5lYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUmVzaXplQmlsaW5lYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBNEIsY0FBYyxFQUF3RCxNQUFNLHVCQUF1QixDQUFDO0FBRzNJLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRTFFLE1BQU0sVUFBVSxjQUFjLENBQUMsSUFJOUI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN4QixNQUFNLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyRCxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUVuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksMkJBQTJCLENBQzNCLE1BQU0sQ0FBQyxLQUF5QyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQ3JFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxxQkFBcUIsQ0FDckIsTUFBTSxDQUFDLEtBQXlDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFDckUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEMsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBaUI7SUFDaEQsVUFBVSxFQUFFLGNBQWM7SUFDMUIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLGNBQXVDO0NBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52LCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJlc2l6ZUJpbGluZWFyLCBSZXNpemVCaWxpbmVhckF0dHJzLCBSZXNpemVCaWxpbmVhcklucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7UmVzaXplQmlsaW5lYXJQcm9ncmFtfSBmcm9tICcuLi9yZXNpemVfYmlsaW5lYXJfZ3B1JztcbmltcG9ydCB7UmVzaXplQmlsaW5lYXJQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9yZXNpemVfYmlsaW5lYXJfcGFja2VkX2dwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVCaWxpbmVhcihhcmdzOiB7XG4gIGlucHV0czogUmVzaXplQmlsaW5lYXJJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBSZXNpemVCaWxpbmVhckF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbWFnZXN9ID0gaW5wdXRzO1xuICBjb25zdCB7YWxpZ25Db3JuZXJzLCBoYWxmUGl4ZWxDZW50ZXJzLCBzaXplfSA9IGF0dHJzO1xuXG4gIGNvbnN0IFtuZXdIZWlnaHQsIG5ld1dpZHRoXSA9IHNpemU7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfSU1BR0VfT1BFUkFUSU9OUycpID9cbiAgICAgIG5ldyBSZXNpemVCaWxpbmVhclBhY2tlZFByb2dyYW0oXG4gICAgICAgICAgaW1hZ2VzLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBuZXdIZWlnaHQsIG5ld1dpZHRoLFxuICAgICAgICAgIGFsaWduQ29ybmVycywgaGFsZlBpeGVsQ2VudGVycykgOlxuICAgICAgbmV3IFJlc2l6ZUJpbGluZWFyUHJvZ3JhbShcbiAgICAgICAgICBpbWFnZXMuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG5ld0hlaWdodCwgbmV3V2lkdGgsXG4gICAgICAgICAgYWxpZ25Db3JuZXJzLCBoYWxmUGl4ZWxDZW50ZXJzKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFtpbWFnZXNdLCAnZmxvYXQzMicpO1xufVxuXG5leHBvcnQgY29uc3QgcmVzaXplQmlsaW5lYXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmVzaXplQmlsaW5lYXIsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiByZXNpemVCaWxpbmVhciBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ResizeBilinearBackpropProgram {\n constructor(dyShape, inputShape, alignCorners) {\n this.variableNames = ['dy'];\n this.outputShape = [];\n this.outputShape = inputShape;\n const [, xHeight, xWidth,] = inputShape;\n const [, yHeight, yWidth] = dyShape;\n // In the backwards pass, we want to find the pixels that were generated for\n // each pixel in the input image the forward pass and add the corresponding\n // coefficient from dy to the gradient (with some interpolation).\n const effectiveXSize = [\n (alignCorners && yHeight > 1) ? xHeight - 1 : xHeight,\n (alignCorners && yWidth > 1) ? xWidth - 1 : xWidth\n ];\n const effectiveYSize = [\n (alignCorners && yHeight > 1) ? yHeight - 1 : yHeight,\n (alignCorners && yWidth > 1) ? yWidth - 1 : yWidth\n ];\n const heightScale = effectiveXSize[0] / effectiveYSize[0];\n const widthScale = effectiveXSize[1] / effectiveYSize[1];\n const invHeightScale = 1 / heightScale;\n const invWidthScale = 1 / widthScale;\n // This defines the size of the window of values around a particular\n // index in dy that we want to search for contributions to dx.\n const winHeight = (Math.ceil(invHeightScale) * 2) + 2;\n const winWidth = (Math.ceil(invWidthScale) * 2) + 2;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX2JpbGluZWFyX2JhY2twcm9wX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvcmVzaXplX2JpbGluZWFyX2JhY2twcm9wX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8sNkJBQTZCO0lBS3hDLFlBQ0ksT0FBeUMsRUFDekMsVUFBNEMsRUFBRSxZQUFxQjtRQU52RSxrQkFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFNekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRyxHQUFHLFVBQVUsQ0FBQztRQUN6QyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBRXBDLDRFQUE0RTtRQUM1RSwyRUFBMkU7UUFDM0UsaUVBQWlFO1FBRWpFLE1BQU0sY0FBYyxHQUFxQjtZQUN2QyxDQUFDLFlBQVksSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDckQsQ0FBQyxZQUFZLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1NBQ25ELENBQUM7UUFFRixNQUFNLGNBQWMsR0FBcUI7WUFDdkMsQ0FBQyxZQUFZLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3JELENBQUMsWUFBWSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNuRCxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDdkMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUVyQyxvRUFBb0U7UUFDcEUsOERBQThEO1FBQzlELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs7OzBDQVVzQixXQUFXO3lDQUNaLFVBQVU7OzZDQUVOLGNBQWM7NENBQ2YsYUFBYTs7b0NBRXJCLFNBQVM7bUNBQ1YsUUFBUTs7Ozs7Ozs7Ozs7Ozs7a0NBY1QsT0FBTzs7Ozs7Ozs7b0NBUUwsTUFBTTs7Ozs7O3NEQU1ZLE9BQU8sR0FBRyxDQUFDOzs7Ozs7cURBTVosTUFBTSxHQUFHLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQThCMUQsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBSZXNpemVCaWxpbmVhckJhY2twcm9wUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ2R5J107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXSA9IFtdO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgZHlTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBpbnB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgYWxpZ25Db3JuZXJzOiBib29sZWFuKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGlucHV0U2hhcGU7XG4gICAgY29uc3QgWywgeEhlaWdodCwgeFdpZHRoLCBdID0gaW5wdXRTaGFwZTtcbiAgICBjb25zdCBbLCB5SGVpZ2h0LCB5V2lkdGhdID0gZHlTaGFwZTtcblxuICAgIC8vIEluIHRoZSBiYWNrd2FyZHMgcGFzcywgd2Ugd2FudCB0byBmaW5kIHRoZSBwaXhlbHMgdGhhdCB3ZXJlIGdlbmVyYXRlZCBmb3JcbiAgICAvLyBlYWNoIHBpeGVsIGluIHRoZSBpbnB1dCBpbWFnZSB0aGUgZm9yd2FyZCBwYXNzIGFuZCBhZGQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICAvLyBjb2VmZmljaWVudCBmcm9tIGR5IHRvIHRoZSBncmFkaWVudCAod2l0aCBzb21lIGludGVycG9sYXRpb24pLlxuXG4gICAgY29uc3QgZWZmZWN0aXZlWFNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIHlIZWlnaHQgPiAxKSA/IHhIZWlnaHQgLSAxIDogeEhlaWdodCxcbiAgICAgIChhbGlnbkNvcm5lcnMgJiYgeVdpZHRoID4gMSkgPyB4V2lkdGggLSAxIDogeFdpZHRoXG4gICAgXTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZVlTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgKGFsaWduQ29ybmVycyAmJiB5SGVpZ2h0ID4gMSkgPyB5SGVpZ2h0IC0gMSA6IHlIZWlnaHQsXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIHlXaWR0aCA+IDEpID8geVdpZHRoIC0gMSA6IHlXaWR0aFxuICAgIF07XG5cbiAgICBjb25zdCBoZWlnaHRTY2FsZSA9IGVmZmVjdGl2ZVhTaXplWzBdIC8gZWZmZWN0aXZlWVNpemVbMF07XG4gICAgY29uc3Qgd2lkdGhTY2FsZSA9IGVmZmVjdGl2ZVhTaXplWzFdIC8gZWZmZWN0aXZlWVNpemVbMV07XG5cbiAgICBjb25zdCBpbnZIZWlnaHRTY2FsZSA9IDEgLyBoZWlnaHRTY2FsZTtcbiAgICBjb25zdCBpbnZXaWR0aFNjYWxlID0gMSAvIHdpZHRoU2NhbGU7XG5cbiAgICAvLyBUaGlzIGRlZmluZXMgdGhlIHNpemUgb2YgdGhlIHdpbmRvdyBvZiB2YWx1ZXMgYXJvdW5kIGEgcGFydGljdWxhclxuICAgIC8vIGluZGV4IGluIGR5IHRoYXQgd2Ugd2FudCB0byBzZWFyY2ggZm9yIGNvbnRyaWJ1dGlvbnMgdG8gZHguXG4gICAgY29uc3Qgd2luSGVpZ2h0ID0gKE1hdGguY2VpbChpbnZIZWlnaHRTY2FsZSkgKiAyKSArIDI7XG4gICAgY29uc3Qgd2luV2lkdGggPSAoTWF0aC5jZWlsKGludldpZHRoU2NhbGUpICogMikgKyAyO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgZCA9IGNvb3Jkc1szXTtcbiAgICAgICAgaW50IHIgPSBjb29yZHNbMV07XG4gICAgICAgIGludCBjID0gY29vcmRzWzJdO1xuXG4gICAgICAgIGZsb2F0IGFjY3VtdWxhdG9yID0gMC4wO1xuXG4gICAgICAgIGNvbnN0IGZsb2F0IGhlaWdodFNjYWxlID0gZmxvYXQoJHtoZWlnaHRTY2FsZX0pO1xuICAgICAgICBjb25zdCBmbG9hdCB3aWR0aFNjYWxlID0gZmxvYXQoJHt3aWR0aFNjYWxlfSk7XG5cbiAgICAgICAgY29uc3QgZmxvYXQgaW52SGVpZ2h0U2NhbGUgPSBmbG9hdCgke2ludkhlaWdodFNjYWxlfSk7XG4gICAgICAgIGNvbnN0IGZsb2F0IGludldpZHRoU2NhbGUgPSBmbG9hdCgke2ludldpZHRoU2NhbGV9KTtcblxuICAgICAgICBjb25zdCBpbnQgd2luSGVpZ2h0ID0gaW50KCR7d2luSGVpZ2h0fSk7XG4gICAgICAgIGNvbnN0IGludCB3aW5XaWR0aCA9IGludCgke3dpbldpZHRofSk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBib3VuZHMgZm9yIHdoZXJlIGluIGR5IHdlIHdpbGwgbG9va1xuICAgICAgICBmbG9hdCBzdGFydFJMZXJwID0gZmxvb3IoZmxvYXQocikgKiBpbnZIZWlnaHRTY2FsZSk7XG4gICAgICAgIGludCBzdGFydER5UiA9IGludChzdGFydFJMZXJwIC0gZmxvYXQod2luSGVpZ2h0IC8gMikpO1xuXG4gICAgICAgIGZsb2F0IHN0YXJ0Q0xlcnAgPSBmbG9vcihmbG9hdChjKSAqIGludldpZHRoU2NhbGUpO1xuICAgICAgICBpbnQgc3RhcnREeUMgPSBpbnQoc3RhcnRDTGVycCAtIGZsb2F0KHdpbldpZHRoIC8gMikpO1xuXG4gICAgICAgIC8vIExvb3Agb3ZlciBkeVxuICAgICAgICBmb3IgKGludCBkeVJPZmZzZXQgPSAwOyBkeVJPZmZzZXQgPCB3aW5IZWlnaHQ7IGR5Uk9mZnNldCsrKSB7XG4gICAgICAgICAgaW50IGR5UiA9IGR5Uk9mZnNldCArIHN0YXJ0RHlSO1xuXG4gICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCB0aGUgd2luZG93IGV4Y2VlZGluZyB0aGUgYm91bmRzIG9mIGR5XG4gICAgICAgICAgaWYgKGR5UiA8IDAgfHwgZHlSID49ICR7eUhlaWdodH0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoaW50IGR5Q09mZnNldCA9IDA7IGR5Q09mZnNldCA8IHdpbldpZHRoOyBkeUNPZmZzZXQrKykge1xuICAgICAgICAgICAgaW50IGR5QyA9IGR5Q09mZnNldCArIHN0YXJ0RHlDO1xuXG4gICAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSB3aW5kb3cgZXhjZWVkaW5nIHRoZSBib3VuZHMgb2YgZHlcbiAgICAgICAgICAgIGlmIChkeUMgPCAwIHx8IGR5QyA+PSAke3lXaWR0aH0pIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsb2F0IGR4UiA9IGZsb2F0KGR5UikgKiBoZWlnaHRTY2FsZTtcbiAgICAgICAgICAgIGludCB0b3BEeFJJbmRleCA9IGludChmbG9vcihkeFIpKTtcbiAgICAgICAgICAgIGludCBib3R0b21EeFJJbmRleCA9IGludChtaW4oY2VpbChkeFIpLCAke3hIZWlnaHQgLSAxfS4wKSk7XG4gICAgICAgICAgICBmbG9hdCBkeFJMZXJwID0gZHhSIC0gZmxvYXQodG9wRHhSSW5kZXgpO1xuICAgICAgICAgICAgZmxvYXQgaW52ZXJzZUR4UkxlcnAgPSAxLjAgLSBkeFJMZXJwO1xuXG4gICAgICAgICAgICBmbG9hdCBkeEMgPSBmbG9hdChkeUMpICogd2lkdGhTY2FsZTtcbiAgICAgICAgICAgIGludCBsZWZ0RHhDSW5kZXggPSBpbnQoZmxvb3IoZHhDKSk7XG4gICAgICAgICAgICBpbnQgcmlnaHREeENJbmRleCA9IGludChtaW4oY2VpbChkeEMpLCAke3hXaWR0aCAtIDF9LjApKTtcbiAgICAgICAgICAgIGZsb2F0IGR4Q0xlcnAgPSBkeEMgLSBmbG9hdChsZWZ0RHhDSW5kZXgpO1xuICAgICAgICAgICAgZmxvYXQgaW52ZXJzZUR4Q0xlcnAgPSAxLjAgLSBkeENMZXJwO1xuXG4gICAgICAgICAgICBpZiAociA9PSB0b3BEeFJJbmRleCAmJiBjID09IGxlZnREeENJbmRleCkge1xuICAgICAgICAgICAgICAvLyB0b3BMZWZ0XG4gICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9XG4gICAgICAgICAgICAgICAgZ2V0RHkoYiwgZHlSLCBkeUMsIGQpICogaW52ZXJzZUR4UkxlcnAgKiBpbnZlcnNlRHhDTGVycDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHIgPT0gdG9wRHhSSW5kZXggJiYgYyA9PSByaWdodER4Q0luZGV4KSB7XG4gICAgICAgICAgICAgIC8vIHRvcFJpZ2h0XG4gICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGdldER5KGIsIGR5UiwgZHlDLCBkKSAqIGludmVyc2VEeFJMZXJwICogZHhDTGVycDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHIgPT0gYm90dG9tRHhSSW5kZXggJiYgYyA9PSBsZWZ0RHhDSW5kZXgpIHtcbiAgICAgICAgICAgICAgLy8gYm90dG9tTGVmdFxuICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBnZXREeShiLCBkeVIsIGR5QywgZCkgKiBkeFJMZXJwICogaW52ZXJzZUR4Q0xlcnA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyID09IGJvdHRvbUR4UkluZGV4ICYmIGMgPT0gcmlnaHREeENJbmRleCkge1xuICAgICAgICAgICAgICAvLyBib3R0b21SaWdodFxuICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBnZXREeShiLCBkeVIsIGR5QywgZCkgKiBkeFJMZXJwICogZHhDTGVycDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIGxvb3Agb3ZlciBkeVxuXG4gICAgICAgIHNldE91dHB1dChhY2N1bXVsYXRvcik7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeBilinearGrad } from '@tensorflow/tfjs-core';\nimport { ResizeBilinearBackpropProgram } from '../resize_bilinear_backprop_gpu';\nexport function resizeBilinearGrad(args) {\n const { inputs, backend, attrs } = args;\n const { images, dy } = inputs;\n const { alignCorners } = attrs;\n const program = new ResizeBilinearBackpropProgram(dy.shape, images.shape, alignCorners);\n return backend.runWebGLProgram(program, [dy], dy.dtype);\n}\nexport const resizeBilinearGradConfig = {\n kernelName: ResizeBilinearGrad,\n backendName: 'webgl',\n kernelFunc: resizeBilinearGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplQmlsaW5lYXJHcmFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1Jlc2l6ZUJpbGluZWFyR3JhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLGtCQUFrQixFQUFnRSxNQUFNLHVCQUF1QixDQUFDO0FBR2xKLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUlsQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUM1QixNQUFNLEVBQUMsWUFBWSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTdCLE1BQU0sT0FBTyxHQUFHLElBQUksNkJBQTZCLENBQzdDLEVBQUUsQ0FBQyxLQUF5QyxFQUM1QyxNQUFNLENBQUMsS0FBeUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVwRSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBaUI7SUFDcEQsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsa0JBQTJDO0NBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZXNpemVCaWxpbmVhckdyYWQsIFJlc2l6ZUJpbGluZWFyR3JhZEF0dHJzLCBSZXNpemVCaWxpbmVhckdyYWRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge1Jlc2l6ZUJpbGluZWFyQmFja3Byb3BQcm9ncmFtfSBmcm9tICcuLi9yZXNpemVfYmlsaW5lYXJfYmFja3Byb3BfZ3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUJpbGluZWFyR3JhZChhcmdzOiB7XG4gIGlucHV0czogUmVzaXplQmlsaW5lYXJHcmFkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogUmVzaXplQmlsaW5lYXJHcmFkQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2ltYWdlcywgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7YWxpZ25Db3JuZXJzfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgUmVzaXplQmlsaW5lYXJCYWNrcHJvcFByb2dyYW0oXG4gICAgICBkeS5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgIGltYWdlcy5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgYWxpZ25Db3JuZXJzKTtcblxuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW2R5XSwgZHkuZHR5cGUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVzaXplQmlsaW5lYXJHcmFkQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlc2l6ZUJpbGluZWFyR3JhZCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHJlc2l6ZUJpbGluZWFyR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ResizeNearestNeighborProgram {\n constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) {\n this.variableNames = ['A'];\n this.outputShape = [];\n const [batch, oldHeight, oldWidth, depth] = inputShape;\n this.outputShape = [batch, newHeight, newWidth, depth];\n const effectiveInSize = [\n (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n ];\n const effectiveOutSize = [\n (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n ];\n // When align corners is false, we rounds the value with floor.\n const roundBase = alignCorners ? '0.5' : '0.0';\n let sourceFracIndexRC;\n if (halfPixelCenters) {\n sourceFracIndexRC =\n `max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC` +\n `, vec2(0.0))`;\n }\n else {\n sourceFracIndexRC = `vec2(yRC) * effectiveInputOverOutputRatioRC`;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX25lYXJlc3RfbmVpZ2hib3JfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9yZXNpemVfbmVhcmVzdF9uZWlnaGJvcl9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUt2QyxZQUNJLFVBQTRDLEVBQUUsU0FBaUIsRUFDL0QsUUFBZ0IsRUFBRSxZQUFxQixFQUFFLGdCQUF5QjtRQU50RSxrQkFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFNekIsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkQsTUFBTSxlQUFlLEdBQXFCO1lBQ3hDLENBQUMsWUFBWSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMzRCxDQUFDLFlBQVksSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7U0FDekQsQ0FBQztRQUVGLE1BQU0sZ0JBQWdCLEdBQXFCO1lBQ3pDLENBQUMsWUFBWSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMzRCxDQUFDLFlBQVksSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7U0FDekQsQ0FBQztRQUVGLCtEQUErRDtRQUMvRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRS9DLElBQUksaUJBQXlCLENBQUM7UUFDOUIsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixpQkFBaUI7Z0JBQ2IsK0RBQStEO29CQUMvRCxjQUFjLENBQUM7U0FDcEI7YUFBTTtZQUNMLGlCQUFpQixHQUFHLDZDQUE2QyxDQUFDO1NBQ25FO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRzs7WUFFUixlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7dUNBQ2IsU0FBUyxPQUFPLFFBQVE7Ozs7Ozs7OzttQ0FTNUIsaUJBQWlCOzs7OzhEQUlVLFNBQVM7Ozs7O0tBS2xFLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgUmVzaXplTmVhcmVzdE5laWdoYm9yUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ0EnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBpbnB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgbmV3SGVpZ2h0OiBudW1iZXIsXG4gICAgICBuZXdXaWR0aDogbnVtYmVyLCBhbGlnbkNvcm5lcnM6IGJvb2xlYW4sIGhhbGZQaXhlbENlbnRlcnM6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBbYmF0Y2gsIG9sZEhlaWdodCwgb2xkV2lkdGgsIGRlcHRoXSA9IGlucHV0U2hhcGU7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IFtiYXRjaCwgbmV3SGVpZ2h0LCBuZXdXaWR0aCwgZGVwdGhdO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlSW5TaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgKGFsaWduQ29ybmVycyAmJiBuZXdIZWlnaHQgPiAxKSA/IG9sZEhlaWdodCAtIDEgOiBvbGRIZWlnaHQsXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIG5ld1dpZHRoID4gMSkgPyBvbGRXaWR0aCAtIDEgOiBvbGRXaWR0aFxuICAgIF07XG5cbiAgICBjb25zdCBlZmZlY3RpdmVPdXRTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgKGFsaWduQ29ybmVycyAmJiBuZXdIZWlnaHQgPiAxKSA/IG5ld0hlaWdodCAtIDEgOiBuZXdIZWlnaHQsXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIG5ld1dpZHRoID4gMSkgPyBuZXdXaWR0aCAtIDEgOiBuZXdXaWR0aFxuICAgIF07XG5cbiAgICAvLyBXaGVuIGFsaWduIGNvcm5lcnMgaXMgZmFsc2UsIHdlIHJvdW5kcyB0aGUgdmFsdWUgd2l0aCBmbG9vci5cbiAgICBjb25zdCByb3VuZEJhc2UgPSBhbGlnbkNvcm5lcnMgPyAnMC41JyA6ICcwLjAnO1xuXG4gICAgbGV0IHNvdXJjZUZyYWNJbmRleFJDOiBzdHJpbmc7XG4gICAgaWYgKGhhbGZQaXhlbENlbnRlcnMpIHtcbiAgICAgIHNvdXJjZUZyYWNJbmRleFJDID1cbiAgICAgICAgICBgbWF4KCh2ZWMyKHlSQykgKyB2ZWMyKDAuNSkpICogZWZmZWN0aXZlSW5wdXRPdmVyT3V0cHV0UmF0aW9SQ2AgK1xuICAgICAgICAgIGAsIHZlYzIoMC4wKSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2VGcmFjSW5kZXhSQyA9IGB2ZWMyKHlSQykgKiBlZmZlY3RpdmVJbnB1dE92ZXJPdXRwdXRSYXRpb1JDYDtcbiAgICB9XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGNvbnN0IHZlYzIgZWZmZWN0aXZlSW5wdXRPdmVyT3V0cHV0UmF0aW9SQyA9IHZlYzIoXG4gICAgICAgICAgJHtlZmZlY3RpdmVJblNpemVbMF0gLyBlZmZlY3RpdmVPdXRTaXplWzBdfSxcbiAgICAgICAgICAke2VmZmVjdGl2ZUluU2l6ZVsxXSAvIGVmZmVjdGl2ZU91dFNpemVbMV19KTtcbiAgICAgIGNvbnN0IHZlYzIgaW5wdXRTaGFwZVJDID0gdmVjMigke29sZEhlaWdodH0uMCwgJHtvbGRXaWR0aH0uMCk7XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgZCA9IGNvb3Jkc1szXTtcbiAgICAgICAgaXZlYzIgeVJDID0gY29vcmRzLnl6O1xuXG4gICAgICAgIC8vIEZyYWN0aW9uYWwgc291cmNlIGluZGV4LlxuICAgICAgICB2ZWMyIHNvdXJjZUZyYWNJbmRleFJDID0gJHtzb3VyY2VGcmFjSW5kZXhSQ307XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY29vcmRpbmF0b3JzIG9mIG5lYXJlc3QgbmVpZ2hib3IgcG9pbnQuXG4gICAgICAgIGl2ZWMyIHNvdXJjZU5lYXJlc3RSQyA9IGl2ZWMyKFxuICAgICAgICAgIG1pbihpbnB1dFNoYXBlUkMgLSAxLjAsIGZsb29yKHNvdXJjZUZyYWNJbmRleFJDICsgJHtyb3VuZEJhc2V9KSkpO1xuICAgICAgICBmbG9hdCBuZXdWYWx1ZSA9IGdldEEoYiwgc291cmNlTmVhcmVzdFJDLngsIHNvdXJjZU5lYXJlc3RSQy55LCBkKTtcblxuICAgICAgICBzZXRPdXRwdXQobmV3VmFsdWUpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ResizeNearestNeighborPackedProgram {\n constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) {\n this.variableNames = ['A'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = [];\n const [batch, oldHeight, oldWidth, depth] = inputShape;\n this.outputShape = [batch, newHeight, newWidth, depth];\n const effectiveInSize = [\n (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n ];\n const effectiveOutSize = [\n (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n ];\n // When align corners is false, we rounds the value with floor.\n const roundBase = alignCorners ? '0.5' : '0.0';\n let sourceFracIndexRC;\n if (halfPixelCenters) {\n sourceFracIndexRC = `max((vec3(yRC) + vec3(0.5)) * ` +\n `effectiveInputOverOutputRatioRC, vec3(0.0))`;\n }\n else {\n sourceFracIndexRC = `vec3(yRC) * effectiveInputOverOutputRatioRC`;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX25lYXJlc3RfbmVpZ2hib3JfcGFja2VkX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvcmVzaXplX25lYXJlc3RfbmVpZ2hib3JfcGFja2VkX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8sa0NBQWtDO0lBTzdDLFlBQ0ksVUFBNEMsRUFBRSxTQUFpQixFQUMvRCxRQUFnQixFQUFFLFlBQXFCLEVBQUUsZ0JBQXlCO1FBUnRFLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQU16QixNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV2RCxNQUFNLGVBQWUsR0FBcUI7WUFDeEMsQ0FBQyxZQUFZLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzNELENBQUMsWUFBWSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUN6RCxDQUFDO1FBRUYsTUFBTSxnQkFBZ0IsR0FBcUI7WUFDekMsQ0FBQyxZQUFZLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzNELENBQUMsWUFBWSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUN6RCxDQUFDO1FBRUYsK0RBQStEO1FBQy9ELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDL0MsSUFBSSxpQkFBeUIsQ0FBQztRQUM5QixJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLGlCQUFpQixHQUFHLGdDQUFnQztnQkFDaEQsNkNBQTZDLENBQUM7U0FDbkQ7YUFBTTtZQUNMLGlCQUFpQixHQUFHLDZDQUE2QyxDQUFDO1NBQ25FO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRzs7WUFFUixlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDeEMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQzt1Q0FDYixTQUFTLE9BQU8sUUFBUTt1Q0FDeEIsUUFBUTs7Ozs7Ozs7Ozs7Ozs7bUNBY1osaUJBQWlCOzs7OzhEQUlVLFNBQVM7OztnQ0FHdkMsS0FBSyxHQUFHLENBQUM7dUNBQ0YsUUFBUSxHQUFHLENBQUM7Ozs7Ozs7Ozs7Ozs7S0FhOUMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBSZXNpemVOZWFyZXN0TmVpZ2hib3JQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnQSddO1xuICBwYWNrZWRJbnB1dHMgPSB0cnVlO1xuICBwYWNrZWRPdXRwdXQgPSB0cnVlO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIGlucHV0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBuZXdIZWlnaHQ6IG51bWJlcixcbiAgICAgIG5ld1dpZHRoOiBudW1iZXIsIGFsaWduQ29ybmVyczogYm9vbGVhbiwgaGFsZlBpeGVsQ2VudGVyczogYm9vbGVhbikge1xuICAgIGNvbnN0IFtiYXRjaCwgb2xkSGVpZ2h0LCBvbGRXaWR0aCwgZGVwdGhdID0gaW5wdXRTaGFwZTtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gW2JhdGNoLCBuZXdIZWlnaHQsIG5ld1dpZHRoLCBkZXB0aF07XG5cbiAgICBjb25zdCBlZmZlY3RpdmVJblNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIG5ld0hlaWdodCA+IDEpID8gb2xkSGVpZ2h0IC0gMSA6IG9sZEhlaWdodCxcbiAgICAgIChhbGlnbkNvcm5lcnMgJiYgbmV3V2lkdGggPiAxKSA/IG9sZFdpZHRoIC0gMSA6IG9sZFdpZHRoXG4gICAgXTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZU91dFNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIG5ld0hlaWdodCA+IDEpID8gbmV3SGVpZ2h0IC0gMSA6IG5ld0hlaWdodCxcbiAgICAgIChhbGlnbkNvcm5lcnMgJiYgbmV3V2lkdGggPiAxKSA/IG5ld1dpZHRoIC0gMSA6IG5ld1dpZHRoXG4gICAgXTtcblxuICAgIC8vIFdoZW4gYWxpZ24gY29ybmVycyBpcyBmYWxzZSwgd2Ugcm91bmRzIHRoZSB2YWx1ZSB3aXRoIGZsb29yLlxuICAgIGNvbnN0IHJvdW5kQmFzZSA9IGFsaWduQ29ybmVycyA/ICcwLjUnIDogJzAuMCc7XG4gICAgbGV0IHNvdXJjZUZyYWNJbmRleFJDOiBzdHJpbmc7XG4gICAgaWYgKGhhbGZQaXhlbENlbnRlcnMpIHtcbiAgICAgIHNvdXJjZUZyYWNJbmRleFJDID0gYG1heCgodmVjMyh5UkMpICsgdmVjMygwLjUpKSAqIGAgK1xuICAgICAgICAgIGBlZmZlY3RpdmVJbnB1dE92ZXJPdXRwdXRSYXRpb1JDLCB2ZWMzKDAuMCkpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc291cmNlRnJhY0luZGV4UkMgPSBgdmVjMyh5UkMpICogZWZmZWN0aXZlSW5wdXRPdmVyT3V0cHV0UmF0aW9SQ2A7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIGNvbnN0IHZlYzMgZWZmZWN0aXZlSW5wdXRPdmVyT3V0cHV0UmF0aW9SQyA9IHZlYzMoXG4gICAgICAgICAgJHtlZmZlY3RpdmVJblNpemVbMF0gLyBlZmZlY3RpdmVPdXRTaXplWzBdfSxcbiAgICAgICAgICAke2VmZmVjdGl2ZUluU2l6ZVsxXSAvIGVmZmVjdGl2ZU91dFNpemVbMV19LFxuICAgICAgICAgICR7ZWZmZWN0aXZlSW5TaXplWzFdIC8gZWZmZWN0aXZlT3V0U2l6ZVsxXX0pO1xuICAgICAgY29uc3QgdmVjMyBpbnB1dFNoYXBlUkMgPSB2ZWMzKCR7b2xkSGVpZ2h0fS4wLCAke29sZFdpZHRofS4wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7b2xkV2lkdGh9LjApO1xuXG4gICAgICBmbG9hdCBnZXRBVmFsdWUoaW50IGIsIGludCByLCBpbnQgYywgaW50IGQpIHtcbiAgICAgICAgcmV0dXJuIGdldENoYW5uZWwoZ2V0QShiLCByLCBjLCBkKSwgdmVjMihjLCBkKSk7XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgaXZlYzQgY29vcmRzID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgIGludCBiID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgZCA9IGNvb3Jkc1szXTtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHZhbHVlcyBmb3IgbmV4dCBjb2x1bW4gaW4geVJDLnouXG4gICAgICAgIGl2ZWMzIHlSQyA9IGNvb3Jkcy55enogKyBpdmVjMygwLCAwLCAxKTtcblxuICAgICAgICAvLyBGcmFjdGlvbmFsIHNvdXJjZSBpbmRleC5cbiAgICAgICAgdmVjMyBzb3VyY2VGcmFjSW5kZXhSQyA9ICR7c291cmNlRnJhY0luZGV4UkN9O1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIGNvb3JkaW5hdG9ycyBvZiBuZWFyZXN0IG5laWdoYm9yIHBvaW50LlxuICAgICAgICBpdmVjMyBzb3VyY2VOZWFyZXN0UkMgPSBpdmVjMyhcbiAgICAgICAgICBtaW4oaW5wdXRTaGFwZVJDIC0gMS4wLCBmbG9vcihzb3VyY2VGcmFjSW5kZXhSQyArICR7cm91bmRCYXNlfSkpKTtcblxuICAgICAgICAvLyBTaG91bGQgd2UgY2FsY3VsYXRlIG5leHQgY29sdW1uIGFuZCByb3cgZWxlbWVudHMgaW4gMngyIHBhY2tlZCBjZWxsLlxuICAgICAgICBib29sIGhhc05leHRDb2wgPSBkIDwgJHtkZXB0aCAtIDF9O1xuICAgICAgICBib29sIGhhc05leHRSb3cgPSBjb29yZHMueiA8ICR7bmV3V2lkdGggLSAxfTtcblxuICAgICAgICB2ZWM0IG5ld1ZhbHVlID0gdmVjNChcbiAgICAgICAgICBnZXRBVmFsdWUoYiwgc291cmNlTmVhcmVzdFJDLngsIHNvdXJjZU5lYXJlc3RSQy55LCBkKSxcbiAgICAgICAgICBoYXNOZXh0Q29sID8gZ2V0QVZhbHVlKGIsIHNvdXJjZU5lYXJlc3RSQy54LCBzb3VyY2VOZWFyZXN0UkMueSwgZCArIDEpXG4gICAgICAgICAgICAgICAgICAgICA6IDAuMCxcbiAgICAgICAgICBoYXNOZXh0Um93ID8gZ2V0QVZhbHVlKGIsIHNvdXJjZU5lYXJlc3RSQy54LCBzb3VyY2VOZWFyZXN0UkMueiwgZClcbiAgICAgICAgICAgICAgICAgICAgIDogMC4wLFxuICAgICAgICAgIChoYXNOZXh0Um93ICYmIGhhc05leHRDb2wpID9cbiAgICAgICAgICAgIGdldEFWYWx1ZShiLCBzb3VyY2VOZWFyZXN0UkMueCwgc291cmNlTmVhcmVzdFJDLnosIGQgKyAxKSA6IDAuMCk7XG5cbiAgICAgICAgc2V0T3V0cHV0KG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, ResizeNearestNeighbor } from '@tensorflow/tfjs-core';\nimport { ResizeNearestNeighborProgram } from '../resize_nearest_neighbor_gpu';\nimport { ResizeNearestNeighborPackedProgram } from '../resize_nearest_neighbor_packed_gpu';\nexport function resizeNearestNeighbor(args) {\n const { inputs, backend, attrs } = args;\n const { images } = inputs;\n const { alignCorners, halfPixelCenters, size } = attrs;\n const [newHeight, newWidth] = size;\n const program = env().getBool('WEBGL_PACK_IMAGE_OPERATIONS') ?\n new ResizeNearestNeighborPackedProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters) :\n new ResizeNearestNeighborProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters);\n return backend.runWebGLProgram(program, [images], images.dtype);\n}\nexport const resizeNearestNeighborConfig = {\n kernelName: ResizeNearestNeighbor,\n backendName: 'webgl',\n kernelFunc: resizeNearestNeighbor\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplTmVhcmVzdE5laWdoYm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1Jlc2l6ZU5lYXJlc3ROZWlnaGJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUE0QixxQkFBcUIsRUFBc0UsTUFBTSx1QkFBdUIsQ0FBQztBQUdoSyxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUV6RixNQUFNLFVBQVUscUJBQXFCLENBQUMsSUFJckM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN4QixNQUFNLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyRCxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUVuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksa0NBQWtDLENBQ2xDLE1BQU0sQ0FBQyxLQUF5QyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQ3JFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSw0QkFBNEIsQ0FDNUIsTUFBTSxDQUFDLEtBQXlDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFDckUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEMsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQWlCO0lBQ3ZELFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLHFCQUE4QztDQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2VudiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZXNpemVOZWFyZXN0TmVpZ2hib3IsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckF0dHJzLCBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge1Jlc2l6ZU5lYXJlc3ROZWlnaGJvclByb2dyYW19IGZyb20gJy4uL3Jlc2l6ZV9uZWFyZXN0X25laWdoYm9yX2dwdSc7XG5pbXBvcnQge1Jlc2l6ZU5lYXJlc3ROZWlnaGJvclBhY2tlZFByb2dyYW19IGZyb20gJy4uL3Jlc2l6ZV9uZWFyZXN0X25laWdoYm9yX3BhY2tlZF9ncHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplTmVhcmVzdE5laWdoYm9yKGFyZ3M6IHtcbiAgaW5wdXRzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7aW1hZ2VzfSA9IGlucHV0cztcbiAgY29uc3Qge2FsaWduQ29ybmVycywgaGFsZlBpeGVsQ2VudGVycywgc2l6ZX0gPSBhdHRycztcblxuICBjb25zdCBbbmV3SGVpZ2h0LCBuZXdXaWR0aF0gPSBzaXplO1xuXG4gIGNvbnN0IHByb2dyYW0gPSBlbnYoKS5nZXRCb29sKCdXRUJHTF9QQUNLX0lNQUdFX09QRVJBVElPTlMnKSA/XG4gICAgICBuZXcgUmVzaXplTmVhcmVzdE5laWdoYm9yUGFja2VkUHJvZ3JhbShcbiAgICAgICAgICBpbWFnZXMuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG5ld0hlaWdodCwgbmV3V2lkdGgsXG4gICAgICAgICAgYWxpZ25Db3JuZXJzLCBoYWxmUGl4ZWxDZW50ZXJzKSA6XG4gICAgICBuZXcgUmVzaXplTmVhcmVzdE5laWdoYm9yUHJvZ3JhbShcbiAgICAgICAgICBpbWFnZXMuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG5ld0hlaWdodCwgbmV3V2lkdGgsXG4gICAgICAgICAgYWxpZ25Db3JuZXJzLCBoYWxmUGl4ZWxDZW50ZXJzKTtcbiAgcmV0dXJuIGJhY2tlbmQucnVuV2ViR0xQcm9ncmFtKHByb2dyYW0sIFtpbWFnZXNdLCBpbWFnZXMuZHR5cGUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVzaXplTmVhcmVzdE5laWdoYm9yQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlc2l6ZU5lYXJlc3ROZWlnaGJvcixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHJlc2l6ZU5lYXJlc3ROZWlnaGJvciBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class ResizeNearestNeigborBackpropProgram {\n constructor(dyShape, inputShape, alignCorners) {\n this.variableNames = ['dy'];\n this.outputShape = [];\n this.outputShape = inputShape;\n const [, xHeight, xWidth,] = inputShape;\n const [, yHeight, yWidth] = dyShape;\n // In the backwards pass, we want to find the pixels that were generated for\n // each pixel in the input image the forward pass and add the corresponding\n // coefficient from dy to the gradient (with some interpolation).\n const effectiveXSize = [\n (alignCorners && yHeight > 1) ? xHeight - 1 : xHeight,\n (alignCorners && yWidth > 1) ? xWidth - 1 : xWidth\n ];\n const effectiveYSize = [\n (alignCorners && yHeight > 1) ? yHeight - 1 : yHeight,\n (alignCorners && yWidth > 1) ? yWidth - 1 : yWidth\n ];\n const heightScale = effectiveXSize[0] / effectiveYSize[0];\n const widthScale = effectiveXSize[1] / effectiveYSize[1];\n const invHeightScale = 1 / heightScale;\n const invWidthScale = 1 / widthScale;\n // This defines the size of the window of values around a particular\n // index in dy that we want to search for contributions to dx.\n const winHeight = (Math.ceil(invHeightScale) * 2) + 2;\n const winWidth = (Math.ceil(invWidthScale) * 2) + 2;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX25lYXJlc3RfbmVpZ2hib3JfYmFja3Byb3BfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9yZXNpemVfbmVhcmVzdF9uZWlnaGJvcl9iYWNrcHJvcF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxPQUFPLG1DQUFtQztJQUs5QyxZQUNJLE9BQXlDLEVBQ3pDLFVBQTRDLEVBQUUsWUFBcUI7UUFOdkUsa0JBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBTXpCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUcsR0FBRyxVQUFVLENBQUM7UUFDekMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUVwQyw0RUFBNEU7UUFDNUUsMkVBQTJFO1FBQzNFLGlFQUFpRTtRQUVqRSxNQUFNLGNBQWMsR0FBcUI7WUFDdkMsQ0FBQyxZQUFZLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3JELENBQUMsWUFBWSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNuRCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQXFCO1lBQ3ZDLENBQUMsWUFBWSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztZQUNyRCxDQUFDLFlBQVksSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07U0FDbkQsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RCxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7UUFFckMsb0VBQW9FO1FBQ3BFLDhEQUE4RDtRQUM5RCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLFFBQVEsR0FBRzs7Ozs7Ozs7OzswQ0FVc0IsV0FBVzt5Q0FDWixVQUFVOzs2Q0FFTixjQUFjOzRDQUNmLGFBQWE7O29DQUVyQixTQUFTO21DQUNWLFFBQVE7Ozs7Ozs7Ozs7Ozs7O2tDQWNULE9BQU87Ozs7Ozs7O29DQVFMLE1BQU07Ozs7O3NCQUtwQixjQUFjLENBQUMsQ0FBQyxDQUFDO3NDQUNELGNBQWMsQ0FBQyxDQUFDLENBQUM7Ozt3QkFHL0IsY0FBYyxDQUFDLENBQUMsQ0FBQzt3Q0FDRCxjQUFjLENBQUMsQ0FBQyxDQUFDOzs7NEJBRzdCLE9BQU87a0JBQ2pCLFlBQVk7Ozs7NEJBSUYsTUFBTTtrQkFDaEIsWUFBWTs7Ozs7Ozs7Ozs7O0tBWXpCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgUmVzaXplTmVhcmVzdE5laWdib3JCYWNrcHJvcFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydkeSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIGR5U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgaW5wdXRTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGFsaWduQ29ybmVyczogYm9vbGVhbikge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlO1xuICAgIGNvbnN0IFssIHhIZWlnaHQsIHhXaWR0aCwgXSA9IGlucHV0U2hhcGU7XG4gICAgY29uc3QgWywgeUhlaWdodCwgeVdpZHRoXSA9IGR5U2hhcGU7XG5cbiAgICAvLyBJbiB0aGUgYmFja3dhcmRzIHBhc3MsIHdlIHdhbnQgdG8gZmluZCB0aGUgcGl4ZWxzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgZm9yXG4gICAgLy8gZWFjaCBwaXhlbCBpbiB0aGUgaW5wdXQgaW1hZ2UgdGhlIGZvcndhcmQgcGFzcyBhbmQgYWRkIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgLy8gY29lZmZpY2llbnQgZnJvbSBkeSB0byB0aGUgZ3JhZGllbnQgKHdpdGggc29tZSBpbnRlcnBvbGF0aW9uKS5cblxuICAgIGNvbnN0IGVmZmVjdGl2ZVhTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgKGFsaWduQ29ybmVycyAmJiB5SGVpZ2h0ID4gMSkgPyB4SGVpZ2h0IC0gMSA6IHhIZWlnaHQsXG4gICAgICAoYWxpZ25Db3JuZXJzICYmIHlXaWR0aCA+IDEpID8geFdpZHRoIC0gMSA6IHhXaWR0aFxuICAgIF07XG5cbiAgICBjb25zdCBlZmZlY3RpdmVZU2l6ZTogW251bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIChhbGlnbkNvcm5lcnMgJiYgeUhlaWdodCA+IDEpID8geUhlaWdodCAtIDEgOiB5SGVpZ2h0LFxuICAgICAgKGFsaWduQ29ybmVycyAmJiB5V2lkdGggPiAxKSA/IHlXaWR0aCAtIDEgOiB5V2lkdGhcbiAgICBdO1xuXG4gICAgY29uc3QgaGVpZ2h0U2NhbGUgPSBlZmZlY3RpdmVYU2l6ZVswXSAvIGVmZmVjdGl2ZVlTaXplWzBdO1xuICAgIGNvbnN0IHdpZHRoU2NhbGUgPSBlZmZlY3RpdmVYU2l6ZVsxXSAvIGVmZmVjdGl2ZVlTaXplWzFdO1xuXG4gICAgY29uc3QgaW52SGVpZ2h0U2NhbGUgPSAxIC8gaGVpZ2h0U2NhbGU7XG4gICAgY29uc3QgaW52V2lkdGhTY2FsZSA9IDEgLyB3aWR0aFNjYWxlO1xuXG4gICAgLy8gVGhpcyBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSB3aW5kb3cgb2YgdmFsdWVzIGFyb3VuZCBhIHBhcnRpY3VsYXJcbiAgICAvLyBpbmRleCBpbiBkeSB0aGF0IHdlIHdhbnQgdG8gc2VhcmNoIGZvciBjb250cmlidXRpb25zIHRvIGR4LlxuICAgIGNvbnN0IHdpbkhlaWdodCA9IChNYXRoLmNlaWwoaW52SGVpZ2h0U2NhbGUpICogMikgKyAyO1xuICAgIGNvbnN0IHdpbldpZHRoID0gKE1hdGguY2VpbChpbnZXaWR0aFNjYWxlKSAqIDIpICsgMjtcblxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBpbnQgYiA9IGNvb3Jkc1swXTtcbiAgICAgICAgaW50IGQgPSBjb29yZHNbM107XG4gICAgICAgIGludCByID0gY29vcmRzWzFdO1xuICAgICAgICBpbnQgYyA9IGNvb3Jkc1syXTtcblxuICAgICAgICBmbG9hdCBhY2N1bXVsYXRvciA9IDAuMDtcblxuICAgICAgICBjb25zdCBmbG9hdCBoZWlnaHRTY2FsZSA9IGZsb2F0KCR7aGVpZ2h0U2NhbGV9KTtcbiAgICAgICAgY29uc3QgZmxvYXQgd2lkdGhTY2FsZSA9IGZsb2F0KCR7d2lkdGhTY2FsZX0pO1xuXG4gICAgICAgIGNvbnN0IGZsb2F0IGludkhlaWdodFNjYWxlID0gZmxvYXQoJHtpbnZIZWlnaHRTY2FsZX0pO1xuICAgICAgICBjb25zdCBmbG9hdCBpbnZXaWR0aFNjYWxlID0gZmxvYXQoJHtpbnZXaWR0aFNjYWxlfSk7XG5cbiAgICAgICAgY29uc3QgaW50IHdpbkhlaWdodCA9IGludCgke3dpbkhlaWdodH0pO1xuICAgICAgICBjb25zdCBpbnQgd2luV2lkdGggPSBpbnQoJHt3aW5XaWR0aH0pO1xuXG4gICAgICAgIC8vIENvbXB1dGUgYm91bmRzIGZvciB3aGVyZSBpbiBkeSB3ZSB3aWxsIGxvb2tcbiAgICAgICAgZmxvYXQgc3RhcnRSTGVycCA9IGZsb29yKGZsb2F0KHIpICogaW52SGVpZ2h0U2NhbGUpO1xuICAgICAgICBpbnQgc3RhcnREeVIgPSBpbnQoZmxvb3Ioc3RhcnRSTGVycCAtIGZsb2F0KHdpbkhlaWdodCAvIDIpKSk7XG5cbiAgICAgICAgZmxvYXQgc3RhcnRDTGVycCA9IGZsb29yKGZsb2F0KGMpICogaW52V2lkdGhTY2FsZSk7XG4gICAgICAgIGludCBzdGFydER5QyA9IGludChmbG9vcihzdGFydENMZXJwIC0gZmxvYXQod2luV2lkdGggLyAyKSkpO1xuXG4gICAgICAgIC8vIExvb3Agb3ZlciBkeVxuICAgICAgICBmb3IgKGludCBkeVJPZmZzZXQgPSAwOyBkeVJPZmZzZXQgPCB3aW5IZWlnaHQ7IGR5Uk9mZnNldCsrKSB7XG4gICAgICAgICAgaW50IGR5UiA9IGR5Uk9mZnNldCArIHN0YXJ0RHlSO1xuXG4gICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCB0aGUgd2luZG93IGV4Y2VlZGluZyB0aGUgYm91bmRzIG9mIGR5XG4gICAgICAgICAgaWYgKGR5UiA8IDAgfHwgZHlSID49ICR7eUhlaWdodH0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoaW50IGR5Q09mZnNldCA9IDA7IGR5Q09mZnNldCA8IHdpbldpZHRoOyBkeUNPZmZzZXQrKykge1xuICAgICAgICAgICAgaW50IGR5QyA9IGR5Q09mZnNldCArIHN0YXJ0RHlDO1xuXG4gICAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSB3aW5kb3cgZXhjZWVkaW5nIHRoZSBib3VuZHMgb2YgZHlcbiAgICAgICAgICAgIGlmIChkeUMgPCAwIHx8IGR5QyA+PSAke3lXaWR0aH0pIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsb2F0IHNvdXJjZUZyYWNSb3cgPVxuICAgICAgICAgICAgICBmbG9hdCgke2VmZmVjdGl2ZVhTaXplWzBdfSkgKlxuICAgICAgICAgICAgICAgIChmbG9hdChkeVIpIC8gZmxvYXQoJHtlZmZlY3RpdmVZU2l6ZVswXX0pKTtcblxuICAgICAgICAgICAgZmxvYXQgc291cmNlRnJhY0NvbCA9XG4gICAgICAgICAgICAgICAgZmxvYXQoJHtlZmZlY3RpdmVYU2l6ZVsxXX0pICpcbiAgICAgICAgICAgICAgICAgIChmbG9hdChkeUMpIC8gZmxvYXQoJHtlZmZlY3RpdmVZU2l6ZVsxXX0pKTtcblxuICAgICAgICAgICAgaW50IHNvdXJjZU5lYXJlc3RSb3cgPSBpbnQobWluKFxuICAgICAgICAgICAgICAgIGZsb2F0KGludCgke3hIZWlnaHR9KSAtIDEpLFxuICAgICAgICAgICAgICAgICR7YWxpZ25Db3JuZXJzfSA/IGZsb2F0KHJvdW5kKHNvdXJjZUZyYWNSb3cpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQoZmxvb3Ioc291cmNlRnJhY1JvdykpKSk7XG5cbiAgICAgICAgICAgIGludCBzb3VyY2VOZWFyZXN0Q29sID0gaW50KG1pbihcbiAgICAgICAgICAgICAgICBmbG9hdChpbnQoJHt4V2lkdGh9KSAtIDEpLFxuICAgICAgICAgICAgICAgICR7YWxpZ25Db3JuZXJzfSA/IGZsb2F0KHJvdW5kKHNvdXJjZUZyYWNDb2wpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQoZmxvb3Ioc291cmNlRnJhY0NvbCkpKSk7XG5cbiAgICAgICAgICAgIGlmIChyID09IHNvdXJjZU5lYXJlc3RSb3cgJiYgYyA9PSBzb3VyY2VOZWFyZXN0Q29sKSB7XG4gICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGdldER5KGIsIGR5UiwgZHlDLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIGxvb3Agb3ZlciBkeVxuXG4gICAgICAgIHNldE91dHB1dChhY2N1bXVsYXRvcik7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeNearestNeighborGrad } from '@tensorflow/tfjs-core';\nimport { ResizeNearestNeigborBackpropProgram } from '../resize_nearest_neighbor_backprop_gpu';\nexport function resizeNearestNeighborGrad(args) {\n const { inputs, backend, attrs } = args;\n const { images, dy } = inputs;\n const { alignCorners } = attrs;\n const program = new ResizeNearestNeigborBackpropProgram(dy.shape, images.shape, alignCorners);\n return backend.runWebGLProgram(program, [dy], dy.dtype);\n}\nexport const resizeNearestNeighborGradConfig = {\n kernelName: ResizeNearestNeighborGrad,\n backendName: 'webgl',\n kernelFunc: resizeNearestNeighborGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9SZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIseUJBQXlCLEVBQThFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkssT0FBTyxFQUFDLG1DQUFtQyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFNUYsTUFBTSxVQUFVLHlCQUF5QixDQUFDLElBSXpDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxNQUFNLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzVCLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQ0FBbUMsQ0FDbkQsRUFBRSxDQUFDLEtBQXlDLEVBQzVDLE1BQU0sQ0FBQyxLQUF5QyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFpQjtJQUMzRCxVQUFVLEVBQUUseUJBQXlCO0lBQ3JDLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSx5QkFBa0Q7Q0FDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWRBdHRycywgUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7UmVzaXplTmVhcmVzdE5laWdib3JCYWNrcHJvcFByb2dyYW19IGZyb20gJy4uL3Jlc2l6ZV9uZWFyZXN0X25laWdoYm9yX2JhY2twcm9wX2dwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkKGFyZ3M6IHtcbiAgaW5wdXRzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbWFnZXMsIGR5fSA9IGlucHV0cztcbiAgY29uc3Qge2FsaWduQ29ybmVyc30gPSBhdHRycztcblxuICBjb25zdCBwcm9ncmFtID0gbmV3IFJlc2l6ZU5lYXJlc3ROZWlnYm9yQmFja3Byb3BQcm9ncmFtKFxuICAgICAgZHkuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBpbWFnZXMuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGFsaWduQ29ybmVycyk7XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShwcm9ncmFtLCBbZHldLCBkeS5kdHlwZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiByZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class ReverseProgram {\n constructor(xShape, axis) {\n this.variableNames = ['x'];\n const rank = xShape.length;\n if (rank > 4) {\n throw new Error(`WebGL backend: Reverse of rank-${rank} tensor is not yet supported`);\n }\n this.outputShape = xShape;\n if (rank === 1) {\n this.userCode = `\n void main() {\n int coord = getOutputCoords();\n setOutput(getX(${xShape[0]} - coord - 1));\n }\n `;\n return;\n }\n const getInCoord = (i) => {\n if (axis.indexOf(i) !== -1 && xShape[i] !== 1) {\n return `${xShape[i]} - coords[${i}] - 1`;\n }\n return `coords[${i}]`;\n };\n const inCoords = xShape.map((_, i) => getInCoord(i)).join(',');\n const type = getCoordsDataType(rank);\n this.userCode = `\n void main() {\n ${type} coords = getOutputCoords();\n setOutput(getX(${inCoords}));\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3JldmVyc2VfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQVksTUFBZ0IsRUFBRSxJQUFjO1FBSjVDLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUtwQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNaLE1BQU0sSUFBSSxLQUFLLENBQ1gsa0NBQWtDLElBQUksOEJBQThCLENBQUMsQ0FBQztTQUMzRTtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBRTFCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLEdBQUc7OzsyQkFHSyxNQUFNLENBQUMsQ0FBQyxDQUFDOztPQUU3QixDQUFDO1lBQ0YsT0FBTztTQUNSO1FBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUMvQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDN0MsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQzthQUMxQztZQUNELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUN4QixDQUFDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxRQUFRLEdBQUc7O1VBRVYsSUFBSTt5QkFDVyxRQUFROztLQUU1QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFJldmVyc2VQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoeFNoYXBlOiBudW1iZXJbXSwgYXhpczogbnVtYmVyW10pIHtcbiAgICBjb25zdCByYW5rID0geFNoYXBlLmxlbmd0aDtcbiAgICBpZiAocmFuayA+IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgV2ViR0wgYmFja2VuZDogUmV2ZXJzZSBvZiByYW5rLSR7cmFua30gdGVuc29yIGlzIG5vdCB5ZXQgc3VwcG9ydGVkYCk7XG4gICAgfVxuICAgIHRoaXMub3V0cHV0U2hhcGUgPSB4U2hhcGU7XG5cbiAgICBpZiAocmFuayA9PT0gMSkge1xuICAgICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgIGludCBjb29yZCA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIHNldE91dHB1dChnZXRYKCR7eFNoYXBlWzBdfSAtIGNvb3JkIC0gMSkpO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBnZXRJbkNvb3JkID0gKGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGF4aXMuaW5kZXhPZihpKSAhPT0gLTEgJiYgeFNoYXBlW2ldICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBgJHt4U2hhcGVbaV19IC0gY29vcmRzWyR7aX1dIC0gMWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYGNvb3Jkc1ske2l9XWA7XG4gICAgfTtcbiAgICBjb25zdCBpbkNvb3JkcyA9IHhTaGFwZS5tYXAoKF8sIGkpID0+IGdldEluQ29vcmQoaSkpLmpvaW4oJywnKTtcbiAgICBjb25zdCB0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUocmFuayk7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke3R5cGV9IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBzZXRPdXRwdXQoZ2V0WCgke2luQ29vcmRzfSkpO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getChannels } from './packing_util';\nimport { getCoordsDataType } from './shader_compiler';\nexport class ReversePackedProgram {\n constructor(xShape, axis) {\n this.variableNames = ['x'];\n this.packedInputs = true;\n this.packedOutput = true;\n const rank = xShape.length;\n if (rank > 4) {\n throw new Error(`WebGL backend: Reverse of rank-${rank} tensor is not yet supported`);\n }\n this.outputShape = xShape;\n const channels = getChannels('rc', rank);\n const nextColumn = `${channels[rank - 1]} + 1 < ${this.outputShape[rank - 1]}`;\n const nextRow = `${channels[rank - 2]} + 1 < ${this.outputShape[rank - 2]}`;\n const type = getCoordsDataType(rank);\n if (rank === 1) {\n 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 `;\n }\n else {\n 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 `;\n }\n function getR(channels) {\n return getChannel(channels);\n }\n function getG(channels) {\n channels[rank - 1] = '(' + channels[rank - 1] + ` + 1)`;\n return getChannel(channels);\n }\n function getB(channels) {\n channels[rank - 2] = '(' + channels[rank - 2] + ` + 1)`;\n return getChannel(channels);\n }\n function getA(channels) {\n channels[rank - 1] = '(' + channels[rank - 1] + ` + 1)`;\n channels[rank - 2] = '(' + channels[rank - 2] + ` + 1)`;\n return getChannel(channels);\n }\n function getChannel(channels) {\n const inCoordsArray = xShape.map((_, i) => getInCoord(i, channels));\n const inCoords = inCoordsArray.join(',');\n const innerDims = inCoordsArray.slice(-2).join(',');\n return `getChannel(getX(${inCoords}), vec2(${innerDims}))`;\n }\n function getInCoord(i, channels1) {\n if (axis.indexOf(i) !== -1 && xShape[i] !== 1) {\n return `${xShape[i]} - ${channels1[i]} - 1`;\n }\n else {\n return `${channels1[i]}`;\n }\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9yZXZlcnNlX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE1BQU0sT0FBTyxvQkFBb0I7SUFPL0IsWUFBWSxNQUFnQixFQUFFLElBQWM7UUFONUMsa0JBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBR3RCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBR2xCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FDWCxrQ0FBa0MsSUFBSSw4QkFBOEIsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLFVBQVUsR0FDWixHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RSxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FB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ZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q2hhbm5lbHN9IGZyb20gJy4vcGFja2luZ191dGlsJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFJldmVyc2VQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsneCddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIHBhY2tlZElucHV0cyA9IHRydWU7XG4gIHBhY2tlZE91dHB1dCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoeFNoYXBlOiBudW1iZXJbXSwgYXhpczogbnVtYmVyW10pIHtcbiAgICBjb25zdCByYW5rID0geFNoYXBlLmxlbmd0aDtcbiAgICBpZiAocmFuayA+IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgV2ViR0wgYmFja2VuZDogUmV2ZXJzZSBvZiByYW5rLSR7cmFua30gdGVuc29yIGlzIG5vdCB5ZXQgc3VwcG9ydGVkYCk7XG4gICAgfVxuICAgIHRoaXMub3V0cHV0U2hhcGUgPSB4U2hhcGU7XG4gICAgY29uc3QgY2hhbm5lbHMgPSBnZXRDaGFubmVscygncmMnLCByYW5rKTtcbiAgICBjb25zdCBuZXh0Q29sdW1uID1cbiAgICAgICAgYCR7Y2hhbm5lbHNbcmFuayAtIDFdfSArIDEgPCAke3RoaXMub3V0cHV0U2hhcGVbcmFuayAtIDFdfWA7XG4gICAgY29uc3QgbmV4dFJvdyA9IGAke2NoYW5uZWxzW3JhbmsgLSAyXX0gKyAxIDwgJHt0aGlzLm91dHB1dFNoYXBlW3JhbmsgLSAyXX1gO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRDb29yZHNEYXRhVHlwZShyYW5rKTtcbiAgICBpZiAocmFuayA9PT0gMSkge1xuICAgICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgICAgdm9pZCBtYWluKCl7XG4gICAgICAgICAgaW50IHJjID0gZ2V0T3V0cHV0Q29vcmRzKCk7XG4gICAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAuKTtcbiAgICAgICAgICByZXN1bHQuciA9IGdldENoYW5uZWwoZ2V0WCgke3hTaGFwZVswXX0gLSByYyAtIDEpLFxuICAgICAgICAgICAgJHt4U2hhcGVbMF19IC0gcmMgLSAxKTtcbiAgICAgICAgICBpZigke25leHRDb2x1bW59KXtcbiAgICAgICAgICAgICAgcmVzdWx0LmcgPSBnZXRDaGFubmVsKGdldFgoJHt4U2hhcGVbMF19IC0gKHJjICArIDEpIC0gMSksXG4gICAgICAgICAgICAgICAgJHt4U2hhcGVbMF19IC0gKHJjICArIDEpIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldE91dHB1dChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgJHt0eXBlfSByYyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLik7XG4gICAgICAgICAgcmVzdWx0LnIgPSAke2dldFIoY2hhbm5lbHMuc2xpY2UoKSl9O1xuICAgICAgICAgIGlmKCR7bmV4dENvbHVtbn0pe1xuICAgICAgICAgICAgcmVzdWx0LmcgPSAke2dldEcoY2hhbm5lbHMuc2xpY2UoKSl9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZigke25leHRSb3d9KSB7XG4gICAgICAgICAgICByZXN1bHQuYiA9ICR7Z2V0QihjaGFubmVscy5zbGljZSgpKX07XG4gICAgICAgICAgICBpZigke25leHRDb2x1bW59KSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5hID0gJHtnZXRBKGNoYW5uZWxzLnNsaWNlKCkpfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0T3V0cHV0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICBgO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFIoY2hhbm5lbHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBnZXRDaGFubmVsKGNoYW5uZWxzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRHKGNoYW5uZWxzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgICBjaGFubmVsc1tyYW5rIC0gMV0gPSAnKCcgKyBjaGFubmVsc1tyYW5rIC0gMV0gKyBgICsgMSlgO1xuICAgICAgcmV0dXJuIGdldENoYW5uZWwoY2hhbm5lbHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEIoY2hhbm5lbHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgIGNoYW5uZWxzW3JhbmsgLSAyXSA9ICcoJyArIGNoYW5uZWxzW3JhbmsgLSAyXSArIGAgKyAxKWA7XG4gICAgICByZXR1cm4gZ2V0Q2hhbm5lbChjaGFubmVscyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QShjaGFubmVsczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgY2hhbm5lbHNbcmFuayAtIDFdID0gJygnICsgY2hhbm5lbHNbcmFuayAtIDFdICsgYCArIDEpYDtcbiAgICAgIGNoYW5uZWxzW3JhbmsgLSAyXSA9ICcoJyArIGNoYW5uZWxzW3JhbmsgLSAyXSArIGAgKyAxKWA7XG4gICAgICByZXR1cm4gZ2V0Q2hhbm5lbChjaGFubmVscyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2hhbm5lbChjaGFubmVsczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgY29uc3QgaW5Db29yZHNBcnJheSA9IHhTaGFwZS5tYXAoKF8sIGkpID0+IGdldEluQ29vcmQoaSwgY2hhbm5lbHMpKTtcbiAgICAgIGNvbnN0IGluQ29vcmRzID0gaW5Db29yZHNBcnJheS5qb2luKCcsJyk7XG4gICAgICBjb25zdCBpbm5lckRpbXMgPSBpbkNvb3Jkc0FycmF5LnNsaWNlKC0yKS5qb2luKCcsJyk7XG4gICAgICByZXR1cm4gYGdldENoYW5uZWwoZ2V0WCgke2luQ29vcmRzfSksIHZlYzIoJHtpbm5lckRpbXN9KSlgO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluQ29vcmQoaTogbnVtYmVyLCBjaGFubmVsczE6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgIGlmIChheGlzLmluZGV4T2YoaSkgIT09IC0xICYmIHhTaGFwZVtpXSAhPT0gMSkge1xuICAgICAgICByZXR1cm4gYCR7eFNoYXBlW2ldfSAtICR7Y2hhbm5lbHMxW2ldfSAtIDFgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke2NoYW5uZWxzMVtpXX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, Reverse, util } from '@tensorflow/tfjs-core';\nimport { ReverseProgram } from '../reverse_gpu';\nimport { ReversePackedProgram } from '../reverse_packed_gpu';\nimport { identity } from './Identity';\nexport function reverse(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { dims } = attrs;\n const xRank = x.shape.length;\n const $dims = util.parseAxisParam(dims, x.shape);\n if (xRank === 0) {\n return identity({ inputs: { x }, backend });\n }\n const program = env().getBool('WEBGL_PACK_ARRAY_OPERATIONS') ?\n new ReversePackedProgram(x.shape, $dims) :\n new ReverseProgram(x.shape, $dims);\n return backend.runWebGLProgram(program, [x], x.dtype);\n}\nexport const reverseConfig = {\n kernelName: Reverse,\n backendName: 'webgl',\n kernelFunc: reverse\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmV2ZXJzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9SZXZlcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQTRCLE9BQU8sRUFBMkMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHNUgsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTNELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUl2QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNmLE9BQU8sUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztLQUN6QztJQUVELE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV2QyxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2VudiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZXZlcnNlLCBSZXZlcnNlQXR0cnMsIFJldmVyc2VJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge1JldmVyc2VQcm9ncmFtfSBmcm9tICcuLi9yZXZlcnNlX2dwdSc7XG5pbXBvcnQge1JldmVyc2VQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9yZXZlcnNlX3BhY2tlZF9ncHUnO1xuXG5pbXBvcnQge2lkZW50aXR5fSBmcm9tICcuL0lkZW50aXR5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHJldmVyc2UoYXJnczoge1xuICBpbnB1dHM6IFJldmVyc2VJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBSZXZlcnNlQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7ZGltc30gPSBhdHRycztcblxuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuXG4gIGNvbnN0ICRkaW1zID0gdXRpbC5wYXJzZUF4aXNQYXJhbShkaW1zLCB4LnNoYXBlKTtcbiAgaWYgKHhSYW5rID09PSAwKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICB9XG5cbiAgY29uc3QgcHJvZ3JhbSA9IGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0tfQVJSQVlfT1BFUkFUSU9OUycpID9cbiAgICAgIG5ldyBSZXZlcnNlUGFja2VkUHJvZ3JhbSh4LnNoYXBlLCAkZGltcykgOlxuICAgICAgbmV3IFJldmVyc2VQcm9ncmFtKHguc2hhcGUsICRkaW1zKTtcblxuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJldmVyc2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmV2ZXJzZSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHJldmVyc2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class RotateProgram {\n constructor(imageShape, fillValue) {\n this.variableNames = ['Image'];\n this.outputShape = [];\n this.customUniforms = [{ name: 'params', type: 'vec4' }];\n const imageHeight = imageShape[1];\n const imageWidth = imageShape[2];\n this.outputShape = imageShape;\n let fillSnippet = '';\n if (typeof fillValue === 'number') {\n fillSnippet = `float outputValue = ${fillValue.toFixed(2)};`;\n }\n else {\n fillSnippet = `\n vec3 fill = vec3(${fillValue.join(',')});\n float outputValue = fill[coords[3]];`;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvcm90YXRlX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQUt4QixZQUNJLFVBQTRDLEVBQzVDLFNBQTBDO1FBTjlDLGtCQUFhLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUUzQixtQkFBYyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFxQixFQUFDLENBQUMsQ0FBQztRQUkvRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBRTlCLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxXQUFXLEdBQUcsdUJBQXVCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztTQUM5RDthQUFNO1lBQ0wsV0FBVyxHQUFHOzJCQUNPLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDOzZDQUNELENBQUM7U0FDekM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs7OztZQVdSLFdBQVc7dUNBQ2dCLFVBQVUsK0JBQ3pDLFdBQVc7Ozs7O0tBS2QsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5pbXBvcnQge1VuaWZvcm1UeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBjbGFzcyBSb3RhdGVQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnSW1hZ2UnXTtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIGN1c3RvbVVuaWZvcm1zID0gW3tuYW1lOiAncGFyYW1zJywgdHlwZTogJ3ZlYzQnIGFzIFVuaWZvcm1UeXBlfV07XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgaW1hZ2VTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBmaWxsVmFsdWU6IG51bWJlcnxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICBjb25zdCBpbWFnZUhlaWdodCA9IGltYWdlU2hhcGVbMV07XG4gICAgY29uc3QgaW1hZ2VXaWR0aCA9IGltYWdlU2hhcGVbMl07XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IGltYWdlU2hhcGU7XG5cbiAgICBsZXQgZmlsbFNuaXBwZXQgPSAnJztcbiAgICBpZiAodHlwZW9mIGZpbGxWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGZpbGxTbmlwcGV0ID0gYGZsb2F0IG91dHB1dFZhbHVlID0gJHtmaWxsVmFsdWUudG9GaXhlZCgyKX07YDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsbFNuaXBwZXQgPSBgXG4gICAgICAgIHZlYzMgZmlsbCA9IHZlYzMoJHtmaWxsVmFsdWUuam9pbignLCcpfSk7XG4gICAgICAgIGZsb2F0IG91dHB1dFZhbHVlID0gZmlsbFtjb29yZHNbM11dO2A7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIGludCB4ID0gY29vcmRzWzJdO1xuICAgICAgICAgIGludCB5ID0gY29vcmRzWzFdO1xuICAgICAgICAgIGZsb2F0IGNvb3JkWEZsb2F0ID0gKGZsb2F0KHgpIC0gcGFyYW1zWzBdKSAqIHBhcmFtc1szXSAtXG4gICAgICAgICAgICAoZmxvYXQoeSkgLSBwYXJhbXNbMV0pICogcGFyYW1zWzJdO1xuICAgICAgICAgIGZsb2F0IGNvb3JkWUZsb2F0ID0gKGZsb2F0KHgpIC0gcGFyYW1zWzBdKSAqIHBhcmFtc1syXSArXG4gICAgICAgICAgICAoZmxvYXQoeSkgLSBwYXJhbXNbMV0pICogcGFyYW1zWzNdO1xuICAgICAgICAgIGludCBjb29yZFggPSBpbnQocm91bmQoY29vcmRYRmxvYXQgKyBwYXJhbXNbMF0pKTtcbiAgICAgICAgICBpbnQgY29vcmRZID0gaW50KHJvdW5kKGNvb3JkWUZsb2F0ICsgcGFyYW1zWzFdKSk7XG4gICAgICAgICAgJHtmaWxsU25pcHBldH1cbiAgICAgICAgICBpZihjb29yZFggPj0gMCAmJiBjb29yZFggPCAke2ltYWdlV2lkdGh9ICYmIGNvb3JkWSA+PSAwICYmIGNvb3JkWSA8ICR7XG4gICAgICAgIGltYWdlSGVpZ2h0fSkge1xuICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSBnZXRJbWFnZShjb29yZHNbMF0sIGNvb3JkWSwgY29vcmRYLCBjb29yZHNbM10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRPdXRwdXQob3V0cHV0VmFsdWUpO1xuICAgICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { RotateWithOffset } from '@tensorflow/tfjs-core';\nimport { RotateProgram } from '../rotate_gpu';\nexport const rotateWithOffsetConfig = {\n kernelName: RotateWithOffset,\n backendName: 'webgl',\n kernelFunc: ({ inputs, attrs, backend }) => {\n const { image } = inputs;\n const { radians, fillValue, center } = attrs;\n const webglBackend = backend;\n const program = new RotateProgram(image.shape, fillValue);\n const [centerX, centerY] = backend_util.getImageCenter(center, image.shape[1], image.shape[2]);\n const customValues = [[centerX, centerY, Math.sin(radians), Math.cos(radians)]];\n const output = webglBackend.runWebGLProgram(program, [image], image.dtype, customValues);\n return output;\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm90YXRlV2l0aE9mZnNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Sb3RhdGVXaXRoT2Zmc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFDLGdCQUFnQixFQUFnRCxNQUFNLHVCQUF1QixDQUFDO0FBR3RHLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQWlCO0lBQ2xELFVBQVUsRUFBRSxnQkFBZ0I7SUFDNUIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLE1BQWdDLENBQUM7UUFDakQsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLEdBQzlCLEtBQXlDLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsT0FBMkIsQ0FBQztRQUVqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBRSxLQUFrQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUNwQixZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLFlBQVksR0FDZCxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQ3ZDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtSb3RhdGVXaXRoT2Zmc2V0LCBSb3RhdGVXaXRoT2Zmc2V0QXR0cnMsIFJvdGF0ZVdpdGhPZmZzZXRJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge1JvdGF0ZVByb2dyYW19IGZyb20gJy4uL3JvdGF0ZV9ncHUnO1xuXG5leHBvcnQgY29uc3Qgcm90YXRlV2l0aE9mZnNldENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSb3RhdGVXaXRoT2Zmc2V0LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogKHtpbnB1dHMsIGF0dHJzLCBiYWNrZW5kfSkgPT4ge1xuICAgIGNvbnN0IHtpbWFnZX0gPSBpbnB1dHMgYXMgUm90YXRlV2l0aE9mZnNldElucHV0cztcbiAgICBjb25zdCB7cmFkaWFucywgZmlsbFZhbHVlLCBjZW50ZXJ9ID1cbiAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBSb3RhdGVXaXRoT2Zmc2V0QXR0cnM7XG4gICAgY29uc3Qgd2ViZ2xCYWNrZW5kID0gYmFja2VuZCBhcyBNYXRoQmFja2VuZFdlYkdMO1xuXG4gICAgY29uc3QgcHJvZ3JhbSA9IG5ldyBSb3RhdGVQcm9ncmFtKChpbWFnZSBhcyBUZW5zb3I0RCkuc2hhcGUsIGZpbGxWYWx1ZSk7XG4gICAgY29uc3QgW2NlbnRlclgsIGNlbnRlclldID1cbiAgICAgICAgYmFja2VuZF91dGlsLmdldEltYWdlQ2VudGVyKGNlbnRlciwgaW1hZ2Uuc2hhcGVbMV0sIGltYWdlLnNoYXBlWzJdKTtcbiAgICBjb25zdCBjdXN0b21WYWx1ZXMgPVxuICAgICAgICBbW2NlbnRlclgsIGNlbnRlclksIE1hdGguc2luKHJhZGlhbnMpLCBNYXRoLmNvcyhyYWRpYW5zKV1dO1xuICAgIGNvbnN0IG91dHB1dCA9IHdlYmdsQmFja2VuZC5ydW5XZWJHTFByb2dyYW0oXG4gICAgICAgIHByb2dyYW0sIFtpbWFnZV0sIGltYWdlLmR0eXBlLCBjdXN0b21WYWx1ZXMpO1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Round } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst 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`;\nexport const round = unaryKernelFunc({ opSnippet: ROUND });\nexport const roundConfig = {\n kernelName: Round,\n backendName: 'webgl',\n kernelFunc: round,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEtBQUssRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRSxNQUFNLEtBQUssR0FBRzs7Ozs7Ozs7Ozs7Ozs7O0NBZWIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBSb3VuZH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgUk9VTkQgPSBgXG4gIC8vIE9wZW5HTCBFUyBkb2VzIG5vdCBzdXBwb3J0IHJvdW5kIGZ1bmN0aW9uLlxuICAvLyBUaGUgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIGJhbmtlcidzIHJvdW5kaW5nLlxuICBmbG9hdCBiYXNlID0gZmxvb3IoeCk7XG4gIGlmICgoeCAtIGJhc2UpIDwgMC41KSB7XG4gICAgcmV0dXJuIGZsb29yKHgpO1xuICB9IGVsc2UgaWYgKCh4IC0gYmFzZSkgPiAwLjUpIHtcbiAgICByZXR1cm4gY2VpbCh4KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAobW9kKGJhc2UsIDIuMCkgPT0gMC4wKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJhc2UgKyAxLjA7XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgY29uc3Qgcm91bmQgPSB1bmFyeUtlcm5lbEZ1bmMoe29wU25pcHBldDogUk9VTkR9KTtcblxuZXhwb3J0IGNvbnN0IHJvdW5kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJvdW5kLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogcm91bmQsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Rsqrt } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { rsqrtImplCPU } from '../kernel_utils/shared';\nconst RSQRT = `return inversesqrt(x);`;\nexport const rsqrt = unaryKernelFunc({ opSnippet: RSQRT, cpuKernelImpl: rsqrtImplCPU });\nexport const rsqrtConfig = {\n kernelName: Rsqrt,\n backendName: 'webgl',\n kernelFunc: rsqrt\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnNxcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvUnNxcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FDZCxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLEtBQThCO0NBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSc3FydH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7cnNxcnRJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuY29uc3QgUlNRUlQgPSBgcmV0dXJuIGludmVyc2VzcXJ0KHgpO2A7XG5cbmV4cG9ydCBjb25zdCByc3FydCA9XG4gICAgdW5hcnlLZXJuZWxGdW5jKHtvcFNuaXBwZXQ6IFJTUVJULCBjcHVLZXJuZWxJbXBsOiByc3FydEltcGxDUFV9KTtcblxuZXhwb3J0IGNvbnN0IHJzcXJ0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJzcXJ0LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogcnNxcnQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class ScatterProgram {\n constructor(updateSize, sliceDim, indicesRank, updatesRank, strides, shape, summingDupeIndex = true, defaultIsTensor = false) {\n this.variableNames = ['updates', 'indices', 'defaultValue'];\n this.outputShape = shape;\n const stridesType = getCoordsDataType(strides.length);\n const dtype = getCoordsDataType(shape.length);\n let indicesString = '';\n if (indicesRank === 1) {\n indicesString = 'i';\n }\n else if (indicesRank === 2) {\n indicesString = 'i, j';\n }\n const indicesSnippet = `getIndices(${indicesString})`;\n let updatesString = '';\n if (updatesRank === 1) {\n updatesString = 'i';\n }\n else if (updatesRank === 2) {\n updatesString = 'i, coords[1]';\n }\n const updatesSnippet = `getUpdates(${updatesString})`;\n let defaultValuesString = '';\n if (defaultIsTensor) {\n defaultValuesString = 'coords[0], coords[1]';\n }\n const defaultValueSnippet = `getDefaultValue(${defaultValuesString})`;\n const strideString = sliceDim > 1 ? 'strides[j]' : 'strides';\n 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(${defaultValueSnippet}, sum, float(found)));\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhdHRlcl9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3NjYXR0ZXJfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQ0ksVUFBa0IsRUFBRSxRQUFnQixFQUFFLFdBQW1CLEVBQ3pELFdBQW1CLEVBQUUsT0FBaUIsRUFBRSxLQUFlLEVBQ3ZELGdCQUFnQixHQUFHLElBQUksRUFBRSxlQUFlLEdBQUcsS0FBSztRQVBwRCxrQkFBYSxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQVFyRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDckIsYUFBYSxHQUFHLEdBQUcsQ0FBQztTQUNyQjthQUFNLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtZQUM1QixhQUFhLEdBQUcsTUFBTSxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxjQUFjLEdBQUcsY0FBYyxhQUFhLEdBQUcsQ0FBQztRQUV0RCxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLGFBQWEsR0FBRyxHQUFHLENBQUM7U0FDckI7YUFBTSxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDNUIsYUFBYSxHQUFHLGNBQWMsQ0FBQztTQUNoQztRQUNELE1BQU0sY0FBYyxHQUFHLGNBQWMsYUFBYSxHQUFHLENBQUM7UUFFdEQsSUFBSSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxlQUFlLEVBQUU7WUFDbkIsbUJBQW1CLEdBQUcsc0JBQXNCLENBQUM7U0FDOUM7UUFDRCxNQUFNLG1CQUFtQixHQUFHLG1CQUFtQixtQkFBbUIsR0FBRyxDQUFDO1FBRXRFLE1BQU0sWUFBWSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLEdBQUc7VUFDVixXQUFXLGNBQWMsV0FBVyxJQUFJLE9BQU87OztZQUc3QyxLQUFLOzs7Z0NBR2UsVUFBVTs7a0NBRVIsUUFBUTtrQ0FDUixjQUFjOzBDQUNOLFlBQVk7Ozt1QkFHL0IsY0FBYzs7OzswQkFJWCxtQkFBbUI7O09BRXRDLENBQUM7SUFDTixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuaW1wb3J0IHtnZXRDb29yZHNEYXRhVHlwZX0gZnJvbSAnLi9zaGFkZXJfY29tcGlsZXInO1xuXG5leHBvcnQgY2xhc3MgU2NhdHRlclByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWyd1cGRhdGVzJywgJ2luZGljZXMnLCAnZGVmYXVsdFZhbHVlJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHVwZGF0ZVNpemU6IG51bWJlciwgc2xpY2VEaW06IG51bWJlciwgaW5kaWNlc1Jhbms6IG51bWJlcixcbiAgICAgIHVwZGF0ZXNSYW5rOiBudW1iZXIsIHN0cmlkZXM6IG51bWJlcltdLCBzaGFwZTogbnVtYmVyW10sXG4gICAgICBzdW1taW5nRHVwZUluZGV4ID0gdHJ1ZSwgZGVmYXVsdElzVGVuc29yID0gZmFsc2UpIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gc2hhcGU7XG4gICAgY29uc3Qgc3RyaWRlc1R5cGUgPSBnZXRDb29yZHNEYXRhVHlwZShzdHJpZGVzLmxlbmd0aCk7XG4gICAgY29uc3QgZHR5cGUgPSBnZXRDb29yZHNEYXRhVHlwZShzaGFwZS5sZW5ndGgpO1xuICAgIGxldCBpbmRpY2VzU3RyaW5nID0gJyc7XG4gICAgaWYgKGluZGljZXNSYW5rID09PSAxKSB7XG4gICAgICBpbmRpY2VzU3RyaW5nID0gJ2knO1xuICAgIH0gZWxzZSBpZiAoaW5kaWNlc1JhbmsgPT09IDIpIHtcbiAgICAgIGluZGljZXNTdHJpbmcgPSAnaSwgaic7XG4gICAgfVxuICAgIGNvbnN0IGluZGljZXNTbmlwcGV0ID0gYGdldEluZGljZXMoJHtpbmRpY2VzU3RyaW5nfSlgO1xuXG4gICAgbGV0IHVwZGF0ZXNTdHJpbmcgPSAnJztcbiAgICBpZiAodXBkYXRlc1JhbmsgPT09IDEpIHtcbiAgICAgIHVwZGF0ZXNTdHJpbmcgPSAnaSc7XG4gICAgfSBlbHNlIGlmICh1cGRhdGVzUmFuayA9PT0gMikge1xuICAgICAgdXBkYXRlc1N0cmluZyA9ICdpLCBjb29yZHNbMV0nO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVzU25pcHBldCA9IGBnZXRVcGRhdGVzKCR7dXBkYXRlc1N0cmluZ30pYDtcblxuICAgIGxldCBkZWZhdWx0VmFsdWVzU3RyaW5nID0gJyc7XG4gICAgaWYgKGRlZmF1bHRJc1RlbnNvcikge1xuICAgICAgZGVmYXVsdFZhbHVlc1N0cmluZyA9ICdjb29yZHNbMF0sIGNvb3Jkc1sxXSc7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZVNuaXBwZXQgPSBgZ2V0RGVmYXVsdFZhbHVlKCR7ZGVmYXVsdFZhbHVlc1N0cmluZ30pYDtcblxuICAgIGNvbnN0IHN0cmlkZVN0cmluZyA9IHNsaWNlRGltID4gMSA/ICdzdHJpZGVzW2pdJyA6ICdzdHJpZGVzJztcbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICAke3N0cmlkZXNUeXBlfSBzdHJpZGVzID0gJHtzdHJpZGVzVHlwZX0oJHtzdHJpZGVzfSk7XG5cbiAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgICR7ZHR5cGV9IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIGZsb2F0IHN1bSA9IDAuMDtcbiAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAke3VwZGF0ZVNpemV9OyBpKyspIHtcbiAgICAgICAgICAgIGludCBmbGF0dGVuZWRJbmRleCA9IDA7XG4gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8ICR7c2xpY2VEaW19OyBqKyspIHtcbiAgICAgICAgICAgICAgaW50IGluZGV4ID0gcm91bmQoJHtpbmRpY2VzU25pcHBldH0pO1xuICAgICAgICAgICAgICBmbGF0dGVuZWRJbmRleCArPSBpbmRleCAqICR7c3RyaWRlU3RyaW5nfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbGF0dGVuZWRJbmRleCA9PSBjb29yZHNbMF0pIHtcbiAgICAgICAgICAgICAgc3VtICs9ICR7dXBkYXRlc1NuaXBwZXR9O1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldE91dHB1dChtaXgoJHtkZWZhdWx0VmFsdWVTbmlwcGV0fSwgc3VtLCBmbG9hdChmb3VuZCkpKTtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class ScatterPackedProgram {\n constructor(updateSize, sliceDim, indicesRank, updatesRank, strides, shape, summingDupeIndex = true, defaultIsTensor = false) {\n this.variableNames = ['updates', 'indices', 'defaultValue'];\n this.packedInputs = true;\n this.packedOutput = true;\n this.outputShape = shape;\n const stridesType = getCoordsDataType(strides.length);\n const dtype = getCoordsDataType(shape.length);\n let indicesString = '';\n if (indicesRank === 1) {\n indicesString = 'i';\n }\n else if (indicesRank === 2) {\n indicesString = 'i, j';\n }\n const indicesSnippet = `getIndices(${indicesString})`;\n let updatesString = '';\n if (updatesRank === 1) {\n updatesString = 'i';\n }\n else if (updatesRank === 2) {\n updatesString = 'i, coords[1]';\n }\n const updatesSnippet = `getUpdates(${updatesString})`;\n let defaultValuesString = '';\n if (defaultIsTensor) {\n defaultValuesString = 'coords[0], coords[1]';\n }\n const defaultValueSnippet = `getDefaultValue(${defaultValuesString})`;\n const strideString = sliceDim > 1 ? 'strides[j]' : 'strides';\n const strideString2 = sliceDim > 1 ? 'strides[j + 1]' : 'strides';\n this.userCode = `\n ${stridesType} strides = ${stridesType}(${strides});\n\n void main() {\n ${dtype} coords = getOutputCoords();\n vec4 sum = vec4(0.);\n vec4 found = vec4(0.);\n for (int i = 0; i < ${updateSize}; i+=2) {\n ivec2 flattenedIndex = ivec2(0);\n for (int j = 0; j < ${sliceDim}; j+=2) {\n ivec4 index = round(${indicesSnippet});\n flattenedIndex += index.xz * ${strideString};\n if (j + 1 < ${sliceDim}) {\n flattenedIndex += index.yw * ${strideString2};\n }\n }\n if (flattenedIndex[0] == coords[0] || flattenedIndex[1] == coords[0] ||\n flattenedIndex[0] == coords[0] + 1 || flattenedIndex[1] == coords[0] + 1) {\n vec4 updVals = ${updatesSnippet};\n if (flattenedIndex[0] == coords[0]) {\n sum.xy += updVals.xy;\n found.xy = vec2(1.);\n } else if (flattenedIndex[0] == coords[0] + 1) {\n sum.zw += updVals.xy;\n found.zw = vec2(1.);\n }\n if (flattenedIndex[1] == coords[0]) {\n sum.xy += updVals.zw;\n found.xy = vec2(1.);\n } else if (flattenedIndex[1] == coords[0] + 1) {\n sum.zw += updVals.zw;\n found.zw = vec2(1.);\n }\n }\n }\n setOutput(mix(${defaultValueSnippet}, sum, found));\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhdHRlcl9wYWNrZWRfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9zY2F0dGVyX3BhY2tlZF9ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxPQUFPLG9CQUFvQjtJQU8vQixZQUNJLFVBQWtCLEVBQUUsUUFBZ0IsRUFBRSxXQUFtQixFQUN6RCxXQUFtQixFQUFFLE9BQWlCLEVBQUUsS0FBZSxFQUN2RCxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsZUFBZSxHQUFHLEtBQUs7UUFUcEQsa0JBQWEsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFdkQsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFPbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLGFBQWEsR0FBRyxHQUFHLENBQUM7U0FDckI7YUFBTSxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDNUIsYUFBYSxHQUFHLE1BQU0sQ0FBQztTQUN4QjtRQUNELE1BQU0sY0FBYyxHQUFHLGNBQWMsYUFBYSxHQUFHLENBQUM7UUFFdEQsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtZQUNyQixhQUFhLEdBQUcsR0FBRyxDQUFDO1NBQ3JCO2FBQU0sSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFO1lBQzVCLGFBQWEsR0FBRyxjQUFjLENBQUM7U0FDaEM7UUFDRCxNQUFNLGNBQWMsR0FBRyxjQUFjLGFBQWEsR0FBRyxDQUFDO1FBRXRELElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksZUFBZSxFQUFFO1lBQ25CLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO1NBQzlDO1FBQ0QsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsbUJBQW1CLEdBQUcsQ0FBQztRQUV0RSxNQUFNLFlBQVksR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM3RCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWxFLElBQUksQ0FBQyxRQUFRLEdBQUc7VUFDVixXQUFXLGNBQWMsV0FBVyxJQUFJLE9BQU87OztZQUc3QyxLQUFLOzs7Z0NBR2UsVUFBVTs7a0NBRVIsUUFBUTtvQ0FDTixjQUFjOzZDQUNMLFlBQVk7NEJBQzdCLFFBQVE7K0NBQ1csYUFBYTs7Ozs7K0JBSzdCLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQWlCbkIsbUJBQW1COztPQUV0QyxDQUFDO0lBQ04sQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFNjYXR0ZXJQYWNrZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsndXBkYXRlcycsICdpbmRpY2VzJywgJ2RlZmF1bHRWYWx1ZSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHBhY2tlZElucHV0cyA9IHRydWU7XG4gIHBhY2tlZE91dHB1dCA9IHRydWU7XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICB1cGRhdGVTaXplOiBudW1iZXIsIHNsaWNlRGltOiBudW1iZXIsIGluZGljZXNSYW5rOiBudW1iZXIsXG4gICAgICB1cGRhdGVzUmFuazogbnVtYmVyLCBzdHJpZGVzOiBudW1iZXJbXSwgc2hhcGU6IG51bWJlcltdLFxuICAgICAgc3VtbWluZ0R1cGVJbmRleCA9IHRydWUsIGRlZmF1bHRJc1RlbnNvciA9IGZhbHNlKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IHNoYXBlO1xuICAgIGNvbnN0IHN0cmlkZXNUeXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUoc3RyaWRlcy5sZW5ndGgpO1xuICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUoc2hhcGUubGVuZ3RoKTtcbiAgICBsZXQgaW5kaWNlc1N0cmluZyA9ICcnO1xuICAgIGlmIChpbmRpY2VzUmFuayA9PT0gMSkge1xuICAgICAgaW5kaWNlc1N0cmluZyA9ICdpJztcbiAgICB9IGVsc2UgaWYgKGluZGljZXNSYW5rID09PSAyKSB7XG4gICAgICBpbmRpY2VzU3RyaW5nID0gJ2ksIGonO1xuICAgIH1cbiAgICBjb25zdCBpbmRpY2VzU25pcHBldCA9IGBnZXRJbmRpY2VzKCR7aW5kaWNlc1N0cmluZ30pYDtcblxuICAgIGxldCB1cGRhdGVzU3RyaW5nID0gJyc7XG4gICAgaWYgKHVwZGF0ZXNSYW5rID09PSAxKSB7XG4gICAgICB1cGRhdGVzU3RyaW5nID0gJ2knO1xuICAgIH0gZWxzZSBpZiAodXBkYXRlc1JhbmsgPT09IDIpIHtcbiAgICAgIHVwZGF0ZXNTdHJpbmcgPSAnaSwgY29vcmRzWzFdJztcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlc1NuaXBwZXQgPSBgZ2V0VXBkYXRlcygke3VwZGF0ZXNTdHJpbmd9KWA7XG5cbiAgICBsZXQgZGVmYXVsdFZhbHVlc1N0cmluZyA9ICcnO1xuICAgIGlmIChkZWZhdWx0SXNUZW5zb3IpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZXNTdHJpbmcgPSAnY29vcmRzWzBdLCBjb29yZHNbMV0nO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0VmFsdWVTbmlwcGV0ID0gYGdldERlZmF1bHRWYWx1ZSgke2RlZmF1bHRWYWx1ZXNTdHJpbmd9KWA7XG5cbiAgICBjb25zdCBzdHJpZGVTdHJpbmcgPSBzbGljZURpbSA+IDEgPyAnc3RyaWRlc1tqXScgOiAnc3RyaWRlcyc7XG4gICAgY29uc3Qgc3RyaWRlU3RyaW5nMiA9IHNsaWNlRGltID4gMSA/ICdzdHJpZGVzW2ogKyAxXScgOiAnc3RyaWRlcyc7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgICAke3N0cmlkZXNUeXBlfSBzdHJpZGVzID0gJHtzdHJpZGVzVHlwZX0oJHtzdHJpZGVzfSk7XG5cbiAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgICR7ZHR5cGV9IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgIHZlYzQgc3VtID0gdmVjNCgwLik7XG4gICAgICAgICAgdmVjNCBmb3VuZCA9IHZlYzQoMC4pO1xuICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgJHt1cGRhdGVTaXplfTsgaSs9Mikge1xuICAgICAgICAgICAgaXZlYzIgZmxhdHRlbmVkSW5kZXggPSBpdmVjMigwKTtcbiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgJHtzbGljZURpbX07IGorPTIpIHtcbiAgICAgICAgICAgICAgaXZlYzQgaW5kZXggPSByb3VuZCgke2luZGljZXNTbmlwcGV0fSk7XG4gICAgICAgICAgICAgIGZsYXR0ZW5lZEluZGV4ICs9IGluZGV4Lnh6ICogJHtzdHJpZGVTdHJpbmd9O1xuICAgICAgICAgICAgICBpZiAoaiArIDEgPCAke3NsaWNlRGltfSkge1xuICAgICAgICAgICAgICAgIGZsYXR0ZW5lZEluZGV4ICs9IGluZGV4Lnl3ICogJHtzdHJpZGVTdHJpbmcyfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZsYXR0ZW5lZEluZGV4WzBdID09IGNvb3Jkc1swXSB8fCBmbGF0dGVuZWRJbmRleFsxXSA9PSBjb29yZHNbMF0gfHxcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWRJbmRleFswXSA9PSBjb29yZHNbMF0gKyAxIHx8IGZsYXR0ZW5lZEluZGV4WzFdID09IGNvb3Jkc1swXSArIDEpIHtcbiAgICAgICAgICAgICAgdmVjNCB1cGRWYWxzID0gJHt1cGRhdGVzU25pcHBldH07XG4gICAgICAgICAgICAgIGlmIChmbGF0dGVuZWRJbmRleFswXSA9PSBjb29yZHNbMF0pIHtcbiAgICAgICAgICAgICAgICBzdW0ueHkgKz0gdXBkVmFscy54eTtcbiAgICAgICAgICAgICAgICBmb3VuZC54eSA9IHZlYzIoMS4pO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYXR0ZW5lZEluZGV4WzBdID09IGNvb3Jkc1swXSArIDEpIHtcbiAgICAgICAgICAgICAgICBzdW0uencgKz0gdXBkVmFscy54eTtcbiAgICAgICAgICAgICAgICBmb3VuZC56dyA9IHZlYzIoMS4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChmbGF0dGVuZWRJbmRleFsxXSA9PSBjb29yZHNbMF0pIHtcbiAgICAgICAgICAgICAgICBzdW0ueHkgKz0gdXBkVmFscy56dztcbiAgICAgICAgICAgICAgICBmb3VuZC54eSA9IHZlYzIoMS4pO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYXR0ZW5lZEluZGV4WzFdID09IGNvb3Jkc1swXSArIDEpIHtcbiAgICAgICAgICAgICAgICBzdW0uencgKz0gdXBkVmFscy56dztcbiAgICAgICAgICAgICAgICBmb3VuZC56dyA9IHZlYzIoMS4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldE91dHB1dChtaXgoJHtkZWZhdWx0VmFsdWVTbmlwcGV0fSwgc3VtLCBmb3VuZCkpO1xuICAgICAgICB9XG4gICAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, env, ScatterNd } from '@tensorflow/tfjs-core';\nimport { ScatterProgram } from '../scatter_gpu';\nimport { ScatterPackedProgram } from '../scatter_packed_gpu';\nimport { reshape } from './Reshape';\nexport function scatterNd(args) {\n const { inputs, backend, attrs } = args;\n const { indices, updates } = inputs;\n const { shape } = attrs;\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util.calculateShapes(updates, indices, shape);\n const flattenShape = [outputSize / sliceSize, sliceSize];\n if (outputSize === 0) {\n return backend.makeTensorInfo(shape, indices.dtype);\n }\n const flattenIndices = reshape({ inputs: { x: indices }, backend, attrs: { shape: [numUpdates, sliceRank] } });\n const flattenX = reshape({ inputs: { x: updates }, backend, attrs: { shape: [numUpdates, sliceSize] } });\n const defaultValue = backend.makeTensorInfo([], 'float32', new Float32Array([0])); // scalar(0)\n let program;\n if (env().getBool('WEBGL_PACK')) {\n program = new ScatterPackedProgram(numUpdates, sliceRank, flattenIndices.shape.length, flattenX.shape.length, strides, flattenShape);\n }\n else {\n program = new ScatterProgram(numUpdates, sliceRank, flattenIndices.shape.length, flattenX.shape.length, strides, flattenShape);\n }\n const res = backend.runWebGLProgram(program, [flattenX, flattenIndices, defaultValue], flattenX.dtype);\n const reshaped = reshape({ inputs: { x: res }, backend, attrs: { shape } });\n backend.disposeIntermediateTensorInfo(flattenIndices);\n backend.disposeIntermediateTensorInfo(flattenX);\n backend.disposeIntermediateTensorInfo(res);\n backend.disposeIntermediateTensorInfo(defaultValue);\n return reshaped;\n}\nexport const scatterNdConfig = {\n kernelName: ScatterNd,\n backendName: 'webgl',\n kernelFunc: scatterNd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlck5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1NjYXR0ZXJOZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBNEIsU0FBUyxFQUE4QyxNQUFNLHVCQUF1QixDQUFDO0FBRzFJLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbEMsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0QixNQUFNLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUN6RCxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFMUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXpELElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtRQUNwQixPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNyRDtJQUVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FDMUIsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQ3BCLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFFOUUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FDdkMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLFlBQVk7SUFDeEQsSUFBSSxPQUFPLENBQUM7SUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUMvQixPQUFPLEdBQUcsSUFBSSxvQkFBb0IsQ0FDOUIsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDbEQsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQ25EO1NBQU07UUFDTCxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQ3hCLFVBQVUsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQ2xELFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztLQUNuRDtJQUNELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQy9CLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRXRFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVwRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQjtJQUMzQyxVQUFVLEVBQUUsU0FBUztJQUNyQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIGVudiwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTY2F0dGVyTmQsIFNjYXR0ZXJOZEF0dHJzLCBTY2F0dGVyTmRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge1NjYXR0ZXJQcm9ncmFtfSBmcm9tICcuLi9zY2F0dGVyX2dwdSc7XG5pbXBvcnQge1NjYXR0ZXJQYWNrZWRQcm9ncmFtfSBmcm9tICcuLi9zY2F0dGVyX3BhY2tlZF9ncHUnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhdHRlck5kKGFyZ3M6IHtcbiAgaW5wdXRzOiBTY2F0dGVyTmRJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBTY2F0dGVyTmRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7aW5kaWNlcywgdXBkYXRlc30gPSBpbnB1dHM7XG4gIGNvbnN0IHtzaGFwZX0gPSBhdHRycztcblxuICBjb25zdCB7c2xpY2VSYW5rLCBudW1VcGRhdGVzLCBzbGljZVNpemUsIHN0cmlkZXMsIG91dHB1dFNpemV9ID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jYWxjdWxhdGVTaGFwZXModXBkYXRlcywgaW5kaWNlcywgc2hhcGUpO1xuXG4gIGNvbnN0IGZsYXR0ZW5TaGFwZSA9IFtvdXRwdXRTaXplIC8gc2xpY2VTaXplLCBzbGljZVNpemVdO1xuXG4gIGlmIChvdXRwdXRTaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oc2hhcGUsIGluZGljZXMuZHR5cGUpO1xuICB9XG5cbiAgY29uc3QgZmxhdHRlbkluZGljZXMgPSByZXNoYXBlKFxuICAgICAge2lucHV0czoge3g6IGluZGljZXN9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBbbnVtVXBkYXRlcywgc2xpY2VSYW5rXX19KTtcbiAgY29uc3QgZmxhdHRlblggPSByZXNoYXBlKFxuICAgICAge2lucHV0czoge3g6IHVwZGF0ZXN9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBbbnVtVXBkYXRlcywgc2xpY2VTaXplXX19KTtcblxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgW10sICdmbG9hdDMyJywgbmV3IEZsb2F0MzJBcnJheShbMF0pKTsgIC8vIHNjYWxhcigwKVxuICBsZXQgcHJvZ3JhbTtcbiAgaWYgKGVudigpLmdldEJvb2woJ1dFQkdMX1BBQ0snKSkge1xuICAgIHByb2dyYW0gPSBuZXcgU2NhdHRlclBhY2tlZFByb2dyYW0oXG4gICAgICAgIG51bVVwZGF0ZXMsIHNsaWNlUmFuaywgZmxhdHRlbkluZGljZXMuc2hhcGUubGVuZ3RoLFxuICAgICAgICBmbGF0dGVuWC5zaGFwZS5sZW5ndGgsIHN0cmlkZXMsIGZsYXR0ZW5TaGFwZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvZ3JhbSA9IG5ldyBTY2F0dGVyUHJvZ3JhbShcbiAgICAgICAgbnVtVXBkYXRlcywgc2xpY2VSYW5rLCBmbGF0dGVuSW5kaWNlcy5zaGFwZS5sZW5ndGgsXG4gICAgICAgIGZsYXR0ZW5YLnNoYXBlLmxlbmd0aCwgc3RyaWRlcywgZmxhdHRlblNoYXBlKTtcbiAgfVxuICBjb25zdCByZXMgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgIHByb2dyYW0sIFtmbGF0dGVuWCwgZmxhdHRlbkluZGljZXMsIGRlZmF1bHRWYWx1ZV0sIGZsYXR0ZW5YLmR0eXBlKTtcblxuICBjb25zdCByZXNoYXBlZCA9IHJlc2hhcGUoe2lucHV0czoge3g6IHJlc30sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGV9fSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhmbGF0dGVuSW5kaWNlcyk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZmxhdHRlblgpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlcyk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZGVmYXVsdFZhbHVlKTtcblxuICByZXR1cm4gcmVzaGFwZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBzY2F0dGVyTmRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU2NhdHRlck5kLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc2NhdHRlck5kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nexport class SearchSortedProgram {\n constructor(batchSize, numInputs, numValues, side) {\n this.variableNames = ['sortedSequence', 'values'];\n this.customUniforms = [{ name: 'numInputs', type: 'int' }];\n this.outputShape = [batchSize, numValues];\n const webGL2LoopHead = 'while (left < right) {';\n // WebGL1 doesn't accept non constant loop conditions, so upper bound loop\n // iterations.\n const webGL1LoopHead = `for (int i = 0; i < ${Math.ceil(Math.log2(numInputs + 1))}; ++i) { if (left >= right) break;`;\n const loopHead = env().getNumber('WEBGL_VERSION') === 2 ? webGL2LoopHead :\n webGL1LoopHead;\n // left corresponds to lower bound and right to upper bound.\n const boundComparator = side === 'left' ? '<' : '<=';\n this.userCode = `\n int findBound(int batch, float value) {\n int left = 0;\n int right = numInputs;\n int mid;\n ${loopHead}\n mid = (left + right) / 2;\n if (getSortedSequence(batch, mid) ${boundComparator} value) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return right;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int valueIndex = coords[1];\n\n float value = getValues(batch, valueIndex);\n\n setOutput(float(findBound(batch, value)));\n }\n `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoX3NvcnRlZF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3NlYXJjaF9zb3J0ZWRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUkxQyxNQUFNLE9BQU8sbUJBQW1CO0lBTTlCLFlBQ0ksU0FBaUIsRUFBRSxTQUFpQixFQUFFLFNBQWlCLEVBQ3ZELElBQW9CO1FBUHhCLGtCQUFhLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUc3QyxtQkFBYyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFvQixFQUFDLENBQUMsQ0FBQztRQUtqRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDO1FBQ2hELDBFQUEwRTtRQUMxRSxjQUFjO1FBQ2QsTUFBTSxjQUFjLEdBQUcsdUJBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0NBQW9DLENBQUM7UUFDNUUsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEIsY0FBYyxDQUFDO1FBRXpFLDREQUE0RDtRQUM1RCxNQUFNLGVBQWUsR0FBRyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHOzs7OztXQUtULFFBQVE7OytDQUU0QixlQUFlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFrQnhELENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5pbXBvcnQge1VuaWZvcm1UeXBlfSBmcm9tICcuL3NoYWRlcl9jb21waWxlcic7XG5cbmV4cG9ydCBjbGFzcyBTZWFyY2hTb3J0ZWRQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnc29ydGVkU2VxdWVuY2UnLCAndmFsdWVzJ107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcbiAgY3VzdG9tVW5pZm9ybXMgPSBbe25hbWU6ICdudW1JbnB1dHMnLCB0eXBlOiAnaW50JyBhcyBVbmlmb3JtVHlwZX1dO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgYmF0Y2hTaXplOiBudW1iZXIsIG51bUlucHV0czogbnVtYmVyLCBudW1WYWx1ZXM6IG51bWJlcixcbiAgICAgIHNpZGU6ICdsZWZ0J3wncmlnaHQnKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IFtiYXRjaFNpemUsIG51bVZhbHVlc107XG5cbiAgICBjb25zdCB3ZWJHTDJMb29wSGVhZCA9ICd3aGlsZSAobGVmdCA8IHJpZ2h0KSB7JztcbiAgICAvLyBXZWJHTDEgZG9lc24ndCBhY2NlcHQgbm9uIGNvbnN0YW50IGxvb3AgY29uZGl0aW9ucywgc28gdXBwZXIgYm91bmQgbG9vcFxuICAgIC8vIGl0ZXJhdGlvbnMuXG4gICAgY29uc3Qgd2ViR0wxTG9vcEhlYWQgPSBgZm9yIChpbnQgaSA9IDA7IGkgPCAke1xuICAgICAgICBNYXRoLmNlaWwoTWF0aC5sb2cyKG51bUlucHV0cyArIDEpKX07ICsraSkgeyBpZiAobGVmdCA+PSByaWdodCkgYnJlYWs7YDtcbiAgICBjb25zdCBsb29wSGVhZCA9IGVudigpLmdldE51bWJlcignV0VCR0xfVkVSU0lPTicpID09PSAyID8gd2ViR0wyTG9vcEhlYWQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTDFMb29wSGVhZDtcblxuICAgIC8vIGxlZnQgY29ycmVzcG9uZHMgdG8gbG93ZXIgYm91bmQgYW5kIHJpZ2h0IHRvIHVwcGVyIGJvdW5kLlxuICAgIGNvbnN0IGJvdW5kQ29tcGFyYXRvciA9IHNpZGUgPT09ICdsZWZ0JyA/ICc8JyA6ICc8PSc7XG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgICBpbnQgZmluZEJvdW5kKGludCBiYXRjaCwgZmxvYXQgdmFsdWUpIHtcbiAgICAgICAgIGludCBsZWZ0ID0gMDtcbiAgICAgICAgIGludCByaWdodCA9IG51bUlucHV0cztcbiAgICAgICAgIGludCBtaWQ7XG4gICAgICAgICAke2xvb3BIZWFkfVxuICAgICAgICAgICBtaWQgPSAobGVmdCArIHJpZ2h0KSAvIDI7XG4gICAgICAgICAgIGlmIChnZXRTb3J0ZWRTZXF1ZW5jZShiYXRjaCwgbWlkKSAke2JvdW5kQ29tcGFyYXRvcn0gdmFsdWUpIHtcbiAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMTtcbiAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICByaWdodCA9IG1pZDtcbiAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgICAgcmV0dXJuIHJpZ2h0O1xuICAgICAgIH1cblxuICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgIGl2ZWMyIGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgaW50IGJhdGNoID0gY29vcmRzWzBdO1xuICAgICAgICAgaW50IHZhbHVlSW5kZXggPSBjb29yZHNbMV07XG5cbiAgICAgICAgIGZsb2F0IHZhbHVlID0gZ2V0VmFsdWVzKGJhdGNoLCB2YWx1ZUluZGV4KTtcblxuICAgICAgICAgc2V0T3V0cHV0KGZsb2F0KGZpbmRCb3VuZChiYXRjaCwgdmFsdWUpKSk7XG4gICAgICAgfVxuICAgICBgO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SearchSorted } from '@tensorflow/tfjs-core';\nimport { SearchSortedProgram } from '../search_sorted_gpu';\nexport function searchSorted(args) {\n const { inputs, backend, attrs } = args;\n const { sortedSequence, values } = inputs;\n const { side } = attrs;\n const program = new SearchSortedProgram(sortedSequence.shape[0], sortedSequence.shape[1], values.shape[1], side);\n const customValues = [[sortedSequence.shape[1]]];\n return backend.runWebGLProgram(program, [sortedSequence, values], 'int32', customValues);\n}\nexport const searchSortedConfig = {\n kernelName: SearchSorted,\n backendName: 'webgl',\n kernelFunc: searchSorted,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VhcmNoU29ydGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1NlYXJjaFNvcnRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFlBQVksRUFBb0QsTUFBTSx1QkFBdUIsQ0FBQztBQUdoSSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBSTVCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hDLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBbUIsQ0FDbkMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FDMUIsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWlCO0lBQzlDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxZQUFxQztDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU2VhcmNoU29ydGVkLCBTZWFyY2hTb3J0ZWRBdHRycywgU2VhcmNoU29ydGVkSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtTZWFyY2hTb3J0ZWRQcm9ncmFtfSBmcm9tICcuLi9zZWFyY2hfc29ydGVkX2dwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hTb3J0ZWQoYXJnczoge1xuICBpbnB1dHM6IFNlYXJjaFNvcnRlZElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFNlYXJjaFNvcnRlZEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtzb3J0ZWRTZXF1ZW5jZSwgdmFsdWVzfSA9IGlucHV0cztcbiAgY29uc3Qge3NpZGV9ID0gYXR0cnM7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBTZWFyY2hTb3J0ZWRQcm9ncmFtKFxuICAgICAgc29ydGVkU2VxdWVuY2Uuc2hhcGVbMF0sIHNvcnRlZFNlcXVlbmNlLnNoYXBlWzFdLCB2YWx1ZXMuc2hhcGVbMV0sIHNpZGUpO1xuICBjb25zdCBjdXN0b21WYWx1ZXMgPSBbW3NvcnRlZFNlcXVlbmNlLnNoYXBlWzFdXV07XG4gIHJldHVybiBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgIHByb2dyYW0sIFtzb3J0ZWRTZXF1ZW5jZSwgdmFsdWVzXSwgJ2ludDMyJywgY3VzdG9tVmFsdWVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNlYXJjaFNvcnRlZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTZWFyY2hTb3J0ZWQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBzZWFyY2hTb3J0ZWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class SelectProgram {\n constructor(cRank, shape, rank) {\n this.variableNames = ['c', 'a', 'b'];\n this.outputShape = shape;\n let cCoords;\n let abCoords;\n if (rank > 4) {\n throw Error(`Where for rank ${rank} is not yet supported`);\n }\n if (rank === 1) {\n abCoords = `resRC`;\n cCoords = `resRC`;\n }\n else {\n const currentCoords = ['resRC.x', 'resRC.y', 'resRC.z', 'resRC.w'];\n const cCoordVars = [];\n const abCoordVars = [];\n for (let i = 0; i < shape.length; i++) {\n abCoordVars.push(`${currentCoords[i]}`);\n if (i < cRank) {\n cCoordVars.push(`${currentCoords[i]}`);\n }\n }\n cCoords = cCoordVars.join();\n abCoords = abCoordVars.join();\n }\n const dtype = getCoordsDataType(rank);\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0X2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvc2VsZWN0X2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxNQUFNLE9BQU8sYUFBYTtJQUt4QixZQUFZLEtBQWEsRUFBRSxLQUFlLEVBQUUsSUFBWTtRQUp4RCxrQkFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUs5QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ1osTUFBTSxLQUFLLENBQUMsa0JBQWtCLElBQUksdUJBQXVCLENBQUMsQ0FBQztTQUM1RDtRQUVELElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDbkIsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUNuQjthQUFNO1lBQ0wsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuRSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDdEIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFO29CQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN4QzthQUNGO1lBQ0QsT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQy9CO1FBRUQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLFFBQVEsR0FBRzs7VUFFVixLQUFLOzRCQUNhLE9BQU87OzJCQUVSLFFBQVE7OzJCQUVSLFFBQVE7OztLQUc5QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdFByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWydjJywgJ2EnLCAnYiddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY1Jhbms6IG51bWJlciwgc2hhcGU6IG51bWJlcltdLCByYW5rOiBudW1iZXIpIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gc2hhcGU7XG5cbiAgICBsZXQgY0Nvb3JkcztcbiAgICBsZXQgYWJDb29yZHM7XG4gICAgaWYgKHJhbmsgPiA0KSB7XG4gICAgICB0aHJvdyBFcnJvcihgV2hlcmUgZm9yIHJhbmsgJHtyYW5rfSBpcyBub3QgeWV0IHN1cHBvcnRlZGApO1xuICAgIH1cblxuICAgIGlmIChyYW5rID09PSAxKSB7XG4gICAgICBhYkNvb3JkcyA9IGByZXNSQ2A7XG4gICAgICBjQ29vcmRzID0gYHJlc1JDYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VycmVudENvb3JkcyA9IFsncmVzUkMueCcsICdyZXNSQy55JywgJ3Jlc1JDLnonLCAncmVzUkMudyddO1xuICAgICAgY29uc3QgY0Nvb3JkVmFycyA9IFtdO1xuICAgICAgY29uc3QgYWJDb29yZFZhcnMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYWJDb29yZFZhcnMucHVzaChgJHtjdXJyZW50Q29vcmRzW2ldfWApO1xuICAgICAgICBpZiAoaSA8IGNSYW5rKSB7XG4gICAgICAgICAgY0Nvb3JkVmFycy5wdXNoKGAke2N1cnJlbnRDb29yZHNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNDb29yZHMgPSBjQ29vcmRWYXJzLmpvaW4oKTtcbiAgICAgIGFiQ29vcmRzID0gYWJDb29yZFZhcnMuam9pbigpO1xuICAgIH1cblxuICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUocmFuayk7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke2R0eXBlfSByZXNSQyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICBmbG9hdCBjVmFsID0gZ2V0Qygke2NDb29yZHN9KTtcbiAgICAgICAgaWYgKGNWYWwgPj0gMS4wKSB7XG4gICAgICAgICAgc2V0T3V0cHV0KGdldEEoJHthYkNvb3Jkc30pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRPdXRwdXQoZ2V0Qigke2FiQ29vcmRzfSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Select, upcastType } from '@tensorflow/tfjs-core';\nimport { SelectProgram } from '../select_gpu';\nexport function select(args) {\n const { inputs, backend } = args;\n const { condition, t, e } = inputs;\n const program = new SelectProgram(condition.shape.length, t.shape, t.shape.length);\n return backend.runWebGLProgram(program, [condition, t, e], upcastType(t.dtype, e.dtype));\n}\nexport const selectConfig = {\n kernelName: Select,\n backendName: 'webgl',\n kernelFunc: select\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1NlbGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLE1BQU0sRUFBNEIsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHN0csT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU1QyxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQXVEO0lBRTVFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUVqQyxNQUFNLE9BQU8sR0FDVCxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkUsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUMxQixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU2VsZWN0LCBTZWxlY3RJbnB1dHMsIFRlbnNvckluZm8sIHVwY2FzdFR5cGV9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge1NlbGVjdFByb2dyYW19IGZyb20gJy4uL3NlbGVjdF9ncHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KGFyZ3M6IHtpbnB1dHM6IFNlbGVjdElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtjb25kaXRpb24sIHQsIGV9ID0gaW5wdXRzO1xuXG4gIGNvbnN0IHByb2dyYW0gPVxuICAgICAgbmV3IFNlbGVjdFByb2dyYW0oY29uZGl0aW9uLnNoYXBlLmxlbmd0aCwgdC5zaGFwZSwgdC5zaGFwZS5sZW5ndGgpO1xuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0oXG4gICAgICBwcm9ncmFtLCBbY29uZGl0aW9uLCB0LCBlXSwgdXBjYXN0VHlwZSh0LmR0eXBlLCBlLmR0eXBlKSk7XG59XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU2VsZWN0LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc2VsZWN0IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Selu } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst SELU = `\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = ${backend_util.SELU_SCALEALPHA};\n float scale = ${backend_util.SELU_SCALE};\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`;\nexport const selu = unaryKernelFunc({ opSnippet: SELU });\nexport const seluConfig = {\n kernelName: Selu,\n backendName: 'webgl',\n kernelFunc: selu,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TZWx1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWdCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRSxNQUFNLElBQUksR0FBRzs7O3VCQUdVLFlBQVksQ0FBQyxlQUFlO2tCQUNqQyxZQUFZLENBQUMsVUFBVTs7Q0FFeEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxJQUFJO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIFNlbHV9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgU0VMVSA9IGBcbiAgLy8gU3RhYmxlIGFuZCBBdHRyYWN0aW5nIEZpeGVkIFBvaW50ICgwLCAxKSBmb3IgTm9ybWFsaXplZCBXZWlnaHRzLlxuICAvLyBzZWU6IGh0dHBzOi8vYXJ4aXYub3JnL2Ficy8xNzA2LjAyNTE1XG4gIGZsb2F0IHNjYWxlQWxwaGEgPSAke2JhY2tlbmRfdXRpbC5TRUxVX1NDQUxFQUxQSEF9O1xuICBmbG9hdCBzY2FsZSA9ICR7YmFja2VuZF91dGlsLlNFTFVfU0NBTEV9O1xuICByZXR1cm4gKHggPj0gMC4wKSA/IHNjYWxlICogeCA6IHNjYWxlQWxwaGEgKiAoZXhwKHgpIC0gMS4wKTtcbmA7XG5cbmV4cG9ydCBjb25zdCBzZWx1ID0gdW5hcnlLZXJuZWxGdW5jKHtvcFNuaXBwZXQ6IFNFTFV9KTtcblxuZXhwb3J0IGNvbnN0IHNlbHVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU2VsdSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHNlbHUsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sigmoid } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET_UNARY, unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { sigmoidImplCPU } from '../kernel_utils/shared';\nconst SIGMOID = CHECK_NAN_SNIPPET_UNARY + `\n return 1.0 / (1.0 + exp(-1.0 * x));\n`;\nconst SIGMOID_PACKED = `\n vec4 result = 1.0 / (1.0 + exp(-1.0 * x));\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`;\nexport const sigmoid = unaryKernelFunc({\n opSnippet: SIGMOID,\n packedOpSnippet: SIGMOID_PACKED,\n cpuKernelImpl: sigmoidImplCPU\n});\nexport const sigmoidConfig = {\n kernelName: Sigmoid,\n backendName: 'webgl',\n kernelFunc: sigmoid,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbW9pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TaWdtb2lkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxPQUFPLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXRELE1BQU0sT0FBTyxHQUFHLHVCQUF1QixHQUFHOztDQUV6QyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUc7Ozs7Ozs7Ozs7Q0FVdEIsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUM7SUFDckMsU0FBUyxFQUFFLE9BQU87SUFDbEIsZUFBZSxFQUFFLGNBQWM7SUFDL0IsYUFBYSxFQUFFLGNBQWM7Q0FDOUIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsT0FBTztDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgU2lnbW9pZH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVF9VTkFSWSwgdW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcbmltcG9ydCB7c2lnbW9pZEltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5jb25zdCBTSUdNT0lEID0gQ0hFQ0tfTkFOX1NOSVBQRVRfVU5BUlkgKyBgXG4gIHJldHVybiAxLjAgLyAoMS4wICsgZXhwKC0xLjAgKiB4KSk7XG5gO1xuXG5jb25zdCBTSUdNT0lEX1BBQ0tFRCA9IGBcbiAgdmVjNCByZXN1bHQgPSAxLjAgLyAoMS4wICsgZXhwKC0xLjAgKiB4KSk7XG4gIGJ2ZWM0IGlzTmFOID0gaXNuYW4oeCk7XG5cbiAgcmVzdWx0LnIgPSBpc05hTi5yID8geC5yIDogcmVzdWx0LnI7XG4gIHJlc3VsdC5nID0gaXNOYU4uZyA/IHguZyA6IHJlc3VsdC5nO1xuICByZXN1bHQuYiA9IGlzTmFOLmIgPyB4LmIgOiByZXN1bHQuYjtcbiAgcmVzdWx0LmEgPSBpc05hTi5hID8geC5hIDogcmVzdWx0LmE7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbmA7XG5leHBvcnQgY29uc3Qgc2lnbW9pZCA9IHVuYXJ5S2VybmVsRnVuYyh7XG4gIG9wU25pcHBldDogU0lHTU9JRCxcbiAgcGFja2VkT3BTbmlwcGV0OiBTSUdNT0lEX1BBQ0tFRCxcbiAgY3B1S2VybmVsSW1wbDogc2lnbW9pZEltcGxDUFVcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2lnbW9pZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTaWdtb2lkLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc2lnbW9pZCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sign } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\n// Sign does not propagate NANs.\nconst SIGN = `\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`;\nexport const sign = unaryKernelFunc({ opSnippet: SIGN });\nexport const signConfig = {\n kernelName: Sign,\n backendName: 'webgl',\n kernelFunc: sign,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFbkUsZ0NBQWdDO0FBQ2hDLE1BQU0sSUFBSSxHQUFHOzs7Q0FHWixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNpZ259IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuLy8gU2lnbiBkb2VzIG5vdCBwcm9wYWdhdGUgTkFOcy5cbmNvbnN0IFNJR04gPSBgXG4gIGlmIChpc25hbih4KSkgeyByZXR1cm4gMC4wOyB9XG4gIHJldHVybiBzaWduKHgpO1xuYDtcblxuZXhwb3J0IGNvbnN0IHNpZ24gPSB1bmFyeUtlcm5lbEZ1bmMoe29wU25pcHBldDogU0lHTn0pO1xuXG5leHBvcnQgY29uc3Qgc2lnbkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTaWduLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc2lnbixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sin } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET_PACKED } from '../binaryop_packed_gpu';\nimport { CHECK_NAN_SNIPPET_UNARY, unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst SIN = CHECK_NAN_SNIPPET_UNARY + `\n return sin(x);\n`;\nconst SIN_PACKED = `\n vec4 result = sin(x);\n bvec4 isNaN = isnan(x);\n ${CHECK_NAN_SNIPPET_PACKED}\n return result;\n`;\nexport const sin = unaryKernelFunc({ opSnippet: SIN, packedOpSnippet: SIN_PACKED });\nexport const sinConfig = {\n kernelName: Sin,\n backendName: 'webgl',\n kernelFunc: sin,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1Npbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsR0FBRyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRTVGLE1BQU0sR0FBRyxHQUFHLHVCQUF1QixHQUFHOztDQUVyQyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7OztJQUdmLHdCQUF3Qjs7Q0FFM0IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FDWixlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsR0FBRztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgU2lufSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0NIRUNLX05BTl9TTklQUEVUX1BBQ0tFRH0gZnJvbSAnLi4vYmluYXJ5b3BfcGFja2VkX2dwdSc7XG5pbXBvcnQge0NIRUNLX05BTl9TTklQUEVUX1VOQVJZLCB1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuXG5jb25zdCBTSU4gPSBDSEVDS19OQU5fU05JUFBFVF9VTkFSWSArIGBcbiAgcmV0dXJuIHNpbih4KTtcbmA7XG5cbmNvbnN0IFNJTl9QQUNLRUQgPSBgXG4gIHZlYzQgcmVzdWx0ID0gc2luKHgpO1xuICBidmVjNCBpc05hTiA9IGlzbmFuKHgpO1xuICAke0NIRUNLX05BTl9TTklQUEVUX1BBQ0tFRH1cbiAgcmV0dXJuIHJlc3VsdDtcbmA7XG5cbmV4cG9ydCBjb25zdCBzaW4gPVxuICAgIHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBTSU4sIHBhY2tlZE9wU25pcHBldDogU0lOX1BBQ0tFRH0pO1xuXG5leHBvcnQgY29uc3Qgc2luQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNpbixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHNpbixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sinh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst SINH = `\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`;\nexport const sinh = unaryKernelFunc({ opSnippet: SINH });\nexport const sinhConfig = {\n kernelName: Sinh,\n backendName: 'webgl',\n kernelFunc: sinh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TaW5oLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFbkUsTUFBTSxJQUFJLEdBQUc7OztDQUdaLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgU2luaH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgU0lOSCA9IGBcbiAgZmxvYXQgZTJ4ID0gZXhwKHgpO1xuICByZXR1cm4gKGUyeCAtIDEuMCAvIGUyeCkgLyAyLjA7XG5gO1xuXG5leHBvcnQgY29uc3Qgc2luaCA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBTSU5IfSk7XG5cbmV4cG9ydCBjb25zdCBzaW5oQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNpbmgsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBzaW5oLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Softplus } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst 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`;\nexport const softplus = unaryKernelFunc({ opSnippet: SOFTPLUS });\nexport const softplusConfig = {\n kernelName: Softplus,\n backendName: 'webgl',\n kernelFunc: softplus,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHBsdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvU29mdHBsdXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRSxNQUFNLFFBQVEsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQmhCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsUUFBUTtDQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgU29mdHBsdXN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4va2VybmVsX3V0aWxzL2tlcm5lbF9mdW5jc191dGlscyc7XG5cbmNvbnN0IFNPRlRQTFVTID0gYFxuICBmbG9hdCBlcHNpbG9uID0gMS4xOTIwOTI4OTU1MDc4MTI1ZS03O1xuICBmbG9hdCB0aHJlc2hvbGQgPSBsb2coZXBzaWxvbikgKyAyLjA7XG5cbiAgYm9vbCB0b29fbGFyZ2UgPSB4ID4gLXRocmVzaG9sZDtcbiAgYm9vbCB0b29fc21hbGwgPSB4IDwgdGhyZXNob2xkO1xuXG4gIGZsb2F0IHJlc3VsdDtcbiAgZmxvYXQgZXhwX3ggPSBleHAoeCk7XG5cbiAgaWYgKHRvb19sYXJnZSl7XG4gICAgcmVzdWx0ID0geDtcbiAgfVxuICBlbHNlIGlmICh0b29fc21hbGwpe1xuICAgIHJlc3VsdCA9IGV4cF94O1xuICB9XG4gIGVsc2V7XG4gICAgcmVzdWx0ID0gbG9nKGV4cF94ICsgMS4wKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuYDtcblxuZXhwb3J0IGNvbnN0IHNvZnRwbHVzID0gdW5hcnlLZXJuZWxGdW5jKHtvcFNuaXBwZXQ6IFNPRlRQTFVTfSk7XG5cbmV4cG9ydCBjb25zdCBzb2Z0cGx1c0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTb2Z0cGx1cyxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHNvZnRwbHVzLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SpaceToBatchND, util } from '@tensorflow/tfjs-core';\nimport { padV2 } from './PadV2';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport const spaceToBatchND = (args) => {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { blockShape, paddings } = attrs;\n util.assert(x.shape.length <= 4, () => 'spaceToBatchND for rank > 4 with a WebGL backend not ' +\n 'implemented yet');\n const prod = blockShape.reduce((a, b) => a * b);\n const completePaddings = [[0, 0]];\n completePaddings.push(...paddings);\n for (let i = 1 + blockShape.length; i < x.shape.length; ++i) {\n completePaddings.push([0, 0]);\n }\n const toDispose = [];\n const paddedX = padV2({\n inputs: { x },\n backend,\n attrs: { paddings: completePaddings, constantValue: 0 }\n });\n const reshapedPaddedShape = backend_util.getReshaped(paddedX.shape, blockShape, prod, false);\n const permutedReshapedPaddedPermutation = backend_util.getPermuted(reshapedPaddedShape.length, blockShape.length, false);\n const flattenShape = backend_util.getReshapedPermuted(paddedX.shape, blockShape, prod, false);\n const reshapedPaddedX = reshape({ inputs: { x: paddedX }, backend, attrs: { shape: reshapedPaddedShape } });\n const paddedXT = transpose({\n inputs: { x: reshapedPaddedX },\n backend,\n attrs: { perm: permutedReshapedPaddedPermutation }\n });\n const result = reshape({ inputs: { x: paddedXT }, backend, attrs: { shape: flattenShape } });\n toDispose.push(paddedX);\n toDispose.push(reshapedPaddedX);\n toDispose.push(paddedXT);\n toDispose.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return result;\n};\nexport const spaceToBatchNDConfig = {\n kernelName: SpaceToBatchND,\n backendName: 'webgl',\n kernelFunc: spaceToBatchND\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhY2VUb0JhdGNoTkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvU3BhY2VUb0JhdGNoTkQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsY0FBYyxFQUF5RCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUkxSixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUk5QixFQUFjLEVBQUU7SUFDZixNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQyxJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDbkIsR0FBRyxFQUFFLENBQUMsdURBQXVEO1FBQ3pELGlCQUFpQixDQUFDLENBQUM7SUFFM0IsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVoRCxNQUFNLGdCQUFnQixHQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBbUMsQ0FBQyxDQUFDO0lBQzlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9CO0lBRUQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRXJCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUM7UUFDWCxPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUM7S0FDdEQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxtQkFBbUIsR0FDckIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFckUsTUFBTSxpQ0FBaUMsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUM5RCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUxRCxNQUFNLFlBQVksR0FDZCxZQUFZLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTdFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FDM0IsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUUxRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDekIsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBQztRQUM1QixPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLGlDQUFpQyxFQUFDO0tBQ2pELENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUNSLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxRQUFRLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQyxFQUFDLENBQUMsQ0FBQztJQUU1RSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV6QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWlCO0lBQ2hELFVBQVUsRUFBRSxjQUFjO0lBQzFCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxjQUF1QztDQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGFjZVRvQmF0Y2hORCwgU3BhY2VUb0JhdGNoTkRBdHRycywgU3BhY2VUb0JhdGNoTkRJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5cbmltcG9ydCB7cGFkVjJ9IGZyb20gJy4vUGFkVjInO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vVHJhbnNwb3NlJztcblxuZXhwb3J0IGNvbnN0IHNwYWNlVG9CYXRjaE5EID0gKGFyZ3M6IHtcbiAgaW5wdXRzOiBTcGFjZVRvQmF0Y2hORElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFNwYWNlVG9CYXRjaE5EQXR0cnNcbn0pOiBUZW5zb3JJbmZvID0+IHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YmxvY2tTaGFwZSwgcGFkZGluZ3N9ID0gYXR0cnM7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4LnNoYXBlLmxlbmd0aCA8PSA0LFxuICAgICAgKCkgPT4gJ3NwYWNlVG9CYXRjaE5EIGZvciByYW5rID4gNCB3aXRoIGEgV2ViR0wgYmFja2VuZCBub3QgJyArXG4gICAgICAgICAgJ2ltcGxlbWVudGVkIHlldCcpO1xuXG4gIGNvbnN0IHByb2QgPSBibG9ja1NoYXBlLnJlZHVjZSgoYSwgYikgPT4gYSAqIGIpO1xuXG4gIGNvbnN0IGNvbXBsZXRlUGFkZGluZ3M6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+ID0gW1swLCAwXV07XG4gIGNvbXBsZXRlUGFkZGluZ3MucHVzaCguLi5wYWRkaW5ncyBhcyBBcnJheTxbbnVtYmVyLCBudW1iZXJdPik7XG4gIGZvciAobGV0IGkgPSAxICsgYmxvY2tTaGFwZS5sZW5ndGg7IGkgPCB4LnNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgY29tcGxldGVQYWRkaW5ncy5wdXNoKFswLCAwXSk7XG4gIH1cblxuICBjb25zdCB0b0Rpc3Bvc2UgPSBbXTtcblxuICBjb25zdCBwYWRkZWRYID0gcGFkVjIoe1xuICAgIGlucHV0czoge3h9LFxuICAgIGJhY2tlbmQsXG4gICAgYXR0cnM6IHtwYWRkaW5nczogY29tcGxldGVQYWRkaW5ncywgY29uc3RhbnRWYWx1ZTogMH1cbiAgfSk7XG5cbiAgY29uc3QgcmVzaGFwZWRQYWRkZWRTaGFwZSA9XG4gICAgICBiYWNrZW5kX3V0aWwuZ2V0UmVzaGFwZWQocGFkZGVkWC5zaGFwZSwgYmxvY2tTaGFwZSwgcHJvZCwgZmFsc2UpO1xuXG4gIGNvbnN0IHBlcm11dGVkUmVzaGFwZWRQYWRkZWRQZXJtdXRhdGlvbiA9IGJhY2tlbmRfdXRpbC5nZXRQZXJtdXRlZChcbiAgICAgIHJlc2hhcGVkUGFkZGVkU2hhcGUubGVuZ3RoLCBibG9ja1NoYXBlLmxlbmd0aCwgZmFsc2UpO1xuXG4gIGNvbnN0IGZsYXR0ZW5TaGFwZSA9XG4gICAgICBiYWNrZW5kX3V0aWwuZ2V0UmVzaGFwZWRQZXJtdXRlZChwYWRkZWRYLnNoYXBlLCBibG9ja1NoYXBlLCBwcm9kLCBmYWxzZSk7XG5cbiAgY29uc3QgcmVzaGFwZWRQYWRkZWRYID0gcmVzaGFwZShcbiAgICAgIHtpbnB1dHM6IHt4OiBwYWRkZWRYfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogcmVzaGFwZWRQYWRkZWRTaGFwZX19KTtcblxuICBjb25zdCBwYWRkZWRYVCA9IHRyYW5zcG9zZSh7XG4gICAgaW5wdXRzOiB7eDogcmVzaGFwZWRQYWRkZWRYfSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7cGVybTogcGVybXV0ZWRSZXNoYXBlZFBhZGRlZFBlcm11dGF0aW9ufVxuICB9KTtcblxuICBjb25zdCByZXN1bHQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogcGFkZGVkWFR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBmbGF0dGVuU2hhcGV9fSk7XG5cbiAgdG9EaXNwb3NlLnB1c2gocGFkZGVkWCk7XG4gIHRvRGlzcG9zZS5wdXNoKHJlc2hhcGVkUGFkZGVkWCk7XG4gIHRvRGlzcG9zZS5wdXNoKHBhZGRlZFhUKTtcblxuICB0b0Rpc3Bvc2UuZm9yRWFjaCh0ID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odCkpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc3BhY2VUb0JhdGNoTkRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhY2VUb0JhdGNoTkQsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBzcGFjZVRvQmF0Y2hORCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseFillEmptyRows } from '@tensorflow/tfjs-core';\nimport { sparseFillEmptyRowsImplCPU } from '../kernel_utils/shared';\nexport function sparseFillEmptyRows(args) {\n const { inputs, backend } = args;\n const { indices, values, denseShape, defaultValue } = inputs;\n if (denseShape.shape.length !== 1) {\n throw new Error(`Dense shape must be a vector, saw:\n ${denseShape.shape}`);\n }\n if (indices.shape.length !== 2) {\n throw new Error(`Indices must be a matrix, saw:\n ${indices.shape}`);\n }\n if (values.shape.length !== 1) {\n throw new Error(`Values must be a vector, saw:\n ${values.shape}`);\n }\n if (defaultValue.shape.length !== 0) {\n throw new Error(`Default value must be a scalar, saw:\n ${defaultValue.shape}`);\n }\n const $indices = backend.readSync(indices.dataId);\n const $values = backend.readSync(values.dataId);\n const $denseShape = backend.readSync(denseShape.dataId);\n const $defaultValue = backend.readSync(defaultValue.dataId)[0];\n const [outputIndices, outputIndicesShape, outputValues, emptyRowIndicator, reverseIndexMap] = sparseFillEmptyRowsImplCPU($indices, indices.shape, indices.dtype, $values, values.dtype, $denseShape, $defaultValue);\n return [\n backend.makeTensorInfo(outputIndicesShape, indices.dtype, outputIndices),\n backend.makeTensorInfo([outputIndicesShape[0]], values.dtype, outputValues),\n backend.makeTensorInfo([emptyRowIndicator.length], 'bool', new Uint8Array(emptyRowIndicator.map((value) => Number(value)))),\n backend.makeTensorInfo([reverseIndexMap.length], indices.dtype, new Int32Array(reverseIndexMap)),\n ];\n}\nexport const sparseFillEmptyRowsConfig = {\n kernelName: SparseFillEmptyRows,\n backendName: 'webgl',\n kernelFunc: sparseFillEmptyRows,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlRmlsbEVtcHR5Um93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TcGFyc2VGaWxsRW1wdHlSb3dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsbUJBQW1CLEVBQW9ELE1BQU0sdUJBQXVCLENBQUM7QUFHdkksT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFbEUsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBR25DO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDO1dBQ1QsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDNUI7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDO1dBQ1QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDekI7SUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDO1dBQ1QsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDeEI7SUFDRCxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDO1VBQ1YsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDN0I7SUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUNoRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUM5RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUN0RSxNQUFNLGFBQWEsR0FDZixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQVcsQ0FBQztJQUV2RCxNQUFNLENBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFDL0MsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEdBQ3RDLDBCQUEwQixDQUN0QixRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUM3RCxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDcEMsT0FBTztRQUNMLE9BQU8sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUM7UUFDeEUsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxjQUFjLENBQ2xCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUNsQyxJQUFJLFVBQVUsQ0FDVixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFDdkMsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDckMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBaUI7SUFDckQsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsbUJBQTRDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGFyc2VGaWxsRW1wdHlSb3dzLCBTcGFyc2VGaWxsRW1wdHlSb3dzSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtzcGFyc2VGaWxsRW1wdHlSb3dzSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGFyc2VGaWxsRW1wdHlSb3dzKGFyZ3M6IHtcbiAgaW5wdXRzOiBTcGFyc2VGaWxsRW1wdHlSb3dzSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMXG59KTogW1RlbnNvckluZm8sIFRlbnNvckluZm8sIFRlbnNvckluZm8sIFRlbnNvckluZm9dIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7aW5kaWNlcywgdmFsdWVzLCBkZW5zZVNoYXBlLCBkZWZhdWx0VmFsdWV9ID0gaW5wdXRzO1xuICBpZiAoZGVuc2VTaGFwZS5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlbnNlIHNoYXBlIG11c3QgYmUgYSB2ZWN0b3IsIHNhdzpcbiAgICAgICAgICR7ZGVuc2VTaGFwZS5zaGFwZX1gKTtcbiAgfVxuICBpZiAoaW5kaWNlcy5zaGFwZS5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGljZXMgbXVzdCBiZSBhIG1hdHJpeCwgc2F3OlxuICAgICAgICAgJHtpbmRpY2VzLnNoYXBlfWApO1xuICB9XG4gIGlmICh2YWx1ZXMuc2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZXMgbXVzdCBiZSBhIHZlY3Rvciwgc2F3OlxuICAgICAgICAgJHt2YWx1ZXMuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKGRlZmF1bHRWYWx1ZS5zaGFwZS5sZW5ndGggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlZmF1bHQgdmFsdWUgbXVzdCBiZSBhIHNjYWxhciwgc2F3OlxuICAgICAgICAke2RlZmF1bHRWYWx1ZS5zaGFwZX1gKTtcbiAgfVxuXG4gIGNvbnN0ICRpbmRpY2VzID0gYmFja2VuZC5yZWFkU3luYyhpbmRpY2VzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgJHZhbHVlcyA9IGJhY2tlbmQucmVhZFN5bmModmFsdWVzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgJGRlbnNlU2hhcGUgPSBiYWNrZW5kLnJlYWRTeW5jKGRlbnNlU2hhcGUuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkZGVmYXVsdFZhbHVlID1cbiAgICAgIGJhY2tlbmQucmVhZFN5bmMoZGVmYXVsdFZhbHVlLmRhdGFJZClbMF0gYXMgbnVtYmVyO1xuXG4gIGNvbnN0IFtvdXRwdXRJbmRpY2VzLCBvdXRwdXRJbmRpY2VzU2hhcGUsIG91dHB1dFZhbHVlcyxcbiAgICAgICAgIGVtcHR5Um93SW5kaWNhdG9yLCByZXZlcnNlSW5kZXhNYXBdID1cbiAgICAgIHNwYXJzZUZpbGxFbXB0eVJvd3NJbXBsQ1BVKFxuICAgICAgICAgICRpbmRpY2VzLCBpbmRpY2VzLnNoYXBlLCBpbmRpY2VzLmR0eXBlLCAkdmFsdWVzLCB2YWx1ZXMuZHR5cGUsXG4gICAgICAgICAgJGRlbnNlU2hhcGUsICRkZWZhdWx0VmFsdWUpO1xuICByZXR1cm4gW1xuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0cHV0SW5kaWNlc1NoYXBlLCBpbmRpY2VzLmR0eXBlLCBvdXRwdXRJbmRpY2VzKSxcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgICBbb3V0cHV0SW5kaWNlc1NoYXBlWzBdXSwgdmFsdWVzLmR0eXBlLCBvdXRwdXRWYWx1ZXMpLFxuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICAgIFtlbXB0eVJvd0luZGljYXRvci5sZW5ndGhdLCAnYm9vbCcsXG4gICAgICAgIG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgZW1wdHlSb3dJbmRpY2F0b3IubWFwKCh2YWx1ZTogYm9vbGVhbikgPT4gTnVtYmVyKHZhbHVlKSkpKSxcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgICBbcmV2ZXJzZUluZGV4TWFwLmxlbmd0aF0sIGluZGljZXMuZHR5cGUsXG4gICAgICAgIG5ldyBJbnQzMkFycmF5KHJldmVyc2VJbmRleE1hcCkpLFxuICBdO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlRmlsbEVtcHR5Um93c0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcGFyc2VGaWxsRW1wdHlSb3dzLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3BhcnNlRmlsbEVtcHR5Um93cyBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseReshape } from '@tensorflow/tfjs-core';\nimport { sparseReshapeImplCPU } from '../kernel_utils/shared';\nexport function sparseReshape(args) {\n const { inputs, backend } = args;\n const { inputIndices, inputShape, newShape } = inputs;\n if (inputIndices.shape.length !== 2) {\n throw new Error(`Input indices should be a matrix but received shape ${inputIndices.shape}`);\n }\n if (inputShape.shape.length !== 1) {\n throw new Error(`Input shape should be a vector but received shape ${inputShape.shape}`);\n }\n if (newShape.shape.length !== 1) {\n throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`);\n }\n const $inputShape = Array.from(backend.readSync(inputShape.dataId));\n const $inputIndices = backend.readSync(inputIndices.dataId);\n const targetShape = Array.from(backend.readSync(newShape.dataId));\n const [newIndices, indicesShape, outputShape] = sparseReshapeImplCPU($inputIndices, inputIndices.shape, inputIndices.dtype, $inputShape, targetShape);\n return [\n backend.makeTensorInfo(indicesShape, inputIndices.dtype, newIndices),\n backend.makeTensorInfo([outputShape.length], newShape.dtype, new Int32Array(outputShape)),\n ];\n}\nexport const sparseReshapeConfig = {\n kernelName: SparseReshape,\n backendName: 'webgl',\n kernelFunc: sparseReshape,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlUmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TcGFyc2VSZXNoYXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxhQUFhLEVBQThDLE1BQU0sdUJBQXVCLENBQUM7QUFHL0csT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsTUFBTSxVQUFVLGFBQWEsQ0FDekIsSUFBOEQ7SUFFaEUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3BELElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQ1osWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDM0I7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUNaLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDWCxzREFBc0QsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDN0U7SUFFRCxNQUFNLFdBQVcsR0FDYixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBZSxDQUFDLENBQUM7SUFDbEUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFlLENBQUM7SUFDMUUsTUFBTSxXQUFXLEdBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQWUsQ0FBQyxDQUFDO0lBRWhFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxHQUFHLG9CQUFvQixDQUNoRSxhQUFhLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFDbEUsV0FBVyxDQUFDLENBQUM7SUFDakIsT0FBTztRQUNMLE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO1FBQ3BFLE9BQU8sQ0FBQyxjQUFjLENBQ2xCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDdkUsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUI7SUFDL0MsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLGFBQWE7Q0FDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNwYXJzZVJlc2hhcGUsIFNwYXJzZVJlc2hhcGVJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3NwYXJzZVJlc2hhcGVJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZVJlc2hhcGUoXG4gICAgYXJnczoge2lucHV0czogU3BhcnNlUmVzaGFwZUlucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pOlxuICAgIFtUZW5zb3JJbmZvLCBUZW5zb3JJbmZvXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2lucHV0SW5kaWNlcywgaW5wdXRTaGFwZSwgbmV3U2hhcGV9ID0gaW5wdXRzO1xuICBpZiAoaW5wdXRJbmRpY2VzLnNoYXBlLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgaW5kaWNlcyBzaG91bGQgYmUgYSBtYXRyaXggYnV0IHJlY2VpdmVkIHNoYXBlICR7XG4gICAgICAgIGlucHV0SW5kaWNlcy5zaGFwZX1gKTtcbiAgfVxuICBpZiAoaW5wdXRTaGFwZS5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0IHNoYXBlIHNob3VsZCBiZSBhIHZlY3RvciBidXQgcmVjZWl2ZWQgc2hhcGUgJHtcbiAgICAgICAgaW5wdXRTaGFwZS5zaGFwZX1gKTtcbiAgfVxuXG4gIGlmIChuZXdTaGFwZS5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUYXJnZXQgc2hhcGUgc2hvdWxkIGJlIGEgdmVjdG9yIGJ1dCByZWNlaXZlZCBzaGFwZSAke25ld1NoYXBlLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgJGlucHV0U2hhcGUgPVxuICAgICAgQXJyYXkuZnJvbShiYWNrZW5kLnJlYWRTeW5jKGlucHV0U2hhcGUuZGF0YUlkKSBhcyBUeXBlZEFycmF5KTtcbiAgY29uc3QgJGlucHV0SW5kaWNlcyA9IGJhY2tlbmQucmVhZFN5bmMoaW5wdXRJbmRpY2VzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgdGFyZ2V0U2hhcGUgPVxuICAgICAgQXJyYXkuZnJvbShiYWNrZW5kLnJlYWRTeW5jKG5ld1NoYXBlLmRhdGFJZCkgYXMgVHlwZWRBcnJheSk7XG5cbiAgY29uc3QgW25ld0luZGljZXMsIGluZGljZXNTaGFwZSwgb3V0cHV0U2hhcGVdID0gc3BhcnNlUmVzaGFwZUltcGxDUFUoXG4gICAgICAkaW5wdXRJbmRpY2VzLCBpbnB1dEluZGljZXMuc2hhcGUsIGlucHV0SW5kaWNlcy5kdHlwZSwgJGlucHV0U2hhcGUsXG4gICAgICB0YXJnZXRTaGFwZSk7XG4gIHJldHVybiBbXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhpbmRpY2VzU2hhcGUsIGlucHV0SW5kaWNlcy5kdHlwZSwgbmV3SW5kaWNlcyksXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgW291dHB1dFNoYXBlLmxlbmd0aF0sIG5ld1NoYXBlLmR0eXBlLCBuZXcgSW50MzJBcnJheShvdXRwdXRTaGFwZSkpLFxuICBdO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlUmVzaGFwZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcGFyc2VSZXNoYXBlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3BhcnNlUmVzaGFwZSxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseSegmentMean } from '@tensorflow/tfjs-core';\nimport { sparseSegmentReductionImplCPU } from '../kernel_utils/shared';\nexport function sparseSegmentMean(args) {\n const { inputs, backend } = args;\n const { data, indices, segmentIds } = inputs;\n if (data.shape.length < 1) {\n throw new Error(`Data should be at least 1 dimensional but received scalar`);\n }\n if (indices.shape.length !== 1) {\n throw new Error(`Indices should be a vector but received shape\n ${indices.shape}`);\n }\n if (segmentIds.shape.length !== 1) {\n throw new Error(`Segment ids should be a vector but received shape\n ${segmentIds.shape}`);\n }\n const $data = backend.readSync(data.dataId);\n const $indices = backend.readSync(indices.dataId);\n const $segmentIds = backend.readSync(segmentIds.dataId);\n const [outputData, outputDataShape] = sparseSegmentReductionImplCPU($data, data.shape, data.dtype, $indices, $segmentIds, true);\n return backend.makeTensorInfo(outputDataShape, data.dtype, outputData);\n}\nexport const sparseSegmentMeanConfig = {\n kernelName: SparseSegmentMean,\n backendName: 'webgl',\n kernelFunc: sparseSegmentMean,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudE1lYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvU3BhcnNlU2VnbWVudE1lYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixpQkFBaUIsRUFBa0QsTUFBTSx1QkFBdUIsQ0FBQztBQUduSSxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRSxNQUFNLFVBQVUsaUJBQWlCLENBQzdCLElBQWtFO0lBRXBFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLDJEQUEyRCxDQUFDLENBQUM7S0FDbEU7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQztnQkFDSixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNqQztJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBQzFELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBZSxDQUFDO0lBRXRFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLEdBQUcsNkJBQTZCLENBQy9ELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQjtJQUNuRCxVQUFVLEVBQUUsaUJBQWlCO0lBQzdCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxpQkFBMEM7Q0FDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFNwYXJzZVNlZ21lbnRNZWFuLCBTcGFyc2VTZWdtZW50TWVhbklucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7c3BhcnNlU2VnbWVudFJlZHVjdGlvbkltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3BhcnNlU2VnbWVudE1lYW4oXG4gICAgYXJnczoge2lucHV0czogU3BhcnNlU2VnbWVudE1lYW5JbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7ZGF0YSwgaW5kaWNlcywgc2VnbWVudElkc30gPSBpbnB1dHM7XG4gIGlmIChkYXRhLnNoYXBlLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEYXRhIHNob3VsZCBiZSBhdCBsZWFzdCAxIGRpbWVuc2lvbmFsIGJ1dCByZWNlaXZlZCBzY2FsYXJgKTtcbiAgfVxuICBpZiAoaW5kaWNlcy5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGljZXMgc2hvdWxkIGJlIGEgdmVjdG9yIGJ1dCByZWNlaXZlZCBzaGFwZVxuICAgICAgICAgICAgICAke2luZGljZXMuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKHNlZ21lbnRJZHMuc2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWdtZW50IGlkcyBzaG91bGQgYmUgYSB2ZWN0b3IgYnV0IHJlY2VpdmVkIHNoYXBlXG4gICAgICAgICAgICAgICR7c2VnbWVudElkcy5zaGFwZX1gKTtcbiAgfVxuXG4gIGNvbnN0ICRkYXRhID0gYmFja2VuZC5yZWFkU3luYyhkYXRhLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgJGluZGljZXMgPSBiYWNrZW5kLnJlYWRTeW5jKGluZGljZXMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkc2VnbWVudElkcyA9IGJhY2tlbmQucmVhZFN5bmMoc2VnbWVudElkcy5kYXRhSWQpIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgW291dHB1dERhdGEsIG91dHB1dERhdGFTaGFwZV0gPSBzcGFyc2VTZWdtZW50UmVkdWN0aW9uSW1wbENQVShcbiAgICAgICRkYXRhLCBkYXRhLnNoYXBlLCBkYXRhLmR0eXBlLCAkaW5kaWNlcywgJHNlZ21lbnRJZHMsIHRydWUpO1xuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRwdXREYXRhU2hhcGUsIGRhdGEuZHR5cGUsIG91dHB1dERhdGEpO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlU2VnbWVudE1lYW5Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhcnNlU2VnbWVudE1lYW4sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBzcGFyc2VTZWdtZW50TWVhbiBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseSegmentSum } from '@tensorflow/tfjs-core';\nimport { sparseSegmentReductionImplCPU } from '../kernel_utils/shared';\nexport function sparseSegmentSum(args) {\n const { inputs, backend } = args;\n const { data, indices, segmentIds } = inputs;\n if (data.shape.length < 1) {\n throw new Error(`Data should be at least 1 dimensional but received scalar`);\n }\n if (indices.shape.length !== 1) {\n throw new Error(`Indices should be a vector but received shape\n ${indices.shape}`);\n }\n if (segmentIds.shape.length !== 1) {\n throw new Error(`Segment ids should be a vector but received shape\n ${segmentIds.shape}`);\n }\n const $data = backend.readSync(data.dataId);\n const $indices = backend.readSync(indices.dataId);\n const $segmentIds = backend.readSync(segmentIds.dataId);\n const [outputData, outputDataShape] = sparseSegmentReductionImplCPU($data, data.shape, data.dtype, $indices, $segmentIds);\n return backend.makeTensorInfo(outputDataShape, data.dtype, outputData);\n}\nexport const sparseSegmentSumConfig = {\n kernelName: SparseSegmentSum,\n backendName: 'webgl',\n kernelFunc: sparseSegmentSum,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudFN1bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TcGFyc2VTZWdtZW50U3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsZ0JBQWdCLEVBQWlELE1BQU0sdUJBQXVCLENBQUM7QUFHakksT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFckUsTUFBTSxVQUFVLGdCQUFnQixDQUM1QixJQUFpRTtJQUVuRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FDWCwyREFBMkQsQ0FBQyxDQUFDO0tBQ2xFO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQztlQUNMLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQztlQUNMLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2hDO0lBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFlLENBQUM7SUFDMUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFlLENBQUM7SUFDaEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFlLENBQUM7SUFFdEUsTUFBTSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsR0FBRyw2QkFBNkIsQ0FDL0QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBaUI7SUFDbEQsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsZ0JBQXlDO0NBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGFyc2VTZWdtZW50U3VtLCBTcGFyc2VTZWdtZW50U3VtSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtzcGFyc2VTZWdtZW50UmVkdWN0aW9uSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGFyc2VTZWdtZW50U3VtKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFNwYXJzZVNlZ21lbnRTdW1JbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0x9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7ZGF0YSwgaW5kaWNlcywgc2VnbWVudElkc30gPSBpbnB1dHM7XG4gIGlmIChkYXRhLnNoYXBlLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEYXRhIHNob3VsZCBiZSBhdCBsZWFzdCAxIGRpbWVuc2lvbmFsIGJ1dCByZWNlaXZlZCBzY2FsYXJgKTtcbiAgfVxuICBpZiAoaW5kaWNlcy5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGljZXMgc2hvdWxkIGJlIGEgdmVjdG9yIGJ1dCByZWNlaXZlZCBzaGFwZVxuICAgICAgICAgICAgICR7aW5kaWNlcy5zaGFwZX1gKTtcbiAgfVxuICBpZiAoc2VnbWVudElkcy5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlZ21lbnQgaWRzIHNob3VsZCBiZSBhIHZlY3RvciBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgICAgICAke3NlZ21lbnRJZHMuc2hhcGV9YCk7XG4gIH1cblxuICBjb25zdCAkZGF0YSA9IGJhY2tlbmQucmVhZFN5bmMoZGF0YS5kYXRhSWQpIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0ICRpbmRpY2VzID0gYmFja2VuZC5yZWFkU3luYyhpbmRpY2VzLmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgJHNlZ21lbnRJZHMgPSBiYWNrZW5kLnJlYWRTeW5jKHNlZ21lbnRJZHMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IFtvdXRwdXREYXRhLCBvdXRwdXREYXRhU2hhcGVdID0gc3BhcnNlU2VnbWVudFJlZHVjdGlvbkltcGxDUFUoXG4gICAgICAkZGF0YSwgZGF0YS5zaGFwZSwgZGF0YS5kdHlwZSwgJGluZGljZXMsICRzZWdtZW50SWRzKTtcbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0cHV0RGF0YVNoYXBlLCBkYXRhLmR0eXBlLCBvdXRwdXREYXRhKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNwYXJzZVNlZ21lbnRTdW1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhcnNlU2VnbWVudFN1bSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHNwYXJzZVNlZ21lbnRTdW0gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SparseToDense, util } from '@tensorflow/tfjs-core';\nimport { scatterImplCPU } from '../kernel_utils/shared';\nimport { ScatterProgram } from '../scatter_gpu';\nimport { reshape } from './Reshape';\nexport function sparseToDense(args) {\n const { inputs, backend, attrs } = args;\n const { sparseIndices, sparseValues, defaultValue } = inputs;\n const { outputShape } = attrs;\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util.calculateShapes(sparseValues, sparseIndices, outputShape);\n const sumDupeIndices = false;\n if (sparseValues.dtype === 'string') {\n const indicesBuf = backend.bufferSync(sparseIndices);\n const updatesBuf = backend.bufferSync(sparseValues);\n const $defaultValue = util.decodeString(backend.readSync(defaultValue.dataId)[0]);\n const outBuf = scatterImplCPU(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices);\n return backend.makeTensorInfo(outputShape, outBuf.dtype, outBuf.values);\n }\n const program = new ScatterProgram(numUpdates, sliceRank, sparseIndices.shape.length, sparseValues.shape.length, strides, [outputSize, 1], sumDupeIndices);\n const res = backend.runWebGLProgram(program, [sparseValues, sparseIndices, defaultValue], sparseValues.dtype);\n const reshaped = reshape({ inputs: { x: res }, backend, attrs: { shape: outputShape } });\n backend.disposeIntermediateTensorInfo(res);\n return reshaped;\n}\nexport const sparseToDenseConfig = {\n kernelName: SparseToDense,\n backendName: 'webgl',\n kernelFunc: sparseToDense\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlVG9EZW5zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TcGFyc2VUb0RlbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWtDLGFBQWEsRUFBdUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHN0osT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFJN0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNELE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFNUIsTUFBTSxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsR0FDekQsWUFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQztJQUU3QixJQUFJLFlBQVksQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQ25DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWdCLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWlCLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQ25DLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBZSxDQUFDLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUN6QixVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFDdEUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN6RTtJQUNELE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxDQUM5QixVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUNqRCxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFekUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FDL0IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUUsTUFBTSxRQUFRLEdBQ1YsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsV0FBVyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRXRFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSYW5rLCBTcGFyc2VUb0RlbnNlLCBTcGFyc2VUb0RlbnNlQXR0cnMsIFNwYXJzZVRvRGVuc2VJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3NjYXR0ZXJJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcbmltcG9ydCB7U2NhdHRlclByb2dyYW19IGZyb20gJy4uL3NjYXR0ZXJfZ3B1JztcblxuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3BhcnNlVG9EZW5zZShhcmdzOiB7XG4gIGlucHV0czogU3BhcnNlVG9EZW5zZUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFNwYXJzZVRvRGVuc2VBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7c3BhcnNlSW5kaWNlcywgc3BhcnNlVmFsdWVzLCBkZWZhdWx0VmFsdWV9ID0gaW5wdXRzO1xuICBjb25zdCB7b3V0cHV0U2hhcGV9ID0gYXR0cnM7XG5cbiAgY29uc3Qge3NsaWNlUmFuaywgbnVtVXBkYXRlcywgc2xpY2VTaXplLCBzdHJpZGVzLCBvdXRwdXRTaXplfSA9XG4gICAgICBiYWNrZW5kX3V0aWwuY2FsY3VsYXRlU2hhcGVzKHNwYXJzZVZhbHVlcywgc3BhcnNlSW5kaWNlcywgb3V0cHV0U2hhcGUpO1xuICBjb25zdCBzdW1EdXBlSW5kaWNlcyA9IGZhbHNlO1xuXG4gIGlmIChzcGFyc2VWYWx1ZXMuZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgaW5kaWNlc0J1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYzxSYW5rLCAnaW50MzInPihzcGFyc2VJbmRpY2VzKTtcbiAgICBjb25zdCB1cGRhdGVzQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdzdHJpbmcnPihzcGFyc2VWYWx1ZXMpO1xuICAgIGNvbnN0ICRkZWZhdWx0VmFsdWUgPSB1dGlsLmRlY29kZVN0cmluZyhcbiAgICAgICAgYmFja2VuZC5yZWFkU3luYyhkZWZhdWx0VmFsdWUuZGF0YUlkKVswXSBhcyBVaW50OEFycmF5KTtcbiAgICBjb25zdCBvdXRCdWYgPSBzY2F0dGVySW1wbENQVShcbiAgICAgICAgaW5kaWNlc0J1ZiwgdXBkYXRlc0J1Ziwgb3V0cHV0U2hhcGUsIG91dHB1dFNpemUsIHNsaWNlU2l6ZSwgbnVtVXBkYXRlcyxcbiAgICAgICAgc2xpY2VSYW5rLCBzdHJpZGVzLCAkZGVmYXVsdFZhbHVlLCBzdW1EdXBlSW5kaWNlcyk7XG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0cHV0U2hhcGUsIG91dEJ1Zi5kdHlwZSwgb3V0QnVmLnZhbHVlcyk7XG4gIH1cbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBTY2F0dGVyUHJvZ3JhbShcbiAgICAgIG51bVVwZGF0ZXMsIHNsaWNlUmFuaywgc3BhcnNlSW5kaWNlcy5zaGFwZS5sZW5ndGgsXG4gICAgICBzcGFyc2VWYWx1ZXMuc2hhcGUubGVuZ3RoLCBzdHJpZGVzLCBbb3V0cHV0U2l6ZSwgMV0sIHN1bUR1cGVJbmRpY2VzKTtcblxuICBjb25zdCByZXMgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgIHByb2dyYW0sIFtzcGFyc2VWYWx1ZXMsIHNwYXJzZUluZGljZXMsIGRlZmF1bHRWYWx1ZV0sIHNwYXJzZVZhbHVlcy5kdHlwZSk7XG5cbiAgY29uc3QgcmVzaGFwZWQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVzfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogb3V0cHV0U2hhcGV9fSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXMpO1xuICByZXR1cm4gcmVzaGFwZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBzcGFyc2VUb0RlbnNlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNwYXJzZVRvRGVuc2UsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBzcGFyc2VUb0RlbnNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SplitV, util } from '@tensorflow/tfjs-core';\nimport { slice } from './Slice';\nexport function splitV(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { numOrSizeSplits, axis } = attrs;\n const $axis = util.parseAxisParam(axis, x.shape)[0];\n const splitSizes = backend_util.prepareSplitSize(x, numOrSizeSplits, $axis);\n const xRank = x.shape.length;\n const begin = new Array(xRank).fill(0);\n const size = x.shape.slice();\n return splitSizes.map(s => {\n const sliceSize = [...size];\n sliceSize[$axis] = s;\n const sliceT = slice({ inputs: { x }, backend, attrs: { begin, size: sliceSize } });\n begin[$axis] += s;\n return sliceT;\n });\n}\nexport const splitVConfig = {\n kernelName: SplitV,\n backendName: 'webgl',\n kernelFunc: splitV\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BsaXRWLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1NwbGl0Vi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixNQUFNLEVBQXlDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xJLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUIsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsSUFDeUU7SUFFM0UsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTVFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRTdCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN4QixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDNUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixNQUFNLE1BQU0sR0FDUixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGxpdFYsIFNwbGl0VkF0dHJzLCBTcGxpdFZJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL1NsaWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0VihcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBTcGxpdFZJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIGF0dHJzOiBTcGxpdFZBdHRyc30pOlxuICAgIFRlbnNvckluZm9bXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge251bU9yU2l6ZVNwbGl0cywgYXhpc30gPSBhdHRycztcblxuICBjb25zdCAkYXhpcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSlbMF07XG4gIGNvbnN0IHNwbGl0U2l6ZXMgPSBiYWNrZW5kX3V0aWwucHJlcGFyZVNwbGl0U2l6ZSh4LCBudW1PclNpemVTcGxpdHMsICRheGlzKTtcblxuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuICBjb25zdCBiZWdpbiA9IG5ldyBBcnJheSh4UmFuaykuZmlsbCgwKTtcbiAgY29uc3Qgc2l6ZSA9IHguc2hhcGUuc2xpY2UoKTtcblxuICByZXR1cm4gc3BsaXRTaXplcy5tYXAocyA9PiB7XG4gICAgY29uc3Qgc2xpY2VTaXplID0gWy4uLnNpemVdO1xuICAgIHNsaWNlU2l6ZVskYXhpc10gPSBzO1xuICAgIGNvbnN0IHNsaWNlVCA9XG4gICAgICAgIHNsaWNlKHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtiZWdpbiwgc2l6ZTogc2xpY2VTaXplfX0pO1xuICAgIGJlZ2luWyRheGlzXSArPSBzO1xuICAgIHJldHVybiBzbGljZVQ7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3Qgc3BsaXRWQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNwbGl0VixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHNwbGl0ViBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sqrt } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nimport { sqrtImplCPU } from '../kernel_utils/shared';\nconst SQRT = `return sqrt(x);`;\nexport const sqrt = unaryKernelFunc({ opSnippet: SQRT, packedOpSnippet: SQRT, cpuKernelImpl: sqrtImplCPU });\nexport const sqrtConfig = {\n kernelName: Sqrt,\n backendName: 'webgl',\n kernelFunc: sqrt\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TcXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUMvQixFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQztBQUUxRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU3FydH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuaW1wb3J0IHtzcXJ0SW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmNvbnN0IFNRUlQgPSBgcmV0dXJuIHNxcnQoeCk7YDtcblxuZXhwb3J0IGNvbnN0IHNxcnQgPSB1bmFyeUtlcm5lbEZ1bmMoXG4gICAge29wU25pcHBldDogU1FSVCwgcGFja2VkT3BTbmlwcGV0OiBTUVJULCBjcHVLZXJuZWxJbXBsOiBzcXJ0SW1wbENQVX0pO1xuXG5leHBvcnQgY29uc3Qgc3FydENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcXJ0LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3FydCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Square } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst SQUARE = `return x * x;`;\nexport const square = unaryKernelFunc({ opSnippet: SQUARE });\nexport const squareConfig = {\n kernelName: Square,\n backendName: 'webgl',\n kernelFunc: square,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3F1YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1NxdWFyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsTUFBTSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRW5FLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7QUFFM0QsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsTUFBTTtDQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgU3F1YXJlfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4va2VybmVsX3V0aWxzL2tlcm5lbF9mdW5jc191dGlscyc7XG5cbmNvbnN0IFNRVUFSRSA9IGByZXR1cm4geCAqIHg7YDtcblxuZXhwb3J0IGNvbnN0IHNxdWFyZSA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBTUVVBUkV9KTtcblxuZXhwb3J0IGNvbnN0IHNxdWFyZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcXVhcmUsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiBzcXVhcmUsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SquaredDifference } from '@tensorflow/tfjs-core';\nimport { binaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst SQUARED_DIFFERENCE = 'return (a - b) * (a - b);';\nexport const squaredDifference = binaryKernelFunc({ opSnippet: SQUARED_DIFFERENCE, packedOpSnippet: SQUARED_DIFFERENCE });\nexport const squaredDifferenceConfig = {\n kernelName: SquaredDifference,\n backendName: 'webgl',\n kernelFunc: squaredDifference,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3F1YXJlZERpZmZlcmVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvU3F1YXJlZERpZmZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFcEUsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FDN0MsRUFBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFDLENBQUMsQ0FBQztBQUUxRSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBaUI7SUFDbkQsVUFBVSxFQUFFLGlCQUFpQjtJQUM3QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsaUJBQWlCO0NBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTcXVhcmVkRGlmZmVyZW5jZX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgU1FVQVJFRF9ESUZGRVJFTkNFID0gJ3JldHVybiAoYSAtIGIpICogKGEgLSBiKTsnO1xuXG5leHBvcnQgY29uc3Qgc3F1YXJlZERpZmZlcmVuY2UgPSBiaW5hcnlLZXJuZWxGdW5jKFxuICAgIHtvcFNuaXBwZXQ6IFNRVUFSRURfRElGRkVSRU5DRSwgcGFja2VkT3BTbmlwcGV0OiBTUVVBUkVEX0RJRkZFUkVOQ0V9KTtcblxuZXhwb3J0IGNvbnN0IHNxdWFyZWREaWZmZXJlbmNlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNxdWFyZWREaWZmZXJlbmNlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3F1YXJlZERpZmZlcmVuY2UsXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, StaticRegexReplace } from '@tensorflow/tfjs-core';\nimport { staticRegexReplaceImplCPU } from '../kernel_utils/shared';\nexport function staticRegexReplace(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n if (x.dtype !== 'string') {\n throw new Error('Input must be of datatype string');\n }\n const $x = backend.readSync(x.dataId);\n const stringInput = backend_util.fromUint8ToStringArray($x);\n const output = staticRegexReplaceImplCPU(stringInput, 'string', attrs);\n return backend.makeTensorInfo(x.shape, 'string', output);\n}\nexport const staticRegexReplaceConfig = {\n kernelName: StaticRegexReplace,\n backendName: 'webgl',\n kernelFunc: staticRegexReplace,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGljUmVnZXhSZXBsYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1N0YXRpY1JlZ2V4UmVwbGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUEwQyxrQkFBa0IsRUFBZ0UsTUFBTSx1QkFBdUIsQ0FBQztBQUU5SyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFJbEM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUVuQixJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztLQUNyRDtJQUVELE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBaUIsQ0FBQztJQUV0RCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUQsTUFBTSxNQUFNLEdBQUcseUJBQXlCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFDckIsS0FBZ0MsQ0FBQyxDQUFDO0lBRTNFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWlCO0lBQ3BELFVBQVUsRUFBRSxrQkFBa0I7SUFDOUIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLGtCQUEyQztDQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBOYW1lZEF0dHJNYXAsIFN0YXRpY1JlZ2V4UmVwbGFjZSwgU3RhdGljUmVnZXhSZXBsYWNlQXR0cnMsIFN0YXRpY1JlZ2V4UmVwbGFjZUlucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3N0YXRpY1JlZ2V4UmVwbGFjZUltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGljUmVnZXhSZXBsYWNlKGFyZ3M6IHtcbiAgaW5wdXRzOiBTdGF0aWNSZWdleFJlcGxhY2VJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsXG4gIGF0dHJzOiBTdGF0aWNSZWdleFJlcGxhY2VBdHRycyxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuXG4gIGlmICh4LmR0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgbXVzdCBiZSBvZiBkYXRhdHlwZSBzdHJpbmcnKTtcbiAgfVxuXG4gIGNvbnN0ICR4ID0gYmFja2VuZC5yZWFkU3luYyh4LmRhdGFJZCkgYXMgVWludDhBcnJheVtdO1xuXG4gIGNvbnN0IHN0cmluZ0lucHV0ID0gYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkoJHgpO1xuICBjb25zdCBvdXRwdXQgPSBzdGF0aWNSZWdleFJlcGxhY2VJbXBsQ1BVKHN0cmluZ0lucHV0LCAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeC5zaGFwZSwgJ3N0cmluZycsIG91dHB1dCk7XG59XG5cbmV4cG9ydCBjb25zdCBzdGF0aWNSZWdleFJlcGxhY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3RhdGljUmVnZXhSZXBsYWNlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3RhdGljUmVnZXhSZXBsYWNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Step } from '@tensorflow/tfjs-core';\nimport { CHECK_NAN_SNIPPET, UnaryOpProgram } from '../unaryop_gpu';\nexport function step({ inputs, attrs, backend }) {\n const { x } = inputs;\n const opSnippet = CHECK_NAN_SNIPPET + `\n return x > 0.0 ? 1.0 : float(${attrs.alpha});\n `;\n const program = new UnaryOpProgram(x.shape, opSnippet);\n return backend.runWebGLProgram(program, [x], x.dtype);\n}\nexport const stepConfig = {\n kernelName: Step,\n backendName: 'webgl',\n kernelFunc: step,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsSUFBSSxFQUFxQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pHLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxNQUFNLFVBQVUsSUFBSSxDQUNoQixFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUMrQztJQUV4RSxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixHQUFHO21DQUNMLEtBQUssQ0FBQyxLQUFLO0dBQzNDLENBQUM7SUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXZELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTdGVwLCBTdGVwQXR0cnMsIFRlbnNvckluZm8sIFVuYXJ5SW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtDSEVDS19OQU5fU05JUFBFVCwgVW5hcnlPcFByb2dyYW19IGZyb20gJy4uL3VuYXJ5b3BfZ3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXAoXG4gICAge2lucHV0cywgYXR0cnMsIGJhY2tlbmR9OlxuICAgICAgICB7aW5wdXRzOiBVbmFyeUlucHV0cywgYXR0cnM6IFN0ZXBBdHRycywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IG9wU25pcHBldCA9IENIRUNLX05BTl9TTklQUEVUICsgYFxuICAgIHJldHVybiB4ID4gMC4wID8gMS4wIDogZmxvYXQoJHthdHRycy5hbHBoYX0pO1xuICBgO1xuXG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgVW5hcnlPcFByb2dyYW0oeC5zaGFwZSwgb3BTbmlwcGV0KTtcblxuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0ZXBDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3RlcCxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHN0ZXAgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class StridedSliceProgram {\n constructor(begin, strides, size) {\n this.variableNames = ['x'];\n this.outputShape = size;\n const rank = size.length;\n const inputDtype = getCoordsDataType(size.length);\n const dtype = getCoordsDataType(size.length);\n let newCoords = '';\n if (rank === 1) {\n newCoords = 'coords * strides + begin';\n }\n else {\n let outputAxis = 0;\n newCoords =\n size.map((_, i) => {\n outputAxis++;\n return size.length === 1 ?\n `coords * strides[${i}] + begin[${i}]` :\n `coords[${outputAxis - 1}] * strides[${i}] + begin[${i}]`;\n })\n .join(',');\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaWRlZF9zbGljZV9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3N0cmlkZWRfc2xpY2VfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE1BQU0sT0FBTyxtQkFBbUI7SUFLOUIsWUFBWSxLQUFlLEVBQUUsT0FBaUIsRUFBRSxJQUFjO1FBSjlELGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUtwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0MsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLFNBQVMsR0FBRywwQkFBMEIsQ0FBQztTQUN4QzthQUFNO1lBQ0wsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLFNBQVM7Z0JBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDWixVQUFVLEVBQUUsQ0FBQztvQkFDYixPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDeEMsVUFBVSxVQUFVLEdBQUcsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztnQkFDaEUsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7UUFDWixVQUFVLFlBQVksVUFBVSxJQUFJLEtBQUs7UUFDekMsVUFBVSxjQUFjLFVBQVUsSUFBSSxPQUFPOzs7VUFHM0MsS0FBSzt5QkFDVSxTQUFTOztLQUU3QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFN0cmlkZWRTbGljZVByb2dyYW0gaW1wbGVtZW50cyBHUEdQVVByb2dyYW0ge1xuICB2YXJpYWJsZU5hbWVzID0gWyd4J107XG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXTtcbiAgdXNlckNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihiZWdpbjogbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdLCBzaXplOiBudW1iZXJbXSkge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBzaXplO1xuICAgIGNvbnN0IHJhbmsgPSBzaXplLmxlbmd0aDtcbiAgICBjb25zdCBpbnB1dER0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUoc2l6ZS5sZW5ndGgpO1xuICAgIGNvbnN0IGR0eXBlID0gZ2V0Q29vcmRzRGF0YVR5cGUoc2l6ZS5sZW5ndGgpO1xuXG4gICAgbGV0IG5ld0Nvb3JkcyA9ICcnO1xuICAgIGlmIChyYW5rID09PSAxKSB7XG4gICAgICBuZXdDb29yZHMgPSAnY29vcmRzICogc3RyaWRlcyArIGJlZ2luJztcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG91dHB1dEF4aXMgPSAwO1xuICAgICAgbmV3Q29vcmRzID1cbiAgICAgICAgICBzaXplLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIG91dHB1dEF4aXMrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZS5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgICAgICAgICBgY29vcmRzICogc3RyaWRlc1ske2l9XSArIGJlZ2luWyR7aX1dYCA6XG4gICAgICAgICAgICAgICAgICAgIGBjb29yZHNbJHtvdXRwdXRBeGlzIC0gMX1dICogc3RyaWRlc1ske2l9XSArIGJlZ2luWyR7aX1dYDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgJHtpbnB1dER0eXBlfSBiZWdpbiA9ICR7aW5wdXREdHlwZX0oJHtiZWdpbn0pO1xuICAgICAgJHtpbnB1dER0eXBlfSBzdHJpZGVzID0gJHtpbnB1dER0eXBlfSgke3N0cmlkZXN9KTtcblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAke2R0eXBlfSBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgc2V0T3V0cHV0KGdldFgoJHtuZXdDb29yZHN9KSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer, slice_util, StridedSlice, util } from '@tensorflow/tfjs-core';\nimport { stridedSliceImplCPU } from '../kernel_utils/shared';\nimport { StridedSliceProgram } from '../strided_slice_gpu';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nexport function stridedSlice(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs;\n const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask);\n let result;\n if (isIdentity) {\n // Optimization #1, slice is a no-op plus reshape\n result = reshape({ inputs: { x }, backend, attrs: { shape: finalShape } });\n }\n else if (sliceDim0 || isSimpleSlice) {\n // Optimization #2, slice is memory contiguous (only occurs in dim 0)\n util.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`);\n const size = slice_util.computeOutShape($begin, $end, $strides);\n // To tolerate begin[0] > end[0] (a 0-output slice), we min(begin, end).\n const sliced = slice({ inputs: { x }, backend, attrs: { begin: $begin, size } });\n result =\n reshape({ inputs: { x: sliced }, backend, attrs: { shape: finalShape } });\n backend.disposeIntermediateTensorInfo(sliced);\n }\n else {\n const shouldExecuteOnCPU = backend.shouldExecuteOnCPU([x]);\n if (shouldExecuteOnCPU) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const values = backend.readSync(x.dataId);\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const xBuf = buffer(x.shape, x.dtype, values);\n const resultValues = stridedSliceImplCPU(finalShapeSparse, xBuf, $strides, $begin);\n result = backend.makeTensorInfo(finalShape, x.dtype, resultValues.values);\n }\n else {\n const program = new StridedSliceProgram($begin, $strides, finalShapeSparse);\n result = backend.runWebGLProgram(program, [x], x.dtype);\n }\n }\n const resultReshaped = reshape({ inputs: { x: result }, backend, attrs: { shape: finalShape } });\n backend.disposeIntermediateTensorInfo(result);\n return resultReshaped;\n}\nexport const stridedSliceConfig = {\n kernelName: StridedSlice,\n backendName: 'webgl',\n kernelFunc: stridedSlice\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaWRlZFNsaWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1N0cmlkZWRTbGljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFrQyxVQUFVLEVBQUUsWUFBWSxFQUErRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUcxTCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUIsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUk1QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFDSixLQUFLLEVBQ0wsR0FBRyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFlBQVksRUFDWixXQUFXLEVBQ1gsY0FBYyxFQUNmLEdBQUcsS0FBSyxDQUFDO0lBRVYsTUFBTSxFQUNKLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxhQUFhLEVBQ2IsS0FBSyxFQUFFLE1BQU0sRUFDYixHQUFHLEVBQUUsSUFBSSxFQUNULE9BQU8sRUFBRSxRQUFRLEVBQ2xCLEdBQ0csVUFBVSxDQUFDLFNBQVMsQ0FDaEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFDOUQsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRXJDLElBQUksTUFBTSxDQUFDO0lBRVgsSUFBSSxVQUFVLEVBQUU7UUFDZCxpREFBaUQ7UUFDakQsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQ3RFO1NBQU0sSUFBSSxTQUFTLElBQUksYUFBYSxFQUFFO1FBQ3JDLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDbkIsR0FBRyxFQUFFLENBQUMseUNBQXlDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUVyRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEUsd0VBQXdFO1FBQ3hFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxFQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNO1lBQ0YsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMvQztTQUFNO1FBQ0wsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksa0JBQWtCLEVBQUU7WUFDdEIsMERBQTBEO1lBQzFELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBZSxDQUFDO1lBQ3hELDBEQUEwRDtZQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBdUIsQ0FBQztZQUNwRSxNQUFNLFlBQVksR0FDZCxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzRTthQUFNO1lBQ0wsTUFBTSxPQUFPLEdBQ1QsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDaEUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO0tBQ0Y7SUFFRCxNQUFNLGNBQWMsR0FDaEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRXhFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QyxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWlCO0lBQzlDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxZQUFxQztDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSYW5rLCBzbGljZV91dGlsLCBTdHJpZGVkU2xpY2UsIFN0cmlkZWRTbGljZUF0dHJzLCBTdHJpZGVkU2xpY2VJbnB1dHMsIFRlbnNvckJ1ZmZlciwgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7c3RyaWRlZFNsaWNlSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5pbXBvcnQge1N0cmlkZWRTbGljZVByb2dyYW19IGZyb20gJy4uL3N0cmlkZWRfc2xpY2VfZ3B1JztcblxuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi9TbGljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpZGVkU2xpY2UoYXJnczoge1xuICBpbnB1dHM6IFN0cmlkZWRTbGljZUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFN0cmlkZWRTbGljZUF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge1xuICAgIGJlZ2luLFxuICAgIGVuZCxcbiAgICBzdHJpZGVzLFxuICAgIGJlZ2luTWFzayxcbiAgICBlbmRNYXNrLFxuICAgIGVsbGlwc2lzTWFzayxcbiAgICBuZXdBeGlzTWFzayxcbiAgICBzaHJpbmtBeGlzTWFza1xuICB9ID0gYXR0cnM7XG5cbiAgY29uc3Qge1xuICAgIGZpbmFsU2hhcGVTcGFyc2UsXG4gICAgZmluYWxTaGFwZSxcbiAgICBpc0lkZW50aXR5LFxuICAgIHNsaWNlRGltMCxcbiAgICBpc1NpbXBsZVNsaWNlLFxuICAgIGJlZ2luOiAkYmVnaW4sXG4gICAgZW5kOiAkZW5kLFxuICAgIHN0cmlkZXM6ICRzdHJpZGVzXG4gIH0gPVxuICAgICAgc2xpY2VfdXRpbC5zbGljZUluZm8oXG4gICAgICAgICAgeC5zaGFwZSwgYmVnaW4sIGVuZCwgc3RyaWRlcywgYmVnaW5NYXNrLCBlbmRNYXNrLCBlbGxpcHNpc01hc2ssXG4gICAgICAgICAgbmV3QXhpc01hc2ssIHNocmlua0F4aXNNYXNrKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIGlmIChpc0lkZW50aXR5KSB7XG4gICAgLy8gT3B0aW1pemF0aW9uICMxLCBzbGljZSBpcyBhIG5vLW9wIHBsdXMgcmVzaGFwZVxuICAgIHJlc3VsdCA9IHJlc2hhcGUoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBmaW5hbFNoYXBlfX0pO1xuICB9IGVsc2UgaWYgKHNsaWNlRGltMCB8fCBpc1NpbXBsZVNsaWNlKSB7XG4gICAgLy8gT3B0aW1pemF0aW9uICMyLCBzbGljZSBpcyBtZW1vcnkgY29udGlndW91cyAob25seSBvY2N1cnMgaW4gZGltIDApXG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHguc2hhcGUubGVuZ3RoID49IDEsXG4gICAgICAgICgpID0+IGBJbnB1dCBtdXN0IGhhdmUgcmFuayBhdCBsZWFzdCAxLCBnb3Q6ICR7eC5zaGFwZS5sZW5ndGh9YCk7XG5cbiAgICBjb25zdCBzaXplID0gc2xpY2VfdXRpbC5jb21wdXRlT3V0U2hhcGUoJGJlZ2luLCAkZW5kLCAkc3RyaWRlcyk7XG4gICAgLy8gVG8gdG9sZXJhdGUgYmVnaW5bMF0gPiBlbmRbMF0gKGEgMC1vdXRwdXQgc2xpY2UpLCB3ZSBtaW4oYmVnaW4sIGVuZCkuXG4gICAgY29uc3Qgc2xpY2VkID0gc2xpY2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge2JlZ2luOiAkYmVnaW4sIHNpemV9fSk7XG4gICAgcmVzdWx0ID1cbiAgICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogc2xpY2VkfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogZmluYWxTaGFwZX19KTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHNsaWNlZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2hvdWxkRXhlY3V0ZU9uQ1BVID0gYmFja2VuZC5zaG91bGRFeGVjdXRlT25DUFUoW3hdKTtcbiAgICBpZiAoc2hvdWxkRXhlY3V0ZU9uQ1BVKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICBjb25zdCB2YWx1ZXMgPSBiYWNrZW5kLnJlYWRTeW5jKHguZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgY29uc3QgeEJ1ZiA9IGJ1ZmZlcih4LnNoYXBlLCB4LmR0eXBlLCB2YWx1ZXMpIGFzIFRlbnNvckJ1ZmZlcjxSYW5rPjtcbiAgICAgIGNvbnN0IHJlc3VsdFZhbHVlcyA9XG4gICAgICAgICAgc3RyaWRlZFNsaWNlSW1wbENQVShmaW5hbFNoYXBlU3BhcnNlLCB4QnVmLCAkc3RyaWRlcywgJGJlZ2luKTtcbiAgICAgIHJlc3VsdCA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8oZmluYWxTaGFwZSwgeC5kdHlwZSwgcmVzdWx0VmFsdWVzLnZhbHVlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByb2dyYW0gPVxuICAgICAgICAgIG5ldyBTdHJpZGVkU2xpY2VQcm9ncmFtKCRiZWdpbiwgJHN0cmlkZXMsIGZpbmFsU2hhcGVTcGFyc2UpO1xuICAgICAgcmVzdWx0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXN1bHRSZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZXN1bHR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBmaW5hbFNoYXBlfX0pO1xuXG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzdWx0KTtcblxuICByZXR1cm4gcmVzdWx0UmVzaGFwZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBzdHJpZGVkU2xpY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3RyaWRlZFNsaWNlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3RyaWRlZFNsaWNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringNGrams } from '@tensorflow/tfjs-core';\nimport { stringNGramsImplCPU } from '../kernel_utils/shared';\nexport function stringNGrams(args) {\n const { inputs, backend, attrs } = args;\n const { separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences } = attrs;\n const { data, dataSplits } = inputs;\n const $data = backend.readSync(data.dataId);\n const $dataSplits = backend.readSync(dataSplits.dataId);\n const [nGrams, nGramsSplits] = stringNGramsImplCPU($data, $dataSplits, separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences);\n return [\n backend.makeTensorInfo([nGrams.length], 'string', nGrams),\n backend.makeTensorInfo(dataSplits.shape, 'int32', nGramsSplits),\n ];\n}\nexport const stringNGramsConfig = {\n kernelName: StringNGrams,\n backendName: 'webgl',\n kernelFunc: stringNGrams,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nTkdyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1N0cmluZ05HcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFlBQVksRUFBb0QsTUFBTSx1QkFBdUIsQ0FBQztBQUdoSSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBSTVCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLE9BQU8sRUFDUCxRQUFRLEVBQ1IsUUFBUSxFQUNSLHNCQUFzQixFQUN2QixHQUFHLEtBQUssQ0FBQztJQUNWLE1BQU0sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBaUIsQ0FBQztJQUM1RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUV0RSxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLG1CQUFtQixDQUM5QyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQ3ZFLHNCQUFzQixDQUFDLENBQUM7SUFDNUIsT0FBTztRQUNMLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUN6RCxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQztLQUNoRSxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFpQjtJQUM5QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsWUFBcUM7Q0FDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFN0cmluZ05HcmFtcywgU3RyaW5nTkdyYW1zQXR0cnMsIFN0cmluZ05HcmFtc0lucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7c3RyaW5nTkdyYW1zSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdOR3JhbXMoYXJnczoge1xuICBpbnB1dHM6IFN0cmluZ05HcmFtc0lucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFN0cmluZ05HcmFtc0F0dHJzXG59KTogW1RlbnNvckluZm8sIFRlbnNvckluZm9dIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge1xuICAgIHNlcGFyYXRvcixcbiAgICBuR3JhbVdpZHRocyxcbiAgICBsZWZ0UGFkLFxuICAgIHJpZ2h0UGFkLFxuICAgIHBhZFdpZHRoLFxuICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXNcbiAgfSA9IGF0dHJzO1xuICBjb25zdCB7ZGF0YSwgZGF0YVNwbGl0c30gPSBpbnB1dHM7XG4gIGNvbnN0ICRkYXRhID0gYmFja2VuZC5yZWFkU3luYyhkYXRhLmRhdGFJZCkgYXMgVWludDhBcnJheVtdO1xuICBjb25zdCAkZGF0YVNwbGl0cyA9IGJhY2tlbmQucmVhZFN5bmMoZGF0YVNwbGl0cy5kYXRhSWQpIGFzIEludDMyQXJyYXk7XG5cbiAgY29uc3QgW25HcmFtcywgbkdyYW1zU3BsaXRzXSA9IHN0cmluZ05HcmFtc0ltcGxDUFUoXG4gICAgICAkZGF0YSwgJGRhdGFTcGxpdHMsIHNlcGFyYXRvciwgbkdyYW1XaWR0aHMsIGxlZnRQYWQsIHJpZ2h0UGFkLCBwYWRXaWR0aCxcbiAgICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXMpO1xuICByZXR1cm4gW1xuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oW25HcmFtcy5sZW5ndGhdLCAnc3RyaW5nJywgbkdyYW1zKSxcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKGRhdGFTcGxpdHMuc2hhcGUsICdpbnQzMicsIG5HcmFtc1NwbGl0cyksXG4gIF07XG59XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdOR3JhbXNDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3RyaW5nTkdyYW1zLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3RyaW5nTkdyYW1zIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringSplit } from '@tensorflow/tfjs-core';\nimport { stringSplitImplCPU } from '../kernel_utils/shared';\nexport function stringSplit(args) {\n const { inputs, backend, attrs } = args;\n const { skipEmpty } = attrs;\n const { input, delimiter } = inputs;\n if (input.dtype !== 'string') {\n throw new Error('Input must be of datatype string');\n }\n if (input.shape.length !== 1) {\n throw new Error(`Input must be a vector, got shape: ${input.shape}`);\n }\n if (delimiter.shape.length !== 0) {\n throw new Error(`Delimiter must be a scalar, got shape: ${delimiter.shape}`);\n }\n const $input = backend.readSync(input.dataId);\n const $delimiter = backend.readSync(delimiter.dataId)[0];\n const [indices, values, shape] = stringSplitImplCPU($input, $delimiter, skipEmpty);\n const outputSize = values.length;\n return [\n backend.makeTensorInfo([outputSize, 2], 'int32', indices),\n backend.makeTensorInfo([outputSize], 'string', values),\n backend.makeTensorInfo([2], 'int32', new Int32Array(shape))\n ];\n}\nexport const stringSplitConfig = {\n kernelName: StringSplit,\n backendName: 'webgl',\n kernelFunc: stringSplit,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nU3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL2tlcm5lbHMvU3RyaW5nU3BsaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixXQUFXLEVBQWtELE1BQU0sdUJBQXVCLENBQUM7QUFHN0gsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUkzQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzFCLE1BQU0sRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRWxDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0tBQ3JEO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDdEU7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNYLDBDQUEwQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNsRTtJQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBaUIsQ0FBQztJQUM5RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQWUsQ0FBQztJQUV2RSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FDMUIsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2pDLE9BQU87UUFDTCxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDekQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7UUFDdEQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM1RCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFpQjtJQUM3QyxVQUFVLEVBQUUsV0FBVztJQUN2QixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsV0FBb0M7Q0FDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFN0cmluZ1NwbGl0LCBTdHJpbmdTcGxpdEF0dHJzLCBTdHJpbmdTcGxpdElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7c3RyaW5nU3BsaXRJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1NwbGl0KGFyZ3M6IHtcbiAgaW5wdXRzOiBTdHJpbmdTcGxpdElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFN0cmluZ1NwbGl0QXR0cnNcbn0pOiBbVGVuc29ySW5mbywgVGVuc29ySW5mbywgVGVuc29ySW5mb10ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7c2tpcEVtcHR5fSA9IGF0dHJzO1xuICBjb25zdCB7aW5wdXQsIGRlbGltaXRlcn0gPSBpbnB1dHM7XG5cbiAgaWYgKGlucHV0LmR0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgbXVzdCBiZSBvZiBkYXRhdHlwZSBzdHJpbmcnKTtcbiAgfVxuICBpZiAoaW5wdXQuc2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCBtdXN0IGJlIGEgdmVjdG9yLCBnb3Qgc2hhcGU6ICR7aW5wdXQuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKGRlbGltaXRlci5zaGFwZS5sZW5ndGggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZWxpbWl0ZXIgbXVzdCBiZSBhIHNjYWxhciwgZ290IHNoYXBlOiAke2RlbGltaXRlci5zaGFwZX1gKTtcbiAgfVxuXG4gIGNvbnN0ICRpbnB1dCA9IGJhY2tlbmQucmVhZFN5bmMoaW5wdXQuZGF0YUlkKSBhcyBVaW50OEFycmF5W107XG4gIGNvbnN0ICRkZWxpbWl0ZXIgPSBiYWNrZW5kLnJlYWRTeW5jKGRlbGltaXRlci5kYXRhSWQpWzBdIGFzIFVpbnQ4QXJyYXk7XG5cbiAgY29uc3QgW2luZGljZXMsIHZhbHVlcywgc2hhcGVdID1cbiAgICAgIHN0cmluZ1NwbGl0SW1wbENQVSgkaW5wdXQsICRkZWxpbWl0ZXIsIHNraXBFbXB0eSk7XG4gIGNvbnN0IG91dHB1dFNpemUgPSB2YWx1ZXMubGVuZ3RoO1xuICByZXR1cm4gW1xuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oW291dHB1dFNpemUsIDJdLCAnaW50MzInLCBpbmRpY2VzKSxcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFtvdXRwdXRTaXplXSwgJ3N0cmluZycsIHZhbHVlcyksXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbMl0sICdpbnQzMicsIG5ldyBJbnQzMkFycmF5KHNoYXBlKSlcbiAgXTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ1NwbGl0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFN0cmluZ1NwbGl0LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3RyaW5nU3BsaXQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringToHashBucketFast } from '@tensorflow/tfjs-core';\nimport { stringToHashBucketFastImplCPU } from '../kernel_utils/shared';\nexport function stringToHashBucketFast(args) {\n const { inputs, backend, attrs } = args;\n const { numBuckets } = attrs;\n const { input } = inputs;\n if (input.dtype !== 'string') {\n throw new Error('Input must be of datatype string');\n }\n if (numBuckets <= 0) {\n throw new Error(`Number of buckets must be at least 1`);\n }\n const $input = backend.readSync(input.dataId);\n const output = stringToHashBucketFastImplCPU($input, numBuckets);\n return backend.makeTensorInfo(input.shape, 'int32', output);\n}\nexport const stringToHashBucketFastConfig = {\n kernelName: StringToHashBucketFast,\n backendName: 'webgl',\n kernelFunc: stringToHashBucketFast,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nVG9IYXNoQnVja2V0RmFzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9TdHJpbmdUb0hhc2hCdWNrZXRGYXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsc0JBQXNCLEVBQXdFLE1BQU0sdUJBQXVCLENBQUM7QUFHOUosT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFckUsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBSXRDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxVQUFVLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDM0IsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV2QixJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztLQUNyRDtJQUNELElBQUksVUFBVSxJQUFJLENBQUMsRUFBRTtRQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7S0FDekQ7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQWlCLENBQUM7SUFFOUQsTUFBTSxNQUFNLEdBQUcsNkJBQTZCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQWlCO0lBQ3hELFVBQVUsRUFBRSxzQkFBc0I7SUFDbEMsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLHNCQUErQztDQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU3RyaW5nVG9IYXNoQnVja2V0RmFzdCwgU3RyaW5nVG9IYXNoQnVja2V0RmFzdEF0dHJzLCBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0SW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtzdHJpbmdUb0hhc2hCdWNrZXRGYXN0SW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0hhc2hCdWNrZXRGYXN0KGFyZ3M6IHtcbiAgaW5wdXRzOiBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0SW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogU3RyaW5nVG9IYXNoQnVja2V0RmFzdEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtudW1CdWNrZXRzfSA9IGF0dHJzO1xuICBjb25zdCB7aW5wdXR9ID0gaW5wdXRzO1xuXG4gIGlmIChpbnB1dC5kdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgb2YgZGF0YXR5cGUgc3RyaW5nJyk7XG4gIH1cbiAgaWYgKG51bUJ1Y2tldHMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTnVtYmVyIG9mIGJ1Y2tldHMgbXVzdCBiZSBhdCBsZWFzdCAxYCk7XG4gIH1cblxuICBjb25zdCAkaW5wdXQgPSBiYWNrZW5kLnJlYWRTeW5jKGlucHV0LmRhdGFJZCkgYXMgVWludDhBcnJheVtdO1xuXG4gIGNvbnN0IG91dHB1dCA9IHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbXBsQ1BVKCRpbnB1dCwgbnVtQnVja2V0cyk7XG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKGlucHV0LnNoYXBlLCAnaW50MzInLCBvdXRwdXQpO1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9IYXNoQnVja2V0RmFzdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0LFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogc3RyaW5nVG9IYXNoQnVja2V0RmFzdCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tan } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst TAN = `return tan(x);`;\nexport const tan = unaryKernelFunc({ opSnippet: TAN });\nexport const tanConfig = {\n kernelName: Tan,\n backendName: 'webgl',\n kernelFunc: tan,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1Rhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsR0FBRyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRW5FLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDO0FBRTdCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFRhbn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL2tlcm5lbF91dGlscy9rZXJuZWxfZnVuY3NfdXRpbHMnO1xuXG5jb25zdCBUQU4gPSBgcmV0dXJuIHRhbih4KTtgO1xuXG5leHBvcnQgY29uc3QgdGFuID0gdW5hcnlLZXJuZWxGdW5jKHtvcFNuaXBwZXQ6IFRBTn0pO1xuXG5leHBvcnQgY29uc3QgdGFuQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFRhbixcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHRhbixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tanh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../kernel_utils/kernel_funcs_utils';\nconst TANH = `\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`;\nexport const tanh = unaryKernelFunc({ opSnippet: TANH });\nexport const tanhConfig = {\n kernelName: Tanh,\n backendName: 'webgl',\n kernelFunc: tanh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFuaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9UYW5oLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFbkUsTUFBTSxJQUFJLEdBQUc7OztDQUdaLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgVGFuaH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMva2VybmVsX2Z1bmNzX3V0aWxzJztcblxuY29uc3QgVEFOSCA9IGBcbiAgZmxvYXQgZTJ4ID0gZXhwKC0yLjAgKiBhYnMoeCkpO1xuICByZXR1cm4gc2lnbih4KSAqICgxLjAgLSBlMngpIC8gKDEuMCArIGUyeCk7XG5gO1xuXG5leHBvcnQgY29uc3QgdGFuaCA9IHVuYXJ5S2VybmVsRnVuYyh7b3BTbmlwcGV0OiBUQU5IfSk7XG5cbmV4cG9ydCBjb25zdCB0YW5oQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFRhbmgsXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiB0YW5oLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, TensorScatterUpdate } from '@tensorflow/tfjs-core';\nimport { ScatterProgram } from '../scatter_gpu';\nimport { reshape } from './Reshape';\nexport function tensorScatterUpdate(args) {\n const { inputs, backend, attrs } = args;\n const { tensor, indices, updates } = inputs;\n const {} = attrs;\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util.calculateShapes(updates, indices, tensor.shape);\n const flattenShape = [outputSize / sliceSize, sliceSize];\n if (outputSize === 0) {\n return backend.makeTensorInfo(tensor.shape, indices.dtype);\n }\n const flattenIndices = reshape({ inputs: { x: indices }, backend, attrs: { shape: [numUpdates, sliceRank] } });\n const flattenX = reshape({ inputs: { x: updates }, backend, attrs: { shape: [numUpdates, sliceSize] } });\n const flattenTensor = reshape({ inputs: { x: tensor }, backend, attrs: { shape: flattenShape } });\n const program = new ScatterProgram(numUpdates, sliceRank, flattenIndices.shape.length, flattenX.shape.length, strides, flattenShape, false, true);\n const res = backend.runWebGLProgram(program, [flattenX, flattenIndices, flattenTensor], flattenTensor.dtype);\n const reshaped = reshape({ inputs: { x: res }, backend, attrs: { shape: tensor.shape } });\n backend.disposeIntermediateTensorInfo(flattenIndices);\n backend.disposeIntermediateTensorInfo(flattenX);\n backend.disposeIntermediateTensorInfo(flattenTensor);\n backend.disposeIntermediateTensorInfo(res);\n return reshaped;\n}\nexport const tensorScatterUpdateConfig = {\n kernelName: TensorScatterUpdate,\n backendName: 'webgl',\n kernelFunc: tensorScatterUpdate\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVuc29yU2NhdHRlclVwZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9UZW5zb3JTY2F0dGVyVXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQXdDLG1CQUFtQixFQUFzRCxNQUFNLHVCQUF1QixDQUFDO0FBR25LLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUluQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWpCLE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLEdBQ3pELFlBQVksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXpELElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtRQUNwQixPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUQ7SUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQzFCLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDOUUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUNwQixFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sYUFBYSxHQUNmLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQyxFQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FDOUIsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FDL0IsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0UsTUFBTSxRQUFRLEdBQ1YsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUMsQ0FBQztJQUV2RSxPQUFPLENBQUMsNkJBQTZCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0MsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFpQjtJQUNyRCxVQUFVLEVBQUUsbUJBQW1CO0lBQy9CLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxtQkFBNEM7Q0FDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVGVuc29yU2NhdHRlclVwZGF0ZSwgVGVuc29yU2NhdHRlclVwZGF0ZUF0dHJzLCBUZW5zb3JTY2F0dGVyVXBkYXRlSW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtTY2F0dGVyUHJvZ3JhbX0gZnJvbSAnLi4vc2NhdHRlcl9ncHUnO1xuXG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3JTY2F0dGVyVXBkYXRlKGFyZ3M6IHtcbiAgaW5wdXRzOiBUZW5zb3JTY2F0dGVyVXBkYXRlSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogVGVuc29yU2NhdHRlclVwZGF0ZUF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt0ZW5zb3IsIGluZGljZXMsIHVwZGF0ZXN9ID0gaW5wdXRzO1xuICBjb25zdCB7fSA9IGF0dHJzO1xuXG4gIGNvbnN0IHtzbGljZVJhbmssIG51bVVwZGF0ZXMsIHNsaWNlU2l6ZSwgc3RyaWRlcywgb3V0cHV0U2l6ZX0gPVxuICAgICAgYmFja2VuZF91dGlsLmNhbGN1bGF0ZVNoYXBlcyh1cGRhdGVzLCBpbmRpY2VzLCB0ZW5zb3Iuc2hhcGUpO1xuXG4gIGNvbnN0IGZsYXR0ZW5TaGFwZSA9IFtvdXRwdXRTaXplIC8gc2xpY2VTaXplLCBzbGljZVNpemVdO1xuXG4gIGlmIChvdXRwdXRTaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8odGVuc29yLnNoYXBlLCBpbmRpY2VzLmR0eXBlKTtcbiAgfVxuXG4gIGNvbnN0IGZsYXR0ZW5JbmRpY2VzID0gcmVzaGFwZShcbiAgICAgIHtpbnB1dHM6IHt4OiBpbmRpY2VzfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogW251bVVwZGF0ZXMsIHNsaWNlUmFua119fSk7XG4gIGNvbnN0IGZsYXR0ZW5YID0gcmVzaGFwZShcbiAgICAgIHtpbnB1dHM6IHt4OiB1cGRhdGVzfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogW251bVVwZGF0ZXMsIHNsaWNlU2l6ZV19fSk7XG4gIGNvbnN0IGZsYXR0ZW5UZW5zb3IgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogdGVuc29yfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogZmxhdHRlblNoYXBlfX0pO1xuICBjb25zdCBwcm9ncmFtID0gbmV3IFNjYXR0ZXJQcm9ncmFtKFxuICAgICAgbnVtVXBkYXRlcywgc2xpY2VSYW5rLCBmbGF0dGVuSW5kaWNlcy5zaGFwZS5sZW5ndGgsIGZsYXR0ZW5YLnNoYXBlLmxlbmd0aCxcbiAgICAgIHN0cmlkZXMsIGZsYXR0ZW5TaGFwZSwgZmFsc2UsIHRydWUpO1xuICBjb25zdCByZXMgPSBiYWNrZW5kLnJ1bldlYkdMUHJvZ3JhbShcbiAgICAgIHByb2dyYW0sIFtmbGF0dGVuWCwgZmxhdHRlbkluZGljZXMsIGZsYXR0ZW5UZW5zb3JdLCBmbGF0dGVuVGVuc29yLmR0eXBlKTtcblxuICBjb25zdCByZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZXN9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiB0ZW5zb3Iuc2hhcGV9fSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhmbGF0dGVuSW5kaWNlcyk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZmxhdHRlblgpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGZsYXR0ZW5UZW5zb3IpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlcyk7XG5cbiAgcmV0dXJuIHJlc2hhcGVkO1xufVxuXG5leHBvcnQgY29uc3QgdGVuc29yU2NhdHRlclVwZGF0ZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBUZW5zb3JTY2F0dGVyVXBkYXRlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogdGVuc29yU2NhdHRlclVwZGF0ZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getCoordsDataType } from './shader_compiler';\nexport class TileProgram {\n constructor(aShape, reps) {\n this.variableNames = ['A'];\n const outputShape = new Array(aShape.length);\n for (let i = 0; i < outputShape.length; i++) {\n outputShape[i] = aShape[i] * reps[i];\n }\n this.outputShape = outputShape;\n this.rank = outputShape.length;\n const dtype = getCoordsDataType(this.rank);\n const sourceCoords = getSourceCoords(aShape);\n this.userCode = `\n void main() {\n ${dtype} resRC = getOutputCoords();\n setOutput(getA(${sourceCoords}));\n }\n `;\n }\n}\nfunction getSourceCoords(aShape) {\n const rank = aShape.length;\n if (rank > 5) {\n throw Error(`Tile for rank ${rank} is not yet supported`);\n }\n if (rank === 1) {\n return `imod(resRC, ${aShape[0]})`;\n }\n const currentCoords = ['resRC.x', 'resRC.y', 'resRC.z', 'resRC.w', 'resRC.u'];\n const sourceCoords = [];\n for (let i = 0; i < aShape.length; i++) {\n sourceCoords.push(`imod(${currentCoords[i]}, ${aShape[i]})`);\n }\n return sourceCoords.join();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZV9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3RpbGVfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE1BQU0sT0FBTyxXQUFXO0lBTXRCLFlBQVksTUFBZ0IsRUFBRSxJQUFjO1FBTDVDLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQU1wQixNQUFNLFdBQVcsR0FBYSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsUUFBUSxHQUFHOztVQUVWLEtBQUs7eUJBQ1UsWUFBWTs7S0FFaEMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELFNBQVMsZUFBZSxDQUFDLE1BQWdCO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ1osTUFBTSxLQUFLLENBQUMsaUJBQWlCLElBQUksdUJBQXVCLENBQUMsQ0FBQztLQUMzRDtJQUNELElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNkLE9BQU8sZUFBZSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztLQUNwQztJQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTlFLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDOUQ7SUFDRCxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7Z2V0Q29vcmRzRGF0YVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuZXhwb3J0IGNsYXNzIFRpbGVQcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnQSddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIHJhbms6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihhU2hhcGU6IG51bWJlcltdLCByZXBzOiBudW1iZXJbXSkge1xuICAgIGNvbnN0IG91dHB1dFNoYXBlOiBudW1iZXJbXSA9IG5ldyBBcnJheShhU2hhcGUubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dFNoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXRTaGFwZVtpXSA9IGFTaGFwZVtpXSAqIHJlcHNbaV07XG4gICAgfVxuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICB0aGlzLnJhbmsgPSBvdXRwdXRTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgZHR5cGUgPSBnZXRDb29yZHNEYXRhVHlwZSh0aGlzLnJhbmspO1xuICAgIGNvbnN0IHNvdXJjZUNvb3JkcyA9IGdldFNvdXJjZUNvb3JkcyhhU2hhcGUpO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgJHtkdHlwZX0gcmVzUkMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgc2V0T3V0cHV0KGdldEEoJHtzb3VyY2VDb29yZHN9KSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VDb29yZHMoYVNoYXBlOiBudW1iZXJbXSk6IHN0cmluZyB7XG4gIGNvbnN0IHJhbmsgPSBhU2hhcGUubGVuZ3RoO1xuICBpZiAocmFuayA+IDUpIHtcbiAgICB0aHJvdyBFcnJvcihgVGlsZSBmb3IgcmFuayAke3Jhbmt9IGlzIG5vdCB5ZXQgc3VwcG9ydGVkYCk7XG4gIH1cbiAgaWYgKHJhbmsgPT09IDEpIHtcbiAgICByZXR1cm4gYGltb2QocmVzUkMsICR7YVNoYXBlWzBdfSlgO1xuICB9XG5cbiAgY29uc3QgY3VycmVudENvb3JkcyA9IFsncmVzUkMueCcsICdyZXNSQy55JywgJ3Jlc1JDLnonLCAncmVzUkMudycsICdyZXNSQy51J107XG5cbiAgY29uc3Qgc291cmNlQ29vcmRzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYVNoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgc291cmNlQ29vcmRzLnB1c2goYGltb2QoJHtjdXJyZW50Q29vcmRzW2ldfSwgJHthU2hhcGVbaV19KWApO1xuICB9XG4gIHJldHVybiBzb3VyY2VDb29yZHMuam9pbigpO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer, Tile, util } from '@tensorflow/tfjs-core';\nimport { tileImplCPU } from '../kernel_utils/shared';\nimport { TileProgram } from '../tile_gpu';\nexport function tile(params) {\n const { inputs, backend, attrs } = params;\n const { x } = inputs;\n const { reps } = attrs;\n // tile gpu program cannot handle rank > 5 case.\n if (x.dtype === 'string' || x.shape.length > 5) {\n // Even thought string tensor is always on CPU, just to be consistent on how\n // to access tensor data.\n const data = backend.readSync(x.dataId);\n const value = x.dtype === 'string' ?\n data.map(d => util.decodeString(d)) :\n data;\n const buf = buffer(x.shape, x.dtype, value);\n const outBuf = tileImplCPU(buf, reps);\n return backend.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values);\n }\n const program = new TileProgram(x.shape, reps);\n const output = backend.runWebGLProgram(program, [x], x.dtype);\n return output;\n}\nexport const tileConfig = {\n kernelName: Tile,\n backendName: 'webgl',\n kernelFunc: tile,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9UaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQXdDLElBQUksRUFBcUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbEksT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFeEMsTUFBTSxVQUFVLElBQUksQ0FDaEIsTUFBeUU7SUFFM0UsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQixnREFBZ0Q7SUFDaEQsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDOUMsNEVBQTRFO1FBQzVFLHlCQUF5QjtRQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLElBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBa0IsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDMUU7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUaWxlLCBUaWxlQXR0cnMsIFRpbGVJbnB1dHMsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3RpbGVJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcbmltcG9ydCB7VGlsZVByb2dyYW19IGZyb20gJy4uL3RpbGVfZ3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbGUoXG4gICAgcGFyYW1zOiB7aW5wdXRzOiBUaWxlSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLCBhdHRyczogVGlsZUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IHBhcmFtcztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7cmVwc30gPSBhdHRycztcblxuICAvLyB0aWxlIGdwdSBwcm9ncmFtIGNhbm5vdCBoYW5kbGUgcmFuayA+IDUgY2FzZS5cbiAgaWYgKHguZHR5cGUgPT09ICdzdHJpbmcnIHx8IHguc2hhcGUubGVuZ3RoID4gNSkge1xuICAgIC8vIEV2ZW4gdGhvdWdodCBzdHJpbmcgdGVuc29yIGlzIGFsd2F5cyBvbiBDUFUsIGp1c3QgdG8gYmUgY29uc2lzdGVudCBvbiBob3dcbiAgICAvLyB0byBhY2Nlc3MgdGVuc29yIGRhdGEuXG4gICAgY29uc3QgZGF0YSA9IGJhY2tlbmQucmVhZFN5bmMoeC5kYXRhSWQpO1xuICAgIGNvbnN0IHZhbHVlID0geC5kdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAoZGF0YSBhcyBVaW50OEFycmF5W10pLm1hcChkID0+IHV0aWwuZGVjb2RlU3RyaW5nKGQpKSA6XG4gICAgICAgIGRhdGEgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBidWYgPSBidWZmZXIoeC5zaGFwZSwgeC5kdHlwZSwgdmFsdWUpO1xuICAgIGNvbnN0IG91dEJ1ZiA9IHRpbGVJbXBsQ1BVKGJ1ZiwgcmVwcyk7XG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0QnVmLnNoYXBlLCBvdXRCdWYuZHR5cGUsIG91dEJ1Zi52YWx1ZXMpO1xuICB9XG5cbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBUaWxlUHJvZ3JhbSh4LnNoYXBlLCByZXBzKTtcbiAgY29uc3Qgb3V0cHV0ID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW3hdLCB4LmR0eXBlKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5leHBvcnQgY29uc3QgdGlsZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBUaWxlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogdGlsZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","// Based on Algorithm 2 of Bitonic Top K, ref:\n// https://anilshanbhag.in/static/papers/gputopk_sigmod18.pdf\n// The original algorithm is based on computing the top K only, however\n// since for TFJS we require the indices of the top K values as well then the\n// algorithm found here is a bit modified. Rather than producing the values\n// at each step, the indices containing the top K are generated instead.\n// The output values are not generated to reduce the number of outputs in the\n// GPU, the values can easily be retrieved from the indices using a gather\n// op.\nexport class SwapProgram {\n /**\n * @param shape desired output shape (can be larger than input shape, output\n * will be padded with -Infinity)\n */\n constructor(shape) {\n this.variableNames = ['x', 'indices'];\n // |n| Size of the original input of TopK.\n // |firstPass|indicates if this is the first time swap is being used which\n // means no indices input containing the top K is present yet.\n // |inc| Swaps pairs of indices (0, inc), (1, inc + 1), (2, inc + 2) ...\n this.customUniforms = [\n { name: 'n', type: 'int' },\n { name: 'firstPass', type: 'int' },\n { name: 'negativeInf', type: 'float' },\n { name: 'dir', type: 'int' },\n { name: 'inc', type: 'int' }\n ];\n this.outputShape = shape;\n 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 `;\n }\n}\nexport class MergeProgram {\n /**\n * @param shape desired output shape (must be half of the input size)\n */\n constructor(shape) {\n this.variableNames = ['x', 'indices'];\n // |n| Size of the original input of TopK\n // |firstPass| indicates if this is the first time swap is being used which\n // means no indices input containing the top K is present yet.\n // |k| Top k elements desired\n this.customUniforms = [\n { name: 'n', type: 'int' },\n { name: 'firstPass', type: 'int' },\n { name: 'k', type: 'int' }\n ];\n this.outputShape = shape;\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9wX2tfZ3B1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy90b3Bfa19ncHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBLDhDQUE4QztBQUM5Qyw2REFBNkQ7QUFDN0QsdUVBQXVFO0FBQ3ZFLDZFQUE2RTtBQUM3RSwyRUFBMkU7QUFDM0Usd0VBQXdFO0FBQ3hFLDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUsTUFBTTtBQUNOLE1BQU0sT0FBTyxXQUFXO0lBZ0J0Qjs7O09BR0c7SUFDSCxZQUFZLEtBQWU7UUFuQjNCLGtCQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFHakMsMENBQTBDO1FBQzFDLDBFQUEwRTtRQUMxRSw4REFBOEQ7UUFDOUQsd0VBQXdFO1FBQ3hFLG1CQUFjLEdBQUc7WUFDZixFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQW9CLEVBQUM7WUFDdkMsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFvQixFQUFDO1lBQy9DLEVBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBc0IsRUFBQztZQUNuRCxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQW9CLEVBQUM7WUFDekMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFvQixFQUFDO1NBQzFDLENBQUM7UUFPQSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bd0NkLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sWUFBWTtJQWN2Qjs7T0FFRztJQUNILFlBQVksS0FBZTtRQWhCM0Isa0JBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUdqQyx5Q0FBeUM7UUFDekMsMkVBQTJFO1FBQzNFLDhEQUE4RDtRQUM5RCw2QkFBNkI7UUFDN0IsbUJBQWMsR0FBRztZQUNmLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBb0IsRUFBQztZQUN2QyxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQW9CLEVBQUM7WUFDL0MsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFvQixFQUFDO1NBQ3hDLENBQUM7UUFNQSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsUUFBUSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Ba0NkLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0dQR1BVUHJvZ3JhbX0gZnJvbSAnLi9ncGdwdV9tYXRoJztcbmltcG9ydCB7VW5pZm9ybVR5cGV9IGZyb20gJy4vc2hhZGVyX2NvbXBpbGVyJztcblxuLy8gQmFzZWQgb24gQWxnb3JpdGhtIDIgb2YgQml0b25pYyBUb3AgSywgcmVmOlxuLy8gaHR0cHM6Ly9hbmlsc2hhbmJoYWcuaW4vc3RhdGljL3BhcGVycy9ncHV0b3BrX3NpZ21vZDE4LnBkZlxuLy8gVGhlIG9yaWdpbmFsIGFsZ29yaXRobSBpcyBiYXNlZCBvbiBjb21wdXRpbmcgdGhlIHRvcCBLIG9ubHksIGhvd2V2ZXJcbi8vIHNpbmNlIGZvciBURkpTIHdlIHJlcXVpcmUgdGhlIGluZGljZXMgb2YgdGhlIHRvcCBLIHZhbHVlcyBhcyB3ZWxsIHRoZW4gdGhlXG4vLyBhbGdvcml0aG0gZm91bmQgaGVyZSBpcyBhIGJpdCBtb2RpZmllZC4gUmF0aGVyIHRoYW4gcHJvZHVjaW5nIHRoZSB2YWx1ZXNcbi8vIGF0IGVhY2ggc3RlcCwgdGhlIGluZGljZXMgY29udGFpbmluZyB0aGUgdG9wIEsgYXJlIGdlbmVyYXRlZCBpbnN0ZWFkLlxuLy8gVGhlIG91dHB1dCB2YWx1ZXMgYXJlIG5vdCBnZW5lcmF0ZWQgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3V0cHV0cyBpbiB0aGVcbi8vIEdQVSwgdGhlIHZhbHVlcyBjYW4gZWFzaWx5IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBpbmRpY2VzIHVzaW5nIGEgZ2F0aGVyXG4vLyBvcC5cbmV4cG9ydCBjbGFzcyBTd2FwUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnLCAnaW5kaWNlcyddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIC8vIHxufCBTaXplIG9mIHRoZSBvcmlnaW5hbCBpbnB1dCBvZiBUb3BLLlxuICAvLyB8Zmlyc3RQYXNzfGluZGljYXRlcyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHN3YXAgaXMgYmVpbmcgdXNlZCB3aGljaFxuICAvLyBtZWFucyBubyBpbmRpY2VzIGlucHV0IGNvbnRhaW5pbmcgdGhlIHRvcCBLIGlzIHByZXNlbnQgeWV0LlxuICAvLyB8aW5jfCBTd2FwcyBwYWlycyBvZiBpbmRpY2VzICgwLCBpbmMpLCAoMSwgaW5jICsgMSksICgyLCBpbmMgKyAyKSAuLi5cbiAgY3VzdG9tVW5pZm9ybXMgPSBbXG4gICAge25hbWU6ICduJywgdHlwZTogJ2ludCcgYXMgVW5pZm9ybVR5cGV9LFxuICAgIHtuYW1lOiAnZmlyc3RQYXNzJywgdHlwZTogJ2ludCcgYXMgVW5pZm9ybVR5cGV9LFxuICAgIHtuYW1lOiAnbmVnYXRpdmVJbmYnLCB0eXBlOiAnZmxvYXQnIGFzIFVuaWZvcm1UeXBlfSxcbiAgICB7bmFtZTogJ2RpcicsIHR5cGU6ICdpbnQnIGFzIFVuaWZvcm1UeXBlfSxcbiAgICB7bmFtZTogJ2luYycsIHR5cGU6ICdpbnQnIGFzIFVuaWZvcm1UeXBlfVxuICBdO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gc2hhcGUgZGVzaXJlZCBvdXRwdXQgc2hhcGUgKGNhbiBiZSBsYXJnZXIgdGhhbiBpbnB1dCBzaGFwZSwgb3V0cHV0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBwYWRkZWQgd2l0aCAtSW5maW5pdHkpXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzaGFwZTogbnVtYmVyW10pIHtcbiAgICB0aGlzLm91dHB1dFNoYXBlID0gc2hhcGU7XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgIGl2ZWMyIGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgaW50IGJhdGNoID0gY29vcmRzWzBdO1xuICAgICAgICAgaW50IGVsZW1JZHggPSBjb29yZHNbMV07XG5cbiAgICAgICAgIC8vIFdlIGNvbXBhcmUgZWxlbWVudHMgcGFpci13aXNlIHdpdGhpbiBhIGdyb3VwIG9mIHNpemUgMiAqIGluYy5cbiAgICAgICAgIC8vIFRoZSBjb21wYXJpbmcgcnVsZSBmb3IgZWFjaCBncm91cCBhbHRlcm5hdGVzIGJldHdlZW4gYXNjZW5kaW5nXG4gICAgICAgICAvLyBhbmQgZGVzY2VuZGluZy4gV2l0aGluIGVhY2ggZ3JvdXAsIHdlIGNvbXBhcmUgZWFjaCBwYWlyIGF0XG4gICAgICAgICAvLyBwb3NpdGlvbnMgaSBhbmQgaStpbmMuIFRvIGRlY2lkZSB3aGV0aGVyIGFuIGVsZW1lbnQgYXQgcG9zaXRpb24gaVxuICAgICAgICAgLy8gaXMgeDAgb3IgeDEsIHdlIG1vZCBpdCBieSAyICogaW5jLCBpZiB0aGUgcmVzdWx0IGlzIHNtYWxsZXIgdGhhblxuICAgICAgICAgLy8gaW5jLCBpdCBpcyBpbiB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgZ3JvdXAsIHdlIGRlbm90ZSBpdCBhcyB4MCxcbiAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBkZW5vdGUgaXQgYXMgeDEuXG4gICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYXMgc2hvd24gaW4gdGhlIEJpdG9uaWMgdG9wIEsgcGFwZXIgcmVmZXJlbmNlZCBhYm92ZSxcbiAgICAgICAgIC8vIEZpZ3VyZTUoYSkgc2hvd3MgdGhhdCBlbGVtZW50WzFdIGlzIGluIHRoZVxuICAgICAgICAgLy8gc2Vjb25kIGhhbGYgb2YgdGhlIGdyb3VwIHdoZW4gZ3JvdXAgc2l6ZSBpcyAyLCBidXQgaXQgaXMgaW4gdGhlXG4gICAgICAgICAvLyBmaXJzdCBoYWxmIG9mIHRoZSBncm91cCB3aGVuIGdyb3VwIHNpemUgaXMgNC5cblxuICAgICAgICAgYm9vbCBpc0ZpcnN0SW5QYWlyID0gaW1vZChlbGVtSWR4LCAyICogaW5jKSA8IGluYztcbiAgICAgICAgIGludCBpID0gaXNGaXJzdEluUGFpciA/IGVsZW1JZHggOiBlbGVtSWR4IC0gaW5jO1xuXG4gICAgICAgICBpbnQgaTAgPSBmaXJzdFBhc3MgPT0gMSA/IGkgOiBpbnQoZ2V0SW5kaWNlcyhiYXRjaCwgaSkpO1xuICAgICAgICAgaW50IGkxID0gZmlyc3RQYXNzID09IDEgPyBpICsgaW5jIDogaW50KGdldEluZGljZXMoYmF0Y2gsIGkgKyBpbmMpKTtcbiAgICAgICAgIGZsb2F0IHgwID0gaTAgPCBuID8gZ2V0WChiYXRjaCwgaTApIDogbmVnYXRpdmVJbmY7XG4gICAgICAgICBmbG9hdCB4MSA9IGkxIDwgbiA/IGdldFgoYmF0Y2gsIGkxKSA6IG5lZ2F0aXZlSW5mO1xuXG4gICAgICAgICAvLyBEZW5vdGVzIHdoaWNoIGRpcmVjdGlvbiBpbmRpY2VzIGFyZSBpbiAoYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcpLlxuICAgICAgICAgYm9vbCByZXZlcnNlID0gaW1vZChlbGVtSWR4LCAyICogZGlyKSA+PSBkaXI7XG4gICAgICAgICBib29sIGlzR3JlYXRlciA9IHgwID4geDEgfHwgKHgwID09IHgxICYmIGkxID4gaTApO1xuICAgICAgICAgaWYgKHJldmVyc2UgPT0gaXNHcmVhdGVyKSB7IC8vIEVsZW1lbnRzIGluIG9wcG9zaXRlIG9yZGVyIG9mIGRpcmVjdGlvblxuICAgICAgICAgICBpbnQgaVRlbXAgPSBpMDtcbiAgICAgICAgICAgaTAgPSBpMTtcbiAgICAgICAgICAgaTEgPSBpVGVtcDtcbiAgICAgICAgIH1cbiAgICAgICAgIGlmIChpc0ZpcnN0SW5QYWlyKSB7XG4gICAgICAgICAgICBzZXRPdXRwdXQoZmxvYXQoaTApKTtcbiAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRPdXRwdXQoZmxvYXQoaTEpKTtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIGA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lcmdlUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnLCAnaW5kaWNlcyddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIC8vIHxufCBTaXplIG9mIHRoZSBvcmlnaW5hbCBpbnB1dCBvZiBUb3BLXG4gIC8vIHxmaXJzdFBhc3N8IGluZGljYXRlcyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHN3YXAgaXMgYmVpbmcgdXNlZCB3aGljaFxuICAvLyBtZWFucyBubyBpbmRpY2VzIGlucHV0IGNvbnRhaW5pbmcgdGhlIHRvcCBLIGlzIHByZXNlbnQgeWV0LlxuICAvLyB8a3wgVG9wIGsgZWxlbWVudHMgZGVzaXJlZFxuICBjdXN0b21Vbmlmb3JtcyA9IFtcbiAgICB7bmFtZTogJ24nLCB0eXBlOiAnaW50JyBhcyBVbmlmb3JtVHlwZX0sXG4gICAge25hbWU6ICdmaXJzdFBhc3MnLCB0eXBlOiAnaW50JyBhcyBVbmlmb3JtVHlwZX0sXG4gICAge25hbWU6ICdrJywgdHlwZTogJ2ludCcgYXMgVW5pZm9ybVR5cGV9XG4gIF07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzaGFwZSBkZXNpcmVkIG91dHB1dCBzaGFwZSAobXVzdCBiZSBoYWxmIG9mIHRoZSBpbnB1dCBzaXplKVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2hhcGU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5vdXRwdXRTaGFwZSA9IHNoYXBlO1xuXG4gICAgdGhpcy51c2VyQ29kZSA9IGBcbiAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAvLyBUYWtlcyBtYXggb2YgaW5kaWNlcyAoMCwgayksICgxLCBrICsgMSksICgyLCBrICsgMikgLi4uXG4gICAgICAgICBpdmVjMiBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgIGludCBiYXRjaCA9IGNvb3Jkc1swXTtcbiAgICAgICAgIGludCBlbGVtSWR4ID0gY29vcmRzWzFdO1xuXG4gICAgICAgICAvLyBUaGUgb3V0cHV0IHNpemUgaXMgaGFsZiBvZiB0aGUgcHJldmlvdXMgc2l6ZS5cbiAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZXF1ZW5jZSBpcyB8IHwgfCB8IF8gXyBfIF8gIHwgfCB8IHwgIF8gXyBfIF8gKGs9NCksXG4gICAgICAgICAvLyB3ZSBvbmx5IG5lZWQgdG8gb3V0cHV0IHRoZSBpbmRpY2VzIGF0IHBvc2l0aW9ucyB8LCB0aGUgaW5kaWNlcyBhdFxuICAgICAgICAgLy8gcG9zaXRpb25zIF8gY2FuIGJlIHRocm93biBhd2F5LCBzZWUgRmlndXJlNShiKSBBZnRlciBQaGFzZSAyXG4gICAgICAgICAvLyAoTWVyZ2UgcGhhc2UpIGluIHRoZSBCaXRvbmljIFRvcCBLIHBhcGVyIHJlZmVyZW5jZWQgYWJvdmUuXG4gICAgICAgICAvLyBGb3IgZXhhbXBsZSwgdGhlIHBhcGVyIHNob3dzIHdlIG9ubHkgbmVlZCB0byBvdXRwdXQgdGhlIG9yYW5nZSBiYXJzLlxuICAgICAgICAgLy8gVGhlIG91dHB1dCBzZXF1ZW5jZSBzaG91bGQgbG9vayBsaWtlIHRoaXMgfCB8IHwgfCB8IHwgfCB8LlxuICAgICAgICAgLy8gQmVjYXVzZSB0aGUgc2VxdWVuY2UgaXMgaGFsdmVkLCB0byBtYXAgdGhlIG91dHB1dCBpbmRleCBiYWNrXG4gICAgICAgICAvLyB0byB0aGUgcHJldmlvdXMgc2VxdWVuY2UgdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSxcbiAgICAgICAgIC8vIHdlIG5lZWQgdG8gZG91YmxlIHRoZSBpbmRleC4gV2hlbiB3ZSBkb3VibGUgdGhlIGluZGV4LFxuICAgICAgICAgLy8gd2UgYmFzaWNhbGx5IGludGVycG9sYXRlIGEgcG9zaXRpb24sIHNvIDJpIGxvb2tzIGxpa2VcbiAgICAgICAgIC8vIHwgXyB8IF8gfCBfIHwgXyB8IF8gfCBfIHwgXy4gV2UgbW92ZSB0aGUgfCB0byB0aGUgZmlyc3QgayBwb3NpdGlvblxuICAgICAgICAgLy8gb2YgZWFjaCAyayBwb3NpdGlvbnMgYnkgLSBlbGVtSWR4ICUgay4gRS5nLiBmb3Igb3V0cHV0IGF0XG4gICAgICAgICAvLyBpbmRleCA0LDUsNiw3LCB3ZSB3YW50IHRvIGdldCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGF0XG4gICAgICAgICAvLyBvcmlnaW5hbCBpbmRleCA4LDksMTAsMTEsIGZvciBvdXRwdXQgYXQgaW5kZXggOCw5LDEwLDExLFxuICAgICAgICAgLy8gd2Ugd2FudCB0byBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBhdCBvcmlnaW5hbCBpbmRleFxuICAgICAgICAgLy8gMTYsMTcsMTgsMTksIHNvIG9uIGFuZCBzbyBmb3J0aC5cblxuICAgICAgICAgaW50IGkgPSBlbGVtSWR4IDwgayA/IGVsZW1JZHggOiAoZWxlbUlkeCAqIDIgLSBpbW9kKGVsZW1JZHgsIGspKTtcbiAgICAgICAgIGludCBpMCA9IGZpcnN0UGFzcyA9PSAxID8gaSA6IGludChnZXRJbmRpY2VzKGJhdGNoLCBpKSk7XG4gICAgICAgICBpbnQgaTEgPSBmaXJzdFBhc3MgPT0gMSA/IGkgKyBrIDogaW50KGdldEluZGljZXMoYmF0Y2gsIGkgKyBrKSk7XG5cbiAgICAgICAgIGZsb2F0IHgwID0gZ2V0WChiYXRjaCwgaTApO1xuICAgICAgICAgZmxvYXQgeDEgPSBpMSA8IG4gPyBnZXRYKGJhdGNoLCBpMSkgOiB4MDtcblxuICAgICAgICAgc2V0T3V0cHV0KHgwID49IHgxID8gZmxvYXQoaTApIDogZmxvYXQoaTEpKTtcbiAgICAgICB9XG4gICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, TopK, util } from '@tensorflow/tfjs-core';\nimport { topKImplCPU } from '../kernel_utils/shared';\nimport { MergeProgram, SwapProgram } from '../top_k_gpu';\nimport { fill } from './Fill';\nimport { gatherV2 } from './GatherV2';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nfunction disposeIntermediateTensorInfoOrNull(backend, tensorInfo) {\n if (tensorInfo !== null) {\n backend.disposeIntermediateTensorInfo(tensorInfo);\n }\n}\nfunction roundUpToPow2(num) {\n let pow2 = 1;\n while (pow2 < num) {\n pow2 *= 2;\n }\n return pow2;\n}\n// Based on Algorithm 2 of Bitonic Top K, ref:\n// https://anilshanbhag.in/static/papers/gputopk_sigmod18.pdf\nexport function topK(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { k, sorted } = attrs;\n // Empirically determined constant used to determine last dim threshold for\n // handing off execution to the CPU.\n const TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD = env().getNumber('TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD');\n // Empirically determined constant used to determine k threshold for handing\n // off execution to the CPU.\n const TOPK_K_CPU_HANDOFF_THRESHOLD = env().getNumber('TOPK_K_CPU_HANDOFF_THRESHOLD');\n const xShape = x.shape;\n const lastDim = xShape[xShape.length - 1];\n if (backend.shouldExecuteOnCPU([x]) ||\n lastDim < TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD ||\n k > TOPK_K_CPU_HANDOFF_THRESHOLD) {\n const xVals = backend.readSync(x.dataId);\n const [allTopKVals, allTopKIndices] = topKImplCPU(xVals, xShape, x.dtype, k, sorted);\n return [\n backend.makeTensorInfo(allTopKVals.shape, allTopKVals.dtype, allTopKVals.values),\n backend.makeTensorInfo(allTopKIndices.shape, allTopKIndices.dtype, allTopKIndices.values)\n ];\n }\n if (k === 0) {\n xShape[xShape.length - 1] = 0;\n return [\n backend.makeTensorInfo(xShape, x.dtype, []),\n backend.makeTensorInfo(xShape, 'int32', [])\n ];\n }\n if (lastDim === 1 /* firstPass */) {\n return [\n x, fill({ attrs: { shape: xShape, dtype: 'int32', value: 0 }, backend })\n ];\n }\n // Eagerly unpack x input since it is passed in to all the shaders which\n // require unpacked inputs.\n const xtexData = backend.texData.get(x.dataId);\n const xIsPacked = xtexData !== null && xtexData.isPacked;\n const xUnPacked = xIsPacked ? backend.unpackTensor(x) : x;\n // Reshape into a 2d tensor [batch, lastDim] and compute topk along lastDim.\n const xSize = util.sizeFromShape(xShape);\n const batch = xSize / lastDim;\n const x2D = reshape({ inputs: { x: xUnPacked }, attrs: { shape: [batch, lastDim] }, backend });\n if (xIsPacked) {\n disposeIntermediateTensorInfoOrNull(backend, xUnPacked);\n }\n const kPow2 = roundUpToPow2(k);\n const lastDimPow2 = roundUpToPow2(lastDim);\n // Only the indices containing the top K are kept at every step to reduce\n // number of outputs in the GPU algorithms, so once the final set of indices\n // is computed then gather is used to grab the corresponding values\n // from the original input.\n let indices = null;\n // GPU algorithm always takes in an indices input but this input is not used\n // on the first run of a GPU algorithm, therefore if indices is null we simply\n // pass in x2D instead of it but the value will not actually be used\n const getInputs = () => indices === null ? [x2D, x2D] : [x2D, indices];\n const runSwap = (dir, inc, shape) => {\n const inputs = getInputs();\n const program = new SwapProgram(shape);\n const fistPass = indices === null ? 1 : 0;\n const customValues = [[lastDim], [fistPass], [Number.NEGATIVE_INFINITY], [dir], [inc]];\n const prevIndices = indices;\n indices = backend.runWebGLProgram(program, inputs, 'int32', customValues);\n disposeIntermediateTensorInfoOrNull(backend, prevIndices);\n };\n // Step 1: local sort\n for (let len = 1; len < kPow2; len *= 2) {\n const dir = len * 2;\n for (let inc = len; inc >= 1; inc /= 2) {\n runSwap(dir, inc, [batch, lastDimPow2]);\n }\n }\n // Step 2: merge\n for (let indicesSize = lastDimPow2; indicesSize > kPow2; indicesSize /= 2) {\n const inputs = getInputs();\n const mergeProgram = new MergeProgram([batch, indicesSize / 2]);\n const firstPass = indices === null ? 1 : 0;\n const customValues = [[lastDim], [firstPass], [kPow2]];\n const prevIndices = indices;\n indices =\n backend.runWebGLProgram(mergeProgram, inputs, 'int32', customValues);\n disposeIntermediateTensorInfoOrNull(backend, prevIndices);\n // Step 3: rebuild\n const len = kPow2 / 2;\n const dir = len * 2;\n for (let inc = len; inc >= 1; inc /= 2) {\n runSwap(dir, inc, indices.shape);\n }\n }\n // Keep only the requested top K results instead of kPow2\n let prevIndices = indices;\n indices = slice({ inputs: { x: indices }, backend, attrs: { begin: 0, size: [batch, k] } });\n disposeIntermediateTensorInfoOrNull(backend, prevIndices);\n // Gather values on last dimension\n let values = gatherV2({ inputs: { x: x2D, indices }, backend, attrs: { axis: 1, batchDims: 1 } });\n disposeIntermediateTensorInfoOrNull(backend, x2D);\n // Reshape back to the original input shape, except that the last\n // dimension is k.\n const newShape = xShape.slice(0, -1);\n newShape.push(k);\n prevIndices = indices;\n indices = reshape({ inputs: { x: indices }, attrs: { shape: newShape }, backend });\n disposeIntermediateTensorInfoOrNull(backend, prevIndices);\n const prevValues = values;\n values = reshape({ inputs: { x: values }, attrs: { shape: newShape }, backend });\n disposeIntermediateTensorInfoOrNull(backend, prevValues);\n return [values, indices];\n}\nexport const topKConfig = {\n kernelName: TopK,\n backendName: 'webgl',\n kernelFunc: topK\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wSy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMva2VybmVscy9Ub3BLLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQXlELElBQUksRUFBcUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHaEosT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUIsU0FBUyxtQ0FBbUMsQ0FDeEMsT0FBeUIsRUFBRSxVQUFzQjtJQUNuRCxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7UUFDdkIsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ25EO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEdBQVc7SUFDaEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLElBQUksSUFBSSxDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELDhDQUE4QztBQUM5Qyw2REFBNkQ7QUFDN0QsTUFBTSxVQUFVLElBQUksQ0FDaEIsSUFBdUU7SUFFekUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxD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LEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQzdFLG1DQUFtQyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUUxRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDMUIsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUMzRSxtQ0FBbUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFekQsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtlbnYsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTnVtZXJpY0RhdGFUeXBlLCBUZW5zb3JJbmZvLCBUb3BLLCBUb3BLQXR0cnMsIFRvcEtJbnB1dHMsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3RvcEtJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcbmltcG9ydCB7TWVyZ2VQcm9ncmFtLCBTd2FwUHJvZ3JhbX0gZnJvbSAnLi4vdG9wX2tfZ3B1JztcbmltcG9ydCB7ZmlsbH0gZnJvbSAnLi9GaWxsJztcbmltcG9ydCB7Z2F0aGVyVjJ9IGZyb20gJy4vR2F0aGVyVjInO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi9TbGljZSc7XG5cbmZ1bmN0aW9uIGRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvT3JOdWxsKFxuICAgIGJhY2tlbmQ6IE1hdGhCYWNrZW5kV2ViR0wsIHRlbnNvckluZm86IFRlbnNvckluZm8pIHtcbiAgaWYgKHRlbnNvckluZm8gIT09IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHRlbnNvckluZm8pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJvdW5kVXBUb1BvdzIobnVtOiBudW1iZXIpIHtcbiAgbGV0IHBvdzIgPSAxO1xuICB3aGlsZSAocG93MiA8IG51bSkge1xuICAgIHBvdzIgKj0gMjtcbiAgfVxuICByZXR1cm4gcG93Mjtcbn1cblxuLy8gQmFzZWQgb24gQWxnb3JpdGhtIDIgb2YgQml0b25pYyBUb3AgSywgcmVmOlxuLy8gaHR0cHM6Ly9hbmlsc2hhbmJoYWcuaW4vc3RhdGljL3BhcGVycy9ncHV0b3BrX3NpZ21vZDE4LnBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRvcEsoXG4gICAgYXJnczoge2lucHV0czogVG9wS0lucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCwgYXR0cnM6IFRvcEtBdHRyc30pOlxuICAgIFRlbnNvckluZm9bXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2ssIHNvcnRlZH0gPSBhdHRycztcblxuICAvLyBFbXBpcmljYWxseSBkZXRlcm1pbmVkIGNvbnN0YW50IHVzZWQgdG8gZGV0ZXJtaW5lIGxhc3QgZGltIHRocmVzaG9sZCBmb3JcbiAgLy8gaGFuZGluZyBvZmYgZXhlY3V0aW9uIHRvIHRoZSBDUFUuXG4gIGNvbnN0IFRPUEtfTEFTVF9ESU1fQ1BVX0hBTkRPRkZfU0laRV9USFJFU0hPTEQgPVxuICAgICAgZW52KCkuZ2V0TnVtYmVyKCdUT1BLX0xBU1RfRElNX0NQVV9IQU5ET0ZGX1NJWkVfVEhSRVNIT0xEJyk7XG5cbiAgLy8gRW1waXJpY2FsbHkgZGV0ZXJtaW5lZCBjb25zdGFudCB1c2VkIHRvIGRldGVybWluZSBrIHRocmVzaG9sZCBmb3IgaGFuZGluZ1xuICAvLyBvZmYgZXhlY3V0aW9uIHRvIHRoZSBDUFUuXG4gIGNvbnN0IFRPUEtfS19DUFVfSEFORE9GRl9USFJFU0hPTEQgPVxuICAgICAgZW52KCkuZ2V0TnVtYmVyKCdUT1BLX0tfQ1BVX0hBTkRPRkZfVEhSRVNIT0xEJyk7XG5cbiAgY29uc3QgeFNoYXBlID0geC5zaGFwZTtcbiAgY29uc3QgbGFzdERpbSA9IHhTaGFwZVt4U2hhcGUubGVuZ3RoIC0gMV07XG5cbiAgaWYgKGJhY2tlbmQuc2hvdWxkRXhlY3V0ZU9uQ1BVKFt4XSkgfHxcbiAgICAgIGxhc3REaW0gPCBUT1BLX0xBU1RfRElNX0NQVV9IQU5ET0ZGX1NJWkVfVEhSRVNIT0xEIHx8XG4gICAgICBrID4gVE9QS19LX0NQVV9IQU5ET0ZGX1RIUkVTSE9MRCkge1xuICAgIGNvbnN0IHhWYWxzID0gYmFja2VuZC5yZWFkU3luYyh4LmRhdGFJZCkgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBbYWxsVG9wS1ZhbHMsIGFsbFRvcEtJbmRpY2VzXSA9XG4gICAgICAgIHRvcEtJbXBsQ1BVKHhWYWxzLCB4U2hhcGUsIHguZHR5cGUgYXMgTnVtZXJpY0RhdGFUeXBlLCBrLCBzb3J0ZWQpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICAgICAgYWxsVG9wS1ZhbHMuc2hhcGUsIGFsbFRvcEtWYWxzLmR0eXBlLCBhbGxUb3BLVmFscy52YWx1ZXMpLFxuICAgICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgICBhbGxUb3BLSW5kaWNlcy5zaGFwZSwgYWxsVG9wS0luZGljZXMuZHR5cGUsIGFsbFRvcEtJbmRpY2VzLnZhbHVlcylcbiAgICBdO1xuICB9XG5cbiAgaWYgKGsgPT09IDApIHtcbiAgICB4U2hhcGVbeFNoYXBlLmxlbmd0aCAtIDFdID0gMDtcbiAgICByZXR1cm4gW1xuICAgICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyh4U2hhcGUsIHguZHR5cGUsIFtdKSxcbiAgICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeFNoYXBlLCAnaW50MzInLCBbXSlcbiAgICBdO1xuICB9XG5cbiAgaWYgKGxhc3REaW0gPT09IDEgLyogZmlyc3RQYXNzICovKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHgsIGZpbGwoe2F0dHJzOiB7c2hhcGU6IHhTaGFwZSwgZHR5cGU6ICdpbnQzMicsIHZhbHVlOiAwfSwgYmFja2VuZH0pXG4gICAgXTtcbiAgfVxuXG4gIC8vIEVhZ2VybHkgdW5wYWNrIHggaW5wdXQgc2luY2UgaXQgaXMgcGFzc2VkIGluIHRvIGFsbCB0aGUgc2hhZGVycyB3aGljaFxuICAvLyByZXF1aXJlIHVucGFja2VkIGlucHV0cy5cbiAgY29uc3QgeHRleERhdGEgPSBiYWNrZW5kLnRleERhdGEuZ2V0KHguZGF0YUlkKTtcbiAgY29uc3QgeElzUGFja2VkID0geHRleERhdGEgIT09IG51bGwgJiYgeHRleERhdGEuaXNQYWNrZWQ7XG4gIGNvbnN0IHhVblBhY2tlZCA9IHhJc1BhY2tlZCA/IGJhY2tlbmQudW5wYWNrVGVuc29yKHgpIDogeDtcblxuICAvLyBSZXNoYXBlIGludG8gYSAyZCB0ZW5zb3IgW2JhdGNoLCBsYXN0RGltXSBhbmQgY29tcHV0ZSB0b3BrIGFsb25nIGxhc3REaW0uXG4gIGNvbnN0IHhTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHhTaGFwZSk7XG4gIGNvbnN0IGJhdGNoID0geFNpemUgLyBsYXN0RGltO1xuICBjb25zdCB4MkQgPSByZXNoYXBlKFxuICAgICAge2lucHV0czoge3g6IHhVblBhY2tlZH0sIGF0dHJzOiB7c2hhcGU6IFtiYXRjaCwgbGFzdERpbV19LCBiYWNrZW5kfSk7XG5cbiAgaWYgKHhJc1BhY2tlZCkge1xuICAgIGRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvT3JOdWxsKGJhY2tlbmQsIHhVblBhY2tlZCk7XG4gIH1cblxuICBjb25zdCBrUG93MiA9IHJvdW5kVXBUb1BvdzIoayk7XG4gIGNvbnN0IGxhc3REaW1Qb3cyID0gcm91bmRVcFRvUG93MihsYXN0RGltKTtcblxuICAvLyBPbmx5IHRoZSBpbmRpY2VzIGNvbnRhaW5pbmcgdGhlIHRvcCBLIGFyZSBrZXB0IGF0IGV2ZXJ5IHN0ZXAgdG8gcmVkdWNlXG4gIC8vIG51bWJlciBvZiBvdXRwdXRzIGluIHRoZSBHUFUgYWxnb3JpdGhtcywgc28gb25jZSB0aGUgZmluYWwgc2V0IG9mIGluZGljZXNcbiAgLy8gaXMgY29tcHV0ZWQgdGhlbiBnYXRoZXIgaXMgdXNlZCB0byBncmFiIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlc1xuICAvLyBmcm9tIHRoZSBvcmlnaW5hbCBpbnB1dC5cbiAgbGV0IGluZGljZXM6IFRlbnNvckluZm8gPSBudWxsO1xuXG4gIC8vIEdQVSBhbGdvcml0aG0gYWx3YXlzIHRha2VzIGluIGFuIGluZGljZXMgaW5wdXQgYnV0IHRoaXMgaW5wdXQgaXMgbm90IHVzZWRcbiAgLy8gb24gdGhlIGZpcnN0IHJ1biBvZiBhIEdQVSBhbGdvcml0aG0sIHRoZXJlZm9yZSBpZiBpbmRpY2VzIGlzIG51bGwgd2Ugc2ltcGx5XG4gIC8vIHBhc3MgaW4geDJEIGluc3RlYWQgb2YgaXQgYnV0IHRoZSB2YWx1ZSB3aWxsIG5vdCBhY3R1YWxseSBiZSB1c2VkXG4gIGNvbnN0IGdldElucHV0cyA9ICgpID0+IGluZGljZXMgPT09IG51bGwgPyBbeDJELCB4MkRdIDogW3gyRCwgaW5kaWNlc107XG5cbiAgY29uc3QgcnVuU3dhcCA9IChkaXI6IG51bWJlciwgaW5jOiBudW1iZXIsIHNoYXBlOiBudW1iZXJbXSkgPT4ge1xuICAgIGNvbnN0IGlucHV0cyA9IGdldElucHV0cygpO1xuICAgIGNvbnN0IHByb2dyYW0gPSBuZXcgU3dhcFByb2dyYW0oc2hhcGUpO1xuICAgIGNvbnN0IGZpc3RQYXNzID0gaW5kaWNlcyA9PT0gbnVsbCA/IDEgOiAwO1xuICAgIGNvbnN0IGN1c3RvbVZhbHVlcyA9XG4gICAgICAgIFtbbGFzdERpbV0sIFtmaXN0UGFzc10sIFtOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFldLCBbZGlyXSwgW2luY11dO1xuICAgIGNvbnN0IHByZXZJbmRpY2VzID0gaW5kaWNlcztcbiAgICBpbmRpY2VzID0gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgaW5wdXRzLCAnaW50MzInLCBjdXN0b21WYWx1ZXMpO1xuICAgIGRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvT3JOdWxsKGJhY2tlbmQsIHByZXZJbmRpY2VzKTtcbiAgfTtcblxuICAvLyBTdGVwIDE6IGxvY2FsIHNvcnRcbiAgZm9yIChsZXQgbGVuID0gMTsgbGVuIDwga1BvdzI7IGxlbiAqPSAyKSB7XG4gICAgY29uc3QgZGlyID0gbGVuICogMjtcbiAgICBmb3IgKGxldCBpbmMgPSBsZW47IGluYyA+PSAxOyBpbmMgLz0gMikge1xuICAgICAgcnVuU3dhcChkaXIsIGluYywgW2JhdGNoLCBsYXN0RGltUG93Ml0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0ZXAgMjogbWVyZ2VcbiAgZm9yIChsZXQgaW5kaWNlc1NpemUgPSBsYXN0RGltUG93MjsgaW5kaWNlc1NpemUgPiBrUG93MjsgaW5kaWNlc1NpemUgLz0gMikge1xuICAgIGNvbnN0IGlucHV0cyA9IGdldElucHV0cygpO1xuICAgIGNvbnN0IG1lcmdlUHJvZ3JhbSA9IG5ldyBNZXJnZVByb2dyYW0oW2JhdGNoLCBpbmRpY2VzU2l6ZSAvIDJdKTtcbiAgICBjb25zdCBmaXJzdFBhc3MgPSBpbmRpY2VzID09PSBudWxsID8gMSA6IDA7XG4gICAgY29uc3QgY3VzdG9tVmFsdWVzID0gW1tsYXN0RGltXSwgW2ZpcnN0UGFzc10sIFtrUG93Ml1dO1xuICAgIGNvbnN0IHByZXZJbmRpY2VzID0gaW5kaWNlcztcbiAgICBpbmRpY2VzID1cbiAgICAgICAgYmFja2VuZC5ydW5XZWJHTFByb2dyYW0obWVyZ2VQcm9ncmFtLCBpbnB1dHMsICdpbnQzMicsIGN1c3RvbVZhbHVlcyk7XG4gICAgZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm9Pck51bGwoYmFja2VuZCwgcHJldkluZGljZXMpO1xuXG4gICAgLy8gU3RlcCAzOiByZWJ1aWxkXG4gICAgY29uc3QgbGVuID0ga1BvdzIgLyAyO1xuICAgIGNvbnN0IGRpciA9IGxlbiAqIDI7XG4gICAgZm9yIChsZXQgaW5jID0gbGVuOyBpbmMgPj0gMTsgaW5jIC89IDIpIHtcbiAgICAgIHJ1blN3YXAoZGlyLCBpbmMsIGluZGljZXMuc2hhcGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEtlZXAgb25seSB0aGUgcmVxdWVzdGVkIHRvcCBLIHJlc3VsdHMgaW5zdGVhZCBvZiBrUG93MlxuICBsZXQgcHJldkluZGljZXMgPSBpbmRpY2VzO1xuICBpbmRpY2VzID0gc2xpY2UoXG4gICAgICB7aW5wdXRzOiB7eDogaW5kaWNlc30sIGJhY2tlbmQsIGF0dHJzOiB7YmVnaW46IDAsIHNpemU6IFtiYXRjaCwga119fSk7XG4gIGRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvT3JOdWxsKGJhY2tlbmQsIHByZXZJbmRpY2VzKTtcblxuICAvLyBHYXRoZXIgdmFsdWVzIG9uIGxhc3QgZGltZW5zaW9uXG4gIGxldCB2YWx1ZXMgPSBnYXRoZXJWMihcbiAgICAgIHtpbnB1dHM6IHt4OiB4MkQsIGluZGljZXN9LCBiYWNrZW5kLCBhdHRyczoge2F4aXM6IDEsIGJhdGNoRGltczogMX19KTtcbiAgZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm9Pck51bGwoYmFja2VuZCwgeDJEKTtcblxuICAvLyBSZXNoYXBlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGlucHV0IHNoYXBlLCBleGNlcHQgdGhhdCB0aGUgbGFzdFxuICAvLyBkaW1lbnNpb24gaXMgay5cbiAgY29uc3QgbmV3U2hhcGUgPSB4U2hhcGUuc2xpY2UoMCwgLTEpO1xuICBuZXdTaGFwZS5wdXNoKGspO1xuXG4gIHByZXZJbmRpY2VzID0gaW5kaWNlcztcbiAgaW5kaWNlcyA9IHJlc2hhcGUoe2lucHV0czoge3g6IGluZGljZXN9LCBhdHRyczoge3NoYXBlOiBuZXdTaGFwZX0sIGJhY2tlbmR9KTtcbiAgZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm9Pck51bGwoYmFja2VuZCwgcHJldkluZGljZXMpO1xuXG4gIGNvbnN0IHByZXZWYWx1ZXMgPSB2YWx1ZXM7XG4gIHZhbHVlcyA9IHJlc2hhcGUoe2lucHV0czoge3g6IHZhbHVlc30sIGF0dHJzOiB7c2hhcGU6IG5ld1NoYXBlfSwgYmFja2VuZH0pO1xuICBkaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mb09yTnVsbChiYWNrZW5kLCBwcmV2VmFsdWVzKTtcblxuICByZXR1cm4gW3ZhbHVlcywgaW5kaWNlc107XG59XG5cbmV4cG9ydCBjb25zdCB0b3BLQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFRvcEssXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiB0b3BLIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class TransformProgram {\n constructor(imageHeight, imageWidth, interpolation, fillMode, fillValue, outShape) {\n this.variableNames = ['Image', 'Transforms'];\n this.outputShape = outShape;\n const interpolationModeId = interpolation === 'nearest' ? 1 : 2;\n let fillModeId;\n switch (fillMode) {\n case 'constant':\n fillModeId = 1;\n break;\n case 'reflect':\n fillModeId = 2;\n break;\n case 'wrap':\n fillModeId = 3;\n break;\n case 'nearest':\n fillModeId = 4;\n break;\n default:\n fillModeId = 1;\n break;\n }\n 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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtX2dwdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13ZWJnbC9zcmMvdHJhbnNmb3JtX2dwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ0ksV0FBbUIsRUFBRSxVQUFrQixFQUN2QyxhQUFtQyxFQUNuQyxRQUErQyxFQUFFLFNBQWlCLEVBQ2xFLFFBQTBDO1FBUjlDLGtCQUFhLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFTdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDNUIsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLFVBQVUsQ0FBQztRQUNmLFFBQVEsUUFBUSxFQUFFO1lBQ2hCLEtBQUssVUFBVTtnQkFDYixVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDZixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTtZQUNSLEtBQUssU0FBUztnQkFDWixVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLE1BQU07WUFDUjtnQkFDRSxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLE1BQU07U0FDVDtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUc7OzttQkFHRCxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBd0JGLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQWlCVixVQUFVOzs7Ozs7Ozs7OzRDQVc3QixXQUFXLCtCQUErQixVQUFVOzs7c0NBR3RCLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0F3QlQsU0FBUzs7OzttREFJSSxVQUFVO21EQUNWLFdBQVc7O3NCQUV4QyxtQkFBbUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQXdCaEMsQ0FBQztJQUNSLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHUEdQVVByb2dyYW19IGZyb20gJy4vZ3BncHVfbWF0aCc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2Zvcm1Qcm9ncmFtIGltcGxlbWVudHMgR1BHUFVQcm9ncmFtIHtcbiAgdmFyaWFibGVOYW1lcyA9IFsnSW1hZ2UnLCAnVHJhbnNmb3JtcyddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBpbWFnZUhlaWdodDogbnVtYmVyLCBpbWFnZVdpZHRoOiBudW1iZXIsXG4gICAgICBpbnRlcnBvbGF0aW9uOiAnbmVhcmVzdCd8J2JpbGluZWFyJyxcbiAgICAgIGZpbGxNb2RlOiAnY29uc3RhbnQnfCdyZWZsZWN0J3wnd3JhcCd8J25lYXJlc3QnLCBmaWxsVmFsdWU6IG51bWJlcixcbiAgICAgIG91dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBvdXRTaGFwZTtcbiAgICBjb25zdCBpbnRlcnBvbGF0aW9uTW9kZUlkID0gaW50ZXJwb2xhdGlvbiA9PT0gJ25lYXJlc3QnID8gMSA6IDI7XG4gICAgbGV0IGZpbGxNb2RlSWQ7XG4gICAgc3dpdGNoIChmaWxsTW9kZSkge1xuICAgICAgY2FzZSAnY29uc3RhbnQnOlxuICAgICAgICBmaWxsTW9kZUlkID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWZsZWN0JzpcbiAgICAgICAgZmlsbE1vZGVJZCA9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd3JhcCc6XG4gICAgICAgIGZpbGxNb2RlSWQgPSAzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25lYXJlc3QnOlxuICAgICAgICBmaWxsTW9kZUlkID0gNDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBmaWxsTW9kZUlkID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMudXNlckNvZGUgPSBgXG4gICAgICAgICAgICBmbG9hdCBtYXBDb29yZChmbG9hdCBvdXRDb29yZCwgZmxvYXQgbGVuKSB7XG4gICAgICAgICAgICAgIGZsb2F0IGluQ29vcmQgPSBvdXRDb29yZDtcbiAgICAgICAgICAgICAgaWYoJHtmaWxsTW9kZUlkfSA9PSAyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluQ29vcmQgPCAwLjApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQ29vcmQgPSAwLjA7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbG9hdCBzejIgPSAyLjAgKiBsZW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbkNvb3JkIDwgc3oyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5Db29yZCA9IHN6MiAqIGZsb2F0KGludChmbG9hdCgtaW5Db29yZCAvIHN6MikpKSArXG4gICAgICAgICAgICAgICAgICAgICAgaW5Db29yZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbkNvb3JkID0gaW5Db29yZCA8IC1sZW4gPyBpbkNvb3JkICsgc3oyIDogLWluQ29vcmQgLSAxLjA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbkNvb3JkID4gbGVuIC0gMS4wKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobGVuIDw9IDEuMCkge1xuICAgICAgICAgICAgICAgICAgICBpbkNvb3JkID0gMC4wO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3oyID0gMi4wICogbGVuO1xuICAgICAgICAgICAgICAgICAgICBpbkNvb3JkIC09IHN6MiAqIGZsb2F0KGludChmbG9hdChpbkNvb3JkIC8gc3oyKSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5Db29yZCA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICBpbkNvb3JkID0gc3oyIC0gaW5Db29yZCAtIDEuMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhbXAoaW5Db29yZCwgMC4wLCBsZW4gLSAxLjApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCR7ZmlsbE1vZGVJZH0gPT0gMykge1xuICAgICAgICAgICAgICAgIGlmIChpbkNvb3JkIDwgMC4wKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobGVuIDw9IDEuMCkge1xuICAgICAgICAgICAgICAgICAgICBpbkNvb3JkID0gMC4wO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3ogPSBsZW4gLSAxLjA7XG4gICAgICAgICAgICAgICAgICAgIGluQ29vcmQgKz0gbGVuICogKGZsb2F0KGludChmbG9hdCgtaW5Db29yZCAvIHN6KSkpICsgMS4wKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluQ29vcmQgPiBsZW4gLSAxLjApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQ29vcmQgPSAwLjA7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbG9hdCBzeiA9IGxlbiAtIDEuMDtcbiAgICAgICAgICAgICAgICAgICAgaW5Db29yZCAtPSBsZW4gKiBmbG9hdChpbnQoZmxvYXQoaW5Db29yZCAvIHN6KSkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhbXAoaW5Db29yZCwgMC4wLCBsZW4gLSAxLjApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCR7ZmlsbE1vZGVJZH0gPT0gNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFtcChvdXRDb29yZCwgMC4wLCBsZW4gLSAxLjApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXRDb29yZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbG9hdCByZWFkV2l0aEZpbGxWYWx1ZShpbnQgYmF0Y2gsIGludCBjb29yZFksIGludCBjb29yZFgsXG4gICAgICAgICAgICAgIGludCBjaGFubmVsKSB7XG4gICAgICAgICAgICAgIGZsb2F0IG91dHB1dFZhbHVlO1xuICAgICAgICAgICAgICBpZiAoMCA8PSBjb29yZFkgJiYgY29vcmRZIDwgJHtcbiAgICAgICAgaW1hZ2VIZWlnaHR9ICYmIDAgPD0gY29vcmRYICYmIGNvb3JkWCA8ICR7aW1hZ2VXaWR0aH0pIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gZ2V0SW1hZ2UoYmF0Y2gsIGNvb3JkWSwgY29vcmRYLCBjaGFubmVsKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IGZsb2F0KCR7ZmlsbFZhbHVlfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dFZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgICAgIGl2ZWM0IGNvb3JkcyA9IGdldE91dHB1dENvb3JkcygpO1xuICAgICAgICAgICAgICBmbG9hdCBvdXRwdXRWYWx1ZTtcbiAgICAgICAgICAgICAgaW50IGJhdGNoID0gY29vcmRzWzBdO1xuICAgICAgICAgICAgICBpbnQgeCA9IGNvb3Jkc1syXTtcbiAgICAgICAgICAgICAgaW50IHkgPSBjb29yZHNbMV07XG4gICAgICAgICAgICAgIGludCBjaGFubmVsID0gY29vcmRzWzNdO1xuICAgICAgICAgICAgICBmbG9hdCB4ZiA9IGZsb2F0KHgpO1xuICAgICAgICAgICAgICBmbG9hdCB5ZiA9IGZsb2F0KHkpO1xuICAgICAgICAgICAgICBmbG9hdCBhMSA9IGdldFRyYW5zZm9ybXMoYmF0Y2gsIDApO1xuICAgICAgICAgICAgICBmbG9hdCBhMiA9IGdldFRyYW5zZm9ybXMoYmF0Y2gsIDEpO1xuICAgICAgICAgICAgICBmbG9hdCBhMyA9IGdldFRyYW5zZm9ybXMoYmF0Y2gsIDIpO1xuICAgICAgICAgICAgICBmbG9hdCBiMSA9IGdldFRyYW5zZm9ybXMoYmF0Y2gsIDMpO1xuICAgICAgICAgICAgICBmbG9hdCBiMiA9IGdldFRyYW5zZm9ybXMoYmF0Y2gsIDQpO1xuICAgICAgICAgICAgICBmbG9hdCBiMyA9IGdldFRyYW5zZm9ybXMoYmF0Y2gsIDUpO1xuICAgICAgICAgICAgICBmbG9hdCBjMSA9IGdldFRyYW5zZm9ybXMoYmF0Y2gsIDYpO1xuICAgICAgICAgICAgICBmbG9hdCBjMiA9IGdldFRyYW5zZm9ybXMoYmF0Y2gsIDcpO1xuICAgICAgICAgICAgICBmbG9hdCBwcm9qZWN0aW9uID0gYzEgKiB4ZiArIGMyICogeWYgKyAxLjA7XG4gICAgICAgICAgICAgIGlmIChwcm9qZWN0aW9uID09IDAuMCkge1xuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gZmxvYXQoJHtmaWxsVmFsdWV9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbG9hdCBpblggPSAoYTEgKiB4ZiArIGEyICogeWYgKyBhMykgLyBwcm9qZWN0aW9uO1xuICAgICAgICAgICAgICAgIGZsb2F0IGluWSA9IChiMSAqIHhmICsgYjIgKiB5ZiArIGIzKSAvIHByb2plY3Rpb247XG4gICAgICAgICAgICAgICAgZmxvYXQgbWFwWCA9IG1hcENvb3JkKGluWCwgZmxvYXQoJHtpbWFnZVdpZHRofSkpO1xuICAgICAgICAgICAgICAgIGZsb2F0IG1hcFkgPSBtYXBDb29yZChpblksIGZsb2F0KCR7aW1hZ2VIZWlnaHR9KSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoJHtpbnRlcnBvbGF0aW9uTW9kZUlkfSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICBpbnQgY29vcmRZID0gaW50KHJvdW5kKG1hcFkpKTtcbiAgICAgICAgICAgICAgICAgIGludCBjb29yZFggPSBpbnQocm91bmQobWFwWCkpO1xuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSByZWFkV2l0aEZpbGxWYWx1ZShiYXRjaCwgY29vcmRZLCBjb29yZFgsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBmbG9hdCB5Rmxvb3IgPSBmbG9vcihtYXBZKTtcbiAgICAgICAgICAgICAgICAgIGZsb2F0IHhGbG9vciA9IGZsb29yKG1hcFgpO1xuICAgICAgICAgICAgICAgICAgZmxvYXQgeUNlaWwgPSB5Rmxvb3IgKyAxLjA7XG4gICAgICAgICAgICAgICAgICBmbG9hdCB4Q2VpbCA9IHhGbG9vciArIDEuMDtcbiAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlWUZsb29yID0gKHhDZWlsIC0gbWFwWCkgKlxuICAgICAgICAgICAgICAgICAgcmVhZFdpdGhGaWxsVmFsdWUoYmF0Y2gsIGludCh5Rmxvb3IpLCBpbnQoeEZsb29yKSwgY2hhbm5lbCkgK1xuICAgICAgICAgICAgICAgICAgKG1hcFggLSB4Rmxvb3IpICpcbiAgICAgICAgICAgICAgICAgIHJlYWRXaXRoRmlsbFZhbHVlKGJhdGNoLCBpbnQoeUZsb29yKSwgaW50KHhDZWlsKSwgY2hhbm5lbCk7XG4gICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZVlDZWlsID0gKHhDZWlsIC0gbWFwWCkgKlxuICAgICAgICAgICAgICAgICAgcmVhZFdpdGhGaWxsVmFsdWUoYmF0Y2gsIGludCh5Q2VpbCksIGludCh4Rmxvb3IpLCBjaGFubmVsKSArXG4gICAgICAgICAgICAgICAgICAobWFwWCAtIHhGbG9vcikgKlxuICAgICAgICAgICAgICAgICAgcmVhZFdpdGhGaWxsVmFsdWUoYmF0Y2gsIGludCh5Q2VpbCksIGludCh4Q2VpbCksIGNoYW5uZWwpO1xuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSAoeUNlaWwgLSBtYXBZKSAqIHZhbHVlWUZsb29yICtcbiAgICAgICAgICAgICAgICAgIChtYXBZIC0geUZsb29yKSAqIHZhbHVlWUNlaWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNldE91dHB1dChvdXRwdXRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGA7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Transform } from '@tensorflow/tfjs-core';\nimport { TransformProgram } from '../transform_gpu';\nexport function transform(args) {\n const { inputs, backend, attrs } = args;\n const { image, transforms } = inputs;\n const { interpolation, fillMode, fillValue, outputShape } = attrs;\n const [batch, imageHeight, imageWidth, numChannels] = image.shape;\n const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth];\n const outShape = [batch, outHeight, outWidth,\n numChannels];\n const program = new TransformProgram(imageHeight, imageWidth, interpolation, fillMode, fillValue, outShape);\n return backend.runWebGLProgram(program, [image, transforms], 'float32');\n}\nexport const transformConfig = {\n kernelName: Transform,\n backendName: 'webgl',\n kernelFunc: transform\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1RyYW5zZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVDLFNBQVMsRUFBa0MsTUFBTSx1QkFBdUIsQ0FBQztBQUd2SCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBSXpCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25DLE1BQU0sRUFBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFaEUsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDbEUsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FDdkIsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNsRSxNQUFNLFFBQVEsR0FDVixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtRQUMxQixXQUFXLENBQXFDLENBQUM7SUFFdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDaEMsV0FBVyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHJhbnNmb3JtLCBUcmFuc2Zvcm1BdHRycywgVHJhbnNmb3JtSW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kV2ViR0x9IGZyb20gJy4uL2JhY2tlbmRfd2ViZ2wnO1xuaW1wb3J0IHtUcmFuc2Zvcm1Qcm9ncmFtfSBmcm9tICcuLi90cmFuc2Zvcm1fZ3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShhcmdzOiB7XG4gIGlucHV0czogVHJhbnNmb3JtSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZFdlYkdMLFxuICBhdHRyczogVHJhbnNmb3JtQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2ltYWdlLCB0cmFuc2Zvcm1zfSA9IGlucHV0cztcbiAgY29uc3Qge2ludGVycG9sYXRpb24sIGZpbGxNb2RlLCBmaWxsVmFsdWUsIG91dHB1dFNoYXBlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IFtiYXRjaCwgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIG51bUNoYW5uZWxzXSA9IGltYWdlLnNoYXBlO1xuICBjb25zdCBbb3V0SGVpZ2h0LCBvdXRXaWR0aF0gPVxuICAgICAgb3V0cHV0U2hhcGUgIT0gbnVsbCA/IG91dHB1dFNoYXBlIDogW2ltYWdlSGVpZ2h0LCBpbWFnZVdpZHRoXTtcbiAgY29uc3Qgb3V0U2hhcGUgPVxuICAgICAgW2JhdGNoLCBvdXRIZWlnaHQsIG91dFdpZHRoLFxuICAgICAgIG51bUNoYW5uZWxzXSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuICBjb25zdCBwcm9ncmFtID0gbmV3IFRyYW5zZm9ybVByb2dyYW0oXG4gICAgICBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgaW50ZXJwb2xhdGlvbiwgZmlsbE1vZGUsIGZpbGxWYWx1ZSwgb3V0U2hhcGUpO1xuICByZXR1cm4gYmFja2VuZC5ydW5XZWJHTFByb2dyYW0ocHJvZ3JhbSwgW2ltYWdlLCB0cmFuc2Zvcm1zXSwgJ2Zsb2F0MzInKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBUcmFuc2Zvcm0sXG4gIGJhY2tlbmROYW1lOiAnd2ViZ2wnLFxuICBrZXJuZWxGdW5jOiB0cmFuc2Zvcm0gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Unique } from '@tensorflow/tfjs-core';\nimport { uniqueImplCPU } from '../kernel_utils/shared';\nimport { assertNotComplex } from '../webgl_util';\nexport function unique(args) {\n const { inputs, attrs, backend } = args;\n const { axis } = attrs;\n const { x } = inputs;\n assertNotComplex(x, 'unique');\n // For now, always forward calculation to the CPU backend.\n console.warn('WARNING: ', 'UI might be locked temporarily as data is being downloaded');\n const values = backend.readSync(x.dataId);\n const { outputValues, outputShape, indices } = uniqueImplCPU(values, axis, x.shape, x.dtype);\n return [\n backend.makeTensorInfo(outputShape, x.dtype, outputValues),\n backend.makeTensorInfo([indices.length], 'int32', indices),\n ];\n}\nexport const uniqueConfig = {\n kernelName: Unique,\n backendName: 'webgl',\n kernelFunc: unique,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1VuaXF1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVDLE1BQU0sRUFBNEIsTUFBTSx1QkFBdUIsQ0FBQztBQUc5RyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQ3lFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTlCLDBEQUEwRDtJQUMxRCxPQUFPLENBQUMsSUFBSSxDQUNSLFdBQVcsRUFDWCw0REFBNEQsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBQyxHQUN0QyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxPQUFPO1FBQ0wsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7UUFDMUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO0tBQzNELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsT0FBTztJQUNwQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBVbmlxdWUsIFVuaXF1ZUF0dHJzLCBVbmlxdWVJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5pbXBvcnQge3VuaXF1ZUltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi93ZWJnbF91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZShcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBVbmlxdWVJbnB1dHMsIGF0dHJzOiBVbmlxdWVBdHRycywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTH0pOlxuICAgIFRlbnNvckluZm9bXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGF0dHJzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtheGlzfSA9IGF0dHJzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ3VuaXF1ZScpO1xuXG4gIC8vIEZvciBub3csIGFsd2F5cyBmb3J3YXJkIGNhbGN1bGF0aW9uIHRvIHRoZSBDUFUgYmFja2VuZC5cbiAgY29uc29sZS53YXJuKFxuICAgICAgJ1dBUk5JTkc6ICcsXG4gICAgICAnVUkgbWlnaHQgYmUgbG9ja2VkIHRlbXBvcmFyaWx5IGFzIGRhdGEgaXMgYmVpbmcgZG93bmxvYWRlZCcpO1xuICBjb25zdCB2YWx1ZXMgPSBiYWNrZW5kLnJlYWRTeW5jKHguZGF0YUlkKTtcbiAgY29uc3Qge291dHB1dFZhbHVlcywgb3V0cHV0U2hhcGUsIGluZGljZXN9ID1cbiAgICAgIHVuaXF1ZUltcGxDUFUodmFsdWVzLCBheGlzLCB4LnNoYXBlLCB4LmR0eXBlKTtcbiAgcmV0dXJuIFtcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG91dHB1dFNoYXBlLCB4LmR0eXBlLCBvdXRwdXRWYWx1ZXMpLFxuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oW2luZGljZXMubGVuZ3RoXSwgJ2ludDMyJywgaW5kaWNlcyksXG4gIF07XG59XG5cbmV4cG9ydCBjb25zdCB1bmlxdWVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVW5pcXVlLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogdW5pcXVlIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Unpack } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nexport function unpack(args) {\n const { inputs, backend, attrs } = args;\n const { value } = inputs;\n let { axis } = attrs;\n if (axis < 0) {\n axis += value.shape.length;\n }\n const x = value;\n const xRank = x.shape.length;\n const num = value.shape[axis];\n const outShape = new Array(xRank - 1);\n let outIndex = 0;\n for (let i = 0; i < xRank; i++) {\n if (i !== axis) {\n outShape[outIndex++] = x.shape[i];\n }\n }\n const toDispose = [];\n const begin = new Array(xRank).fill(0);\n const size = x.shape.slice();\n size[axis] = 1;\n const res = new Array(num);\n for (let i = 0; i < res.length; i++) {\n begin[axis] = i;\n const sliced = slice({ inputs: { x }, backend, attrs: { begin, size } });\n const reshaped = reshape({ inputs: { x: sliced }, backend, attrs: { shape: outShape } });\n res[i] = reshaped;\n toDispose.push(sliced);\n }\n toDispose.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return res;\n}\nexport const unpackConfig = {\n kernelName: Unpack,\n backendName: 'webgl',\n kernelFunc: unpack\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5wYWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1VucGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVDLE1BQU0sRUFBNEIsTUFBTSx1QkFBdUIsQ0FBQztBQUk5RyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUIsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsSUFDeUU7SUFFM0UsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsSUFBSSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVuQixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDWixJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7S0FDNUI7SUFFRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDaEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFN0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLFFBQVEsR0FBYSxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDOUIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2QsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQztLQUNGO0lBRUQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRXJCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixNQUFNLEdBQUcsR0FBaUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxFQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLFFBQVEsR0FDVixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDdEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUVsQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBaUI7SUFDeEMsVUFBVSxFQUFFLE1BQU07SUFDbEIsV0FBVyxFQUFFLE9BQU87SUFDcEIsVUFBVSxFQUFFLE1BQStCO0NBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBVbnBhY2ssIFVucGFja0F0dHJzLCBVbnBhY2tJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRXZWJHTH0gZnJvbSAnLi4vYmFja2VuZF93ZWJnbCc7XG5cbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4vU2xpY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5wYWNrKFxuICAgIGFyZ3M6XG4gICAgICAgIHtpbnB1dHM6IFVucGFja0lucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCwgYXR0cnM6IFVucGFja0F0dHJzfSk6XG4gICAgVGVuc29ySW5mb1tdIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3ZhbHVlfSA9IGlucHV0cztcbiAgbGV0IHtheGlzfSA9IGF0dHJzO1xuXG4gIGlmIChheGlzIDwgMCkge1xuICAgIGF4aXMgKz0gdmFsdWUuc2hhcGUubGVuZ3RoO1xuICB9XG5cbiAgY29uc3QgeCA9IHZhbHVlO1xuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuXG4gIGNvbnN0IG51bSA9IHZhbHVlLnNoYXBlW2F4aXNdO1xuICBjb25zdCBvdXRTaGFwZTogbnVtYmVyW10gPSBuZXcgQXJyYXkoeFJhbmsgLSAxKTtcbiAgbGV0IG91dEluZGV4ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4UmFuazsgaSsrKSB7XG4gICAgaWYgKGkgIT09IGF4aXMpIHtcbiAgICAgIG91dFNoYXBlW291dEluZGV4KytdID0geC5zaGFwZVtpXTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0b0Rpc3Bvc2UgPSBbXTtcblxuICBjb25zdCBiZWdpbiA9IG5ldyBBcnJheSh4UmFuaykuZmlsbCgwKTtcbiAgY29uc3Qgc2l6ZSA9IHguc2hhcGUuc2xpY2UoKTtcbiAgc2l6ZVtheGlzXSA9IDE7XG4gIGNvbnN0IHJlczogVGVuc29ySW5mb1tdID0gbmV3IEFycmF5KG51bSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYmVnaW5bYXhpc10gPSBpO1xuICAgIGNvbnN0IHNsaWNlZCA9IHNsaWNlKHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtiZWdpbiwgc2l6ZX19KTtcbiAgICBjb25zdCByZXNoYXBlZCA9XG4gICAgICAgIHJlc2hhcGUoe2lucHV0czoge3g6IHNsaWNlZH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IG91dFNoYXBlfX0pO1xuICAgIHJlc1tpXSA9IHJlc2hhcGVkO1xuXG4gICAgdG9EaXNwb3NlLnB1c2goc2xpY2VkKTtcbiAgfVxuXG4gIHRvRGlzcG9zZS5mb3JFYWNoKHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCB1bnBhY2tDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVW5wYWNrLFxuICBiYWNrZW5kTmFtZTogJ3dlYmdsJyxcbiAga2VybmVsRnVuYzogdW5wYWNrIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class SegmentOpProgram {\n constructor(segOpInfo, segOpType) {\n this.variableNames = ['x', 'segmentIds'];\n const windowSize = segOpInfo.windowSize;\n const batchSize = segOpInfo.batchSize;\n const inSize = segOpInfo.inSize;\n const numSegments = segOpInfo.numSegments;\n const outSize = numSegments * Math.ceil(inSize / windowSize);\n this.outputShape = [batchSize, outSize];\n const initializationValue = '0.0';\n const returnValue = `sumValue`;\n const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4;\n const windowSizeVec4Remainder = windowSize % 4;\n const updateSnippet = `\n sumValue += dot(values, segFilter);\n `;\n let checkValueOutOfBounds = '';\n if (inSize % windowSize > 0) {\n checkValueOutOfBounds = `\n if (inIdx < 0 || inIdx >= ${inSize}) {\n return initializationValue;\n }\n `;\n }\n let checkSegmentIdOutOfBounds = '';\n if (inSize % windowSize > 0) {\n checkSegmentIdOutOfBounds = `\n if (inIdx < 0 || inIdx >= ${inSize}) {\n return -1.0;\n }\n `;\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 `;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudF9ncHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3NlZ21lbnRfZ3B1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE1BQU0sT0FBTyxnQkFBZ0I7SUFLM0IsWUFDSSxTQUE4QyxFQUM5QyxTQUErQjtRQU5uQyxrQkFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBT2xDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFeEMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBRS9CLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sdUJBQXVCLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUUvQyxNQUFNLGFBQWEsR0FBRzs7S0FFckIsQ0FBQztRQUVGLElBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksTUFBTSxHQUFHLFVBQVUsR0FBRyxDQUFDLEVBQUU7WUFDM0IscUJBQXFCLEdBQUc7b0NBQ00sTUFBTTs7O09BR25DLENBQUM7U0FDSDtRQUVELElBQUkseUJBQXlCLEdBQUcsRUFBRSxDQUFDO1FBQ25DLElBQUksTUFBTSxHQUFHLFVBQVUsR0FBRyxDQUFDLEVBQUU7WUFDM0IseUJBQXlCLEdBQUc7b0NBQ0UsTUFBTTs7O09BR25DLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7MENBQ3NCLG1CQUFtQjs7O1VBR25ELHFCQUFxQjs7Ozs7VUFLckIseUJBQXlCOzs7Ozs7Ozs7WUFTdkIsV0FBVyxjQUFjLFVBQVU7d0RBQ1MsV0FBVzs7Ozs4QkFJckMscUJBQXFCOzs7Ozs7Ozs7Ozs7Ozs7O1lBZ0J2QyxhQUFhOzs7aUNBR1EscUJBQXFCO2NBQ3hDLHVCQUF1QixLQUFLLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBaUIvQixhQUFhO3FCQUNKLHVCQUF1QixLQUFLLENBQUM7Ozs7Ozs7Ozs7Ozs7OztZQWV0QyxhQUFhO3FCQUNKLHVCQUF1QixLQUFLLENBQUM7Ozs7Ozs7Ozs7Ozs7OztZQWV0QyxhQUFhOztvQkFFTCxXQUFXOztLQUUxQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7R1BHUFVQcm9ncmFtfSBmcm9tICcuL2dwZ3B1X21hdGgnO1xuXG5leHBvcnQgY2xhc3MgU2VnbWVudE9wUHJvZ3JhbSBpbXBsZW1lbnRzIEdQR1BVUHJvZ3JhbSB7XG4gIHZhcmlhYmxlTmFtZXMgPSBbJ3gnLCAnc2VnbWVudElkcyddO1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBzZWdPcEluZm86IGJhY2tlbmRfdXRpbC5zZWdtZW50X3V0aWwuU2VnT3BJbmZvLFxuICAgICAgc2VnT3BUeXBlOiAndW5zb3J0ZWRTZWdtZW50U3VtJykge1xuICAgIGNvbnN0IHdpbmRvd1NpemUgPSBzZWdPcEluZm8ud2luZG93U2l6ZTtcbiAgICBjb25zdCBiYXRjaFNpemUgPSBzZWdPcEluZm8uYmF0Y2hTaXplO1xuICAgIGNvbnN0IGluU2l6ZSA9IHNlZ09wSW5mby5pblNpemU7XG4gICAgY29uc3QgbnVtU2VnbWVudHMgPSBzZWdPcEluZm8ubnVtU2VnbWVudHM7XG4gICAgY29uc3Qgb3V0U2l6ZSA9IG51bVNlZ21lbnRzICogTWF0aC5jZWlsKGluU2l6ZSAvIHdpbmRvd1NpemUpO1xuICAgIHRoaXMub3V0cHV0U2hhcGUgPSBbYmF0Y2hTaXplLCBvdXRTaXplXTtcblxuICAgIGNvbnN0IGluaXRpYWxpemF0aW9uVmFsdWUgPSAnMC4wJztcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGBzdW1WYWx1ZWA7XG5cbiAgICBjb25zdCB3aW5kb3dTaXplTmVhcmVzdFZlYzQgPSBNYXRoLmZsb29yKHdpbmRvd1NpemUgLyA0KSAqIDQ7XG4gICAgY29uc3Qgd2luZG93U2l6ZVZlYzRSZW1haW5kZXIgPSB3aW5kb3dTaXplICUgNDtcblxuICAgIGNvbnN0IHVwZGF0ZVNuaXBwZXQgPSBgXG4gICAgICAgIHN1bVZhbHVlICs9IGRvdCh2YWx1ZXMsIHNlZ0ZpbHRlcik7XG4gICAgYDtcblxuICAgIGxldCBjaGVja1ZhbHVlT3V0T2ZCb3VuZHMgPSAnJztcbiAgICBpZiAoaW5TaXplICUgd2luZG93U2l6ZSA+IDApIHtcbiAgICAgIGNoZWNrVmFsdWVPdXRPZkJvdW5kcyA9IGBcbiAgICAgICAgaWYgKGluSWR4IDwgMCB8fCBpbklkeCA+PSAke2luU2l6ZX0pIHtcbiAgICAgICAgICByZXR1cm4gaW5pdGlhbGl6YXRpb25WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgICB9XG5cbiAgICBsZXQgY2hlY2tTZWdtZW50SWRPdXRPZkJvdW5kcyA9ICcnO1xuICAgIGlmIChpblNpemUgJSB3aW5kb3dTaXplID4gMCkge1xuICAgICAgY2hlY2tTZWdtZW50SWRPdXRPZkJvdW5kcyA9IGBcbiAgICAgICAgaWYgKGluSWR4IDwgMCB8fCBpbklkeCA+PSAke2luU2l6ZX0pIHtcbiAgICAgICAgICByZXR1cm4gLTEuMDtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDb2RlID0gYFxuICAgICAgY29uc3QgZmxvYXQgaW5pdGlhbGl6YXRpb25WYWx1ZSA9ICR7aW5pdGlhbGl6YXRpb25WYWx1ZX07XG5cbiAgICAgIGZsb2F0IGdldFZhbHVlKGludCBiYXRjaCwgaW50IGluSWR4KSB7XG4gICAgICAgICR7Y2hlY2tWYWx1ZU91dE9mQm91bmRzfVxuICAgICAgICByZXR1cm4gZ2V0WChiYXRjaCwgaW5JZHgpO1xuICAgICAgfVxuXG4gICAgICBmbG9hdCBnZXRTZWdtZW50SWRBdEluZGV4KGludCBpbklkeCkge1xuICAgICAgICAke2NoZWNrU2VnbWVudElkT3V0T2ZCb3VuZHN9XG4gICAgICAgIHJldHVybiBnZXRTZWdtZW50SWRzKGluSWR4KTtcbiAgICAgIH1cblxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBpdmVjMiBjb29yZHMgPSBnZXRPdXRwdXRDb29yZHMoKTtcbiAgICAgICAgaW50IGJhdGNoID0gY29vcmRzWzBdO1xuICAgICAgICBpbnQgb3V0SWR4ID0gY29vcmRzWzFdO1xuICAgICAgICBpbnQgaW5PZmZzZXQgPSBpbnQoZmxvb3IoZmxvYXQob3V0SWR4KSAvIGZsb2F0KFxuICAgICAgICAgICR7bnVtU2VnbWVudHN9KSkgKiBmbG9hdCgke3dpbmRvd1NpemV9KSk7XG4gICAgICAgIGludCBjdXJyZW50U2VnID0gaW50KG1vZChmbG9hdChvdXRJZHgpLCBmbG9hdCgke251bVNlZ21lbnRzfSkpKTtcblxuICAgICAgICBmbG9hdCBzdW1WYWx1ZSA9IDAuMDtcblxuICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8ICR7d2luZG93U2l6ZU5lYXJlc3RWZWM0fTsgaSArPSA0KSB7XG4gICAgICAgICAgaW50IGluSWR4ID0gaW5PZmZzZXQgKyBpO1xuICAgICAgICAgIHZlYzQgdmFsdWVzID0gdmVjNChcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCksXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHggKyAxKSxcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCArIDIpLFxuICAgICAgICAgICAgZ2V0VmFsdWUoYmF0Y2gsIGluSWR4ICsgMylcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdmVjNCBzZWdGaWx0ZXIgPSB2ZWM0KFxuICAgICAgICAgICAgaW50KGdldFNlZ21lbnRJZEF0SW5kZXgoaW5JZHgpKSA9PSBjdXJyZW50U2VnID8gMSA6IDAsXG4gICAgICAgICAgICBpbnQoZ2V0U2VnbWVudElkQXRJbmRleChpbklkeCArIDEpKSA9PSBjdXJyZW50U2VnID8gMSA6IDAsXG4gICAgICAgICAgICBpbnQoZ2V0U2VnbWVudElkQXRJbmRleChpbklkeCArIDIpKSA9PSBjdXJyZW50U2VnID8gMSA6IDAsXG4gICAgICAgICAgICBpbnQoZ2V0U2VnbWVudElkQXRJbmRleChpbklkeCArIDMpKSA9PSBjdXJyZW50U2VnID8gMSA6IDBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgJHt1cGRhdGVTbmlwcGV0fVxuICAgICAgICB9XG5cbiAgICAgICAgaW50IGluSWR4ID0gaW5PZmZzZXQgKyAke3dpbmRvd1NpemVOZWFyZXN0VmVjNH07XG4gICAgICAgIGlmICgke3dpbmRvd1NpemVWZWM0UmVtYWluZGVyID09PSAxfSkge1xuICAgICAgICAgIHZlYzQgdmFsdWVzID0gdmVjNChcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCksXG4gICAgICAgICAgICBpbml0aWFsaXphdGlvblZhbHVlLFxuICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZSxcbiAgICAgICAgICAgIGluaXRpYWxpemF0aW9uVmFsdWVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaW50IGluSWR4U2VnID0gaW50KGdldFNlZ21lbnRJZEF0SW5kZXgoaW5JZHgpKTtcblxuICAgICAgICAgIHZlYzQgc2VnRmlsdGVyID0gdmVjNChcbiAgICAgICAgICAgIGludChnZXRTZWdtZW50SWRBdEluZGV4KGluSWR4KSkgPT0gY3VycmVudFNlZyA/IDEgOiAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcblxuICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgfSBlbHNlIGlmICgke3dpbmRvd1NpemVWZWM0UmVtYWluZGVyID09PSAyfSkge1xuICAgICAgICAgIHZlYzQgdmFsdWVzID0gdmVjNChcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCksXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHggKyAxKSxcbiAgICAgICAgICAgIGluaXRpYWxpemF0aW9uVmFsdWUsXG4gICAgICAgICAgICBpbml0aWFsaXphdGlvblZhbHVlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHZlYzQgc2VnRmlsdGVyID0gdmVjNChcbiAgICAgICAgICAgIGludChnZXRTZWdtZW50SWRBdEluZGV4KGluSWR4KSkgPT0gY3VycmVudFNlZyA/IDEgOiAwLFxuICAgICAgICAgICAgaW50KGdldFNlZ21lbnRJZEF0SW5kZXgoaW5JZHggKyAxKSkgPT0gY3VycmVudFNlZyA/IDEgOiAwLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgKTtcblxuICAgICAgICAgICR7dXBkYXRlU25pcHBldH1cbiAgICAgICAgfSBlbHNlIGlmICgke3dpbmRvd1NpemVWZWM0UmVtYWluZGVyID09PSAzfSkge1xuICAgICAgICAgIHZlYzQgdmFsdWVzID0gdmVjNChcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCksXG4gICAgICAgICAgICBnZXRWYWx1ZShiYXRjaCwgaW5JZHggKyAxKSxcbiAgICAgICAgICAgIGdldFZhbHVlKGJhdGNoLCBpbklkeCArIDIpLFxuICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25WYWx1ZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB2ZWM0IHNlZ0ZpbHRlciA9IHZlYzQoXG4gICAgICAgICAgICBpbnQoZ2V0U2VnbWVudElkQXRJbmRleChpbklkeCkpID09IGN1cnJlbnRTZWcgPyAxIDogMCxcbiAgICAgICAgICAgIGludChnZXRTZWdtZW50SWRBdEluZGV4KGluSWR4ICsgMSkpID09IGN1cnJlbnRTZWcgPyAxIDogMCxcbiAgICAgICAgICAgIGludChnZXRTZWdtZW50SWRBdEluZGV4KGluSWR4ICsgMikpID09IGN1cnJlbnRTZWcgPyAxIDogMCxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgJHt1cGRhdGVTbmlwcGV0fVxuICAgICAgICB9XG4gICAgICAgIHNldE91dHB1dCgke3JldHVyblZhbHVlfSk7XG4gICAgICB9XG4gICAgYDtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, sumOutType, UnsortedSegmentSum, util } from '@tensorflow/tfjs-core';\nimport { SegmentOpProgram } from '../segment_gpu';\nimport { range } from './Range';\nimport { reshape } from './Reshape';\nimport { tile } from './Tile';\nimport { transpose } from './Transpose';\nexport function unsortedSegmentSum(args) {\n const { inputs, backend, attrs } = args;\n const { x, segmentIds } = inputs;\n const { numSegments } = attrs;\n const xRank = x.shape.length;\n const toDispose = [];\n let axis = 0;\n const permutation = backend_util.getAxesPermutation([axis], xRank);\n let permutedX = x;\n if (permutation != null) {\n permutedX = transpose({ inputs: { x }, backend, attrs: { perm: permutation } });\n toDispose.push(permutedX);\n axis = backend_util.getInnerMostAxes(1, xRank)[0];\n }\n const outShape = backend_util.segment_util.computeOutShape(permutedX.shape, axis, numSegments);\n const inSize = util.sizeFromShape([permutedX.shape[axis]]);\n const a2D = reshape({ inputs: { x: permutedX }, backend, attrs: { shape: [-1, inSize] } });\n toDispose.push(a2D);\n const outputDType = sumOutType(x.dtype);\n const segOpCompute = (x, segOpType, segmentIds, dtype, numSegments) => {\n const batchSize = x.shape[0];\n const inSize = x.shape[1];\n const windowSize = backend_util.segment_util.segOpComputeOptimalWindowSize(inSize, numSegments);\n const segOpInfo = { windowSize, inSize, batchSize, numSegments };\n const program = new SegmentOpProgram(segOpInfo, segOpType);\n const output = backend.compileAndRun(program, [x, segmentIds], dtype);\n toDispose.push(output);\n // No need to run another GPGPU program.\n if (output.shape[1] === numSegments) {\n return output;\n }\n const rangeInfo = range({\n backend,\n attrs: { start: 0, stop: numSegments, step: 1, dtype: 'float32' }\n });\n const tileInfo = tile({\n inputs: { x: rangeInfo },\n backend,\n attrs: { reps: [inSize / windowSize] }\n });\n toDispose.push(rangeInfo);\n toDispose.push(tileInfo);\n const result = segOpCompute(output, segOpType, tileInfo, dtype, numSegments);\n return result;\n };\n const segOpResult = segOpCompute(a2D, 'unsortedSegmentSum', segmentIds, outputDType, numSegments);\n const reshaped = reshape({ inputs: { x: segOpResult }, backend, attrs: { shape: outShape } });\n let result = reshaped;\n if (permutation != null) {\n toDispose.push(reshaped);\n const perm = backend_util.getUndoAxesPermutation(permutation);\n result = transpose({ inputs: { x: result }, backend, attrs: { perm } });\n }\n toDispose.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return result;\n}\nexport const unsortedSegmentSumConfig = {\n kernelName: UnsortedSegmentSum,\n backendName: 'webgl',\n kernelFunc: unsortedSegmentSum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zb3J0ZWRTZWdtZW50U3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdlYmdsL3NyYy9rZXJuZWxzL1Vuc29ydGVkU2VnbWVudFN1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFzQyxVQUFVLEVBQWMsa0JBQWtCLEVBQXFELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzVMLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBSWxDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsVUFBVSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFNUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFN0IsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRXJCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLFdBQVcs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RUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBRU4sTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUM1QixHQUFHLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVyRSxNQUFNLFFBQVEsR0FDVixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsV0FBVyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFFM0UsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ3RCLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtRQUN2QixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUMsRUFBQyxDQUFDLENBQUM7S0FDbkU7SUFFRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFpQjtJQUNwRCxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFVBQVUsRUFBRSxrQkFBMkM7Q0FDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERhdGFUeXBlLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIHN1bU91dFR5cGUsIFRlbnNvckluZm8sIFVuc29ydGVkU2VnbWVudFN1bSwgVW5zb3J0ZWRTZWdtZW50U3VtQXR0cnMsIFVuc29ydGVkU2VnbWVudFN1bUlucHV0cywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZFdlYkdMfSBmcm9tICcuLi9iYWNrZW5kX3dlYmdsJztcbmltcG9ydCB7U2VnbWVudE9wUHJvZ3JhbX0gZnJvbSAnLi4vc2VnbWVudF9ncHUnO1xuXG5pbXBvcnQge3JhbmdlfSBmcm9tICcuL1JhbmdlJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7dGlsZX0gZnJvbSAnLi9UaWxlJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNvcnRlZFNlZ21lbnRTdW0oYXJnczoge1xuICBpbnB1dHM6IFVuc29ydGVkU2VnbWVudFN1bUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRXZWJHTCxcbiAgYXR0cnM6IFVuc29ydGVkU2VnbWVudFN1bUF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBzZWdtZW50SWRzfSA9IGlucHV0cztcbiAgY29uc3Qge251bVNlZ21lbnRzfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG5cbiAgY29uc3QgdG9EaXNwb3NlID0gW107XG5cbiAgbGV0IGF4aXMgPSAwO1xuICBjb25zdCBwZXJtdXRhdGlvbiA9IGJhY2tlbmRfdXRpbC5nZXRBeGVzUGVybXV0YXRpb24oW2F4aXNdLCB4UmFuayk7XG4gIGxldCBwZXJtdXRlZFggPSB4O1xuICBpZiAocGVybXV0YXRpb24gIT0gbnVsbCkge1xuICAgIHBlcm11dGVkWCA9IHRyYW5zcG9zZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogcGVybXV0YXRpb259fSk7XG4gICAgdG9EaXNwb3NlLnB1c2gocGVybXV0ZWRYKTtcbiAgICBheGlzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoMSwgeFJhbmspWzBdO1xuICB9XG5cbiAgY29uc3Qgb3V0U2hhcGUgPSBiYWNrZW5kX3V0aWwuc2VnbWVudF91dGlsLmNvbXB1dGVPdXRTaGFwZShcbiAgICAgIHBlcm11dGVkWC5zaGFwZSwgYXhpcywgbnVtU2VnbWVudHMpO1xuICBjb25zdCBpblNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoW3Blcm11dGVkWC5zaGFwZVtheGlzXV0pO1xuICBjb25zdCBhMkQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogcGVybXV0ZWRYfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogWy0xLCBpblNpemVdfX0pO1xuICB0b0Rpc3Bvc2UucHVzaChhMkQpO1xuXG4gIGNvbnN0IG91dHB1dERUeXBlID0gc3VtT3V0VHlwZSh4LmR0eXBlKTtcblxuICBjb25zdCBzZWdPcENvbXB1dGUgPVxuICAgICAgKHg6IFRlbnNvckluZm8sIHNlZ09wVHlwZTogJ3Vuc29ydGVkU2VnbWVudFN1bScsIHNlZ21lbnRJZHM6IFRlbnNvckluZm8sXG4gICAgICAgZHR5cGU6IERhdGFUeXBlLCBudW1TZWdtZW50czogbnVtYmVyKTogVGVuc29ySW5mbyA9PiB7XG4gICAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IHguc2hhcGVbMF07XG4gICAgICAgIGNvbnN0IGluU2l6ZSA9IHguc2hhcGVbMV07XG4gICAgICAgIGNvbnN0IHdpbmRvd1NpemUgPVxuICAgICAgICAgICAgYmFja2VuZF91dGlsLnNlZ21lbnRfdXRpbC5zZWdPcENvbXB1dGVPcHRpbWFsV2luZG93U2l6ZShcbiAgICAgICAgICAgICAgICBpblNpemUsIG51bVNlZ21lbnRzKTtcbiAgICAgICAgY29uc3Qgc2VnT3BJbmZvID0ge3dpbmRvd1NpemUsIGluU2l6ZSwgYmF0Y2hTaXplLCBudW1TZWdtZW50c307XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBuZXcgU2VnbWVudE9wUHJvZ3JhbShzZWdPcEluZm8sIHNlZ09wVHlwZSk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGJhY2tlbmQuY29tcGlsZUFuZFJ1bihwcm9ncmFtLCBbeCwgc2VnbWVudElkc10sIGR0eXBlKTtcbiAgICAgICAgdG9EaXNwb3NlLnB1c2gob3V0cHV0KTtcbiAgICAgICAgLy8gTm8gbmVlZCB0byBydW4gYW5vdGhlciBHUEdQVSBwcm9ncmFtLlxuICAgICAgICBpZiAob3V0cHV0LnNoYXBlWzFdID09PSBudW1TZWdtZW50cykge1xuICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2VJbmZvID0gcmFuZ2Uoe1xuICAgICAgICAgIGJhY2tlbmQsXG4gICAgICAgICAgYXR0cnM6IHtzdGFydDogMCwgc3RvcDogbnVtU2VnbWVudHMsIHN0ZXA6IDEsIGR0eXBlOiAnZmxvYXQzMid9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0aWxlSW5mbyA9IHRpbGUoe1xuICAgICAgICAgIGlucHV0czoge3g6IHJhbmdlSW5mb30sXG4gICAgICAgICAgYmFja2VuZCxcbiAgICAgICAgICBhdHRyczoge3JlcHM6IFtpblNpemUgLyB3aW5kb3dTaXplXX1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdG9EaXNwb3NlLnB1c2gocmFuZ2VJbmZvKTtcbiAgICAgICAgdG9EaXNwb3NlLnB1c2godGlsZUluZm8pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICAgICBzZWdPcENvbXB1dGUob3V0cHV0LCBzZWdPcFR5cGUsIHRpbGVJbmZvLCBkdHlwZSwgbnVtU2VnbWVudHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICBjb25zdCBzZWdPcFJlc3VsdCA9IHNlZ09wQ29tcHV0ZShcbiAgICAgIGEyRCwgJ3Vuc29ydGVkU2VnbWVudFN1bScsIHNlZ21lbnRJZHMsIG91dHB1dERUeXBlLCBudW1TZWdtZW50cyk7XG5cbiAgY29uc3QgcmVzaGFwZWQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogc2VnT3BSZXN1bHR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBvdXRTaGFwZX19KTtcblxuICBsZXQgcmVzdWx0ID0gcmVzaGFwZWQ7XG4gIGlmIChwZXJtdXRhdGlvbiAhPSBudWxsKSB7XG4gICAgdG9EaXNwb3NlLnB1c2gocmVzaGFwZWQpO1xuICAgIGNvbnN0IHBlcm0gPSBiYWNrZW5kX3V0aWwuZ2V0VW5kb0F4ZXNQZXJtdXRhdGlvbihwZXJtdXRhdGlvbik7XG4gICAgcmVzdWx0ID0gdHJhbnNwb3NlKHtpbnB1dHM6IHt4OiByZXN1bHR9LCBiYWNrZW5kLCBhdHRyczoge3Blcm19fSk7XG4gIH1cblxuICB0b0Rpc3Bvc2UuZm9yRWFjaCh0ID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odCkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgdW5zb3J0ZWRTZWdtZW50U3VtQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFVuc29ydGVkU2VnbWVudFN1bSxcbiAgYmFja2VuZE5hbWU6ICd3ZWJnbCcsXG4gIGtlcm5lbEZ1bmM6IHVuc29ydGVkU2VnbWVudFN1bSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { registerKernel } from '@tensorflow/tfjs-core';\nimport { _fusedMatMulConfig } from './kernels/_FusedMatMul';\nimport { absConfig } from './kernels/Abs';\nimport { acosConfig } from './kernels/Acos';\nimport { acoshConfig } from './kernels/Acosh';\nimport { addConfig } from './kernels/Add';\nimport { addNConfig } from './kernels/AddN';\nimport { allConfig } from './kernels/All';\nimport { anyConfig } from './kernels/Any';\nimport { argMaxConfig } from './kernels/ArgMax';\nimport { argMinConfig } from './kernels/ArgMin';\nimport { asinConfig } from './kernels/Asin';\nimport { asinhConfig } from './kernels/Asinh';\nimport { atanConfig } from './kernels/Atan';\nimport { atan2Config } from './kernels/Atan2';\nimport { atanhConfig } from './kernels/Atanh';\nimport { avgPoolConfig } from './kernels/AvgPool';\nimport { avgPool3DConfig } from './kernels/AvgPool3D';\nimport { avgPool3DGradConfig } from './kernels/AvgPool3DGrad';\nimport { avgPoolGradConfig } from './kernels/AvgPoolGrad';\nimport { batchMatMulConfig } from './kernels/BatchMatMul';\nimport { batchNormConfig } from './kernels/BatchNorm';\nimport { batchToSpaceNDConfig } from './kernels/BatchToSpaceND';\nimport { bincountConfig } from './kernels/Bincount';\nimport { bitwiseAndConfig } from './kernels/BitwiseAnd';\nimport { broadcastArgsConfig } from './kernels/BroadcastArgs';\nimport { castConfig } from './kernels/Cast';\nimport { ceilConfig } from './kernels/Ceil';\nimport { clipByValueConfig } from './kernels/ClipByValue';\nimport { complexConfig } from './kernels/Complex';\nimport { complexAbsConfig } from './kernels/ComplexAbs';\nimport { concatConfig } from './kernels/Concat';\nimport { conv2DConfig } from './kernels/Conv2D';\nimport { conv2DBackpropFilterConfig } from './kernels/Conv2DBackpropFilter';\nimport { conv2DBackpropInputConfig } from './kernels/Conv2DBackpropInput';\nimport { conv3DConfig } from './kernels/Conv3D';\nimport { conv3DBackpropFilterV2Config } from './kernels/Conv3DBackpropFilterV2';\nimport { conv3DBackpropInputConfig } from './kernels/Conv3DBackpropInputV2';\nimport { cosConfig } from './kernels/Cos';\nimport { coshConfig } from './kernels/Cosh';\nimport { cropAndResizeConfig } from './kernels/CropAndResize';\nimport { cumprodConfig } from './kernels/Cumprod';\nimport { cumsumConfig } from './kernels/Cumsum';\nimport { denseBincountConfig } from './kernels/DenseBincount';\nimport { depthToSpaceConfig } from './kernels/DepthToSpace';\nimport { depthwiseConv2dNativeConfig } from './kernels/DepthwiseConv2dNative';\nimport { depthwiseConv2dNativeBackpropFilterConfig } from './kernels/DepthwiseConv2dNativeBackpropFilter';\nimport { depthwiseConv2dNativeBackpropInputConfig } from './kernels/DepthwiseConv2dNativeBackpropInput';\nimport { diagConfig } from './kernels/Diag';\nimport { dilation2DConfig } from './kernels/Dilation2D';\nimport { einsumConfig } from './kernels/Einsum';\nimport { eluConfig } from './kernels/Elu';\nimport { eluGradConfig } from './kernels/EluGrad';\nimport { equalConfig } from './kernels/Equal';\nimport { erfConfig } from './kernels/Erf';\nimport { expConfig } from './kernels/Exp';\nimport { expandDimsConfig } from './kernels/ExpandDims';\nimport { expm1Config } from './kernels/Expm1';\nimport { fftConfig } from './kernels/FFT';\nimport { fillConfig } from './kernels/Fill';\nimport { flipLeftRightConfig } from './kernels/FlipLeftRight';\nimport { floorConfig } from './kernels/Floor';\nimport { floorDivConfig } from './kernels/FloorDiv';\nimport { fromPixelsConfig } from './kernels/FromPixels';\nimport { fusedConv2DConfig } from './kernels/FusedConv2D';\nimport { fusedDepthwiseConv2DConfig } from './kernels/FusedDepthwiseConv2D';\nimport { gatherNdConfig } from './kernels/GatherNd';\nimport { gatherV2Config } from './kernels/GatherV2';\nimport { greaterConfig } from './kernels/Greater';\nimport { greaterEqualConfig } from './kernels/GreaterEqual';\nimport { identityConfig } from './kernels/Identity';\nimport { ifftConfig } from './kernels/IFFT';\nimport { imagConfig } from './kernels/Imag';\nimport { isFiniteConfig } from './kernels/IsFinite';\nimport { isInfConfig } from './kernels/IsInf';\nimport { isNaNConfig } from './kernels/IsNaN';\nimport { leakyReluConfig } from './kernels/LeakyRelu';\nimport { lessConfig } from './kernels/Less';\nimport { lessEqualConfig } from './kernels/LessEqual';\nimport { linSpaceConfig } from './kernels/LinSpace';\nimport { logConfig } from './kernels/Log';\nimport { log1pConfig } from './kernels/Log1p';\nimport { logicalAndConfig } from './kernels/LogicalAnd';\nimport { logicalNotConfig } from './kernels/LogicalNot';\nimport { logicalOrConfig } from './kernels/LogicalOr';\nimport { LRNConfig } from './kernels/LRN';\nimport { LRNGradConfig } from './kernels/LRNGrad';\nimport { maxConfig } from './kernels/Max';\nimport { maximumConfig } from './kernels/Maximum';\nimport { maxPoolConfig } from './kernels/MaxPool';\nimport { maxPool3DConfig } from './kernels/MaxPool3D';\nimport { maxPool3DGradConfig } from './kernels/MaxPool3DGrad';\nimport { maxPoolGradConfig } from './kernels/MaxPoolGrad';\nimport { maxPoolWithArgmaxConfig } from './kernels/MaxPoolWithArgmax';\nimport { meanConfig } from './kernels/Mean';\nimport { minConfig } from './kernels/Min';\nimport { minimumConfig } from './kernels/Minimum';\nimport { mirrorPadConfig } from './kernels/MirrorPad';\nimport { modConfig } from './kernels/Mod';\nimport { multinomialConfig } from './kernels/Multinomial';\nimport { multiplyConfig } from './kernels/Multiply';\nimport { negConfig } from './kernels/Neg';\nimport { nonMaxSuppressionV3Config } from './kernels/NonMaxSuppressionV3';\nimport { nonMaxSuppressionV4Config } from './kernels/NonMaxSuppressionV4';\nimport { nonMaxSuppressionV5Config } from './kernels/NonMaxSuppressionV5';\nimport { notEqualConfig } from './kernels/NotEqual';\nimport { oneHotConfig } from './kernels/OneHot';\nimport { onesLikeConfig } from './kernels/OnesLike';\nimport { packConfig } from './kernels/Pack';\nimport { padV2Config } from './kernels/PadV2';\nimport { powConfig } from './kernels/Pow';\nimport { preluConfig } from './kernels/Prelu';\nimport { prodConfig } from './kernels/Prod';\nimport { raggedGatherConfig } from './kernels/RaggedGather';\nimport { raggedRangeConfig } from './kernels/RaggedRange';\nimport { raggedTensorToTensorConfig } from './kernels/RaggedTensorToTensor';\nimport { rangeConfig } from './kernels/Range';\nimport { realConfig } from './kernels/Real';\nimport { realDivConfig } from './kernels/RealDiv';\nimport { reciprocalConfig } from './kernels/Reciprocal';\nimport { reluConfig } from './kernels/Relu';\nimport { relu6Config } from './kernels/Relu6';\nimport { reshapeConfig } from './kernels/Reshape';\nimport { resizeBilinearConfig } from './kernels/ResizeBilinear';\nimport { resizeBilinearGradConfig } from './kernels/ResizeBilinearGrad';\nimport { resizeNearestNeighborConfig } from './kernels/ResizeNearestNeighbor';\nimport { resizeNearestNeighborGradConfig } from './kernels/ResizeNearestNeighborGrad';\nimport { reverseConfig } from './kernels/Reverse';\nimport { rotateWithOffsetConfig } from './kernels/RotateWithOffset';\nimport { roundConfig } from './kernels/Round';\nimport { rsqrtConfig } from './kernels/Rsqrt';\nimport { scatterNdConfig } from './kernels/ScatterNd';\nimport { searchSortedConfig } from './kernels/SearchSorted';\nimport { selectConfig } from './kernels/Select';\nimport { seluConfig } from './kernels/Selu';\nimport { sigmoidConfig } from './kernels/Sigmoid';\nimport { signConfig } from './kernels/Sign';\nimport { sinConfig } from './kernels/Sin';\nimport { sinhConfig } from './kernels/Sinh';\nimport { sliceConfig } from './kernels/Slice';\nimport { softmaxConfig } from './kernels/Softmax';\nimport { softplusConfig } from './kernels/Softplus';\nimport { spaceToBatchNDConfig } from './kernels/SpaceToBatchND';\nimport { sparseFillEmptyRowsConfig } from './kernels/SparseFillEmptyRows';\nimport { sparseReshapeConfig } from './kernels/SparseReshape';\nimport { sparseSegmentMeanConfig } from './kernels/SparseSegmentMean';\nimport { sparseSegmentSumConfig } from './kernels/SparseSegmentSum';\nimport { sparseToDenseConfig } from './kernels/SparseToDense';\nimport { splitVConfig } from './kernels/SplitV';\nimport { sqrtConfig } from './kernels/Sqrt';\nimport { squareConfig } from './kernels/Square';\nimport { squaredDifferenceConfig } from './kernels/SquaredDifference';\nimport { staticRegexReplaceConfig } from './kernels/StaticRegexReplace';\nimport { stepConfig } from './kernels/Step';\nimport { stridedSliceConfig } from './kernels/StridedSlice';\nimport { stringNGramsConfig } from './kernels/StringNGrams';\nimport { stringSplitConfig } from './kernels/StringSplit';\nimport { stringToHashBucketFastConfig } from './kernels/StringToHashBucketFast';\nimport { subConfig } from './kernels/Sub';\nimport { sumConfig } from './kernels/Sum';\nimport { tanConfig } from './kernels/Tan';\nimport { tanhConfig } from './kernels/Tanh';\nimport { tensorScatterUpdateConfig } from './kernels/TensorScatterUpdate';\nimport { tileConfig } from './kernels/Tile';\nimport { topKConfig } from './kernels/TopK';\nimport { transformConfig } from './kernels/Transform';\nimport { transposeConfig } from './kernels/Transpose';\nimport { uniqueConfig } from './kernels/Unique';\nimport { unpackConfig } from './kernels/Unpack';\nimport { unsortedSegmentSumConfig } from './kernels/UnsortedSegmentSum';\nimport { zerosLikeConfig } from './kernels/ZerosLike';\n// List all kernel configs here\nconst kernelConfigs = [\n _fusedMatMulConfig,\n absConfig,\n acosConfig,\n acoshConfig,\n addConfig,\n addNConfig,\n allConfig,\n anyConfig,\n argMaxConfig,\n argMinConfig,\n asinConfig,\n asinhConfig,\n atanConfig,\n atan2Config,\n atanhConfig,\n avgPoolConfig,\n avgPool3DConfig,\n avgPool3DGradConfig,\n avgPoolGradConfig,\n batchMatMulConfig,\n batchNormConfig,\n batchToSpaceNDConfig,\n bincountConfig,\n bitwiseAndConfig,\n broadcastArgsConfig,\n castConfig,\n ceilConfig,\n clipByValueConfig,\n complexConfig,\n complexAbsConfig,\n concatConfig,\n conv2DConfig,\n conv2DBackpropFilterConfig,\n conv2DBackpropInputConfig,\n conv3DConfig,\n conv3DBackpropFilterV2Config,\n conv3DBackpropInputConfig,\n cosConfig,\n coshConfig,\n cropAndResizeConfig,\n cumprodConfig,\n cumsumConfig,\n denseBincountConfig,\n depthToSpaceConfig,\n depthwiseConv2dNativeConfig,\n depthwiseConv2dNativeBackpropFilterConfig,\n depthwiseConv2dNativeBackpropInputConfig,\n diagConfig,\n dilation2DConfig,\n einsumConfig,\n eluConfig,\n eluGradConfig,\n equalConfig,\n erfConfig,\n expConfig,\n expandDimsConfig,\n expm1Config,\n fftConfig,\n fillConfig,\n flipLeftRightConfig,\n floorConfig,\n floorDivConfig,\n fromPixelsConfig,\n fusedConv2DConfig,\n fusedDepthwiseConv2DConfig,\n gatherNdConfig,\n gatherV2Config,\n greaterConfig,\n greaterEqualConfig,\n identityConfig,\n ifftConfig,\n imagConfig,\n isFiniteConfig,\n isInfConfig,\n isNaNConfig,\n leakyReluConfig,\n lessConfig,\n lessEqualConfig,\n linSpaceConfig,\n logConfig,\n log1pConfig,\n logicalAndConfig,\n logicalNotConfig,\n logicalOrConfig,\n LRNConfig,\n LRNGradConfig,\n maxConfig,\n maximumConfig,\n maxPoolConfig,\n maxPool3DConfig,\n maxPool3DGradConfig,\n maxPoolGradConfig,\n maxPoolWithArgmaxConfig,\n meanConfig,\n minConfig,\n minimumConfig,\n mirrorPadConfig,\n modConfig,\n multinomialConfig,\n multiplyConfig,\n negConfig,\n nonMaxSuppressionV3Config,\n nonMaxSuppressionV4Config,\n nonMaxSuppressionV5Config,\n notEqualConfig,\n oneHotConfig,\n onesLikeConfig,\n packConfig,\n padV2Config,\n powConfig,\n preluConfig,\n prodConfig,\n raggedGatherConfig,\n raggedRangeConfig,\n raggedTensorToTensorConfig,\n rangeConfig,\n realConfig,\n realDivConfig,\n reciprocalConfig,\n reluConfig,\n relu6Config,\n reshapeConfig,\n resizeBilinearConfig,\n resizeBilinearGradConfig,\n resizeNearestNeighborConfig,\n resizeNearestNeighborGradConfig,\n reverseConfig,\n rotateWithOffsetConfig,\n roundConfig,\n rsqrtConfig,\n scatterNdConfig,\n searchSortedConfig,\n selectConfig,\n seluConfig,\n sigmoidConfig,\n signConfig,\n sinConfig,\n sinhConfig,\n sliceConfig,\n softmaxConfig,\n softplusConfig,\n spaceToBatchNDConfig,\n sparseFillEmptyRowsConfig,\n sparseReshapeConfig,\n sparseSegmentMeanConfig,\n sparseSegmentSumConfig,\n sparseToDenseConfig,\n splitVConfig,\n sqrtConfig,\n squareConfig,\n squaredDifferenceConfig,\n staticRegexReplaceConfig,\n stepConfig,\n stridedSliceConfig,\n stringNGramsConfig,\n stringSplitConfig,\n stringToHashBucketFastConfig,\n subConfig,\n sumConfig,\n tanConfig,\n tanhConfig,\n tensorScatterUpdateConfig,\n tileConfig,\n topKConfig,\n transformConfig,\n transposeConfig,\n uniqueConfig,\n unpackConfig,\n unsortedSegmentSumConfig,\n zerosLikeConfig\n];\nfor (const kernelConfig of kernelConfigs) {\n registerKernel(kernelConfig);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfYWxsX2tlcm5lbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2ViZ2wvc3JjL3JlZ2lzdGVyX2FsbF9rZXJuZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJB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SUFDcEIsd0JBQXdCO0lBQ3hCLDJCQUEyQjtJQUMzQiwrQkFBK0I7SUFDL0IsYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixXQUFXO0lBQ1gsV0FBVztJQUNYLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLFVBQVU7SUFDVixhQUFhO0lBQ2IsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0lBQ1YsV0FBVztJQUNYLGFBQWE7SUFDYixjQUFjO0lBQ2Qsb0JBQW9CO0lBQ3BCLHlCQUF5QjtJQUN6QixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLFVBQVU7SUFDVixZQUFZO0lBQ1osdUJBQXVCO0lBQ3ZCLHdCQUF3QjtJQUN4QixVQUFVO0lBQ1Ysa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsNEJBQTRCO0lBQzVCLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFVBQVU7SUFDVix5QkFBeUI7SUFDekIsVUFBVTtJQUNWLFVBQVU7SUFDVixlQUFlO0lBQ2YsZUFBZTtJQUNmLFlBQVk7SUFDWixZQUFZO0lBQ1osd0JBQXdCO0lBQ3hCLGVBQWU7Q0FDaEIsQ0FBQztBQUVGLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO0lBQ3hDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztDQUM5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7S2VybmVsQ29uZmlnLCByZWdpc3Rlcktlcm5lbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtfZnVzZWRNYXRNdWxDb25maWd9IGZyb20gJy4va2VybmVscy9fRnVzZWRNYXRNdWwnO1xuaW1wb3J0IHthYnNDb25maWd9IGZyb20gJy4va2VybmVscy9BYnMnO1xuaW1wb3J0IHthY29zQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQWNvcyc7XG5pbXBvcnQge2Fjb3NoQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQWNvc2gnO1xuaW1wb3J0IHthZGRDb25maWd9IGZyb20gJy4va2VybmVscy9BZGQnO1xuaW1wb3J0IHthZGROQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQWRkTic7XG5pbXBvcnQge2FsbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FsbCc7XG5pbXBvcnQge2FueUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FueSc7XG5pbXBvcnQge2FyZ01heENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FyZ01heCc7XG5pbXBvcnQge2FyZ01pbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FyZ01pbic7XG5pbXBvcnQge2FzaW5Db25maWd9IGZyb20gJy4va2VybmVscy9Bc2luJztcbmltcG9ydCB7YXNpbmhDb25maWd9IGZyb20gJy4va2VybmVscy9Bc2luaCc7XG5pbXBvcnQge2F0YW5Db25maWd9IGZyb20gJy4va2VybmVscy9BdGFuJztcbmltcG9ydCB7YXRhbjJDb25maWd9IGZyb20gJy4va2VybmVscy9BdGFuMic7XG5pbXBvcnQge2F0YW5oQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQXRhbmgnO1xuaW1wb3J0IHthdmdQb29sQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQXZnUG9vbCc7XG5pbXBvcnQge2F2Z1Bvb2wzRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0F2Z1Bvb2wzRCc7XG5pbXBvcnQge2F2Z1Bvb2wzREdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9BdmdQb29sM0RHcmFkJztcbmltcG9ydCB7YXZnUG9vbEdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9BdmdQb29sR3JhZCc7XG5pbXBvcnQge2JhdGNoTWF0TXVsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQmF0Y2hNYXRNdWwnO1xuaW1wb3J0IHtiYXRjaE5vcm1Db25maWd9IGZyb20gJy4va2VybmVscy9CYXRjaE5vcm0nO1xuaW1wb3J0IHtiYXRjaFRvU3BhY2VORENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0JhdGNoVG9TcGFjZU5EJztcbmltcG9ydCB7YmluY291bnRDb25maWd9IGZyb20gJy4va2VybmVscy9CaW5jb3VudCc7XG5pbXBvcnQge2JpdHdpc2VBbmRDb25maWd9IGZyb20gJy4va2VybmVscy9CaXR3aXNlQW5kJztcbmltcG9ydCB7YnJvYWRjYXN0QXJnc0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0Jyb2FkY2FzdEFyZ3MnO1xuaW1wb3J0IHtjYXN0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ2FzdCc7XG5pbXBvcnQge2NlaWxDb25maWd9IGZyb20gJy4va2VybmVscy9DZWlsJztcbmltcG9ydCB7Y2xpcEJ5VmFsdWVDb25maWd9IGZyb20gJy4va2VybmVscy9DbGlwQnlWYWx1ZSc7XG5pbXBvcnQge2NvbXBsZXhDb25maWd9IGZyb20gJy4va2VybmVscy9Db21wbGV4JztcbmltcG9ydCB7Y29tcGxleEFic0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbXBsZXhBYnMnO1xuaW1wb3J0IHtjb25jYXRDb25maWd9IGZyb20gJy4va2VybmVscy9Db25jYXQnO1xuaW1wb3J0IHtjb252MkRDb25maWd9IGZyb20gJy4va2VybmVscy9Db252MkQnO1xuaW1wb3J0IHtjb252MkRCYWNrcHJvcEZpbHRlckNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbnYyREJhY2twcm9wRmlsdGVyJztcbmltcG9ydCB7Y29udjJEQmFja3Byb3BJbnB1dENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbnYyREJhY2twcm9wSW5wdXQnO1xuaW1wb3J0IHtjb252M0RDb25maWd9IGZyb20gJy4va2VybmVscy9Db252M0QnO1xuaW1wb3J0IHtjb252M0RCYWNrcHJvcEZpbHRlclYyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29udjNEQmFja3Byb3BGaWx0ZXJWMic7XG5pbXBvcnQge2NvbnYzREJhY2twcm9wSW5wdXRDb25maWd9IGZyb20gJy4va2VybmVscy9Db252M0RCYWNrcHJvcElucHV0VjInO1xuaW1wb3J0IHtjb3NDb25maWd9IGZyb20gJy4va2VybmVscy9Db3MnO1xuaW1wb3J0IHtjb3NoQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29zaCc7XG5pbXBvcnQge2Nyb3BBbmRSZXNpemVDb25maWd9IGZyb20gJy4va2VybmVscy9Dcm9wQW5kUmVzaXplJztcbmltcG9ydCB7Y3VtcHJvZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0N1bXByb2QnO1xuaW1wb3J0IHtjdW1zdW1Db25maWd9IGZyb20gJy4va2VybmVscy9DdW1zdW0nO1xuaW1wb3J0IHtkZW5zZUJpbmNvdW50Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRGVuc2VCaW5jb3VudCc7XG5pbXBvcnQge2RlcHRoVG9TcGFjZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RlcHRoVG9TcGFjZSc7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZE5hdGl2ZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RlcHRod2lzZUNvbnYyZE5hdGl2ZSc7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXInO1xuaW1wb3J0IHtkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dCc7XG5pbXBvcnQge2RpYWdDb25maWd9IGZyb20gJy4va2VybmVscy9EaWFnJztcbmltcG9ydCB7ZGlsYXRpb24yRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RpbGF0aW9uMkQnO1xuaW1wb3J0IHtlaW5zdW1Db25maWd9IGZyb20gJy4va2VybmVscy9FaW5zdW0nO1xuaW1wb3J0IHtlbHVDb25maWd9IGZyb20gJy4va2VybmVscy9FbHUnO1xuaW1wb3J0IHtlbHVHcmFkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRWx1R3JhZCc7XG5pbXBvcnQge2VxdWFsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRXF1YWwnO1xuaW1wb3J0IHtlcmZDb25maWd9IGZyb20gJy4va2VybmVscy9FcmYnO1xuaW1wb3J0IHtleHBDb25maWd9IGZyb20gJy4va2VybmVscy9FeHAnO1xuaW1wb3J0IHtleHBhbmREaW1zQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRXhwYW5kRGltcyc7XG5pbXBvcnQge2V4cG0xQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRXhwbTEnO1xuaW1wb3J0IHtmZnRDb25maWd9IGZyb20gJy4va2VybmVscy9GRlQnO1xuaW1wb3J0IHtmaWxsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRmlsbCc7XG5pbXBvcnQge2ZsaXBMZWZ0UmlnaHRDb25maWd9IGZyb20gJy4va2VybmVscy9GbGlwTGVmdFJpZ2h0JztcbmltcG9ydCB7Zmxvb3JDb25maWd9IGZyb20gJy4va2VybmVscy9GbG9vcic7XG5pbXBvcnQge2Zsb29yRGl2Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRmxvb3JEaXYnO1xuaW1wb3J0IHtmcm9tUGl4ZWxzQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRnJvbVBpeGVscyc7XG5pbXBvcnQge2Z1c2VkQ29udjJEQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRnVzZWRDb252MkQnO1xuaW1wb3J0IHtmdXNlZERlcHRod2lzZUNvbnYyRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0Z1c2VkRGVwdGh3aXNlQ29udjJEJztcbmltcG9ydCB7Z2F0aGVyTmRDb25maWd9IGZyb20gJy4va2VybmVscy9HYXRoZXJOZCc7XG5pbXBvcnQge2dhdGhlclYyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvR2F0aGVyVjInO1xuaW1wb3J0IHtncmVhdGVyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvR3JlYXRlcic7XG5pbXBvcnQge2dyZWF0ZXJFcXVhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0dyZWF0ZXJFcXVhbCc7XG5pbXBvcnQge2lkZW50aXR5Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvSWRlbnRpdHknO1xuaW1wb3J0IHtpZmZ0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvSUZGVCc7XG5pbXBvcnQge2ltYWdDb25maWd9IGZyb20gJy4va2VybmVscy9JbWFnJztcbmltcG9ydCB7aXNGaW5pdGVDb25maWd9IGZyb20gJy4va2VybmVscy9Jc0Zpbml0ZSc7XG5pbXBvcnQge2lzSW5mQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvSXNJbmYnO1xuaW1wb3J0IHtpc05hTkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0lzTmFOJztcbmltcG9ydCB7bGVha3lSZWx1Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTGVha3lSZWx1JztcbmltcG9ydCB7bGVzc0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xlc3MnO1xuaW1wb3J0IHtsZXNzRXF1YWxDb25maWd9IGZyb20gJy4va2VybmVscy9MZXNzRXF1YWwnO1xuaW1wb3J0IHtsaW5TcGFjZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xpblNwYWNlJztcbmltcG9ydCB7bG9nQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTG9nJztcbmltcG9ydCB7bG9nMXBDb25maWd9IGZyb20gJy4va2VybmVscy9Mb2cxcCc7XG5pbXBvcnQge2xvZ2ljYWxBbmRDb25maWd9IGZyb20gJy4va2VybmVscy9Mb2dpY2FsQW5kJztcbmltcG9ydCB7bG9naWNhbE5vdENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xvZ2ljYWxOb3QnO1xuaW1wb3J0IHtsb2dpY2FsT3JDb25maWd9IGZyb20gJy4va2VybmVscy9Mb2dpY2FsT3InO1xuaW1wb3J0IHtMUk5Db25maWd9IGZyb20gJy4va2VybmVscy9MUk4nO1xuaW1wb3J0IHtMUk5HcmFkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTFJOR3JhZCc7XG5pbXBvcnQge21heENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01heCc7XG5pbXBvcnQge21heGltdW1Db25maWd9IGZyb20gJy4va2VybmVscy9NYXhpbXVtJztcbmltcG9ydCB7bWF4UG9vbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01heFBvb2wnO1xuaW1wb3J0IHttYXhQb29sM0RDb25maWd9IGZyb20gJy4va2VybmVscy9NYXhQb29sM0QnO1xuaW1wb3J0IHttYXhQb29sM0RHcmFkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWF4UG9vbDNER3JhZCc7XG5pbXBvcnQge21heFBvb2xHcmFkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWF4UG9vbEdyYWQnO1xuaW1wb3J0IHttYXhQb29sV2l0aEFyZ21heENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01heFBvb2xXaXRoQXJnbWF4JztcbmltcG9ydCB7bWVhbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01lYW4nO1xuaW1wb3J0IHttaW5Db25maWd9IGZyb20gJy4va2VybmVscy9NaW4nO1xuaW1wb3J0IHttaW5pbXVtQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWluaW11bSc7XG5pbXBvcnQge21pcnJvclBhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01pcnJvclBhZCc7XG5pbXBvcnQge21vZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01vZCc7XG5pbXBvcnQge211bHRpbm9taWFsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTXVsdGlub21pYWwnO1xuaW1wb3J0IHttdWx0aXBseUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL011bHRpcGx5JztcbmltcG9ydCB7bmVnQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTmVnJztcbmltcG9ydCB7bm9uTWF4U3VwcHJlc3Npb25WM0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL05vbk1heFN1cHByZXNzaW9uVjMnO1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblY0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTm9uTWF4U3VwcHJlc3Npb25WNCc7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uVjVDb25maWd9IGZyb20gJy4va2VybmVscy9Ob25NYXhTdXBwcmVzc2lvblY1JztcbmltcG9ydCB7bm90RXF1YWxDb25maWd9IGZyb20gJy4va2VybmVscy9Ob3RFcXVhbCc7XG5pbXBvcnQge29uZUhvdENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL09uZUhvdCc7XG5pbXBvcnQge29uZXNMaWtlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvT25lc0xpa2UnO1xuaW1wb3J0IHtwYWNrQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUGFjayc7XG5pbXBvcnQge3BhZFYyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUGFkVjInO1xuaW1wb3J0IHtwb3dDb25maWd9IGZyb20gJy4va2VybmVscy9Qb3cnO1xuaW1wb3J0IHtwcmVsdUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1ByZWx1JztcbmltcG9ydCB7cHJvZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1Byb2QnO1xuaW1wb3J0IHtyYWdnZWRHYXRoZXJDb25maWd9IGZyb20gJy4va2VybmVscy9SYWdnZWRHYXRoZXInO1xuaW1wb3J0IHtyYWdnZWRSYW5nZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JhZ2dlZFJhbmdlJztcbmltcG9ydCB7cmFnZ2VkVGVuc29yVG9UZW5zb3JDb25maWd9IGZyb20gJy4va2VybmVscy9SYWdnZWRUZW5zb3JUb1RlbnNvcic7XG5pbXBvcnQge3JhbmdlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmFuZ2UnO1xuaW1wb3J0IHtyZWFsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVhbCc7XG5pbXBvcnQge3JlYWxEaXZDb25maWd9IGZyb20gJy4va2VybmVscy9SZWFsRGl2JztcbmltcG9ydCB7cmVjaXByb2NhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JlY2lwcm9jYWwnO1xuaW1wb3J0IHtyZWx1Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVsdSc7XG5pbXBvcnQge3JlbHU2Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVsdTYnO1xuaW1wb3J0IHtyZXNoYXBlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVzaGFwZSc7XG5pbXBvcnQge3Jlc2l6ZUJpbGluZWFyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVzaXplQmlsaW5lYXInO1xuaW1wb3J0IHtyZXNpemVCaWxpbmVhckdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9SZXNpemVCaWxpbmVhckdyYWQnO1xuaW1wb3J0IHtyZXNpemVOZWFyZXN0TmVpZ2hib3JDb25maWd9IGZyb20gJy4va2VybmVscy9SZXNpemVOZWFyZXN0TmVpZ2hib3InO1xuaW1wb3J0IHtyZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZCc7XG5pbXBvcnQge3JldmVyc2VDb25maWd9IGZyb20gJy4va2VybmVscy9SZXZlcnNlJztcbmltcG9ydCB7cm90YXRlV2l0aE9mZnNldENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JvdGF0ZVdpdGhPZmZzZXQnO1xuaW1wb3J0IHtyb3VuZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JvdW5kJztcbmltcG9ydCB7cnNxcnRDb25maWd9IGZyb20gJy4va2VybmVscy9Sc3FydCc7XG5pbXBvcnQge3NjYXR0ZXJOZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NjYXR0ZXJOZCc7XG5pbXBvcnQge3NlYXJjaFNvcnRlZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NlYXJjaFNvcnRlZCc7XG5pbXBvcnQge3NlbGVjdENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NlbGVjdCc7XG5pbXBvcnQge3NlbHVDb25maWd9IGZyb20gJy4va2VybmVscy9TZWx1JztcbmltcG9ydCB7c2lnbW9pZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NpZ21vaWQnO1xuaW1wb3J0IHtzaWduQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU2lnbic7XG5pbXBvcnQge3NpbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1Npbic7XG5pbXBvcnQge3NpbmhDb25maWd9IGZyb20gJy4va2VybmVscy9TaW5oJztcbmltcG9ydCB7c2xpY2VDb25maWd9IGZyb20gJy4va2VybmVscy9TbGljZSc7XG5pbXBvcnQge3NvZnRtYXhDb25maWd9IGZyb20gJy4va2VybmVscy9Tb2Z0bWF4JztcbmltcG9ydCB7c29mdHBsdXNDb25maWd9IGZyb20gJy4va2VybmVscy9Tb2Z0cGx1cyc7XG5pbXBvcnQge3NwYWNlVG9CYXRjaE5EQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3BhY2VUb0JhdGNoTkQnO1xuaW1wb3J0IHtzcGFyc2VGaWxsRW1wdHlSb3dzQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3BhcnNlRmlsbEVtcHR5Um93cyc7XG5pbXBvcnQge3NwYXJzZVJlc2hhcGVDb25maWd9IGZyb20gJy4va2VybmVscy9TcGFyc2VSZXNoYXBlJztcbmltcG9ydCB7c3BhcnNlU2VnbWVudE1lYW5Db25maWd9IGZyb20gJy4va2VybmVscy9TcGFyc2VTZWdtZW50TWVhbic7XG5pbXBvcnQge3NwYXJzZVNlZ21lbnRTdW1Db25maWd9IGZyb20gJy4va2VybmVscy9TcGFyc2VTZWdtZW50U3VtJztcbmltcG9ydCB7c3BhcnNlVG9EZW5zZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NwYXJzZVRvRGVuc2UnO1xuaW1wb3J0IHtzcGxpdFZDb25maWd9IGZyb20gJy4va2VybmVscy9TcGxpdFYnO1xuaW1wb3J0IHtzcXJ0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3FydCc7XG5pbXBvcnQge3NxdWFyZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NxdWFyZSc7XG5pbXBvcnQge3NxdWFyZWREaWZmZXJlbmNlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3F1YXJlZERpZmZlcmVuY2UnO1xuaW1wb3J0IHtzdGF0aWNSZWdleFJlcGxhY2VDb25maWd9IGZyb20gJy4va2VybmVscy9TdGF0aWNSZWdleFJlcGxhY2UnO1xuaW1wb3J0IHtzdGVwQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3RlcCc7XG5pbXBvcnQge3N0cmlkZWRTbGljZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N0cmlkZWRTbGljZSc7XG5pbXBvcnQge3N0cmluZ05HcmFtc0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N0cmluZ05HcmFtcyc7XG5pbXBvcnQge3N0cmluZ1NwbGl0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3RyaW5nU3BsaXQnO1xuaW1wb3J0IHtzdHJpbmdUb0hhc2hCdWNrZXRGYXN0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3RyaW5nVG9IYXNoQnVja2V0RmFzdCc7XG5pbXBvcnQge3N1YkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N1Yic7XG5pbXBvcnQge3N1bUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N1bSc7XG5pbXBvcnQge3RhbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1Rhbic7XG5pbXBvcnQge3RhbmhDb25maWd9IGZyb20gJy4va2VybmVscy9UYW5oJztcbmltcG9ydCB7dGVuc29yU2NhdHRlclVwZGF0ZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1RlbnNvclNjYXR0ZXJVcGRhdGUnO1xuaW1wb3J0IHt0aWxlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVGlsZSc7XG5pbXBvcnQge3RvcEtDb25maWd9IGZyb20gJy4va2VybmVscy9Ub3BLJztcbmltcG9ydCB7dHJhbnNmb3JtQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVHJhbnNmb3JtJztcbmltcG9ydCB7dHJhbnNwb3NlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVHJhbnNwb3NlJztcbmltcG9ydCB7dW5pcXVlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVW5pcXVlJztcbmltcG9ydCB7dW5wYWNrQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVW5wYWNrJztcbmltcG9ydCB7dW5zb3J0ZWRTZWdtZW50U3VtQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVW5zb3J0ZWRTZWdtZW50U3VtJztcbmltcG9ydCB7emVyb3NMaWtlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvWmVyb3NMaWtlJztcblxuLy8gTGlzdCBhbGwga2VybmVsIGNvbmZpZ3MgaGVyZVxuY29uc3Qga2VybmVsQ29uZmlnczogS2VybmVsQ29uZmlnW10gPSBbXG4gIF9mdXNlZE1hdE11bENvbmZpZyxcbiAgYWJzQ29uZmlnLFxuICBhY29zQ29uZmlnLFxuICBhY29zaENvbmZpZyxcbiAgYWRkQ29uZmlnLFxuICBhZGROQ29uZmlnLFxuICBhbGxDb25maWcsXG4gIGFueUNvbmZpZyxcbiAgYXJnTWF4Q29uZmlnLFxuICBhcmdNaW5Db25maWcsXG4gIGFzaW5Db25maWcsXG4gIGFzaW5oQ29uZmlnLFxuICBhdGFuQ29uZmlnLFxuICBhdGFuMkNvbmZpZyxcbiAgYXRhbmhDb25maWcsXG4gIGF2Z1Bvb2xDb25maWcsXG4gIGF2Z1Bvb2wzRENvbmZpZyxcbiAgYXZnUG9vbDNER3JhZENvbmZpZyxcbiAgYXZnUG9vbEdyYWRDb25maWcsXG4gIGJhdGNoTWF0TXVsQ29uZmlnLFxuICBiYXRjaE5vcm1Db25maWcsXG4gIGJhdGNoVG9TcGFjZU5EQ29uZmlnLFxuICBiaW5jb3VudENvbmZpZyxcbiAgYml0d2lzZUFuZENvbmZpZyxcbiAgYnJvYWRjYXN0QXJnc0NvbmZpZyxcbiAgY2FzdENvbmZpZyxcbiAgY2VpbENvbmZpZyxcbiAgY2xpcEJ5VmFsdWVDb25maWcsXG4gIGNvbXBsZXhDb25maWcsXG4gIGNvbXBsZXhBYnNDb25maWcsXG4gIGNvbmNhdENvbmZpZyxcbiAgY29udjJEQ29uZmlnLFxuICBjb252MkRCYWNrcHJvcEZpbHRlckNvbmZpZyxcbiAgY29udjJEQmFja3Byb3BJbnB1dENvbmZpZyxcbiAgY29udjNEQ29uZmlnLFxuICBjb252M0RCYWNrcHJvcEZpbHRlclYyQ29uZmlnLFxuICBjb252M0RCYWNrcHJvcElucHV0Q29uZmlnLFxuICBjb3NDb25maWcsXG4gIGNvc2hDb25maWcsXG4gIGNyb3BBbmRSZXNpemVDb25maWcsXG4gIGN1bXByb2RDb25maWcsXG4gIGN1bXN1bUNvbmZpZyxcbiAgZGVuc2VCaW5jb3VudENvbmZpZyxcbiAgZGVwdGhUb1NwYWNlQ29uZmlnLFxuICBkZXB0aHdpc2VDb252MmROYXRpdmVDb25maWcsXG4gIGRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQ29uZmlnLFxuICBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0Q29uZmlnLFxuICBkaWFnQ29uZmlnLFxuICBkaWxhdGlvbjJEQ29uZmlnLFxuICBlaW5zdW1Db25maWcsXG4gIGVsdUNvbmZpZyxcbiAgZWx1R3JhZENvbmZpZyxcbiAgZXF1YWxDb25maWcsXG4gIGVyZkNvbmZpZyxcbiAgZXhwQ29uZmlnLFxuICBleHBhbmREaW1zQ29uZmlnLFxuICBleHBtMUNvbmZpZyxcbiAgZmZ0Q29uZmlnLFxuICBmaWxsQ29uZmlnLFxuICBmbGlwTGVmdFJpZ2h0Q29uZmlnLFxuICBmbG9vckNvbmZpZyxcbiAgZmxvb3JEaXZDb25maWcsXG4gIGZyb21QaXhlbHNDb25maWcsXG4gIGZ1c2VkQ29udjJEQ29uZmlnLFxuICBmdXNlZERlcHRod2lzZUNvbnYyRENvbmZpZyxcbiAgZ2F0aGVyTmRDb25maWcsXG4gIGdhdGhlclYyQ29uZmlnLFxuICBncmVhdGVyQ29uZmlnLFxuICBncmVhdGVyRXF1YWxDb25maWcsXG4gIGlkZW50aXR5Q29uZmlnLFxuICBpZmZ0Q29uZmlnLFxuICBpbWFnQ29uZmlnLFxuICBpc0Zpbml0ZUNvbmZpZyxcbiAgaXNJbmZDb25maWcsXG4gIGlzTmFOQ29uZmlnLFxuICBsZWFreVJlbHVDb25maWcsXG4gIGxlc3NDb25maWcsXG4gIGxlc3NFcXVhbENvbmZpZyxcbiAgbGluU3BhY2VDb25maWcsXG4gIGxvZ0NvbmZpZyxcbiAgbG9nMXBDb25maWcsXG4gIGxvZ2ljYWxBbmRDb25maWcsXG4gIGxvZ2ljYWxOb3RDb25maWcsXG4gIGxvZ2ljYWxPckNvbmZpZyxcbiAgTFJOQ29uZmlnLFxuICBMUk5HcmFkQ29uZmlnLFxuICBtYXhDb25maWcsXG4gIG1heGltdW1Db25maWcsXG4gIG1heFBvb2xDb25maWcsXG4gIG1heFBvb2wzRENvbmZpZyxcbiAgbWF4UG9vbDNER3JhZENvbmZpZyxcbiAgbWF4UG9vbEdyYWRDb25maWcsXG4gIG1heFBvb2xXaXRoQXJnbWF4Q29uZmlnLFxuICBtZWFuQ29uZmlnLFxuICBtaW5Db25maWcsXG4gIG1pbmltdW1Db25maWcsXG4gIG1pcnJvclBhZENvbmZpZyxcbiAgbW9kQ29uZmlnLFxuICBtdWx0aW5vbWlhbENvbmZpZyxcbiAgbXVsdGlwbHlDb25maWcsXG4gIG5lZ0NvbmZpZyxcbiAgbm9uTWF4U3VwcHJlc3Npb25WM0NvbmZpZyxcbiAgbm9uTWF4U3VwcHJlc3Npb25WNENvbmZpZyxcbiAgbm9uTWF4U3VwcHJlc3Npb25WNUNvbmZpZyxcbiAgbm90RXF1YWxDb25maWcsXG4gIG9uZUhvdENvbmZpZyxcbiAgb25lc0xpa2VDb25maWcsXG4gIHBhY2tDb25maWcsXG4gIHBhZFYyQ29uZmlnLFxuICBwb3dDb25maWcsXG4gIHByZWx1Q29uZmlnLFxuICBwcm9kQ29uZmlnLFxuICByYWdnZWRHYXRoZXJDb25maWcsXG4gIHJhZ2dlZFJhbmdlQ29uZmlnLFxuICByYWdnZWRUZW5zb3JUb1RlbnNvckNvbmZpZyxcbiAgcmFuZ2VDb25maWcsXG4gIHJlYWxDb25maWcsXG4gIHJlYWxEaXZDb25maWcsXG4gIHJlY2lwcm9jYWxDb25maWcsXG4gIHJlbHVDb25maWcsXG4gIHJlbHU2Q29uZmlnLFxuICByZXNoYXBlQ29uZmlnLFxuICByZXNpemVCaWxpbmVhckNvbmZpZyxcbiAgcmVzaXplQmlsaW5lYXJHcmFkQ29uZmlnLFxuICByZXNpemVOZWFyZXN0TmVpZ2hib3JDb25maWcsXG4gIHJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWRDb25maWcsXG4gIHJldmVyc2VDb25maWcsXG4gIHJvdGF0ZVdpdGhPZmZzZXRDb25maWcsXG4gIHJvdW5kQ29uZmlnLFxuICByc3FydENvbmZpZyxcbiAgc2NhdHRlck5kQ29uZmlnLFxuICBzZWFyY2hTb3J0ZWRDb25maWcsXG4gIHNlbGVjdENvbmZpZyxcbiAgc2VsdUNvbmZpZyxcbiAgc2lnbW9pZENvbmZpZyxcbiAgc2lnbkNvbmZpZyxcbiAgc2luQ29uZmlnLFxuICBzaW5oQ29uZmlnLFxuICBzbGljZUNvbmZpZyxcbiAgc29mdG1heENvbmZpZyxcbiAgc29mdHBsdXNDb25maWcsXG4gIHNwYWNlVG9CYXRjaE5EQ29uZmlnLFxuICBzcGFyc2VGaWxsRW1wdHlSb3dzQ29uZmlnLFxuICBzcGFyc2VSZXNoYXBlQ29uZmlnLFxuICBzcGFyc2VTZWdtZW50TWVhbkNvbmZpZyxcbiAgc3BhcnNlU2VnbWVudFN1bUNvbmZpZyxcbiAgc3BhcnNlVG9EZW5zZUNvbmZpZyxcbiAgc3BsaXRWQ29uZmlnLFxuICBzcXJ0Q29uZmlnLFxuICBzcXVhcmVDb25maWcsXG4gIHNxdWFyZWREaWZmZXJlbmNlQ29uZmlnLFxuICBzdGF0aWNSZWdleFJlcGxhY2VDb25maWcsXG4gIHN0ZXBDb25maWcsXG4gIHN0cmlkZWRTbGljZUNvbmZpZyxcbiAgc3RyaW5nTkdyYW1zQ29uZmlnLFxuICBzdHJpbmdTcGxpdENvbmZpZyxcbiAgc3RyaW5nVG9IYXNoQnVja2V0RmFzdENvbmZpZyxcbiAgc3ViQ29uZmlnLFxuICBzdW1Db25maWcsXG4gIHRhbkNvbmZpZyxcbiAgdGFuaENvbmZpZyxcbiAgdGVuc29yU2NhdHRlclVwZGF0ZUNvbmZpZyxcbiAgdGlsZUNvbmZpZyxcbiAgdG9wS0NvbmZpZyxcbiAgdHJhbnNmb3JtQ29uZmlnLFxuICB0cmFuc3Bvc2VDb25maWcsXG4gIHVuaXF1ZUNvbmZpZyxcbiAgdW5wYWNrQ29uZmlnLFxuICB1bnNvcnRlZFNlZ21lbnRTdW1Db25maWcsXG4gIHplcm9zTGlrZUNvbmZpZ1xuXTtcblxuZm9yIChjb25zdCBrZXJuZWxDb25maWcgb2Yga2VybmVsQ29uZmlncykge1xuICByZWdpc3Rlcktlcm5lbChrZXJuZWxDb25maWcpO1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n/** DataType enum. */\nexport var DataType;\n(function (DataType) {\n // Not a legal value for DataType. Used to indicate a DataType field\n // has not been set.\n DataType[DataType[\"DT_INVALID\"] = 0] = \"DT_INVALID\";\n // Data types that all computation devices are expected to be\n // capable to support.\n DataType[DataType[\"DT_FLOAT\"] = 1] = \"DT_FLOAT\";\n DataType[DataType[\"DT_DOUBLE\"] = 2] = \"DT_DOUBLE\";\n DataType[DataType[\"DT_INT32\"] = 3] = \"DT_INT32\";\n DataType[DataType[\"DT_UINT8\"] = 4] = \"DT_UINT8\";\n DataType[DataType[\"DT_INT16\"] = 5] = \"DT_INT16\";\n DataType[DataType[\"DT_INT8\"] = 6] = \"DT_INT8\";\n DataType[DataType[\"DT_STRING\"] = 7] = \"DT_STRING\";\n DataType[DataType[\"DT_COMPLEX64\"] = 8] = \"DT_COMPLEX64\";\n DataType[DataType[\"DT_INT64\"] = 9] = \"DT_INT64\";\n DataType[DataType[\"DT_BOOL\"] = 10] = \"DT_BOOL\";\n DataType[DataType[\"DT_QINT8\"] = 11] = \"DT_QINT8\";\n DataType[DataType[\"DT_QUINT8\"] = 12] = \"DT_QUINT8\";\n DataType[DataType[\"DT_QINT32\"] = 13] = \"DT_QINT32\";\n DataType[DataType[\"DT_BFLOAT16\"] = 14] = \"DT_BFLOAT16\";\n DataType[DataType[\"DT_QINT16\"] = 15] = \"DT_QINT16\";\n DataType[DataType[\"DT_QUINT16\"] = 16] = \"DT_QUINT16\";\n DataType[DataType[\"DT_UINT16\"] = 17] = \"DT_UINT16\";\n DataType[DataType[\"DT_COMPLEX128\"] = 18] = \"DT_COMPLEX128\";\n DataType[DataType[\"DT_HALF\"] = 19] = \"DT_HALF\";\n DataType[DataType[\"DT_RESOURCE\"] = 20] = \"DT_RESOURCE\";\n DataType[DataType[\"DT_VARIANT\"] = 21] = \"DT_VARIANT\";\n DataType[DataType[\"DT_UINT32\"] = 22] = \"DT_UINT32\";\n DataType[DataType[\"DT_UINT64\"] = 23] = \"DT_UINT64\";\n // Do not use! These are only for parameters. Every enum above\n // should have a corresponding value below (verified by types_test).\n DataType[DataType[\"DT_FLOAT_REF\"] = 101] = \"DT_FLOAT_REF\";\n DataType[DataType[\"DT_DOUBLE_REF\"] = 102] = \"DT_DOUBLE_REF\";\n DataType[DataType[\"DT_INT32_REF\"] = 103] = \"DT_INT32_REF\";\n DataType[DataType[\"DT_UINT8_REF\"] = 104] = \"DT_UINT8_REF\";\n DataType[DataType[\"DT_INT16_REF\"] = 105] = \"DT_INT16_REF\";\n DataType[DataType[\"DT_INT8_REF\"] = 106] = \"DT_INT8_REF\";\n DataType[DataType[\"DT_STRING_REF\"] = 107] = \"DT_STRING_REF\";\n DataType[DataType[\"DT_COMPLEX64_REF\"] = 108] = \"DT_COMPLEX64_REF\";\n DataType[DataType[\"DT_INT64_REF\"] = 109] = \"DT_INT64_REF\";\n DataType[DataType[\"DT_BOOL_REF\"] = 110] = \"DT_BOOL_REF\";\n DataType[DataType[\"DT_QINT8_REF\"] = 111] = \"DT_QINT8_REF\";\n DataType[DataType[\"DT_QUINT8_REF\"] = 112] = \"DT_QUINT8_REF\";\n DataType[DataType[\"DT_QINT32_REF\"] = 113] = \"DT_QINT32_REF\";\n DataType[DataType[\"DT_BFLOAT16_REF\"] = 114] = \"DT_BFLOAT16_REF\";\n DataType[DataType[\"DT_QINT16_REF\"] = 115] = \"DT_QINT16_REF\";\n DataType[DataType[\"DT_QUINT16_REF\"] = 116] = \"DT_QUINT16_REF\";\n DataType[DataType[\"DT_UINT16_REF\"] = 117] = \"DT_UINT16_REF\";\n DataType[DataType[\"DT_COMPLEX128_REF\"] = 118] = \"DT_COMPLEX128_REF\";\n DataType[DataType[\"DT_HALF_REF\"] = 119] = \"DT_HALF_REF\";\n DataType[DataType[\"DT_RESOURCE_REF\"] = 120] = \"DT_RESOURCE_REF\";\n DataType[DataType[\"DT_VARIANT_REF\"] = 121] = \"DT_VARIANT_REF\";\n DataType[DataType[\"DT_UINT32_REF\"] = 122] = \"DT_UINT32_REF\";\n DataType[DataType[\"DT_UINT64_REF\"] = 123] = \"DT_UINT64_REF\";\n})(DataType || (DataType = {}));\nexport var SaverDef;\n(function (SaverDef) {\n /** CheckpointFormatVersion enum. */\n let CheckpointFormatVersion;\n (function (CheckpointFormatVersion) {\n CheckpointFormatVersion[CheckpointFormatVersion[\"LEGACY\"] = 0] = \"LEGACY\";\n CheckpointFormatVersion[CheckpointFormatVersion[\"V1\"] = 1] = \"V1\";\n CheckpointFormatVersion[CheckpointFormatVersion[\"V2\"] = 2] = \"V2\";\n })(CheckpointFormatVersion = SaverDef.CheckpointFormatVersion || (SaverDef.CheckpointFormatVersion = {}));\n})(SaverDef || (SaverDef = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZWRfYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL2RhdGEvY29tcGlsZWRfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBYUgscUJBQXFCO0FBQ3JCLE1BQU0sQ0FBTixJQUFZLFFBd0RYO0FBeERELFdBQVksUUFBUTtJQUNsQixxRUFBcUU7SUFDckUsb0JBQW9CO0lBQ3BCLG1EQUFjLENBQUE7SUFFZCw2REFBNkQ7SUFDN0Qsc0JBQXNCO0lBQ3RCLCtDQUFZLENBQUE7SUFDWixpREFBYSxDQUFBO0lBQ2IsK0NBQVksQ0FBQTtJQUNaLCtDQUFZLENBQUE7SUFDWiwrQ0FBWSxDQUFBO0lBQ1osNkNBQVcsQ0FBQTtJQUNYLGlEQUFhLENBQUE7SUFDYix1REFBZ0IsQ0FBQTtJQUNoQiwrQ0FBWSxDQUFBO0lBQ1osOENBQVksQ0FBQTtJQUNaLGdEQUFhLENBQUE7SUFDYixrREFBYyxDQUFBO0lBQ2Qsa0RBQWMsQ0FBQTtJQUNkLHNEQUFnQixDQUFBO0lBQ2hCLGtEQUFjLENBQUE7SUFDZCxvREFBZSxDQUFBO0lBQ2Ysa0RBQWMsQ0FBQTtJQUNkLDBEQUFrQixDQUFBO0lBQ2xCLDhDQUFZLENBQUE7SUFDWixzREFBZ0IsQ0FBQTtJQUNoQixvREFBZSxDQUFBO0lBQ2Ysa0RBQWMsQ0FBQTtJQUNkLGtEQUFjLENBQUE7SUFFZCxnRUFBZ0U7SUFDaEUsb0VBQW9FO0lBQ3BFLHlEQUFrQixDQUFBO0lBQ2xCLDJEQUFtQixDQUFBO0lBQ25CLHlEQUFrQixDQUFBO0lBQ2xCLHlEQUFrQixDQUFBO0lBQ2xCLHlEQUFrQixDQUFBO0lBQ2xCLHVEQUFpQixDQUFBO0lBQ2pCLDJEQUFtQixDQUFBO0lBQ25CLGlFQUFzQixDQUFBO0lBQ3RCLHlEQUFrQixDQUFBO0lBQ2xCLHVEQUFpQixDQUFBO0lBQ2pCLHlEQUFrQixDQUFBO0lBQ2xCLDJEQUFtQixDQUFBO0lBQ25CLDJEQUFtQixDQUFBO0lBQ25CLCtEQUFxQixDQUFBO0lBQ3JCLDJEQUFtQixDQUFBO0lBQ25CLDZEQUFvQixDQUFBO0lBQ3BCLDJEQUFtQixDQUFBO0lBQ25CLG1FQUF1QixDQUFBO0lBQ3ZCLHVEQUFpQixDQUFBO0lBQ2pCLCtEQUFxQixDQUFBO0lBQ3JCLDZEQUFvQixDQUFBO0lBQ3BCLDJEQUFtQixDQUFBO0lBQ25CLDJEQUFtQixDQUFBO0FBQ3JCLENBQUMsRUF4RFcsUUFBUSxLQUFSLFFBQVEsUUF3RG5CO0FBMlBELE1BQU0sS0FBVyxRQUFRLENBR3hCO0FBSEQsV0FBaUIsUUFBUTtJQUN2QixvQ0FBb0M7SUFDcEMsSUFBWSx1QkFBMEQ7SUFBdEUsV0FBWSx1QkFBdUI7UUFBRSx5RUFBWSxDQUFBO1FBQUUsaUVBQVEsQ0FBQTtRQUFFLGlFQUFRLENBQUE7SUFBQSxDQUFDLEVBQTFELHVCQUF1QixHQUF2QixnQ0FBdUIsS0FBdkIsZ0NBQXVCLFFBQW1DO0FBQ3hFLENBQUMsRUFIZ0IsUUFBUSxLQUFSLFFBQVEsUUFHeEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuXG4vKiogUHJvcGVydGllcyBvZiBhbiBBbnkuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUFueSB7XG4gIC8qKiBBbnkgdHlwZVVybCAqL1xuICB0eXBlVXJsPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogQW55IHZhbHVlICovXG4gIHZhbHVlPzogKFVpbnQ4QXJyYXl8bnVsbCk7XG59XG5cbi8qKiBEYXRhVHlwZSBlbnVtLiAqL1xuZXhwb3J0IGVudW0gRGF0YVR5cGUge1xuICAvLyBOb3QgYSBsZWdhbCB2YWx1ZSBmb3IgRGF0YVR5cGUuICBVc2VkIHRvIGluZGljYXRlIGEgRGF0YVR5cGUgZmllbGRcbiAgLy8gaGFzIG5vdCBiZWVuIHNldC5cbiAgRFRfSU5WQUxJRCA9IDAsXG5cbiAgLy8gRGF0YSB0eXBlcyB0aGF0IGFsbCBjb21wdXRhdGlvbiBkZXZpY2VzIGFyZSBleHBlY3RlZCB0byBiZVxuICAvLyBjYXBhYmxlIHRvIHN1cHBvcnQuXG4gIERUX0ZMT0FUID0gMSxcbiAgRFRfRE9VQkxFID0gMixcbiAgRFRfSU5UMzIgPSAzLFxuICBEVF9VSU5UOCA9IDQsXG4gIERUX0lOVDE2ID0gNSxcbiAgRFRfSU5UOCA9IDYsXG4gIERUX1NUUklORyA9IDcsXG4gIERUX0NPTVBMRVg2NCA9IDgsICAvLyBTaW5nbGUtcHJlY2lzaW9uIGNvbXBsZXhcbiAgRFRfSU5UNjQgPSA5LFxuICBEVF9CT09MID0gMTAsXG4gIERUX1FJTlQ4ID0gMTEsICAgICAvLyBRdWFudGl6ZWQgaW50OFxuICBEVF9RVUlOVDggPSAxMiwgICAgLy8gUXVhbnRpemVkIHVpbnQ4XG4gIERUX1FJTlQzMiA9IDEzLCAgICAvLyBRdWFudGl6ZWQgaW50MzJcbiAgRFRfQkZMT0FUMTYgPSAxNCwgIC8vIEZsb2F0MzIgdHJ1bmNhdGVkIHRvIDE2IGJpdHMuICBPbmx5IGZvciBjYXN0IG9wcy5cbiAgRFRfUUlOVDE2ID0gMTUsICAgIC8vIFF1YW50aXplZCBpbnQxNlxuICBEVF9RVUlOVDE2ID0gMTYsICAgLy8gUXVhbnRpemVkIHVpbnQxNlxuICBEVF9VSU5UMTYgPSAxNyxcbiAgRFRfQ09NUExFWDEyOCA9IDE4LCAgLy8gRG91YmxlLXByZWNpc2lvbiBjb21wbGV4XG4gIERUX0hBTEYgPSAxOSxcbiAgRFRfUkVTT1VSQ0UgPSAyMCxcbiAgRFRfVkFSSUFOVCA9IDIxLCAgLy8gQXJiaXRyYXJ5IEMrKyBkYXRhIHR5cGVzXG4gIERUX1VJTlQzMiA9IDIyLFxuICBEVF9VSU5UNjQgPSAyMyxcblxuICAvLyBEbyBub3QgdXNlISAgVGhlc2UgYXJlIG9ubHkgZm9yIHBhcmFtZXRlcnMuICBFdmVyeSBlbnVtIGFib3ZlXG4gIC8vIHNob3VsZCBoYXZlIGEgY29ycmVzcG9uZGluZyB2YWx1ZSBiZWxvdyAodmVyaWZpZWQgYnkgdHlwZXNfdGVzdCkuXG4gIERUX0ZMT0FUX1JFRiA9IDEwMSxcbiAgRFRfRE9VQkxFX1JFRiA9IDEwMixcbiAgRFRfSU5UMzJfUkVGID0gMTAzLFxuICBEVF9VSU5UOF9SRUYgPSAxMDQsXG4gIERUX0lOVDE2X1JFRiA9IDEwNSxcbiAgRFRfSU5UOF9SRUYgPSAxMDYsXG4gIERUX1NUUklOR19SRUYgPSAxMDcsXG4gIERUX0NPTVBMRVg2NF9SRUYgPSAxMDgsXG4gIERUX0lOVDY0X1JFRiA9IDEwOSxcbiAgRFRfQk9PTF9SRUYgPSAxMTAsXG4gIERUX1FJTlQ4X1JFRiA9IDExMSxcbiAgRFRfUVVJTlQ4X1JFRiA9IDExMixcbiAgRFRfUUlOVDMyX1JFRiA9IDExMyxcbiAgRFRfQkZMT0FUMTZfUkVGID0gMTE0LFxuICBEVF9RSU5UMTZfUkVGID0gMTE1LFxuICBEVF9RVUlOVDE2X1JFRiA9IDExNixcbiAgRFRfVUlOVDE2X1JFRiA9IDExNyxcbiAgRFRfQ09NUExFWDEyOF9SRUYgPSAxMTgsXG4gIERUX0hBTEZfUkVGID0gMTE5LFxuICBEVF9SRVNPVVJDRV9SRUYgPSAxMjAsXG4gIERUX1ZBUklBTlRfUkVGID0gMTIxLFxuICBEVF9VSU5UMzJfUkVGID0gMTIyLFxuICBEVF9VSU5UNjRfUkVGID0gMTIzLFxufVxuXG4vKiogUHJvcGVydGllcyBvZiBhIFRlbnNvclNoYXBlLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElUZW5zb3JTaGFwZSB7XG4gIC8qKiBUZW5zb3JTaGFwZSBkaW0gKi9cbiAgZGltPzogKFRlbnNvclNoYXBlLklEaW1bXXxudWxsKTtcblxuICAvKiogVGVuc29yU2hhcGUgdW5rbm93blJhbmsgKi9cbiAgdW5rbm93blJhbms/OiAoYm9vbGVhbnxudWxsKTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUZW5zb3JTaGFwZSB7XG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGEgRGltLiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSURpbSB7XG4gICAgLyoqIERpbSBzaXplICovXG4gICAgc2l6ZT86IChudW1iZXJ8c3RyaW5nfG51bGwpO1xuXG4gICAgLyoqIERpbSBuYW1lICovXG4gICAgbmFtZT86IChzdHJpbmd8bnVsbCk7XG4gIH1cbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBUZW5zb3IuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSVRlbnNvciB7XG4gIC8qKiBUZW5zb3IgZHR5cGUgKi9cbiAgZHR5cGU/OiAoRGF0YVR5cGV8bnVsbCk7XG5cbiAgLyoqIFRlbnNvciB0ZW5zb3JTaGFwZSAqL1xuICB0ZW5zb3JTaGFwZT86IChJVGVuc29yU2hhcGV8bnVsbCk7XG5cbiAgLyoqIFRlbnNvciB2ZXJzaW9uTnVtYmVyICovXG4gIHZlcnNpb25OdW1iZXI/OiAobnVtYmVyfG51bGwpO1xuXG4gIC8qKiBUZW5zb3IgdGVuc29yQ29udGVudCAqL1xuICB0ZW5zb3JDb250ZW50PzogKFVpbnQ4QXJyYXl8bnVsbCk7XG5cbiAgLyoqIFRlbnNvciBmbG9hdFZhbCAqL1xuICBmbG9hdFZhbD86IChudW1iZXJbXXxudWxsKTtcblxuICAvKiogVGVuc29yIGRvdWJsZVZhbCAqL1xuICBkb3VibGVWYWw/OiAobnVtYmVyW118bnVsbCk7XG5cbiAgLyoqIFRlbnNvciBpbnRWYWwgKi9cbiAgaW50VmFsPzogKG51bWJlcltdfG51bGwpO1xuXG4gIC8qKiBUZW5zb3Igc3RyaW5nVmFsICovXG4gIHN0cmluZ1ZhbD86IChVaW50OEFycmF5W118bnVsbCk7XG5cbiAgLyoqIFRlbnNvciBzY29tcGxleFZhbCAqL1xuICBzY29tcGxleFZhbD86IChudW1iZXJbXXxudWxsKTtcblxuICAvKiogVGVuc29yIGludDY0VmFsICovXG4gIGludDY0VmFsPzogKChudW1iZXIgfCBzdHJpbmcpW118bnVsbCk7XG5cbiAgLyoqIFRlbnNvciBib29sVmFsICovXG4gIGJvb2xWYWw/OiAoYm9vbGVhbltdfG51bGwpO1xuXG4gIC8qKiBUZW5zb3IgdWludDMyVmFsICovXG4gIHVpbnQzMlZhbD86IChudW1iZXJbXXxudWxsKTtcblxuICAvKiogVGVuc29yIHVpbnQ2NFZhbCAqL1xuICB1aW50NjRWYWw/OiAoKG51bWJlciB8IHN0cmluZylbXXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYW4gQXR0clZhbHVlLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElBdHRyVmFsdWUge1xuICAvKiogQXR0clZhbHVlIGxpc3QgKi9cbiAgbGlzdD86IChBdHRyVmFsdWUuSUxpc3RWYWx1ZXxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHMgKi9cbiAgcz86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIEF0dHJWYWx1ZSBpICovXG4gIGk/OiAobnVtYmVyfHN0cmluZ3xudWxsKTtcblxuICAvKiogQXR0clZhbHVlIGYgKi9cbiAgZj86IChudW1iZXJ8bnVsbCk7XG5cbiAgLyoqIEF0dHJWYWx1ZSBiICovXG4gIGI/OiAoYm9vbGVhbnxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHR5cGUgKi9cbiAgdHlwZT86IChEYXRhVHlwZXxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHNoYXBlICovXG4gIHNoYXBlPzogKElUZW5zb3JTaGFwZXxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHRlbnNvciAqL1xuICB0ZW5zb3I/OiAoSVRlbnNvcnxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHBsYWNlaG9sZGVyICovXG4gIHBsYWNlaG9sZGVyPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogQXR0clZhbHVlIGZ1bmMgKi9cbiAgZnVuYz86IChJTmFtZUF0dHJMaXN0fG51bGwpO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEF0dHJWYWx1ZSB7XG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGEgTGlzdFZhbHVlLiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUxpc3RWYWx1ZSB7XG4gICAgLyoqIExpc3RWYWx1ZSBzICovXG4gICAgcz86IChzdHJpbmdbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgaSAqL1xuICAgIGk/OiAoKG51bWJlciB8IHN0cmluZylbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgZiAqL1xuICAgIGY/OiAobnVtYmVyW118bnVsbCk7XG5cbiAgICAvKiogTGlzdFZhbHVlIGIgKi9cbiAgICBiPzogKGJvb2xlYW5bXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgdHlwZSAqL1xuICAgIHR5cGU/OiAoRGF0YVR5cGVbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgc2hhcGUgKi9cbiAgICBzaGFwZT86IChJVGVuc29yU2hhcGVbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgdGVuc29yICovXG4gICAgdGVuc29yPzogKElUZW5zb3JbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgZnVuYyAqL1xuICAgIGZ1bmM/OiAoSU5hbWVBdHRyTGlzdFtdfG51bGwpO1xuICB9XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGEgTmFtZUF0dHJMaXN0LiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElOYW1lQXR0ckxpc3Qge1xuICAvKiogTmFtZUF0dHJMaXN0IG5hbWUgKi9cbiAgbmFtZT86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIE5hbWVBdHRyTGlzdCBhdHRyICovXG4gIGF0dHI/OiAoe1trOiBzdHJpbmddOiBJQXR0clZhbHVlfXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBOb2RlRGVmLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElOb2RlRGVmIHtcbiAgLyoqIE5vZGVEZWYgbmFtZSAqL1xuICBuYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogTm9kZURlZiBvcCAqL1xuICBvcD86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIE5vZGVEZWYgaW5wdXQgKi9cbiAgaW5wdXQ/OiAoc3RyaW5nW118bnVsbCk7XG5cbiAgLyoqIE5vZGVEZWYgZGV2aWNlICovXG4gIGRldmljZT86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIE5vZGVEZWYgYXR0ciAqL1xuICBhdHRyPzogKHtbazogc3RyaW5nXTogSUF0dHJWYWx1ZX18bnVsbCk7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGEgVmVyc2lvbkRlZi4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJVmVyc2lvbkRlZiB7XG4gIC8qKiBWZXJzaW9uRGVmIHByb2R1Y2VyICovXG4gIHByb2R1Y2VyPzogKG51bWJlcnxudWxsKTtcblxuICAvKiogVmVyc2lvbkRlZiBtaW5Db25zdW1lciAqL1xuICBtaW5Db25zdW1lcj86IChudW1iZXJ8bnVsbCk7XG5cbiAgLyoqIFZlcnNpb25EZWYgYmFkQ29uc3VtZXJzICovXG4gIGJhZENvbnN1bWVycz86IChudW1iZXJbXXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBHcmFwaERlZi4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJR3JhcGhEZWYge1xuICAvKiogR3JhcGhEZWYgbm9kZSAqL1xuICBub2RlPzogKElOb2RlRGVmW118bnVsbCk7XG5cbiAgLyoqIEdyYXBoRGVmIHZlcnNpb25zICovXG4gIHZlcnNpb25zPzogKElWZXJzaW9uRGVmfG51bGwpO1xuXG4gIC8qKiBHcmFwaERlZiBsaWJyYXJ5ICovXG4gIGxpYnJhcnk/OiAoSUZ1bmN0aW9uRGVmTGlicmFyeXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBDb2xsZWN0aW9uRGVmLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElDb2xsZWN0aW9uRGVmIHtcbiAgLyoqIENvbGxlY3Rpb25EZWYgbm9kZUxpc3QgKi9cbiAgbm9kZUxpc3Q/OiAoQ29sbGVjdGlvbkRlZi5JTm9kZUxpc3R8bnVsbCk7XG5cbiAgLyoqIENvbGxlY3Rpb25EZWYgYnl0ZXNMaXN0ICovXG4gIGJ5dGVzTGlzdD86IChDb2xsZWN0aW9uRGVmLklCeXRlc0xpc3R8bnVsbCk7XG5cbiAgLyoqIENvbGxlY3Rpb25EZWYgaW50NjRMaXN0ICovXG4gIGludDY0TGlzdD86IChDb2xsZWN0aW9uRGVmLklJbnQ2NExpc3R8bnVsbCk7XG5cbiAgLyoqIENvbGxlY3Rpb25EZWYgZmxvYXRMaXN0ICovXG4gIGZsb2F0TGlzdD86IChDb2xsZWN0aW9uRGVmLklGbG9hdExpc3R8bnVsbCk7XG5cbiAgLyoqIENvbGxlY3Rpb25EZWYgYW55TGlzdCAqL1xuICBhbnlMaXN0PzogKENvbGxlY3Rpb25EZWYuSUFueUxpc3R8bnVsbCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29sbGVjdGlvbkRlZiB7XG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGEgTm9kZUxpc3QuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJTm9kZUxpc3Qge1xuICAgIC8qKiBOb2RlTGlzdCB2YWx1ZSAqL1xuICAgIHZhbHVlPzogKHN0cmluZ1tdfG51bGwpO1xuICB9XG5cbiAgLyoqIFByb3BlcnRpZXMgb2YgYSBCeXRlc0xpc3QuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJQnl0ZXNMaXN0IHtcbiAgICAvKiogQnl0ZXNMaXN0IHZhbHVlICovXG4gICAgdmFsdWU/OiAoVWludDhBcnJheVtdfG51bGwpO1xuICB9XG5cbiAgLyoqIFByb3BlcnRpZXMgb2YgYW4gSW50NjRMaXN0LiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUludDY0TGlzdCB7XG4gICAgLyoqIEludDY0TGlzdCB2YWx1ZSAqL1xuICAgIHZhbHVlPzogKChudW1iZXIgfCBzdHJpbmcpW118bnVsbCk7XG4gIH1cblxuICAvKiogUHJvcGVydGllcyBvZiBhIEZsb2F0TGlzdC4gKi9cbiAgZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElGbG9hdExpc3Qge1xuICAgIC8qKiBGbG9hdExpc3QgdmFsdWUgKi9cbiAgICB2YWx1ZT86IChudW1iZXJbXXxudWxsKTtcbiAgfVxuXG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGFuIEFueUxpc3QuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJQW55TGlzdCB7XG4gICAgLyoqIEFueUxpc3QgdmFsdWUgKi9cbiAgICB2YWx1ZT86IChJQW55W118bnVsbCk7XG4gIH1cbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBTYXZlckRlZi4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJU2F2ZXJEZWYge1xuICAvKiogU2F2ZXJEZWYgZmlsZW5hbWVUZW5zb3JOYW1lICovXG4gIGZpbGVuYW1lVGVuc29yTmFtZT86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIFNhdmVyRGVmIHNhdmVUZW5zb3JOYW1lICovXG4gIHNhdmVUZW5zb3JOYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogU2F2ZXJEZWYgcmVzdG9yZU9wTmFtZSAqL1xuICByZXN0b3JlT3BOYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogU2F2ZXJEZWYgbWF4VG9LZWVwICovXG4gIG1heFRvS2VlcD86IChudW1iZXJ8bnVsbCk7XG5cbiAgLyoqIFNhdmVyRGVmIHNoYXJkZWQgKi9cbiAgc2hhcmRlZD86IChib29sZWFufG51bGwpO1xuXG4gIC8qKiBTYXZlckRlZiBrZWVwQ2hlY2twb2ludEV2ZXJ5TkhvdXJzICovXG4gIGtlZXBDaGVja3BvaW50RXZlcnlOSG91cnM/OiAobnVtYmVyfG51bGwpO1xuXG4gIC8qKiBTYXZlckRlZiB2ZXJzaW9uICovXG4gIHZlcnNpb24/OiAoU2F2ZXJEZWYuQ2hlY2twb2ludEZvcm1hdFZlcnNpb258bnVsbCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2F2ZXJEZWYge1xuICAvKiogQ2hlY2twb2ludEZvcm1hdFZlcnNpb24gZW51bS4gKi9cbiAgZXhwb3J0IGVudW0gQ2hlY2twb2ludEZvcm1hdFZlcnNpb24geydMRUdBQ1knID0gMCwgJ1YxJyA9IDEsICdWMicgPSAyfVxufVxuXG4vKiogUHJvcGVydGllcyBvZiBhIFRlbnNvckluZm8uICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSVRlbnNvckluZm8ge1xuICAvKiogVGVuc29ySW5mbyBuYW1lICovXG4gIG5hbWU/OiAoc3RyaW5nfG51bGwpO1xuXG4gIC8qKiBUZW5zb3JJbmZvIGNvb1NwYXJzZSAqL1xuICBjb29TcGFyc2U/OiAoVGVuc29ySW5mby5JQ29vU3BhcnNlfG51bGwpO1xuXG4gIC8qKiBUZW5zb3JJbmZvIGR0eXBlICovXG4gIGR0eXBlPzogKERhdGFUeXBlfHN0cmluZ3xudWxsKTtcblxuICAvKiogVGVuc29ySW5mbyB0ZW5zb3JTaGFwZSAqL1xuICB0ZW5zb3JTaGFwZT86IChJVGVuc29yU2hhcGV8bnVsbCk7XG5cbiAgLyoqIFJlc291cmNlIGlkIHRlbnNvciB3YXMgb3JpZ2luYWxseSBhc3NpZ25lZCB0by4gICovXG4gIHJlc291cmNlSWQ/OiAobnVtYmVyfG51bGwpO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRlbnNvckluZm8ge1xuICAvKiogUHJvcGVydGllcyBvZiBhIENvb1NwYXJzZS4gKi9cbiAgZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElDb29TcGFyc2Uge1xuICAgIC8qKiBDb29TcGFyc2UgdmFsdWVzVGVuc29yTmFtZSAqL1xuICAgIHZhbHVlc1RlbnNvck5hbWU/OiAoc3RyaW5nfG51bGwpO1xuXG4gICAgLyoqIENvb1NwYXJzZSBpbmRpY2VzVGVuc29yTmFtZSAqL1xuICAgIGluZGljZXNUZW5zb3JOYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBDb29TcGFyc2UgZGVuc2VTaGFwZVRlbnNvck5hbWUgKi9cbiAgICBkZW5zZVNoYXBlVGVuc29yTmFtZT86IChzdHJpbmd8bnVsbCk7XG4gIH1cbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBTaWduYXR1cmVEZWYuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSVNpZ25hdHVyZURlZiB7XG4gIC8qKiBTaWduYXR1cmVEZWYgaW5wdXRzICovXG4gIGlucHV0cz86ICh7W2s6IHN0cmluZ106IElUZW5zb3JJbmZvfXxudWxsKTtcblxuICAvKiogU2lnbmF0dXJlRGVmIG91dHB1dHMgKi9cbiAgb3V0cHV0cz86ICh7W2s6IHN0cmluZ106IElUZW5zb3JJbmZvfXxudWxsKTtcblxuICAvKiogU2lnbmF0dXJlRGVmIG1ldGhvZE5hbWUgKi9cbiAgbWV0aG9kTmFtZT86IChzdHJpbmd8bnVsbCk7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGFuIEFzc2V0RmlsZURlZi4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJQXNzZXRGaWxlRGVmIHtcbiAgLyoqIEFzc2V0RmlsZURlZiB0ZW5zb3JJbmZvICovXG4gIHRlbnNvckluZm8/OiAoSVRlbnNvckluZm98bnVsbCk7XG5cbiAgLyoqIEFzc2V0RmlsZURlZiBmaWxlbmFtZSAqL1xuICBmaWxlbmFtZT86IChzdHJpbmd8bnVsbCk7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGFuIE9wRGVmLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElPcERlZiB7XG4gIC8qKiBPcERlZiBuYW1lICovXG4gIG5hbWU/OiAoc3RyaW5nfG51bGwpO1xuXG4gIC8qKiBPcERlZiBpbnB1dEFyZyAqL1xuICBpbnB1dEFyZz86IChPcERlZi5JQXJnRGVmW118bnVsbCk7XG5cbiAgLyoqIE9wRGVmIG91dHB1dEFyZyAqL1xuICBvdXRwdXRBcmc/OiAoT3BEZWYuSUFyZ0RlZltdfG51bGwpO1xuXG4gIC8qKiBPcERlZiBhdHRyICovXG4gIGF0dHI/OiAoT3BEZWYuSUF0dHJEZWZbXXxudWxsKTtcblxuICAvKiogT3BEZWYgZGVwcmVjYXRpb24gKi9cbiAgZGVwcmVjYXRpb24/OiAoT3BEZWYuSU9wRGVwcmVjYXRpb258bnVsbCk7XG5cbiAgLyoqIE9wRGVmIHN1bW1hcnkgKi9cbiAgc3VtbWFyeT86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIE9wRGVmIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogT3BEZWYgaXNDb21tdXRhdGl2ZSAqL1xuICBpc0NvbW11dGF0aXZlPzogKGJvb2xlYW58bnVsbCk7XG5cbiAgLyoqIE9wRGVmIGlzQWdncmVnYXRlICovXG4gIGlzQWdncmVnYXRlPzogKGJvb2xlYW58bnVsbCk7XG5cbiAgLyoqIE9wRGVmIGlzU3RhdGVmdWwgKi9cbiAgaXNTdGF0ZWZ1bD86IChib29sZWFufG51bGwpO1xuXG4gIC8qKiBPcERlZiBhbGxvd3NVbmluaXRpYWxpemVkSW5wdXQgKi9cbiAgYWxsb3dzVW5pbml0aWFsaXplZElucHV0PzogKGJvb2xlYW58bnVsbCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgT3BEZWYge1xuICAvKiogUHJvcGVydGllcyBvZiBhbiBBcmdEZWYuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJQXJnRGVmIHtcbiAgICAvKiogQXJnRGVmIG5hbWUgKi9cbiAgICBuYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBcmdEZWYgZGVzY3JpcHRpb24gKi9cbiAgICBkZXNjcmlwdGlvbj86IChzdHJpbmd8bnVsbCk7XG5cbiAgICAvKiogQXJnRGVmIHR5cGUgKi9cbiAgICB0eXBlPzogKERhdGFUeXBlfG51bGwpO1xuXG4gICAgLyoqIEFyZ0RlZiB0eXBlQXR0ciAqL1xuICAgIHR5cGVBdHRyPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBcmdEZWYgbnVtYmVyQXR0ciAqL1xuICAgIG51bWJlckF0dHI/OiAoc3RyaW5nfG51bGwpO1xuXG4gICAgLyoqIEFyZ0RlZiB0eXBlTGlzdEF0dHIgKi9cbiAgICB0eXBlTGlzdEF0dHI/OiAoc3RyaW5nfG51bGwpO1xuXG4gICAgLyoqIEFyZ0RlZiBpc1JlZiAqL1xuICAgIGlzUmVmPzogKGJvb2xlYW58bnVsbCk7XG4gIH1cblxuICAvKiogUHJvcGVydGllcyBvZiBhbiBBdHRyRGVmLiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUF0dHJEZWYge1xuICAgIC8qKiBBdHRyRGVmIG5hbWUgKi9cbiAgICBuYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBdHRyRGVmIHR5cGUgKi9cbiAgICB0eXBlPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBdHRyRGVmIGRlZmF1bHRWYWx1ZSAqL1xuICAgIGRlZmF1bHRWYWx1ZT86IChJQXR0clZhbHVlfG51bGwpO1xuXG4gICAgLyoqIEF0dHJEZWYgZGVzY3JpcHRpb24gKi9cbiAgICBkZXNjcmlwdGlvbj86IChzdHJpbmd8bnVsbCk7XG5cbiAgICAvKiogQXR0ckRlZiBoYXNNaW5pbXVtICovXG4gICAgaGFzTWluaW11bT86IChib29sZWFufG51bGwpO1xuXG4gICAgLyoqIEF0dHJEZWYgbWluaW11bSAqL1xuICAgIG1pbmltdW0/OiAobnVtYmVyfHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBdHRyRGVmIGFsbG93ZWRWYWx1ZXMgKi9cbiAgICBhbGxvd2VkVmFsdWVzPzogKElBdHRyVmFsdWV8bnVsbCk7XG4gIH1cblxuICAvKiogUHJvcGVydGllcyBvZiBhbiBPcERlcHJlY2F0aW9uLiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSU9wRGVwcmVjYXRpb24ge1xuICAgIC8qKiBPcERlcHJlY2F0aW9uIHZlcnNpb24gKi9cbiAgICB2ZXJzaW9uPzogKG51bWJlcnxudWxsKTtcblxuICAgIC8qKiBPcERlcHJlY2F0aW9uIGV4cGxhbmF0aW9uICovXG4gICAgZXhwbGFuYXRpb24/OiAoc3RyaW5nfG51bGwpO1xuICB9XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGFuIE9wTGlzdC4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJT3BMaXN0IHtcbiAgLyoqIE9wTGlzdCBvcCAqL1xuICBvcD86IChJT3BEZWZbXXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBNZXRhR3JhcGhEZWYuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSU1ldGFHcmFwaERlZiB7XG4gIC8qKiBNZXRhR3JhcGhEZWYgbWV0YUluZm9EZWYgKi9cbiAgbWV0YUluZm9EZWY/OiAoTWV0YUdyYXBoRGVmLklNZXRhSW5mb0RlZnxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIGdyYXBoRGVmICovXG4gIGdyYXBoRGVmPzogKElHcmFwaERlZnxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIHNhdmVyRGVmICovXG4gIHNhdmVyRGVmPzogKElTYXZlckRlZnxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIGNvbGxlY3Rpb25EZWYgKi9cbiAgY29sbGVjdGlvbkRlZj86ICh7W2s6IHN0cmluZ106IElDb2xsZWN0aW9uRGVmfXxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIHNpZ25hdHVyZURlZiAqL1xuICBzaWduYXR1cmVEZWY/OiAoe1trOiBzdHJpbmddOiBJU2lnbmF0dXJlRGVmfXxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIGFzc2V0RmlsZURlZiAqL1xuICBhc3NldEZpbGVEZWY/OiAoSUFzc2V0RmlsZURlZltdfG51bGwpO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIE1ldGFHcmFwaERlZiB7XG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGEgTWV0YUluZm9EZWYuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJTWV0YUluZm9EZWYge1xuICAgIC8qKiBNZXRhSW5mb0RlZiBtZXRhR3JhcGhWZXJzaW9uICovXG4gICAgbWV0YUdyYXBoVmVyc2lvbj86IChzdHJpbmd8bnVsbCk7XG5cbiAgICAvKiogTWV0YUluZm9EZWYgc3RyaXBwZWRPcExpc3QgKi9cbiAgICBzdHJpcHBlZE9wTGlzdD86IChJT3BMaXN0fG51bGwpO1xuXG4gICAgLyoqIE1ldGFJbmZvRGVmIGFueUluZm8gKi9cbiAgICBhbnlJbmZvPzogKElBbnl8bnVsbCk7XG5cbiAgICAvKiogTWV0YUluZm9EZWYgdGFncyAqL1xuICAgIHRhZ3M/OiAoc3RyaW5nW118bnVsbCk7XG5cbiAgICAvKiogTWV0YUluZm9EZWYgdGVuc29yZmxvd1ZlcnNpb24gKi9cbiAgICB0ZW5zb3JmbG93VmVyc2lvbj86IChzdHJpbmd8bnVsbCk7XG5cbiAgICAvKiogTWV0YUluZm9EZWYgdGVuc29yZmxvd0dpdFZlcnNpb24gKi9cbiAgICB0ZW5zb3JmbG93R2l0VmVyc2lvbj86IChzdHJpbmd8bnVsbCk7XG4gIH1cbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBTYXZlZE1vZGVsLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElTYXZlZE1vZGVsIHtcbiAgLyoqIFNhdmVkTW9kZWwgc2F2ZWRNb2RlbFNjaGVtYVZlcnNpb24gKi9cbiAgc2F2ZWRNb2RlbFNjaGVtYVZlcnNpb24/OiAobnVtYmVyfHN0cmluZ3xudWxsKTtcblxuICAvKiogU2F2ZWRNb2RlbCBtZXRhR3JhcGhzICovXG4gIG1ldGFHcmFwaHM/OiAoSU1ldGFHcmFwaERlZltdfG51bGwpO1xufVxuXG4vKiogUHJvcGVydGllcyBvZiBhIEZ1bmN0aW9uRGVmTGlicmFyeS4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJRnVuY3Rpb25EZWZMaWJyYXJ5IHtcbiAgLyoqIEZ1bmN0aW9uRGVmTGlicmFyeSBmdW5jdGlvbiAqL1xuICAnZnVuY3Rpb24nPzogKElGdW5jdGlvbkRlZltdfG51bGwpO1xuXG4gIC8qKiBGdW5jdGlvbkRlZkxpYnJhcnkgZ3JhZGllbnQgKi9cbiAgZ3JhZGllbnQ/OiAoSUdyYWRpZW50RGVmW118bnVsbCk7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGEgRnVuY3Rpb25EZWYuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUZ1bmN0aW9uRGVmIHtcbiAgLyoqIEZ1bmN0aW9uRGVmIHNpZ25hdHVyZSAqL1xuICBzaWduYXR1cmU/OiAoSU9wRGVmfG51bGwpO1xuXG4gIC8qKiBGdW5jdGlvbkRlZiBhdHRyICovXG4gIGF0dHI/OiAoe1trOiBzdHJpbmddOiBJQXR0clZhbHVlfXxudWxsKTtcblxuICAvKiogRnVuY3Rpb25EZWYgbm9kZURlZiAqL1xuICBub2RlRGVmPzogKElOb2RlRGVmW118bnVsbCk7XG5cbiAgLyoqIEZ1bmN0aW9uRGVmIHJldCAqL1xuICByZXQ/OiAoe1trOiBzdHJpbmddOiBzdHJpbmd9fG51bGwpO1xufVxuXG4vKiogUHJvcGVydGllcyBvZiBhIEdyYWRpZW50RGVmLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElHcmFkaWVudERlZiB7XG4gIC8qKiBHcmFkaWVudERlZiBmdW5jdGlvbk5hbWUgKi9cbiAgZnVuY3Rpb25OYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogR3JhZGllbnREZWYgZ3JhZGllbnRGdW5jICovXG4gIGdyYWRpZW50RnVuYz86IChzdHJpbmd8bnVsbCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nconst ENV = env();\n/** Whether to keep intermediate tensors. */\nENV.registerFlag('KEEP_INTERMEDIATE_TENSORS', () => false, debugValue => {\n if (debugValue) {\n console.warn('Keep intermediate tensors is ON. This will print the values of all ' +\n 'intermediate tensors during model inference. Not all models ' +\n 'support this mode. For details, check e2e/benchmarks/ ' +\n 'model_config.js. This significantly impacts performance.');\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBRWxCLDRDQUE0QztBQUM1QyxHQUFHLENBQUMsWUFBWSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtJQUN0RSxJQUFJLFVBQVUsRUFBRTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQ1IscUVBQXFFO1lBQ3JFLDhEQUE4RDtZQUM5RCx3REFBd0Q7WUFDeEQsMERBQTBELENBQUMsQ0FBQztLQUNqRTtBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3QgRU5WID0gZW52KCk7XG5cbi8qKiBXaGV0aGVyIHRvIGtlZXAgaW50ZXJtZWRpYXRlIHRlbnNvcnMuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdLRUVQX0lOVEVSTUVESUFURV9URU5TT1JTJywgKCkgPT4gZmFsc2UsIGRlYnVnVmFsdWUgPT4ge1xuICBpZiAoZGVidWdWYWx1ZSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0tlZXAgaW50ZXJtZWRpYXRlIHRlbnNvcnMgaXMgT04uIFRoaXMgd2lsbCBwcmludCB0aGUgdmFsdWVzIG9mIGFsbCAnICtcbiAgICAgICAgJ2ludGVybWVkaWF0ZSB0ZW5zb3JzIGR1cmluZyBtb2RlbCBpbmZlcmVuY2UuIE5vdCBhbGwgbW9kZWxzICcgK1xuICAgICAgICAnc3VwcG9ydCB0aGlzIG1vZGUuIEZvciBkZXRhaWxzLCBjaGVjayBlMmUvYmVuY2htYXJrcy8gJyArXG4gICAgICAgICdtb2RlbF9jb25maWcuanMuIFRoaXMgc2lnbmlmaWNhbnRseSBpbXBhY3RzIHBlcmZvcm1hbmNlLicpO1xuICB9XG59KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nconst CUSTOM_OPS = {};\n/**\n * Register an Op for graph model executor. This allows you to register\n * TensorFlow custom op or override existing op.\n *\n * Here is an example of registering a new MatMul Op.\n * ```js\n * const customMatmul = (node) =>\n * tf.matMul(\n * node.inputs[0], node.inputs[1],\n * node.attrs['transpose_a'], node.attrs['transpose_b']);\n *\n * tf.registerOp('MatMul', customMatmul);\n * ```\n * The inputs and attrs of the node object are based on the TensorFlow op\n * registry.\n *\n * @param name The Tensorflow Op name.\n * @param opFunc An op function which is called with the current graph node\n * during execution and needs to return a tensor or a list of tensors. The node\n * has the following attributes:\n * - attr: A map from attribute name to its value\n * - inputs: A list of input tensors\n *\n * @doc {heading: 'Models', subheading: 'Op Registry'}\n */\nexport function registerOp(name, opFunc) {\n const opMapper = {\n tfOpName: name,\n category: 'custom',\n inputs: [],\n attrs: [],\n customExecutor: opFunc\n };\n CUSTOM_OPS[name] = opMapper;\n}\n/**\n * Retrieve the OpMapper object for the registered op.\n *\n * @param name The Tensorflow Op name.\n *\n * @doc {heading: 'Models', subheading: 'Op Registry'}\n */\nexport function getRegisteredOp(name) {\n return CUSTOM_OPS[name];\n}\n/**\n * Deregister the Op for graph model executor.\n *\n * @param name The Tensorflow Op name.\n *\n * @doc {heading: 'Models', subheading: 'Op Registry'}\n */\nexport function deregisterOp(name) {\n delete CUSTOM_OPS[name];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9jdXN0b21fb3AvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxVQUFVLEdBQThCLEVBQUUsQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZLEVBQUUsTUFBa0I7SUFDekQsTUFBTSxRQUFRLEdBQWE7UUFDekIsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsUUFBUTtRQUNsQixNQUFNLEVBQUUsRUFBRTtRQUNWLEtBQUssRUFBRSxFQUFFO1FBQ1QsY0FBYyxFQUFFLE1BQU07S0FDdkIsQ0FBQztJQUVGLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWTtJQUMxQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcEV4ZWN1dG9yLCBPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBDVVNUT01fT1BTOiB7W2tleTogc3RyaW5nXTogT3BNYXBwZXJ9ID0ge307XG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gT3AgZm9yIGdyYXBoIG1vZGVsIGV4ZWN1dG9yLiBUaGlzIGFsbG93cyB5b3UgdG8gcmVnaXN0ZXJcbiAqIFRlbnNvckZsb3cgY3VzdG9tIG9wIG9yIG92ZXJyaWRlIGV4aXN0aW5nIG9wLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiByZWdpc3RlcmluZyBhIG5ldyBNYXRNdWwgT3AuXG4gKiBgYGBqc1xuICogY29uc3QgY3VzdG9tTWF0bXVsID0gKG5vZGUpID0+XG4gKiAgICB0Zi5tYXRNdWwoXG4gKiAgICAgICAgbm9kZS5pbnB1dHNbMF0sIG5vZGUuaW5wdXRzWzFdLFxuICogICAgICAgIG5vZGUuYXR0cnNbJ3RyYW5zcG9zZV9hJ10sIG5vZGUuYXR0cnNbJ3RyYW5zcG9zZV9iJ10pO1xuICpcbiAqIHRmLnJlZ2lzdGVyT3AoJ01hdE11bCcsIGN1c3RvbU1hdG11bCk7XG4gKiBgYGBcbiAqIFRoZSBpbnB1dHMgYW5kIGF0dHJzIG9mIHRoZSBub2RlIG9iamVjdCBhcmUgYmFzZWQgb24gdGhlIFRlbnNvckZsb3cgb3BcbiAqIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBUZW5zb3JmbG93IE9wIG5hbWUuXG4gKiBAcGFyYW0gb3BGdW5jIEFuIG9wIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IGdyYXBoIG5vZGVcbiAqIGR1cmluZyBleGVjdXRpb24gYW5kIG5lZWRzIHRvIHJldHVybiBhIHRlbnNvciBvciBhIGxpc3Qgb2YgdGVuc29ycy4gVGhlIG5vZGVcbiAqIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiAgICAtIGF0dHI6IEEgbWFwIGZyb20gYXR0cmlidXRlIG5hbWUgdG8gaXRzIHZhbHVlXG4gKiAgICAtIGlucHV0czogQSBsaXN0IG9mIGlucHV0IHRlbnNvcnNcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ09wIFJlZ2lzdHJ5J31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyT3AobmFtZTogc3RyaW5nLCBvcEZ1bmM6IE9wRXhlY3V0b3IpIHtcbiAgY29uc3Qgb3BNYXBwZXI6IE9wTWFwcGVyID0ge1xuICAgIHRmT3BOYW1lOiBuYW1lLFxuICAgIGNhdGVnb3J5OiAnY3VzdG9tJyxcbiAgICBpbnB1dHM6IFtdLFxuICAgIGF0dHJzOiBbXSxcbiAgICBjdXN0b21FeGVjdXRvcjogb3BGdW5jXG4gIH07XG5cbiAgQ1VTVE9NX09QU1tuYW1lXSA9IG9wTWFwcGVyO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBPcE1hcHBlciBvYmplY3QgZm9yIHRoZSByZWdpc3RlcmVkIG9wLlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBUZW5zb3JmbG93IE9wIG5hbWUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdPcCBSZWdpc3RyeSd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkT3AobmFtZTogc3RyaW5nKTogT3BNYXBwZXIge1xuICByZXR1cm4gQ1VTVE9NX09QU1tuYW1lXTtcbn1cblxuLyoqXG4gKiBEZXJlZ2lzdGVyIHRoZSBPcCBmb3IgZ3JhcGggbW9kZWwgZXhlY3V0b3IuXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIFRlbnNvcmZsb3cgT3AgbmFtZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ09wIFJlZ2lzdHJ5J31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcmVnaXN0ZXJPcChuYW1lOiBzdHJpbmcpIHtcbiAgZGVsZXRlIENVU1RPTV9PUFNbbmFtZV07XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { clone, util } from '@tensorflow/tfjs-core';\nexport function getParamValue(paramName, node, tensorMap, context, resourceManager) {\n const inputParam = node.inputParams[paramName];\n if (inputParam && inputParam.inputIndexStart !== undefined) {\n const start = inputParam.inputIndexStart;\n const end = inputParam.inputIndexEnd === 0 ?\n undefined :\n (inputParam.inputIndexEnd === undefined ? start + 1 :\n inputParam.inputIndexEnd);\n const shiftedStart = start < 0 ? node.inputNames.length + start : start;\n if (inputParam.type === 'tensor') {\n return getTensor(node.inputNames[shiftedStart], tensorMap, context, resourceManager);\n }\n if (inputParam.type === 'tensors') {\n // TODO(mattSoulanille): This filters out NoOp nodes during execution, but\n // these should really never be in the execution graph in the first place.\n // They're necessary for ordering the graph, but should not be visible\n // during execution. Perhaps have different sets of children, one for\n // control dependencies and another for real dependencies.\n const inputs = node.inputs.slice(start, end);\n const inputNames = node.inputNames.slice(start, end)\n .filter((_name, index) => { var _a; return ((_a = inputs[index]) === null || _a === void 0 ? void 0 : _a.op) !== 'NoOp'; });\n return inputNames.map(name => getTensor(name, tensorMap, context, resourceManager));\n }\n const tensor = getTensor(node.inputNames[shiftedStart], tensorMap, context, resourceManager);\n const data = tensor.dataSync();\n return inputParam.type === 'number' ?\n data[0] :\n util.toNestedArray(tensor.shape, data);\n }\n const attrParam = node.attrParams[paramName];\n return attrParam && attrParam.value;\n}\n/**\n * Retrieve the tensor from tensorsMap based on input name.\n * @param name Node input name\n * @param tensorsMap Tensors map keyed by the node\n * @param context contains tensors and information for running the current node.\n * @param resourceManager Optional. Contains global resources of the model.\n */\nexport function getTensor(name, tensorsMap, context, resourceManager) {\n const [nodeName, index] = parseNodeName(name, context);\n if (resourceManager != null) {\n const tensor = resourceManager.getHashTableHandleByName(nodeName);\n if (tensor != null) {\n return tensor;\n }\n }\n const contextId = context.currentContextIds.find(contextId => {\n return !!tensorsMap[getNodeNameWithContextId(nodeName, contextId)];\n });\n return contextId !== undefined ?\n tensorsMap[getNodeNameWithContextId(nodeName, contextId)][index] :\n undefined;\n}\n/**\n * Retrieve the tensors based on input name for current context.\n * @param name Node input name\n * @param tensorsMap Tensors map keyed by the node\n */\nexport function getTensorsForCurrentContext(name, tensorsMap, context) {\n return tensorsMap[getNodeNameWithContextId(name, context.currentContextId)];\n}\n/**\n * Returns the node name, outputName and index from the Node input name.\n * @param inputName The input name of the node, in format of\n * node_name:output_index, i.e. MatMul:0, if the output_index is not set, it is\n * default to 0.\n * If the input name contains output name i.e. StringSplit:indices:0, it will\n * return ['StringSplit', 0, 'indices'].\n */\nexport function getNodeNameAndIndex(inputName, context) {\n const [nodeName, index, outputName] = parseNodeName(inputName, context);\n return [\n getNodeNameWithContextId(nodeName, context && context.currentContextId),\n index, outputName\n ];\n}\nfunction getNodeNameWithContextId(name, contextId) {\n return !!contextId ? `${name}-${contextId}` : name;\n}\nexport function parseNodeName(name, context) {\n if (name === '') {\n return ['', 0, undefined];\n }\n const isCacheEnabled = context != null && context.parseNodeNameCache != null;\n if (isCacheEnabled) {\n const cachedResult = context.parseNodeNameCache.get(name);\n if (cachedResult != null) {\n return cachedResult;\n }\n }\n const parts = name.split(':');\n let result;\n if (parts.length === 1) {\n result = [name, 0, undefined];\n }\n else {\n const nodeName = parts[0];\n const outputName = parts.length === 3 ? parts[1] : undefined;\n const index = Number(parts[parts.length - 1]);\n result = [nodeName, index, outputName];\n }\n if (isCacheEnabled) {\n context.parseNodeNameCache.set(name, result);\n }\n return result;\n}\nexport function split(arr, size) {\n const res = [];\n for (let i = 0; i < arr.length; i += size) {\n res.push(arr.slice(i, i + size));\n }\n return res;\n}\nexport function getPadding(node, tensorMap, context) {\n let pad = getParamValue('pad', node, tensorMap, context);\n if (pad === 'explicit') {\n // This is 1d array, we need to convert it to 2d array\n pad = getParamValue('explicitPaddings', node, tensorMap, context);\n const explicitPadding = [[0, 0], [0, 0], [0, 0], [0, 0]];\n for (let i = 0; i < 4; i++) {\n explicitPadding[i][0] = pad[i * 2];\n explicitPadding[i][1] = pad[i * 2 + 1];\n }\n return explicitPadding;\n }\n return pad;\n}\n/**\n * Reuse the tensor if it is marked as keep, otherwise clone the tensor to\n * avoid disposal. This is important for TensorArray and TensorList ops, since\n * internally they use a tensor as the id for TensorArray and TensorList, and\n * to simplify lookup, they also use Tensor.id as the key to the internal map.\n * These id tensors have been marked as kept in the backend, we need avoid clone\n * them in order to create new Tensor.id.\n * @param tensor\n */\nexport function cloneTensor(tensor) {\n return tensor.kept ? tensor : clone(tensor);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBVSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQU8xRCxNQUFNLFVBQVUsYUFBYSxDQUN6QixTQUFpQixFQUFFLElBQVUsRUFBRSxTQUEwQixFQUN6RCxPQUF5QixFQUFFLGVBQWlDO0lBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7UUFDMUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxVQUFVLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNYLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RSxNQUFNLFlBQVksR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2hDLE9BQU8sU0FBUyxDQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztTQUN6RTtRQUNELElBQUksVUFB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QUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUksR0FBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakQsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLEdBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0RDtRQUNELE9BQU8sZUFBZSxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQWM7SUFDeEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Nsb25lLCBUZW5zb3IsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtSZXNvdXJjZU1hbmFnZXJ9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL3Jlc291cmNlX21hbmFnZXInO1xuaW1wb3J0IHtOb2RlLCBWYWx1ZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtVmFsdWUoXG4gICAgcGFyYW1OYW1lOiBzdHJpbmcsIG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIHJlc291cmNlTWFuYWdlcj86IFJlc291cmNlTWFuYWdlcik6IFZhbHVlVHlwZSB7XG4gIGNvbnN0IGlucHV0UGFyYW0gPSBub2RlLmlucHV0UGFyYW1zW3BhcmFtTmFtZV07XG4gIGlmIChpbnB1dFBhcmFtICYmIGlucHV0UGFyYW0uaW5wdXRJbmRleFN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzdGFydCA9IGlucHV0UGFyYW0uaW5wdXRJbmRleFN0YXJ0O1xuICAgIGNvbnN0IGVuZCA9IGlucHV0UGFyYW0uaW5wdXRJbmRleEVuZCA9PT0gMCA/XG4gICAgICAgIHVuZGVmaW5lZCA6XG4gICAgICAgIChpbnB1dFBhcmFtLmlucHV0SW5kZXhFbmQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0ICsgMSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW0uaW5wdXRJbmRleEVuZCk7XG4gICAgY29uc3Qgc2hpZnRlZFN0YXJ0ID0gc3RhcnQgPCAwID8gbm9kZS5pbnB1dE5hbWVzLmxlbmd0aCArIHN0YXJ0IDogc3RhcnQ7XG4gICAgaWYgKGlucHV0UGFyYW0udHlwZSA9PT0gJ3RlbnNvcicpIHtcbiAgICAgIHJldHVybiBnZXRUZW5zb3IoXG4gICAgICAgICAgbm9kZS5pbnB1dE5hbWVzW3NoaWZ0ZWRTdGFydF0sIHRlbnNvck1hcCwgY29udGV4dCwgcmVzb3VyY2VNYW5hZ2VyKTtcbiAgICB9XG4gICAgaWYgKGlucHV0UGFyYW0udHlwZSA9PT0gJ3RlbnNvcnMnKSB7XG4gICAgICAvLyBUT0RPKG1hdHRTb3VsYW5pbGxlKTogVGhpcyBmaWx0ZXJzIG91dCBOb09wIG5vZGVzIGR1cmluZyBleGVjdXRpb24sIGJ1dFxuICAgICAgLy8gdGhlc2Ugc2hvdWxkIHJlYWxseSBuZXZlciBiZSBpbiB0aGUgZXhlY3V0aW9uIGdyYXBoIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICAgIC8vIFRoZXkncmUgbmVjZXNzYXJ5IGZvciBvcmRlcmluZyB0aGUgZ3JhcGgsIGJ1dCBzaG91bGQgbm90IGJlIHZpc2libGVcbiAgICAgIC8vIGR1cmluZyBleGVjdXRpb24uIFBlcmhhcHMgaGF2ZSBkaWZmZXJlbnQgc2V0cyBvZiBjaGlsZHJlbiwgb25lIGZvclxuICAgICAgLy8gY29udHJvbCBkZXBlbmRlbmNpZXMgYW5kIGFub3RoZXIgZm9yIHJlYWwgZGVwZW5kZW5jaWVzLlxuICAgICAgY29uc3QgaW5wdXRzID0gbm9kZS5pbnB1dHMuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICBjb25zdCBpbnB1dE5hbWVzID0gbm9kZS5pbnB1dE5hbWVzLnNsaWNlKHN0YXJ0LCBlbmQpXG4gICAgICAgIC5maWx0ZXIoKF9uYW1lLCBpbmRleCkgPT4gaW5wdXRzW2luZGV4XT8ub3AgIT09ICdOb09wJyk7XG5cbiAgICAgIHJldHVybiBpbnB1dE5hbWVzLm1hcChcbiAgICAgICAgICBuYW1lID0+IGdldFRlbnNvcihuYW1lLCB0ZW5zb3JNYXAsIGNvbnRleHQsIHJlc291cmNlTWFuYWdlcikpO1xuICAgIH1cbiAgICBjb25zdCB0ZW5zb3IgPSBnZXRUZW5zb3IoXG4gICAgICAgIG5vZGUuaW5wdXROYW1lc1tzaGlmdGVkU3RhcnRdLCB0ZW5zb3JNYXAsIGNvbnRleHQsIHJlc291cmNlTWFuYWdlcik7XG4gICAgY29uc3QgZGF0YSA9IHRlbnNvci5kYXRhU3luYygpO1xuICAgIHJldHVybiBpbnB1dFBhcmFtLnR5cGUgPT09ICdudW1iZXInID9cbiAgICAgICAgZGF0YVswXSA6XG4gICAgICAgIHV0aWwudG9OZXN0ZWRBcnJheSh0ZW5zb3Iuc2hhcGUsIGRhdGEpO1xuICB9XG4gIGNvbnN0IGF0dHJQYXJhbSA9IG5vZGUuYXR0clBhcmFtc1twYXJhbU5hbWVdO1xuICByZXR1cm4gYXR0clBhcmFtICYmIGF0dHJQYXJhbS52YWx1ZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgdGVuc29yIGZyb20gdGVuc29yc01hcCBiYXNlZCBvbiBpbnB1dCBuYW1lLlxuICogQHBhcmFtIG5hbWUgTm9kZSBpbnB1dCBuYW1lXG4gKiBAcGFyYW0gdGVuc29yc01hcCBUZW5zb3JzIG1hcCBrZXllZCBieSB0aGUgbm9kZVxuICogQHBhcmFtIGNvbnRleHQgY29udGFpbnMgdGVuc29ycyBhbmQgaW5mb3JtYXRpb24gZm9yIHJ1bm5pbmcgdGhlIGN1cnJlbnQgbm9kZS5cbiAqIEBwYXJhbSByZXNvdXJjZU1hbmFnZXIgT3B0aW9uYWwuIENvbnRhaW5zIGdsb2JhbCByZXNvdXJjZXMgb2YgdGhlIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVuc29yKFxuICAgIG5hbWU6IHN0cmluZywgdGVuc29yc01hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgIHJlc291cmNlTWFuYWdlcj86IFJlc291cmNlTWFuYWdlcik6IFRlbnNvciB7XG4gIGNvbnN0IFtub2RlTmFtZSwgaW5kZXhdID0gcGFyc2VOb2RlTmFtZShuYW1lLCBjb250ZXh0KTtcblxuICBpZiAocmVzb3VyY2VNYW5hZ2VyICE9IG51bGwpIHtcbiAgICBjb25zdCB0ZW5zb3IgPSByZXNvdXJjZU1hbmFnZXIuZ2V0SGFzaFRhYmxlSGFuZGxlQnlOYW1lKG5vZGVOYW1lKTtcbiAgICBpZiAodGVuc29yICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0ZW5zb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29udGV4dElkID0gY29udGV4dC5jdXJyZW50Q29udGV4dElkcy5maW5kKGNvbnRleHRJZCA9PiB7XG4gICAgcmV0dXJuICEhdGVuc29yc01hcFtnZXROb2RlTmFtZVdpdGhDb250ZXh0SWQobm9kZU5hbWUsIGNvbnRleHRJZCldO1xuICB9KTtcblxuICByZXR1cm4gY29udGV4dElkICE9PSB1bmRlZmluZWQgP1xuICAgICAgdGVuc29yc01hcFtnZXROb2RlTmFtZVdpdGhDb250ZXh0SWQobm9kZU5hbWUsIGNvbnRleHRJZCldW2luZGV4XSA6XG4gICAgICB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHRlbnNvcnMgYmFzZWQgb24gaW5wdXQgbmFtZSBmb3IgY3VycmVudCBjb250ZXh0LlxuICogQHBhcmFtIG5hbWUgTm9kZSBpbnB1dCBuYW1lXG4gKiBAcGFyYW0gdGVuc29yc01hcCBUZW5zb3JzIG1hcCBrZXllZCBieSB0aGUgbm9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVuc29yc0ZvckN1cnJlbnRDb250ZXh0KFxuICAgIG5hbWU6IHN0cmluZywgdGVuc29yc01hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpOiBUZW5zb3JbXSB7XG4gIHJldHVybiB0ZW5zb3JzTWFwW2dldE5vZGVOYW1lV2l0aENvbnRleHRJZChuYW1lLCBjb250ZXh0LmN1cnJlbnRDb250ZXh0SWQpXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG5hbWUsIG91dHB1dE5hbWUgYW5kIGluZGV4IGZyb20gdGhlIE5vZGUgaW5wdXQgbmFtZS5cbiAqIEBwYXJhbSBpbnB1dE5hbWUgVGhlIGlucHV0IG5hbWUgb2YgdGhlIG5vZGUsIGluIGZvcm1hdCBvZlxuICogbm9kZV9uYW1lOm91dHB1dF9pbmRleCwgaS5lLiBNYXRNdWw6MCwgaWYgdGhlIG91dHB1dF9pbmRleCBpcyBub3Qgc2V0LCBpdCBpc1xuICogZGVmYXVsdCB0byAwLlxuICogSWYgdGhlIGlucHV0IG5hbWUgY29udGFpbnMgb3V0cHV0IG5hbWUgaS5lLiBTdHJpbmdTcGxpdDppbmRpY2VzOjAsIGl0IHdpbGxcbiAqIHJldHVybiBbJ1N0cmluZ1NwbGl0JywgMCwgJ2luZGljZXMnXS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVOYW1lQW5kSW5kZXgoXG4gICAgaW5wdXROYW1lOiBzdHJpbmcsIGNvbnRleHQ/OiBFeGVjdXRpb25Db250ZXh0KTogW3N0cmluZywgbnVtYmVyLCBzdHJpbmddIHtcbiAgY29uc3QgW25vZGVOYW1lLCBpbmRleCwgb3V0cHV0TmFtZV0gPSBwYXJzZU5vZGVOYW1lKGlucHV0TmFtZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIFtcbiAgICBnZXROb2RlTmFtZVdpdGhDb250ZXh0SWQobm9kZU5hbWUsIGNvbnRleHQgJiYgY29udGV4dC5jdXJyZW50Q29udGV4dElkKSxcbiAgICBpbmRleCwgb3V0cHV0TmFtZVxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlTmFtZVdpdGhDb250ZXh0SWQobmFtZTogc3RyaW5nLCBjb250ZXh0SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gISFjb250ZXh0SWQgPyBgJHtuYW1lfS0ke2NvbnRleHRJZH1gIDogbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTm9kZU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLCBjb250ZXh0PzogRXhlY3V0aW9uQ29udGV4dCk6IFtzdHJpbmcsIG51bWJlciwgc3RyaW5nP10ge1xuICBpZiAobmFtZSA9PT0gJycpIHtcbiAgICByZXR1cm4gWycnLCAwLCB1bmRlZmluZWRdO1xuICB9XG5cbiAgY29uc3QgaXNDYWNoZUVuYWJsZWQgPSBjb250ZXh0ICE9IG51bGwgJiYgY29udGV4dC5wYXJzZU5vZGVOYW1lQ2FjaGUgIT0gbnVsbDtcbiAgaWYgKGlzQ2FjaGVFbmFibGVkKSB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY29udGV4dC5wYXJzZU5vZGVOYW1lQ2FjaGUuZ2V0KG5hbWUpO1xuICAgIGlmIChjYWNoZWRSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KCc6Jyk7XG4gIGxldCByZXN1bHQ6IFtzdHJpbmcsIG51bWJlciwgc3RyaW5nP107XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXN1bHQgPSBbbmFtZSwgMCwgdW5kZWZpbmVkXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBub2RlTmFtZSA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IG91dHB1dE5hbWUgPSBwYXJ0cy5sZW5ndGggPT09IDMgPyBwYXJ0c1sxXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpbmRleCA9IE51bWJlcihwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSk7XG4gICAgcmVzdWx0ID0gW25vZGVOYW1lLCBpbmRleCwgb3V0cHV0TmFtZV07XG4gIH1cbiAgaWYgKGlzQ2FjaGVFbmFibGVkKSB7XG4gICAgY29udGV4dC5wYXJzZU5vZGVOYW1lQ2FjaGUuc2V0KG5hbWUsIHJlc3VsdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0KGFycjogbnVtYmVyW10sIHNpemU6IG51bWJlcikge1xuICBjb25zdCByZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IHNpemUpIHtcbiAgICByZXMucHVzaChhcnIuc2xpY2UoaSwgaSArIHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZGRpbmcoXG4gICAgbm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCk6IFZhbHVlVHlwZSB7XG4gIGxldCBwYWQgPSBnZXRQYXJhbVZhbHVlKCdwYWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICBpZiAocGFkID09PSAnZXhwbGljaXQnKSB7XG4gICAgLy8gVGhpcyBpcyAxZCBhcnJheSwgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIDJkIGFycmF5XG4gICAgcGFkID0gZ2V0UGFyYW1WYWx1ZSgnZXhwbGljaXRQYWRkaW5ncycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgY29uc3QgZXhwbGljaXRQYWRkaW5nOiBbXG4gICAgICBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXG4gICAgXSA9IFtbMCwgMF0sIFswLCAwXSwgWzAsIDBdLCBbMCwgMF1dO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICBleHBsaWNpdFBhZGRpbmdbaV1bMF0gPSAocGFkIGFzIG51bWJlcltdKVtpICogMl07XG4gICAgICBleHBsaWNpdFBhZGRpbmdbaV1bMV0gPSAocGFkIGFzIG51bWJlcltdKVtpICogMiArIDFdO1xuICAgIH1cbiAgICByZXR1cm4gZXhwbGljaXRQYWRkaW5nO1xuICB9XG4gIHJldHVybiBwYWQ7XG59XG5cbi8qKlxuICogIFJldXNlIHRoZSB0ZW5zb3IgaWYgaXQgaXMgbWFya2VkIGFzIGtlZXAsIG90aGVyd2lzZSBjbG9uZSB0aGUgdGVuc29yIHRvXG4gKiAgYXZvaWQgZGlzcG9zYWwuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBUZW5zb3JBcnJheSBhbmQgVGVuc29yTGlzdCBvcHMsIHNpbmNlXG4gKiAgaW50ZXJuYWxseSB0aGV5IHVzZSBhIHRlbnNvciBhcyB0aGUgaWQgZm9yIFRlbnNvckFycmF5IGFuZCBUZW5zb3JMaXN0LCBhbmRcbiAqIHRvIHNpbXBsaWZ5IGxvb2t1cCwgdGhleSBhbHNvIHVzZSBUZW5zb3IuaWQgYXMgdGhlIGtleSB0byB0aGUgaW50ZXJuYWwgbWFwLlxuICogVGhlc2UgaWQgdGVuc29ycyBoYXZlIGJlZW4gbWFya2VkIGFzIGtlcHQgaW4gdGhlIGJhY2tlbmQsIHdlIG5lZWQgYXZvaWQgY2xvbmVcbiAqIHRoZW0gaW4gb3JkZXIgdG8gY3JlYXRlIG5ldyBUZW5zb3IuaWQuXG4gKiBAcGFyYW0gdGVuc29yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZVRlbnNvcih0ZW5zb3I6IFRlbnNvcik6IFRlbnNvciB7XG4gIHJldHVybiB0ZW5zb3Iua2VwdCA/IHRlbnNvciA6IGNsb25lKHRlbnNvcik7XG59XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Add',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'AddV2',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'AddN',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n }\n ]\n },\n {\n 'tfOpName': 'BiasAdd',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sub',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'RealDiv',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Div',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'DivNoNan',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'FloorDiv',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Mul',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Maximum',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Minimum',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Pow',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'SquaredDifference',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Mod',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'FloorMod',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpdGhtZXRpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvYXJpdGhtZXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsS0FBSztRQUNqQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFB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RUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBZGQnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FkZFYyJyxcbiAgICAnY2F0ZWdvcnknOiAnYXJpdGhtZXRpYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBZGROJyxcbiAgICAnY2F0ZWdvcnknOiAnYXJpdGhtZXRpYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ2VuZCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcnMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3JzJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdCaWFzQWRkJyxcbiAgICAnY2F0ZWdvcnknOiAnYXJpdGhtZXRpYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkYXRhX2Zvcm1hdCcsXG4gICAgICAgICduYW1lJzogJ2RhdGFGb3JtYXQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTdWInLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1JlYWxEaXYnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0RpdicsXG4gICAgJ2NhdGVnb3J5JzogJ2FyaXRobWV0aWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRGl2Tm9OYW4nLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Zsb29yRGl2JyxcbiAgICAnY2F0ZWdvcnknOiAnYXJpdGhtZXRpYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdNdWwnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ01heGltdW0nLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ01pbmltdW0nLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1BvdycsXG4gICAgJ2NhdGVnb3J5JzogJ2FyaXRobWV0aWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3F1YXJlZERpZmZlcmVuY2UnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ01vZCcsXG4gICAgJ2NhdGVnb3J5JzogJ2FyaXRobWV0aWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRmxvb3JNb2QnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Abs',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Acos',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Asin',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Atan',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Atan2',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'y',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Ceil',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'ClipByValue',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'clipValueMin',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'clipValueMax',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Complex',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'real',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'imag',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'ComplexAbs',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Cos',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Cosh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Elu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Exp',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Floor',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Log',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Imag',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'outputType',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Neg',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Real',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'outputType',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Prelu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'alpha',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Relu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Relu6',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Selu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sigmoid',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sin',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sinh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sqrt',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Rsqrt',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Square',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Tan',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Tanh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sign',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Round',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Expm1',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Log1p',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Reciprocal',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Softplus',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Asinh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Acosh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Atanh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Erf',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LeakyRelu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'alpha',\n 'name': 'alpha',\n 'type': 'number',\n 'defaultValue': 0.2\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'IsNan',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'IsFinite',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'IsInf',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNfbWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvYmFzaWNfbWF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsS0FBSztRQUNqQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7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LEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsVUFBVTtRQUN0QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FicycsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBY29zJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FzaW4nLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQXRhbicsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBdGFuMicsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd5JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ2VpbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDbGlwQnlWYWx1ZScsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdjbGlwVmFsdWVNaW4nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdjbGlwVmFsdWVNYXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDb21wbGV4JyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAncmVhbCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2ltYWcnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDb21wbGV4QWJzJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvcycsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDb3NoJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0VsdScsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFeHAnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRmxvb3InLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9nJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0ltYWcnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVG91dCcsXG4gICAgICAgICduYW1lJzogJ291dHB1dFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ05lZycsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSZWFsJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1RvdXQnLFxuICAgICAgICAnbmFtZSc6ICdvdXRwdXRUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdQcmVsdScsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdhbHBoYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1JlbHUnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmVsdTYnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU2VsdScsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTaWdtb2lkJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NpbicsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTaW5oJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NxcnQnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUnNxcnQnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3F1YXJlJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RhbicsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUYW5oJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NpZ24nLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUm91bmQnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRXhwbTEnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9nMXAnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmVjaXByb2NhbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTb2Z0cGx1cycsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBc2luaCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBY29zaCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBdGFuaCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFcmYnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTGVha3lSZWx1JyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdhbHBoYScsXG4gICAgICAgICduYW1lJzogJ2FscGhhJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAuMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0lzTmFuJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0lzRmluaXRlJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0lzSW5mJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'EmptyTensorList',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'start': 1,\n 'name': 'maxNumElements',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'LoopCond',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'pred',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Switch',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'data',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'pred',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Merge',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n }\n ]\n },\n {\n 'tfOpName': 'Enter',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'frame_name',\n 'name': 'frameName',\n 'type': 'string'\n },\n {\n 'tfName': 'is_constant',\n 'name': 'isConstant',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Exit',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'NextIteration',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'size',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'element_shape',\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'tfName': 'dynamic_size',\n 'name': 'dynamicSize',\n 'type': 'bool'\n },\n {\n 'tfName': 'clear_after_read',\n 'name': 'clearAfterRead',\n 'type': 'bool'\n },\n {\n 'tfName': 'identical_element_shapes',\n 'name': 'identicalElementShapes',\n 'type': 'bool'\n },\n {\n 'tfName': 'tensor_array_name',\n 'name': 'name',\n 'type': 'string'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayWriteV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'index',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayReadV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'index',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayGatherV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'element_shape',\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayScatterV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayConcatV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'element_shape_except0',\n 'name': 'elementShapeExcept0',\n 'type': 'shape',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorArraySplitV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'lengths',\n 'type': 'number[]'\n },\n {\n 'start': 3,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArraySizeV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayCloseV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'StatelessIf',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'cond',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'then_branch',\n 'name': 'thenBranch',\n 'type': 'func'\n },\n {\n 'tfName': 'else_branch',\n 'name': 'elseBranch',\n 'type': 'func'\n }\n ]\n },\n {\n 'tfOpName': 'If',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'cond',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'then_branch',\n 'name': 'thenBranch',\n 'type': 'func'\n },\n {\n 'tfName': 'else_branch',\n 'name': 'elseBranch',\n 'type': 'func'\n }\n ]\n },\n {\n 'tfOpName': 'StatelessWhile',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'cond',\n 'name': 'cond',\n 'type': 'func'\n },\n {\n 'tfName': 'body',\n 'name': 'body',\n 'type': 'func'\n }\n ]\n },\n {\n 'tfOpName': 'While',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'cond',\n 'name': 'cond',\n 'type': 'func'\n },\n {\n 'tfName': 'body',\n 'name': 'body',\n 'type': 'func'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListScatter',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListScatterV2',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'start': 3,\n 'name': 'numElements',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListGather',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListGetItem',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'index',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListSetItem',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'index',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListReserve',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'start': 1,\n 'name': 'numElements',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListFromTensor',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListStack',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n },\n {\n 'tfName': 'num_elements',\n 'name': 'numElements',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListSplit',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'start': 2,\n 'name': 'lengths',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListConcat',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_shape',\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListConcatV2',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_shape',\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListPopBack',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListPushBack',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListLength',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListResize',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsaUJBQWlCO1FBQzdCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxnQkFBZ0I7Z0JBQ3hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsUUFBUTtRQUNwQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJ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VUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGtCQUFrQjtRQUM5QixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsa0JBQWtCO1FBQzlCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtDQUNGLENBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFbXB0eVRlbnNvckxpc3QnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ21heE51bUVsZW1lbnRzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50RFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9vcENvbmQnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdwcmVkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTd2l0Y2gnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdkYXRhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAncHJlZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWVyZ2UnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29ycycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0VudGVyJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZnJhbWVfbmFtZScsXG4gICAgICAgICduYW1lJzogJ2ZyYW1lTmFtZScsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnaXNfY29uc3RhbnQnLFxuICAgICAgICAnbmFtZSc6ICdpc0NvbnN0YW50JyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRXhpdCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ05leHRJdGVyYXRpb24nLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheVYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfc2hhcGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZHluYW1pY19zaXplJyxcbiAgICAgICAgJ25hbWUnOiAnZHluYW1pY1NpemUnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdjbGVhcl9hZnRlcl9yZWFkJyxcbiAgICAgICAgJ25hbWUnOiAnY2xlYXJBZnRlclJlYWQnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdpZGVudGljYWxfZWxlbWVudF9zaGFwZXMnLFxuICAgICAgICAnbmFtZSc6ICdpZGVudGljYWxFbGVtZW50U2hhcGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAndGVuc29yX2FycmF5X25hbWUnLFxuICAgICAgICAnbmFtZSc6ICduYW1lJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheVdyaXRlVjMnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JBcnJheUlkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kZXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdmbG93SW4nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheVJlYWRWMycsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvckFycmF5SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRleCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2Zsb3dJbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheUdhdGhlclYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yQXJyYXlJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2luZGljZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2Zsb3dJbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfc2hhcGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVGVuc29yQXJyYXlTY2F0dGVyVjMnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JBcnJheUlkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAndGVuc29yJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnZmxvd0luJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheUNvbmNhdFYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yQXJyYXlJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2Zsb3dJbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfc2hhcGVfZXhjZXB0MCcsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnRTaGFwZUV4Y2VwdDAnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckFycmF5U3BsaXRWMycsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvckFycmF5SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdsZW5ndGhzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdmbG93SW4nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckFycmF5U2l6ZVYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yQXJyYXlJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2Zsb3dJbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVGVuc29yQXJyYXlDbG9zZVYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yQXJyYXlJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RhdGVsZXNzSWYnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdjb25kJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ2VuZCc6IDAsXG4gICAgICAgICduYW1lJzogJ2FyZ3MnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3JzJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3RoZW5fYnJhbmNoJyxcbiAgICAgICAgJ25hbWUnOiAndGhlbkJyYW5jaCcsXG4gICAgICAgICd0eXBlJzogJ2Z1bmMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2Vsc2VfYnJhbmNoJyxcbiAgICAgICAgJ25hbWUnOiAnZWxzZUJyYW5jaCcsXG4gICAgICAgICd0eXBlJzogJ2Z1bmMnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0lmJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnY29uZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhcmdzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd0aGVuX2JyYW5jaCcsXG4gICAgICAgICduYW1lJzogJ3RoZW5CcmFuY2gnLFxuICAgICAgICAndHlwZSc6ICdmdW5jJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbHNlX2JyYW5jaCcsXG4gICAgICAgICduYW1lJzogJ2Vsc2VCcmFuY2gnLFxuICAgICAgICAndHlwZSc6ICdmdW5jJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTdGF0ZWxlc3NXaGlsZScsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhcmdzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdjb25kJyxcbiAgICAgICAgJ25hbWUnOiAnY29uZCcsXG4gICAgICAgICd0eXBlJzogJ2Z1bmMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2JvZHknLFxuICAgICAgICAnbmFtZSc6ICdib2R5JyxcbiAgICAgICAgJ3R5cGUnOiAnZnVuYydcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnV2hpbGUnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAnYXJncycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnY29uZCcsXG4gICAgICAgICduYW1lJzogJ2NvbmQnLFxuICAgICAgICAndHlwZSc6ICdmdW5jJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdib2R5JyxcbiAgICAgICAgJ25hbWUnOiAnYm9keScsXG4gICAgICAgICd0eXBlJzogJ2Z1bmMnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RTY2F0dGVyJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnc2hhcGUnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnREVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JMaXN0U2NhdHRlclYyJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnc2hhcGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdudW1FbGVtZW50cycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RHYXRoZXInLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RHZXRJdGVtJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yTGlzdElkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kZXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RTZXRJdGVtJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yTGlzdElkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kZXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnREVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JMaXN0UmVzZXJ2ZScsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnRTaGFwZScsXG4gICAgICAgICd0eXBlJzogJ3NoYXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnbnVtRWxlbWVudHMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnREVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JMaXN0RnJvbVRlbnNvcicsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnRTaGFwZScsXG4gICAgICAgICd0eXBlJzogJ3NoYXBlJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50RFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVGVuc29yTGlzdFN0YWNrJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yTGlzdElkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnc2hhcGUnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnREVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdudW1fZWxlbWVudHMnLFxuICAgICAgICAnbmFtZSc6ICdudW1FbGVtZW50cycsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JMaXN0U3BsaXQnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2xlbmd0aHMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RDb25jYXQnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9zaGFwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnRTaGFwZScsXG4gICAgICAgICd0eXBlJzogJ3NoYXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RDb25jYXRWMicsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvckxpc3RJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X3NoYXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnc2hhcGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50RFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVGVuc29yTGlzdFBvcEJhY2snLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RQdXNoQmFjaycsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvckxpc3RJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RMZW5ndGgnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RSZXNpemUnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'AvgPool',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'MaxPool',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': [],\n 'notSupported': true\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'MaxPoolWithArgmax',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'include_batch_in_index',\n 'name': 'includeBatchInIndex',\n 'type': 'bool'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'AvgPool3D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'MaxPool3D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Conv1D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'stride',\n 'name': 'stride',\n 'type': 'number'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NWC'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'dilation',\n 'name': 'dilation',\n 'type': 'number',\n 'defaultValue': 1\n }\n ]\n },\n {\n 'tfOpName': 'Conv2D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'useCudnnOnGpu',\n 'name': 'useCudnnOnGpu',\n 'type': 'bool'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': '_FusedConv2D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_args',\n 'name': 'numArgs',\n 'type': 'number'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'use_cudnn_on_gpu',\n 'name': 'useCudnnOnGpu',\n 'type': 'bool',\n 'defaultValue': true\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]',\n 'defaultValue': [\n 1,\n 1,\n 1,\n 1\n ]\n },\n {\n 'tfName': 'fused_ops',\n 'name': 'fusedOps',\n 'type': 'string[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.0001\n },\n {\n 'tfName': 'leakyrelu_alpha',\n 'name': 'leakyreluAlpha',\n 'type': 'number',\n 'defaultValue': 0.2\n }\n ]\n },\n {\n 'tfOpName': 'Conv2DBackpropInput',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 2,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n },\n {\n 'start': 0,\n 'name': 'outputShape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'DepthwiseConv2d',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'DepthwiseConv2dNative',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'FusedDepthwiseConv2dNative',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_args',\n 'name': 'numArgs',\n 'type': 'number'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]',\n 'defaultValue': [\n 1,\n 1,\n 1,\n 1\n ]\n },\n {\n 'tfName': 'fused_ops',\n 'name': 'fusedOps',\n 'type': 'string[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n }\n ]\n },\n {\n 'tfOpName': 'Conv3D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'Dilation2D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'rates',\n 'name': 'dilations',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udm9sdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L2NvbnZvbHV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsYUFBYTtRQUN6QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsVUFBVTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsVUFBVTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixjQUFjLEVBQUUsRUFBRTtnQkFDbEIsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxtQkFBbUI7UUFDL0IsVUFBVSxFQUFFLGFBQWE7UUFDekIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLHdCQUF3QjtnQkFDbEMsTUFBTSxFQUFFLHFCQUFxQjtnQkFDN0IsTUFBTSxFQUFFLE1BQU07YUFDZjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFdBQVc7UUFDdkIsVUFBVSxFQUFFLGFBQWE7UUFDekIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsSUFBSTthQUNyQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsUUFBUTtRQUNwQixVQUFVLEVBQUUsYUFBYTtRQUN6QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxLQUFLO2FBQ3RCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsQ0FBQzthQUNsQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsTUFBTTthQUN2QjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixjQUFjLEVBQUUsRUFBRTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixNQUFNLEVBQUUsV0FBVztnQkFDbkIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsY0FBYztRQUMxQixVQUFVLEVBQUUsYUFBYTtRQUN6QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxTQUFTO2FBQ2xCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsTUFBTSxFQUFFLGtCQUFrQjtnQkFDMUIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLGNBQWMsRUFBRSxFQUFFO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLE1BQU07YUFDdkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixjQUFjLEVBQUU7b0JBQ2QsQ0FBQztvQkFDRCxDQUFDO29CQUNELENBQUM7b0JBQ0QsQ0FBQztpQkFDRjthQUNGO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsY0FBYyxFQUFFLEVBQUU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsTUFBTTthQUN2QjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLE1BQU0sRUFBRSxnQkFBZ0I7Z0JBQ3hCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsR0FBRzthQUNwQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxxQkFBcUI7UUFDakMsVUFBVSxFQUFFLGFBQWE7UUFDekIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsYUFBYTtnQkFDckIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsSUFBSTthQUNyQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixjQUFjLEVBQUUsRUFBRTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixNQUFNLEVBQUUsV0FBVztnQkFDbkIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGlCQUFpQjtRQUM3QixVQUFVLEVBQUUsYUFBYTtRQUN6QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsVUFBVTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxNQUFNO2FBQ3ZCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsTUFBTSxFQUFFLGtCQUFrQjtnQkFDMUIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLGNBQWMsRUFBRSxFQUFFO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixNQUFNLEVBQUUsVUFBVTthQUNuQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSx1QkFBdUI7UUFDbkMsVUFBVSxFQUFFLGFBQWE7UUFDekIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsTUFBTTthQUN2QjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixjQUFjLEVBQUUsRUFBRTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixNQUFNLEVBQUUsV0FBVztnQkFDbkIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsNEJBQTRCO1FBQ3hDLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFNBQVM7YUFDbEI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsTUFBTTthQUN2QjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixNQUFNLEVBQUUsV0FBVztnQkFDbkIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLGNBQWMsRUFBRTtvQkFDZCxDQUFDO29CQUNELENBQUM7b0JBQ0QsQ0FBQztvQkFDRCxDQUFDO2lCQUNGO2FBQ0Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixjQUFjLEVBQUUsRUFBRTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixjQUFjLEVBQUUsRUFBRTthQUNuQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLE1BQU07YUFDdkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFlBQVk7UUFDeEIsVUFBVSxFQUFFLGFBQWE7UUFDekIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtDQUNGLENBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBdmdQb29sJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna3NpemUnLFxuICAgICAgICAnbmFtZSc6ICdrZXJuZWxTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWF4UG9vbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnZvbHV0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2tzaXplJyxcbiAgICAgICAgJ25hbWUnOiAna2VybmVsU2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdleHBsaWNpdF9wYWRkaW5ncycsXG4gICAgICAgICduYW1lJzogJ2V4cGxpY2l0UGFkZGluZ3MnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXScsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBbXSxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdNYXhQb29sV2l0aEFyZ21heCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnZvbHV0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2tzaXplJyxcbiAgICAgICAgJ25hbWUnOiAna2VybmVsU2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdpbmNsdWRlX2JhdGNoX2luX2luZGV4JyxcbiAgICAgICAgJ25hbWUnOiAnaW5jbHVkZUJhdGNoSW5JbmRleCcsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQXZnUG9vbDNEJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna3NpemUnLFxuICAgICAgICAnbmFtZSc6ICdrZXJuZWxTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWF4UG9vbDNEJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna3NpemUnLFxuICAgICAgICAnbmFtZSc6ICdrZXJuZWxTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ29udjFEJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdmaWx0ZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlJyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ25hbWUnOiAncGFkJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkYXRhX2Zvcm1hdCcsXG4gICAgICAgICduYW1lJzogJ2RhdGFGb3JtYXQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogJ05XQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkaWxhdGlvbicsXG4gICAgICAgICduYW1lJzogJ2RpbGF0aW9uJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ29udjJEJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdmaWx0ZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ25hbWUnOiAncGFkJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd1c2VDdWRubk9uR3B1JyxcbiAgICAgICAgJ25hbWUnOiAndXNlQ3Vkbm5PbkdwdScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAnTkhXQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXhwbGljaXRfcGFkZGluZ3MnLFxuICAgICAgICAnbmFtZSc6ICdleHBsaWNpdFBhZGRpbmdzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ19GdXNlZENvbnYyRCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnZvbHV0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZmlsdGVyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ2VuZCc6IDAsXG4gICAgICAgICduYW1lJzogJ2FyZ3MnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3JzJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ251bV9hcmdzJyxcbiAgICAgICAgJ25hbWUnOiAnbnVtQXJncycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ25hbWUnOiAncGFkJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdleHBsaWNpdF9wYWRkaW5ncycsXG4gICAgICAgICduYW1lJzogJ2V4cGxpY2l0UGFkZGluZ3MnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXScsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd1c2VfY3Vkbm5fb25fZ3B1JyxcbiAgICAgICAgJ25hbWUnOiAndXNlQ3Vkbm5PbkdwdScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkYXRhX2Zvcm1hdCcsXG4gICAgICAgICduYW1lJzogJ2RhdGFGb3JtYXQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogJ05IV0MnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RpbGF0aW9ucycsXG4gICAgICAgICduYW1lJzogJ2RpbGF0aW9ucycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IFtcbiAgICAgICAgICAxLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgMSxcbiAgICAgICAgICAxXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZnVzZWRfb3BzJyxcbiAgICAgICAgJ25hbWUnOiAnZnVzZWRPcHMnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmdbXScsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlcHNpbG9uJyxcbiAgICAgICAgJ25hbWUnOiAnZXBzaWxvbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLjAwMDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbGVha3lyZWx1X2FscGhhJyxcbiAgICAgICAgJ25hbWUnOiAnbGVha3lyZWx1QWxwaGEnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMC4yXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvbnYyREJhY2twcm9wSW5wdXQnLFxuICAgICdjYXRlZ29yeSc6ICdjb252b2x1dGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2ZpbHRlcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ291dHB1dFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXhwbGljaXRfcGFkZGluZ3MnLFxuICAgICAgICAnbmFtZSc6ICdleHBsaWNpdFBhZGRpbmdzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdEZXB0aHdpc2VDb252MmQnLFxuICAgICdjYXRlZ29yeSc6ICdjb252b2x1dGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW5wdXQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdmaWx0ZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6ICdOSFdDJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdleHBsaWNpdF9wYWRkaW5ncycsXG4gICAgICAgICduYW1lJzogJ2V4cGxpY2l0UGFkZGluZ3MnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXScsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkaWxhdGlvbnMnLFxuICAgICAgICAnbmFtZSc6ICdkaWxhdGlvbnMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRGVwdGh3aXNlQ29udjJkTmF0aXZlJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2lucHV0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZmlsdGVyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAnTkhXQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXhwbGljaXRfcGFkZGluZ3MnLFxuICAgICAgICAnbmFtZSc6ICdleHBsaWNpdFBhZGRpbmdzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Z1c2VkRGVwdGh3aXNlQ29udjJkTmF0aXZlJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdmaWx0ZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAnYXJncycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbnVtX2FyZ3MnLFxuICAgICAgICAnbmFtZSc6ICdudW1BcmdzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAnTkhXQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW1xuICAgICAgICAgIDEsXG4gICAgICAgICAgMSxcbiAgICAgICAgICAxLFxuICAgICAgICAgIDFcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdmdXNlZF9vcHMnLFxuICAgICAgICAnbmFtZSc6ICdmdXNlZE9wcycsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZ1tdJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2V4cGxpY2l0X3BhZGRpbmdzJyxcbiAgICAgICAgJ25hbWUnOiAnZXhwbGljaXRQYWRkaW5ncycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IFtdXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvbnYzRCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnZvbHV0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZmlsdGVyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAnTkhXQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0RpbGF0aW9uMkQnLFxuICAgICdjYXRlZ29yeSc6ICdjb252b2x1dGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2ZpbHRlcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdyYXRlcycsXG4gICAgICAgICduYW1lJzogJ2RpbGF0aW9ucycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ25hbWUnOiAncGFkJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Fill',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n },\n {\n 'start': 1,\n 'name': 'value',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'LinSpace',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'start',\n 'type': 'number'\n },\n {\n 'start': 1,\n 'name': 'stop',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'num',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'OneHot',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'depth',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'onValue',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'start': 3,\n 'name': 'offValue',\n 'type': 'number',\n 'defaultValue': 0\n }\n ],\n 'attrs': [\n {\n 'tfName': 'axis',\n 'name': 'axis',\n 'type': 'number',\n 'notSupported': true\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'Ones',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'OnesLike',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'RandomStandardNormal',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'T',\n 'name': 'T',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'RandomUniform',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'minval',\n 'name': 'minval',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'maxval',\n 'name': 'maxval',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n },\n {\n 'tfName': 'T',\n 'name': 'T',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'RandomUniformInt',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'minval',\n 'name': 'minval',\n 'type': 'number'\n },\n {\n 'tfName': 'maxval',\n 'name': 'maxval',\n 'type': 'number'\n },\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Range',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'start',\n 'type': 'number'\n },\n {\n 'start': 1,\n 'name': 'stop',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'step',\n 'type': 'number',\n 'defaultValue': 0\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tidx',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TruncatedNormal',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'means',\n 'name': 'mean',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'stddev',\n 'name': 'stdDev',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number'\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'T',\n 'name': 'T',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Zeros',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'ZerosLike',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'Multinomial',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'logits',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'numSamples',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number'\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'output_dtype',\n 'name': 'output_dtype',\n 'type': 'dtype'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L2NyZWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLFVBQVU7UUFDdEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztn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Q1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsYUFBYTtRQUN6QixVQUFVLEVBQUUsVUFBVTtRQUN0QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtTQUNGO0tBQ0Y7Q0FDRixDQUNBIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRmlsbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAndmFsdWUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xpblNwYWNlJyxcbiAgICAnY2F0ZWdvcnknOiAnY3JlYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3N0YXJ0JyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc3RvcCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ251bScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ09uZUhvdCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZGVwdGgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdvblZhbHVlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDMsXG4gICAgICAgICduYW1lJzogJ29mZlZhbHVlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdPbmVzJyxcbiAgICAnY2F0ZWdvcnknOiAnY3JlYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3NoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ09uZXNMaWtlJyxcbiAgICAnY2F0ZWdvcnknOiAnY3JlYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSYW5kb21TdGFuZGFyZE5vcm1hbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NlZWQnLFxuICAgICAgICAnbmFtZSc6ICdzZWVkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2VlZDInLFxuICAgICAgICAnbmFtZSc6ICdzZWVkMicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdUJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmFuZG9tVW5pZm9ybScsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21pbnZhbCcsXG4gICAgICAgICduYW1lJzogJ21pbnZhbCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21heHZhbCcsXG4gICAgICAgICduYW1lJzogJ21heHZhbCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2VlZCcsXG4gICAgICAgICduYW1lJzogJ3NlZWQnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZWVkMicsXG4gICAgICAgICduYW1lJzogJ3NlZWQyJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdUJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmFuZG9tVW5pZm9ybUludCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21pbnZhbCcsXG4gICAgICAgICduYW1lJzogJ21pbnZhbCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbWF4dmFsJyxcbiAgICAgICAgJ25hbWUnOiAnbWF4dmFsJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZWVkJyxcbiAgICAgICAgJ25hbWUnOiAnc2VlZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NlZWQyJyxcbiAgICAgICAgJ25hbWUnOiAnc2VlZDInLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMCxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmFuZ2UnLFxuICAgICdjYXRlZ29yeSc6ICdjcmVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnc3RhcnQnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzdG9wJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnc3RlcCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVGlkeCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RydW5jYXRlZE5vcm1hbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21lYW5zJyxcbiAgICAgICAgJ25hbWUnOiAnbWVhbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0ZGRldicsXG4gICAgICAgICduYW1lJzogJ3N0ZERldicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NlZWQnLFxuICAgICAgICAnbmFtZSc6ICdzZWVkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZWVkMicsXG4gICAgICAgICduYW1lJzogJ3NlZWQyJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ1QnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdaZXJvcycsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdaZXJvc0xpa2UnLFxuICAgICdjYXRlZ29yeSc6ICdjcmVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTXVsdGlub21pYWwnLFxuICAgICdjYXRlZ29yeSc6ICdjcmVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnbG9naXRzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnbnVtU2FtcGxlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZWVkJyxcbiAgICAgICAgJ25hbWUnOiAnc2VlZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2VlZDInLFxuICAgICAgICAnbmFtZSc6ICdzZWVkMicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ291dHB1dF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ291dHB1dF9kdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'NonMaxSuppressionV2',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scores',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'maxOutputSize',\n 'type': 'number'\n },\n {\n 'start': 3,\n 'name': 'iouThreshold',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'NonMaxSuppressionV3',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scores',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'maxOutputSize',\n 'type': 'number'\n },\n {\n 'start': 3,\n 'name': 'iouThreshold',\n 'type': 'number'\n },\n {\n 'start': 4,\n 'name': 'scoreThreshold',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'NonMaxSuppressionV4',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scores',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'maxOutputSize',\n 'type': 'number'\n },\n {\n 'start': 3,\n 'name': 'iouThreshold',\n 'type': 'number'\n },\n {\n 'start': 4,\n 'name': 'scoreThreshold',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'T_threshold',\n 'name': 'threshold',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'pad_to_max_output_size',\n 'name': 'padToMaxOutputSize',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'NonMaxSuppressionV5',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scores',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'maxOutputSize',\n 'type': 'number'\n },\n {\n 'start': 3,\n 'name': 'iouThreshold',\n 'type': 'number'\n },\n {\n 'start': 4,\n 'name': 'scoreThreshold',\n 'type': 'number'\n },\n {\n 'start': 5,\n 'name': 'softNmsSigma',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'Where',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'condition',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'ListDiff',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'y',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvZHluYW1pYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUscUJBQXFCO1FBQ2pDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLHFCQUFxQjtRQUNqQyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dC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Q0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdOb25NYXhTdXBwcmVzc2lvblYyJyxcbiAgICAnY2F0ZWdvcnknOiAnZHluYW1pYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYm94ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzY29yZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdtYXhPdXRwdXRTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnaW91VGhyZXNob2xkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdOb25NYXhTdXBwcmVzc2lvblYzJyxcbiAgICAnY2F0ZWdvcnknOiAnZHluYW1pYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYm94ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzY29yZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdtYXhPdXRwdXRTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnaW91VGhyZXNob2xkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogNCxcbiAgICAgICAgJ25hbWUnOiAnc2NvcmVUaHJlc2hvbGQnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ05vbk1heFN1cHByZXNzaW9uVjQnLFxuICAgICdjYXRlZ29yeSc6ICdkeW5hbWljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdib3hlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3Njb3JlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ21heE91dHB1dFNpemUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdpb3VUaHJlc2hvbGQnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiA0LFxuICAgICAgICAnbmFtZSc6ICdzY29yZVRocmVzaG9sZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1RfdGhyZXNob2xkJyxcbiAgICAgICAgJ25hbWUnOiAndGhyZXNob2xkJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRfdG9fbWF4X291dHB1dF9zaXplJyxcbiAgICAgICAgJ25hbWUnOiAncGFkVG9NYXhPdXRwdXRTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTm9uTWF4U3VwcHJlc3Npb25WNScsXG4gICAgJ2NhdGVnb3J5JzogJ2R5bmFtaWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2JveGVzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2NvcmVzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnbWF4T3V0cHV0U2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDMsXG4gICAgICAgICduYW1lJzogJ2lvdVRocmVzaG9sZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDQsXG4gICAgICAgICduYW1lJzogJ3Njb3JlVGhyZXNob2xkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogNSxcbiAgICAgICAgJ25hbWUnOiAnc29mdE5tc1NpZ21hJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdXaGVyZScsXG4gICAgJ2NhdGVnb3J5JzogJ2R5bmFtaWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2NvbmRpdGlvbicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xpc3REaWZmJyxcbiAgICAnY2F0ZWdvcnknOiAnZHluYW1pYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3knLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfVxuXTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'LowerBound',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'sortedSequence',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'TopKV2',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'k',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'sorted',\n 'name': 'sorted',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'UpperBound',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'sortedSequence',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Unique',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'UniqueV2',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvZXZhbHVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsWUFBWTtRQUN4QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsZ0JBQWdCO2dCQUN4QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxnQkFBZ0I7Z0JBQ3hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFFBQVE7UUFDcEIsVUFBVSxFQUFFLFlBQVk7UUFDeEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsVUFBVTtRQUN0QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtDQUNGLENBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMb3dlckJvdW5kJyxcbiAgICAnY2F0ZWdvcnknOiAnZXZhbHVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnc29ydGVkU2VxdWVuY2UnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RvcEtWMicsXG4gICAgJ2NhdGVnb3J5JzogJ2V2YWx1YXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdrJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NvcnRlZCcsXG4gICAgICAgICduYW1lJzogJ3NvcnRlZCcsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1VwcGVyQm91bmQnLFxuICAgICdjYXRlZ29yeSc6ICdldmFsdWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzb3J0ZWRTZXF1ZW5jZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3ZhbHVlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVW5pcXVlJyxcbiAgICAnY2F0ZWdvcnknOiAnZXZhbHVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVW5pcXVlVjInLFxuICAgICdjYXRlZ29yeSc6ICdldmFsdWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdXG4gIH1cbl1cbjtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'PlaceholderWithDefault',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'default',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'shape',\n 'name': 'shape',\n 'type': 'shape'\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'Placeholder',\n 'category': 'graph',\n 'attrs': [\n {\n 'tfName': 'shape',\n 'name': 'shape',\n 'type': 'shape'\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'Const',\n 'category': 'graph'\n },\n {\n 'tfOpName': 'Identity',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'IdentityN',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'x',\n 'type': 'tensors'\n }\n ]\n },\n {\n 'tfOpName': 'Snapshot',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Rank',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Size',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Shape',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'ShapeN',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'x',\n 'type': 'tensors'\n }\n ]\n },\n {\n 'tfOpName': 'Print',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'data',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'message',\n 'name': 'message',\n 'type': 'string'\n },\n {\n 'tfName': 'first_n',\n 'name': 'firstN',\n 'type': 'number',\n 'notSupported': true\n },\n {\n 'tfName': 'summarize',\n 'name': 'summarize',\n 'type': 'number',\n 'defaultValue': 3\n }\n ]\n },\n {\n 'tfOpName': 'NoOp',\n 'category': 'graph',\n 'inputs': []\n },\n {\n 'tfOpName': 'StopGradient',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'FakeQuantWithMinMaxVars',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'min',\n 'name': 'min',\n 'type': 'number'\n },\n {\n 'tfName': 'max',\n 'name': 'max',\n 'type': 'number'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L2dyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSx3QkFBd0I7UUFDcEMsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsYUFBYTtRQUN6QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsT0FBTztLQUNwQjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxF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R0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsS0FBSztnQkFDZixNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUGxhY2Vob2xkZXJXaXRoRGVmYXVsdCcsXG4gICAgJ2NhdGVnb3J5JzogJ2dyYXBoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdkZWZhdWx0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NoYXBlJyxcbiAgICAgICAgJ25hbWUnOiAnc2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdQbGFjZWhvbGRlcicsXG4gICAgJ2NhdGVnb3J5JzogJ2dyYXBoJyxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2hhcGUnLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ3NoYXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvbnN0JyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSWRlbnRpdHknLFxuICAgICdjYXRlZ29yeSc6ICdncmFwaCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSWRlbnRpdHlOJyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU25hcHNob3QnLFxuICAgICdjYXRlZ29yeSc6ICdncmFwaCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmFuaycsXG4gICAgJ2NhdGVnb3J5JzogJ2dyYXBoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTaXplJyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NoYXBlJyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NoYXBlTicsXG4gICAgJ2NhdGVnb3J5JzogJ2dyYXBoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1ByaW50JyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdkYXRhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdtZXNzYWdlJyxcbiAgICAgICAgJ25hbWUnOiAnbWVzc2FnZScsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZmlyc3RfbicsXG4gICAgICAgICduYW1lJzogJ2ZpcnN0TicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N1bW1hcml6ZScsXG4gICAgICAgICduYW1lJzogJ3N1bW1hcml6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAzXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ05vT3AnLFxuICAgICdjYXRlZ29yeSc6ICdncmFwaCcsXG4gICAgJ2lucHV0cyc6IFtdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RvcEdyYWRpZW50JyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Zha2VRdWFudFdpdGhNaW5NYXhWYXJzJyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbWluJyxcbiAgICAgICAgJ25hbWUnOiAnbWluJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdtYXgnLFxuICAgICAgICAnbmFtZSc6ICdtYXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'HashTable',\n 'category': 'hash_table',\n 'inputs': [],\n 'attrs': [\n {\n 'tfName': 'shared_name',\n 'name': 'sharedName',\n 'type': 'string'\n },\n {\n 'tfName': 'use_node_name_sharing',\n 'name': 'useNodeNameSharing',\n 'type': 'bool'\n },\n {\n 'tfName': 'key_dtype',\n 'name': 'keyDType',\n 'type': 'dtype'\n },\n {\n 'tfName': 'value_dtype',\n 'name': 'valueDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'HashTableV2',\n 'category': 'hash_table',\n 'inputs': [],\n 'attrs': [\n {\n 'tfName': 'shared_name',\n 'name': 'sharedName',\n 'type': 'string'\n },\n {\n 'tfName': 'use_node_name_sharing',\n 'name': 'useNodeNameSharing',\n 'type': 'bool'\n },\n {\n 'tfName': 'key_dtype',\n 'name': 'keyDType',\n 'type': 'dtype'\n },\n {\n 'tfName': 'value_dtype',\n 'name': 'valueDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableImport',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tin',\n 'name': 'tIn',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'tOut',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableImportV2',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tin',\n 'name': 'tIn',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'tOut',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableFind',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'defaultValue',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tin',\n 'name': 'tIn',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'tOut',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableFindV2',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'defaultValue',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tin',\n 'name': 'tIn',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'tOut',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableSize',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableSizeV2',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'InitializeTable',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'InitializeTableV2',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF90YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvaGFzaF90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsV0FBVztRQUN2QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUUsRUFBRTtRQUNaLE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixNQUFNLEVBQUUsTUFBTTthQUNmO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsYUFBYTtRQUN6QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUUsRUFBRTtRQUNaLE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixNQUFNLEVBQUUsTUFBTTthQUNmO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFV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QUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLG1CQUFtQjtRQUMvQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsYUFBYTtnQkFDckIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUNBIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSGFzaFRhYmxlJyxcbiAgICAnY2F0ZWdvcnknOiAnaGFzaF90YWJsZScsXG4gICAgJ2lucHV0cyc6IFtdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzaGFyZWRfbmFtZScsXG4gICAgICAgICduYW1lJzogJ3NoYXJlZE5hbWUnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3VzZV9ub2RlX25hbWVfc2hhcmluZycsXG4gICAgICAgICduYW1lJzogJ3VzZU5vZGVOYW1lU2hhcmluZycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2tleV9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2tleURUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3ZhbHVlX2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAndmFsdWVEVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdIYXNoVGFibGVWMicsXG4gICAgJ2NhdGVnb3J5JzogJ2hhc2hfdGFibGUnLFxuICAgICdpbnB1dHMnOiBbXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2hhcmVkX25hbWUnLFxuICAgICAgICAnbmFtZSc6ICdzaGFyZWROYW1lJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd1c2Vfbm9kZV9uYW1lX3NoYXJpbmcnLFxuICAgICAgICAnbmFtZSc6ICd1c2VOb2RlTmFtZVNoYXJpbmcnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZXlfZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdrZXlEVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd2YWx1ZV9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ3ZhbHVlRFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9va3VwVGFibGVJbXBvcnQnLFxuICAgICdjYXRlZ29yeSc6ICdoYXNoX3RhYmxlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0YWJsZUhhbmRsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2tleXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVGluJyxcbiAgICAgICAgJ25hbWUnOiAndEluJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUb3V0JyxcbiAgICAgICAgJ25hbWUnOiAndE91dCcsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9va3VwVGFibGVJbXBvcnRWMicsXG4gICAgJ2NhdGVnb3J5JzogJ2hhc2hfdGFibGUnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RhYmxlSGFuZGxlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAna2V5cycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ3ZhbHVlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUaW4nLFxuICAgICAgICAnbmFtZSc6ICd0SW4nLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1RvdXQnLFxuICAgICAgICAnbmFtZSc6ICd0T3V0JyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMb29rdXBUYWJsZUZpbmQnLFxuICAgICdjYXRlZ29yeSc6ICdoYXNoX3RhYmxlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0YWJsZUhhbmRsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2tleXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdkZWZhdWx0VmFsdWUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVGluJyxcbiAgICAgICAgJ25hbWUnOiAndEluJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUb3V0JyxcbiAgICAgICAgJ25hbWUnOiAndE91dCcsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9va3VwVGFibGVGaW5kVjInLFxuICAgICdjYXRlZ29yeSc6ICdoYXNoX3RhYmxlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0YWJsZUhhbmRsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2tleXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdkZWZhdWx0VmFsdWUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVGluJyxcbiAgICAgICAgJ25hbWUnOiAndEluJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUb3V0JyxcbiAgICAgICAgJ25hbWUnOiAndE91dCcsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9va3VwVGFibGVTaXplJyxcbiAgICAnY2F0ZWdvcnknOiAnaGFzaF90YWJsZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGFibGVIYW5kbGUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xvb2t1cFRhYmxlU2l6ZVYyJyxcbiAgICAnY2F0ZWdvcnknOiAnaGFzaF90YWJsZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGFibGVIYW5kbGUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0luaXRpYWxpemVUYWJsZScsXG4gICAgJ2NhdGVnb3J5JzogJ2hhc2hfdGFibGUnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RhYmxlSGFuZGxlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAna2V5cycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ3ZhbHVlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSW5pdGlhbGl6ZVRhYmxlVjInLFxuICAgICdjYXRlZ29yeSc6ICdoYXNoX3RhYmxlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0YWJsZUhhbmRsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2tleXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'ResizeBilinear',\n 'category': 'image',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'images',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'align_corners',\n 'name': 'alignCorners',\n 'type': 'bool'\n },\n {\n 'tfName': 'half_pixel_centers',\n 'name': 'halfPixelCenters',\n 'type': 'bool'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'ResizeNearestNeighbor',\n 'category': 'image',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'images',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'align_corners',\n 'name': 'alignCorners',\n 'type': 'bool'\n },\n {\n 'tfName': 'half_pixel_centers',\n 'name': 'halfPixelCenters',\n 'type': 'bool'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'CropAndResize',\n 'category': 'image',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'image',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'boxInd',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'cropSize',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'method',\n 'name': 'method',\n 'type': 'string'\n },\n {\n 'tfName': 'extrapolation_value',\n 'name': 'extrapolationValue',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'ImageProjectiveTransformV3',\n 'category': 'image',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'images',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'transforms',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'outputShape',\n 'type': 'number[]'\n },\n {\n 'start': 3,\n 'name': 'fillValue',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'interpolation',\n 'name': 'interpolation',\n 'type': 'string'\n },\n {\n 'tfName': 'fill_mode',\n 'name': 'fillMode',\n 'type': 'string'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE1BQU07YUFDZjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSx1QkFBdUI7UUFDbkMsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE1BQU07YUFDZjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSw0QkFBNEI7UUFDeEMsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmVzaXplQmlsaW5lYXInLFxuICAgICdjYXRlZ29yeSc6ICdpbWFnZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW1hZ2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2FsaWduX2Nvcm5lcnMnLFxuICAgICAgICAnbmFtZSc6ICdhbGlnbkNvcm5lcnMnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdoYWxmX3BpeGVsX2NlbnRlcnMnLFxuICAgICAgICAnbmFtZSc6ICdoYWxmUGl4ZWxDZW50ZXJzJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSZXNpemVOZWFyZXN0TmVpZ2hib3InLFxuICAgICdjYXRlZ29yeSc6ICdpbWFnZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW1hZ2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2FsaWduX2Nvcm5lcnMnLFxuICAgICAgICAnbmFtZSc6ICdhbGlnbkNvcm5lcnMnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdoYWxmX3BpeGVsX2NlbnRlcnMnLFxuICAgICAgICAnbmFtZSc6ICdoYWxmUGl4ZWxDZW50ZXJzJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDcm9wQW5kUmVzaXplJyxcbiAgICAnY2F0ZWdvcnknOiAnaW1hZ2UnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2ltYWdlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYm94ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdib3hJbmQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdjcm9wU2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21ldGhvZCcsXG4gICAgICAgICduYW1lJzogJ21ldGhvZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXh0cmFwb2xhdGlvbl92YWx1ZScsXG4gICAgICAgICduYW1lJzogJ2V4dHJhcG9sYXRpb25WYWx1ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSW1hZ2VQcm9qZWN0aXZlVHJhbnNmb3JtVjMnLFxuICAgICdjYXRlZ29yeSc6ICdpbWFnZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW1hZ2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAndHJhbnNmb3JtcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ291dHB1dFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdmaWxsVmFsdWUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnaW50ZXJwb2xhdGlvbicsXG4gICAgICAgICduYW1lJzogJ2ludGVycG9sYXRpb24nLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2ZpbGxfbW9kZScsXG4gICAgICAgICduYW1lJzogJ2ZpbGxNb2RlJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Equal',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'NotEqual',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Greater',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'GreaterEqual',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Less',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LessEqual',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LogicalAnd',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LogicalNot',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LogicalOr',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Select',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'condition',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'SelectV2',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'condition',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'BitwiseAnd',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'y',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvbG9naWNhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFF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QUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsV0FBVztnQkFDbkIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0VxdWFsJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdOb3RFcXVhbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2xvZ2ljYWwnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnR3JlYXRlcicsXG4gICAgJ2NhdGVnb3J5JzogJ2xvZ2ljYWwnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnR3JlYXRlckVxdWFsJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMZXNzJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMZXNzRXF1YWwnLFxuICAgICdjYXRlZ29yeSc6ICdsb2dpY2FsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xvZ2ljYWxBbmQnLFxuICAgICdjYXRlZ29yeSc6ICdsb2dpY2FsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xvZ2ljYWxOb3QnLFxuICAgICdjYXRlZ29yeSc6ICdsb2dpY2FsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9naWNhbE9yJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTZWxlY3QnLFxuICAgICdjYXRlZ29yeSc6ICdsb2dpY2FsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdjb25kaXRpb24nLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NlbGVjdFYyJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnY29uZGl0aW9uJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdCaXR3aXNlQW5kJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3knLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': '_FusedMatMul',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_args',\n 'name': 'numArgs',\n 'type': 'number'\n },\n {\n 'tfName': 'fused_ops',\n 'name': 'fusedOps',\n 'type': 'string[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.0001\n },\n {\n 'tfName': 'transpose_a',\n 'name': 'transposeA',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'transpose_b',\n 'name': 'transposeB',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'leakyrelu_alpha',\n 'name': 'leakyreluAlpha',\n 'type': 'number',\n 'defaultValue': 0.2\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'MatMul',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'transpose_a',\n 'name': 'transposeA',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'transpose_b',\n 'name': 'transposeB',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'BatchMatMul',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'adj_x',\n 'name': 'transposeA',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'adj_y',\n 'name': 'transposeB',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'BatchMatMulV2',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'adj_x',\n 'name': 'transposeA',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'adj_y',\n 'name': 'transposeB',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Transpose',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'perm',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Einsum',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'equation',\n 'name': 'equation',\n 'type': 'string'\n },\n {\n 'tfName': 'N',\n 'name': 'n',\n 'type': 'number',\n 'defaultValue': 2\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'MatrixBandPart',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'numLower',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'numUpper',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L21hdHJpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsU0FBUzthQUNsQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLGNBQWMsRUFBRSxFQUFFO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLE1BQU07YUFDdkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLGNBQWMsRUFBRSxLQUFL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VUFBVSxFQUFFLFVBQVU7UUFDdEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ19GdXNlZE1hdE11bCcsXG4gICAgJ2NhdGVnb3J5JzogJ21hdHJpY2VzJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhcmdzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdudW1fYXJncycsXG4gICAgICAgICduYW1lJzogJ251bUFyZ3MnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2Z1c2VkX29wcycsXG4gICAgICAgICduYW1lJzogJ2Z1c2VkT3BzJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXBzaWxvbicsXG4gICAgICAgICduYW1lJzogJ2Vwc2lsb24nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMC4wMDAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3RyYW5zcG9zZV9hJyxcbiAgICAgICAgJ25hbWUnOiAndHJhbnNwb3NlQScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogZmFsc2VcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAndHJhbnNwb3NlX2InLFxuICAgICAgICAnbmFtZSc6ICd0cmFuc3Bvc2VCJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCcsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdsZWFreXJlbHVfYWxwaGEnLFxuICAgICAgICAnbmFtZSc6ICdsZWFreXJlbHVBbHBoYScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLjJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdNYXRNdWwnLFxuICAgICdjYXRlZ29yeSc6ICdtYXRyaWNlcycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAndHJhbnNwb3NlX2EnLFxuICAgICAgICAnbmFtZSc6ICd0cmFuc3Bvc2VBJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCcsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd0cmFuc3Bvc2VfYicsXG4gICAgICAgICduYW1lJzogJ3RyYW5zcG9zZUInLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IGZhbHNlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQmF0Y2hNYXRNdWwnLFxuICAgICdjYXRlZ29yeSc6ICdtYXRyaWNlcycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnYWRqX3gnLFxuICAgICAgICAnbmFtZSc6ICd0cmFuc3Bvc2VBJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCcsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdhZGpfeScsXG4gICAgICAgICduYW1lJzogJ3RyYW5zcG9zZUInLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IGZhbHNlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQmF0Y2hNYXRNdWxWMicsXG4gICAgJ2NhdGVnb3J5JzogJ21hdHJpY2VzJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdhZGpfeCcsXG4gICAgICAgICduYW1lJzogJ3RyYW5zcG9zZUEnLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IGZhbHNlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2Fkal95JyxcbiAgICAgICAgJ25hbWUnOiAndHJhbnNwb3NlQicsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogZmFsc2VcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUcmFuc3Bvc2UnLFxuICAgICdjYXRlZ29yeSc6ICdtYXRyaWNlcycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3Blcm0nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0VpbnN1bScsXG4gICAgJ2NhdGVnb3J5JzogJ21hdHJpY2VzJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29ycycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXF1YXRpb24nLFxuICAgICAgICAnbmFtZSc6ICdlcXVhdGlvbicsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnTicsXG4gICAgICAgICduYW1lJzogJ24nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWF0cml4QmFuZFBhcnQnLFxuICAgICdjYXRlZ29yeSc6ICdtYXRyaWNlcycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ251bUxvd2VyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnbnVtVXBwZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'EuclideanNorm',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool',\n 'defaultValue': false\n }\n ]\n },\n {\n 'tfOpName': 'FusedBatchNorm',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scale',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'offset',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'mean',\n 'type': 'tensor'\n },\n {\n 'start': 4,\n 'name': 'variance',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.001\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'FusedBatchNormV2',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scale',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'offset',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'mean',\n 'type': 'tensor'\n },\n {\n 'start': 4,\n 'name': 'variance',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.001\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'FusedBatchNormV3',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scale',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'offset',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'mean',\n 'type': 'tensor'\n },\n {\n 'start': 4,\n 'name': 'variance',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.001\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LRN',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'depth_radius',\n 'name': 'radius',\n 'type': 'number',\n 'defaultValue': 5\n },\n {\n 'tfName': 'bias',\n 'name': 'bias',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'tfName': 'alpha',\n 'name': 'alpha',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'tfName': 'beta',\n 'name': 'beta',\n 'type': 'number',\n 'defaultValue': 0.5\n }\n ]\n },\n {\n 'tfOpName': 'Softmax',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'LogSoftmax',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3Qvbm9ybWFsaXphdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsZUFBZTtRQUMzQixVQUFVLEVBQUUsZUFBZTtRQUMzQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLGNBQWMsRUFBRSxLQUFLO2FBQ3RCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixVQUFVLEVBQUUsZUFBZTtRQUMzQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxLQUFLO2FBQ3RCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsa0JBQWtCO1FBQzlCLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLEtBQUs7YUFDdEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxrQkFBa0I7UUFDOUIsVUFBVSxFQUFFLGVBQWU7UUFDM0IsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsS0FBSzthQUN0QjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLEtBQUs7UUFDakIsVUFBVSxFQUFFLGVBQWU7UUFDM0IsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxDQUFDO2FBQ2xCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsQ0FBQzthQUNsQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLENBQUM7YUFDbEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxHQUFHO2FBQ3BCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFNBQVM7UUFDckIsVUFBVSxFQUFFLGVBQWU7UUFDM0IsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsWUFBWTtRQUN4QixVQUFVLEVBQUUsZUFBZTtRQUMzQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUNBIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRXVjbGlkZWFuTm9ybScsXG4gICAgJ2NhdGVnb3J5JzogJ25vcm1hbGl6YXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna2VlcF9kaW1zJyxcbiAgICAgICAgJ25hbWUnOiAna2VlcERpbXMnLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IGZhbHNlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Z1c2VkQmF0Y2hOb3JtJyxcbiAgICAnY2F0ZWdvcnknOiAnbm9ybWFsaXphdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3NjYWxlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnb2Zmc2V0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnbWVhbicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDQsXG4gICAgICAgICduYW1lJzogJ3ZhcmlhbmNlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2Vwc2lsb24nLFxuICAgICAgICAnbmFtZSc6ICdlcHNpbG9uJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAuMDAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Z1c2VkQmF0Y2hOb3JtVjInLFxuICAgICdjYXRlZ29yeSc6ICdub3JtYWxpemF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2NhbGUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdvZmZzZXQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdtZWFuJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogNCxcbiAgICAgICAgJ25hbWUnOiAndmFyaWFuY2UnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXBzaWxvbicsXG4gICAgICAgICduYW1lJzogJ2Vwc2lsb24nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMC4wMDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRnVzZWRCYXRjaE5vcm1WMycsXG4gICAgJ2NhdGVnb3J5JzogJ25vcm1hbGl6YXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzY2FsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ29mZnNldCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDMsXG4gICAgICAgICduYW1lJzogJ21lYW4nLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiA0LFxuICAgICAgICAnbmFtZSc6ICd2YXJpYW5jZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlcHNpbG9uJyxcbiAgICAgICAgJ25hbWUnOiAnZXBzaWxvbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLjAwMVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkYXRhX2Zvcm1hdCcsXG4gICAgICAgICduYW1lJzogJ2RhdGFGb3JtYXQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMUk4nLFxuICAgICdjYXRlZ29yeSc6ICdub3JtYWxpemF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RlcHRoX3JhZGl1cycsXG4gICAgICAgICduYW1lJzogJ3JhZGl1cycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiA1XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2JpYXMnLFxuICAgICAgICAnbmFtZSc6ICdiaWFzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnYWxwaGEnLFxuICAgICAgICAnbmFtZSc6ICdhbHBoYScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2JldGEnLFxuICAgICAgICAnbmFtZSc6ICdiZXRhJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAuNVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTb2Z0bWF4JyxcbiAgICAnY2F0ZWdvcnknOiAnbm9ybWFsaXphdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9nU29mdG1heCcsXG4gICAgJ2NhdGVnb3J5JzogJ25vcm1hbGl6YXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Bincount',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'weights',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'DenseBincount',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'weights',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'binary_output',\n 'name': 'binaryOutput',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Max',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Mean',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Min',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Sum',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'All',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Any',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'ArgMax',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'ArgMin',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'Prod',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Cumprod',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'exclusive',\n 'name': 'exclusive',\n 'type': 'bool'\n },\n {\n 'tfName': 'reverse',\n 'name': 'reverse',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Cumsum',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'exclusive',\n 'name': 'exclusive',\n 'type': 'bool'\n },\n {\n 'tfName': 'reverse',\n 'name': 'reverse',\n 'type': 'bool'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvb3BfbGlzdC9yZWR1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFlO0lBQzlCO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLFdBQVc7UUFDdkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7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QU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsV0FBVztRQUN2QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsUUFBUTtRQUNwQixVQUFVLEVBQUUsV0FBVztRQUN2QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0JpbmNvdW50JyxcbiAgICAnY2F0ZWdvcnknOiAncmVkdWN0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ3dlaWdodHMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0RlbnNlQmluY291bnQnLFxuICAgICdjYXRlZ29yeSc6ICdyZWR1Y3Rpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnd2VpZ2h0cycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdiaW5hcnlfb3V0cHV0JyxcbiAgICAgICAgJ25hbWUnOiAnYmluYXJ5T3V0cHV0JyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWF4JyxcbiAgICAnY2F0ZWdvcnknOiAncmVkdWN0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2tlZXBfZGltcycsXG4gICAgICAgICduYW1lJzogJ2tlZXBEaW1zJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWVhbicsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ01pbicsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1N1bScsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FsbCcsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FueScsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FyZ01heCcsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FyZ01pbicsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1Byb2QnLFxuICAgICdjYXRlZ29yeSc6ICdyZWR1Y3Rpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna2VlcF9kaW1zJyxcbiAgICAgICAgJ25hbWUnOiAna2VlcERpbXMnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0N1bXByb2QnLFxuICAgICdjYXRlZ29yeSc6ICdyZWR1Y3Rpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2V4Y2x1c2l2ZScsXG4gICAgICAgICduYW1lJzogJ2V4Y2x1c2l2ZScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3JldmVyc2UnLFxuICAgICAgICAnbmFtZSc6ICdyZXZlcnNlJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ3Vtc3VtJyxcbiAgICAnY2F0ZWdvcnknOiAncmVkdWN0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdleGNsdXNpdmUnLFxuICAgICAgICAnbmFtZSc6ICdleGNsdXNpdmUnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdyZXZlcnNlJyxcbiAgICAgICAgJ25hbWUnOiAncmV2ZXJzZScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'ConcatV2',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'end': -1,\n 'name': 'tensors',\n 'type': 'tensors'\n },\n {\n 'start': -1,\n 'name': 'axis',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'N',\n 'name': 'n',\n 'type': 'number',\n 'defaultValue': 2\n }\n ]\n },\n {\n 'tfOpName': 'Concat',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 1,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n },\n {\n 'start': 0,\n 'name': 'axis',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'N',\n 'name': 'n',\n 'type': 'number',\n 'defaultValue': 2\n }\n ]\n },\n {\n 'tfOpName': 'GatherV2',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n }\n ],\n 'attrs': [\n {\n 'tfName': 'batch_dims',\n 'name': 'batchDims',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'Gather',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'validate_indices',\n 'name': 'validateIndices',\n 'type': 'bool',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Reverse',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'dims',\n 'type': 'bool[]'\n }\n ]\n },\n {\n 'tfOpName': 'ReverseV2',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'Slice',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'begin',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'size',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'StridedSlice',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'begin',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'end',\n 'type': 'number[]'\n },\n {\n 'start': 3,\n 'name': 'strides',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'begin_mask',\n 'name': 'beginMask',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'end_mask',\n 'name': 'endMask',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'new_axis_mask',\n 'name': 'newAxisMask',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'ellipsis_mask',\n 'name': 'ellipsisMask',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'shrink_axis_mask',\n 'name': 'shrinkAxisMask',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'Pack',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'axis',\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'Unpack',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'axis',\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'num',\n 'name': 'num',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Tile',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'reps',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'Split',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'start': 1,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_split',\n 'name': 'numOrSizeSplits',\n 'type': 'number',\n 'defaultValue': 1\n }\n ]\n },\n {\n 'tfOpName': 'SplitV',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'numOrSizeSplits',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'ScatterNd',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'values',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'GatherNd',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'SparseToDense',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'sparseIndices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'outputShape',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'sparseValues',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'defaultValue',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'validate_indices',\n 'name': 'validateIndices',\n 'type': 'bool',\n 'defaultValue': false,\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorScatterUpdate',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2Vfam9pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3Qvc2xpY2Vfam9pbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsVUFBVTtRQUN0QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNULE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsU0FBUzthQUNsQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsQ0FBQzthQUNsQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsU0FBUzthQUNsQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUs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MDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDb25jYXRWMicsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICdlbmQnOiAtMSxcbiAgICAgICAgJ25hbWUnOiAndGVuc29ycycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAtMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdOJyxcbiAgICAgICAgJ25hbWUnOiAnbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAyXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvbmNhdCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnTicsXG4gICAgICAgICduYW1lJzogJ24nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMlxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdHYXRoZXJWMicsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnYmF0Y2hfZGltcycsXG4gICAgICAgICduYW1lJzogJ2JhdGNoRGltcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0dhdGhlcicsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3ZhbGlkYXRlX2luZGljZXMnLFxuICAgICAgICAnbmFtZSc6ICd2YWxpZGF0ZUluZGljZXMnLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmV2ZXJzZScsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdkaW1zJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbFtdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSZXZlcnNlVjInLFxuICAgICdjYXRlZ29yeSc6ICdzbGljZV9qb2luJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTbGljZScsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiZWdpbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTdHJpZGVkU2xpY2UnLFxuICAgICdjYXRlZ29yeSc6ICdzbGljZV9qb2luJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYmVnaW4nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2VuZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2JlZ2luX21hc2snLFxuICAgICAgICAnbmFtZSc6ICdiZWdpbk1hc2snLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbmRfbWFzaycsXG4gICAgICAgICduYW1lJzogJ2VuZE1hc2snLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICduZXdfYXhpc19tYXNrJyxcbiAgICAgICAgJ25hbWUnOiAnbmV3QXhpc01hc2snLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGxpcHNpc19tYXNrJyxcbiAgICAgICAgJ25hbWUnOiAnZWxsaXBzaXNNYXNrJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2hyaW5rX2F4aXNfbWFzaycsXG4gICAgICAgICduYW1lJzogJ3Nocmlua0F4aXNNYXNrJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUGFjaycsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1VucGFjaycsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ251bScsXG4gICAgICAgICduYW1lJzogJ251bScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUaWxlJyxcbiAgICAnY2F0ZWdvcnknOiAnc2xpY2Vfam9pbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3JlcHMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3BsaXQnLFxuICAgICdjYXRlZ29yeSc6ICdzbGljZV9qb2luJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbnVtX3NwbGl0JyxcbiAgICAgICAgJ25hbWUnOiAnbnVtT3JTaXplU3BsaXRzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3BsaXRWJyxcbiAgICAnY2F0ZWdvcnknOiAnc2xpY2Vfam9pbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ251bU9yU2l6ZVNwbGl0cycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NjYXR0ZXJOZCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2luZGljZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdHYXRoZXJOZCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTcGFyc2VUb0RlbnNlJyxcbiAgICAnY2F0ZWdvcnknOiAnc2xpY2Vfam9pbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnc3BhcnNlSW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ291dHB1dFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdzcGFyc2VWYWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdkZWZhdWx0VmFsdWUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAndmFsaWRhdGVfaW5kaWNlcycsXG4gICAgICAgICduYW1lJzogJ3ZhbGlkYXRlSW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogZmFsc2UsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvclNjYXR0ZXJVcGRhdGUnLFxuICAgICdjYXRlZ29yeSc6ICdzbGljZV9qb2luJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAndmFsdWVzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'SparseFillEmptyRows',\n 'category': 'sparse',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'values',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'denseShape',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'defaultValue',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'SparseReshape',\n 'category': 'sparse',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'inputIndices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'inputShape',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'newShape',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'SparseSegmentMean',\n 'category': 'sparse',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'data',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'segmentIds',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'SparseSegmentSum',\n 'category': 'sparse',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'data',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'segmentIds',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvb3BfbGlzdC9zcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFlO0lBQzlCO1FBQ0UsVUFBVSxFQUFFLHFCQUFxQjtRQUNqQyxVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsZUFBZTtRQUMzQixVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLG1CQUFtQjtRQUMvQixVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxrQkFBa0I7UUFDOUIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NwYXJzZUZpbGxFbXB0eVJvd3MnLFxuICAgICdjYXRlZ29yeSc6ICdzcGFyc2UnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2luZGljZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdkZW5zZVNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnZGVmYXVsdFZhbHVlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTcGFyc2VSZXNoYXBlJyxcbiAgICAnY2F0ZWdvcnknOiAnc3BhcnNlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdpbnB1dEluZGljZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbnB1dFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnbmV3U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTcGFyc2VTZWdtZW50TWVhbicsXG4gICAgJ2NhdGVnb3J5JzogJ3NwYXJzZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnZGF0YScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2luZGljZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdzZWdtZW50SWRzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTcGFyc2VTZWdtZW50U3VtJyxcbiAgICAnY2F0ZWdvcnknOiAnc3BhcnNlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdkYXRhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ3NlZ21lbnRJZHMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'FFT',\n 'category': 'spectral',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'IFFT',\n 'category': 'spectral',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'RFFT',\n 'category': 'spectral',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'fft_length',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'IRFFT',\n 'category': 'spectral',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'fft_length',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L3NwZWN0cmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLE1BQU07UUFDbEIsVUFBVSxFQUFFLFVBQVU7UUFDdEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsVUFBVTtRQUN0QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsVUFBVTtRQUN0QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0ZGVCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NwZWN0cmFsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdJRkZUJyxcbiAgICAnY2F0ZWdvcnknOiAnc3BlY3RyYWwnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1JGRlQnLFxuICAgICdjYXRlZ29yeSc6ICdzcGVjdHJhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2ZmdF9sZW5ndGgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdJUkZGVCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NwZWN0cmFsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZmZ0X2xlbmd0aCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'StaticRegexReplace',\n 'category': 'string',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'pattern',\n 'name': 'pattern',\n 'type': 'string'\n },\n {\n 'tfName': 'rewrite',\n 'name': 'rewrite',\n 'type': 'string'\n },\n {\n 'tfName': 'replace_global',\n 'name': 'replaceGlobal',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'StringNGrams',\n 'category': 'string',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'data',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'dataSplits',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'separator',\n 'name': 'separator',\n 'type': 'string'\n },\n {\n 'tfName': 'ngram_widths',\n 'name': 'nGramWidths',\n 'type': 'number[]'\n },\n {\n 'tfName': 'left_pad',\n 'name': 'leftPad',\n 'type': 'string'\n },\n {\n 'tfName': 'right_pad',\n 'name': 'rightPad',\n 'type': 'string'\n },\n {\n 'tfName': 'pad_width',\n 'name': 'padWidth',\n 'type': 'number'\n },\n {\n 'tfName': 'preserve_short_sequences',\n 'name': 'preserveShortSequences',\n 'type': 'bool'\n }\n ],\n 'outputs': [\n 'ngrams',\n 'ngrams_splits'\n ]\n },\n {\n 'tfOpName': 'StringSplit',\n 'category': 'string',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'delimiter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'skip_empty',\n 'name': 'skipEmpty',\n 'type': 'bool'\n }\n ],\n 'outputs': [\n 'indices',\n 'values',\n 'shape'\n ]\n },\n {\n 'tfOpName': 'StringToHashBucketFast',\n 'category': 'string',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_buckets',\n 'name': 'numBuckets',\n 'type': 'number'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvb3BfbGlzdC9zdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFlO0lBQzlCO1FBQ0UsVUFBVSxFQUFFLG9CQUFvQjtRQUNoQyxVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDQSxPQUFPLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixNQUFNLEVBQUUsZUFBZTtnQkFDdkIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixNQUFNLEVBQUUsVUFBVTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLE1BQU0sRUFBRSx3QkFBd0I7Z0JBQ2hDLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtRQUNELFNBQVMsRUFBRTtZQUNULFFBQVE7WUFDUixlQUFlO1NBQ2hCO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtRQUNELFNBQVMsRUFBRTtZQUNULFNBQVM7WUFDVCxRQUFRO1lBQ1IsT0FBTztTQUNSO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSx3QkFBd0I7UUFDcEMsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1N0YXRpY1JlZ2V4UmVwbGFjZScsXG4gICAgJ2NhdGVnb3J5JzogJ3N0cmluZycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2lucHV0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhdHRlcm4nLFxuICAgICAgICAnbmFtZSc6ICdwYXR0ZXJuJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdyZXdyaXRlJyxcbiAgICAgICAgJ25hbWUnOiAncmV3cml0ZScsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncmVwbGFjZV9nbG9iYWwnLFxuICAgICAgICAnbmFtZSc6ICdyZXBsYWNlR2xvYmFsJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RyaW5nTkdyYW1zJyxcbiAgICAnY2F0ZWdvcnknOiAnc3RyaW5nJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdkYXRhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZGF0YVNwbGl0cycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZXBhcmF0b3InLFxuICAgICAgICAnbmFtZSc6ICdzZXBhcmF0b3InLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ25ncmFtX3dpZHRocycsXG4gICAgICAgICduYW1lJzogJ25HcmFtV2lkdGhzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2xlZnRfcGFkJyxcbiAgICAgICAgJ25hbWUnOiAnbGVmdFBhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncmlnaHRfcGFkJyxcbiAgICAgICAgJ25hbWUnOiAncmlnaHRQYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZF93aWR0aCcsXG4gICAgICAgICduYW1lJzogJ3BhZFdpZHRoJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwcmVzZXJ2ZV9zaG9ydF9zZXF1ZW5jZXMnLFxuICAgICAgICAnbmFtZSc6ICdwcmVzZXJ2ZVNob3J0U2VxdWVuY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdLFxuICAgICdvdXRwdXRzJzogW1xuICAgICAgJ25ncmFtcycsXG4gICAgICAnbmdyYW1zX3NwbGl0cydcbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RyaW5nU3BsaXQnLFxuICAgICdjYXRlZ29yeSc6ICdzdHJpbmcnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2lucHV0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZGVsaW1pdGVyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NraXBfZW1wdHknLFxuICAgICAgICAnbmFtZSc6ICdza2lwRW1wdHknLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ291dHB1dHMnOiBbXG4gICAgICAnaW5kaWNlcycsXG4gICAgICAndmFsdWVzJyxcbiAgICAgICdzaGFwZSdcbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RyaW5nVG9IYXNoQnVja2V0RmFzdCcsXG4gICAgJ2NhdGVnb3J5JzogJ3N0cmluZycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW5wdXQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbnVtX2J1Y2tldHMnLFxuICAgICAgICAnbmFtZSc6ICdudW1CdWNrZXRzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Cast',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'SrcT',\n 'name': 'sdtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'DstT',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'ExpandDims',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'MirrorPad',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'padding',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'mode',\n 'name': 'mode',\n 'type': 'string'\n }\n ]\n },\n {\n 'tfOpName': 'Pad',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'padding',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'constant_value',\n 'name': 'constantValue',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'PadV2',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'padding',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'constantValue',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'Reshape',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'EnsureShape',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'Squeeze',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'axis',\n 'tfDeprecatedName': 'squeeze_dims',\n 'name': 'axis',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'SpaceToBatchND',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'blockShape',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'paddings',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'BatchToSpaceND',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'blockShape',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'crops',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'DepthToSpace',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'block_size',\n 'name': 'blockSize',\n 'type': 'number'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string'\n }\n ]\n },\n {\n 'tfOpName': 'BroadcastTo',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': []\n },\n {\n 'tfOpName': 'BroadcastArgs',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 's0',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 's1',\n 'type': 'tensor'\n }\n ],\n 'attrs': []\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L3RyYW5zZm9ybWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsWUFBWTtRQUN4QixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsV0FBVztRQUN2QixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dC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QUFVO2FBQ25CO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsRUFBRTtLQUNaO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsZUFBZTtRQUMzQixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxJQUFJO2dCQUNaLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLElBQUk7Z0JBQ1osTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRSxFQUFFO0tBQ1o7Q0FDRixDQUNBIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ2FzdCcsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1NyY1QnLFxuICAgICAgICAnbmFtZSc6ICdzZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ0RzdFQnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFeHBhbmREaW1zJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdNaXJyb3JQYWQnLFxuICAgICdjYXRlZ29yeSc6ICd0cmFuc2Zvcm1hdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdtb2RlJyxcbiAgICAgICAgJ25hbWUnOiAnbW9kZScsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUGFkJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnY29uc3RhbnRfdmFsdWUnLFxuICAgICAgICAnbmFtZSc6ICdjb25zdGFudFZhbHVlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUGFkVjInLFxuICAgICdjYXRlZ29yeSc6ICd0cmFuc2Zvcm1hdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2NvbnN0YW50VmFsdWUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSZXNoYXBlJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFbnN1cmVTaGFwZScsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3F1ZWV6ZScsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2F4aXMnLFxuICAgICAgICAndGZEZXByZWNhdGVkTmFtZSc6ICdzcXVlZXplX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NwYWNlVG9CYXRjaE5EJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdibG9ja1NoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdwYWRkaW5ncycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdCYXRjaFRvU3BhY2VORCcsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYmxvY2tTaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnY3JvcHMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRGVwdGhUb1NwYWNlJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnYmxvY2tfc2l6ZScsXG4gICAgICAgICduYW1lJzogJ2Jsb2NrU2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdCcm9hZGNhc3RUbycsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQnJvYWRjYXN0QXJncycsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzMCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3MxJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW11cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nimport * as tensorflow from '../data/compiled_api';\nimport { getRegisteredOp } from './custom_op/register';\nimport { getNodeNameAndIndex } from './executors/utils';\nimport * as arithmetic from './op_list/arithmetic';\nimport * as basicMath from './op_list/basic_math';\nimport * as control from './op_list/control';\nimport * as convolution from './op_list/convolution';\nimport * as creation from './op_list/creation';\nimport * as dynamic from './op_list/dynamic';\nimport * as evaluation from './op_list/evaluation';\nimport * as graph from './op_list/graph';\nimport * as hashTable from './op_list/hash_table';\nimport * as image from './op_list/image';\nimport * as logical from './op_list/logical';\nimport * as matrices from './op_list/matrices';\nimport * as normalization from './op_list/normalization';\nimport * as reduction from './op_list/reduction';\nimport * as sliceJoin from './op_list/slice_join';\nimport * as sparse from './op_list/sparse';\nimport * as spectral from './op_list/spectral';\nimport * as string from './op_list/string';\nimport * as transformation from './op_list/transformation';\nexport class OperationMapper {\n // Singleton instance for the mapper\n static get Instance() {\n return this._instance || (this._instance = new this());\n }\n // Loads the op mapping from the JSON file.\n constructor() {\n const ops = [\n arithmetic, basicMath, control, convolution, creation, dynamic,\n evaluation, graph, hashTable, image, logical, matrices, normalization,\n reduction, sliceJoin, sparse, spectral, string, transformation\n ];\n const mappersJson = [].concat(...ops.map(op => op.json));\n this.opMappers = mappersJson.reduce((map, mapper) => {\n map[mapper.tfOpName] = mapper;\n return map;\n }, {});\n }\n // Converts the model inference graph from Tensorflow GraphDef to local\n // representation for TensorFlow.js API\n transformGraph(graph, signature = {}) {\n const tfNodes = graph.node;\n const placeholders = [];\n const weights = [];\n const initNodes = [];\n const nodes = tfNodes.reduce((map, node) => {\n map[node.name] = this.mapNode(node);\n if (node.op.startsWith('Placeholder')) {\n placeholders.push(map[node.name]);\n }\n else if (node.op === 'Const') {\n weights.push(map[node.name]);\n }\n else if (node.input == null || node.input.length === 0) {\n initNodes.push(map[node.name]);\n }\n return map;\n }, {});\n let inputs = [];\n const outputs = [];\n let inputNodeNameToKey = {};\n let outputNodeNameToKey = {};\n if (signature != null) {\n inputNodeNameToKey = this.mapSignatureEntries(signature.inputs);\n outputNodeNameToKey = this.mapSignatureEntries(signature.outputs);\n }\n const allNodes = Object.keys(nodes);\n allNodes.forEach(key => {\n const node = nodes[key];\n node.inputNames.forEach((name, index) => {\n const [nodeName, , outputName] = getNodeNameAndIndex(name);\n const inputNode = nodes[nodeName];\n if (inputNode.outputs != null) {\n const outputIndex = inputNode.outputs.indexOf(outputName);\n if (outputIndex !== -1) {\n const inputName = `${nodeName}:${outputIndex}`;\n // update the input name to use the mapped output index directly.\n node.inputNames[index] = inputName;\n }\n }\n node.inputs.push(inputNode);\n inputNode.children.push(node);\n });\n });\n // if signature has not outputs set, add any node that does not have\n // outputs.\n if (Object.keys(outputNodeNameToKey).length === 0) {\n allNodes.forEach(key => {\n const node = nodes[key];\n if (node.children.length === 0) {\n outputs.push(node);\n }\n });\n }\n else {\n Object.keys(outputNodeNameToKey).forEach(name => {\n const [nodeName,] = getNodeNameAndIndex(name);\n const node = nodes[nodeName];\n if (node != null) {\n node.signatureKey = outputNodeNameToKey[name];\n outputs.push(node);\n }\n });\n }\n if (Object.keys(inputNodeNameToKey).length > 0) {\n Object.keys(inputNodeNameToKey).forEach(name => {\n const [nodeName,] = getNodeNameAndIndex(name);\n const node = nodes[nodeName];\n if (node) {\n node.signatureKey = inputNodeNameToKey[name];\n inputs.push(node);\n }\n });\n }\n else {\n inputs = placeholders;\n }\n let functions = {};\n if (graph.library != null && graph.library.function != null) {\n functions = graph.library.function.reduce((functions, func) => {\n functions[func.signature.name] = this.mapFunction(func);\n return functions;\n }, {});\n }\n const result = { nodes, inputs, outputs, weights, placeholders, signature, functions };\n if (initNodes.length > 0) {\n result.initNodes = initNodes;\n }\n return result;\n }\n mapSignatureEntries(entries) {\n return Object.keys(entries || {})\n .reduce((prev, curr) => {\n prev[entries[curr].name] = curr;\n return prev;\n }, {});\n }\n mapNode(node) {\n // Unsupported ops will cause an error at run-time (not parse time), since\n // they may not be used by the actual execution subgraph.\n const mapper = getRegisteredOp(node.op) || this.opMappers[node.op] || {};\n if (node.attr == null) {\n node.attr = {};\n }\n const newNode = {\n name: node.name,\n op: node.op,\n category: mapper.category,\n inputNames: (node.input ||\n []).map(input => input.startsWith('^') ? input.slice(1) : input),\n inputs: [],\n children: [],\n inputParams: {},\n attrParams: {},\n rawAttrs: node.attr,\n outputs: mapper.outputs\n };\n if (mapper.inputs != null) {\n newNode.inputParams =\n mapper.inputs.reduce((map, param) => {\n map[param.name] = {\n type: param.type,\n inputIndexStart: param.start,\n inputIndexEnd: param.end\n };\n return map;\n }, {});\n }\n if (mapper.attrs != null) {\n newNode.attrParams =\n mapper.attrs.reduce((map, param) => {\n const type = param.type;\n let value = undefined;\n switch (param.type) {\n case 'string':\n value = getStringParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getStringParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'string[]':\n value = getStringArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getStringArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'number':\n value = getNumberParam(node.attr, param.tfName, (param.defaultValue || 0));\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getNumberParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'number[]':\n value = getNumericArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getNumericArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'bool':\n value = getBoolParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getBoolParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'bool[]':\n value = getBoolArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getBoolArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'shape':\n value = getTensorShapeParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getTensorShapeParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'shape[]':\n value = getTensorShapeArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getTensorShapeArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'dtype':\n value = getDtypeParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getDtypeParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'dtype[]':\n value = getDtypeArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getDtypeArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'func':\n value = getFuncParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getFuncParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'tensor':\n case 'tensors':\n break;\n default:\n throw new Error(`Unsupported param type: ${param.type} for op: ${node.op}`);\n }\n map[param.name] = { value, type };\n return map;\n }, {});\n }\n return newNode;\n }\n // map the TFunctionDef to TFJS graph object\n mapFunction(functionDef) {\n const tfNodes = functionDef.nodeDef;\n const placeholders = [];\n const weights = [];\n let nodes = {};\n if (tfNodes != null) {\n nodes = tfNodes.reduce((map, node) => {\n map[node.name] = this.mapNode(node);\n if (node.op === 'Const') {\n weights.push(map[node.name]);\n }\n return map;\n }, {});\n }\n const inputs = [];\n const outputs = [];\n functionDef.signature.inputArg.forEach(arg => {\n const [nodeName,] = getNodeNameAndIndex(arg.name);\n const node = {\n name: nodeName,\n op: 'Placeholder',\n inputs: [],\n inputNames: [],\n category: 'graph',\n inputParams: {},\n attrParams: { dtype: { value: parseDtypeParam(arg.type), type: 'dtype' } },\n children: []\n };\n node.signatureKey = arg.name;\n inputs.push(node);\n nodes[nodeName] = node;\n });\n const allNodes = Object.keys(nodes);\n allNodes.forEach(key => {\n const node = nodes[key];\n node.inputNames.forEach((name, index) => {\n const [nodeName, , outputName] = getNodeNameAndIndex(name);\n const inputNode = nodes[nodeName];\n if (inputNode.outputs != null) {\n const outputIndex = inputNode.outputs.indexOf(outputName);\n if (outputIndex !== -1) {\n const inputName = `${nodeName}:${outputIndex}`;\n // update the input name to use the mapped output index directly.\n node.inputNames[index] = inputName;\n }\n }\n node.inputs.push(inputNode);\n inputNode.children.push(node);\n });\n });\n const returnNodeMap = functionDef.ret;\n functionDef.signature.outputArg.forEach(output => {\n const [nodeName, index] = getNodeNameAndIndex(returnNodeMap[output.name]);\n const node = nodes[nodeName];\n if (node != null) {\n node.defaultOutput = index;\n outputs.push(node);\n }\n });\n const signature = this.mapArgsToSignature(functionDef);\n return { nodes, inputs, outputs, weights, placeholders, signature };\n }\n mapArgsToSignature(functionDef) {\n return {\n methodName: functionDef.signature.name,\n inputs: functionDef.signature.inputArg.reduce((map, arg) => {\n map[arg.name] = this.mapArgToTensorInfo(arg);\n return map;\n }, {}),\n outputs: functionDef.signature.outputArg.reduce((map, arg) => {\n map[arg.name] = this.mapArgToTensorInfo(arg, functionDef.ret);\n return map;\n }, {}),\n };\n }\n mapArgToTensorInfo(arg, nameMap) {\n let name = arg.name;\n if (nameMap != null) {\n name = nameMap[name];\n }\n return { name, dtype: arg.type };\n }\n}\nexport function decodeBase64(text) {\n const global = env().global;\n if (typeof global.atob !== 'undefined') {\n return global.atob(text);\n }\n else if (typeof Buffer !== 'undefined') {\n return new Buffer(text, 'base64').toString();\n }\n else {\n throw new Error('Unable to decode base64 in this environment. ' +\n 'Missing built-in atob() or Buffer()');\n }\n}\nexport function parseStringParam(s, keepCase) {\n const value = Array.isArray(s) ? String.fromCharCode.apply(null, s) : decodeBase64(s);\n return keepCase ? value : value.toLowerCase();\n}\nexport function getStringParam(attrs, name, def, keepCase = false) {\n const param = attrs[name];\n if (param != null) {\n return parseStringParam(param.s, keepCase);\n }\n return def;\n}\nexport function getBoolParam(attrs, name, def) {\n const param = attrs[name];\n return param ? param.b : def;\n}\nexport function getNumberParam(attrs, name, def) {\n const param = attrs[name] || {};\n const value = param['i'] != null ? param['i'] : (param['f'] != null ? param['f'] : def);\n return (typeof value === 'number') ? value : parseInt(value, 10);\n}\nexport function parseDtypeParam(value) {\n if (typeof (value) === 'string') {\n // tslint:disable-next-line:no-any\n value = tensorflow.DataType[value];\n }\n switch (value) {\n case tensorflow.DataType.DT_FLOAT:\n case tensorflow.DataType.DT_HALF:\n return 'float32';\n case tensorflow.DataType.DT_INT32:\n case tensorflow.DataType.DT_INT64:\n case tensorflow.DataType.DT_INT8:\n case tensorflow.DataType.DT_UINT8:\n return 'int32';\n case tensorflow.DataType.DT_BOOL:\n return 'bool';\n case tensorflow.DataType.DT_DOUBLE:\n return 'float32';\n case tensorflow.DataType.DT_STRING:\n return 'string';\n case tensorflow.DataType.DT_COMPLEX64:\n case tensorflow.DataType.DT_COMPLEX128:\n return 'complex64';\n default:\n // Unknown dtype error will happen at runtime (instead of parse time),\n // since these nodes might not be used by the actual subgraph execution.\n return null;\n }\n}\nexport function getFuncParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.func) {\n return param.func.name;\n }\n return def;\n}\nexport function getDtypeParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.type) {\n return parseDtypeParam(param.type);\n }\n return def;\n}\nexport function getDtypeArrayParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.list && param.list.type) {\n return param.list.type.map(v => parseDtypeParam(v));\n }\n return def;\n}\nexport function parseTensorShapeParam(shape) {\n if (shape.unknownRank) {\n return undefined;\n }\n if (shape.dim != null) {\n return shape.dim.map(dim => (typeof dim.size === 'number') ? dim.size : parseInt(dim.size, 10));\n }\n return [];\n}\nexport function getTensorShapeParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.shape) {\n return parseTensorShapeParam(param.shape);\n }\n return def;\n}\nexport function getNumericArrayParam(attrs, name, def) {\n const param = attrs[name];\n if (param) {\n return ((param.list.f && param.list.f.length ? param.list.f :\n param.list.i) ||\n [])\n .map(v => (typeof v === 'number') ? v : parseInt(v, 10));\n }\n return def;\n}\nexport function getStringArrayParam(attrs, name, def, keepCase = false) {\n const param = attrs[name];\n if (param && param.list && param.list.s) {\n return param.list.s.map((v) => {\n return parseStringParam(v, keepCase);\n });\n }\n return def;\n}\nexport function getTensorShapeArrayParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.list && param.list.shape) {\n return param.list.shape.map((v) => {\n return parseTensorShapeParam(v);\n });\n }\n return def;\n}\nexport function getBoolArrayParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.list && param.list.b) {\n return param.list.b;\n }\n return def;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uX21hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wZXJhdGlvbl9tYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFXLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEtBQUssU0FBUyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEtB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QUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUMzQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2hDLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsS0FBNkMsRUFBRSxJQUFZLEVBQzNELEdBQWM7SUFDaEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDdkMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgZW52fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQgKiBhcyB0ZW5zb3JmbG93IGZyb20gJy4uL2RhdGEvY29tcGlsZWRfYXBpJztcblxuaW1wb3J0IHtnZXRSZWdpc3RlcmVkT3B9IGZyb20gJy4vY3VzdG9tX29wL3JlZ2lzdGVyJztcbmltcG9ydCB7Z2V0Tm9kZU5hbWVBbmRJbmRleH0gZnJvbSAnLi9leGVjdXRvcnMvdXRpbHMnO1xuaW1wb3J0ICogYXMgYXJpdGhtZXRpYyBmcm9tICcuL29wX2xpc3QvYXJpdGhtZXRpYyc7XG5pbXBvcnQgKiBhcyBiYXNpY01hdGggZnJvbSAnLi9vcF9saXN0L2Jhc2ljX21hdGgnO1xuaW1wb3J0ICogYXMgY29udHJvbCBmcm9tICcuL29wX2xpc3QvY29udHJvbCc7XG5pbXBvcnQgKiBhcyBjb252b2x1dGlvbiBmcm9tICcuL29wX2xpc3QvY29udm9sdXRpb24nO1xuaW1wb3J0ICogYXMgY3JlYXRpb24gZnJvbSAnLi9vcF9saXN0L2NyZWF0aW9uJztcbmltcG9ydCAqIGFzIGR5bmFtaWMgZnJvbSAnLi9vcF9saXN0L2R5bmFtaWMnO1xuaW1wb3J0ICogYXMgZXZhbHVhdGlvbiBmcm9tICcuL29wX2xpc3QvZXZhbHVhdGlvbic7XG5pbXBvcnQgKiBhcyBncmFwaCBmcm9tICcuL29wX2xpc3QvZ3JhcGgnO1xuaW1wb3J0ICogYXMgaGFzaFRhYmxlIGZyb20gJy4vb3BfbGlzdC9oYXNoX3RhYmxlJztcbmltcG9ydCAqIGFzIGltYWdlIGZyb20gJy4vb3BfbGlzdC9pbWFnZSc7XG5pbXBvcnQgKiBhcyBsb2dpY2FsIGZyb20gJy4vb3BfbGlzdC9sb2dpY2FsJztcbmltcG9ydCAqIGFzIG1hdHJpY2VzIGZyb20gJy4vb3BfbGlzdC9tYXRyaWNlcyc7XG5pbXBvcnQgKiBhcyBub3JtYWxpemF0aW9uIGZyb20gJy4vb3BfbGlzdC9ub3JtYWxpemF0aW9uJztcbmltcG9ydCAqIGFzIHJlZHVjdGlvbiBmcm9tICcuL29wX2xpc3QvcmVkdWN0aW9uJztcbmltcG9ydCAqIGFzIHNsaWNlSm9pbiBmcm9tICcuL29wX2xpc3Qvc2xpY2Vfam9pbic7XG5pbXBvcnQgKiBhcyBzcGFyc2UgZnJvbSAnLi9vcF9saXN0L3NwYXJzZSc7XG5pbXBvcnQgKiBhcyBzcGVjdHJhbCBmcm9tICcuL29wX2xpc3Qvc3BlY3RyYWwnO1xuaW1wb3J0ICogYXMgc3RyaW5nIGZyb20gJy4vb3BfbGlzdC9zdHJpbmcnO1xuaW1wb3J0ICogYXMgdHJhbnNmb3JtYXRpb24gZnJvbSAnLi9vcF9saXN0L3RyYW5zZm9ybWF0aW9uJztcbmltcG9ydCB7R3JhcGgsIElucHV0UGFyYW1WYWx1ZSwgTm9kZSwgT3BNYXBwZXIsIFBhcmFtVmFsdWV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uTWFwcGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBPcGVyYXRpb25NYXBwZXI7XG5cbiAgcHJpdmF0ZSBvcE1hcHBlcnM6IHtba2V5OiBzdHJpbmddOiBPcE1hcHBlcn07XG5cbiAgLy8gU2luZ2xldG9uIGluc3RhbmNlIGZvciB0aGUgbWFwcGVyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgdGhpcygpKTtcbiAgfVxuXG4gIC8vIExvYWRzIHRoZSBvcCBtYXBwaW5nIGZyb20gdGhlIEpTT04gZmlsZS5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBvcHMgPSBbXG4gICAgICBhcml0aG1ldGljLCBiYXNpY01hdGgsIGNvbnRyb2wsIGNvbnZvbHV0aW9uLCBjcmVhdGlvbiwgZHluYW1pYyxcbiAgICAgIGV2YWx1YXRpb24sIGdyYXBoLCBoYXNoVGFibGUsIGltYWdlLCBsb2dpY2FsLCBtYXRyaWNlcywgbm9ybWFsaXphdGlvbixcbiAgICAgIHJlZHVjdGlvbiwgc2xpY2VKb2luLCBzcGFyc2UsIHNwZWN0cmFsLCBzdHJpbmcsIHRyYW5zZm9ybWF0aW9uXG4gICAgXTtcbiAgICBjb25zdCBtYXBwZXJzSnNvbjogT3BNYXBwZXJbXSA9IFtdLmNvbmNhdCguLi5vcHMubWFwKG9wID0+IG9wLmpzb24pKTtcblxuICAgIHRoaXMub3BNYXBwZXJzID0gbWFwcGVyc0pzb24ucmVkdWNlPHtba2V5OiBzdHJpbmddOiBPcE1hcHBlcn0+KFxuICAgICAgICAobWFwLCBtYXBwZXI6IE9wTWFwcGVyKSA9PiB7XG4gICAgICAgICAgbWFwW21hcHBlci50Zk9wTmFtZV0gPSBtYXBwZXI7XG4gICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAge30pO1xuICB9XG5cbiAgLy8gQ29udmVydHMgdGhlIG1vZGVsIGluZmVyZW5jZSBncmFwaCBmcm9tIFRlbnNvcmZsb3cgR3JhcGhEZWYgdG8gbG9jYWxcbiAgLy8gcmVwcmVzZW50YXRpb24gZm9yIFRlbnNvckZsb3cuanMgQVBJXG4gIHRyYW5zZm9ybUdyYXBoKFxuICAgICAgZ3JhcGg6IHRlbnNvcmZsb3cuSUdyYXBoRGVmLFxuICAgICAgc2lnbmF0dXJlOiB0ZW5zb3JmbG93LklTaWduYXR1cmVEZWYgPSB7fSk6IEdyYXBoIHtcbiAgICBjb25zdCB0Zk5vZGVzID0gZ3JhcGgubm9kZTtcbiAgICBjb25zdCBwbGFjZWhvbGRlcnM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHdlaWdodHM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IGluaXROb2RlczogTm9kZVtdID0gW107XG4gICAgY29uc3Qgbm9kZXMgPSB0Zk5vZGVzLnJlZHVjZTx7W2tleTogc3RyaW5nXTogTm9kZX0+KChtYXAsIG5vZGUpID0+IHtcbiAgICAgIG1hcFtub2RlLm5hbWVdID0gdGhpcy5tYXBOb2RlKG5vZGUpO1xuICAgICAgaWYgKG5vZGUub3Auc3RhcnRzV2l0aCgnUGxhY2Vob2xkZXInKSkge1xuICAgICAgICBwbGFjZWhvbGRlcnMucHVzaChtYXBbbm9kZS5uYW1lXSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT09ICdDb25zdCcpIHtcbiAgICAgICAgd2VpZ2h0cy5wdXNoKG1hcFtub2RlLm5hbWVdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5pbnB1dCA9PSBudWxsIHx8IG5vZGUuaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGluaXROb2Rlcy5wdXNoKG1hcFtub2RlLm5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfSwge30pO1xuXG4gICAgbGV0IGlucHV0czogTm9kZVtdID0gW107XG4gICAgY29uc3Qgb3V0cHV0czogTm9kZVtdID0gW107XG4gICAgbGV0IGlucHV0Tm9kZU5hbWVUb0tleToge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICBsZXQgb3V0cHV0Tm9kZU5hbWVUb0tleToge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICBpZiAoc2lnbmF0dXJlICE9IG51bGwpIHtcbiAgICAgIGlucHV0Tm9kZU5hbWVUb0tleSA9IHRoaXMubWFwU2lnbmF0dXJlRW50cmllcyhzaWduYXR1cmUuaW5wdXRzKTtcbiAgICAgIG91dHB1dE5vZGVOYW1lVG9LZXkgPSB0aGlzLm1hcFNpZ25hdHVyZUVudHJpZXMoc2lnbmF0dXJlLm91dHB1dHMpO1xuICAgIH1cbiAgICBjb25zdCBhbGxOb2RlcyA9IE9iamVjdC5rZXlzKG5vZGVzKTtcbiAgICBhbGxOb2Rlcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNba2V5XTtcbiAgICAgIG5vZGUuaW5wdXROYW1lcy5mb3JFYWNoKChuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBbbm9kZU5hbWUsICwgb3V0cHV0TmFtZV0gPSBnZXROb2RlTmFtZUFuZEluZGV4KG5hbWUpO1xuICAgICAgICBjb25zdCBpbnB1dE5vZGUgPSBub2Rlc1tub2RlTmFtZV07XG4gICAgICAgIGlmIChpbnB1dE5vZGUub3V0cHV0cyAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSBpbnB1dE5vZGUub3V0cHV0cy5pbmRleE9mKG91dHB1dE5hbWUpO1xuICAgICAgICAgIGlmIChvdXRwdXRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0TmFtZSA9IGAke25vZGVOYW1lfToke291dHB1dEluZGV4fWA7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGlucHV0IG5hbWUgdG8gdXNlIHRoZSBtYXBwZWQgb3V0cHV0IGluZGV4IGRpcmVjdGx5LlxuICAgICAgICAgICAgbm9kZS5pbnB1dE5hbWVzW2luZGV4XSA9IGlucHV0TmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5pbnB1dHMucHVzaChpbnB1dE5vZGUpO1xuICAgICAgICBpbnB1dE5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gaWYgc2lnbmF0dXJlIGhhcyBub3Qgb3V0cHV0cyBzZXQsIGFkZCBhbnkgbm9kZSB0aGF0IGRvZXMgbm90IGhhdmVcbiAgICAvLyBvdXRwdXRzLlxuICAgIGlmIChPYmplY3Qua2V5cyhvdXRwdXROb2RlTmFtZVRvS2V5KS5sZW5ndGggPT09IDApIHtcbiAgICAgIGFsbE5vZGVzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2tleV07XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIG91dHB1dHMucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5rZXlzKG91dHB1dE5vZGVOYW1lVG9LZXkpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IFtub2RlTmFtZSwgXSA9IGdldE5vZGVOYW1lQW5kSW5kZXgobmFtZSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tub2RlTmFtZV07XG4gICAgICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICBub2RlLnNpZ25hdHVyZUtleSA9IG91dHB1dE5vZGVOYW1lVG9LZXlbbmFtZV07XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoaW5wdXROb2RlTmFtZVRvS2V5KS5sZW5ndGggPiAwKSB7XG4gICAgICBPYmplY3Qua2V5cyhpbnB1dE5vZGVOYW1lVG9LZXkpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IFtub2RlTmFtZSwgXSA9IGdldE5vZGVOYW1lQW5kSW5kZXgobmFtZSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tub2RlTmFtZV07XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgbm9kZS5zaWduYXR1cmVLZXkgPSBpbnB1dE5vZGVOYW1lVG9LZXlbbmFtZV07XG4gICAgICAgICAgaW5wdXRzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHMgPSBwbGFjZWhvbGRlcnM7XG4gICAgfVxuXG4gICAgbGV0IGZ1bmN0aW9ucyA9IHt9O1xuICAgIGlmIChncmFwaC5saWJyYXJ5ICE9IG51bGwgJiYgZ3JhcGgubGlicmFyeS5mdW5jdGlvbiAhPSBudWxsKSB7XG4gICAgICBmdW5jdGlvbnMgPSBncmFwaC5saWJyYXJ5LmZ1bmN0aW9uLnJlZHVjZSgoZnVuY3Rpb25zLCBmdW5jKSA9PiB7XG4gICAgICAgIGZ1bmN0aW9uc1tmdW5jLnNpZ25hdHVyZS5uYW1lXSA9IHRoaXMubWFwRnVuY3Rpb24oZnVuYyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbnM7XG4gICAgICB9LCB7fSBhcyB7W2tleTogc3RyaW5nXTogR3JhcGh9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IEdyYXBoID1cbiAgICAgICAge25vZGVzLCBpbnB1dHMsIG91dHB1dHMsIHdlaWdodHMsIHBsYWNlaG9sZGVycywgc2lnbmF0dXJlLCBmdW5jdGlvbnN9O1xuXG4gICAgaWYgKGluaXROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQuaW5pdE5vZGVzID0gaW5pdE5vZGVzO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIG1hcFNpZ25hdHVyZUVudHJpZXMoZW50cmllczoge1trOiBzdHJpbmddOiB0ZW5zb3JmbG93LklUZW5zb3JJbmZvfSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRyaWVzIHx8IHt9KVxuICAgICAgICAucmVkdWNlPHtba2V5OiBzdHJpbmddOiBzdHJpbmd9PigocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgIHByZXZbZW50cmllc1tjdXJyXS5uYW1lXSA9IGN1cnI7XG4gICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgIH0sIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwTm9kZShub2RlOiB0ZW5zb3JmbG93LklOb2RlRGVmKTogTm9kZSB7XG4gICAgLy8gVW5zdXBwb3J0ZWQgb3BzIHdpbGwgY2F1c2UgYW4gZXJyb3IgYXQgcnVuLXRpbWUgKG5vdCBwYXJzZSB0aW1lKSwgc2luY2VcbiAgICAvLyB0aGV5IG1heSBub3QgYmUgdXNlZCBieSB0aGUgYWN0dWFsIGV4ZWN1dGlvbiBzdWJncmFwaC5cbiAgICBjb25zdCBtYXBwZXIgPVxuICAgICAgICBnZXRSZWdpc3RlcmVkT3Aobm9kZS5vcCkgfHwgdGhpcy5vcE1hcHBlcnNbbm9kZS5vcF0gfHwge30gYXMgT3BNYXBwZXI7XG4gICAgaWYgKG5vZGUuYXR0ciA9PSBudWxsKSB7XG4gICAgICBub2RlLmF0dHIgPSB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdOb2RlOiBOb2RlID0ge1xuICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgb3A6IG5vZGUub3AsXG4gICAgICBjYXRlZ29yeTogbWFwcGVyLmNhdGVnb3J5LFxuICAgICAgaW5wdXROYW1lczpcbiAgICAgICAgICAobm9kZS5pbnB1dCB8fFxuICAgICAgICAgICBbXSkubWFwKGlucHV0ID0+IGlucHV0LnN0YXJ0c1dpdGgoJ14nKSA/IGlucHV0LnNsaWNlKDEpIDogaW5wdXQpLFxuICAgICAgaW5wdXRzOiBbXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIGlucHV0UGFyYW1zOiB7fSxcbiAgICAgIGF0dHJQYXJhbXM6IHt9LFxuICAgICAgcmF3QXR0cnM6IG5vZGUuYXR0cixcbiAgICAgIG91dHB1dHM6IG1hcHBlci5vdXRwdXRzXG4gICAgfTtcblxuICAgIGlmIChtYXBwZXIuaW5wdXRzICE9IG51bGwpIHtcbiAgICAgIG5ld05vZGUuaW5wdXRQYXJhbXMgPVxuICAgICAgICAgIG1hcHBlci5pbnB1dHMucmVkdWNlPHtba2V5OiBzdHJpbmddOiBJbnB1dFBhcmFtVmFsdWV9PihcbiAgICAgICAgICAgICAgKG1hcCwgcGFyYW0pID0+IHtcbiAgICAgICAgICAgICAgICBtYXBbcGFyYW0ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBwYXJhbS50eXBlLFxuICAgICAgICAgICAgICAgICAgaW5wdXRJbmRleFN0YXJ0OiBwYXJhbS5zdGFydCxcbiAgICAgICAgICAgICAgICAgIGlucHV0SW5kZXhFbmQ6IHBhcmFtLmVuZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge30pO1xuICAgIH1cbiAgICBpZiAobWFwcGVyLmF0dHJzICE9IG51bGwpIHtcbiAgICAgIG5ld05vZGUuYXR0clBhcmFtcyA9XG4gICAgICAgICAgbWFwcGVyLmF0dHJzLnJlZHVjZTx7W2tleTogc3RyaW5nXTogUGFyYW1WYWx1ZX0+KChtYXAsIHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gcGFyYW0udHlwZTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHN3aXRjaCAocGFyYW0udHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0U3RyaW5nUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZOYW1lLCBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRTdHJpbmdQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdzdHJpbmdbXSc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRTdHJpbmdBcnJheVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmTmFtZSwgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIHN0cmluZ1tdKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRTdHJpbmdBcnJheVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZEZXByZWNhdGVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldE51bWJlclBhcmFtKFxuICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgKHBhcmFtLmRlZmF1bHRWYWx1ZSB8fCAwKSBhcyBudW1iZXIpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXROdW1iZXJQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIG51bWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdudW1iZXJbXSc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXROdW1lcmljQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50Zk5hbWUsIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBudW1iZXJbXSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgISFwYXJhbS50ZkRlcHJlY2F0ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldE51bWVyaWNBcnJheVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZEZXByZWNhdGVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgbnVtYmVyW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRCb29sUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZOYW1lLCBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgYm9vbGVhbik7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgISFwYXJhbS50ZkRlcHJlY2F0ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldEJvb2xQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIGJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnYm9vbFtdJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldEJvb2xBcnJheVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmTmFtZSwgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIGJvb2xlYW5bXSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgISFwYXJhbS50ZkRlcHJlY2F0ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldEJvb2xBcnJheVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZEZXByZWNhdGVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgYm9vbGVhbltdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3NoYXBlJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFRlbnNvclNoYXBlUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZOYW1lLCBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgbnVtYmVyW10pO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRUZW5zb3JTaGFwZVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZEZXByZWNhdGVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgbnVtYmVyW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnc2hhcGVbXSc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRUZW5zb3JTaGFwZUFycmF5UGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZOYW1lLCBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgbnVtYmVyW11bXSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgISFwYXJhbS50ZkRlcHJlY2F0ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFRlbnNvclNoYXBlQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIG51bWJlcltdW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZHR5cGUnOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0RHR5cGVQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50Zk5hbWUsIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBEYXRhVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgISFwYXJhbS50ZkRlcHJlY2F0ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldER0eXBlUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50ZkRlcHJlY2F0ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBEYXRhVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdkdHlwZVtdJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldER0eXBlQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50Zk5hbWUsIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBEYXRhVHlwZVtdKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhIXBhcmFtLnRmRGVwcmVjYXRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0RHR5cGVBcnJheVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZEZXByZWNhdGVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgRGF0YVR5cGVbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdmdW5jJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldEZ1bmNQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50Zk5hbWUsIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRGdW5jUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50ZkRlcHJlY2F0ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAndGVuc29yJzpcbiAgICAgICAgICAgICAgY2FzZSAndGVuc29ycyc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgVW5zdXBwb3J0ZWQgcGFyYW0gdHlwZTogJHtwYXJhbS50eXBlfSBmb3Igb3A6ICR7bm9kZS5vcH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hcFtwYXJhbS5uYW1lXSA9IHt2YWx1ZSwgdHlwZX07XG4gICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld05vZGU7XG4gIH1cblxuICAvLyBtYXAgdGhlIFRGdW5jdGlvbkRlZiB0byBURkpTIGdyYXBoIG9iamVjdFxuICBwcml2YXRlIG1hcEZ1bmN0aW9uKGZ1bmN0aW9uRGVmOiB0ZW5zb3JmbG93LklGdW5jdGlvbkRlZik6IEdyYXBoIHtcbiAgICBjb25zdCB0Zk5vZGVzID0gZnVuY3Rpb25EZWYubm9kZURlZjtcbiAgICBjb25zdCBwbGFjZWhvbGRlcnM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHdlaWdodHM6IE5vZGVbXSA9IFtdO1xuICAgIGxldCBub2Rlczoge1trZXk6IHN0cmluZ106IE5vZGV9ID0ge307XG4gICAgaWYgKHRmTm9kZXMgIT0gbnVsbCkge1xuICAgICAgbm9kZXMgPSB0Zk5vZGVzLnJlZHVjZTx7W2tleTogc3RyaW5nXTogTm9kZX0+KChtYXAsIG5vZGUpID0+IHtcbiAgICAgICAgbWFwW25vZGUubmFtZV0gPSB0aGlzLm1hcE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChub2RlLm9wID09PSAnQ29uc3QnKSB7XG4gICAgICAgICAgd2VpZ2h0cy5wdXNoKG1hcFtub2RlLm5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgfSwge30pO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dHM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IG91dHB1dHM6IE5vZGVbXSA9IFtdO1xuXG4gICAgZnVuY3Rpb25EZWYuc2lnbmF0dXJlLmlucHV0QXJnLmZvckVhY2goYXJnID0+IHtcbiAgICAgIGNvbnN0IFtub2RlTmFtZSwgXSA9IGdldE5vZGVOYW1lQW5kSW5kZXgoYXJnLm5hbWUpO1xuICAgICAgY29uc3Qgbm9kZTogTm9kZSA9IHtcbiAgICAgICAgbmFtZTogbm9kZU5hbWUsXG4gICAgICAgIG9wOiAnUGxhY2Vob2xkZXInLFxuICAgICAgICBpbnB1dHM6IFtdLFxuICAgICAgICBpbnB1dE5hbWVzOiBbXSxcbiAgICAgICAgY2F0ZWdvcnk6ICdncmFwaCcsXG4gICAgICAgIGlucHV0UGFyYW1zOiB7fSxcbiAgICAgICAgYXR0clBhcmFtczoge2R0eXBlOiB7dmFsdWU6IHBhcnNlRHR5cGVQYXJhbShhcmcudHlwZSksIHR5cGU6ICdkdHlwZSd9fSxcbiAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICB9O1xuICAgICAgbm9kZS5zaWduYXR1cmVLZXkgPSBhcmcubmFtZTtcbiAgICAgIGlucHV0cy5wdXNoKG5vZGUpO1xuICAgICAgbm9kZXNbbm9kZU5hbWVdID0gbm9kZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFsbE5vZGVzID0gT2JqZWN0LmtleXMobm9kZXMpO1xuICAgIGFsbE5vZGVzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1trZXldO1xuICAgICAgbm9kZS5pbnB1dE5hbWVzLmZvckVhY2goKG5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtub2RlTmFtZSwgLCBvdXRwdXROYW1lXSA9IGdldE5vZGVOYW1lQW5kSW5kZXgobmFtZSk7XG4gICAgICAgIGNvbnN0IGlucHV0Tm9kZSA9IG5vZGVzW25vZGVOYW1lXTtcbiAgICAgICAgaWYgKGlucHV0Tm9kZS5vdXRwdXRzICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IGlucHV0Tm9kZS5vdXRwdXRzLmluZGV4T2Yob3V0cHV0TmFtZSk7XG4gICAgICAgICAgaWYgKG91dHB1dEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXROYW1lID0gYCR7bm9kZU5hbWV9OiR7b3V0cHV0SW5kZXh9YDtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaW5wdXQgbmFtZSB0byB1c2UgdGhlIG1hcHBlZCBvdXRwdXQgaW5kZXggZGlyZWN0bHkuXG4gICAgICAgICAgICBub2RlLmlucHV0TmFtZXNbaW5kZXhdID0gaW5wdXROYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlLmlucHV0cy5wdXNoKGlucHV0Tm9kZSk7XG4gICAgICAgIGlucHV0Tm9kZS5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXR1cm5Ob2RlTWFwID0gZnVuY3Rpb25EZWYucmV0O1xuXG4gICAgZnVuY3Rpb25EZWYuc2lnbmF0dXJlLm91dHB1dEFyZy5mb3JFYWNoKG91dHB1dCA9PiB7XG4gICAgICBjb25zdCBbbm9kZU5hbWUsIGluZGV4XSA9IGdldE5vZGVOYW1lQW5kSW5kZXgocmV0dXJuTm9kZU1hcFtvdXRwdXQubmFtZV0pO1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVOYW1lXTtcbiAgICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgbm9kZS5kZWZhdWx0T3V0cHV0ID0gaW5kZXg7XG4gICAgICAgIG91dHB1dHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMubWFwQXJnc1RvU2lnbmF0dXJlKGZ1bmN0aW9uRGVmKTtcbiAgICByZXR1cm4ge25vZGVzLCBpbnB1dHMsIG91dHB1dHMsIHdlaWdodHMsIHBsYWNlaG9sZGVycywgc2lnbmF0dXJlfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQXJnc1RvU2lnbmF0dXJlKGZ1bmN0aW9uRGVmOiB0ZW5zb3JmbG93LklGdW5jdGlvbkRlZik6XG4gICAgICB0ZW5zb3JmbG93LklTaWduYXR1cmVEZWYge1xuICAgIHJldHVybiB7XG4gICAgICBtZXRob2ROYW1lOiBmdW5jdGlvbkRlZi5zaWduYXR1cmUubmFtZSxcbiAgICAgIGlucHV0czogZnVuY3Rpb25EZWYuc2lnbmF0dXJlLmlucHV0QXJnLnJlZHVjZShcbiAgICAgICAgICAobWFwLCBhcmcpID0+IHtcbiAgICAgICAgICAgIG1hcFthcmcubmFtZV0gPSB0aGlzLm1hcEFyZ1RvVGVuc29ySW5mbyhhcmcpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklUZW5zb3JJbmZvfSksXG4gICAgICBvdXRwdXRzOiBmdW5jdGlvbkRlZi5zaWduYXR1cmUub3V0cHV0QXJnLnJlZHVjZShcbiAgICAgICAgICAobWFwLCBhcmcpID0+IHtcbiAgICAgICAgICAgIG1hcFthcmcubmFtZV0gPSB0aGlzLm1hcEFyZ1RvVGVuc29ySW5mbyhhcmcsIGZ1bmN0aW9uRGVmLnJldCk7XG4gICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMge1trZXk6IHN0cmluZ106IHRlbnNvcmZsb3cuSVRlbnNvckluZm99KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBBcmdUb1RlbnNvckluZm8oXG4gICAgICBhcmc6IHRlbnNvcmZsb3cuT3BEZWYuSUFyZ0RlZixcbiAgICAgIG5hbWVNYXA/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IHRlbnNvcmZsb3cuSVRlbnNvckluZm8ge1xuICAgIGxldCBuYW1lID0gYXJnLm5hbWU7XG4gICAgaWYgKG5hbWVNYXAgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IG5hbWVNYXBbbmFtZV07XG4gICAgfVxuICAgIHJldHVybiB7bmFtZSwgZHR5cGU6IGFyZy50eXBlfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGdsb2JhbCA9IGVudigpLmdsb2JhbDtcbiAgaWYgKHR5cGVvZiBnbG9iYWwuYXRvYiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZ2xvYmFsLmF0b2IodGV4dCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcih0ZXh0LCAnYmFzZTY0JykudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gZGVjb2RlIGJhc2U2NCBpbiB0aGlzIGVudmlyb25tZW50LiAnICtcbiAgICAgICAgJ01pc3NpbmcgYnVpbHQtaW4gYXRvYigpIG9yIEJ1ZmZlcigpJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nUGFyYW0oczogW118c3RyaW5nLCBrZWVwQ2FzZTogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlID1cbiAgICAgIEFycmF5LmlzQXJyYXkocykgPyBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHMpIDogZGVjb2RlQmFzZTY0KHMpO1xuICByZXR1cm4ga2VlcENhc2UgPyB2YWx1ZSA6IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHJpbmdQYXJhbShcbiAgICBhdHRyczoge1trZXk6IHN0cmluZ106IHRlbnNvcmZsb3cuSUF0dHJWYWx1ZX0sIG5hbWU6IHN0cmluZywgZGVmOiBzdHJpbmcsXG4gICAga2VlcENhc2UgPSBmYWxzZSk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV07XG4gIGlmIChwYXJhbSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHBhcnNlU3RyaW5nUGFyYW0ocGFyYW0ucywga2VlcENhc2UpO1xuICB9XG4gIHJldHVybiBkZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb29sUGFyYW0oXG4gICAgYXR0cnM6IHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklBdHRyVmFsdWV9LCBuYW1lOiBzdHJpbmcsXG4gICAgZGVmOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV07XG4gIHJldHVybiBwYXJhbSA/IHBhcmFtLmIgOiBkZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1iZXJQYXJhbShcbiAgICBhdHRyczoge1trZXk6IHN0cmluZ106IHRlbnNvcmZsb3cuSUF0dHJWYWx1ZX0sIG5hbWU6IHN0cmluZyxcbiAgICBkZWY6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV0gfHwge307XG4gIGNvbnN0IHZhbHVlID1cbiAgICAgIHBhcmFtWydpJ10gIT0gbnVsbCA/IHBhcmFtWydpJ10gOiAocGFyYW1bJ2YnXSAhPSBudWxsID8gcGFyYW1bJ2YnXSA6IGRlZik7XG4gIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgPyB2YWx1ZSA6IHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR0eXBlUGFyYW0odmFsdWU6IHN0cmluZ3x0ZW5zb3JmbG93LkRhdGFUeXBlKTogRGF0YVR5cGUge1xuICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIHZhbHVlID0gdGVuc29yZmxvdy5EYXRhVHlwZVt2YWx1ZSBhcyBhbnldO1xuICB9XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlIHRlbnNvcmZsb3cuRGF0YVR5cGUuRFRfRkxPQVQ6XG4gICAgY2FzZSB0ZW5zb3JmbG93LkRhdGFUeXBlLkRUX0hBTEY6XG4gICAgICByZXR1cm4gJ2Zsb2F0MzInO1xuICAgIGNhc2UgdGVuc29yZmxvdy5EYXRhVHlwZS5EVF9JTlQzMjpcbiAgICBjYXNlIHRlbnNvcmZsb3cuRGF0YVR5cGUuRFRfSU5UNjQ6XG4gICAgY2FzZSB0ZW5zb3JmbG93LkRhdGFUeXBlLkRUX0lOVDg6XG4gICAgY2FzZSB0ZW5zb3JmbG93LkRhdGFUeXBlLkRUX1VJTlQ4OlxuICAgICAgcmV0dXJuICdpbnQzMic7XG4gICAgY2FzZSB0ZW5zb3JmbG93LkRhdGFUeXBlLkRUX0JPT0w6XG4gICAgICByZXR1cm4gJ2Jvb2wnO1xuICAgIGNhc2UgdGVuc29yZmxvdy5EYXRhVHlwZS5EVF9ET1VCTEU6XG4gICAgICByZXR1cm4gJ2Zsb2F0MzInO1xuICAgIGNhc2UgdGVuc29yZmxvdy5EYXRhVHlwZS5EVF9TVFJJTkc6XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgY2FzZSB0ZW5zb3JmbG93LkRhdGFUeXBlLkRUX0NPTVBMRVg2NDpcbiAgICBjYXNlIHRlbnNvcmZsb3cuRGF0YVR5cGUuRFRfQ09NUExFWDEyODpcbiAgICAgIHJldHVybiAnY29tcGxleDY0JztcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVW5rbm93biBkdHlwZSBlcnJvciB3aWxsIGhhcHBlbiBhdCBydW50aW1lIChpbnN0ZWFkIG9mIHBhcnNlIHRpbWUpLFxuICAgICAgLy8gc2luY2UgdGhlc2Ugbm9kZXMgbWlnaHQgbm90IGJlIHVzZWQgYnkgdGhlIGFjdHVhbCBzdWJncmFwaCBleGVjdXRpb24uXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY1BhcmFtKFxuICAgIGF0dHJzOiB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JQXR0clZhbHVlfSwgbmFtZTogc3RyaW5nLFxuICAgIGRlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyYW0gPSBhdHRyc1tuYW1lXTtcbiAgaWYgKHBhcmFtICYmIHBhcmFtLmZ1bmMpIHtcbiAgICByZXR1cm4gcGFyYW0uZnVuYy5uYW1lO1xuICB9XG4gIHJldHVybiBkZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREdHlwZVBhcmFtKFxuICAgIGF0dHJzOiB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JQXR0clZhbHVlfSwgbmFtZTogc3RyaW5nLFxuICAgIGRlZjogRGF0YVR5cGUpOiBEYXRhVHlwZSB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV07XG4gIGlmIChwYXJhbSAmJiBwYXJhbS50eXBlKSB7XG4gICAgcmV0dXJuIHBhcnNlRHR5cGVQYXJhbShwYXJhbS50eXBlKTtcbiAgfVxuICByZXR1cm4gZGVmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHR5cGVBcnJheVBhcmFtKFxuICAgIGF0dHJzOiB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JQXR0clZhbHVlfSwgbmFtZTogc3RyaW5nLFxuICAgIGRlZjogRGF0YVR5cGVbXSk6IERhdGFUeXBlW10ge1xuICBjb25zdCBwYXJhbSA9IGF0dHJzW25hbWVdO1xuICBpZiAocGFyYW0gJiYgcGFyYW0ubGlzdCAmJiBwYXJhbS5saXN0LnR5cGUpIHtcbiAgICByZXR1cm4gcGFyYW0ubGlzdC50eXBlLm1hcCh2ID0+IHBhcnNlRHR5cGVQYXJhbSh2KSk7XG4gIH1cbiAgcmV0dXJuIGRlZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGVuc29yU2hhcGVQYXJhbShzaGFwZTogdGVuc29yZmxvdy5JVGVuc29yU2hhcGUpOiBudW1iZXJbXXxcbiAgICB1bmRlZmluZWQge1xuICBpZiAoc2hhcGUudW5rbm93blJhbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzaGFwZS5kaW0gIT0gbnVsbCkge1xuICAgIHJldHVybiBzaGFwZS5kaW0ubWFwKFxuICAgICAgICBkaW0gPT5cbiAgICAgICAgICAgICh0eXBlb2YgZGltLnNpemUgPT09ICdudW1iZXInKSA/IGRpbS5zaXplIDogcGFyc2VJbnQoZGltLnNpemUsIDEwKSk7XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVuc29yU2hhcGVQYXJhbShcbiAgICBhdHRyczoge1trZXk6IHN0cmluZ106IHRlbnNvcmZsb3cuSUF0dHJWYWx1ZX0sIG5hbWU6IHN0cmluZyxcbiAgICBkZWY/OiBudW1iZXJbXSk6IG51bWJlcltdfHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV07XG4gIGlmIChwYXJhbSAmJiBwYXJhbS5zaGFwZSkge1xuICAgIHJldHVybiBwYXJzZVRlbnNvclNoYXBlUGFyYW0ocGFyYW0uc2hhcGUpO1xuICB9XG4gIHJldHVybiBkZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1lcmljQXJyYXlQYXJhbShcbiAgICBhdHRyczoge1trZXk6IHN0cmluZ106IHRlbnNvcmZsb3cuSUF0dHJWYWx1ZX0sIG5hbWU6IHN0cmluZyxcbiAgICBkZWY6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCBwYXJhbSA9IGF0dHJzW25hbWVdO1xuICBpZiAocGFyYW0pIHtcbiAgICByZXR1cm4gKChwYXJhbS5saXN0LmYgJiYgcGFyYW0ubGlzdC5mLmxlbmd0aCA/IHBhcmFtLmxpc3QuZiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5saXN0LmkpIHx8XG4gICAgICAgICAgICBbXSlcbiAgICAgICAgLm1hcCh2ID0+ICh0eXBlb2YgdiA9PT0gJ251bWJlcicpID8gdiA6IHBhcnNlSW50KHYsIDEwKSk7XG4gIH1cbiAgcmV0dXJuIGRlZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0cmluZ0FycmF5UGFyYW0oXG4gICAgYXR0cnM6IHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklBdHRyVmFsdWV9LCBuYW1lOiBzdHJpbmcsIGRlZjogc3RyaW5nW10sXG4gICAga2VlcENhc2UgPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFyYW0gPSBhdHRyc1tuYW1lXTtcbiAgaWYgKHBhcmFtICYmIHBhcmFtLmxpc3QgJiYgcGFyYW0ubGlzdC5zKSB7XG4gICAgcmV0dXJuIHBhcmFtLmxpc3Qucy5tYXAoKHYpID0+IHtcbiAgICAgIHJldHVybiBwYXJzZVN0cmluZ1BhcmFtKHYsIGtlZXBDYXNlKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGVmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVuc29yU2hhcGVBcnJheVBhcmFtKFxuICAgIGF0dHJzOiB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JQXR0clZhbHVlfSwgbmFtZTogc3RyaW5nLFxuICAgIGRlZjogbnVtYmVyW11bXSk6IG51bWJlcltdW10ge1xuICBjb25zdCBwYXJhbSA9IGF0dHJzW25hbWVdO1xuICBpZiAocGFyYW0gJiYgcGFyYW0ubGlzdCAmJiBwYXJhbS5saXN0LnNoYXBlKSB7XG4gICAgcmV0dXJuIHBhcmFtLmxpc3Quc2hhcGUubWFwKCh2KSA9PiB7XG4gICAgICByZXR1cm4gcGFyc2VUZW5zb3JTaGFwZVBhcmFtKHYpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb29sQXJyYXlQYXJhbShcbiAgICBhdHRyczoge1trZXk6IHN0cmluZ106IHRlbnNvcmZsb3cuSUF0dHJWYWx1ZX0sIG5hbWU6IHN0cmluZyxcbiAgICBkZWY6IGJvb2xlYW5bXSk6IGJvb2xlYW5bXSB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV07XG4gIGlmIChwYXJhbSAmJiBwYXJhbS5saXN0ICYmIHBhcmFtLmxpc3QuYikge1xuICAgIHJldHVybiBwYXJhbS5saXN0LmI7XG4gIH1cbiAgcmV0dXJuIGRlZjtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getTensor } from '../executors/utils';\nimport { getBoolArrayParam, getBoolParam, getDtypeArrayParam, getDtypeParam, getNumberParam, getNumericArrayParam, getStringArrayParam, getStringParam, getTensorShapeArrayParam, getTensorShapeParam } from '../operation_mapper';\n/**\n * Helper class for lookup inputs and params for nodes in the model graph.\n */\nexport class NodeValueImpl {\n constructor(node, tensorMap, context) {\n this.node = node;\n this.tensorMap = tensorMap;\n this.context = context;\n this.inputs = [];\n this.attrs = {};\n this.inputs = node.inputNames.map(name => this.getInput(name));\n if (node.rawAttrs != null) {\n this.attrs = Object.keys(node.rawAttrs)\n .reduce((attrs, key) => {\n attrs[key] = this.getAttr(key);\n return attrs;\n }, {});\n }\n }\n /**\n * Return the value of the attribute or input param.\n * @param name String: name of attribute or input param.\n */\n getInput(name) {\n return getTensor(name, this.tensorMap, this.context);\n }\n /**\n * Return the value of the attribute or input param.\n * @param name String: name of attribute or input param.\n */\n getAttr(name, defaultValue) {\n const value = this.node.rawAttrs[name];\n if (value.tensor != null) {\n return getTensor(name, this.tensorMap, this.context);\n }\n if (value.i != null || value.f != null) {\n return getNumberParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.s != null) {\n return getStringParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.b != null) {\n return getBoolParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.shape != null) {\n return getTensorShapeParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.type != null) {\n return getDtypeParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list != null) {\n if (value.list.i != null || value.list.f != null) {\n return getNumericArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list.s != null) {\n return getStringArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list.shape != null) {\n return getTensorShapeArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list.b != null) {\n return getBoolArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list.type != null) {\n return getDtypeArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n }\n return defaultValue;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV92YWx1ZV9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvY3VzdG9tX29wL25vZGVfdmFsdWVfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFNSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBR2pPOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFHeEIsWUFDWSxJQUFVLEVBQVUsU0FBMEIsRUFDOUMsT0FBeUI7UUFEekIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzlDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBSnJCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsVUFBSyxHQUErQixFQUFFLENBQUM7UUFJckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2lCQUNyQixNQUFNLENBQUMsQ0FBQyxLQUFpQyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNqRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFD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SSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQTBCLENBQUMsQ0FBQzthQUMzRDtTQUNGO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RhdGFUeXBlLCBUZW5zb3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtnZXRUZW5zb3J9IGZyb20gJy4uL2V4ZWN1dG9ycy91dGlscyc7XG5pbXBvcnQge2dldEJvb2xBcnJheVBhcmFtLCBnZXRCb29sUGFyYW0sIGdldER0eXBlQXJyYXlQYXJhbSwgZ2V0RHR5cGVQYXJhbSwgZ2V0TnVtYmVyUGFyYW0sIGdldE51bWVyaWNBcnJheVBhcmFtLCBnZXRTdHJpbmdBcnJheVBhcmFtLCBnZXRTdHJpbmdQYXJhbSwgZ2V0VGVuc29yU2hhcGVBcnJheVBhcmFtLCBnZXRUZW5zb3JTaGFwZVBhcmFtfSBmcm9tICcuLi9vcGVyYXRpb25fbWFwcGVyJztcbmltcG9ydCB7R3JhcGhOb2RlLCBOb2RlLCBWYWx1ZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIGxvb2t1cCBpbnB1dHMgYW5kIHBhcmFtcyBmb3Igbm9kZXMgaW4gdGhlIG1vZGVsIGdyYXBoLlxuICovXG5leHBvcnQgY2xhc3MgTm9kZVZhbHVlSW1wbCBpbXBsZW1lbnRzIEdyYXBoTm9kZSB7XG4gIHB1YmxpYyByZWFkb25seSBpbnB1dHM6IFRlbnNvcltdID0gW107XG4gIHB1YmxpYyByZWFkb25seSBhdHRyczoge1trZXk6IHN0cmluZ106IFZhbHVlVHlwZX0gPSB7fTtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIG5vZGU6IE5vZGUsIHByaXZhdGUgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgICBwcml2YXRlIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICB0aGlzLmlucHV0cyA9IG5vZGUuaW5wdXROYW1lcy5tYXAobmFtZSA9PiB0aGlzLmdldElucHV0KG5hbWUpKTtcbiAgICBpZiAobm9kZS5yYXdBdHRycyAhPSBudWxsKSB7XG4gICAgICB0aGlzLmF0dHJzID0gT2JqZWN0LmtleXMobm9kZS5yYXdBdHRycylcbiAgICAgICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYXR0cnM6IHtba2V5OiBzdHJpbmddOiBWYWx1ZVR5cGV9LCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyc1trZXldID0gdGhpcy5nZXRBdHRyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBvciBpbnB1dCBwYXJhbS5cbiAgICogQHBhcmFtIG5hbWUgU3RyaW5nOiBuYW1lIG9mIGF0dHJpYnV0ZSBvciBpbnB1dCBwYXJhbS5cbiAgICovXG4gIHByaXZhdGUgZ2V0SW5wdXQobmFtZTogc3RyaW5nKTogVGVuc29yIHtcbiAgICByZXR1cm4gZ2V0VGVuc29yKG5hbWUsIHRoaXMudGVuc29yTWFwLCB0aGlzLmNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBvciBpbnB1dCBwYXJhbS5cbiAgICogQHBhcmFtIG5hbWUgU3RyaW5nOiBuYW1lIG9mIGF0dHJpYnV0ZSBvciBpbnB1dCBwYXJhbS5cbiAgICovXG4gIHByaXZhdGUgZ2V0QXR0cihuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IFZhbHVlVHlwZSk6IFZhbHVlVHlwZSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm5vZGUucmF3QXR0cnNbbmFtZV07XG4gICAgaWYgKHZhbHVlLnRlbnNvciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZ2V0VGVuc29yKG5hbWUsIHRoaXMudGVuc29yTWFwLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaSAhPSBudWxsIHx8IHZhbHVlLmYgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGdldE51bWJlclBhcmFtKHRoaXMubm9kZS5yYXdBdHRycywgbmFtZSwgZGVmYXVsdFZhbHVlIGFzIG51bWJlcik7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBnZXRTdHJpbmdQYXJhbSh0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuYiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZ2V0Qm9vbFBhcmFtKHRoaXMubm9kZS5yYXdBdHRycywgbmFtZSwgZGVmYXVsdFZhbHVlIGFzIGJvb2xlYW4pO1xuICAgIH1cbiAgICBpZiAodmFsdWUuc2hhcGUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGdldFRlbnNvclNoYXBlUGFyYW0oXG4gICAgICAgICAgdGhpcy5ub2RlLnJhd0F0dHJzLCBuYW1lLCBkZWZhdWx0VmFsdWUgYXMgbnVtYmVyW10pO1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZ2V0RHR5cGVQYXJhbSh0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBEYXRhVHlwZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5saXN0ICE9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZS5saXN0LmkgIT0gbnVsbCB8fCB2YWx1ZS5saXN0LmYgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZ2V0TnVtZXJpY0FycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBudW1iZXJbXSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUubGlzdC5zICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdldFN0cmluZ0FycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBzdHJpbmdbXSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUubGlzdC5zaGFwZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBnZXRUZW5zb3JTaGFwZUFycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBudW1iZXJbXVtdKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZS5saXN0LmIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZ2V0Qm9vbEFycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBib29sZWFuW10pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlLmxpc3QudHlwZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBnZXREdHlwZUFycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBEYXRhVHlwZVtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * This differs from util.assertShapesMatch in that it allows values of\n * negative one, an undefined size of a dimensinon, in a shape to match\n * anything.\n */\nimport { util } from '@tensorflow/tfjs-core';\n/**\n * Used by TensorList and TensorArray to verify if elementShape matches, support\n * negative value as the dim shape.\n * @param shapeA\n * @param shapeB\n * @param errorMessagePrefix\n */\nexport function assertShapesMatchAllowUndefinedSize(shapeA, shapeB, errorMessagePrefix = '') {\n // constant shape means unknown rank\n if (typeof shapeA === 'number' || typeof shapeB === 'number') {\n return;\n }\n util.assert(shapeA.length === shapeB.length, () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n for (let i = 0; i < shapeA.length; i++) {\n const dim0 = shapeA[i];\n const dim1 = shapeB[i];\n util.assert(dim0 < 0 || dim1 < 0 || dim0 === dim1, () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n }\n}\nexport function fullDefinedShape(elementShape) {\n if (typeof elementShape === 'number' || elementShape.some(dim => dim < 0)) {\n return false;\n }\n return true;\n}\n/**\n * Generate the output element shape from the list elementShape, list tensors\n * and input param.\n * @param listElementShape\n * @param tensors\n * @param elementShape\n */\nexport function inferElementShape(listElementShape, tensors, elementShape) {\n let partialShape = mergeElementShape(listElementShape, elementShape);\n const notfullDefinedShape = !fullDefinedShape(partialShape);\n if (notfullDefinedShape && tensors.length === 0) {\n throw new Error(`Tried to calculate elements of an empty list` +\n ` with non-fully-defined elementShape: ${partialShape}`);\n }\n if (notfullDefinedShape) {\n tensors.forEach(tensor => {\n partialShape = mergeElementShape(tensor.shape, partialShape);\n });\n }\n if (!fullDefinedShape(partialShape)) {\n throw new Error(`Non-fully-defined elementShape: ${partialShape}`);\n }\n return partialShape;\n}\nexport function mergeElementShape(elementShapeA, elementShapeB) {\n if (typeof elementShapeA === 'number') {\n return elementShapeB;\n }\n if (typeof elementShapeB === 'number') {\n return elementShapeA;\n }\n if (elementShapeA.length !== elementShapeB.length) {\n throw new Error(`Incompatible ranks during merge: ${elementShapeA} vs. ${elementShapeB}`);\n }\n const result = [];\n for (let i = 0; i < elementShapeA.length; ++i) {\n const dim0 = elementShapeA[i];\n const dim1 = elementShapeB[i];\n if (dim0 >= 0 && dim1 >= 0 && dim0 !== dim1) {\n throw new Error(`Incompatible shape during merge: ${elementShapeA} vs. ${elementShapeB}`);\n }\n result[i] = dim0 >= 0 ? dim0 : dim1;\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX3V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL2V4ZWN1dG9yL3RlbnNvcl91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSDs7OztHQUlHO0FBRUgsT0FBTyxFQUFTLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5EOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQ0FBbUMsQ0FDL0MsTUFBdUIsRUFBRSxNQUF1QixFQUNoRCxrQkFBa0IsR0FBRyxFQUFFO0lBQ3pCLG9DQUFvQztJQUNwQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDNUQsT0FBTztLQUNSO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQy9CLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsTUFBTSxRQUFRLE1BQU0sYUFBYSxDQUFDLENBQUM7SUFDN0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUNyQyxHQUFHLEVBQUUsQ0FDRCxrQkFBa0IsR0FBRyxXQUFXLE1BQU0sUUFBUSxNQUFNLGFBQWEsQ0FBQyxDQUFDO0tBQzVFO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxZQUE2QjtJQUM1RCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3pFLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQzdCLGdCQUFpQyxFQUFFLE9BQWlCLEVBQ3BELFlBQTZCO0lBQy9CLElBQUksWUFBWSxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1RCxJQUFJLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQ1gsOENBQThDO1lBQzlDLHlDQUF5QyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxtQkFBbUIsRUFBRTtRQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsWUFBWSxFQUFFLENBQUMsQ0FBQztLQUNwRTtJQUNELE9BQU8sWUFBd0IsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUM3QixhQUE4QixFQUFFLGFBQThCO0lBRWhFLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxFQUFFO1FBQ3JDLE9BQU8sYUFBYSxDQUFDO0tBQ3RCO0lBQ0QsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7UUFDckMsT0FBTyxhQUFhLENBQUM7S0FDdEI7SUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxhQUFhLFFBQzdELGFBQWEsRUFBRSxDQUFDLENBQUM7S0FDdEI7SUFFRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLGFBQWEsUUFDN0QsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUN0QjtRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztLQUNyQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbi8qKlxuICogVGhpcyBkaWZmZXJzIGZyb20gdXRpbC5hc3NlcnRTaGFwZXNNYXRjaCBpbiB0aGF0IGl0IGFsbG93cyB2YWx1ZXMgb2ZcbiAqIG5lZ2F0aXZlIG9uZSwgYW4gdW5kZWZpbmVkIHNpemUgb2YgYSBkaW1lbnNpbm9uLCBpbiBhIHNoYXBlIHRvIG1hdGNoXG4gKiBhbnl0aGluZy5cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuLyoqXG4gKiBVc2VkIGJ5IFRlbnNvckxpc3QgYW5kIFRlbnNvckFycmF5IHRvIHZlcmlmeSBpZiBlbGVtZW50U2hhcGUgbWF0Y2hlcywgc3VwcG9ydFxuICogbmVnYXRpdmUgdmFsdWUgYXMgdGhlIGRpbSBzaGFwZS5cbiAqIEBwYXJhbSBzaGFwZUFcbiAqIEBwYXJhbSBzaGFwZUJcbiAqIEBwYXJhbSBlcnJvck1lc3NhZ2VQcmVmaXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgIHNoYXBlQTogbnVtYmVyfG51bWJlcltdLCBzaGFwZUI6IG51bWJlcnxudW1iZXJbXSxcbiAgICBlcnJvck1lc3NhZ2VQcmVmaXggPSAnJyk6IHZvaWQge1xuICAvLyBjb25zdGFudCBzaGFwZSBtZWFucyB1bmtub3duIHJhbmtcbiAgaWYgKHR5cGVvZiBzaGFwZUEgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzaGFwZUIgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgc2hhcGVBLmxlbmd0aCA9PT0gc2hhcGVCLmxlbmd0aCxcbiAgICAgICgpID0+IGVycm9yTWVzc2FnZVByZWZpeCArIGAgU2hhcGVzICR7c2hhcGVBfSBhbmQgJHtzaGFwZUJ9IG11c3QgbWF0Y2hgKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkaW0wID0gc2hhcGVBW2ldO1xuICAgIGNvbnN0IGRpbTEgPSBzaGFwZUJbaV07XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGRpbTAgPCAwIHx8IGRpbTEgPCAwIHx8IGRpbTAgPT09IGRpbTEsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2VQcmVmaXggKyBgIFNoYXBlcyAke3NoYXBlQX0gYW5kICR7c2hhcGVCfSBtdXN0IG1hdGNoYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZ1bGxEZWZpbmVkU2hhcGUoZWxlbWVudFNoYXBlOiBudW1iZXJ8bnVtYmVyW10pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBlbGVtZW50U2hhcGUgPT09ICdudW1iZXInIHx8IGVsZW1lbnRTaGFwZS5zb21lKGRpbSA9PiBkaW0gPCAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogR2VuZXJhdGUgdGhlIG91dHB1dCBlbGVtZW50IHNoYXBlIGZyb20gdGhlIGxpc3QgZWxlbWVudFNoYXBlLCBsaXN0IHRlbnNvcnNcbiAqIGFuZCBpbnB1dCBwYXJhbS5cbiAqIEBwYXJhbSBsaXN0RWxlbWVudFNoYXBlXG4gKiBAcGFyYW0gdGVuc29yc1xuICogQHBhcmFtIGVsZW1lbnRTaGFwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJFbGVtZW50U2hhcGUoXG4gICAgbGlzdEVsZW1lbnRTaGFwZTogbnVtYmVyfG51bWJlcltdLCB0ZW5zb3JzOiBUZW5zb3JbXSxcbiAgICBlbGVtZW50U2hhcGU6IG51bWJlcnxudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgbGV0IHBhcnRpYWxTaGFwZSA9IG1lcmdlRWxlbWVudFNoYXBlKGxpc3RFbGVtZW50U2hhcGUsIGVsZW1lbnRTaGFwZSk7XG4gIGNvbnN0IG5vdGZ1bGxEZWZpbmVkU2hhcGUgPSAhZnVsbERlZmluZWRTaGFwZShwYXJ0aWFsU2hhcGUpO1xuICBpZiAobm90ZnVsbERlZmluZWRTaGFwZSAmJiB0ZW5zb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNhbGN1bGF0ZSBlbGVtZW50cyBvZiBhbiBlbXB0eSBsaXN0YCArXG4gICAgICAgIGAgd2l0aCBub24tZnVsbHktZGVmaW5lZCBlbGVtZW50U2hhcGU6ICR7cGFydGlhbFNoYXBlfWApO1xuICB9XG4gIGlmIChub3RmdWxsRGVmaW5lZFNoYXBlKSB7XG4gICAgdGVuc29ycy5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICBwYXJ0aWFsU2hhcGUgPSBtZXJnZUVsZW1lbnRTaGFwZSh0ZW5zb3Iuc2hhcGUsIHBhcnRpYWxTaGFwZSk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFmdWxsRGVmaW5lZFNoYXBlKHBhcnRpYWxTaGFwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vbi1mdWxseS1kZWZpbmVkIGVsZW1lbnRTaGFwZTogJHtwYXJ0aWFsU2hhcGV9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWxTaGFwZSBhcyBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWxlbWVudFNoYXBlKFxuICAgIGVsZW1lbnRTaGFwZUE6IG51bWJlcnxudW1iZXJbXSwgZWxlbWVudFNoYXBlQjogbnVtYmVyfG51bWJlcltdKTogbnVtYmVyfFxuICAgIG51bWJlcltdIHtcbiAgaWYgKHR5cGVvZiBlbGVtZW50U2hhcGVBID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBlbGVtZW50U2hhcGVCO1xuICB9XG4gIGlmICh0eXBlb2YgZWxlbWVudFNoYXBlQiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZWxlbWVudFNoYXBlQTtcbiAgfVxuXG4gIGlmIChlbGVtZW50U2hhcGVBLmxlbmd0aCAhPT0gZWxlbWVudFNoYXBlQi5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29tcGF0aWJsZSByYW5rcyBkdXJpbmcgbWVyZ2U6ICR7ZWxlbWVudFNoYXBlQX0gdnMuICR7XG4gICAgICAgIGVsZW1lbnRTaGFwZUJ9YCk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudFNoYXBlQS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGRpbTAgPSBlbGVtZW50U2hhcGVBW2ldO1xuICAgIGNvbnN0IGRpbTEgPSBlbGVtZW50U2hhcGVCW2ldO1xuICAgIGlmIChkaW0wID49IDAgJiYgZGltMSA+PSAwICYmIGRpbTAgIT09IGRpbTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb21wYXRpYmxlIHNoYXBlIGR1cmluZyBtZXJnZTogJHtlbGVtZW50U2hhcGVBfSB2cy4gJHtcbiAgICAgICAgICBlbGVtZW50U2hhcGVCfWApO1xuICAgIH1cbiAgICByZXN1bHRbaV0gPSBkaW0wID49IDAgPyBkaW0wIDogZGltMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { concat, keep, reshape, scalar, slice, stack, tensor, tidy, unstack } from '@tensorflow/tfjs-core';\nimport { assertShapesMatchAllowUndefinedSize } from './tensor_utils';\n/**\n * The TensorArray object keeps an array of Tensors. It\n * allows reading from the array and writing to the array.\n */\nexport class TensorArray {\n constructor(name, dtype, maxSize, elementShape, identicalElementShapes, dynamicSize, clearAfterRead) {\n this.name = name;\n this.dtype = dtype;\n this.maxSize = maxSize;\n this.elementShape = elementShape;\n this.identicalElementShapes = identicalElementShapes;\n this.dynamicSize = dynamicSize;\n this.clearAfterRead = clearAfterRead;\n this.tensors = [];\n this.closed_ = false;\n this.idTensor = scalar(0);\n keep(this.idTensor);\n }\n get id() {\n return this.idTensor.id;\n }\n get closed() {\n return this.closed_;\n }\n /**\n * Dispose the tensors and idTensor and mark the TensoryArray as closed.\n */\n clearAndClose(keepIds) {\n this.tensors.forEach(tensor => {\n if (keepIds == null || !keepIds.has(tensor.tensor.id)) {\n tensor.tensor.dispose();\n }\n });\n this.tensors = [];\n this.closed_ = true;\n this.idTensor.dispose();\n }\n size() {\n return this.tensors.length;\n }\n /**\n * Read the value at location index in the TensorArray.\n * @param index Number the index to read from.\n */\n read(index) {\n if (this.closed_) {\n throw new Error(`TensorArray ${this.name} has already been closed.`);\n }\n if (index < 0 || index >= this.size()) {\n throw new Error(`Tried to read from index ${index}, but array size is: ${this.size()}`);\n }\n const tensorWithState = this.tensors[index];\n if (tensorWithState.cleared) {\n throw new Error(`TensorArray ${this.name}: Could not read index ${index} twice because it was cleared after a previous read ` +\n `(perhaps try setting clear_after_read = false?).`);\n }\n if (this.clearAfterRead) {\n tensorWithState.cleared = true;\n }\n tensorWithState.read = true;\n return tensorWithState.tensor;\n }\n /**\n * Helper method to read multiple tensors from the specified indices.\n */\n readMany(indices) {\n return indices.map(index => this.read(index));\n }\n /**\n * Write value into the index of the TensorArray.\n * @param index number the index to write to.\n * @param tensor\n */\n write(index, tensor) {\n if (this.closed_) {\n throw new Error(`TensorArray ${this.name} has already been closed.`);\n }\n if (index < 0 || !this.dynamicSize && index >= this.maxSize) {\n throw new Error(`Tried to write to index ${index}, but array is not resizeable and size is: ${this.maxSize}`);\n }\n const t = this.tensors[index] || {};\n if (tensor.dtype !== this.dtype) {\n 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}.`);\n }\n // Set the shape for the first time write to unknow shape tensor array\n if (this.size() === 0 &&\n (this.elementShape == null || this.elementShape.length === 0)) {\n this.elementShape = tensor.shape;\n }\n assertShapesMatchAllowUndefinedSize(this.elementShape, tensor.shape, `TensorArray ${this.name}: Could not write to TensorArray index ${index}.`);\n if (t.read) {\n throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${index}, because it has already been read.`);\n }\n if (t.written) {\n throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${index}, because it has already been written.`);\n }\n t.tensor = tensor;\n keep(tensor);\n t.written = true;\n this.tensors[index] = t;\n }\n /**\n * Helper method to write multiple tensors to the specified indices.\n */\n writeMany(indices, tensors) {\n if (indices.length !== tensors.length) {\n throw new Error(`TensorArray ${this.name}: could not write multiple tensors,` +\n `because the index size: ${indices.length} is not the same as tensors size: ${tensors.length}.`);\n }\n indices.forEach((i, index) => this.write(i, tensors[index]));\n }\n /**\n * Return selected values in the TensorArray as a packed Tensor. All of\n * selected values must have been written and their shapes must all match.\n * @param [indices] number[] Optional. Taking values in [0, max_value). If the\n * TensorArray is not dynamic, max_value=size(). If not specified returns\n * all tensors in the original order.\n * @param [dtype]\n */\n gather(indices, dtype) {\n if (!!dtype && dtype !== this.dtype) {\n throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${dtype}`);\n }\n if (!indices) {\n indices = [];\n for (let i = 0; i < this.size(); i++) {\n indices.push(i);\n }\n }\n else {\n indices = indices.slice(0, this.size());\n }\n if (indices.length === 0) {\n return tensor([], [0].concat(this.elementShape));\n }\n // Read all the PersistentTensors into a vector to keep track of\n // their memory.\n const tensors = this.readMany(indices);\n assertShapesMatchAllowUndefinedSize(this.elementShape, tensors[0].shape, 'TensorArray shape mismatch: ');\n return stack(tensors, 0);\n }\n /**\n * Return the values in the TensorArray as a concatenated Tensor.\n */\n concat(dtype) {\n if (!!dtype && dtype !== this.dtype) {\n throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${dtype}`);\n }\n if (this.size() === 0) {\n return tensor([], [0].concat(this.elementShape));\n }\n const indices = [];\n for (let i = 0; i < this.size(); i++) {\n indices.push(i);\n }\n // Collect all the tensors from the tensors array.\n const tensors = this.readMany(indices);\n assertShapesMatchAllowUndefinedSize(this.elementShape, tensors[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${tensors[0].shape})`);\n return concat(tensors, 0);\n }\n /**\n * Scatter the values of a Tensor in specific indices of a TensorArray.\n * @param indices number[] values in [0, max_value). If the\n * TensorArray is not dynamic, max_value=size().\n * @param tensor Tensor input tensor.\n */\n scatter(indices, tensor) {\n if (tensor.dtype !== this.dtype) {\n throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${tensor.dtype}`);\n }\n if (indices.length !== tensor.shape[0]) {\n throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${indices.length} vs. ${tensor.shape[0]}`);\n }\n const maxIndex = Math.max(...indices);\n if (!this.dynamicSize && maxIndex >= this.maxSize) {\n throw new Error(`Max index must be < array size (${maxIndex} vs. ${this.maxSize})`);\n }\n this.writeMany(indices, unstack(tensor, 0));\n }\n /**\n * Split the values of a Tensor into the TensorArray.\n * @param length number[] with the lengths to use when splitting value along\n * its first dimension.\n * @param tensor Tensor, the tensor to split.\n */\n split(length, tensor) {\n if (tensor.dtype !== this.dtype) {\n throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${tensor.dtype}`);\n }\n let totalLength = 0;\n const cumulativeLengths = length.map(len => {\n totalLength += len;\n return totalLength;\n });\n if (totalLength !== tensor.shape[0]) {\n 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}`);\n }\n if (!this.dynamicSize && length.length !== this.maxSize) {\n throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${length.length}), ` +\n 'and the TensorArray is not marked as dynamically resizeable');\n }\n const elementPerRow = totalLength === 0 ? 0 : tensor.size / totalLength;\n const tensors = [];\n tidy(() => {\n tensor = reshape(tensor, [1, totalLength, elementPerRow]);\n for (let i = 0; i < length.length; ++i) {\n const previousLength = (i === 0) ? 0 : cumulativeLengths[i - 1];\n const indices = [0, previousLength, 0];\n const sizes = [1, length[i], elementPerRow];\n tensors[i] = reshape(slice(tensor, indices, sizes), this.elementShape);\n }\n return tensors;\n });\n const indices = [];\n for (let i = 0; i < length.length; i++) {\n indices[i] = i;\n }\n this.writeMany(indices, tensors);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX2FycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL2V4ZWN1dG9yL3RlbnNvcl9hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFZLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzSCxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQVFuRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUNhLElBQVksRUFBVyxLQUFlLEVBQVUsT0FBZSxFQUNoRSxZQUFzQixFQUFXLHNCQUErQixFQUMvRCxXQUFvQixFQUFXLGNBQXVCO1FBRnRELFNBQUksR0FBSixJQUFJLENBQVE7UUFBVyxVQUFLLEdBQUwsS0FBSyxDQUFVO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNoRSxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUFXLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBUztRQUMvRCxnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUFXLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBTjNELFlBQU8sR0FBc0IsRUFBRSxDQUFDO1FBQ2hDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFNdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENB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RUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEU7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2NvbmNhdCwgRGF0YVR5cGUsIGtlZXAsIHJlc2hhcGUsIHNjYWxhciwgc2xpY2UsIHN0YWNrLCBUZW5zb3IsIHRlbnNvciwgdGlkeSwgdW5zdGFja30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZX0gZnJvbSAnLi90ZW5zb3JfdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvcldpdGhTdGF0ZSB7XG4gIHRlbnNvcj86IFRlbnNvcjtcbiAgd3JpdHRlbj86IGJvb2xlYW47XG4gIHJlYWQ/OiBib29sZWFuO1xuICBjbGVhcmVkPzogYm9vbGVhbjtcbn1cbi8qKlxuICogVGhlIFRlbnNvckFycmF5IG9iamVjdCBrZWVwcyBhbiBhcnJheSBvZiBUZW5zb3JzLiAgSXRcbiAqIGFsbG93cyByZWFkaW5nIGZyb20gdGhlIGFycmF5IGFuZCB3cml0aW5nIHRvIHRoZSBhcnJheS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbnNvckFycmF5IHtcbiAgcHJpdmF0ZSB0ZW5zb3JzOiBUZW5zb3JXaXRoU3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIGNsb3NlZF8gPSBmYWxzZTtcbiAgcmVhZG9ubHkgaWRUZW5zb3I6IFRlbnNvcjtcbiAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBuYW1lOiBzdHJpbmcsIHJlYWRvbmx5IGR0eXBlOiBEYXRhVHlwZSwgcHJpdmF0ZSBtYXhTaXplOiBudW1iZXIsXG4gICAgICBwcml2YXRlIGVsZW1lbnRTaGFwZTogbnVtYmVyW10sIHJlYWRvbmx5IGlkZW50aWNhbEVsZW1lbnRTaGFwZXM6IGJvb2xlYW4sXG4gICAgICByZWFkb25seSBkeW5hbWljU2l6ZTogYm9vbGVhbiwgcmVhZG9ubHkgY2xlYXJBZnRlclJlYWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlkVGVuc29yID0gc2NhbGFyKDApO1xuICAgIGtlZXAodGhpcy5pZFRlbnNvcik7XG4gIH1cblxuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRUZW5zb3IuaWQ7XG4gIH1cblxuICBnZXQgY2xvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3NlZF87XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSB0aGUgdGVuc29ycyBhbmQgaWRUZW5zb3IgYW5kIG1hcmsgdGhlIFRlbnNvcnlBcnJheSBhcyBjbG9zZWQuXG4gICAqL1xuICBjbGVhckFuZENsb3NlKGtlZXBJZHM/OiBTZXQ8bnVtYmVyPikge1xuICAgIHRoaXMudGVuc29ycy5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICBpZiAoa2VlcElkcyA9PSBudWxsIHx8ICFrZWVwSWRzLmhhcyh0ZW5zb3IudGVuc29yLmlkKSkge1xuICAgICAgICB0ZW5zb3IudGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnRlbnNvcnMgPSBbXTtcbiAgICB0aGlzLmNsb3NlZF8gPSB0cnVlO1xuICAgIHRoaXMuaWRUZW5zb3IuZGlzcG9zZSgpO1xuICB9XG5cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbnNvcnMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIHZhbHVlIGF0IGxvY2F0aW9uIGluZGV4IGluIHRoZSBUZW5zb3JBcnJheS5cbiAgICogQHBhcmFtIGluZGV4IE51bWJlciB0aGUgaW5kZXggdG8gcmVhZCBmcm9tLlxuICAgKi9cbiAgcmVhZChpbmRleDogbnVtYmVyKTogVGVuc29yIHtcbiAgICBpZiAodGhpcy5jbG9zZWRfKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckFycmF5ICR7dGhpcy5uYW1lfSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuc2l6ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyaWVkIHRvIHJlYWQgZnJvbSBpbmRleCAke2luZGV4fSwgYnV0IGFycmF5IHNpemUgaXM6ICR7XG4gICAgICAgICAgdGhpcy5zaXplKCl9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGVuc29yV2l0aFN0YXRlID0gdGhpcy50ZW5zb3JzW2luZGV4XTtcbiAgICBpZiAodGVuc29yV2l0aFN0YXRlLmNsZWFyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVuc29yQXJyYXkgJHt0aGlzLm5hbWV9OiBDb3VsZCBub3QgcmVhZCBpbmRleCAke1xuICAgICAgICAgICAgICBpbmRleH0gdHdpY2UgYmVjYXVzZSBpdCB3YXMgY2xlYXJlZCBhZnRlciBhIHByZXZpb3VzIHJlYWQgYCArXG4gICAgICAgICAgYChwZXJoYXBzIHRyeSBzZXR0aW5nIGNsZWFyX2FmdGVyX3JlYWQgPSBmYWxzZT8pLmApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsZWFyQWZ0ZXJSZWFkKSB7XG4gICAgICB0ZW5zb3JXaXRoU3RhdGUuY2xlYXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGVuc29yV2l0aFN0YXRlLnJlYWQgPSB0cnVlO1xuICAgIHJldHVybiB0ZW5zb3JXaXRoU3RhdGUudGVuc29yO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gcmVhZCBtdWx0aXBsZSB0ZW5zb3JzIGZyb20gdGhlIHNwZWNpZmllZCBpbmRpY2VzLlxuICAgKi9cbiAgcmVhZE1hbnkoaW5kaWNlczogbnVtYmVyW10pOiBUZW5zb3JbXSB7XG4gICAgcmV0dXJuIGluZGljZXMubWFwKGluZGV4ID0+IHRoaXMucmVhZChpbmRleCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHZhbHVlIGludG8gdGhlIGluZGV4IG9mIHRoZSBUZW5zb3JBcnJheS5cbiAgICogQHBhcmFtIGluZGV4IG51bWJlciB0aGUgaW5kZXggdG8gd3JpdGUgdG8uXG4gICAqIEBwYXJhbSB0ZW5zb3JcbiAgICovXG4gIHdyaXRlKGluZGV4OiBudW1iZXIsIHRlbnNvcjogVGVuc29yKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkXykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5zb3JBcnJheSAke3RoaXMubmFtZX0gaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4IDwgMCB8fCAhdGhpcy5keW5hbWljU2l6ZSAmJiBpbmRleCA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJpZWQgdG8gd3JpdGUgdG8gaW5kZXggJHtcbiAgICAgICAgICBpbmRleH0sIGJ1dCBhcnJheSBpcyBub3QgcmVzaXplYWJsZSBhbmQgc2l6ZSBpczogJHt0aGlzLm1heFNpemV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9IHRoaXMudGVuc29yc1tpbmRleF0gfHwge307XG5cbiAgICBpZiAodGVuc29yLmR0eXBlICE9PSB0aGlzLmR0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckFycmF5ICR7XG4gICAgICAgICAgdGhpcy5uYW1lfTogQ291bGQgbm90IHdyaXRlIHRvIFRlbnNvckFycmF5IGluZGV4ICR7aW5kZXh9LFxuICAgICAgICAgIGJlY2F1c2UgdGhlIHZhbHVlIGR0eXBlIGlzICR7XG4gICAgICAgICAgdGVuc29yLmR0eXBlfSwgYnV0IFRlbnNvckFycmF5IGR0eXBlIGlzICR7dGhpcy5kdHlwZX0uYCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBzaGFwZSBmb3IgdGhlIGZpcnN0IHRpbWUgd3JpdGUgdG8gdW5rbm93IHNoYXBlIHRlbnNvciBhcnJheVxuICAgIGlmICh0aGlzLnNpemUoKSA9PT0gMCAmJlxuICAgICAgICAodGhpcy5lbGVtZW50U2hhcGUgPT0gbnVsbCB8fCB0aGlzLmVsZW1lbnRTaGFwZS5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aGlzLmVsZW1lbnRTaGFwZSA9IHRlbnNvci5zaGFwZTtcbiAgICB9XG5cbiAgICBhc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZShcbiAgICAgICAgdGhpcy5lbGVtZW50U2hhcGUsIHRlbnNvci5zaGFwZSxcbiAgICAgICAgYFRlbnNvckFycmF5ICR7dGhpcy5uYW1lfTogQ291bGQgbm90IHdyaXRlIHRvIFRlbnNvckFycmF5IGluZGV4ICR7XG4gICAgICAgICAgICBpbmRleH0uYCk7XG5cbiAgICBpZiAodC5yZWFkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbnNvckFycmF5ICR7dGhpcy5uYW1lfTogQ291bGQgbm90IHdyaXRlIHRvIFRlbnNvckFycmF5IGluZGV4ICR7XG4gICAgICAgICAgICAgIGluZGV4fSwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlYWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHQud3JpdHRlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUZW5zb3JBcnJheSAke3RoaXMubmFtZX06IENvdWxkIG5vdCB3cml0ZSB0byBUZW5zb3JBcnJheSBpbmRleCAke1xuICAgICAgICAgICAgICBpbmRleH0sIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuLmApO1xuICAgIH1cblxuICAgIHQudGVuc29yID0gdGVuc29yO1xuICAgIGtlZXAodGVuc29yKTtcbiAgICB0LndyaXR0ZW4gPSB0cnVlO1xuXG4gICAgdGhpcy50ZW5zb3JzW2luZGV4XSA9IHQ7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byB3cml0ZSBtdWx0aXBsZSB0ZW5zb3JzIHRvIHRoZSBzcGVjaWZpZWQgaW5kaWNlcy5cbiAgICovXG4gIHdyaXRlTWFueShpbmRpY2VzOiBudW1iZXJbXSwgdGVuc29yczogVGVuc29yW10pIHtcbiAgICBpZiAoaW5kaWNlcy5sZW5ndGggIT09IHRlbnNvcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbnNvckFycmF5ICR7dGhpcy5uYW1lfTogY291bGQgbm90IHdyaXRlIG11bHRpcGxlIHRlbnNvcnMsYCArXG4gICAgICAgICAgYGJlY2F1c2UgdGhlIGluZGV4IHNpemU6ICR7XG4gICAgICAgICAgICAgIGluZGljZXMubGVuZ3RofSBpcyBub3QgdGhlIHNhbWUgYXMgdGVuc29ycyBzaXplOiAke1xuICAgICAgICAgICAgICB0ZW5zb3JzLmxlbmd0aH0uYCk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5mb3JFYWNoKChpLCBpbmRleCkgPT4gdGhpcy53cml0ZShpLCB0ZW5zb3JzW2luZGV4XSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBzZWxlY3RlZCB2YWx1ZXMgaW4gdGhlIFRlbnNvckFycmF5IGFzIGEgcGFja2VkIFRlbnNvci4gQWxsIG9mXG4gICAqIHNlbGVjdGVkIHZhbHVlcyBtdXN0IGhhdmUgYmVlbiB3cml0dGVuIGFuZCB0aGVpciBzaGFwZXMgbXVzdCBhbGwgbWF0Y2guXG4gICAqIEBwYXJhbSBbaW5kaWNlc10gbnVtYmVyW10gT3B0aW9uYWwuIFRha2luZyB2YWx1ZXMgaW4gWzAsIG1heF92YWx1ZSkuIElmIHRoZVxuICAgKiAgICBUZW5zb3JBcnJheSBpcyBub3QgZHluYW1pYywgbWF4X3ZhbHVlPXNpemUoKS4gSWYgbm90IHNwZWNpZmllZCByZXR1cm5zXG4gICAqICAgIGFsbCB0ZW5zb3JzIGluIHRoZSBvcmlnaW5hbCBvcmRlci5cbiAgICogQHBhcmFtIFtkdHlwZV1cbiAgICovXG4gIGdhdGhlcihpbmRpY2VzPzogbnVtYmVyW10sIGR0eXBlPzogRGF0YVR5cGUpOiBUZW5zb3Ige1xuICAgIGlmICghIWR0eXBlICYmIGR0eXBlICE9PSB0aGlzLmR0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckFycmF5IGR0eXBlIGlzICR7XG4gICAgICAgICAgdGhpcy5kdHlwZX0gYnV0IGdhdGhlciByZXF1ZXN0ZWQgZHR5cGUgJHtkdHlwZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoIWluZGljZXMpIHtcbiAgICAgIGluZGljZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplKCk7IGkrKykge1xuICAgICAgICBpbmRpY2VzLnB1c2goaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGljZXMgPSBpbmRpY2VzLnNsaWNlKDAsIHRoaXMuc2l6ZSgpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0ZW5zb3IoW10sIFswXS5jb25jYXQodGhpcy5lbGVtZW50U2hhcGUpKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIGFsbCB0aGUgUGVyc2lzdGVudFRlbnNvcnMgaW50byBhIHZlY3RvciB0byBrZWVwIHRyYWNrIG9mXG4gICAgLy8gdGhlaXIgbWVtb3J5LlxuICAgIGNvbnN0IHRlbnNvcnMgPSB0aGlzLnJlYWRNYW55KGluZGljZXMpO1xuXG4gICAgYXNzZXJ0U2hhcGVzTWF0Y2hBbGxvd1VuZGVmaW5lZFNpemUoXG4gICAgICAgIHRoaXMuZWxlbWVudFNoYXBlLCB0ZW5zb3JzWzBdLnNoYXBlLCAnVGVuc29yQXJyYXkgc2hhcGUgbWlzbWF0Y2g6ICcpO1xuXG4gICAgcmV0dXJuIHN0YWNrKHRlbnNvcnMsIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWVzIGluIHRoZSBUZW5zb3JBcnJheSBhcyBhIGNvbmNhdGVuYXRlZCBUZW5zb3IuXG4gICAqL1xuICBjb25jYXQoZHR5cGU/OiBEYXRhVHlwZSk6IFRlbnNvciB7XG4gICAgaWYgKCEhZHR5cGUgJiYgZHR5cGUgIT09IHRoaXMuZHR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yQXJyYXkgZHR5cGUgaXMgJHtcbiAgICAgICAgICB0aGlzLmR0eXBlfSBidXQgY29uY2F0IHJlcXVlc3RlZCBkdHlwZSAke2R0eXBlfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNpemUoKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRlbnNvcihbXSwgWzBdLmNvbmNhdCh0aGlzLmVsZW1lbnRTaGFwZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGljZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2l6ZSgpOyBpKyspIHtcbiAgICAgIGluZGljZXMucHVzaChpKTtcbiAgICB9XG4gICAgLy8gQ29sbGVjdCBhbGwgdGhlIHRlbnNvcnMgZnJvbSB0aGUgdGVuc29ycyBhcnJheS5cbiAgICBjb25zdCB0ZW5zb3JzID0gdGhpcy5yZWFkTWFueShpbmRpY2VzKTtcblxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICB0aGlzLmVsZW1lbnRTaGFwZSwgdGVuc29yc1swXS5zaGFwZSxcbiAgICAgICAgYFRlbnNvckFycmF5IHNoYXBlIG1pc21hdGNoOiB0ZW5zb3IgYXJyYXkgc2hhcGUgKCR7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRTaGFwZX0pIHZzIGZpcnN0IHRlbnNvciBzaGFwZSAoJHt0ZW5zb3JzWzBdLnNoYXBlfSlgKTtcblxuICAgIHJldHVybiBjb25jYXQodGVuc29ycywgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2NhdHRlciB0aGUgdmFsdWVzIG9mIGEgVGVuc29yIGluIHNwZWNpZmljIGluZGljZXMgb2YgYSBUZW5zb3JBcnJheS5cbiAgICogQHBhcmFtIGluZGljZXMgbnVtYmVyW10gdmFsdWVzIGluIFswLCBtYXhfdmFsdWUpLiBJZiB0aGVcbiAgICogICAgVGVuc29yQXJyYXkgaXMgbm90IGR5bmFtaWMsIG1heF92YWx1ZT1zaXplKCkuXG4gICAqIEBwYXJhbSB0ZW5zb3IgVGVuc29yIGlucHV0IHRlbnNvci5cbiAgICovXG4gIHNjYXR0ZXIoaW5kaWNlczogbnVtYmVyW10sIHRlbnNvcjogVGVuc29yKSB7XG4gICAgaWYgKHRlbnNvci5kdHlwZSAhPT0gdGhpcy5kdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5zb3JBcnJheSBkdHlwZSBpcyAke1xuICAgICAgICAgIHRoaXMuZHR5cGV9IGJ1dCB0ZW5zb3IgaGFzIGR0eXBlICR7dGVuc29yLmR0eXBlfWApO1xuICAgIH1cblxuICAgIGlmIChpbmRpY2VzLmxlbmd0aCAhPT0gdGVuc29yLnNoYXBlWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxlbihpbmRpY2VzKSA9PSB0ZW5zb3Iuc2hhcGVbMF0sIGJ1dCBzYXc6ICR7XG4gICAgICAgICAgaW5kaWNlcy5sZW5ndGh9IHZzLiAke3RlbnNvci5zaGFwZVswXX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhJbmRleCA9IE1hdGgubWF4KC4uLmluZGljZXMpO1xuXG4gICAgaWYgKCF0aGlzLmR5bmFtaWNTaXplICYmIG1heEluZGV4ID49IHRoaXMubWF4U2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBNYXggaW5kZXggbXVzdCBiZSA8IGFycmF5IHNpemUgKCR7bWF4SW5kZXh9ICB2cy4gJHt0aGlzLm1heFNpemV9KWApO1xuICAgIH1cblxuICAgIHRoaXMud3JpdGVNYW55KGluZGljZXMsIHVuc3RhY2sodGVuc29yLCAwKSk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhlIHZhbHVlcyBvZiBhIFRlbnNvciBpbnRvIHRoZSBUZW5zb3JBcnJheS5cbiAgICogQHBhcmFtIGxlbmd0aCBudW1iZXJbXSB3aXRoIHRoZSBsZW5ndGhzIHRvIHVzZSB3aGVuIHNwbGl0dGluZyB2YWx1ZSBhbG9uZ1xuICAgKiAgICBpdHMgZmlyc3QgZGltZW5zaW9uLlxuICAgKiBAcGFyYW0gdGVuc29yIFRlbnNvciwgdGhlIHRlbnNvciB0byBzcGxpdC5cbiAgICovXG4gIHNwbGl0KGxlbmd0aDogbnVtYmVyW10sIHRlbnNvcjogVGVuc29yKSB7XG4gICAgaWYgKHRlbnNvci5kdHlwZSAhPT0gdGhpcy5kdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5zb3JBcnJheSBkdHlwZSBpcyAke1xuICAgICAgICAgIHRoaXMuZHR5cGV9IGJ1dCB0ZW5zb3IgaGFzIGR0eXBlICR7dGVuc29yLmR0eXBlfWApO1xuICAgIH1cbiAgICBsZXQgdG90YWxMZW5ndGggPSAwO1xuICAgIGNvbnN0IGN1bXVsYXRpdmVMZW5ndGhzID0gbGVuZ3RoLm1hcChsZW4gPT4ge1xuICAgICAgdG90YWxMZW5ndGggKz0gbGVuO1xuICAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgaWYgKHRvdGFsTGVuZ3RoICE9PSB0ZW5zb3Iuc2hhcGVbMF0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgc3VtIG9mIGxlbmd0aHMgdG8gYmUgZXF1YWwgdG9cbiAgICAgICAgICB0ZW5zb3Iuc2hhcGVbMF0sIGJ1dCBzdW0gb2YgbGVuZ3RocyBpc1xuICAgICAgICAke3RvdGFsTGVuZ3RofSwgYW5kIHRlbnNvcidzIHNoYXBlIGlzOiAke3RlbnNvci5zaGFwZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZHluYW1pY1NpemUgJiYgbGVuZ3RoLmxlbmd0aCAhPT0gdGhpcy5tYXhTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbnNvckFycmF5J3Mgc2l6ZSBpcyBub3QgZXF1YWwgdG8gdGhlIHNpemUgb2YgbGVuZ3RocyAoJHtcbiAgICAgICAgICAgICAgdGhpcy5tYXhTaXplfSB2cy4gJHtsZW5ndGgubGVuZ3RofSksIGAgK1xuICAgICAgICAgICdhbmQgdGhlIFRlbnNvckFycmF5IGlzIG5vdCBtYXJrZWQgYXMgZHluYW1pY2FsbHkgcmVzaXplYWJsZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRQZXJSb3cgPSB0b3RhbExlbmd0aCA9PT0gMCA/IDAgOiB0ZW5zb3Iuc2l6ZSAvIHRvdGFsTGVuZ3RoO1xuICAgIGNvbnN0IHRlbnNvcnM6IFRlbnNvcltdID0gW107XG4gICAgdGlkeSgoKSA9PiB7XG4gICAgICB0ZW5zb3IgPSByZXNoYXBlKHRlbnNvciwgWzEsIHRvdGFsTGVuZ3RoLCBlbGVtZW50UGVyUm93XSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aC5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBwcmV2aW91c0xlbmd0aCA9IChpID09PSAwKSA/IDAgOiBjdW11bGF0aXZlTGVuZ3Roc1tpIC0gMV07XG4gICAgICAgIGNvbnN0IGluZGljZXMgPSBbMCwgcHJldmlvdXNMZW5ndGgsIDBdO1xuICAgICAgICBjb25zdCBzaXplcyA9IFsxLCBsZW5ndGhbaV0sIGVsZW1lbnRQZXJSb3ddO1xuICAgICAgICB0ZW5zb3JzW2ldID0gcmVzaGFwZShzbGljZSh0ZW5zb3IsIGluZGljZXMsIHNpemVzKSwgdGhpcy5lbGVtZW50U2hhcGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRlbnNvcnM7XG4gICAgfSk7XG4gICAgY29uc3QgaW5kaWNlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbmRpY2VzW2ldID0gaTtcbiAgICB9XG4gICAgdGhpcy53cml0ZU1hbnkoaW5kaWNlcywgdGVuc29ycyk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { concat, keep, reshape, scalar, slice, stack, tensor, tidy, unstack } from '@tensorflow/tfjs-core';\nimport { assertShapesMatchAllowUndefinedSize, inferElementShape, mergeElementShape } from './tensor_utils';\n/**\n * TensorList stores a container of `tf.Tensor` objects, which are accessible\n * via tensors field.\n *\n * In order to get a copy of the underlying list, use the copy method:\n * ```\n * TensorList b = a.copy();\n * b.tensors().pushBack(t); // This does not modify a.tensors().\n * ```\n *\n * Note that this is not a deep copy: the memory locations of the underlying\n * tensors will still point to the same locations of the corresponding tensors\n * in the original.\n */\nexport class TensorList {\n get id() {\n return this.idTensor.id;\n }\n /**\n *\n * @param tensors list of tensors\n * @param elementShape shape of each tensor, this can be a single number (any\n * shape is allowed) or partial shape (dim = -1).\n * @param elementDtype data type of each tensor\n * @param maxNumElements The maximum allowed size of `tensors`. Defaults to -1\n * meaning that the size of `tensors` is unbounded.\n */\n constructor(tensors, elementShape, elementDtype, maxNumElements = -1) {\n this.tensors = tensors;\n this.elementShape = elementShape;\n this.elementDtype = elementDtype;\n if (tensors != null) {\n tensors.forEach(tensor => {\n if (elementDtype !== tensor.dtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${tensor.dtype}`);\n }\n assertShapesMatchAllowUndefinedSize(elementShape, tensor.shape, 'TensorList shape mismatch: ');\n keep(tensor);\n });\n }\n this.idTensor = scalar(0);\n this.maxNumElements = maxNumElements;\n keep(this.idTensor);\n }\n /**\n * Get a new TensorList containing a copy of the underlying tensor container.\n */\n copy() {\n return new TensorList([...this.tensors], this.elementShape, this.elementDtype);\n }\n /**\n * Dispose the tensors and idTensor and clear the tensor list.\n */\n clearAndClose(keepIds) {\n this.tensors.forEach(tensor => {\n if (keepIds == null || !keepIds.has(tensor.id)) {\n tensor.dispose();\n }\n });\n this.tensors.length = 0;\n this.idTensor.dispose();\n }\n /**\n * The size of the tensors in the tensor list.\n */\n size() {\n return this.tensors.length;\n }\n /**\n * Return a tensor that stacks a list of rank-R tf.Tensors into one rank-(R+1)\n * tf.Tensor.\n * @param elementShape shape of each tensor\n * @param elementDtype data type of each tensor\n * @param numElements the number of elements to stack\n */\n stack(elementShape, elementDtype, numElements = -1) {\n if (elementDtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${this.elementDtype}`);\n }\n if (numElements !== -1 && this.tensors.length !== numElements) {\n throw new Error(`Operation expected a list with ${numElements} elements but got a list with ${this.tensors.length} elements.`);\n }\n assertShapesMatchAllowUndefinedSize(elementShape, this.elementShape, 'TensorList shape mismatch: ');\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n return tidy(() => {\n const reshapedTensors = this.tensors.map(tensor => reshape(tensor, outputElementShape));\n return stack(reshapedTensors, 0);\n });\n }\n /**\n * Pop a tensor from the end of the list.\n * @param elementShape shape of the tensor\n * @param elementDtype data type of the tensor\n */\n popBack(elementShape, elementDtype) {\n if (elementDtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${this.elementDtype}`);\n }\n if (this.size() === 0) {\n throw new Error('Trying to pop from an empty list.');\n }\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n const tensor = this.tensors.pop();\n tensor.kept = false;\n assertShapesMatchAllowUndefinedSize(tensor.shape, elementShape, 'TensorList shape mismatch: ');\n return reshape(tensor, outputElementShape);\n }\n /**\n * Push a tensor to the end of the list.\n * @param tensor Tensor to be pushed.\n */\n pushBack(tensor) {\n if (tensor.dtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${tensor.dtype}, but list elements ${this.elementDtype}`);\n }\n assertShapesMatchAllowUndefinedSize(tensor.shape, this.elementShape, 'TensorList shape mismatch: ');\n if (this.maxNumElements === this.size()) {\n throw new Error(`Trying to push element into a full list.`);\n }\n keep(tensor);\n this.tensors.push(tensor);\n }\n /**\n * Update the size of the list.\n * @param size the new size of the list.\n */\n resize(size) {\n if (size < 0) {\n throw new Error(`TensorListResize expects size to be non-negative. Got: ${size}`);\n }\n if (this.maxNumElements !== -1 && size > this.maxNumElements) {\n throw new Error(`TensorListResize input size ${size} is greater maxNumElement ${this.maxNumElements}.`);\n }\n const destTensorList = new TensorList([], this.elementShape, this.elementDtype, this.maxNumElements);\n destTensorList.tensors.length = size;\n for (let i = 0; i < Math.min(this.tensors.length, size); ++i) {\n destTensorList.tensors[i] = this.tensors[i];\n }\n return destTensorList;\n }\n /**\n * Retrieve the element at the provided index\n * @param elementShape shape of the tensor\n * @param elementDtype dtype of the tensor\n * @param elementIndex index of the tensor\n */\n getItem(elementIndex, elementShape, elementDtype) {\n if (elementDtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${this.elementDtype}`);\n }\n if (elementIndex < 0 || elementIndex > this.tensors.length) {\n throw new Error(`Trying to access element ${elementIndex} in a list with ${this.tensors.length} elements.`);\n }\n if (this.tensors[elementIndex] == null) {\n throw new Error(`element at index ${elementIndex} is null.`);\n }\n assertShapesMatchAllowUndefinedSize(this.tensors[elementIndex].shape, elementShape, 'TensorList shape mismatch: ');\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n return reshape(this.tensors[elementIndex], outputElementShape);\n }\n /**\n * Set the tensor at the index\n * @param elementIndex index of the tensor\n * @param tensor the tensor to be inserted into the list\n */\n setItem(elementIndex, tensor) {\n if (tensor.dtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${tensor.dtype}, but list elements ${this.elementDtype}`);\n }\n if (elementIndex < 0 ||\n this.maxNumElements !== -1 && elementIndex >= this.maxNumElements) {\n throw new Error(`Trying to set element ${elementIndex} in a list with max ${this.maxNumElements} elements.`);\n }\n assertShapesMatchAllowUndefinedSize(this.elementShape, tensor.shape, 'TensorList shape mismatch: ');\n keep(tensor);\n // dispose the previous value if it is replacing.\n if (this.tensors[elementIndex] != null) {\n this.tensors[elementIndex].kept = false;\n }\n this.tensors[elementIndex] = tensor;\n }\n /**\n * Return selected values in the TensorList as a stacked Tensor. All of\n * selected values must have been written and their shapes must all match.\n * @param indices indices of tensors to gather\n * @param elementDtype output tensor dtype\n * @param elementShape output tensor element shape\n */\n gather(indices, elementDtype, elementShape) {\n if (elementDtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${this.elementDtype}`);\n }\n assertShapesMatchAllowUndefinedSize(this.elementShape, elementShape, 'TensorList shape mismatch: ');\n // When indices is greater than the size of the list, indices beyond the\n // size of the list are ignored.\n indices = indices.slice(0, this.size());\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n if (indices.length === 0) {\n return tensor([], [0].concat(outputElementShape));\n }\n return tidy(() => {\n const tensors = indices.map(i => reshape(this.tensors[i], outputElementShape));\n return stack(tensors, 0);\n });\n }\n /**\n * Return the values in the TensorList as a concatenated Tensor.\n * @param elementDtype output tensor dtype\n * @param elementShape output tensor element shape\n */\n concat(elementDtype, elementShape) {\n if (!!elementDtype && elementDtype !== this.elementDtype) {\n throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${elementDtype}`);\n }\n assertShapesMatchAllowUndefinedSize(this.elementShape, elementShape, 'TensorList shape mismatch: ');\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n if (this.size() === 0) {\n return tensor([], [0].concat(outputElementShape));\n }\n return tidy(() => {\n const tensors = this.tensors.map(t => reshape(t, outputElementShape));\n return concat(tensors, 0);\n });\n }\n}\n/**\n * Creates a TensorList which, when stacked, has the value of tensor.\n * @param tensor from tensor\n * @param elementShape output tensor element shape\n */\nexport function fromTensor(tensor, elementShape, elementDtype) {\n const dtype = tensor.dtype;\n if (tensor.shape.length < 1) {\n throw new Error(`Tensor must be at least a vector, but saw shape: ${tensor.shape}`);\n }\n if (tensor.dtype !== elementDtype) {\n throw new Error(`Invalid data types; op elements ${tensor.dtype}, but list elements ${elementDtype}`);\n }\n const tensorElementShape = tensor.shape.slice(1);\n assertShapesMatchAllowUndefinedSize(tensorElementShape, elementShape, 'TensorList shape mismatch: ');\n const tensorList = unstack(tensor);\n return new TensorList(tensorList, elementShape, dtype);\n}\n/**\n * Return a TensorList of the given size with empty elements.\n * @param elementShape the shape of the future elements of the list\n * @param elementDtype the desired type of elements in the list\n * @param numElements the number of elements to reserve\n * @param maxNumElements the maximum number of elements in th list\n */\nexport function reserve(elementShape, elementDtype, numElements, maxNumElements) {\n return new TensorList([], elementShape, elementDtype, maxNumElements);\n}\n/**\n * Put tensors at specific indices of a stacked tensor into a TensorList.\n * @param indices list of indices on how to scatter the tensor.\n * @param tensor input tensor.\n * @param elementShape the shape of the future elements of the list\n * @param numElements the number of elements to scatter\n */\nexport function scatter(tensor, indices, elementShape, numElements) {\n if (indices.length !== tensor.shape[0]) {\n throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${indices.length} vs. ${tensor.shape[0]}`);\n }\n const maxIndex = Math.max(...indices);\n if (numElements != null && numElements !== -1 && maxIndex >= numElements) {\n throw new Error(`Max index must be < array size (${maxIndex} vs. ${numElements})`);\n }\n const list = new TensorList([], elementShape, tensor.dtype, numElements);\n const tensors = unstack(tensor, 0);\n indices.forEach((value, index) => {\n list.setItem(value, tensors[index]);\n });\n return list;\n}\n/**\n * Split the values of a Tensor into a TensorList.\n * @param length the lengths to use when splitting value along\n * its first dimension.\n * @param tensor the tensor to split.\n * @param elementShape the shape of the future elements of the list\n */\nexport function split(tensor, length, elementShape) {\n let totalLength = 0;\n const cumulativeLengths = length.map(len => {\n totalLength += len;\n return totalLength;\n });\n if (totalLength !== tensor.shape[0]) {\n 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}`);\n }\n const shapeWithoutFirstDim = tensor.shape.slice(1);\n const outputElementShape = mergeElementShape(shapeWithoutFirstDim, elementShape);\n const elementPerRow = totalLength === 0 ? 0 : tensor.size / totalLength;\n const tensors = tidy(() => {\n const tensors = [];\n tensor = reshape(tensor, [1, totalLength, elementPerRow]);\n for (let i = 0; i < length.length; ++i) {\n const previousLength = (i === 0) ? 0 : cumulativeLengths[i - 1];\n const indices = [0, previousLength, 0];\n const sizes = [1, length[i], elementPerRow];\n tensors[i] = reshape(slice(tensor, indices, sizes), outputElementShape);\n }\n tensor.dispose();\n return tensors;\n });\n const list = new TensorList([], elementShape, tensor.dtype, length.length);\n for (let i = 0; i < tensors.length; i++) {\n list.setItem(i, tensors[i]);\n }\n return list;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX2xpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvdGVuc29yX2xpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBWSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFM0gsT0FBTyxFQUFDLG1DQUFtQyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekc7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE1BQU0sT0FBTyxVQUFVO0lBSXJCLElBQUksRUFBRTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNEOzs7Ozs7OztPQVFHO0lBQ0gsWUFDYSxPQUFpQixFQUFXLFlBQTZCLEVBQ3pELFlBQXNCLEVBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUQzQyxZQUFPLEdBQVAsT0FBTyxDQUFVO1FBQVcsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQ3pELGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ2pDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUNuQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN2QixJQUFJLFlBQVksS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUNaLFlBQVksdUJBQXVCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUN4RDtnQkFDRCxtQ0FBbUMsQ0FDL0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztn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QUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2NvbmNhdCwgRGF0YVR5cGUsIGtlZXAsIHJlc2hhcGUsIHNjYWxhciwgc2xpY2UsIHN0YWNrLCBUZW5zb3IsIHRlbnNvciwgdGlkeSwgdW5zdGFja30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZSwgaW5mZXJFbGVtZW50U2hhcGUsIG1lcmdlRWxlbWVudFNoYXBlfSBmcm9tICcuL3RlbnNvcl91dGlscyc7XG5cbi8qKlxuICogVGVuc29yTGlzdCBzdG9yZXMgYSBjb250YWluZXIgb2YgYHRmLlRlbnNvcmAgb2JqZWN0cywgd2hpY2ggYXJlIGFjY2Vzc2libGVcbiAqIHZpYSB0ZW5zb3JzIGZpZWxkLlxuICpcbiAqIEluIG9yZGVyIHRvIGdldCBhIGNvcHkgb2YgdGhlIHVuZGVybHlpbmcgbGlzdCwgdXNlIHRoZSBjb3B5IG1ldGhvZDpcbiAqIGBgYFxuICogICAgVGVuc29yTGlzdCBiID0gYS5jb3B5KCk7XG4gKiAgICBiLnRlbnNvcnMoKS5wdXNoQmFjayh0KTsgIC8vIFRoaXMgZG9lcyBub3QgbW9kaWZ5IGEudGVuc29ycygpLlxuICogYGBgXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGEgZGVlcCBjb3B5OiB0aGUgbWVtb3J5IGxvY2F0aW9ucyBvZiB0aGUgdW5kZXJseWluZ1xuICogdGVuc29ycyB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGxvY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyB0ZW5zb3JzXG4gKiBpbiB0aGUgb3JpZ2luYWwuXG4gKi9cblxuZXhwb3J0IGNsYXNzIFRlbnNvckxpc3Qge1xuICByZWFkb25seSBpZFRlbnNvcjogVGVuc29yO1xuICBtYXhOdW1FbGVtZW50czogbnVtYmVyO1xuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pZFRlbnNvci5pZDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHRlbnNvcnMgbGlzdCBvZiB0ZW5zb3JzXG4gICAqIEBwYXJhbSBlbGVtZW50U2hhcGUgc2hhcGUgb2YgZWFjaCB0ZW5zb3IsIHRoaXMgY2FuIGJlIGEgc2luZ2xlIG51bWJlciAoYW55XG4gICAqIHNoYXBlIGlzIGFsbG93ZWQpIG9yIHBhcnRpYWwgc2hhcGUgKGRpbSA9IC0xKS5cbiAgICogQHBhcmFtIGVsZW1lbnREdHlwZSBkYXRhIHR5cGUgb2YgZWFjaCB0ZW5zb3JcbiAgICogQHBhcmFtIG1heE51bUVsZW1lbnRzIFRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBgdGVuc29yc2AuIERlZmF1bHRzIHRvIC0xXG4gICAqICAgbWVhbmluZyB0aGF0IHRoZSBzaXplIG9mIGB0ZW5zb3JzYCBpcyB1bmJvdW5kZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHJlYWRvbmx5IHRlbnNvcnM6IFRlbnNvcltdLCByZWFkb25seSBlbGVtZW50U2hhcGU6IG51bWJlcnxudW1iZXJbXSxcbiAgICAgIHJlYWRvbmx5IGVsZW1lbnREdHlwZTogRGF0YVR5cGUsIG1heE51bUVsZW1lbnRzID0gLTEpIHtcbiAgICBpZiAodGVuc29ycyAhPSBudWxsKSB7XG4gICAgICB0ZW5zb3JzLmZvckVhY2godGVuc29yID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnREdHlwZSAhPT0gdGVuc29yLmR0eXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZXM7IG9wIGVsZW1lbnRzICR7XG4gICAgICAgICAgICAgIGVsZW1lbnREdHlwZX0sIGJ1dCBsaXN0IGVsZW1lbnRzICR7dGVuc29yLmR0eXBlfWApO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICAgICAgZWxlbWVudFNoYXBlLCB0ZW5zb3Iuc2hhcGUsICdUZW5zb3JMaXN0IHNoYXBlIG1pc21hdGNoOiAnKTtcblxuICAgICAgICBrZWVwKHRlbnNvcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5pZFRlbnNvciA9IHNjYWxhcigwKTtcbiAgICB0aGlzLm1heE51bUVsZW1lbnRzID0gbWF4TnVtRWxlbWVudHM7XG4gICAga2VlcCh0aGlzLmlkVGVuc29yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBuZXcgVGVuc29yTGlzdCBjb250YWluaW5nIGEgY29weSBvZiB0aGUgdW5kZXJseWluZyB0ZW5zb3IgY29udGFpbmVyLlxuICAgKi9cbiAgY29weSgpOiBUZW5zb3JMaXN0IHtcbiAgICByZXR1cm4gbmV3IFRlbnNvckxpc3QoXG4gICAgICAgIFsuLi50aGlzLnRlbnNvcnNdLCB0aGlzLmVsZW1lbnRTaGFwZSwgdGhpcy5lbGVtZW50RHR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIHRlbnNvcnMgYW5kIGlkVGVuc29yIGFuZCBjbGVhciB0aGUgdGVuc29yIGxpc3QuXG4gICAqL1xuICBjbGVhckFuZENsb3NlKGtlZXBJZHM/OiBTZXQ8bnVtYmVyPikge1xuICAgIHRoaXMudGVuc29ycy5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICBpZiAoa2VlcElkcyA9PSBudWxsIHx8ICFrZWVwSWRzLmhhcyh0ZW5zb3IuaWQpKSB7XG4gICAgICAgIHRlbnNvci5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy50ZW5zb3JzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pZFRlbnNvci5kaXNwb3NlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSB0ZW5zb3JzIGluIHRoZSB0ZW5zb3IgbGlzdC5cbiAgICovXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVuc29ycy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdGVuc29yIHRoYXQgc3RhY2tzIGEgbGlzdCBvZiByYW5rLVIgdGYuVGVuc29ycyBpbnRvIG9uZSByYW5rLShSKzEpXG4gICAqIHRmLlRlbnNvci5cbiAgICogQHBhcmFtIGVsZW1lbnRTaGFwZSBzaGFwZSBvZiBlYWNoIHRlbnNvclxuICAgKiBAcGFyYW0gZWxlbWVudER0eXBlIGRhdGEgdHlwZSBvZiBlYWNoIHRlbnNvclxuICAgKiBAcGFyYW0gbnVtRWxlbWVudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzdGFja1xuICAgKi9cbiAgc3RhY2soZWxlbWVudFNoYXBlOiBudW1iZXJbXSwgZWxlbWVudER0eXBlOiBEYXRhVHlwZSwgbnVtRWxlbWVudHMgPSAtMSk6XG4gICAgICBUZW5zb3Ige1xuICAgIGlmIChlbGVtZW50RHR5cGUgIT09IHRoaXMuZWxlbWVudER0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSB0eXBlczsgb3AgZWxlbWVudHMgJHtcbiAgICAgICAgICBlbGVtZW50RHR5cGV9LCBidXQgbGlzdCBlbGVtZW50cyAke3RoaXMuZWxlbWVudER0eXBlfWApO1xuICAgIH1cbiAgICBpZiAobnVtRWxlbWVudHMgIT09IC0xICYmIHRoaXMudGVuc29ycy5sZW5ndGggIT09IG51bUVsZW1lbnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiBleHBlY3RlZCBhIGxpc3Qgd2l0aCAke1xuICAgICAgICAgIG51bUVsZW1lbnRzfSBlbGVtZW50cyBidXQgZ290IGEgbGlzdCB3aXRoICR7XG4gICAgICAgICAgdGhpcy50ZW5zb3JzLmxlbmd0aH0gZWxlbWVudHMuYCk7XG4gICAgfVxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICBlbGVtZW50U2hhcGUsIHRoaXMuZWxlbWVudFNoYXBlLCAnVGVuc29yTGlzdCBzaGFwZSBtaXNtYXRjaDogJyk7XG4gICAgY29uc3Qgb3V0cHV0RWxlbWVudFNoYXBlID1cbiAgICAgICAgaW5mZXJFbGVtZW50U2hhcGUodGhpcy5lbGVtZW50U2hhcGUsIHRoaXMudGVuc29ycywgZWxlbWVudFNoYXBlKTtcbiAgICByZXR1cm4gdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCByZXNoYXBlZFRlbnNvcnMgPVxuICAgICAgICAgIHRoaXMudGVuc29ycy5tYXAodGVuc29yID0+IHJlc2hhcGUodGVuc29yLCBvdXRwdXRFbGVtZW50U2hhcGUpKTtcbiAgICAgIHJldHVybiBzdGFjayhyZXNoYXBlZFRlbnNvcnMsIDApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcCBhIHRlbnNvciBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAqIEBwYXJhbSBlbGVtZW50U2hhcGUgc2hhcGUgb2YgdGhlIHRlbnNvclxuICAgKiBAcGFyYW0gZWxlbWVudER0eXBlIGRhdGEgdHlwZSBvZiB0aGUgdGVuc29yXG4gICAqL1xuICBwb3BCYWNrKGVsZW1lbnRTaGFwZTogbnVtYmVyW10sIGVsZW1lbnREdHlwZTogRGF0YVR5cGUpOiBUZW5zb3Ige1xuICAgIGlmIChlbGVtZW50RHR5cGUgIT09IHRoaXMuZWxlbWVudER0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSB0eXBlczsgb3AgZWxlbWVudHMgJHtcbiAgICAgICAgICBlbGVtZW50RHR5cGV9LCBidXQgbGlzdCBlbGVtZW50cyAke3RoaXMuZWxlbWVudER0eXBlfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNpemUoKSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gcG9wIGZyb20gYW4gZW1wdHkgbGlzdC4nKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0RWxlbWVudFNoYXBlID1cbiAgICAgICAgaW5mZXJFbGVtZW50U2hhcGUodGhpcy5lbGVtZW50U2hhcGUsIHRoaXMudGVuc29ycywgZWxlbWVudFNoYXBlKTtcbiAgICBjb25zdCB0ZW5zb3IgPSB0aGlzLnRlbnNvcnMucG9wKCk7XG4gICAgdGVuc29yLmtlcHQgPSBmYWxzZTtcblxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICB0ZW5zb3Iuc2hhcGUsIGVsZW1lbnRTaGFwZSwgJ1RlbnNvckxpc3Qgc2hhcGUgbWlzbWF0Y2g6ICcpO1xuXG4gICAgcmV0dXJuIHJlc2hhcGUodGVuc29yLCBvdXRwdXRFbGVtZW50U2hhcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggYSB0ZW5zb3IgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHRlbnNvciBUZW5zb3IgdG8gYmUgcHVzaGVkLlxuICAgKi9cbiAgcHVzaEJhY2sodGVuc29yOiBUZW5zb3IpIHtcbiAgICBpZiAodGVuc29yLmR0eXBlICE9PSB0aGlzLmVsZW1lbnREdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZXM7IG9wIGVsZW1lbnRzICR7XG4gICAgICAgICAgdGVuc29yLmR0eXBlfSwgYnV0IGxpc3QgZWxlbWVudHMgJHt0aGlzLmVsZW1lbnREdHlwZX1gKTtcbiAgICB9XG5cbiAgICBhc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZShcbiAgICAgICAgdGVuc29yLnNoYXBlLCB0aGlzLmVsZW1lbnRTaGFwZSwgJ1RlbnNvckxpc3Qgc2hhcGUgbWlzbWF0Y2g6ICcpO1xuXG4gICAgaWYgKHRoaXMubWF4TnVtRWxlbWVudHMgPT09IHRoaXMuc2l6ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byBwdXNoIGVsZW1lbnQgaW50byBhIGZ1bGwgbGlzdC5gKTtcbiAgICB9XG4gICAga2VlcCh0ZW5zb3IpO1xuICAgIHRoaXMudGVuc29ycy5wdXNoKHRlbnNvcik7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBzaXplIG9mIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0gc2l6ZSB0aGUgbmV3IHNpemUgb2YgdGhlIGxpc3QuXG4gICAqL1xuICByZXNpemUoc2l6ZTogbnVtYmVyKSB7XG4gICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbnNvckxpc3RSZXNpemUgZXhwZWN0cyBzaXplIHRvIGJlIG5vbi1uZWdhdGl2ZS4gR290OiAke3NpemV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4TnVtRWxlbWVudHMgIT09IC0xICYmIHNpemUgPiB0aGlzLm1heE51bUVsZW1lbnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckxpc3RSZXNpemUgaW5wdXQgc2l6ZSAke1xuICAgICAgICAgIHNpemV9IGlzIGdyZWF0ZXIgbWF4TnVtRWxlbWVudCAke3RoaXMubWF4TnVtRWxlbWVudHN9LmApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc3RUZW5zb3JMaXN0OiBUZW5zb3JMaXN0ID0gbmV3IFRlbnNvckxpc3QoXG4gICAgICAgIFtdLCB0aGlzLmVsZW1lbnRTaGFwZSwgdGhpcy5lbGVtZW50RHR5cGUsIHRoaXMubWF4TnVtRWxlbWVudHMpO1xuICAgIGRlc3RUZW5zb3JMaXN0LnRlbnNvcnMubGVuZ3RoID0gc2l6ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKHRoaXMudGVuc29ycy5sZW5ndGgsIHNpemUpOyArK2kpIHtcbiAgICAgIGRlc3RUZW5zb3JMaXN0LnRlbnNvcnNbaV0gPSB0aGlzLnRlbnNvcnNbaV07XG4gICAgfVxuICAgIHJldHVybiBkZXN0VGVuc29yTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZWxlbWVudCBhdCB0aGUgcHJvdmlkZWQgaW5kZXhcbiAgICogQHBhcmFtIGVsZW1lbnRTaGFwZSBzaGFwZSBvZiB0aGUgdGVuc29yXG4gICAqIEBwYXJhbSBlbGVtZW50RHR5cGUgZHR5cGUgb2YgdGhlIHRlbnNvclxuICAgKiBAcGFyYW0gZWxlbWVudEluZGV4IGluZGV4IG9mIHRoZSB0ZW5zb3JcbiAgICovXG4gIGdldEl0ZW0oZWxlbWVudEluZGV4OiBudW1iZXIsIGVsZW1lbnRTaGFwZTogbnVtYmVyW10sIGVsZW1lbnREdHlwZTogRGF0YVR5cGUpOlxuICAgICAgVGVuc29yIHtcbiAgICBpZiAoZWxlbWVudER0eXBlICE9PSB0aGlzLmVsZW1lbnREdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZXM7IG9wIGVsZW1lbnRzICR7XG4gICAgICAgICAgZWxlbWVudER0eXBlfSwgYnV0IGxpc3QgZWxlbWVudHMgJHt0aGlzLmVsZW1lbnREdHlwZX1gKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnRJbmRleCA8IDAgfHwgZWxlbWVudEluZGV4ID4gdGhpcy50ZW5zb3JzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gYWNjZXNzIGVsZW1lbnQgJHtcbiAgICAgICAgICBlbGVtZW50SW5kZXh9IGluIGEgbGlzdCB3aXRoICR7dGhpcy50ZW5zb3JzLmxlbmd0aH0gZWxlbWVudHMuYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVuc29yc1tlbGVtZW50SW5kZXhdID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZWxlbWVudCBhdCBpbmRleCAke2VsZW1lbnRJbmRleH0gaXMgbnVsbC5gKTtcbiAgICB9XG5cbiAgICBhc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZShcbiAgICAgICAgdGhpcy50ZW5zb3JzW2VsZW1lbnRJbmRleF0uc2hhcGUsIGVsZW1lbnRTaGFwZSxcbiAgICAgICAgJ1RlbnNvckxpc3Qgc2hhcGUgbWlzbWF0Y2g6ICcpO1xuICAgIGNvbnN0IG91dHB1dEVsZW1lbnRTaGFwZSA9XG4gICAgICAgIGluZmVyRWxlbWVudFNoYXBlKHRoaXMuZWxlbWVudFNoYXBlLCB0aGlzLnRlbnNvcnMsIGVsZW1lbnRTaGFwZSk7XG4gICAgcmV0dXJuIHJlc2hhcGUodGhpcy50ZW5zb3JzW2VsZW1lbnRJbmRleF0sIG91dHB1dEVsZW1lbnRTaGFwZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0ZW5zb3IgYXQgdGhlIGluZGV4XG4gICAqIEBwYXJhbSBlbGVtZW50SW5kZXggaW5kZXggb2YgdGhlIHRlbnNvclxuICAgKiBAcGFyYW0gdGVuc29yIHRoZSB0ZW5zb3IgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgbGlzdFxuICAgKi9cbiAgc2V0SXRlbShlbGVtZW50SW5kZXg6IG51bWJlciwgdGVuc29yOiBUZW5zb3IpIHtcbiAgICBpZiAodGVuc29yLmR0eXBlICE9PSB0aGlzLmVsZW1lbnREdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZXM7IG9wIGVsZW1lbnRzICR7XG4gICAgICAgICAgdGVuc29yLmR0eXBlfSwgYnV0IGxpc3QgZWxlbWVudHMgJHt0aGlzLmVsZW1lbnREdHlwZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudEluZGV4IDwgMCB8fFxuICAgICAgICB0aGlzLm1heE51bUVsZW1lbnRzICE9PSAtMSAmJiBlbGVtZW50SW5kZXggPj0gdGhpcy5tYXhOdW1FbGVtZW50cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gc2V0IGVsZW1lbnQgJHtcbiAgICAgICAgICBlbGVtZW50SW5kZXh9IGluIGEgbGlzdCB3aXRoIG1heCAke3RoaXMubWF4TnVtRWxlbWVudHN9IGVsZW1lbnRzLmApO1xuICAgIH1cblxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICB0aGlzLmVsZW1lbnRTaGFwZSwgdGVuc29yLnNoYXBlLCAnVGVuc29yTGlzdCBzaGFwZSBtaXNtYXRjaDogJyk7XG4gICAga2VlcCh0ZW5zb3IpO1xuXG4gICAgLy8gZGlzcG9zZSB0aGUgcHJldmlvdXMgdmFsdWUgaWYgaXQgaXMgcmVwbGFjaW5nLlxuICAgIGlmICh0aGlzLnRlbnNvcnNbZWxlbWVudEluZGV4XSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnRlbnNvcnNbZWxlbWVudEluZGV4XS5rZXB0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50ZW5zb3JzW2VsZW1lbnRJbmRleF0gPSB0ZW5zb3I7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHNlbGVjdGVkIHZhbHVlcyBpbiB0aGUgVGVuc29yTGlzdCBhcyBhIHN0YWNrZWQgVGVuc29yLiBBbGwgb2ZcbiAgICogc2VsZWN0ZWQgdmFsdWVzIG11c3QgaGF2ZSBiZWVuIHdyaXR0ZW4gYW5kIHRoZWlyIHNoYXBlcyBtdXN0IGFsbCBtYXRjaC5cbiAgICogQHBhcmFtIGluZGljZXMgaW5kaWNlcyBvZiB0ZW5zb3JzIHRvIGdhdGhlclxuICAgKiBAcGFyYW0gZWxlbWVudER0eXBlIG91dHB1dCB0ZW5zb3IgZHR5cGVcbiAgICogQHBhcmFtIGVsZW1lbnRTaGFwZSBvdXRwdXQgdGVuc29yIGVsZW1lbnQgc2hhcGVcbiAgICovXG4gIGdhdGhlcihpbmRpY2VzOiBudW1iZXJbXSwgZWxlbWVudER0eXBlOiBEYXRhVHlwZSwgZWxlbWVudFNoYXBlOiBudW1iZXJbXSk6XG4gICAgICBUZW5zb3Ige1xuICAgIGlmIChlbGVtZW50RHR5cGUgIT09IHRoaXMuZWxlbWVudER0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSB0eXBlczsgb3AgZWxlbWVudHMgJHtcbiAgICAgICAgICBlbGVtZW50RHR5cGV9LCBidXQgbGlzdCBlbGVtZW50cyAke3RoaXMuZWxlbWVudER0eXBlfWApO1xuICAgIH1cblxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICB0aGlzLmVsZW1lbnRTaGFwZSwgZWxlbWVudFNoYXBlLCAnVGVuc29yTGlzdCBzaGFwZSBtaXNtYXRjaDogJyk7XG5cbiAgICAvLyBXaGVuIGluZGljZXMgaXMgZ3JlYXRlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBsaXN0LCBpbmRpY2VzIGJleW9uZCB0aGVcbiAgICAvLyBzaXplIG9mIHRoZSBsaXN0IGFyZSBpZ25vcmVkLlxuICAgIGluZGljZXMgPSBpbmRpY2VzLnNsaWNlKDAsIHRoaXMuc2l6ZSgpKTtcbiAgICBjb25zdCBvdXRwdXRFbGVtZW50U2hhcGUgPVxuICAgICAgICBpbmZlckVsZW1lbnRTaGFwZSh0aGlzLmVsZW1lbnRTaGFwZSwgdGhpcy50ZW5zb3JzLCBlbGVtZW50U2hhcGUpO1xuICAgIGlmIChpbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRlbnNvcihbXSwgWzBdLmNvbmNhdChvdXRwdXRFbGVtZW50U2hhcGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCB0ZW5zb3JzID1cbiAgICAgICAgICBpbmRpY2VzLm1hcChpID0+IHJlc2hhcGUodGhpcy50ZW5zb3JzW2ldLCBvdXRwdXRFbGVtZW50U2hhcGUpKTtcbiAgICAgIHJldHVybiBzdGFjayh0ZW5zb3JzLCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlcyBpbiB0aGUgVGVuc29yTGlzdCBhcyBhIGNvbmNhdGVuYXRlZCBUZW5zb3IuXG4gICAqIEBwYXJhbSBlbGVtZW50RHR5cGUgb3V0cHV0IHRlbnNvciBkdHlwZVxuICAgKiBAcGFyYW0gZWxlbWVudFNoYXBlIG91dHB1dCB0ZW5zb3IgZWxlbWVudCBzaGFwZVxuICAgKi9cbiAgY29uY2F0KGVsZW1lbnREdHlwZTogRGF0YVR5cGUsIGVsZW1lbnRTaGFwZTogbnVtYmVyW10pOiBUZW5zb3Ige1xuICAgIGlmICghIWVsZW1lbnREdHlwZSAmJiBlbGVtZW50RHR5cGUgIT09IHRoaXMuZWxlbWVudER0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckxpc3QgZHR5cGUgaXMgJHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnREdHlwZX0gYnV0IGNvbmNhdCByZXF1ZXN0ZWQgZHR5cGUgJHtlbGVtZW50RHR5cGV9YCk7XG4gICAgfVxuXG4gICAgYXNzZXJ0U2hhcGVzTWF0Y2hBbGxvd1VuZGVmaW5lZFNpemUoXG4gICAgICAgIHRoaXMuZWxlbWVudFNoYXBlLCBlbGVtZW50U2hhcGUsICdUZW5zb3JMaXN0IHNoYXBlIG1pc21hdGNoOiAnKTtcbiAgICBjb25zdCBvdXRwdXRFbGVtZW50U2hhcGUgPVxuICAgICAgICBpbmZlckVsZW1lbnRTaGFwZSh0aGlzLmVsZW1lbnRTaGFwZSwgdGhpcy50ZW5zb3JzLCBlbGVtZW50U2hhcGUpO1xuXG4gICAgaWYgKHRoaXMuc2l6ZSgpID09PSAwKSB7XG4gICAgICByZXR1cm4gdGVuc29yKFtdLCBbMF0uY29uY2F0KG91dHB1dEVsZW1lbnRTaGFwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCB0ZW5zb3JzID0gdGhpcy50ZW5zb3JzLm1hcCh0ID0+IHJlc2hhcGUodCwgb3V0cHV0RWxlbWVudFNoYXBlKSk7XG4gICAgICByZXR1cm4gY29uY2F0KHRlbnNvcnMsIDApO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFRlbnNvckxpc3Qgd2hpY2gsIHdoZW4gc3RhY2tlZCwgaGFzIHRoZSB2YWx1ZSBvZiB0ZW5zb3IuXG4gKiBAcGFyYW0gdGVuc29yIGZyb20gdGVuc29yXG4gKiBAcGFyYW0gZWxlbWVudFNoYXBlIG91dHB1dCB0ZW5zb3IgZWxlbWVudCBzaGFwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRlbnNvcihcbiAgICB0ZW5zb3I6IFRlbnNvciwgZWxlbWVudFNoYXBlOiBudW1iZXJbXSwgZWxlbWVudER0eXBlOiBEYXRhVHlwZSkge1xuICBjb25zdCBkdHlwZSA9IHRlbnNvci5kdHlwZTtcbiAgaWYgKHRlbnNvci5zaGFwZS5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGVuc29yIG11c3QgYmUgYXQgbGVhc3QgYSB2ZWN0b3IsIGJ1dCBzYXcgc2hhcGU6ICR7dGVuc29yLnNoYXBlfWApO1xuICB9XG4gIGlmICh0ZW5zb3IuZHR5cGUgIT09IGVsZW1lbnREdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkYXRhIHR5cGVzOyBvcCBlbGVtZW50cyAke1xuICAgICAgICB0ZW5zb3IuZHR5cGV9LCBidXQgbGlzdCBlbGVtZW50cyAke2VsZW1lbnREdHlwZX1gKTtcbiAgfVxuICBjb25zdCB0ZW5zb3JFbGVtZW50U2hhcGUgPSB0ZW5zb3Iuc2hhcGUuc2xpY2UoMSk7XG4gIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgdGVuc29yRWxlbWVudFNoYXBlLCBlbGVtZW50U2hhcGUsICdUZW5zb3JMaXN0IHNoYXBlIG1pc21hdGNoOiAnKTtcbiAgY29uc3QgdGVuc29yTGlzdDogVGVuc29yW10gPSB1bnN0YWNrKHRlbnNvcik7XG4gIHJldHVybiBuZXcgVGVuc29yTGlzdCh0ZW5zb3JMaXN0LCBlbGVtZW50U2hhcGUsIGR0eXBlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBUZW5zb3JMaXN0IG9mIHRoZSBnaXZlbiBzaXplIHdpdGggZW1wdHkgZWxlbWVudHMuXG4gKiBAcGFyYW0gZWxlbWVudFNoYXBlIHRoZSBzaGFwZSBvZiB0aGUgZnV0dXJlIGVsZW1lbnRzIG9mIHRoZSBsaXN0XG4gKiBAcGFyYW0gZWxlbWVudER0eXBlIHRoZSBkZXNpcmVkIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3RcbiAqIEBwYXJhbSBudW1FbGVtZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJlc2VydmVcbiAqIEBwYXJhbSBtYXhOdW1FbGVtZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGggbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXJ2ZShcbiAgICBlbGVtZW50U2hhcGU6IG51bWJlcltdLCBlbGVtZW50RHR5cGU6IERhdGFUeXBlLCBudW1FbGVtZW50czogbnVtYmVyLFxuICAgIG1heE51bUVsZW1lbnRzOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBUZW5zb3JMaXN0KFtdLCBlbGVtZW50U2hhcGUsIGVsZW1lbnREdHlwZSwgbWF4TnVtRWxlbWVudHMpO1xufVxuXG4vKipcbiAqIFB1dCB0ZW5zb3JzIGF0IHNwZWNpZmljIGluZGljZXMgb2YgYSBzdGFja2VkIHRlbnNvciBpbnRvIGEgVGVuc29yTGlzdC5cbiAqIEBwYXJhbSBpbmRpY2VzIGxpc3Qgb2YgaW5kaWNlcyBvbiBob3cgdG8gc2NhdHRlciB0aGUgdGVuc29yLlxuICogQHBhcmFtIHRlbnNvciBpbnB1dCB0ZW5zb3IuXG4gKiBAcGFyYW0gZWxlbWVudFNoYXBlIHRoZSBzaGFwZSBvZiB0aGUgZnV0dXJlIGVsZW1lbnRzIG9mIHRoZSBsaXN0XG4gKiBAcGFyYW0gbnVtRWxlbWVudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzY2F0dGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2F0dGVyKFxuICAgIHRlbnNvcjogVGVuc29yLCBpbmRpY2VzOiBudW1iZXJbXSwgZWxlbWVudFNoYXBlOiBudW1iZXJbXSxcbiAgICBudW1FbGVtZW50cz86IG51bWJlcik6IFRlbnNvckxpc3Qge1xuICBpZiAoaW5kaWNlcy5sZW5ndGggIT09IHRlbnNvci5zaGFwZVswXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbGVuKGluZGljZXMpID09IHRlbnNvci5zaGFwZVswXSwgYnV0IHNhdzogJHtcbiAgICAgICAgaW5kaWNlcy5sZW5ndGh9IHZzLiAke3RlbnNvci5zaGFwZVswXX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1heEluZGV4ID0gTWF0aC5tYXgoLi4uaW5kaWNlcyk7XG5cbiAgaWYgKG51bUVsZW1lbnRzICE9IG51bGwgJiYgbnVtRWxlbWVudHMgIT09IC0xICYmIG1heEluZGV4ID49IG51bUVsZW1lbnRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWF4IGluZGV4IG11c3QgYmUgPCBhcnJheSBzaXplICgke21heEluZGV4fSAgdnMuICR7bnVtRWxlbWVudHN9KWApO1xuICB9XG5cbiAgY29uc3QgbGlzdCA9IG5ldyBUZW5zb3JMaXN0KFtdLCBlbGVtZW50U2hhcGUsIHRlbnNvci5kdHlwZSwgbnVtRWxlbWVudHMpO1xuICBjb25zdCB0ZW5zb3JzID0gdW5zdGFjayh0ZW5zb3IsIDApO1xuICBpbmRpY2VzLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGxpc3Quc2V0SXRlbSh2YWx1ZSwgdGVuc29yc1tpbmRleF0pO1xuICB9KTtcbiAgcmV0dXJuIGxpc3Q7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHZhbHVlcyBvZiBhIFRlbnNvciBpbnRvIGEgVGVuc29yTGlzdC5cbiAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aHMgdG8gdXNlIHdoZW4gc3BsaXR0aW5nIHZhbHVlIGFsb25nXG4gKiAgICBpdHMgZmlyc3QgZGltZW5zaW9uLlxuICogQHBhcmFtIHRlbnNvciB0aGUgdGVuc29yIHRvIHNwbGl0LlxuICogQHBhcmFtIGVsZW1lbnRTaGFwZSB0aGUgc2hhcGUgb2YgdGhlIGZ1dHVyZSBlbGVtZW50cyBvZiB0aGUgbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXQoXG4gICAgdGVuc29yOiBUZW5zb3IsIGxlbmd0aDogbnVtYmVyW10sIGVsZW1lbnRTaGFwZTogbnVtYmVyW10pIHtcbiAgbGV0IHRvdGFsTGVuZ3RoID0gMDtcbiAgY29uc3QgY3VtdWxhdGl2ZUxlbmd0aHMgPSBsZW5ndGgubWFwKGxlbiA9PiB7XG4gICAgdG90YWxMZW5ndGggKz0gbGVuO1xuICAgIHJldHVybiB0b3RhbExlbmd0aDtcbiAgfSk7XG5cbiAgaWYgKHRvdGFsTGVuZ3RoICE9PSB0ZW5zb3Iuc2hhcGVbMF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN1bSBvZiBsZW5ndGhzIHRvIGJlIGVxdWFsIHRvXG4gICAgICAgICAgdGVuc29yLnNoYXBlWzBdLCBidXQgc3VtIG9mIGxlbmd0aHMgaXNcbiAgICAgICAgJHt0b3RhbExlbmd0aH0sIGFuZCB0ZW5zb3IncyBzaGFwZSBpczogJHt0ZW5zb3Iuc2hhcGV9YCk7XG4gIH1cblxuICBjb25zdCBzaGFwZVdpdGhvdXRGaXJzdERpbSA9IHRlbnNvci5zaGFwZS5zbGljZSgxKTtcbiAgY29uc3Qgb3V0cHV0RWxlbWVudFNoYXBlID1cbiAgICAgIG1lcmdlRWxlbWVudFNoYXBlKHNoYXBlV2l0aG91dEZpcnN0RGltLCBlbGVtZW50U2hhcGUpO1xuICBjb25zdCBlbGVtZW50UGVyUm93ID0gdG90YWxMZW5ndGggPT09IDAgPyAwIDogdGVuc29yLnNpemUgLyB0b3RhbExlbmd0aDtcbiAgY29uc3QgdGVuc29yczogVGVuc29yW10gPSB0aWR5KCgpID0+IHtcbiAgICBjb25zdCB0ZW5zb3JzID0gW107XG4gICAgdGVuc29yID0gcmVzaGFwZSh0ZW5zb3IsIFsxLCB0b3RhbExlbmd0aCwgZWxlbWVudFBlclJvd10pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0xlbmd0aCA9IChpID09PSAwKSA/IDAgOiBjdW11bGF0aXZlTGVuZ3Roc1tpIC0gMV07XG4gICAgICBjb25zdCBpbmRpY2VzID0gWzAsIHByZXZpb3VzTGVuZ3RoLCAwXTtcbiAgICAgIGNvbnN0IHNpemVzID0gWzEsIGxlbmd0aFtpXSwgZWxlbWVudFBlclJvd107XG4gICAgICB0ZW5zb3JzW2ldID0gcmVzaGFwZShcbiAgICAgICAgICBzbGljZSh0ZW5zb3IsIGluZGljZXMsIHNpemVzKSwgb3V0cHV0RWxlbWVudFNoYXBlIGFzIG51bWJlcltdKTtcbiAgICB9XG4gICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICByZXR1cm4gdGVuc29ycztcbiAgfSk7XG5cbiAgY29uc3QgbGlzdCA9IG5ldyBUZW5zb3JMaXN0KFtdLCBlbGVtZW50U2hhcGUsIHRlbnNvci5kdHlwZSwgbGVuZ3RoLmxlbmd0aCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW5zb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGlzdC5zZXRJdGVtKGksIHRlbnNvcnNbaV0pO1xuICB9XG4gIHJldHVybiBsaXN0O1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { scalar } from '@tensorflow/tfjs-core';\nimport { TensorArray } from '../../executor/tensor_array';\nimport { fromTensor, reserve, scatter, split } from '../../executor/tensor_list';\nimport { cloneTensor, getParamValue, getTensor } from './utils';\nexport const executeOp = async (node, tensorMap, context) => {\n switch (node.op) {\n case 'If':\n case 'StatelessIf': {\n const thenFunc = getParamValue('thenBranch', node, tensorMap, context);\n const elseFunc = getParamValue('elseBranch', node, tensorMap, context);\n const cond = getParamValue('cond', node, tensorMap, context);\n const args = getParamValue('args', node, tensorMap, context);\n const condValue = await cond.data();\n if (condValue[0]) {\n return context.functionMap[thenFunc].executeFunctionAsync(args, context.tensorArrayMap, context.tensorListMap);\n }\n else {\n return context.functionMap[elseFunc].executeFunctionAsync(args, context.tensorArrayMap, context.tensorListMap);\n }\n }\n case 'While':\n case 'StatelessWhile': {\n const bodyFunc = getParamValue('body', node, tensorMap, context);\n const condFunc = getParamValue('cond', node, tensorMap, context);\n const args = getParamValue('args', node, tensorMap, context);\n // Calculate the condition of the loop\n const condResult = (await context.functionMap[condFunc].executeFunctionAsync(args, context.tensorArrayMap, context.tensorListMap));\n const argIds = args.map(tensor => tensor.id);\n let condValue = await condResult[0].data();\n // Dispose the intermediate tensors for condition function\n condResult.forEach(tensor => {\n if (!tensor.kept && argIds.indexOf(tensor.id) === -1) {\n tensor.dispose();\n }\n });\n let result = args;\n while (condValue[0]) {\n // Record the previous result for intermediate tensor tracking\n const origResult = result;\n // Execution the body of the loop\n result = await context.functionMap[bodyFunc].executeFunctionAsync(result, context.tensorArrayMap, context.tensorListMap);\n const resultIds = result.map(tensor => tensor.id);\n // Dispose the intermediate tensor for body function that is not global\n // kept, not input/output of the body function\n origResult.forEach(tensor => {\n if (!tensor.kept && argIds.indexOf(tensor.id) === -1 &&\n resultIds.indexOf(tensor.id) === -1) {\n tensor.dispose();\n }\n });\n // Recalcuate the condition of the loop using the latest results.\n const condResult = (await context.functionMap[condFunc].executeFunctionAsync(result, context.tensorArrayMap, context.tensorListMap));\n condValue = await condResult[0].data();\n // Dispose the intermediate tensors for condition function\n condResult.forEach(tensor => {\n if (!tensor.kept && argIds.indexOf(tensor.id) === -1 &&\n resultIds.indexOf(tensor.id) === -1) {\n tensor.dispose();\n }\n });\n }\n return result;\n }\n case 'LoopCond': {\n const pred = getParamValue('pred', node, tensorMap, context);\n return [cloneTensor(pred)];\n }\n case 'Switch': {\n const pred = getParamValue('pred', node, tensorMap, context);\n let data = getParamValue('data', node, tensorMap, context);\n if (!data.kept) {\n data = cloneTensor(data);\n }\n // Outputs nodes :0 => false, :1 => true\n return (await pred.data())[0] ? [undefined, data] : [data, undefined];\n }\n case 'Merge': {\n const inputName = node.inputNames.find(name => getTensor(name, tensorMap, context) !== undefined);\n if (inputName) {\n const data = getTensor(inputName, tensorMap, context);\n return [cloneTensor(data)];\n }\n return undefined;\n }\n case 'Enter': {\n const frameId = getParamValue('frameName', node, tensorMap, context);\n const data = getParamValue('tensor', node, tensorMap, context);\n context.enterFrame(frameId);\n return [cloneTensor(data)];\n }\n case 'Exit': {\n const data = getParamValue('tensor', node, tensorMap, context);\n context.exitFrame();\n return [cloneTensor(data)];\n }\n case 'NextIteration': {\n const data = getParamValue('tensor', node, tensorMap, context);\n context.nextIteration();\n return [cloneTensor(data)];\n }\n case 'TensorArrayV3': {\n const size = getParamValue('size', node, tensorMap, context);\n const dtype = getParamValue('dtype', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const dynamicSize = getParamValue('dynamicSize', node, tensorMap, context);\n const clearAfterRead = getParamValue('clearAfterRead', node, tensorMap, context);\n const identicalElementShapes = getParamValue('identicalElementShapes', node, tensorMap, context);\n const name = getParamValue('name', node, tensorMap, context);\n const tensorArray = new TensorArray(name, dtype, size, elementShape, identicalElementShapes, dynamicSize, clearAfterRead);\n context.addTensorArray(tensorArray);\n return [tensorArray.idTensor, scalar(1.0)];\n }\n case 'TensorArrayWriteV3': {\n const id = getParamValue('tensorArrayId', node, tensorMap, context);\n const index = getParamValue('index', node, tensorMap, context);\n const writeTensor = getParamValue('tensor', node, tensorMap, context);\n const writeTensorArray = context.getTensorArray(id.id);\n writeTensorArray.write(index, writeTensor);\n return [writeTensorArray.idTensor];\n }\n case 'TensorArrayReadV3': {\n const readId = getParamValue('tensorArrayId', node, tensorMap, context);\n const readIndex = getParamValue('index', node, tensorMap, context);\n const readTensorArray = context.getTensorArray(readId.id);\n return [readTensorArray.read(readIndex)];\n }\n case 'TensorArrayGatherV3': {\n const gatherId = getParamValue('tensorArrayId', node, tensorMap, context);\n const gatherIndices = getParamValue('indices', node, tensorMap, context);\n const gatherDtype = getParamValue('dtype', node, tensorMap, context);\n const gatherTensorArray = context.getTensorArray(gatherId.id);\n return [gatherTensorArray.gather(gatherIndices, gatherDtype)];\n }\n case 'TensorArrayScatterV3': {\n const scatterId = getParamValue('tensorArrayId', node, tensorMap, context);\n const scatterIndices = getParamValue('indices', node, tensorMap, context);\n const scatterTensor = getParamValue('tensor', node, tensorMap, context);\n const scatterTensorArray = context.getTensorArray(scatterId.id);\n scatterTensorArray.scatter(scatterIndices, scatterTensor);\n return [scatterTensorArray.idTensor];\n }\n case 'TensorArrayConcatV3': {\n const concatId = getParamValue('tensorArrayId', node, tensorMap, context);\n const concatTensorArray = context.getTensorArray(concatId.id);\n const concatDtype = getParamValue('dtype', node, tensorMap, context);\n return [concatTensorArray.concat(concatDtype)];\n }\n case 'TensorArraySplitV3': {\n const splitId = getParamValue('tensorArrayId', node, tensorMap, context);\n const splitTensor = getParamValue('tensor', node, tensorMap, context);\n const lengths = getParamValue('lengths', node, tensorMap, context);\n const splitTensorArray = context.getTensorArray(splitId.id);\n splitTensorArray.split(lengths, splitTensor);\n return [splitTensorArray.idTensor];\n }\n case 'TensorArraySizeV3': {\n const sizeId = getParamValue('tensorArrayId', node, tensorMap, context);\n const sizeTensorArray = context.getTensorArray(sizeId.id);\n return [scalar(sizeTensorArray.size(), 'int32')];\n }\n case 'TensorArrayCloseV3': {\n const closeId = getParamValue('tensorArrayId', node, tensorMap, context);\n const closeTensorArray = context.getTensorArray(closeId.id);\n closeTensorArray.clearAndClose();\n return [closeTensorArray.idTensor];\n }\n case 'TensorListSetItem': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const index = getParamValue('index', node, tensorMap, context);\n const writeTensor = getParamValue('tensor', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n tensorList.setItem(index, writeTensor);\n return [tensorList.idTensor];\n }\n case 'TensorListGetItem': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const readIndex = getParamValue('index', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDType = getParamValue('elementDType', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n return [tensorList.getItem(readIndex, elementShape, elementDType)];\n }\n case 'TensorListScatterV2':\n case 'TensorListScatter': {\n const scatterIndices = getParamValue('indices', node, tensorMap, context);\n const scatterTensor = getParamValue('tensor', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const numElements = getParamValue('numElements', node, tensorMap, context);\n const tensorList = scatter(scatterTensor, scatterIndices, elementShape, numElements);\n context.addTensorList(tensorList);\n return [tensorList.idTensor];\n }\n case 'TensorListReserve':\n case 'EmptyTensorList': {\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDtype = getParamValue('elementDType', node, tensorMap, context);\n let numElementsParam;\n if (node.op === 'TensorListReserve') {\n numElementsParam = 'numElements';\n }\n else {\n numElementsParam = 'maxNumElements';\n }\n const numElements = getParamValue(numElementsParam, node, tensorMap, context);\n const maxNumElements = node.op === 'TensorListReserve' ? -1 : numElements;\n const tensorList = reserve(elementShape, elementDtype, numElements, maxNumElements);\n context.addTensorList(tensorList);\n return [tensorList.idTensor];\n }\n case 'TensorListGather': {\n const gatherId = getParamValue('tensorListId', node, tensorMap, context);\n const gatherIndices = getParamValue('indices', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDtype = getParamValue('elementDType', node, tensorMap, context);\n const tensorList = context.getTensorList(gatherId.id);\n return [tensorList.gather(gatherIndices, elementDtype, elementShape)];\n }\n case 'TensorListStack': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDtype = getParamValue('elementDType', node, tensorMap, context);\n const numElements = getParamValue('numElements', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n return [tensorList.stack(elementShape, elementDtype, numElements)];\n }\n case 'TensorListFromTensor': {\n const tensor = getParamValue('tensor', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDtype = getParamValue('elementDType', node, tensorMap, context);\n const tensorList = fromTensor(tensor, elementShape, elementDtype);\n context.addTensorList(tensorList);\n return [tensorList.idTensor];\n }\n case 'TensorListConcat':\n case 'TensorListConcatV2': {\n const concatId = getParamValue('tensorListId', node, tensorMap, context);\n const tensorList = context.getTensorList(concatId.id);\n const concatDtype = getParamValue('dtype', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n return [tensorList.concat(concatDtype, elementShape)];\n }\n case 'TensorListPushBack': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const writeTensor = getParamValue('tensor', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n tensorList.pushBack(writeTensor);\n return [tensorList.idTensor];\n }\n case 'TensorListPopBack': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDType = getParamValue('elementDType', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n return [tensorList.popBack(elementShape, elementDType)];\n }\n case 'TensorListSplit': {\n const splitTensor = getParamValue('tensor', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const lengths = getParamValue('lengths', node, tensorMap, context);\n const tensorList = split(splitTensor, lengths, elementShape);\n context.addTensorList(tensorList);\n return [tensorList.idTensor];\n }\n case 'TensorListLength': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n return [scalar(tensorList.size(), 'int32')];\n }\n case 'TensorListResize': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n const srcTensorList = context.getTensorList(idTensor.id);\n const destTensorList = srcTensorList.resize(size);\n context.addTensorList(destTensorList);\n return [destTensorList.idTensor];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'control';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbF9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9jb250cm9sX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBVyxNQUFNLEVBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUkvRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRy9FLE9BQU8sRUFBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTRCLEtBQUssRUFDbkQsSUFBVSxFQUFFLFNBQTBCLEVBQ3RDLE9BQXlCLEVBQXFCLEVBQUU7SUFDbEQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxHQUNWLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNwRSxNQUFNLFFBQVEsR0FDVixhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDcEUsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQztZQUN6RSxNQUFNLFNBQVMsR0FB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LEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sUUFBUSxHQUNWLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUN0RSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFFdkUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEM7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIHNjYWxhciwgVGVuc29yfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7VGVuc29yQXJyYXl9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL3RlbnNvcl9hcnJheSc7XG5pbXBvcnQge2Zyb21UZW5zb3IsIHJlc2VydmUsIHNjYXR0ZXIsIHNwbGl0fSBmcm9tICcuLi8uLi9leGVjdXRvci90ZW5zb3JfbGlzdCc7XG5pbXBvcnQge0ludGVybmFsT3BBc3luY0V4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y2xvbmVUZW5zb3IsIGdldFBhcmFtVmFsdWUsIGdldFRlbnNvcn0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BBc3luY0V4ZWN1dG9yID0gYXN5bmMoXG4gICAgbm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCk6IFByb21pc2U8VGVuc29yW10+ID0+IHtcbiAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgY2FzZSAnSWYnOlxuICAgIGNhc2UgJ1N0YXRlbGVzc0lmJzoge1xuICAgICAgY29uc3QgdGhlbkZ1bmMgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RoZW5CcmFuY2gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGVsc2VGdW5jID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbHNlQnJhbmNoJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBjb25kID0gZ2V0UGFyYW1WYWx1ZSgnY29uZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgYXJncyA9IGdldFBhcmFtVmFsdWUoJ2FyZ3MnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcltdO1xuICAgICAgY29uc3QgY29uZFZhbHVlID0gYXdhaXQgY29uZC5kYXRhKCk7XG4gICAgICBpZiAoY29uZFZhbHVlWzBdKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmZ1bmN0aW9uTWFwW3RoZW5GdW5jXS5leGVjdXRlRnVuY3Rpb25Bc3luYyhcbiAgICAgICAgICAgIGFyZ3MsIGNvbnRleHQudGVuc29yQXJyYXlNYXAsIGNvbnRleHQudGVuc29yTGlzdE1hcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29udGV4dC5mdW5jdGlvbk1hcFtlbHNlRnVuY10uZXhlY3V0ZUZ1bmN0aW9uQXN5bmMoXG4gICAgICAgICAgICBhcmdzLCBjb250ZXh0LnRlbnNvckFycmF5TWFwLCBjb250ZXh0LnRlbnNvckxpc3RNYXApO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlICdXaGlsZSc6XG4gICAgY2FzZSAnU3RhdGVsZXNzV2hpbGUnOiB7XG4gICAgICBjb25zdCBib2R5RnVuYyA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYm9keScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgY29uZEZ1bmMgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2NvbmQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGFyZ3MgPSBnZXRQYXJhbVZhbHVlKCdhcmdzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3JbXTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb25kaXRpb24gb2YgdGhlIGxvb3BcbiAgICAgIGNvbnN0IGNvbmRSZXN1bHQgPVxuICAgICAgICAgIChhd2FpdCBjb250ZXh0LmZ1bmN0aW9uTWFwW2NvbmRGdW5jXS5leGVjdXRlRnVuY3Rpb25Bc3luYyhcbiAgICAgICAgICAgICAgYXJncywgY29udGV4dC50ZW5zb3JBcnJheU1hcCwgY29udGV4dC50ZW5zb3JMaXN0TWFwKSk7XG4gICAgICBjb25zdCBhcmdJZHMgPSBhcmdzLm1hcCh0ZW5zb3IgPT4gdGVuc29yLmlkKTtcbiAgICAgIGxldCBjb25kVmFsdWUgPSBhd2FpdCBjb25kUmVzdWx0WzBdLmRhdGEoKTtcbiAgICAgIC8vIERpc3Bvc2UgdGhlIGludGVybWVkaWF0ZSB0ZW5zb3JzIGZvciBjb25kaXRpb24gZnVuY3Rpb25cbiAgICAgIGNvbmRSZXN1bHQuZm9yRWFjaCh0ZW5zb3IgPT4ge1xuICAgICAgICBpZiAoIXRlbnNvci5rZXB0ICYmIGFyZ0lkcy5pbmRleE9mKHRlbnNvci5pZCkgPT09IC0xKSB7XG4gICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxldCByZXN1bHQ6IFRlbnNvcltdID0gYXJncztcblxuICAgICAgd2hpbGUgKGNvbmRWYWx1ZVswXSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHByZXZpb3VzIHJlc3VsdCBmb3IgaW50ZXJtZWRpYXRlIHRlbnNvciB0cmFja2luZ1xuICAgICAgICBjb25zdCBvcmlnUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAvLyBFeGVjdXRpb24gdGhlIGJvZHkgb2YgdGhlIGxvb3BcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5mdW5jdGlvbk1hcFtib2R5RnVuY10uZXhlY3V0ZUZ1bmN0aW9uQXN5bmMoXG4gICAgICAgICAgICByZXN1bHQsIGNvbnRleHQudGVuc29yQXJyYXlNYXAsIGNvbnRleHQudGVuc29yTGlzdE1hcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdElkcyA9IHJlc3VsdC5tYXAodGVuc29yID0+IHRlbnNvci5pZCk7XG5cbiAgICAgICAgLy8gRGlzcG9zZSB0aGUgaW50ZXJtZWRpYXRlIHRlbnNvciBmb3IgYm9keSBmdW5jdGlvbiB0aGF0IGlzIG5vdCBnbG9iYWxcbiAgICAgICAgLy8ga2VwdCwgbm90IGlucHV0L291dHB1dCBvZiB0aGUgYm9keSBmdW5jdGlvblxuICAgICAgICBvcmlnUmVzdWx0LmZvckVhY2godGVuc29yID0+IHtcbiAgICAgICAgICBpZiAoIXRlbnNvci5rZXB0ICYmIGFyZ0lkcy5pbmRleE9mKHRlbnNvci5pZCkgPT09IC0xICYmXG4gICAgICAgICAgICAgIHJlc3VsdElkcy5pbmRleE9mKHRlbnNvci5pZCkgPT09IC0xKSB7XG4gICAgICAgICAgICB0ZW5zb3IuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVjYWxjdWF0ZSB0aGUgY29uZGl0aW9uIG9mIHRoZSBsb29wIHVzaW5nIHRoZSBsYXRlc3QgcmVzdWx0cy5cbiAgICAgICAgY29uc3QgY29uZFJlc3VsdCA9XG4gICAgICAgICAgICAoYXdhaXQgY29udGV4dC5mdW5jdGlvbk1hcFtjb25kRnVuY10uZXhlY3V0ZUZ1bmN0aW9uQXN5bmMoXG4gICAgICAgICAgICAgICAgcmVzdWx0LCBjb250ZXh0LnRlbnNvckFycmF5TWFwLCBjb250ZXh0LnRlbnNvckxpc3RNYXApKTtcbiAgICAgICAgY29uZFZhbHVlID0gYXdhaXQgY29uZFJlc3VsdFswXS5kYXRhKCk7XG4gICAgICAgIC8vIERpc3Bvc2UgdGhlIGludGVybWVkaWF0ZSB0ZW5zb3JzIGZvciBjb25kaXRpb24gZnVuY3Rpb25cbiAgICAgICAgY29uZFJlc3VsdC5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICAgICAgaWYgKCF0ZW5zb3Iua2VwdCAmJiBhcmdJZHMuaW5kZXhPZih0ZW5zb3IuaWQpID09PSAtMSAmJlxuICAgICAgICAgICAgICByZXN1bHRJZHMuaW5kZXhPZih0ZW5zb3IuaWQpID09PSAtMSkge1xuICAgICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY2FzZSAnTG9vcENvbmQnOiB7XG4gICAgICBjb25zdCBwcmVkID0gZ2V0UGFyYW1WYWx1ZSgncHJlZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihwcmVkKV07XG4gICAgfVxuICAgIGNhc2UgJ1N3aXRjaCc6IHtcbiAgICAgIGNvbnN0IHByZWQgPSBnZXRQYXJhbVZhbHVlKCdwcmVkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBsZXQgZGF0YSA9IGdldFBhcmFtVmFsdWUoJ2RhdGEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGlmICghZGF0YS5rZXB0KSB7XG4gICAgICAgIGRhdGEgPSBjbG9uZVRlbnNvcihkYXRhKTtcbiAgICAgIH1cbiAgICAgIC8vIE91dHB1dHMgbm9kZXMgOjAgPT4gZmFsc2UsIDoxID0+IHRydWVcbiAgICAgIHJldHVybiAoYXdhaXQgcHJlZC5kYXRhKCkpWzBdID8gW3VuZGVmaW5lZCwgZGF0YV0gOiBbZGF0YSwgdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgY2FzZSAnTWVyZ2UnOiB7XG4gICAgICBjb25zdCBpbnB1dE5hbWUgPSBub2RlLmlucHV0TmFtZXMuZmluZChcbiAgICAgICAgICBuYW1lID0+IGdldFRlbnNvcihuYW1lLCB0ZW5zb3JNYXAsIGNvbnRleHQpICE9PSB1bmRlZmluZWQpO1xuICAgICAgaWYgKGlucHV0TmFtZSkge1xuICAgICAgICBjb25zdCBkYXRhID0gZ2V0VGVuc29yKGlucHV0TmFtZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihkYXRhKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgIGNvbnN0IGZyYW1lSWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2ZyYW1lTmFtZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgZGF0YSA9IGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29udGV4dC5lbnRlckZyYW1lKGZyYW1lSWQpO1xuICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihkYXRhKV07XG4gICAgfVxuICAgIGNhc2UgJ0V4aXQnOiB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb250ZXh0LmV4aXRGcmFtZSgpO1xuICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihkYXRhKV07XG4gICAgfVxuICAgIGNhc2UgJ05leHRJdGVyYXRpb24nOiB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb250ZXh0Lm5leHRJdGVyYXRpb24oKTtcbiAgICAgIHJldHVybiBbY2xvbmVUZW5zb3IoZGF0YSldO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JBcnJheVYzJzoge1xuICAgICAgY29uc3Qgc2l6ZSA9IGdldFBhcmFtVmFsdWUoJ3NpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgIGNvbnN0IGR0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCBlbGVtZW50U2hhcGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnRTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBkeW5hbWljU2l6ZSA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHluYW1pY1NpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW47XG4gICAgICBjb25zdCBjbGVhckFmdGVyUmVhZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY2xlYXJBZnRlclJlYWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW47XG4gICAgICBjb25zdCBpZGVudGljYWxFbGVtZW50U2hhcGVzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpZGVudGljYWxFbGVtZW50U2hhcGVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgIGJvb2xlYW47XG4gICAgICBjb25zdCBuYW1lID0gZ2V0UGFyYW1WYWx1ZSgnbmFtZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgdGVuc29yQXJyYXkgPSBuZXcgVGVuc29yQXJyYXkoXG4gICAgICAgICAgbmFtZSwgZHR5cGUsIHNpemUsIGVsZW1lbnRTaGFwZSwgaWRlbnRpY2FsRWxlbWVudFNoYXBlcywgZHluYW1pY1NpemUsXG4gICAgICAgICAgY2xlYXJBZnRlclJlYWQpO1xuICAgICAgY29udGV4dC5hZGRUZW5zb3JBcnJheSh0ZW5zb3JBcnJheSk7XG4gICAgICByZXR1cm4gW3RlbnNvckFycmF5LmlkVGVuc29yLCBzY2FsYXIoMS4wKV07XG4gICAgfVxuICAgIGNhc2UgJ1RlbnNvckFycmF5V3JpdGVWMyc6IHtcbiAgICAgIGNvbnN0IGlkID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JBcnJheUlkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCBpbmRleCA9IGdldFBhcmFtVmFsdWUoJ2luZGV4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICBjb25zdCB3cml0ZVRlbnNvciA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCB3cml0ZVRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShpZC5pZCk7XG4gICAgICB3cml0ZVRlbnNvckFycmF5LndyaXRlKGluZGV4LCB3cml0ZVRlbnNvcik7XG4gICAgICByZXR1cm4gW3dyaXRlVGVuc29yQXJyYXkuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JBcnJheVJlYWRWMyc6IHtcbiAgICAgIGNvbnN0IHJlYWRJZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yQXJyYXlJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgcmVhZEluZGV4ID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRleCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgcmVhZFRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShyZWFkSWQuaWQpO1xuICAgICAgcmV0dXJuIFtyZWFkVGVuc29yQXJyYXkucmVhZChyZWFkSW5kZXgpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlHYXRoZXJWMyc6IHtcbiAgICAgIGNvbnN0IGdhdGhlcklkID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JBcnJheUlkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCBnYXRoZXJJbmRpY2VzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgIGNvbnN0IGdhdGhlckR0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCBnYXRoZXJUZW5zb3JBcnJheSA9IGNvbnRleHQuZ2V0VGVuc29yQXJyYXkoZ2F0aGVySWQuaWQpO1xuICAgICAgcmV0dXJuIFtnYXRoZXJUZW5zb3JBcnJheS5nYXRoZXIoZ2F0aGVySW5kaWNlcywgZ2F0aGVyRHR5cGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlTY2F0dGVyVjMnOiB7XG4gICAgICBjb25zdCBzY2F0dGVySWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckFycmF5SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IHNjYXR0ZXJJbmRpY2VzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgIGNvbnN0IHNjYXR0ZXJUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3Qgc2NhdHRlclRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShzY2F0dGVySWQuaWQpO1xuICAgICAgc2NhdHRlclRlbnNvckFycmF5LnNjYXR0ZXIoc2NhdHRlckluZGljZXMsIHNjYXR0ZXJUZW5zb3IpO1xuICAgICAgcmV0dXJuIFtzY2F0dGVyVGVuc29yQXJyYXkuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JBcnJheUNvbmNhdFYzJzoge1xuICAgICAgY29uc3QgY29uY2F0SWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckFycmF5SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IGNvbmNhdFRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShjb25jYXRJZC5pZCk7XG4gICAgICBjb25zdCBjb25jYXREdHlwZSA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgcmV0dXJuIFtjb25jYXRUZW5zb3JBcnJheS5jb25jYXQoY29uY2F0RHR5cGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlTcGxpdFYzJzoge1xuICAgICAgY29uc3Qgc3BsaXRJZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yQXJyYXlJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3Qgc3BsaXRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgbGVuZ3RocyA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbGVuZ3RocycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBzcGxpdFRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShzcGxpdElkLmlkKTtcbiAgICAgIHNwbGl0VGVuc29yQXJyYXkuc3BsaXQobGVuZ3Rocywgc3BsaXRUZW5zb3IpO1xuICAgICAgcmV0dXJuIFtzcGxpdFRlbnNvckFycmF5LmlkVGVuc29yXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlTaXplVjMnOiB7XG4gICAgICBjb25zdCBzaXplSWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckFycmF5SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IHNpemVUZW5zb3JBcnJheSA9IGNvbnRleHQuZ2V0VGVuc29yQXJyYXkoc2l6ZUlkLmlkKTtcbiAgICAgIHJldHVybiBbc2NhbGFyKHNpemVUZW5zb3JBcnJheS5zaXplKCksICdpbnQzMicpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlDbG9zZVYzJzoge1xuICAgICAgY29uc3QgY2xvc2VJZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yQXJyYXlJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgY2xvc2VUZW5zb3JBcnJheSA9IGNvbnRleHQuZ2V0VGVuc29yQXJyYXkoY2xvc2VJZC5pZCk7XG4gICAgICBjbG9zZVRlbnNvckFycmF5LmNsZWFyQW5kQ2xvc2UoKTtcbiAgICAgIHJldHVybiBbY2xvc2VUZW5zb3JBcnJheS5pZFRlbnNvcl07XG4gICAgfVxuICAgIGNhc2UgJ1RlbnNvckxpc3RTZXRJdGVtJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgaW5kZXggPSBnZXRQYXJhbVZhbHVlKCdpbmRleCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3Qgd3JpdGVUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IGNvbnRleHQuZ2V0VGVuc29yTGlzdChpZFRlbnNvci5pZCk7XG4gICAgICB0ZW5zb3JMaXN0LnNldEl0ZW0oaW5kZXgsIHdyaXRlVGVuc29yKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5pZFRlbnNvcl07XG4gICAgfVxuICAgIGNhc2UgJ1RlbnNvckxpc3RHZXRJdGVtJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgcmVhZEluZGV4ID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRleCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuXG4gICAgICBjb25zdCBlbGVtZW50RFR5cGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnREVHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCB0ZW5zb3JMaXN0ID0gY29udGV4dC5nZXRUZW5zb3JMaXN0KGlkVGVuc29yLmlkKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5nZXRJdGVtKHJlYWRJbmRleCwgZWxlbWVudFNoYXBlLCBlbGVtZW50RFR5cGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdFNjYXR0ZXJWMic6XG4gICAgY2FzZSAnVGVuc29yTGlzdFNjYXR0ZXInOiB7XG4gICAgICBjb25zdCBzY2F0dGVySW5kaWNlcyA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW5kaWNlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBzY2F0dGVyVGVuc29yID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IGVsZW1lbnRTaGFwZSA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZWxlbWVudFNoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgIGNvbnN0IG51bUVsZW1lbnRzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdudW1FbGVtZW50cycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9XG4gICAgICAgICAgc2NhdHRlcihzY2F0dGVyVGVuc29yLCBzY2F0dGVySW5kaWNlcywgZWxlbWVudFNoYXBlLCBudW1FbGVtZW50cyk7XG4gICAgICBjb250ZXh0LmFkZFRlbnNvckxpc3QodGVuc29yTGlzdCk7XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JMaXN0UmVzZXJ2ZSc6XG4gICAgY2FzZSAnRW1wdHlUZW5zb3JMaXN0Jzoge1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgZWxlbWVudER0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgbGV0IG51bUVsZW1lbnRzUGFyYW07XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnVGVuc29yTGlzdFJlc2VydmUnKSB7XG4gICAgICAgIG51bUVsZW1lbnRzUGFyYW0gPSAnbnVtRWxlbWVudHMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtRWxlbWVudHNQYXJhbSA9ICdtYXhOdW1FbGVtZW50cyc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG51bUVsZW1lbnRzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKG51bUVsZW1lbnRzUGFyYW0sIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgbWF4TnVtRWxlbWVudHMgPSBub2RlLm9wID09PSAnVGVuc29yTGlzdFJlc2VydmUnID8gLTEgOiBudW1FbGVtZW50cztcbiAgICAgIGNvbnN0IHRlbnNvckxpc3QgPVxuICAgICAgICAgIHJlc2VydmUoZWxlbWVudFNoYXBlLCBlbGVtZW50RHR5cGUsIG51bUVsZW1lbnRzLCBtYXhOdW1FbGVtZW50cyk7XG4gICAgICBjb250ZXh0LmFkZFRlbnNvckxpc3QodGVuc29yTGlzdCk7XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JMaXN0R2F0aGVyJzoge1xuICAgICAgY29uc3QgZ2F0aGVySWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgZ2F0aGVySW5kaWNlcyA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW5kaWNlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBlbGVtZW50U2hhcGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnRTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBlbGVtZW50RHR5cGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnREVHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCB0ZW5zb3JMaXN0ID0gY29udGV4dC5nZXRUZW5zb3JMaXN0KGdhdGhlcklkLmlkKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5nYXRoZXIoZ2F0aGVySW5kaWNlcywgZWxlbWVudER0eXBlLCBlbGVtZW50U2hhcGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdFN0YWNrJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgZWxlbWVudER0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgY29uc3QgbnVtRWxlbWVudHMgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ251bUVsZW1lbnRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICBjb25zdCB0ZW5zb3JMaXN0ID0gY29udGV4dC5nZXRUZW5zb3JMaXN0KGlkVGVuc29yLmlkKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5zdGFjayhlbGVtZW50U2hhcGUsIGVsZW1lbnREdHlwZSwgbnVtRWxlbWVudHMpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdEZyb21UZW5zb3InOiB7XG4gICAgICBjb25zdCB0ZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgZWxlbWVudER0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IGZyb21UZW5zb3IodGVuc29yLCBlbGVtZW50U2hhcGUsIGVsZW1lbnREdHlwZSk7XG4gICAgICBjb250ZXh0LmFkZFRlbnNvckxpc3QodGVuc29yTGlzdCk7XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JMaXN0Q29uY2F0JzpcbiAgICBjYXNlICdUZW5zb3JMaXN0Q29uY2F0VjInOiB7XG4gICAgICBjb25zdCBjb25jYXRJZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yTGlzdElkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCB0ZW5zb3JMaXN0ID0gY29udGV4dC5nZXRUZW5zb3JMaXN0KGNvbmNhdElkLmlkKTtcbiAgICAgIGNvbnN0IGNvbmNhdER0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCBlbGVtZW50U2hhcGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnRTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QuY29uY2F0KGNvbmNhdER0eXBlLCBlbGVtZW50U2hhcGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdFB1c2hCYWNrJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3Qgd3JpdGVUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IGNvbnRleHQuZ2V0VGVuc29yTGlzdChpZFRlbnNvci5pZCk7XG4gICAgICB0ZW5zb3JMaXN0LnB1c2hCYWNrKHdyaXRlVGVuc29yKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5pZFRlbnNvcl07XG4gICAgfVxuICAgIGNhc2UgJ1RlbnNvckxpc3RQb3BCYWNrJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgZWxlbWVudERUeXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IGNvbnRleHQuZ2V0VGVuc29yTGlzdChpZFRlbnNvci5pZCk7XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QucG9wQmFjayhlbGVtZW50U2hhcGUsIGVsZW1lbnREVHlwZSldO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JMaXN0U3BsaXQnOiB7XG4gICAgICBjb25zdCBzcGxpdFRlbnNvciA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCBlbGVtZW50U2hhcGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnRTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBsZW5ndGhzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdsZW5ndGhzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcblxuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IHNwbGl0KHNwbGl0VGVuc29yLCBsZW5ndGhzLCBlbGVtZW50U2hhcGUpO1xuICAgICAgY29udGV4dC5hZGRUZW5zb3JMaXN0KHRlbnNvckxpc3QpO1xuICAgICAgcmV0dXJuIFt0ZW5zb3JMaXN0LmlkVGVuc29yXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdExlbmd0aCc6IHtcbiAgICAgIGNvbnN0IGlkVGVuc29yID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JMaXN0SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IHRlbnNvckxpc3QgPSBjb250ZXh0LmdldFRlbnNvckxpc3QoaWRUZW5zb3IuaWQpO1xuICAgICAgcmV0dXJuIFtzY2FsYXIodGVuc29yTGlzdC5zaXplKCksICdpbnQzMicpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdFJlc2l6ZSc6IHtcbiAgICAgIGNvbnN0IGlkVGVuc29yID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JMaXN0SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IHNpemUgPSBnZXRQYXJhbVZhbHVlKCdzaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG5cbiAgICAgIGNvbnN0IHNyY1RlbnNvckxpc3QgPSBjb250ZXh0LmdldFRlbnNvckxpc3QoaWRUZW5zb3IuaWQpO1xuICAgICAgY29uc3QgZGVzdFRlbnNvckxpc3QgPSBzcmNUZW5zb3JMaXN0LnJlc2l6ZShzaXplKTtcbiAgICAgIGNvbnRleHQuYWRkVGVuc29yTGlzdChkZXN0VGVuc29yTGlzdCk7XG4gICAgICByZXR1cm4gW2Rlc3RUZW5zb3JMaXN0LmlkVGVuc29yXTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdjb250cm9sJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getPadding, getParamValue } from './utils';\nfunction fusedConvAndDepthWiseParams(node, tensorMap, context) {\n const [extraOp, activationFunc] = getParamValue('fusedOps', node, tensorMap, context);\n const isBiasAdd = extraOp === 'biasadd';\n const noBiasAdd = !isBiasAdd;\n const isPrelu = activationFunc === 'prelu';\n const isBatchNorm = extraOp === 'fusedbatchnorm';\n const numArgs = getParamValue('numArgs', node, tensorMap, context);\n if (isBiasAdd) {\n if (isPrelu && numArgs !== 2) {\n throw new Error('FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu ' +\n 'must have two extra arguments: bias and alpha.');\n }\n if (!isPrelu && isBiasAdd && numArgs !== 1) {\n throw new Error('FusedConv2d and DepthwiseConv2d with BiasAdd must have ' +\n 'one extra argument: bias.');\n }\n }\n if (isBatchNorm) {\n throw new Error('FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported');\n }\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getPadding(node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n const dilations = getParamValue('dilations', node, tensorMap, context);\n let [biasArg, preluArg] = getParamValue('args', node, tensorMap, context);\n if (noBiasAdd) {\n preluArg = biasArg;\n biasArg = undefined;\n }\n const leakyreluAlpha = getParamValue('leakyreluAlpha', node, tensorMap, context);\n return {\n stride,\n pad,\n dataFormat,\n dilations,\n biasArg,\n preluArg,\n activationFunc,\n leakyreluAlpha\n };\n}\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Conv1D': {\n const stride = getParamValue('stride', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n const dilation = getParamValue('dilation', node, tensorMap, context);\n return [ops.conv1d(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), stride, pad, dataFormat, dilation)];\n }\n case 'Conv2D': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getPadding(node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n const dilations = getParamValue('dilations', node, tensorMap, context);\n return [ops.conv2d(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), [stride[1], stride[2]], pad, dataFormat, [dilations[1], dilations[2]])];\n }\n case '_FusedConv2D': {\n const { stride, pad, dataFormat, dilations, biasArg, preluArg, activationFunc, leakyreluAlpha } = fusedConvAndDepthWiseParams(node, tensorMap, context);\n return [ops.fused.conv2d({\n x: getParamValue('x', node, tensorMap, context),\n filter: getParamValue('filter', node, tensorMap, context),\n strides: [stride[1], stride[2]],\n pad: pad,\n dataFormat: dataFormat,\n dilations: [dilations[1], dilations[2]],\n bias: biasArg,\n activation: activationFunc,\n preluActivationWeights: preluArg,\n leakyreluAlpha\n })];\n }\n case 'FusedDepthwiseConv2dNative': {\n const { stride, pad, dataFormat, dilations, biasArg, preluArg, activationFunc, leakyreluAlpha, } = fusedConvAndDepthWiseParams(node, tensorMap, context);\n return [ops.fused.depthwiseConv2d({\n x: getParamValue('x', node, tensorMap, context),\n filter: getParamValue('filter', node, tensorMap, context),\n strides: [stride[1], stride[2]],\n pad: pad,\n dataFormat: dataFormat,\n dilations: [dilations[1], dilations[2]],\n bias: biasArg,\n activation: activationFunc,\n preluActivationWeights: preluArg,\n leakyreluAlpha\n })];\n }\n case 'Conv2DBackpropInput':\n case 'Conv2dTranspose': {\n const shape = getParamValue('outputShape', node, tensorMap, context);\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getPadding(node, tensorMap, context);\n return [ops.conv2dTranspose(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), shape, [stride[1], stride[2]], pad)];\n }\n case 'DepthwiseConv2dNative':\n case 'DepthwiseConv2d': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getPadding(node, tensorMap, context);\n const dilations = getParamValue('dilations', node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n return [ops.depthwiseConv2d(getParamValue('input', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), [stride[1], stride[2]], pad, dataFormat, [dilations[1], dilations[2]])];\n }\n case 'Conv3D': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n const dilations = getParamValue('dilations', node, tensorMap, context);\n return [ops.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]])];\n }\n case 'AvgPool': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n return [ops.avgPool(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2]], [stride[1], stride[2]], pad)];\n }\n case 'MaxPool': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n return [ops.maxPool(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2]], [stride[1], stride[2]], pad)];\n }\n case 'MaxPoolWithArgmax': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n const includeBatchInIndex = getParamValue('includeBatchInIndex', node, tensorMap, context);\n const { result, indexes } = ops.maxPoolWithArgmax(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2]], [stride[1], stride[2]], pad, includeBatchInIndex);\n return [result, indexes];\n }\n case 'AvgPool3D': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n return [ops.avgPool3d(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2], kernelSize[3]], [stride[1], stride[2], stride[3]], pad)];\n }\n case 'MaxPool3D': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n return [ops.maxPool3d(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2], kernelSize[3]], [stride[1], stride[2], stride[3]], pad)];\n }\n case 'Dilation2D': {\n const strides = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const dilations = getParamValue('dilations', node, tensorMap, context);\n // strides: [1, stride_height, stride_width, 1].\n const strideHeight = strides[1];\n const strideWidth = strides[2];\n // dilations: [1, dilation_height, dilation_width, 1].\n const dilationHeight = dilations[1];\n const dilationWidth = dilations[2];\n return [ops.dilation2d(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), [strideHeight, strideWidth], pad, [dilationHeight, dilationWidth], 'NHWC' /* dataFormat */)];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'convolution';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udm9sdXRpb25fZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvY29udm9sdXRpb25fZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFbEQsU0FBUywyQkFBMkIsQ0FDaEMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUI7SUFDbkUsTUFBTSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FDMUIsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYyxDQUFDO0lBRXRFLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDN0IsTUFBTSxPQUFPLEdBQUcsY0FBYyxLQUFLLE9BQU8sQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxPQUFPLEtBQUssZ0JBQWdCLENBQUM7SUFFakQsTUFBTSxPQUFPLEdBQ1IsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBWSxDQUFDO0lBQ25FLElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSSxPQUFPLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtnQkFDekQsZ0RBQWdELENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FDWCx5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T0FBTyxDQUFhLENBQUM7WUFDbkUsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNELE1BQU0sU0FBUyxHQUNYLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQztZQUVyRSxnREFBZ0Q7WUFDaEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUvQixzREFBc0Q7WUFDdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDbEIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDL0IsRUFDWixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzdELENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEdBQXVCLEVBQ3BELENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7U0FDaEU7UUFFRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7UmFuaywgVGVuc29yLCBUZW5zb3IzRCwgVGVuc29yNEQsIFRlbnNvcjVEfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhZGRpbmcsIGdldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5mdW5jdGlvbiBmdXNlZENvbnZBbmREZXB0aFdpc2VQYXJhbXMoXG4gICAgbm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgY29uc3QgW2V4dHJhT3AsIGFjdGl2YXRpb25GdW5jXSA9XG4gICAgICAoZ2V0UGFyYW1WYWx1ZSgnZnVzZWRPcHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZ1tdKTtcblxuICBjb25zdCBpc0JpYXNBZGQgPSBleHRyYU9wID09PSAnYmlhc2FkZCc7XG4gIGNvbnN0IG5vQmlhc0FkZCA9ICFpc0JpYXNBZGQ7XG4gIGNvbnN0IGlzUHJlbHUgPSBhY3RpdmF0aW9uRnVuYyA9PT0gJ3ByZWx1JztcbiAgY29uc3QgaXNCYXRjaE5vcm0gPSBleHRyYU9wID09PSAnZnVzZWRiYXRjaG5vcm0nO1xuXG4gIGNvbnN0IG51bUFyZ3MgPVxuICAgICAgKGdldFBhcmFtVmFsdWUoJ251bUFyZ3MnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcik7XG4gIGlmIChpc0JpYXNBZGQpIHtcbiAgICBpZiAoaXNQcmVsdSAmJiBudW1BcmdzICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Z1c2VkQ29udjJkIGFuZCBEZXB0aHdpc2VDb252MmQgd2l0aCBCaWFzQWRkIGFuZCBQcmVsdSAnICtcbiAgICAgICAgICAnbXVzdCBoYXZlIHR3byBleHRyYSBhcmd1bWVudHM6IGJpYXMgYW5kIGFscGhhLicpO1xuICAgIH1cbiAgICBpZiAoIWlzUHJlbHUgJiYgaXNCaWFzQWRkICYmIG51bUFyZ3MgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRnVzZWRDb252MmQgYW5kIERlcHRod2lzZUNvbnYyZCB3aXRoIEJpYXNBZGQgbXVzdCBoYXZlICcgK1xuICAgICAgICAgICdvbmUgZXh0cmEgYXJndW1lbnQ6IGJpYXMuJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc0JhdGNoTm9ybSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Z1c2VkQ29udjJkIGFuZCBEZXB0aHdpc2VDb252MmQgd2l0aCBGdXNlZEJhdGNoTm9ybSBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cbiAgY29uc3Qgc3RyaWRlID0gZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gIGNvbnN0IHBhZCA9IGdldFBhZGRpbmcobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgY29uc3QgZGF0YUZvcm1hdCA9XG4gICAgICAoZ2V0UGFyYW1WYWx1ZSgnZGF0YUZvcm1hdCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nKVxuICAgICAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBkaWxhdGlvbnMgPVxuICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGlsYXRpb25zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgbGV0IFtiaWFzQXJnLCBwcmVsdUFyZ10gPVxuICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXJncycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yW107XG4gIGlmIChub0JpYXNBZGQpIHtcbiAgICBwcmVsdUFyZyA9IGJpYXNBcmc7XG4gICAgYmlhc0FyZyA9IHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsZWFreXJlbHVBbHBoYSA9XG4gICAgICBnZXRQYXJhbVZhbHVlKCdsZWFreXJlbHVBbHBoYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuXG4gIHJldHVybiB7XG4gICAgc3RyaWRlLFxuICAgIHBhZCxcbiAgICBkYXRhRm9ybWF0LFxuICAgIGRpbGF0aW9ucyxcbiAgICBiaWFzQXJnLFxuICAgIHByZWx1QXJnLFxuICAgIGFjdGl2YXRpb25GdW5jLFxuICAgIGxlYWt5cmVsdUFscGhhXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgICBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCBvcHMgPSB0Zk9wcyk6IFRlbnNvcltdID0+IHtcbiAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICBjYXNlICdDb252MUQnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFyYW1WYWx1ZSgncGFkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBkYXRhRm9ybWF0ID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2RhdGFGb3JtYXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGRpbGF0aW9uID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGlsYXRpb24nLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5jb252MWQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWx0ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNELFxuICAgICAgICAgICAgICBzdHJpZGUsIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnLCBkYXRhRm9ybWF0IGFzICdOV0MnIHwgJ05DVycsXG4gICAgICAgICAgICAgIGRpbGF0aW9uKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ29udjJEJzoge1xuICAgICAgICAgIGNvbnN0IHN0cmlkZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0cmlkZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHBhZCA9IGdldFBhZGRpbmcobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBkYXRhRm9ybWF0ID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2RhdGFGb3JtYXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGRpbGF0aW9ucyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RpbGF0aW9ucycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgcmV0dXJuIFtvcHMuY29udjJkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IzRCB8XG4gICAgICAgICAgICAgICAgICBUZW5zb3I0RCxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZmlsdGVyJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I0RCxcbiAgICAgICAgICAgICAgW3N0cmlkZVsxXSwgc3RyaWRlWzJdXSwgcGFkIGFzICd2YWxpZCcgfCAnc2FtZScsXG4gICAgICAgICAgICAgIGRhdGFGb3JtYXQgYXMgJ05IV0MnIHwgJ05DSFcnLCBbZGlsYXRpb25zWzFdLCBkaWxhdGlvbnNbMl1dKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnX0Z1c2VkQ29udjJEJzoge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0cmlkZSxcbiAgICAgICAgICAgIHBhZCxcbiAgICAgICAgICAgIGRhdGFGb3JtYXQsXG4gICAgICAgICAgICBkaWxhdGlvbnMsXG4gICAgICAgICAgICBiaWFzQXJnLFxuICAgICAgICAgICAgcHJlbHVBcmcsXG4gICAgICAgICAgICBhY3RpdmF0aW9uRnVuYyxcbiAgICAgICAgICAgIGxlYWt5cmVsdUFscGhhXG4gICAgICAgICAgfSA9IGZ1c2VkQ29udkFuZERlcHRoV2lzZVBhcmFtcyhub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIFtvcHMuZnVzZWQuY29udjJkKHtcbiAgICAgICAgICAgIHg6IGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICBUZW5zb3I0RCxcbiAgICAgICAgICAgIGZpbHRlcjogZ2V0UGFyYW1WYWx1ZSgnZmlsdGVyJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgc3RyaWRlczogW3N0cmlkZVsxXSwgc3RyaWRlWzJdXSxcbiAgICAgICAgICAgIHBhZDogcGFkIGFzICd2YWxpZCcgfCAnc2FtZScsXG4gICAgICAgICAgICBkYXRhRm9ybWF0OiBkYXRhRm9ybWF0IGFzICdOSFdDJyB8ICdOQ0hXJyxcbiAgICAgICAgICAgIGRpbGF0aW9uczogW2RpbGF0aW9uc1sxXSwgZGlsYXRpb25zWzJdXSxcbiAgICAgICAgICAgIGJpYXM6IGJpYXNBcmcsXG4gICAgICAgICAgICBhY3RpdmF0aW9uOiBhY3RpdmF0aW9uRnVuYyBhcyB0Zk9wcy5mdXNlZC5BY3RpdmF0aW9uLFxuICAgICAgICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0czogcHJlbHVBcmcsXG4gICAgICAgICAgICBsZWFreXJlbHVBbHBoYVxuICAgICAgICAgIH0pXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ0Z1c2VkRGVwdGh3aXNlQ29udjJkTmF0aXZlJzoge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0cmlkZSxcbiAgICAgICAgICAgIHBhZCxcbiAgICAgICAgICAgIGRhdGFGb3JtYXQsXG4gICAgICAgICAgICBkaWxhdGlvbnMsXG4gICAgICAgICAgICBiaWFzQXJnLFxuICAgICAgICAgICAgcHJlbHVBcmcsXG4gICAgICAgICAgICBhY3RpdmF0aW9uRnVuYyxcbiAgICAgICAgICAgIGxlYWt5cmVsdUFscGhhLFxuICAgICAgICAgIH0gPSBmdXNlZENvbnZBbmREZXB0aFdpc2VQYXJhbXMobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLmZ1c2VkLmRlcHRod2lzZUNvbnYyZCh7XG4gICAgICAgICAgICB4OiBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IzRCB8XG4gICAgICAgICAgICAgICAgVGVuc29yNEQsXG4gICAgICAgICAgICBmaWx0ZXI6IGdldFBhcmFtVmFsdWUoJ2ZpbHRlcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICBUZW5zb3I0RCxcbiAgICAgICAgICAgIHN0cmlkZXM6IFtzdHJpZGVbMV0sIHN0cmlkZVsyXV0sXG4gICAgICAgICAgICBwYWQ6IHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnLFxuICAgICAgICAgICAgZGF0YUZvcm1hdDogZGF0YUZvcm1hdCBhcyAnTkhXQycgfCAnTkNIVycsXG4gICAgICAgICAgICBkaWxhdGlvbnM6IFtkaWxhdGlvbnNbMV0sIGRpbGF0aW9uc1syXV0sXG4gICAgICAgICAgICBiaWFzOiBiaWFzQXJnLFxuICAgICAgICAgICAgYWN0aXZhdGlvbjogYWN0aXZhdGlvbkZ1bmMgYXMgdGZPcHMuZnVzZWQuQWN0aXZhdGlvbixcbiAgICAgICAgICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHM6IHByZWx1QXJnLFxuICAgICAgICAgICAgbGVha3lyZWx1QWxwaGFcbiAgICAgICAgICB9KV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ29udjJEQmFja3Byb3BJbnB1dCc6XG4gICAgICAgIGNhc2UgJ0NvbnYyZFRyYW5zcG9zZSc6IHtcbiAgICAgICAgICBjb25zdCBzaGFwZSA9IGdldFBhcmFtVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dFNoYXBlJywgbm9kZSwgdGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQpIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8XG4gICAgICAgICAgICAgIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICAgIGNvbnN0IHN0cmlkZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0cmlkZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHBhZCA9IGdldFBhZGRpbmcobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICByZXR1cm4gW29wcy5jb252MmRUcmFuc3Bvc2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWx0ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjRELFxuICAgICAgICAgICAgICBzaGFwZSwgW3N0cmlkZVsxXSwgc3RyaWRlWzJdXSwgcGFkIGFzICd2YWxpZCcgfCAnc2FtZScpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdEZXB0aHdpc2VDb252MmROYXRpdmUnOlxuICAgICAgICBjYXNlICdEZXB0aHdpc2VDb252MmQnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFkZGluZyhub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgIGNvbnN0IGRpbGF0aW9ucyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RpbGF0aW9ucycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgZGF0YUZvcm1hdCA9XG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCdkYXRhRm9ybWF0Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLmRlcHRod2lzZUNvbnYyZChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW5wdXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWx0ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjRELFxuICAgICAgICAgICAgICBbc3RyaWRlWzFdLCBzdHJpZGVbMl1dLCBwYWQgYXMgJ3ZhbGlkJyB8ICdzYW1lJyxcbiAgICAgICAgICAgICAgZGF0YUZvcm1hdCBhcyAnTkhXQycgfCAnTkNIVycsIFtkaWxhdGlvbnNbMV0sIGRpbGF0aW9uc1syXV0pXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdDb252M0QnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFyYW1WYWx1ZSgncGFkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBkYXRhRm9ybWF0ID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2RhdGFGb3JtYXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGRpbGF0aW9ucyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RpbGF0aW9ucycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgcmV0dXJuIFtvcHMuY29udjNkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I0RCB8XG4gICAgICAgICAgICAgICAgICBUZW5zb3I8UmFuay5SNT4sXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2ZpbHRlcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjxSYW5rLlI1PixcbiAgICAgICAgICAgICAgW3N0cmlkZVsxXSwgc3RyaWRlWzJdLCBzdHJpZGVbM11dLCBwYWQgYXMgJ3ZhbGlkJyB8ICdzYW1lJyxcbiAgICAgICAgICAgICAgZGF0YUZvcm1hdCBhcyAnTkRIV0MnIHwgJ05DREhXJyxcbiAgICAgICAgICAgICAgW2RpbGF0aW9uc1sxXSwgZGlsYXRpb25zWzJdLCBkaWxhdGlvbnNbM11dKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQXZnUG9vbCc6IHtcbiAgICAgICAgICBjb25zdCBzdHJpZGUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdHJpZGVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBwYWQgPSBnZXRQYXJhbVZhbHVlKCdwYWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgIGNvbnN0IGtlcm5lbFNpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdrZXJuZWxTaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLmF2Z1Bvb2woXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBba2VybmVsU2l6ZVsxXSwga2VybmVsU2l6ZVsyXV0sIFtzdHJpZGVbMV0sIHN0cmlkZVsyXV0sXG4gICAgICAgICAgICAgIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTWF4UG9vbCc6IHtcbiAgICAgICAgICBjb25zdCBzdHJpZGUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdHJpZGVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBwYWQgPSBnZXRQYXJhbVZhbHVlKCdwYWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgIGNvbnN0IGtlcm5lbFNpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdrZXJuZWxTaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLm1heFBvb2woXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBba2VybmVsU2l6ZVsxXSwga2VybmVsU2l6ZVsyXV0sIFtzdHJpZGVbMV0sIHN0cmlkZVsyXV0sXG4gICAgICAgICAgICAgIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTWF4UG9vbFdpdGhBcmdtYXgnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFyYW1WYWx1ZSgncGFkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxTaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VybmVsU2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgaW5jbHVkZUJhdGNoSW5JbmRleCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luY2x1ZGVCYXRjaEluSW5kZXgnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIGJvb2xlYW47XG4gICAgICAgICAgY29uc3Qge3Jlc3VsdCwgaW5kZXhlc30gPSBvcHMubWF4UG9vbFdpdGhBcmdtYXgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjRELFxuICAgICAgICAgICAgICBba2VybmVsU2l6ZVsxXSwga2VybmVsU2l6ZVsyXV0sIFtzdHJpZGVbMV0sIHN0cmlkZVsyXV0sXG4gICAgICAgICAgICAgIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnLCBpbmNsdWRlQmF0Y2hJbkluZGV4KTtcbiAgICAgICAgICByZXR1cm4gW3Jlc3VsdCwgaW5kZXhlc107XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQXZnUG9vbDNEJzoge1xuICAgICAgICAgIGNvbnN0IHN0cmlkZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0cmlkZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHBhZCA9IGdldFBhcmFtVmFsdWUoJ3BhZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICAgICAgY29uc3Qga2VybmVsU2l6ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2tlcm5lbFNpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuXG4gICAgICAgICAgcmV0dXJuIFtvcHMuYXZnUG9vbDNkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I1RCxcbiAgICAgICAgICAgICAgW2tlcm5lbFNpemVbMV0sIGtlcm5lbFNpemVbMl0sIGtlcm5lbFNpemVbM11dLFxuICAgICAgICAgICAgICBbc3RyaWRlWzFdLCBzdHJpZGVbMl0sIHN0cmlkZVszXV0sIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnKV07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdNYXhQb29sM0QnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFyYW1WYWx1ZSgncGFkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxTaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VybmVsU2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG5cbiAgICAgICAgICByZXR1cm4gW29wcy5tYXhQb29sM2QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjVELFxuICAgICAgICAgICAgICBba2VybmVsU2l6ZVsxXSwga2VybmVsU2l6ZVsyXSwga2VybmVsU2l6ZVszXV0sXG4gICAgICAgICAgICAgIFtzdHJpZGVbMV0sIHN0cmlkZVsyXSwgc3RyaWRlWzNdXSwgcGFkIGFzICd2YWxpZCcgfCAnc2FtZScpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ0RpbGF0aW9uMkQnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0cmlkZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHBhZCA9IGdldFBhcmFtVmFsdWUoJ3BhZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICAgICAgY29uc3QgZGlsYXRpb25zID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGlsYXRpb25zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcblxuICAgICAgICAgIC8vIHN0cmlkZXM6IFsxLCBzdHJpZGVfaGVpZ2h0LCBzdHJpZGVfd2lkdGgsIDFdLlxuICAgICAgICAgIGNvbnN0IHN0cmlkZUhlaWdodCA9IHN0cmlkZXNbMV07XG4gICAgICAgICAgY29uc3Qgc3RyaWRlV2lkdGggPSBzdHJpZGVzWzJdO1xuXG4gICAgICAgICAgLy8gZGlsYXRpb25zOiBbMSwgZGlsYXRpb25faGVpZ2h0LCBkaWxhdGlvbl93aWR0aCwgMV0uXG4gICAgICAgICAgY29uc3QgZGlsYXRpb25IZWlnaHQgPSBkaWxhdGlvbnNbMV07XG4gICAgICAgICAgY29uc3QgZGlsYXRpb25XaWR0aCA9IGRpbGF0aW9uc1syXTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLmRpbGF0aW9uMmQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWx0ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNELFxuICAgICAgICAgICAgICBbc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aF0sIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnLFxuICAgICAgICAgICAgICBbZGlsYXRpb25IZWlnaHQsIGRpbGF0aW9uV2lkdGhdLCAnTkhXQycgLyogZGF0YUZvcm1hdCAqLyldO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdjb252b2x1dGlvbic7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nfunction nmsParams(node, tensorMap, context) {\n const boxes = getParamValue('boxes', node, tensorMap, context);\n const scores = getParamValue('scores', node, tensorMap, context);\n const maxOutputSize = getParamValue('maxOutputSize', node, tensorMap, context);\n const iouThreshold = getParamValue('iouThreshold', node, tensorMap, context);\n const scoreThreshold = getParamValue('scoreThreshold', node, tensorMap, context);\n const softNmsSigma = getParamValue('softNmsSigma', node, tensorMap, context);\n return {\n boxes,\n scores,\n maxOutputSize,\n iouThreshold,\n scoreThreshold,\n softNmsSigma\n };\n}\nexport const executeOp = async (node, tensorMap, context, resourceManager, ops = tfOps) => {\n switch (node.op) {\n case 'NonMaxSuppressionV5': {\n const { boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma } = nmsParams(node, tensorMap, context);\n const result = await ops.image.nonMaxSuppressionWithScoreAsync(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n return [result.selectedIndices, result.selectedScores];\n }\n case 'NonMaxSuppressionV4': {\n const { boxes, scores, maxOutputSize, iouThreshold, scoreThreshold } = nmsParams(node, tensorMap, context);\n const padToMaxOutputSize = getParamValue('padToMaxOutputSize', node, tensorMap, context);\n const result = await ops.image.nonMaxSuppressionPaddedAsync(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize);\n return [result.selectedIndices, result.validOutputs];\n }\n case 'NonMaxSuppressionV3':\n case 'NonMaxSuppressionV2': {\n const { boxes, scores, maxOutputSize, iouThreshold, scoreThreshold } = nmsParams(node, tensorMap, context);\n return [await ops.image.nonMaxSuppressionAsync(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold)];\n }\n case 'Where': {\n const condition = ops.cast(getParamValue('condition', node, tensorMap, context), 'bool');\n const result = [await ops.whereAsync(condition)];\n condition.dispose();\n return result;\n }\n case 'ListDiff': {\n return ops.setdiff1dAsync(getParamValue('x', node, tensorMap, context), getParamValue('y', node, tensorMap, context));\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'dynamic';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pY19leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9keW5hbWljX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTzFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsU0FBUyxTQUFTLENBQ2QsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUI7SUFDbkUsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO0lBQ3pFLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztJQUMzRSxNQUFNLGFBQWEsR0FDZixhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7SUFDdkUsTUFBTSxZQUFZLEdBQ2QsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO0lBQ3RFLE1BQU0sY0FBYyxHQUNoQixhQUFhLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztJQUN4RSxNQUFNLFlBQVksR0FDZCxhQUFhLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7SUFFdEUsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO1FBQ04sYUFBYTtRQUNiLFlBQVk7UUFDWixjQUFjO1FBQ2QsWUFBWTtLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxD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eXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQgeyBSZXNvdXJjZU1hbmFnZXIgfSBmcm9tICcuLi8uLi9leGVjdXRvci9yZXNvdXJjZV9tYW5hZ2VyJztcbmltcG9ydCB7SW50ZXJuYWxPcEFzeW5jRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gbm1zUGFyYW1zKFxuICAgIG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSB7XG4gIGNvbnN0IGJveGVzID0gZ2V0UGFyYW1WYWx1ZSgnYm94ZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgY29uc3Qgc2NvcmVzID0gZ2V0UGFyYW1WYWx1ZSgnc2NvcmVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gIGNvbnN0IG1heE91dHB1dFNpemUgPVxuICAgICAgZ2V0UGFyYW1WYWx1ZSgnbWF4T3V0cHV0U2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICBjb25zdCBpb3VUaHJlc2hvbGQgPVxuICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW91VGhyZXNob2xkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gIGNvbnN0IHNjb3JlVGhyZXNob2xkID1cbiAgICAgIGdldFBhcmFtVmFsdWUoJ3Njb3JlVGhyZXNob2xkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gIGNvbnN0IHNvZnRObXNTaWdtYSA9XG4gICAgICBnZXRQYXJhbVZhbHVlKCdzb2Z0Tm1zU2lnbWEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcblxuICByZXR1cm4ge1xuICAgIGJveGVzLFxuICAgIHNjb3JlcyxcbiAgICBtYXhPdXRwdXRTaXplLFxuICAgIGlvdVRocmVzaG9sZCxcbiAgICBzY29yZVRocmVzaG9sZCxcbiAgICBzb2Z0Tm1zU2lnbWFcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEFzeW5jRXhlY3V0b3IgPSBhc3luYyhcbiAgICBub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcixcbiAgICBvcHMgPSB0Zk9wcyk6IFByb21pc2U8VGVuc29yW10+ID0+IHtcbiAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgY2FzZSAnTm9uTWF4U3VwcHJlc3Npb25WNSc6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYm94ZXMsXG4gICAgICAgIHNjb3JlcyxcbiAgICAgICAgbWF4T3V0cHV0U2l6ZSxcbiAgICAgICAgaW91VGhyZXNob2xkLFxuICAgICAgICBzY29yZVRocmVzaG9sZCxcbiAgICAgICAgc29mdE5tc1NpZ21hXG4gICAgICB9ID0gbm1zUGFyYW1zKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wcy5pbWFnZS5ub25NYXhTdXBwcmVzc2lvbldpdGhTY29yZUFzeW5jKFxuICAgICAgICAgIGJveGVzIGFzIFRlbnNvcjJELCBzY29yZXMgYXMgVGVuc29yMUQsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCxcbiAgICAgICAgICBzY29yZVRocmVzaG9sZCwgc29mdE5tc1NpZ21hKTtcblxuICAgICAgcmV0dXJuIFtyZXN1bHQuc2VsZWN0ZWRJbmRpY2VzLCByZXN1bHQuc2VsZWN0ZWRTY29yZXNdO1xuICAgIH1cbiAgICBjYXNlICdOb25NYXhTdXBwcmVzc2lvblY0Jzoge1xuICAgICAgY29uc3Qge2JveGVzLCBzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGR9ID1cbiAgICAgICAgICBubXNQYXJhbXMobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcblxuICAgICAgY29uc3QgcGFkVG9NYXhPdXRwdXRTaXplID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdwYWRUb01heE91dHB1dFNpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgYm9vbGVhbjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BzLmltYWdlLm5vbk1heFN1cHByZXNzaW9uUGFkZGVkQXN5bmMoXG4gICAgICAgICAgYm94ZXMgYXMgVGVuc29yMkQsIHNjb3JlcyBhcyBUZW5zb3IxRCwgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLFxuICAgICAgICAgIHNjb3JlVGhyZXNob2xkLCBwYWRUb01heE91dHB1dFNpemUpO1xuXG4gICAgICByZXR1cm4gW3Jlc3VsdC5zZWxlY3RlZEluZGljZXMsIHJlc3VsdC52YWxpZE91dHB1dHNdO1xuICAgIH1cbiAgICBjYXNlICdOb25NYXhTdXBwcmVzc2lvblYzJzpcbiAgICBjYXNlICdOb25NYXhTdXBwcmVzc2lvblYyJzoge1xuICAgICAgY29uc3Qge2JveGVzLCBzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGR9ID1cbiAgICAgICAgICBubXNQYXJhbXMobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFthd2FpdCBvcHMuaW1hZ2Uubm9uTWF4U3VwcHJlc3Npb25Bc3luYyhcbiAgICAgICAgICBib3hlcyBhcyBUZW5zb3IyRCwgc2NvcmVzIGFzIFRlbnNvcjFELCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsXG4gICAgICAgICAgc2NvcmVUaHJlc2hvbGQpXTtcbiAgICB9XG4gICAgY2FzZSAnV2hlcmUnOiB7XG4gICAgICBjb25zdCBjb25kaXRpb24gPSBvcHMuY2FzdChcbiAgICAgICAgICAoZ2V0UGFyYW1WYWx1ZSgnY29uZGl0aW9uJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpLFxuICAgICAgICAgICdib29sJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBbYXdhaXQgb3BzLndoZXJlQXN5bmMoY29uZGl0aW9uKV07XG4gICAgICBjb25kaXRpb24uZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY2FzZSAnTGlzdERpZmYnOiB7XG4gICAgICByZXR1cm4gb3BzLnNldGRpZmYxZEFzeW5jKFxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd5Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2R5bmFtaWMnO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { keep, scalar, stack, tidy, unstack, util } from '@tensorflow/tfjs-core';\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\n/**\n * Hashtable contains a set of tensors, which can be accessed by key.\n */\nexport class HashTable {\n get id() {\n return this.handle.id;\n }\n /**\n * Constructor of HashTable. Creates a hash table.\n *\n * @param keyDType `dtype` of the table keys.\n * @param valueDType `dtype` of the table values.\n */\n constructor(keyDType, valueDType) {\n this.keyDType = keyDType;\n this.valueDType = valueDType;\n this.handle = scalar(0);\n // tslint:disable-next-line: no-any\n this.tensorMap = new Map();\n keep(this.handle);\n }\n /**\n * Dispose the tensors and handle and clear the hashtable.\n */\n clearAndClose() {\n this.tensorMap.forEach(value => value.dispose());\n this.tensorMap.clear();\n this.handle.dispose();\n }\n /**\n * The number of items in the hash table.\n */\n size() {\n return this.tensorMap.size;\n }\n /**\n * The number of items in the hash table as a rank-0 tensor.\n */\n tensorSize() {\n return tfOps.scalar(this.size(), 'int32');\n }\n /**\n * Replaces the contents of the table with the specified keys and values.\n * @param keys Keys to store in the hashtable.\n * @param values Values to store in the hashtable.\n */\n async import(keys, values) {\n this.checkKeyAndValueTensor(keys, values);\n // We only store the primitive values of the keys, this allows lookup\n // to be O(1).\n const $keys = await keys.data();\n // Clear the hashTable before inserting new values.\n this.tensorMap.forEach(value => value.dispose());\n this.tensorMap.clear();\n return tidy(() => {\n const $values = unstack(values);\n const keysLength = $keys.length;\n const valuesLength = $values.length;\n util.assert(keysLength === valuesLength, () => `The number of elements doesn't match, keys has ` +\n `${keysLength} elements, the values has ${valuesLength} ` +\n `elements.`);\n for (let i = 0; i < keysLength; i++) {\n const key = $keys[i];\n const value = $values[i];\n keep(value);\n this.tensorMap.set(key, value);\n }\n return this.handle;\n });\n }\n /**\n * Looks up keys in a hash table, outputs the corresponding values.\n *\n * Performs batch lookups, for every element in the key tensor, `find`\n * stacks the corresponding value into the return tensor.\n *\n * If an element is not present in the table, the given `defaultValue` is\n * used.\n *\n * @param keys Keys to look up. Must have the same type as the keys of the\n * table.\n * @param defaultValue The scalar `defaultValue` is the value output for keys\n * not present in the table. It must also be of the same type as the\n * table values.\n */\n async find(keys, defaultValue) {\n this.checkKeyAndValueTensor(keys, defaultValue);\n const $keys = await keys.data();\n return tidy(() => {\n const result = [];\n for (let i = 0; i < $keys.length; i++) {\n const key = $keys[i];\n const value = this.findWithDefault(key, defaultValue);\n result.push(value);\n }\n return stack(result);\n });\n }\n // tslint:disable-next-line: no-any\n findWithDefault(key, defaultValue) {\n const result = this.tensorMap.get(key);\n return result != null ? result : defaultValue;\n }\n checkKeyAndValueTensor(key, value) {\n if (key.dtype !== this.keyDType) {\n throw new Error(`Expect key dtype ${this.keyDType}, but got ` +\n `${key.dtype}`);\n }\n if (value.dtype !== this.valueDType) {\n throw new Error(`Expect value dtype ${this.valueDType}, but got ` +\n `${value.dtype}`);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF90YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9leGVjdXRvci9oYXNoX3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBVyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pHLGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBRTFFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFNcEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFxQixRQUFrQixFQUFXLFVBQW9CO1FBQWpELGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVyxlQUFVLEdBQVYsVUFBVSxDQUFVO1FBQ3BFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFFeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNGLE9BQU8s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O0lBRU8sc0JBQXNCLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDdkQsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDWCxvQkFBb0IsSUFBSSxDQUFDLFFBQVEsWUFBWTtnQkFDN0MsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNyQjtRQUVELElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ1gsc0JBQXNCLElBQUksQ0FBQyxVQUFVLFlBQVk7Z0JBQ2pELEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkI7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0RhdGFUeXBlLCBrZWVwLCBzY2FsYXIsIHN0YWNrLCBUZW5zb3IsIHRpZHksIHVuc3RhY2ssIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG4vKipcbiAqIEhhc2h0YWJsZSBjb250YWlucyBhIHNldCBvZiB0ZW5zb3JzLCB3aGljaCBjYW4gYmUgYWNjZXNzZWQgYnkga2V5LlxuICovXG5leHBvcnQgY2xhc3MgSGFzaFRhYmxlIHtcbiAgcmVhZG9ubHkgaGFuZGxlOiBUZW5zb3I7XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1hbnlcbiAgcHJpdmF0ZSB0ZW5zb3JNYXA6IE1hcDxhbnksIFRlbnNvcj47XG5cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBvZiBIYXNoVGFibGUuIENyZWF0ZXMgYSBoYXNoIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5RFR5cGUgYGR0eXBlYCBvZiB0aGUgdGFibGUga2V5cy5cbiAgICogQHBhcmFtIHZhbHVlRFR5cGUgYGR0eXBlYCBvZiB0aGUgdGFibGUgdmFsdWVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IocmVhZG9ubHkga2V5RFR5cGU6IERhdGFUeXBlLCByZWFkb25seSB2YWx1ZURUeXBlOiBEYXRhVHlwZSkge1xuICAgIHRoaXMuaGFuZGxlID0gc2NhbGFyKDApO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gICAgdGhpcy50ZW5zb3JNYXAgPSBuZXcgTWFwPGFueSwgVGVuc29yPigpO1xuXG4gICAga2VlcCh0aGlzLmhhbmRsZSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSB0aGUgdGVuc29ycyBhbmQgaGFuZGxlIGFuZCBjbGVhciB0aGUgaGFzaHRhYmxlLlxuICAgKi9cbiAgY2xlYXJBbmRDbG9zZSgpIHtcbiAgICB0aGlzLnRlbnNvck1hcC5mb3JFYWNoKHZhbHVlID0+IHZhbHVlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy50ZW5zb3JNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmhhbmRsZS5kaXNwb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgaGFzaCB0YWJsZS5cbiAgICovXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW5zb3JNYXAuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBoYXNoIHRhYmxlIGFzIGEgcmFuay0wIHRlbnNvci5cbiAgICovXG4gIHRlbnNvclNpemUoKTogVGVuc29yIHtcbiAgICByZXR1cm4gdGZPcHMuc2NhbGFyKHRoaXMuc2l6ZSgpLCAnaW50MzInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIHdpdGggdGhlIHNwZWNpZmllZCBrZXlzIGFuZCB2YWx1ZXMuXG4gICAqIEBwYXJhbSBrZXlzIEtleXMgdG8gc3RvcmUgaW4gdGhlIGhhc2h0YWJsZS5cbiAgICogQHBhcmFtIHZhbHVlcyBWYWx1ZXMgdG8gc3RvcmUgaW4gdGhlIGhhc2h0YWJsZS5cbiAgICovXG4gIGFzeW5jIGltcG9ydChrZXlzOiBUZW5zb3IsIHZhbHVlczogVGVuc29yKTogUHJvbWlzZTxUZW5zb3I+IHtcbiAgICB0aGlzLmNoZWNrS2V5QW5kVmFsdWVUZW5zb3Ioa2V5cywgdmFsdWVzKTtcblxuICAgIC8vIFdlIG9ubHkgc3RvcmUgdGhlIHByaW1pdGl2ZSB2YWx1ZXMgb2YgdGhlIGtleXMsIHRoaXMgYWxsb3dzIGxvb2t1cFxuICAgIC8vIHRvIGJlIE8oMSkuXG4gICAgY29uc3QgJGtleXMgPSBhd2FpdCBrZXlzLmRhdGEoKTtcblxuICAgIC8vIENsZWFyIHRoZSBoYXNoVGFibGUgYmVmb3JlIGluc2VydGluZyBuZXcgdmFsdWVzLlxuICAgIHRoaXMudGVuc29yTWFwLmZvckVhY2godmFsdWUgPT4gdmFsdWUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLnRlbnNvck1hcC5jbGVhcigpO1xuXG4gICAgcmV0dXJuIHRpZHkoKCkgPT4ge1xuICAgICAgY29uc3QgJHZhbHVlcyA9IHVuc3RhY2sodmFsdWVzKTtcblxuICAgICAgY29uc3Qga2V5c0xlbmd0aCA9ICRrZXlzLmxlbmd0aDtcbiAgICAgIGNvbnN0IHZhbHVlc0xlbmd0aCA9ICR2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICBrZXlzTGVuZ3RoID09PSB2YWx1ZXNMZW5ndGgsXG4gICAgICAgICAgKCkgPT4gYFRoZSBudW1iZXIgb2YgZWxlbWVudHMgZG9lc24ndCBtYXRjaCwga2V5cyBoYXMgYCArXG4gICAgICAgICAgICAgIGAke2tleXNMZW5ndGh9IGVsZW1lbnRzLCB0aGUgdmFsdWVzIGhhcyAke3ZhbHVlc0xlbmd0aH0gYCArXG4gICAgICAgICAgICAgIGBlbGVtZW50cy5gKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gJGtleXNbaV07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gJHZhbHVlc1tpXTtcblxuICAgICAgICBrZWVwKHZhbHVlKTtcbiAgICAgICAgdGhpcy50ZW5zb3JNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGU7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAga2V5cyBpbiBhIGhhc2ggdGFibGUsIG91dHB1dHMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKlxuICAgKiBQZXJmb3JtcyBiYXRjaCBsb29rdXBzLCBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUga2V5IHRlbnNvciwgYGZpbmRgXG4gICAqIHN0YWNrcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbnRvIHRoZSByZXR1cm4gdGVuc29yLlxuICAgKlxuICAgKiBJZiBhbiBlbGVtZW50IGlzIG5vdCBwcmVzZW50IGluIHRoZSB0YWJsZSwgdGhlIGdpdmVuIGBkZWZhdWx0VmFsdWVgIGlzXG4gICAqIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlzIEtleXMgdG8gbG9vayB1cC4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGtleXMgb2YgdGhlXG4gICAqICAgICB0YWJsZS5cbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgc2NhbGFyIGBkZWZhdWx0VmFsdWVgIGlzIHRoZSB2YWx1ZSBvdXRwdXQgZm9yIGtleXNcbiAgICogICAgIG5vdCBwcmVzZW50IGluIHRoZSB0YWJsZS4gSXQgbXVzdCBhbHNvIGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlXG4gICAqICAgICB0YWJsZSB2YWx1ZXMuXG4gICAqL1xuICBhc3luYyBmaW5kKGtleXM6IFRlbnNvciwgZGVmYXVsdFZhbHVlOiBUZW5zb3IpOiBQcm9taXNlPFRlbnNvcj4ge1xuICAgIHRoaXMuY2hlY2tLZXlBbmRWYWx1ZVRlbnNvcihrZXlzLCBkZWZhdWx0VmFsdWUpO1xuXG4gICAgY29uc3QgJGtleXMgPSBhd2FpdCBrZXlzLmRhdGEoKTtcblxuICAgIHJldHVybiB0aWR5KCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogVGVuc29yW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAka2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSAka2V5c1tpXTtcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZmluZFdpdGhEZWZhdWx0KGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhY2socmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gIHByaXZhdGUgZmluZFdpdGhEZWZhdWx0KGtleTogYW55LCBkZWZhdWx0VmFsdWU6IFRlbnNvcik6IFRlbnNvciB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50ZW5zb3JNYXAuZ2V0KGtleSk7XG5cbiAgICByZXR1cm4gcmVzdWx0ICE9IG51bGwgPyByZXN1bHQgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrS2V5QW5kVmFsdWVUZW5zb3Ioa2V5OiBUZW5zb3IsIHZhbHVlOiBUZW5zb3IpIHtcbiAgICBpZiAoa2V5LmR0eXBlICE9PSB0aGlzLmtleURUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdCBrZXkgZHR5cGUgJHt0aGlzLmtleURUeXBlfSwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgJHtrZXkuZHR5cGV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLmR0eXBlICE9PSB0aGlzLnZhbHVlRFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0IHZhbHVlIGR0eXBlICR7dGhpcy52YWx1ZURUeXBlfSwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgJHt2YWx1ZS5kdHlwZX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as tfc from '@tensorflow/tfjs-core';\nimport { NodeValueImpl } from './custom_op/node_value_impl';\nimport { getRegisteredOp } from './custom_op/register';\nimport * as arithmetic from './executors/arithmetic_executor';\nimport * as basicMath from './executors/basic_math_executor';\nimport * as control from './executors/control_executor';\nimport * as convolution from './executors/convolution_executor';\nimport * as creation from './executors/creation_executor';\nimport * as dynamic from './executors/dynamic_executor';\nimport * as evaluation from './executors/evaluation_executor';\nimport * as graph from './executors/graph_executor';\nimport * as hashTable from './executors/hash_table_executor';\nimport * as image from './executors/image_executor';\nimport * as logical from './executors/logical_executor';\nimport * as matrices from './executors/matrices_executor';\nimport * as normalization from './executors/normalization_executor';\nimport * as ragged from './executors/ragged_executor';\nimport * as reduction from './executors/reduction_executor';\nimport * as sliceJoin from './executors/slice_join_executor';\nimport * as sparse from './executors/sparse_executor';\nimport * as spectral from './executors/spectral_executor';\nimport * as string from './executors/string_executor';\nimport * as transformation from './executors/transformation_executor';\n/**\n * Executes the op defined by the node object.\n * @param node\n * @param tensorMap contains tensors for executed nodes and weights\n * @param context contains tensors and information for running the current node.\n * @param resourceManager Optional. Contains global resources of the model.\n */\nexport function executeOp(node, tensorMap, context, resourceManager, tidy = tfc.tidy) {\n const value = ((node, tensorMap, context) => {\n switch (node.category) {\n case 'arithmetic':\n return tidy(() => arithmetic.executeOp(node, tensorMap, context));\n case 'basic_math':\n return tidy(() => basicMath.executeOp(node, tensorMap, context));\n case 'control':\n return control.executeOp(node, tensorMap, context);\n case 'convolution':\n return tidy(() => convolution.executeOp(node, tensorMap, context));\n case 'creation':\n return tidy(() => creation.executeOp(node, tensorMap, context));\n case 'dynamic':\n return dynamic.executeOp(node, tensorMap, context);\n case 'evaluation':\n return tidy(() => evaluation.executeOp(node, tensorMap, context));\n case 'image':\n return tidy(() => image.executeOp(node, tensorMap, context));\n case 'graph':\n return tidy(() => graph.executeOp(node, tensorMap, context));\n case 'logical':\n return tidy(() => logical.executeOp(node, tensorMap, context));\n case 'matrices':\n return tidy(() => matrices.executeOp(node, tensorMap, context));\n case 'normalization':\n return tidy(() => normalization.executeOp(node, tensorMap, context));\n case 'ragged':\n return tidy(() => ragged.executeOp(node, tensorMap, context));\n case 'reduction':\n return tidy(() => reduction.executeOp(node, tensorMap, context));\n case 'slice_join':\n return tidy(() => sliceJoin.executeOp(node, tensorMap, context));\n case 'sparse':\n return tidy(() => sparse.executeOp(node, tensorMap, context));\n case 'spectral':\n return tidy(() => spectral.executeOp(node, tensorMap, context));\n case 'string':\n return tidy(() => string.executeOp(node, tensorMap, context));\n case 'transformation':\n return tidy(() => transformation.executeOp(node, tensorMap, context));\n case 'hash_table':\n return hashTable.executeOp(node, tensorMap, context, resourceManager);\n case 'custom':\n const opMapper = getRegisteredOp(node.op);\n if (opMapper && opMapper.customExecutor) {\n return opMapper.customExecutor(new NodeValueImpl(node, tensorMap, context));\n }\n else {\n throw TypeError(`Custom op ${node.op} is not registered.`);\n }\n default:\n throw TypeError(`Unknown op '${node.op}'. File an issue at ` +\n `https://github.com/tensorflow/tfjs/issues so we can add it` +\n `, or register a custom execution with tf.registerOp()`);\n }\n })(node, tensorMap, context);\n if (tfc.util.isPromise(value)) {\n return value.then((data) => [].concat(data));\n }\n return [].concat(value);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvb3BlcmF0aW9uX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUM7QUFNN0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sS0FBSyxTQUFTLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxLQUFLLE9BQU8sTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEtBQUssV0FBVyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sS0FBSyxRQUFRLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxLQUFLLE9BQU8sTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sS0FBSyxLQUFLLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxLQUFLLFNBQVMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEtBQUssS0FBSyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxPQUFPLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxLQUFLLFFBQVEsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRCxPQUFPLEtBQUssYUFBYSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxNQUFNLE1BQU0sNkJBQTZCLENBQUM7QUFDdEQsT0FBTyxLQUFLLFNBQVMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEtBQUssU0FBUyxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sS0FBSyxNQUFNLE1BQU0sNkJBQTZCLENBQUM7QUFDdEQsT0FBTyxLQUFLLFFBQVEsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRCxPQUFPLEtBQUssTUFBTSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sS0FBSyxjQUFjLE1BQU0scUNBQXFDLENBQUM7QUFHdEU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FDckIsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsZUFBaUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUk7SUFFcEQsTUFBTSxLQUFLLEdBQ1AsQ0FBQyxDQUFDLElBQVUsRUFBRSxTQUEwQixFQUFFLE9BQXlCLEVBQUUsRUFBRTtRQUNyRSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDckIsS0FBSyxZQUFZO2dCQUNmLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEtBQUssWUFBWTtnQkFDZixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNuRSxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckQsS0FBSyxhQUFhO2dCQUNoQixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNyRSxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEUsS0FBSyxTQUFTO2dCQUNaLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELEtBQUssWUFBWTtnQkFDZixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwRSxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDL0QsS0FBSyxPQUFPO2dCQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQy9ELEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNqRSxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEUsS0FBSyxlQUFlO2dCQUNsQixPQUFPLElBQUksQ0FDUCxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMvRCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEUsS0FBSyxXQUFXO2dCQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ25FLEtBQUssWUFBWTtnQkFDZixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNuRSxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEUsS0FBSyxVQUFVO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoRSxLQUFLLGdCQUFnQjtnQkFDbkIsT0FBTyxJQUFJLENBQ1AsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEUsS0FBSyxZQUFZO2dCQUNmLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FDdEIsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDakQsS0FBSyxRQUFRO2dCQUNYLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxjQUFjLEVBQUU7b0JBQ3ZDLE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FDMUIsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUNsRDtxQkFBTTtvQkFDTCxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7aUJBQzVEO1lBQ0g7Z0JBQ0UsTUFBTSxTQUFTLENBQ1gsZUFBZSxJQUFJLENBQUMsRUFBRSxzQkFBc0I7b0JBQzVDLDREQUE0RDtvQkFDNUQsdURBQXVELENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUM5QztJQUNELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgKiBhcyB0ZmMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge1Jlc291cmNlTWFuYWdlcn0gZnJvbSAnLi4vZXhlY3V0b3IvcmVzb3VyY2VfbWFuYWdlcic7XG5cbmltcG9ydCB7Tm9kZVZhbHVlSW1wbH0gZnJvbSAnLi9jdXN0b21fb3Avbm9kZV92YWx1ZV9pbXBsJztcbmltcG9ydCB7Z2V0UmVnaXN0ZXJlZE9wfSBmcm9tICcuL2N1c3RvbV9vcC9yZWdpc3Rlcic7XG5pbXBvcnQgKiBhcyBhcml0aG1ldGljIGZyb20gJy4vZXhlY3V0b3JzL2FyaXRobWV0aWNfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgYmFzaWNNYXRoIGZyb20gJy4vZXhlY3V0b3JzL2Jhc2ljX21hdGhfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgY29udHJvbCBmcm9tICcuL2V4ZWN1dG9ycy9jb250cm9sX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIGNvbnZvbHV0aW9uIGZyb20gJy4vZXhlY3V0b3JzL2NvbnZvbHV0aW9uX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIGNyZWF0aW9uIGZyb20gJy4vZXhlY3V0b3JzL2NyZWF0aW9uX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIGR5bmFtaWMgZnJvbSAnLi9leGVjdXRvcnMvZHluYW1pY19leGVjdXRvcic7XG5pbXBvcnQgKiBhcyBldmFsdWF0aW9uIGZyb20gJy4vZXhlY3V0b3JzL2V2YWx1YXRpb25fZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgZ3JhcGggZnJvbSAnLi9leGVjdXRvcnMvZ3JhcGhfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgaGFzaFRhYmxlIGZyb20gJy4vZXhlY3V0b3JzL2hhc2hfdGFibGVfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgaW1hZ2UgZnJvbSAnLi9leGVjdXRvcnMvaW1hZ2VfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgbG9naWNhbCBmcm9tICcuL2V4ZWN1dG9ycy9sb2dpY2FsX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIG1hdHJpY2VzIGZyb20gJy4vZXhlY3V0b3JzL21hdHJpY2VzX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIG5vcm1hbGl6YXRpb24gZnJvbSAnLi9leGVjdXRvcnMvbm9ybWFsaXphdGlvbl9leGVjdXRvcic7XG5pbXBvcnQgKiBhcyByYWdnZWQgZnJvbSAnLi9leGVjdXRvcnMvcmFnZ2VkX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIHJlZHVjdGlvbiBmcm9tICcuL2V4ZWN1dG9ycy9yZWR1Y3Rpb25fZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgc2xpY2VKb2luIGZyb20gJy4vZXhlY3V0b3JzL3NsaWNlX2pvaW5fZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgc3BhcnNlIGZyb20gJy4vZXhlY3V0b3JzL3NwYXJzZV9leGVjdXRvcic7XG5pbXBvcnQgKiBhcyBzcGVjdHJhbCBmcm9tICcuL2V4ZWN1dG9ycy9zcGVjdHJhbF9leGVjdXRvcic7XG5pbXBvcnQgKiBhcyBzdHJpbmcgZnJvbSAnLi9leGVjdXRvcnMvc3RyaW5nX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIHRyYW5zZm9ybWF0aW9uIGZyb20gJy4vZXhlY3V0b3JzL3RyYW5zZm9ybWF0aW9uX2V4ZWN1dG9yJztcbmltcG9ydCB7Tm9kZX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIG9wIGRlZmluZWQgYnkgdGhlIG5vZGUgb2JqZWN0LlxuICogQHBhcmFtIG5vZGVcbiAqIEBwYXJhbSB0ZW5zb3JNYXAgY29udGFpbnMgdGVuc29ycyBmb3IgZXhlY3V0ZWQgbm9kZXMgYW5kIHdlaWdodHNcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRhaW5zIHRlbnNvcnMgYW5kIGluZm9ybWF0aW9uIGZvciBydW5uaW5nIHRoZSBjdXJyZW50IG5vZGUuXG4gKiBAcGFyYW0gcmVzb3VyY2VNYW5hZ2VyIE9wdGlvbmFsLiBDb250YWlucyBnbG9iYWwgcmVzb3VyY2VzIG9mIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVPcChcbiAgICBub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICByZXNvdXJjZU1hbmFnZXI/OiBSZXNvdXJjZU1hbmFnZXIsIHRpZHkgPSB0ZmMudGlkeSk6IHRmYy5UZW5zb3JbXXxcbiAgICBQcm9taXNlPHRmYy5UZW5zb3JbXT4ge1xuICBjb25zdCB2YWx1ZSA9XG4gICAgICAoKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSA9PiB7XG4gICAgICAgIHN3aXRjaCAobm9kZS5jYXRlZ29yeSkge1xuICAgICAgICAgIGNhc2UgJ2FyaXRobWV0aWMnOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gYXJpdGhtZXRpYy5leGVjdXRlT3Aobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSk7XG4gICAgICAgICAgY2FzZSAnYmFzaWNfbWF0aCc6XG4gICAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiBiYXNpY01hdGguZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ2NvbnRyb2wnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICAgICAgY2FzZSAnY29udm9sdXRpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gY29udm9sdXRpb24uZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ2NyZWF0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IGNyZWF0aW9uLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdkeW5hbWljJzpcbiAgICAgICAgICAgIHJldHVybiBkeW5hbWljLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgIGNhc2UgJ2V2YWx1YXRpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gZXZhbHVhdGlvbi5leGVjdXRlT3Aobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSk7XG4gICAgICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gaW1hZ2UuZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ2dyYXBoJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IGdyYXBoLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IGxvZ2ljYWwuZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ21hdHJpY2VzJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IG1hdHJpY2VzLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdub3JtYWxpemF0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KFxuICAgICAgICAgICAgICAgICgpID0+IG5vcm1hbGl6YXRpb24uZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ3JhZ2dlZCc6XG4gICAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiByYWdnZWQuZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ3JlZHVjdGlvbic6XG4gICAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiByZWR1Y3Rpb24uZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ3NsaWNlX2pvaW4nOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gc2xpY2VKb2luLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdzcGFyc2UnOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gc3BhcnNlLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdzcGVjdHJhbCc6XG4gICAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiBzcGVjdHJhbC5leGVjdXRlT3Aobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSk7XG4gICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IHN0cmluZy5leGVjdXRlT3Aobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSk7XG4gICAgICAgICAgY2FzZSAndHJhbnNmb3JtYXRpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoXG4gICAgICAgICAgICAgICAgKCkgPT4gdHJhbnNmb3JtYXRpb24uZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ2hhc2hfdGFibGUnOlxuICAgICAgICAgICAgcmV0dXJuIGhhc2hUYWJsZS5leGVjdXRlT3AoXG4gICAgICAgICAgICAgICAgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0LCByZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgICAgICBjb25zdCBvcE1hcHBlciA9IGdldFJlZ2lzdGVyZWRPcChub2RlLm9wKTtcbiAgICAgICAgICAgIGlmIChvcE1hcHBlciAmJiBvcE1hcHBlci5jdXN0b21FeGVjdXRvcikge1xuICAgICAgICAgICAgICByZXR1cm4gb3BNYXBwZXIuY3VzdG9tRXhlY3V0b3IoXG4gICAgICAgICAgICAgICAgICBuZXcgTm9kZVZhbHVlSW1wbChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgQ3VzdG9tIG9wICR7bm9kZS5vcH0gaXMgbm90IHJlZ2lzdGVyZWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgVW5rbm93biBvcCAnJHtub2RlLm9wfScuIEZpbGUgYW4gaXNzdWUgYXQgYCArXG4gICAgICAgICAgICAgICAgYGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMvaXNzdWVzIHNvIHdlIGNhbiBhZGQgaXRgICtcbiAgICAgICAgICAgICAgICBgLCBvciByZWdpc3RlciBhIGN1c3RvbSBleGVjdXRpb24gd2l0aCB0Zi5yZWdpc3Rlck9wKClgKTtcbiAgICAgICAgfVxuICAgICAgfSkobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgaWYgKHRmYy51dGlsLmlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudGhlbigoZGF0YSkgPT4gW10uY29uY2F0KGRhdGEpKTtcbiAgfVxuICByZXR1cm4gW10uY29uY2F0KHZhbHVlKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'BiasAdd':\n case 'AddV2':\n case 'Add': {\n return [ops.add(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'AddN': {\n return [ops.addN(getParamValue('tensors', node, tensorMap, context))];\n }\n case 'FloorMod':\n case 'Mod':\n return [ops.mod(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n case 'Mul':\n return [ops.mul(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n case 'RealDiv':\n case 'Div': {\n return [ops.div(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'DivNoNan': {\n return [ops.divNoNan(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'FloorDiv': {\n return [ops.floorDiv(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Sub': {\n return [ops.sub(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Minimum': {\n return [ops.minimum(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Maximum': {\n return [ops.maximum(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Pow': {\n return [ops.pow(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'SquaredDifference': {\n return [ops.squaredDifference(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'arithmetic';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpdGhtZXRpY19leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9hcml0aG1ldGljX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUN0QyxPQUF5QixFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQVksRUFBRTtJQUNuRCxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNWLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVksRUFDeEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWixhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQ1gsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FB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SUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnQmlhc0FkZCc6XG4gICAgICAgIGNhc2UgJ0FkZFYyJzpcbiAgICAgICAgY2FzZSAnQWRkJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmFkZChcbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciksXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0FkZE4nOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYWRkTigoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcnMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcltdKSldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0Zsb29yTW9kJzpcbiAgICAgICAgY2FzZSAnTW9kJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5tb2QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ011bCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubXVsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdSZWFsRGl2JzpcbiAgICAgICAgY2FzZSAnRGl2Jzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmRpdihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdEaXZOb05hbic6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5kaXZOb05hbihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdGbG9vckRpdic6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5mbG9vckRpdihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTdWInOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc3ViKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ01pbmltdW0nOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubWluaW11bShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdNYXhpbXVtJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLm1heGltdW0oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUG93Jzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnBvdyhcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTcXVhcmVkRGlmZmVyZW5jZSc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5zcXVhcmVkRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2FyaXRobWV0aWMnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue, getTensor } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Abs':\n case 'ComplexAbs':\n return [ops.abs(getParamValue('x', node, tensorMap, context))];\n case 'Acos':\n return [ops.acos(getParamValue('x', node, tensorMap, context))];\n case 'Acosh':\n return [ops.acosh(getParamValue('x', node, tensorMap, context))];\n case 'Asin':\n return [ops.asin(getParamValue('x', node, tensorMap, context))];\n case 'Asinh':\n return [ops.asinh(getParamValue('x', node, tensorMap, context))];\n case 'Atan':\n return [ops.atan(getParamValue('x', node, tensorMap, context))];\n case 'Atan2':\n return [ops.atan2(getParamValue('x', node, tensorMap, context), getParamValue('y', node, tensorMap, context))];\n case 'Atanh':\n return [ops.atanh(getParamValue('x', node, tensorMap, context))];\n case 'Ceil':\n return [ops.ceil(getParamValue('x', node, tensorMap, context))];\n case 'Complex':\n return [ops.complex(getParamValue('real', node, tensorMap, context), getParamValue('imag', node, tensorMap, context))];\n case 'Cos':\n return [ops.cos(getParamValue('x', node, tensorMap, context))];\n case 'Cosh':\n return [ops.cosh(getParamValue('x', node, tensorMap, context))];\n case 'Elu':\n return [ops.elu(getParamValue('x', node, tensorMap, context))];\n case 'Erf':\n return [ops.erf(getParamValue('x', node, tensorMap, context))];\n case 'Exp':\n return [ops.exp(getParamValue('x', node, tensorMap, context))];\n case 'Expm1': {\n return [ops.expm1(getParamValue('x', node, tensorMap, context))];\n }\n case 'Floor':\n return [ops.floor(getParamValue('x', node, tensorMap, context))];\n case 'Log':\n return [ops.log(getParamValue('x', node, tensorMap, context))];\n case 'Log1p': {\n return [ops.log1p(getParamValue('x', node, tensorMap, context))];\n }\n case 'Imag':\n return [ops.imag(getParamValue('x', node, tensorMap, context))];\n case 'Neg':\n return [ops.neg(getParamValue('x', node, tensorMap, context))];\n case 'Reciprocal': {\n return [ops.reciprocal(getParamValue('x', node, tensorMap, context))];\n }\n case 'Real':\n return [ops.real(getParamValue('x', node, tensorMap, context))];\n case 'Relu':\n return [ops.relu(getParamValue('x', node, tensorMap, context))];\n case 'Round': {\n return [ops.round(getParamValue('x', node, tensorMap, context))];\n }\n case 'Selu':\n return [ops.selu(getParamValue('x', node, tensorMap, context))];\n case 'Sigmoid':\n return [ops.sigmoid(getParamValue('x', node, tensorMap, context))];\n case 'Sin':\n return [ops.sin(getParamValue('x', node, tensorMap, context))];\n case 'Sign': {\n return [ops.sign(getParamValue('x', node, tensorMap, context))];\n }\n case 'Sinh': {\n return [ops.sinh(getParamValue('x', node, tensorMap, context))];\n }\n case 'Softplus': {\n return [ops.softplus(getParamValue('x', node, tensorMap, context))];\n }\n case 'Sqrt': {\n return [ops.sqrt(getParamValue('x', node, tensorMap, context))];\n }\n case 'Square': {\n return [ops.square(getParamValue('x', node, tensorMap, context))];\n }\n case 'Tanh': {\n return [ops.tanh(getParamValue('x', node, tensorMap, context))];\n }\n case 'Tan':\n return [ops.tan(getParamValue('x', node, tensorMap, context))];\n case 'ClipByValue':\n return [ops.clipByValue(getParamValue('x', node, tensorMap, context), getParamValue('clipValueMin', node, tensorMap, context), getParamValue('clipValueMax', node, tensorMap, context))];\n case 'Relu6':\n return [ops.relu6(getParamValue('x', node, tensorMap, context))];\n case 'Rsqrt':\n return [ops.rsqrt(getTensor(node.inputNames[0], tensorMap, context))];\n case 'LeakyRelu':\n return [ops.leakyRelu(getParamValue('x', node, tensorMap, context), getParamValue('alpha', node, tensorMap, context))];\n case 'Prelu':\n return [ops.prelu(getParamValue('x', node, tensorMap, context), getParamValue('alpha', node, tensorMap, context))];\n case 'IsNan':\n return [ops.isNaN(getTensor(node.inputNames[0], tensorMap, context))];\n case 'IsInf':\n return [ops.isInf(getTensor(node.inputNames[0], tensorMap, context))];\n case 'IsFinite':\n return [ops.isFinite(getTensor(node.inputNames[0], tensorMap, context))];\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'basic_math';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNfbWF0aF9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9iYXNpY19tYXRoX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFBRSxPQUF5QixFQUNqRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDeEIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLFlBQVk7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FDWCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1FBQy9ELEtBQUssTUFBTTtZQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNaLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsS0FBSyxPQUFPO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ2IsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztRQUMvRCxLQUFLLE1BQU07WUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFX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QUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ25FLEtBQUssT0FBTztZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNiLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztRQUNuRSxLQUFLLE9BQU87WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssT0FBTztZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsS0FBSyxVQUFVO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQ7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlLCBnZXRUZW5zb3J9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnQWJzJzpcbiAgICAgICAgY2FzZSAnQ29tcGxleEFicyc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYWJzKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnQWNvcyc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYWNvcyhcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0Fjb3NoJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5hY29zaChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0FzaW4nOlxuICAgICAgICAgIHJldHVybiBbb3BzLmFzaW4oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdBc2luaCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYXNpbmgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdBdGFuJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5hdGFuKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnQXRhbjInOlxuICAgICAgICAgIHJldHVybiBbb3BzLmF0YW4yKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3knLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdBdGFuaCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYXRhbmgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdDZWlsJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5jZWlsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuY29tcGxleChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncmVhbCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbWFnJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnQ29zJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5jb3MoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdDb3NoJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5jb3NoKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnRWx1JzpcbiAgICAgICAgICByZXR1cm4gW29wcy5lbHUoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdFcmYnOlxuICAgICAgICAgIHJldHVybiBbb3BzLmVyZihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0V4cCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuZXhwKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnRXhwbTEnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuZXhwbTEoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0Zsb29yJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5mbG9vcihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0xvZyc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9nKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnTG9nMXAnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9nMXAoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0ltYWcnOlxuICAgICAgICAgIHJldHVybiBbb3BzLmltYWcoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuXG4gICAgICAgIGNhc2UgJ05lZyc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubmVnKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnUmVjaXByb2NhbCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5yZWNpcHJvY2FsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdSZWFsJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5yZWFsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnUmVsdSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmVsdShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ1JvdW5kJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnJvdW5kKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTZWx1JzpcbiAgICAgICAgICByZXR1cm4gW29wcy5zZWx1KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnU2lnbW9pZCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc2lnbW9pZChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ1Npbic6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc2luKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnU2lnbic6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5zaWduKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTaW5oJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnNpbmgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NvZnRwbHVzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnNvZnRwbHVzKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTcXJ0Jzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnNxcnQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NxdWFyZSc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5zcXVhcmUoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1RhbmgnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMudGFuaChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnVGFuJzpcbiAgICAgICAgICByZXR1cm4gW29wcy50YW4oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdDbGlwQnlWYWx1ZSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuY2xpcEJ5VmFsdWUoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY2xpcFZhbHVlTWluJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2NsaXBWYWx1ZU1heCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIG51bWJlcildO1xuICAgICAgICBjYXNlICdSZWx1Nic6XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmVsdTYoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdSc3FydCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMucnNxcnQoZ2V0VGVuc29yKG5vZGUuaW5wdXROYW1lc1swXSwgdGVuc29yTWFwLCBjb250ZXh0KSldO1xuICAgICAgICBjYXNlICdMZWFreVJlbHUnOlxuICAgICAgICAgIHJldHVybiBbb3BzLmxlYWt5UmVsdShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhbHBoYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyKV07XG4gICAgICAgIGNhc2UgJ1ByZWx1JzpcbiAgICAgICAgICByZXR1cm4gW29wcy5wcmVsdShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhbHBoYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0lzTmFuJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5pc05hTihnZXRUZW5zb3Iobm9kZS5pbnB1dE5hbWVzWzBdLCB0ZW5zb3JNYXAsIGNvbnRleHQpKV07XG4gICAgICAgIGNhc2UgJ0lzSW5mJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5pc0luZihnZXRUZW5zb3Iobm9kZS5pbnB1dE5hbWVzWzBdLCB0ZW5zb3JNYXAsIGNvbnRleHQpKV07XG4gICAgICAgIGNhc2UgJ0lzRmluaXRlJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5pc0Zpbml0ZShcbiAgICAgICAgICAgICAgZ2V0VGVuc29yKG5vZGUuaW5wdXROYW1lc1swXSwgdGVuc29yTWFwLCBjb250ZXh0KSldO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2Jhc2ljX21hdGgnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Fill': {\n const shape = getParamValue('shape', node, tensorMap, context);\n const dtype = getParamValue('dtype', node, tensorMap, context);\n const value = getParamValue('value', node, tensorMap, context);\n return [ops.fill(shape, value, dtype)];\n }\n case 'LinSpace': {\n const start = getParamValue('start', node, tensorMap, context);\n const stop = getParamValue('stop', node, tensorMap, context);\n const num = getParamValue('num', node, tensorMap, context);\n return [ops.linspace(start, stop, num)];\n }\n case 'Multinomial': {\n const logits = getParamValue('logits', node, tensorMap, context);\n const numSamples = getParamValue('numSamples', node, tensorMap, context);\n const seed = getParamValue('seed', node, tensorMap, context);\n return [ops.multinomial(logits, numSamples, seed)];\n }\n case 'OneHot': {\n const indices = getParamValue('indices', node, tensorMap, context);\n const depth = getParamValue('depth', node, tensorMap, context);\n const onValue = getParamValue('onValue', node, tensorMap, context);\n const offValue = getParamValue('offValue', node, tensorMap, context);\n const dtype = getParamValue('dtype', node, tensorMap, context);\n return [ops.oneHot(indices, depth, onValue, offValue, dtype)];\n }\n case 'Ones': {\n return [ops.ones(getParamValue('shape', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context))];\n }\n case 'OnesLike': {\n return [ops.onesLike(getParamValue('x', node, tensorMap, context))];\n }\n case 'RandomStandardNormal': {\n return [ops.randomStandardNormal(getParamValue('shape', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context), getParamValue('seed', node, tensorMap, context))];\n }\n case 'RandomUniform': {\n return [ops.randomUniform(\n // tslint:disable-next-line:no-any\n getParamValue('shape', node, tensorMap, context), getParamValue('minval', node, tensorMap, context), getParamValue('maxval', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context))];\n }\n case 'RandomUniformInt': {\n return [ops.randomUniformInt(getParamValue('shape', node, tensorMap, context), getParamValue('minval', node, tensorMap, context), getParamValue('maxval', node, tensorMap, context), getParamValue('seed', node, tensorMap, context))];\n }\n case 'Range': {\n const start = getParamValue('start', node, tensorMap, context);\n const stop = getParamValue('stop', node, tensorMap, context);\n const step = getParamValue('step', node, tensorMap, context);\n return [ops.range(start, stop, step, getParamValue('dtype', node, tensorMap, context))];\n }\n case 'TruncatedNormal': {\n const shape = getParamValue('shape', node, tensorMap, context);\n const mean = getParamValue('mean', node, tensorMap, context);\n const stdDev = getParamValue('stdDev', node, tensorMap, context);\n const seed = getParamValue('seed', node, tensorMap, context);\n return [ops.truncatedNormal(shape, mean, stdDev, getParamValue('dtype', node, tensorMap, context), seed)];\n }\n case 'Zeros': {\n return [ops.zeros(getParamValue('shape', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context))];\n }\n case 'ZerosLike': {\n return [ops.zerosLike(getParamValue('x', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'creation';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRpb25fZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvY3JlYXRpb25fZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ3hCLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxNQUFNLEtBQUssR0FDUCxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLENBQUM7WUFDakUsTUFBTSxLQUFLLEdBQ1AsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxDQUFDO1lBQ2pFLE1BQU0sS0FBSyxHQUNQLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDeEM7UUFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxLQUFLLEdBQ1AsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQy9ELE1BQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxF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bGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIFRlbnNvciwgVGVuc29yMUR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SW50ZXJuYWxPcEV4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0UGFyYW1WYWx1ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgICBvcHMgPSB0Zk9wcyk6IFRlbnNvcltdID0+IHtcbiAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICBjYXNlICdGaWxsJzoge1xuICAgICAgICAgIGNvbnN0IHNoYXBlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IGR0eXBlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndmFsdWUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5maWxsKHNoYXBlLCB2YWx1ZSwgZHR5cGUpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMaW5TcGFjZSc6IHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0YXJ0Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3Qgc3RvcCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0b3AnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBudW0gPSBnZXRQYXJhbVZhbHVlKCdudW0nLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5saW5zcGFjZShzdGFydCwgc3RvcCwgbnVtKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTXVsdGlub21pYWwnOiB7XG4gICAgICAgICAgY29uc3QgbG9naXRzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbG9naXRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRDtcbiAgICAgICAgICBjb25zdCBudW1TYW1wbGVzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbnVtU2FtcGxlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHNlZWQgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZWVkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubXVsdGlub21pYWwobG9naXRzLCBudW1TYW1wbGVzLCBzZWVkKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnT25lSG90Jzoge1xuICAgICAgICAgIGNvbnN0IGluZGljZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRDtcbiAgICAgICAgICBjb25zdCBkZXB0aCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlcHRoJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3Qgb25WYWx1ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ29uVmFsdWUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBvZmZWYWx1ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ29mZlZhbHVlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZHR5cGUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICAgICAgcmV0dXJuIFtvcHMub25lSG90KGluZGljZXMsIGRlcHRoLCBvblZhbHVlLCBvZmZWYWx1ZSwgZHR5cGUpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdPbmVzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLm9uZXMoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXSxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnT25lc0xpa2UnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMub25lc0xpa2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JhbmRvbVN0YW5kYXJkTm9ybWFsJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnJhbmRvbVN0YW5kYXJkTm9ybWFsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10sXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2R0eXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyAnZmxvYXQzMicgfFxuICAgICAgICAgICAgICAgICAgJ2ludDMyJyxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2VlZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUmFuZG9tVW5pZm9ybSc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5yYW5kb21Vbmlmb3JtKFxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBhbnksXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ21pbnZhbCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdtYXh2YWwnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUmFuZG9tVW5pZm9ybUludCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5yYW5kb21Vbmlmb3JtSW50KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10sXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ21pbnZhbCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdtYXh2YWwnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2VlZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUmFuZ2UnOiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdGFydCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHN0b3AgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdG9wJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3Qgc3RlcCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0ZXAnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5yYW5nZShcbiAgICAgICAgICAgICAgc3RhcnQsIHN0b3AsIHN0ZXAsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2R0eXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyAnZmxvYXQzMicgfFxuICAgICAgICAgICAgICAgICAgJ2ludDMyJyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1RydW5jYXRlZE5vcm1hbCc6IHtcbiAgICAgICAgICBjb25zdCBzaGFwZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBtZWFuID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbWVhbicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHN0ZERldiA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0ZERldicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHNlZWQgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZWVkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgcmV0dXJuIFtvcHMudHJ1bmNhdGVkTm9ybWFsKFxuICAgICAgICAgICAgICBzaGFwZSwgbWVhbiwgc3RkRGV2LFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgJ2Zsb2F0MzInIHxcbiAgICAgICAgICAgICAgICAgICdpbnQzMicsXG4gICAgICAgICAgICAgIHNlZWQpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdaZXJvcyc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy56ZXJvcyhcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGUpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdaZXJvc0xpa2UnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuemVyb3NMaWtlKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2NyZWF0aW9uJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'LowerBound': {\n const sortedSequence = getParamValue('sortedSequence', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n return [ops.lowerBound(sortedSequence, values)];\n }\n case 'TopKV2': {\n const x = getParamValue('x', node, tensorMap, context);\n const k = getParamValue('k', node, tensorMap, context);\n const sorted = getParamValue('sorted', node, tensorMap, context);\n const result = ops.topk(x, k, sorted);\n return [result.values, result.indices];\n }\n case 'UpperBound': {\n const sortedSequence = getParamValue('sortedSequence', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n return [ops.upperBound(sortedSequence, values)];\n }\n case 'Unique': {\n const x = getParamValue('x', node, tensorMap, context);\n const result = ops.unique(x);\n return [result.values, result.indices];\n }\n case 'UniqueV2': {\n const x = getParamValue('x', node, tensorMap, context);\n const axis = getParamValue('axis', node, tensorMap, context);\n const result = ops.unique(x, axis);\n return [result.values, result.indices];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'evaluation';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbl9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9ldmFsdWF0aW9uX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUFFLE9BQXlCLEVBQ2pFLEdBQUcsR0FBRyxLQUFLLEVBQ0MsRUFBRTtJQUNULFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssWUFBWSxDQUFDLENBQUM7WUFDakIsTUFBTSxjQUFjLEdBQ2hCLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDbEQsQ0FBQztZQUNYLE1BQU0sTUFBTSxHQUNSLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNqRDtRQUNELEtBQUssUUFBUSxDQUFDLENBQUM7WUFDYixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDakUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ2pFLE1BQU0sTUFBTSxHQUNSLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVksQ0FBQztZQUNqRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQztZQUNqQixNQUFNLGNBQWMsR0FDaEIsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUNsRCxDQUFDO1lBQ1gsTUFBTSxNQUFNLEdBQ1IsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQztZQUNiLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNqRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4QztRQUNELEtBQUssVUFBVSxDQUFDLENBQUM7WUFDZixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQ04sYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQzlELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4QztRQUNEO1lBQ0UsTUFBTSxTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDO0FBRVYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SW50ZXJuYWxPcEV4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0UGFyYW1WYWx1ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgICBvcHMgPSB0Zk9wcyk6XG4gICAgICAgIFRlbnNvcltdID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgICAgIGNhc2UgJ0xvd2VyQm91bmQnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNvcnRlZFNlcXVlbmNlID1cbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NvcnRlZFNlcXVlbmNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndmFsdWVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgICAgIHJldHVybiBbb3BzLmxvd2VyQm91bmQoc29ydGVkU2VxdWVuY2UsIHZhbHVlcyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVG9wS1YyJzoge1xuICAgICAgICAgICAgICBjb25zdCB4ID0gZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCBrID0gZ2V0UGFyYW1WYWx1ZSgnaycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICBjb25zdCBzb3J0ZWQgPVxuICAgICAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc29ydGVkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHMudG9wayh4LCBrLCBzb3J0ZWQpO1xuICAgICAgICAgICAgICByZXR1cm4gW3Jlc3VsdC52YWx1ZXMsIHJlc3VsdC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1VwcGVyQm91bmQnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNvcnRlZFNlcXVlbmNlID1cbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NvcnRlZFNlcXVlbmNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndmFsdWVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgICAgIHJldHVybiBbb3BzLnVwcGVyQm91bmQoc29ydGVkU2VxdWVuY2UsIHZhbHVlcyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVW5pcXVlJzoge1xuICAgICAgICAgICAgICBjb25zdCB4ID0gZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHMudW5pcXVlKHgpO1xuICAgICAgICAgICAgICByZXR1cm4gW3Jlc3VsdC52YWx1ZXMsIHJlc3VsdC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1VuaXF1ZVYyJzoge1xuICAgICAgICAgICAgICBjb25zdCB4ID0gZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3BzLnVuaXF1ZSh4LCBheGlzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtyZXN1bHQudmFsdWVzLCByZXN1bHQuaW5kaWNlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2V2YWx1YXRpb24nO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'ResizeBilinear': {\n const images = getParamValue('images', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n const alignCorners = getParamValue('alignCorners', node, tensorMap, context);\n const halfPixelCenters = getParamValue('halfPixelCenters', node, tensorMap, context);\n return [ops.image.resizeBilinear(images, [size[0], size[1]], alignCorners, halfPixelCenters)];\n }\n case 'ResizeNearestNeighbor': {\n const images = getParamValue('images', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n const alignCorners = getParamValue('alignCorners', node, tensorMap, context);\n const halfPixelCenters = getParamValue('halfPixelCenters', node, tensorMap, context);\n return [ops.image.resizeNearestNeighbor(images, [size[0], size[1]], alignCorners, halfPixelCenters)];\n }\n case 'CropAndResize': {\n const image = getParamValue('image', node, tensorMap, context);\n const boxes = getParamValue('boxes', node, tensorMap, context);\n const boxInd = getParamValue('boxInd', node, tensorMap, context);\n const cropSize = getParamValue('cropSize', node, tensorMap, context);\n const method = getParamValue('method', node, tensorMap, context);\n const extrapolationValue = getParamValue('extrapolationValue', node, tensorMap, context);\n return [ops.image.cropAndResize(image, boxes, boxInd, cropSize, method, extrapolationValue)];\n }\n case 'ImageProjectiveTransformV3': {\n const images = getParamValue('images', node, tensorMap, context);\n const transforms = getParamValue('transforms', node, tensorMap, context);\n const outputShape = getParamValue('outputShape', node, tensorMap, context);\n const fillValue = getParamValue('fillValue', node, tensorMap, context);\n const interpolation = getParamValue('interpolation', node, tensorMap, context);\n const fillMode = getParamValue('fillMode', node, tensorMap, context);\n return [ops.image.transform(images, transforms, interpolation.toLowerCase(), fillMode.toLowerCase(), fillValue, outputShape)];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'image';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvaW1hZ2VfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQ3RDLE9BQXlCLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ25ELFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztZQUNyQixNQUFNLE1BQU0sR0FDUixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDaEUsTUFBTSxJQUFJLEdBQ04sYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxDQUFDO1lBQ2hFLE1BQU0sWUFBWSxHQUNkLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQy9DLENBQUM7WUFDWixNQUFNLGdCQUFnQixHQUNsQixhQUFhLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ25ELENBQUM7WUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQzVCLE1BQTZCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUMvRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7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QUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRCwgVGVuc29yMkQsIFRlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ1Jlc2l6ZUJpbGluZWFyJzoge1xuICAgICAgICAgIGNvbnN0IGltYWdlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2ltYWdlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IHNpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBhbGlnbkNvcm5lcnMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhbGlnbkNvcm5lcnMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIGJvb2xlYW47XG4gICAgICAgICAgY29uc3QgaGFsZlBpeGVsQ2VudGVycyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2hhbGZQaXhlbENlbnRlcnMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIGJvb2xlYW47XG4gICAgICAgICAgcmV0dXJuIFtvcHMuaW1hZ2UucmVzaXplQmlsaW5lYXIoXG4gICAgICAgICAgICAgIGltYWdlcyBhcyBUZW5zb3IzRCB8IFRlbnNvcjRELCBbc2l6ZVswXSwgc2l6ZVsxXV0sIGFsaWduQ29ybmVycyxcbiAgICAgICAgICAgICAgaGFsZlBpeGVsQ2VudGVycyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1Jlc2l6ZU5lYXJlc3ROZWlnaGJvcic6IHtcbiAgICAgICAgICBjb25zdCBpbWFnZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbWFnZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCBzaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgYWxpZ25Db3JuZXJzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYWxpZ25Db3JuZXJzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICBib29sZWFuO1xuICAgICAgICAgIGNvbnN0IGhhbGZQaXhlbENlbnRlcnMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdoYWxmUGl4ZWxDZW50ZXJzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLmltYWdlLnJlc2l6ZU5lYXJlc3ROZWlnaGJvcihcbiAgICAgICAgICAgICAgaW1hZ2VzIGFzIFRlbnNvcjNEIHwgVGVuc29yNEQsIFtzaXplWzBdLCBzaXplWzFdXSwgYWxpZ25Db3JuZXJzLFxuICAgICAgICAgICAgICBoYWxmUGl4ZWxDZW50ZXJzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ3JvcEFuZFJlc2l6ZSc6IHtcbiAgICAgICAgICBjb25zdCBpbWFnZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2ltYWdlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgYm94ZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdib3hlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IGJveEluZCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2JveEluZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IGNyb3BTaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY3JvcFNpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ21ldGhvZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nO1xuICAgICAgICAgIGNvbnN0IGV4dHJhcG9sYXRpb25WYWx1ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2V4dHJhcG9sYXRpb25WYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgbnVtYmVyO1xuICAgICAgICAgIHJldHVybiBbb3BzLmltYWdlLmNyb3BBbmRSZXNpemUoXG4gICAgICAgICAgICAgIGltYWdlIGFzIFRlbnNvcjRELCBib3hlcyBhcyBUZW5zb3IyRCwgYm94SW5kIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBjcm9wU2l6ZSBhcyBbbnVtYmVyLCBudW1iZXJdLCBtZXRob2QgYXMgJ2JpbGluZWFyJyB8ICduZWFyZXN0JyxcbiAgICAgICAgICAgICAgZXh0cmFwb2xhdGlvblZhbHVlKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnSW1hZ2VQcm9qZWN0aXZlVHJhbnNmb3JtVjMnOiB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW1hZ2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RyYW5zZm9ybXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ291dHB1dFNoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBmaWxsVmFsdWUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWxsVmFsdWUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0aW9uID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW50ZXJwb2xhdGlvbicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgc3RyaW5nO1xuICAgICAgICAgIGNvbnN0IGZpbGxNb2RlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZmlsbE1vZGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZztcbiAgICAgICAgICByZXR1cm4gW29wcy5pbWFnZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgIGltYWdlcyBhcyBUZW5zb3I0RCxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtcyBhcyBUZW5zb3IyRCxcbiAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbi50b0xvd2VyQ2FzZSgpIGFzICdiaWxpbmVhcicgfCAnbmVhcmVzdCcsXG4gICAgICAgICAgICAgIGZpbGxNb2RlLnRvTG93ZXJDYXNlKCkgYXMgJ2NvbnN0YW50JyB8ICdyZWZsZWN0JyB8ICd3cmFwJyB8ICduZWFyZXN0JyxcbiAgICAgICAgICAgICAgZmlsbFZhbHVlLFxuICAgICAgICAgICAgICBvdXRwdXRTaGFwZSBhcyBbbnVtYmVyLCBudW1iZXJdKV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdpbWFnZSc7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { cloneTensor, getParamValue, getTensor } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Const': {\n return tensorMap[node.name];\n }\n case 'PlaceholderWithDefault':\n const def = getParamValue('default', node, tensorMap, context);\n return [getTensor(node.name, tensorMap, context) || def];\n case 'Placeholder':\n return [getTensor(node.name, tensorMap, context)];\n case 'Identity':\n case 'StopGradient':\n case 'FakeQuantWithMinMaxVars': { // This op is currently ignored.\n const data = getParamValue('x', node, tensorMap, context);\n return [cloneTensor(data)];\n }\n case 'IdentityN':\n return getParamValue('x', node, tensorMap, context)\n .map((t) => cloneTensor(t));\n case 'Snapshot':\n const snapshot = getParamValue('x', node, tensorMap, context);\n return [cloneTensor(snapshot)];\n case 'Shape':\n return [ops.tensor1d(getParamValue('x', node, tensorMap, context).shape, 'int32')];\n case 'ShapeN':\n return getParamValue('x', node, tensorMap, context)\n .map((t) => ops.tensor1d(t.shape));\n case 'Size':\n return [ops.scalar(getParamValue('x', node, tensorMap, context).size, 'int32')];\n case 'Rank':\n return [ops.scalar(getParamValue('x', node, tensorMap, context).rank, 'int32')];\n case 'NoOp':\n return [ops.scalar(1)];\n case 'Print':\n const input = getParamValue('x', node, tensorMap, context);\n const data = getParamValue('data', node, tensorMap, context);\n const message = getParamValue('message', node, tensorMap, context);\n const summarize = getParamValue('summarize', node, tensorMap, context);\n console.warn('The graph has a tf.print() operation,' +\n 'usually used for debugging, which slows down performance.');\n console.log(message);\n for (let i = 0; i < data.length; i++) {\n console.log(Array.prototype.slice.call(data[i].dataSync())\n .slice(0, summarize));\n }\n return [input];\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'graph';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvZ3JhcGhfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFDdEMsT0FBeUIsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNaLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtRQUNELEtBQUssd0JBQXdCO1lBQzNCLE1BQU0sR0FBRyxHQUNMLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNqRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzNELEtBQUssYUFBYTtZQUNoQixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEQsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxjQUFjLENBQUM7UUFDcEIsS0FBSyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUcsZ0NBQWdDO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVB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LE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Nsb25lVGVuc29yLCBnZXRQYXJhbVZhbHVlLCBnZXRUZW5zb3J9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnQ29uc3QnOiB7XG4gICAgICAgICAgcmV0dXJuIHRlbnNvck1hcFtub2RlLm5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1BsYWNlaG9sZGVyV2l0aERlZmF1bHQnOlxuICAgICAgICAgIGNvbnN0IGRlZiA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlZmF1bHQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICByZXR1cm4gW2dldFRlbnNvcihub2RlLm5hbWUsIHRlbnNvck1hcCwgY29udGV4dCkgfHwgZGVmXTtcbiAgICAgICAgY2FzZSAnUGxhY2Vob2xkZXInOlxuICAgICAgICAgIHJldHVybiBbZ2V0VGVuc29yKG5vZGUubmFtZSwgdGVuc29yTWFwLCBjb250ZXh0KV07XG4gICAgICAgIGNhc2UgJ0lkZW50aXR5JzpcbiAgICAgICAgY2FzZSAnU3RvcEdyYWRpZW50JzpcbiAgICAgICAgY2FzZSAnRmFrZVF1YW50V2l0aE1pbk1heFZhcnMnOiB7ICAvLyBUaGlzIG9wIGlzIGN1cnJlbnRseSBpZ25vcmVkLlxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihkYXRhKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnSWRlbnRpdHlOJzpcbiAgICAgICAgICByZXR1cm4gKGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcltdKVxuICAgICAgICAgICAgICAubWFwKCh0OiBUZW5zb3IpID0+IGNsb25lVGVuc29yKHQpKTtcbiAgICAgICAgY2FzZSAnU25hcHNob3QnOlxuICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcik7XG4gICAgICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihzbmFwc2hvdCldO1xuICAgICAgICBjYXNlICdTaGFwZSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMudGVuc29yMWQoXG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpLnNoYXBlLFxuICAgICAgICAgICAgICAnaW50MzInKV07XG4gICAgICAgIGNhc2UgJ1NoYXBlTic6XG4gICAgICAgICAgcmV0dXJuIChnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3JbXSlcbiAgICAgICAgICAgICAgLm1hcCgodDogVGVuc29yKSA9PiBvcHMudGVuc29yMWQodC5zaGFwZSkpO1xuICAgICAgICBjYXNlICdTaXplJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5zY2FsYXIoXG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpLnNpemUsXG4gICAgICAgICAgICAgICdpbnQzMicpXTtcbiAgICAgICAgY2FzZSAnUmFuayc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc2NhbGFyKFxuICAgICAgICAgICAgICAoZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKS5yYW5rLFxuICAgICAgICAgICAgICAnaW50MzInKV07XG4gICAgICAgIGNhc2UgJ05vT3AnOlxuICAgICAgICAgIHJldHVybiBbb3BzLnNjYWxhcigxKV07XG4gICAgICAgIGNhc2UgJ1ByaW50JzpcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCBkYXRhID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGF0YScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yW107XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ21lc3NhZ2UnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZztcbiAgICAgICAgICBjb25zdCBzdW1tYXJpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdW1tYXJpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICdUaGUgZ3JhcGggaGFzIGEgdGYucHJpbnQoKSBvcGVyYXRpb24sJyArXG4gICAgICAgICAgICAgICd1c3VhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgd2hpY2ggc2xvd3MgZG93biBwZXJmb3JtYW5jZS4nKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRhdGFbaV0uZGF0YVN5bmMoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgc3VtbWFyaXplKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbaW5wdXRdO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAnZ3JhcGgnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Equal': {\n return [ops.equal(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'NotEqual': {\n return [ops.notEqual(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Greater': {\n return [ops.greater(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'GreaterEqual': {\n return [ops.greaterEqual(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Less': {\n return [ops.less(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'LessEqual': {\n return [ops.lessEqual(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'LogicalAnd': {\n return [ops.logicalAnd(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'LogicalNot': {\n return [ops.logicalNot(getParamValue('a', node, tensorMap, context))];\n }\n case 'LogicalOr': {\n return [ops.logicalOr(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Select':\n case 'SelectV2': {\n return [ops.where(getParamValue('condition', node, tensorMap, context), getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'BitwiseAnd': {\n return [ops.bitwiseAnd(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'logical';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9sb2dpY2FsX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUFFLE9BQXlCLEVBQ2pFLEdBQUcsR0FBRyxLQUFLLEVBQVksRUFBRTtJQUN4QixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZixLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ2IsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUNoQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQ2YsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxjQUFjLENBQUMsQ0FBQztZQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FDcEIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNaLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssV0FBVyxDQUFDLENBQUM7WUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQ2pCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssWUFBWSxDQUFDLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2xCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssWUFBWSxDQUFDLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2xCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUNqQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDYixhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzlELGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssWUFBWSxDQUFDLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2xCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNEO1lBQ0UsTUFBTSxTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDO0FBRU4sTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SW50ZXJuYWxPcEV4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0UGFyYW1WYWx1ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgICBvcHMgPSB0Zk9wcyk6IFRlbnNvcltdID0+IHtcbiAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICBjYXNlICdFcXVhbCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5lcXVhbChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdOb3RFcXVhbCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5ub3RFcXVhbChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdHcmVhdGVyJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmdyZWF0ZXIoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnR3JlYXRlckVxdWFsJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmdyZWF0ZXJFcXVhbChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMZXNzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmxlc3MoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTGVzc0VxdWFsJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmxlc3NFcXVhbChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMb2dpY2FsQW5kJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmxvZ2ljYWxBbmQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTG9naWNhbE5vdCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5sb2dpY2FsTm90KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMb2dpY2FsT3InOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9naWNhbE9yKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NlbGVjdCc6XG4gICAgICAgIGNhc2UgJ1NlbGVjdFYyJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLndoZXJlKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdjb25kaXRpb24nLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdCaXR3aXNlQW5kJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmJpdHdpc2VBbmQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdsb2dpY2FsJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'BatchMatMul':\n case 'BatchMatMulV2':\n case 'MatMul':\n return [ops.matMul(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context), getParamValue('transposeA', node, tensorMap, context), getParamValue('transposeB', node, tensorMap, context))];\n case 'Einsum':\n return [ops.einsum(getParamValue('equation', node, tensorMap, context), ...getParamValue('tensors', node, tensorMap, context))];\n case 'Transpose':\n return [ops.transpose(getParamValue('x', node, tensorMap, context), getParamValue('perm', node, tensorMap, context))];\n case '_FusedMatMul':\n const [extraOp, activationFunc] = getParamValue('fusedOps', node, tensorMap, context);\n const isBiasAdd = extraOp === 'biasadd';\n const isPrelu = activationFunc === 'prelu';\n const numArgs = getParamValue('numArgs', node, tensorMap, context);\n const leakyreluAlpha = getParamValue('leakyreluAlpha', node, tensorMap, context);\n if (isBiasAdd) {\n if (isPrelu && numArgs !== 2) {\n throw new Error('Fused MatMul with BiasAdd and Prelu must have two ' +\n 'extra arguments: bias and alpha.');\n }\n if (!isPrelu && numArgs !== 1) {\n throw new Error('Fused MatMul with BiasAdd must have one extra argument: bias.');\n }\n }\n const [biasArg, preluArg] = getParamValue('args', node, tensorMap, context);\n return [ops.fused.matMul({\n a: getParamValue('a', node, tensorMap, context),\n b: getParamValue('b', node, tensorMap, context),\n transposeA: getParamValue('transposeA', node, tensorMap, context),\n transposeB: getParamValue('transposeB', node, tensorMap, context),\n bias: biasArg,\n activation: activationFunc,\n preluActivationWeights: preluArg,\n leakyreluAlpha\n })];\n case 'MatrixBandPart':\n return [ops.linalg.bandPart(getParamValue('a', node, tensorMap, context), getParamValue('numLower', node, tensorMap, context), getParamValue('numUpper', node, tensorMap, context))];\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'matrices';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cmljZXNfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvbWF0cmljZXNfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ3hCLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssYUFBYSxDQUFDO1FBQ25CLEtBQUssZUFBZSxDQUFDO1FBQ3JCLEtBQUssUUFBUTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUNkLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsRUFDeEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxFQUN4RCxhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFZLEVBQ2hFLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRXBCLEtBQUssUUFBUTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUNkLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDN0QsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVyQixLQUFLLFdBQVc7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FDakIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLENBQUMsQ0FBQyxDQUFDO1FBRXBFLEtBQUssY0FBYztZQUNqQixNQUFNLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxHQUMxQixhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFjLENBQUM7WUFFdEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxLQUFLLFNBQVMsQ0FBQztZQUN4QyxNQUFNLE9BQU8sR0FBRyxjQUFjLEtBQUssT0FBTyxDQUFDO1lBRTNDLE1BQU0sT0FBTyxHQUNSLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVksQ0FBQztZQUNuRSxNQUFNLGNBQWMsR0FDaEIsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUNsRCxDQUFDO1lBRVgsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsSUFBSSxPQUFPLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtvQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FDWCxvREFBb0Q7d0JBQ3BELGtDQUFrQyxDQUFDLENBQUM7aUJBQ3pDO2dCQUNELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtvQkFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDWCwrREFBK0QsQ0FBQyxDQUFDO2lCQUN0RTthQUNGO1lBQ0QsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FDckIsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQkFDdkIsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWE7b0JBQzNELENBQUMsRUFBRSxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhO29CQUMzRCxVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDckQ7b0JBQ1gsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3JEO29CQUNYLElBQUksRUFBRSxPQUFPO29CQUNiLFVBQVUsRUFBRSxjQUF3QztvQkFDcEQsc0JBQXNCLEVBQUUsUUFBUTtvQkFDaEMsY0FBYztpQkFDZixDQUFDLENBQUMsQ0FBQztRQUVOLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDdkIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxFQUN4RCxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzdELGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7UUFFdEU7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1NjYWxhciwgVGVuc29yLCBUZW5zb3IyRH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ0JhdGNoTWF0TXVsJzpcbiAgICAgICAgY2FzZSAnQmF0Y2hNYXRNdWxWMic6XG4gICAgICAgIGNhc2UgJ01hdE11bCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubWF0TXVsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IyRCxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yMkQsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RyYW5zcG9zZUEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW4sXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RyYW5zcG9zZUInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBib29sZWFuKV07XG5cbiAgICAgICAgY2FzZSAnRWluc3VtJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5laW5zdW0oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VxdWF0aW9uJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIC4uLmdldFBhcmFtVmFsdWUoJ3RlbnNvcnMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBUZW5zb3JbXSldO1xuXG4gICAgICAgIGNhc2UgJ1RyYW5zcG9zZSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMudHJhbnNwb3NlKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3Blcm0nLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdKV07XG5cbiAgICAgICAgY2FzZSAnX0Z1c2VkTWF0TXVsJzpcbiAgICAgICAgICBjb25zdCBbZXh0cmFPcCwgYWN0aXZhdGlvbkZ1bmNdID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2Z1c2VkT3BzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBzdHJpbmdbXSk7XG5cbiAgICAgICAgICBjb25zdCBpc0JpYXNBZGQgPSBleHRyYU9wID09PSAnYmlhc2FkZCc7XG4gICAgICAgICAgY29uc3QgaXNQcmVsdSA9IGFjdGl2YXRpb25GdW5jID09PSAncHJlbHUnO1xuXG4gICAgICAgICAgY29uc3QgbnVtQXJncyA9XG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCdudW1BcmdzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIpO1xuICAgICAgICAgIGNvbnN0IGxlYWt5cmVsdUFscGhhID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbGVha3lyZWx1QWxwaGEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIG51bWJlcjtcblxuICAgICAgICAgIGlmIChpc0JpYXNBZGQpIHtcbiAgICAgICAgICAgIGlmIChpc1ByZWx1ICYmIG51bUFyZ3MgIT09IDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgJ0Z1c2VkIE1hdE11bCB3aXRoIEJpYXNBZGQgYW5kIFByZWx1IG11c3QgaGF2ZSB0d28gJyArXG4gICAgICAgICAgICAgICAgICAnZXh0cmEgYXJndW1lbnRzOiBiaWFzIGFuZCBhbHBoYS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQcmVsdSAmJiBudW1BcmdzICE9PSAxKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdGdXNlZCBNYXRNdWwgd2l0aCBCaWFzQWRkIG11c3QgaGF2ZSBvbmUgZXh0cmEgYXJndW1lbnQ6IGJpYXMuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IFtiaWFzQXJnLCBwcmVsdUFyZ10gPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhcmdzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3JbXTtcbiAgICAgICAgICByZXR1cm4gW29wcy5mdXNlZC5tYXRNdWwoe1xuICAgICAgICAgICAgYTogZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yMkQsXG4gICAgICAgICAgICBiOiBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IyRCxcbiAgICAgICAgICAgIHRyYW5zcG9zZUE6IGdldFBhcmFtVmFsdWUoJ3RyYW5zcG9zZUEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgYm9vbGVhbixcbiAgICAgICAgICAgIHRyYW5zcG9zZUI6IGdldFBhcmFtVmFsdWUoJ3RyYW5zcG9zZUInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgYm9vbGVhbixcbiAgICAgICAgICAgIGJpYXM6IGJpYXNBcmcsXG4gICAgICAgICAgICBhY3RpdmF0aW9uOiBhY3RpdmF0aW9uRnVuYyBhcyB0Zk9wcy5mdXNlZC5BY3RpdmF0aW9uLFxuICAgICAgICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0czogcHJlbHVBcmcsXG4gICAgICAgICAgICBsZWFreXJlbHVBbHBoYVxuICAgICAgICAgIH0pXTtcblxuICAgICAgICBjYXNlICdNYXRyaXhCYW5kUGFydCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubGluYWxnLmJhbmRQYXJ0KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IyRCxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbnVtTG93ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFNjYWxhcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbnVtVXBwZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFNjYWxhcildO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAnbWF0cmljZXMnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'EuclideanNorm':\n return [ops.euclideanNorm(getParamValue('x', node, tensorMap, context), getParamValue('axis', node, tensorMap, context), getParamValue('keepDims', node, tensorMap, context))];\n case 'FusedBatchNorm':\n case 'FusedBatchNormV2': {\n return [ops.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))];\n }\n case 'FusedBatchNormV3': {\n return [ops.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))];\n }\n case 'LRN': {\n return [ops.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))];\n }\n case 'Softmax': {\n return [ops.softmax(getParamValue('x', node, tensorMap, context))];\n }\n case 'LogSoftmax': {\n return [ops.logSoftmax(getParamValue('x', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'normalization';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXphdGlvbl9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9ub3JtYWxpemF0aW9uX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUN0QyxPQUF5QixFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQVksRUFBRTtJQUNuRCxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZixLQUFLLGVBQWU7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQ3JCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxFQUMzRCxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssZ0JBQWdCLENBQUM7UUFDdEIsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUNqQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDekQsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM3RCxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzNELGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDMUQsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUNELEtBQUssa0JBQWtCLENBQUMsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FDakIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3pELGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDN0QsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMzRCxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzFELGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDcEU7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FDbEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDL0IsRUFDWixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzNELGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDekQsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMxRCxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUNmLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLFlBQVksQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUNsQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0Q7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgVGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnRXVjbGlkZWFuTm9ybSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuZXVjbGlkZWFuTm9ybShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXSxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VlcERpbXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW4pXTtcbiAgICAgICAgY2FzZSAnRnVzZWRCYXRjaE5vcm0nOlxuICAgICAgICBjYXNlICdGdXNlZEJhdGNoTm9ybVYyJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmJhdGNoTm9ybShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdtZWFuJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3ZhcmlhbmNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ29mZnNldCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzY2FsZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlcHNpbG9uJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdGdXNlZEJhdGNoTm9ybVYzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmJhdGNoTm9ybShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdtZWFuJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3ZhcmlhbmNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ29mZnNldCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzY2FsZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlcHNpbG9uJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMUk4nOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9jYWxSZXNwb25zZU5vcm1hbGl6YXRpb24oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyYWRpdXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYmlhcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhbHBoYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiZXRhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTb2Z0bWF4Jzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnNvZnRtYXgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0xvZ1NvZnRtYXgnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9nU29mdG1heChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdub3JtYWxpemF0aW9uJztcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'RaggedGather': {\n const { outputNestedSplits, outputDenseValues, } = ops.raggedGather(getParamValue('paramsNestedSplits', node, tensorMap, context), getParamValue('paramsDenseValues', node, tensorMap, context), getParamValue('indices', node, tensorMap, context), getParamValue('outputRaggedRank', node, tensorMap, context));\n return outputNestedSplits.concat(outputDenseValues);\n }\n case 'RaggedRange': {\n const { rtNestedSplits, rtDenseValues } = ops.raggedRange(getParamValue('starts', node, tensorMap, context), getParamValue('limits', node, tensorMap, context), getParamValue('splits', node, tensorMap, context));\n return [rtNestedSplits, rtDenseValues];\n }\n case 'RaggedTensorToTensor': {\n return [ops.raggedTensorToTensor(getParamValue('shape', node, tensorMap, context), getParamValue('values', node, tensorMap, context), getParamValue('defaultValue', node, tensorMap, context), getParamValue('rowPartitionTensors', node, tensorMap, context), getParamValue('rowPartitionTypes', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'ragged';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvZXhlY3V0b3JzL3JhZ2dlZF9leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxpREFBaUQ7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxrREFBa0QsQ0FBQztBQU0xRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFBRSxPQUF5QixFQUNqRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDeEIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxjQUFjLENBQUMsQ0FBQztZQUNuQixNQUFNLEVBQ0osa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixHQUNHLEdBQUcsQ0FBQyxZQUFZLENBQ1osYUFBYSxDQUNULG9CQUFvQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUN0QyxFQUNaLGFBQWEsQ0FDVCxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM1RCxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzVELGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDaEQsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDckQ7UUFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sRUFBQyxjQUFjLEVBQUUsYUFBYSxFQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FDbkQsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMzRCxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzNELGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDeEM7UUFDRCxLQUFLLHNCQUFzQixDQUFDLENBQUM7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FDNUIsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMxRCxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzdELGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDakUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUNqRCxFQUNaLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDL0MsQ0FBQyxDQUFDLENBQUM7U0FDcEI7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ1JhZ2dlZEdhdGhlcic6IHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBvdXRwdXROZXN0ZWRTcGxpdHMsXG4gICAgICAgICAgICBvdXRwdXREZW5zZVZhbHVlcyxcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAgICAgb3BzLnJhZ2dlZEdhdGhlcihcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtc05lc3RlZFNwbGl0cycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JbXSxcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtc0RlbnNlVmFsdWVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdvdXRwdXRSYWdnZWRSYW5rJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgICAgIG51bWJlcik7XG4gICAgICAgICAgcmV0dXJuIG91dHB1dE5lc3RlZFNwbGl0cy5jb25jYXQob3V0cHV0RGVuc2VWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JhZ2dlZFJhbmdlJzoge1xuICAgICAgICAgIGNvbnN0IHtydE5lc3RlZFNwbGl0cywgcnREZW5zZVZhbHVlc30gPSBvcHMucmFnZ2VkUmFuZ2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0YXJ0cycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdsaW1pdHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3BsaXRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpO1xuICAgICAgICAgIHJldHVybiBbcnROZXN0ZWRTcGxpdHMsIHJ0RGVuc2VWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JhZ2dlZFRlbnNvclRvVGVuc29yJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnJhZ2dlZFRlbnNvclRvVGVuc29yKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd2YWx1ZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkZWZhdWx0VmFsdWUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncm93UGFydGl0aW9uVGVuc29ycycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIFRlbnNvcltdLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyb3dQYXJ0aXRpb25UeXBlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIHN0cmluZ1tdKV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdyYWdnZWQnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Max': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.max(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Mean': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.mean(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Min': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.min(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Sum': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.sum(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'All': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.all(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Any': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.any(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'ArgMax': {\n const axis = getParamValue('axis', node, tensorMap, context);\n return [ops.argMax(getParamValue('x', node, tensorMap, context), axis)];\n }\n case 'ArgMin': {\n const axis = getParamValue('axis', node, tensorMap, context);\n return [ops.argMin(getParamValue('x', node, tensorMap, context), axis)];\n }\n case 'Prod': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.prod(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Cumprod': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const exclusive = getParamValue('exclusive', node, tensorMap, context);\n const reverse = getParamValue('reverse', node, tensorMap, context);\n return [ops.cumprod(getParamValue('x', node, tensorMap, context), axis, exclusive, reverse)];\n }\n case 'Cumsum': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const exclusive = getParamValue('exclusive', node, tensorMap, context);\n const reverse = getParamValue('reverse', node, tensorMap, context);\n return [ops.cumsum(getParamValue('x', node, tensorMap, context), axis, exclusive, reverse)];\n }\n case 'Bincount':\n const x = getParamValue('x', node, tensorMap, context);\n const weights = getParamValue('weights', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n return [ops.bincount(x, weights, size)];\n case 'DenseBincount': {\n const x = getParamValue('x', node, tensorMap, context);\n const weights = getParamValue('weights', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n const binaryOutput = getParamValue('binaryOutput', node, tensorMap, context);\n return [ops.denseBincount(x, weights, size, binaryOutput)];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'reduction';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWN0aW9uX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvZXhlY3V0b3JzL3JlZHVjdGlvbl9leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxpREFBaUQ7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxrREFBa0QsQ0FBQztBQU0xRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFDdEMsT0FBeUIsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNWLE1BQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQztZQUNoRSxNQUFNLFFBQVEsR0FDVixhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFZLENBQUM7WUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQ1gsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUFFLElBQUksRUFDNUQsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNoQjtRQUNELEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxNQUFNLElBQUksR0FDTixhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQ1YsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBWSxDQUFD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NUQ7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRCwgVGVuc29yMkR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SW50ZXJuYWxPcEV4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0UGFyYW1WYWx1ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgICBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCBvcHMgPSB0Zk9wcyk6IFRlbnNvcltdID0+IHtcbiAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICBjYXNlICdNYXgnOiB7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IGtlZXBEaW1zID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VlcERpbXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW47XG4gICAgICAgICAgcmV0dXJuIFtvcHMubWF4KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMsXG4gICAgICAgICAgICAgIGtlZXBEaW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTWVhbic6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3Qga2VlcERpbXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdrZWVwRGltcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgYm9vbGVhbjtcbiAgICAgICAgICByZXR1cm4gW29wcy5tZWFuKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMsXG4gICAgICAgICAgICAgIGtlZXBEaW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTWluJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBrZWVwRGltcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2tlZXBEaW1zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLm1pbihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCBheGlzLFxuICAgICAgICAgICAgICBrZWVwRGltcyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1N1bSc6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3Qga2VlcERpbXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdrZWVwRGltcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgYm9vbGVhbjtcbiAgICAgICAgICByZXR1cm4gW29wcy5zdW0oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciwgYXhpcyxcbiAgICAgICAgICAgICAga2VlcERpbXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdBbGwnOiB7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IGtlZXBEaW1zID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VlcERpbXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW47XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYWxsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMsXG4gICAgICAgICAgICAgIGtlZXBEaW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQW55Jzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBrZWVwRGltcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2tlZXBEaW1zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLmFueShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCBheGlzLFxuICAgICAgICAgICAgICBrZWVwRGltcyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0FyZ01heCc6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIHJldHVybiBbb3BzLmFyZ01heChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCBheGlzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQXJnTWluJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYXJnTWluKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdQcm9kJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBrZWVwRGltcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2tlZXBEaW1zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLnByb2QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciwgYXhpcyxcbiAgICAgICAgICAgICAga2VlcERpbXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdDdW1wcm9kJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZXhjbHVzaXZlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZXhjbHVzaXZlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIGNvbnN0IHJldmVyc2UgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyZXZlcnNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLmN1bXByb2QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciwgYXhpcyxcbiAgICAgICAgICAgICAgZXhjbHVzaXZlLCByZXZlcnNlKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ3Vtc3VtJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZXhjbHVzaXZlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZXhjbHVzaXZlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIGNvbnN0IHJldmVyc2UgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyZXZlcnNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLmN1bXN1bShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCBheGlzLFxuICAgICAgICAgICAgICBleGNsdXNpdmUsIHJldmVyc2UpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdCaW5jb3VudCc6XG4gICAgICAgICAgY29uc3QgeCA9IGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFEO1xuICAgICAgICAgIGNvbnN0IHdlaWdodHMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd3ZWlnaHRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRDtcbiAgICAgICAgICBjb25zdCBzaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuXG4gICAgICAgICAgcmV0dXJuIFtvcHMuYmluY291bnQoeCwgd2VpZ2h0cywgc2l6ZSldO1xuICAgICAgICBjYXNlICdEZW5zZUJpbmNvdW50Jzoge1xuICAgICAgICAgIGNvbnN0IHggPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRCB8XG4gICAgICAgICAgICAgIFRlbnNvcjJEO1xuICAgICAgICAgIGNvbnN0IHdlaWdodHMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd3ZWlnaHRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRCB8XG4gICAgICAgICAgICAgIFRlbnNvcjJEO1xuICAgICAgICAgIGNvbnN0IHNpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG5cbiAgICAgICAgICBjb25zdCBiaW5hcnlPdXRwdXQgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiaW5hcnlPdXRwdXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIGJvb2xlYW47XG5cbiAgICAgICAgICByZXR1cm4gW29wcy5kZW5zZUJpbmNvdW50KHgsIHdlaWdodHMsIHNpemUsIGJpbmFyeU91dHB1dCldO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAncmVkdWN0aW9uJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { tidy, util } from '@tensorflow/tfjs-core';\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'ConcatV2':\n case 'Concat': {\n const n = getParamValue('n', node, tensorMap, context);\n const axis = getParamValue('axis', node, tensorMap, context);\n let inputs = getParamValue('tensors', node, tensorMap, context);\n inputs = inputs.slice(0, n);\n return [ops.concat(inputs, axis)];\n }\n case 'Gather': {\n const input = getParamValue('x', node, tensorMap, context);\n const indices = getParamValue('indices', node, tensorMap, context);\n return [ops.gather(input, ops.cast(indices, 'int32'), 0)];\n }\n case 'GatherV2': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const batchDims = getParamValue('batchDims', node, tensorMap, context);\n const input = getParamValue('x', node, tensorMap, context);\n const indices = getParamValue('indices', node, tensorMap, context);\n return [ops.gather(input, ops.cast(indices, 'int32'), axis, batchDims)];\n }\n case 'Reverse': {\n const dims = getParamValue('dims', node, tensorMap, context);\n const axis = [];\n for (let i = 0; i < dims.length; i++) {\n if (dims[i]) {\n axis.push(i);\n }\n }\n const input = getParamValue('x', node, tensorMap, context);\n return [ops.reverse(input, axis)];\n }\n case 'ReverseV2': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const input = getParamValue('x', node, tensorMap, context);\n return [ops.reverse(input, axis)];\n }\n case 'Slice': {\n // tslint:disable-next-line:no-any\n const begin = getParamValue('begin', node, tensorMap, context);\n // tslint:disable-next-line:no-any\n const size = getParamValue('size', node, tensorMap, context);\n return [ops.slice(getParamValue('x', node, tensorMap, context), begin, size)];\n }\n case 'StridedSlice': {\n const begin = getParamValue('begin', node, tensorMap, context);\n const end = getParamValue('end', node, tensorMap, context);\n const strides = getParamValue('strides', node, tensorMap, context);\n const beginMask = getParamValue('beginMask', node, tensorMap, context);\n const endMask = getParamValue('endMask', node, tensorMap, context);\n const ellipsisMask = getParamValue('ellipsisMask', node, tensorMap, context);\n const newAxisMask = getParamValue('newAxisMask', node, tensorMap, context);\n const shrinkAxisMask = getParamValue('shrinkAxisMask', node, tensorMap, context);\n const tensor = getParamValue('x', node, tensorMap, context);\n return [ops.stridedSlice(tensor, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask)];\n }\n case 'Pack': {\n return tidy(() => {\n const axis = getParamValue('axis', node, tensorMap, context);\n const tensors = getParamValue('tensors', node, tensorMap, context);\n // Reshape the tensors to the first tensor's shape if they don't\n // match.\n const shape = tensors[0].shape;\n const squeezedShape = ops.squeeze(tensors[0]).shape;\n const mapped = tensors.map(tensor => {\n const sameShape = util.arraysEqual(tensor.shape, shape);\n if (!sameShape &&\n !util.arraysEqual(ops.squeeze(tensor).shape, squeezedShape)) {\n throw new Error('the input tensors shape does not match');\n }\n return sameShape ? tensor : ops.reshape(tensor, shape);\n });\n return [ops.stack(mapped, axis)];\n });\n }\n case 'Unpack': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const tensor = getParamValue('tensor', node, tensorMap, context);\n return ops.unstack(tensor, axis);\n }\n case 'Tile': {\n const reps = getParamValue('reps', node, tensorMap, context);\n return [ops.tile(getParamValue('x', node, tensorMap, context), reps)];\n }\n case 'Split':\n case 'SplitV': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const numOrSizeSplits = getParamValue('numOrSizeSplits', node, tensorMap, context);\n const tensor = getParamValue('x', node, tensorMap, context);\n return ops.split(tensor, numOrSizeSplits, axis);\n }\n case 'ScatterNd': {\n const indices = getParamValue('indices', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n const shape = getParamValue('shape', node, tensorMap, context);\n return [ops.scatterND(indices, values, shape)];\n }\n case 'GatherNd': {\n const x = getParamValue('x', node, tensorMap, context);\n const indices = getParamValue('indices', node, tensorMap, context);\n return [ops.gatherND(x, indices)];\n }\n case 'SparseToDense': {\n const indices = getParamValue('sparseIndices', node, tensorMap, context);\n const shape = getParamValue('outputShape', node, tensorMap, context);\n const sparseValues = getParamValue('sparseValues', node, tensorMap, context);\n const defaultValue = getParamValue('defaultValue', node, tensorMap, context);\n return [ops.sparseToDense(indices, sparseValues, shape, sparseValues.dtype === defaultValue.dtype ?\n defaultValue :\n ops.cast(defaultValue, sparseValues.dtype))];\n }\n case 'TensorScatterUpdate': {\n const indices = getParamValue('indices', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n const tensor = getParamValue('tensor', node, tensorMap, context);\n return [ops.tensorScatterUpdate(tensor, indices, values)];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'slice_join';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2Vfam9pbl9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9zbGljZV9qb2luX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUFFLE9BQXlCLEVBQ2pFLEdBQUcsR0FBRyxLQUFLLEVBQVksRUFBRTtJQUN4QixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZixLQUFLLFVBQVUsQ0FBQztRQUNoQixLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQ2IsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUM5RCxJQUFJLE1BQU0sR0FDTixhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLENBQUM7WUFDbkUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsS0FBSyxRQUFRLENB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QUMsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUNULGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNqRSxNQUFNLE1BQU0sR0FDUixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDaEUsTUFBTSxNQUFNLEdBQ1IsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1NjYWxhciwgVGVuc29yLCBUZW5zb3IxRCwgdGlkeSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ0NvbmNhdFYyJzpcbiAgICAgICAgY2FzZSAnQ29uY2F0Jzoge1xuICAgICAgICAgIGNvbnN0IG4gPSBnZXRQYXJhbVZhbHVlKCduJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBsZXQgaW5wdXRzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29ycycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yW107XG4gICAgICAgICAgaW5wdXRzID0gaW5wdXRzLnNsaWNlKDAsIG4pO1xuICAgICAgICAgIHJldHVybiBbb3BzLmNvbmNhdChpbnB1dHMsIGF4aXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdHYXRoZXInOiB7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgaW5kaWNlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFEO1xuICAgICAgICAgIHJldHVybiBbb3BzLmdhdGhlcihpbnB1dCwgb3BzLmNhc3QoaW5kaWNlcywgJ2ludDMyJyksIDApXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdHYXRoZXJWMic6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IGJhdGNoRGltcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2JhdGNoRGltcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IGluZGljZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRDtcbiAgICAgICAgICByZXR1cm4gW29wcy5nYXRoZXIoXG4gICAgICAgICAgICAgIGlucHV0LCBvcHMuY2FzdChpbmRpY2VzLCAnaW50MzInKSwgYXhpcywgYmF0Y2hEaW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUmV2ZXJzZSc6IHtcbiAgICAgICAgICBjb25zdCBkaW1zID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGltcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgYm9vbGVhbltdO1xuICAgICAgICAgIGNvbnN0IGF4aXMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChkaW1zW2ldKSB7XG4gICAgICAgICAgICAgIGF4aXMucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmV2ZXJzZShpbnB1dCwgYXhpcyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JldmVyc2VWMic6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmV2ZXJzZShpbnB1dCwgYXhpcyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NsaWNlJzoge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICBjb25zdCBiZWdpbiA9IGdldFBhcmFtVmFsdWUoJ2JlZ2luJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBhbnk7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgIGNvbnN0IHNpemUgPSBnZXRQYXJhbVZhbHVlKCdzaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBhbnk7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc2xpY2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciwgYmVnaW4sXG4gICAgICAgICAgICAgIHNpemUpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTdHJpZGVkU2xpY2UnOiB7XG4gICAgICAgICAgY29uc3QgYmVnaW4gPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiZWdpbicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgZW5kID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZW5kJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBzdHJpZGVzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgYmVnaW5NYXNrID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYmVnaW5NYXNrJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZW5kTWFzayA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VuZE1hc2snLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBlbGxpcHNpc01hc2sgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGxpcHNpc01hc2snLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBuZXdBeGlzTWFzayA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ25ld0F4aXNNYXNrJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3Qgc2hyaW5rQXhpc01hc2sgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaHJpbmtBeGlzTWFzaycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHRlbnNvciA9IGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcblxuICAgICAgICAgIHJldHVybiBbb3BzLnN0cmlkZWRTbGljZShcbiAgICAgICAgICAgICAgdGVuc29yLCBiZWdpbiwgZW5kLCBzdHJpZGVzLCBiZWdpbk1hc2ssIGVuZE1hc2ssIGVsbGlwc2lzTWFzayxcbiAgICAgICAgICAgICAgbmV3QXhpc01hc2ssIHNocmlua0F4aXNNYXNrKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUGFjayc6IHtcbiAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCB0ZW5zb3JzID1cbiAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3JbXTtcbiAgICAgICAgICAgIC8vIFJlc2hhcGUgdGhlIHRlbnNvcnMgdG8gdGhlIGZpcnN0IHRlbnNvcidzIHNoYXBlIGlmIHRoZXkgZG9uJ3RcbiAgICAgICAgICAgIC8vIG1hdGNoLlxuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSB0ZW5zb3JzWzBdLnNoYXBlO1xuICAgICAgICAgICAgY29uc3Qgc3F1ZWV6ZWRTaGFwZSA9IG9wcy5zcXVlZXplKHRlbnNvcnNbMF0pLnNoYXBlO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGVuc29ycy5tYXAodGVuc29yID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc2FtZVNoYXBlID0gdXRpbC5hcnJheXNFcXVhbCh0ZW5zb3Iuc2hhcGUsIHNoYXBlKTtcbiAgICAgICAgICAgICAgaWYgKCFzYW1lU2hhcGUgJiZcbiAgICAgICAgICAgICAgICAgICF1dGlsLmFycmF5c0VxdWFsKG9wcy5zcXVlZXplKHRlbnNvcikuc2hhcGUsIHNxdWVlemVkU2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgaW5wdXQgdGVuc29ycyBzaGFwZSBkb2VzIG5vdCBtYXRjaCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBzYW1lU2hhcGUgPyB0ZW5zb3IgOiBvcHMucmVzaGFwZSh0ZW5zb3IsIHNoYXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFtvcHMuc3RhY2sobWFwcGVkLCBheGlzKV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnVW5wYWNrJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgdGVuc29yID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIG9wcy51bnN0YWNrKHRlbnNvciwgYXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnVGlsZSc6IHtcbiAgICAgICAgICBjb25zdCByZXBzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncmVwcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgcmV0dXJuIFtvcHMudGlsZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCByZXBzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3BsaXQnOlxuICAgICAgICBjYXNlICdTcGxpdFYnOiB7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBudW1PclNpemVTcGxpdHMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdudW1PclNpemVTcGxpdHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBudW1iZXIgfFxuICAgICAgICAgICAgICBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCB0ZW5zb3IgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG5cbiAgICAgICAgICByZXR1cm4gb3BzLnNwbGl0KHRlbnNvciwgbnVtT3JTaXplU3BsaXRzLCBheGlzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTY2F0dGVyTmQnOiB7XG4gICAgICAgICAgY29uc3QgaW5kaWNlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd2YWx1ZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCBzaGFwZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICByZXR1cm4gW29wcy5zY2F0dGVyTkQoaW5kaWNlcywgdmFsdWVzLCBzaGFwZSldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0dhdGhlck5kJzoge1xuICAgICAgICAgIGNvbnN0IHggPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgaW5kaWNlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5nYXRoZXJORCh4LCBpbmRpY2VzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3BhcnNlVG9EZW5zZSc6IHtcbiAgICAgICAgICBjb25zdCBpbmRpY2VzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3BhcnNlSW5kaWNlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IHNoYXBlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnb3V0cHV0U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHNwYXJzZVZhbHVlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NwYXJzZVZhbHVlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlZmF1bHRWYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgU2NhbGFyO1xuICAgICAgICAgIHJldHVybiBbb3BzLnNwYXJzZVRvRGVuc2UoXG4gICAgICAgICAgICAgIGluZGljZXMsIHNwYXJzZVZhbHVlcywgc2hhcGUsXG4gICAgICAgICAgICAgIHNwYXJzZVZhbHVlcy5kdHlwZSA9PT0gZGVmYXVsdFZhbHVlLmR0eXBlID9cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA6XG4gICAgICAgICAgICAgICAgICBvcHMuY2FzdChkZWZhdWx0VmFsdWUsIHNwYXJzZVZhbHVlcy5kdHlwZSkpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdUZW5zb3JTY2F0dGVyVXBkYXRlJzoge1xuICAgICAgICAgIGNvbnN0IGluZGljZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndmFsdWVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgdGVuc29yID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIFtvcHMudGVuc29yU2NhdHRlclVwZGF0ZSh0ZW5zb3IsIGluZGljZXMsIHZhbHVlcyldO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAnc2xpY2Vfam9pbic7XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'SparseFillEmptyRows': {\n const { outputIndices, outputValues, emptyRowIndicator, reverseIndexMap } = ops.sparse.sparseFillEmptyRows(getParamValue('indices', node, tensorMap, context), getParamValue('values', node, tensorMap, context), getParamValue('denseShape', node, tensorMap, context), getParamValue('defaultValue', node, tensorMap, context));\n return [\n outputIndices, outputValues, emptyRowIndicator, reverseIndexMap\n ];\n }\n case 'SparseReshape': {\n const { outputIndices, outputShape } = ops.sparse.sparseReshape(getParamValue('inputIndices', node, tensorMap, context), getParamValue('inputShape', node, tensorMap, context), getParamValue('newShape', node, tensorMap, context));\n return [outputIndices, outputShape];\n }\n case 'SparseSegmentMean': {\n const outputData = ops.sparse.sparseSegmentMean(getParamValue('data', node, tensorMap, context), getParamValue('indices', node, tensorMap, context), getParamValue('segmentIds', node, tensorMap, context));\n return [outputData];\n }\n case 'SparseSegmentSum': {\n const outputData = ops.sparse.sparseSegmentSum(getParamValue('data', node, tensorMap, context), getParamValue('indices', node, tensorMap, context), getParamValue('segmentIds', node, tensorMap, context));\n return [outputData];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'sparse';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvZXhlY3V0b3JzL3NwYXJzZV9leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxpREFBaUQ7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxrREFBa0QsQ0FBQztBQU0xRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFDdEMsT0FBeUIsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sRUFDSixhQUFhLEVBQ2IsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixlQUFlLEVBQ2hCLEdBQ0csR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDMUIsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDckMsRUFDWixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzdELGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3hDLEVBQ1osYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDNUMsQ0FBQyxDQUFDO1lBQ3BCLE9BQU87Z0JBQ0wsYUFBYSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxlQUFlO2FBQ2hFLENBQUM7U0FDSDtRQUNELEtBQUssZUFBZSxDQUFDLENBQUM7WUFDcEIsTUFBTSxFQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDekQsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDMUMsRUFDWixhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQ2pFLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDckM7UUFDRCxLQUFLLG1CQUFtQixDQUFDLENBQUM7WUFDeEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDM0MsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN6RCxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzlELGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3hDLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckI7UUFDRCxLQUFLLGtCQUFrQixDQUFDLENBQUM7WUFDdkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDMUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN6RCxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzlELGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3hDLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckI7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7U2NhbGFyLCBUZW5zb3IsIFRlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ1NwYXJzZUZpbGxFbXB0eVJvd3MnOiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgb3V0cHV0SW5kaWNlcyxcbiAgICAgICAgICAgIG91dHB1dFZhbHVlcyxcbiAgICAgICAgICAgIGVtcHR5Um93SW5kaWNhdG9yLFxuICAgICAgICAgICAgcmV2ZXJzZUluZGV4TWFwXG4gICAgICAgICAgfSA9XG4gICAgICAgICAgICAgIG9wcy5zcGFyc2Uuc3BhcnNlRmlsbEVtcHR5Um93cyhcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICAgICAgVGVuc29yMkQsXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd2YWx1ZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGVuc2VTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3IxRCxcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlZmF1bHRWYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgICAgICBTY2FsYXIpO1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvdXRwdXRJbmRpY2VzLCBvdXRwdXRWYWx1ZXMsIGVtcHR5Um93SW5kaWNhdG9yLCByZXZlcnNlSW5kZXhNYXBcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NwYXJzZVJlc2hhcGUnOiB7XG4gICAgICAgICAgY29uc3Qge291dHB1dEluZGljZXMsIG91dHB1dFNoYXBlfSA9IG9wcy5zcGFyc2Uuc3BhcnNlUmVzaGFwZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW5wdXRJbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yMkQsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2lucHV0U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCduZXdTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yMUQpO1xuICAgICAgICAgIHJldHVybiBbb3V0cHV0SW5kaWNlcywgb3V0cHV0U2hhcGVdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NwYXJzZVNlZ21lbnRNZWFuJzoge1xuICAgICAgICAgIGNvbnN0IG91dHB1dERhdGEgPSBvcHMuc3BhcnNlLnNwYXJzZVNlZ21lbnRNZWFuKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkYXRhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZWdtZW50SWRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yMUQpO1xuICAgICAgICAgIHJldHVybiBbb3V0cHV0RGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3BhcnNlU2VnbWVudFN1bSc6IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXREYXRhID0gb3BzLnNwYXJzZS5zcGFyc2VTZWdtZW50U3VtKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkYXRhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZWdtZW50SWRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yMUQpO1xuICAgICAgICAgIHJldHVybiBbb3V0cHV0RGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdzcGFyc2UnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'FFT': {\n return [ops.fft(getParamValue('x', node, tensorMap, context))];\n }\n case 'IFFT': {\n return [ops.ifft(getParamValue('x', node, tensorMap, context))];\n }\n case 'RFFT': {\n return [ops.rfft(getParamValue('x', node, tensorMap, context))];\n }\n case 'IRFFT': {\n return [ops.irfft(getParamValue('x', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'spectral';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyYWxfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvc3BlY3RyYWxfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ3BCLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FDWCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNaLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ1osYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssT0FBTyxDQUFDLENBQUM7WUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDYixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0Q7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFVixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICAgICAgY2FzZSAnRkZUJzoge1xuICAgICAgICAgICAgICByZXR1cm4gW29wcy5mZnQoXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0lGRlQnOiB7XG4gICAgICAgICAgICAgIHJldHVybiBbb3BzLmlmZnQoXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1JGRlQnOiB7XG4gICAgICAgICAgICAgIHJldHVybiBbb3BzLnJmZnQoXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0lSRkZUJzoge1xuICAgICAgICAgICAgICByZXR1cm4gW29wcy5pcmZmdChcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdzcGVjdHJhbCc7XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'StaticRegexReplace': {\n return [ops.string.staticRegexReplace(getParamValue('input', node, tensorMap, context), getParamValue('pattern', node, tensorMap, context), getParamValue('rewrite', node, tensorMap, context), getParamValue('replaceGlobal', node, tensorMap, context))];\n }\n case 'StringNGrams': {\n const { nGrams, nGramsSplits } = ops.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));\n return [nGrams, nGramsSplits];\n }\n case 'StringSplit': {\n const { indices, values, shape } = ops.string.stringSplit(getParamValue('input', node, tensorMap, context), getParamValue('delimiter', node, tensorMap, context), getParamValue('skipEmpty', node, tensorMap, context));\n return [indices, values, shape];\n }\n case 'StringToHashBucketFast': {\n const output = ops.string.stringToHashBucketFast(getParamValue('input', node, tensorMap, context), getParamValue('numBuckets', node, tensorMap, context));\n return [output];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'string';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvZXhlY3V0b3JzL3N0cmluZ19leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxpREFBaUQ7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxrREFBa0QsQ0FBQztBQU0xRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFDdEMsT0FBeUIsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUNuQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzFELGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDNUQsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM1RCxhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFZLENBQ3BFLENBQUMsQ0FBQztTQUNKO1FBQ0QsS0FBSyxjQUFjLENBQUMsQ0FBQztZQUNuQixNQUFNLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUNsRCxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzNELGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDL0QsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM5RCxhQUFhLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUN6QyxFQUNaLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDNUQsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM3RCxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzdELGFBQWEsQ0FDVCx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDM0MsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDL0I7UUFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNuRCxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzVELGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDOUQsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBWSxDQUFDLENBQUM7WUFDckUsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakM7UUFDRCxLQUFLLHdCQUF3QixDQUFDLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDNUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMxRCxhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQztZQUNyRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakI7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7U2NhbGFyLCBUZW5zb3IsIFRlbnNvcjFEfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnU3RhdGljUmVnZXhSZXBsYWNlJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnN0cmluZy5zdGF0aWNSZWdleFJlcGxhY2UoXG4gICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbnB1dCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncGF0dGVybicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncmV3cml0ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncmVwbGFjZUdsb2JhbCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgYm9vbGVhbixcbiAgICAgICAgICApXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTdHJpbmdOR3JhbXMnOiB7XG4gICAgICAgICAgY29uc3Qge25HcmFtcywgbkdyYW1zU3BsaXRzfSA9IG9wcy5zdHJpbmcuc3RyaW5nTkdyYW1zKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkYXRhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRCxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGF0YVNwbGl0cycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZXBhcmF0b3InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbkdyYW1XaWR0aHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBudW1iZXJbXSxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbGVmdFBhZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyaWdodFBhZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdwYWRXaWR0aCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKFxuICAgICAgICAgICAgICAgICAgJ3ByZXNlcnZlU2hvcnRTZXF1ZW5jZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBib29sZWFuKTtcbiAgICAgICAgICByZXR1cm4gW25HcmFtcywgbkdyYW1zU3BsaXRzXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTdHJpbmdTcGxpdCc6IHtcbiAgICAgICAgICBjb25zdCB7aW5kaWNlcywgdmFsdWVzLCBzaGFwZX0gPSBvcHMuc3RyaW5nLnN0cmluZ1NwbGl0KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbnB1dCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yMUQsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlbGltaXRlcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgU2NhbGFyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdza2lwRW1wdHknLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW4pO1xuICAgICAgICAgIHJldHVybiBbaW5kaWNlcywgdmFsdWVzLCBzaGFwZV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3RyaW5nVG9IYXNoQnVja2V0RmFzdCc6IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvcHMuc3RyaW5nLnN0cmluZ1RvSGFzaEJ1Y2tldEZhc3QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2lucHV0Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ251bUJ1Y2tldHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcik7XG4gICAgICAgICAgcmV0dXJuIFtvdXRwdXRdO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAnc3RyaW5nJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Cast': {\n return [ops.cast(getParamValue('x', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context))];\n }\n case 'ExpandDims': {\n const axis = getParamValue('axis', node, tensorMap, context);\n return [ops.expandDims(getParamValue('x', node, tensorMap, context), axis)];\n }\n case 'Squeeze': {\n const axis = getParamValue('axis', node, tensorMap, context);\n return [ops.squeeze(getParamValue('x', node, tensorMap, context), axis)];\n }\n case 'Reshape': {\n return [ops.reshape(getParamValue('x', node, tensorMap, context), getParamValue('shape', node, tensorMap, context))];\n }\n case 'EnsureShape': {\n return [ops.ensureShape(getParamValue('x', node, tensorMap, context), getParamValue('shape', node, tensorMap, context))];\n }\n case 'MirrorPad': {\n return [ops.mirrorPad(getParamValue('x', node, tensorMap, context), getParamValue('padding', node, tensorMap, context), getParamValue('mode', node, tensorMap, context))];\n }\n case 'PadV2':\n case 'Pad': {\n return [ops.pad(getParamValue('x', node, tensorMap, context), getParamValue('padding', node, tensorMap, context), getParamValue('constantValue', node, tensorMap, context))];\n }\n case 'SpaceToBatchND': {\n const blockShape = getParamValue('blockShape', node, tensorMap, context);\n const paddings = getParamValue('paddings', node, tensorMap, context);\n return [ops.spaceToBatchND(getParamValue('x', node, tensorMap, context), blockShape, paddings)];\n }\n case 'BatchToSpaceND': {\n const blockShape = getParamValue('blockShape', node, tensorMap, context);\n const crops = getParamValue('crops', node, tensorMap, context);\n return [ops.batchToSpaceND(getParamValue('x', node, tensorMap, context), blockShape, crops)];\n }\n case 'DepthToSpace': {\n const blockSize = getParamValue('blockSize', node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context).toUpperCase();\n return [ops.depthToSpace(getParamValue('x', node, tensorMap, context), blockSize, dataFormat)];\n }\n case 'BroadcastTo': {\n return [ops.broadcastTo(getParamValue('x', node, tensorMap, context), getParamValue('shape', node, tensorMap, context))];\n }\n case 'BroadcastArgs': {\n return [ops.broadcastArgs(getParamValue('s0', node, tensorMap, context), getParamValue('s1', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'transformation';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtYXRpb25fZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvdHJhbnNmb3JtYXRpb25fZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ3hCLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3pCLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQztZQUNqQixNQUFNLElBQUksR0FDTixhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2xCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUNkLE1BQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxNQUFNLEVB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LElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUM3QyxDQUFDLFdBQVcsRUFDZCxDQUFDO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQ3BCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsRUFDeEQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDN0I7UUFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUNuQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQyxDQUFDLENBQUM7U0FDcEU7UUFDRCxLQUFLLGVBQWUsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUNyQixhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3ZELGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnQ2FzdCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5jYXN0KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2R0eXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyAnaW50MzInIHxcbiAgICAgICAgICAgICAgICAgICdmbG9hdDMyJyB8ICdib29sJyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0V4cGFuZERpbXMnOiB7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5leHBhbmREaW1zKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTcXVlZXplJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICByZXR1cm4gW29wcy5zcXVlZXplKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ1Jlc2hhcGUnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmVzaGFwZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10pXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdFbnN1cmVTaGFwZSc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5lbnN1cmVTaGFwZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10pXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdNaXJyb3JQYWQnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubWlycm9yUGFkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3BhZGRpbmcnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbW9kZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgJ3JlZmxlY3QnIHxcbiAgICAgICAgICAgICAgICAgICdzeW1tZXRyaWMnKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUGFkVjInOlxuICAgICAgICBjYXNlICdQYWQnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMucGFkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3BhZGRpbmcnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY29uc3RhbnRWYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIG51bWJlcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NwYWNlVG9CYXRjaE5EJzoge1xuICAgICAgICAgIGNvbnN0IGJsb2NrU2hhcGUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdibG9ja1NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBwYWRkaW5ncyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3BhZGRpbmdzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXVtdO1xuICAgICAgICAgIHJldHVybiBbb3BzLnNwYWNlVG9CYXRjaE5EKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGJsb2NrU2hhcGUsIHBhZGRpbmdzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQmF0Y2hUb1NwYWNlTkQnOiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tTaGFwZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2Jsb2NrU2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IGNyb3BzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY3JvcHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdW107XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYmF0Y2hUb1NwYWNlTkQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgYmxvY2tTaGFwZSwgY3JvcHMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdEZXB0aFRvU3BhY2UnOiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tTaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYmxvY2tTaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZGF0YUZvcm1hdCA9XG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCdkYXRhRm9ybWF0Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgc3RyaW5nKS50b1VwcGVyQ2FzZSgpIGFzICdOSFdDJyB8XG4gICAgICAgICAgICAgICdOQ0hXJztcbiAgICAgICAgICByZXR1cm4gW29wcy5kZXB0aFRvU3BhY2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjRELFxuICAgICAgICAgICAgICBibG9ja1NpemUsIGRhdGFGb3JtYXQpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdCcm9hZGNhc3RUbyc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5icm9hZGNhc3RUbyhcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10pXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdCcm9hZGNhc3RBcmdzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmJyb2FkY2FzdEFyZ3MoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3MwJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3MxJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ3RyYW5zZm9ybWF0aW9uJztcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { HashTable } from '../../executor/hash_table';\nimport { getParamValue } from './utils';\nexport const executeOp = async (node, tensorMap, context, resourceManager) => {\n switch (node.op) {\n case 'HashTable':\n case 'HashTableV2': {\n const existingTableHandle = resourceManager.getHashTableHandleByName(node.name);\n // Table is shared with initializer.\n if (existingTableHandle != null) {\n return [existingTableHandle];\n }\n else {\n const keyDType = getParamValue('keyDType', node, tensorMap, context);\n const valueDType = getParamValue('valueDType', node, tensorMap, context);\n const hashTable = new HashTable(keyDType, valueDType);\n resourceManager.addHashTable(node.name, hashTable);\n return [hashTable.handle];\n }\n }\n case 'InitializeTable':\n case 'InitializeTableV2':\n case 'LookupTableImport':\n case 'LookupTableImportV2': {\n const handle = getParamValue('tableHandle', node, tensorMap, context, resourceManager);\n const keys = getParamValue('keys', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n const hashTable = resourceManager.getHashTableById(handle.id);\n return [await hashTable.import(keys, values)];\n }\n case 'LookupTableFind':\n case 'LookupTableFindV2': {\n const handle = getParamValue('tableHandle', node, tensorMap, context, resourceManager);\n const keys = getParamValue('keys', node, tensorMap, context);\n const defaultValue = getParamValue('defaultValue', node, tensorMap, context);\n const hashTable = resourceManager.getHashTableById(handle.id);\n return [await hashTable.find(keys, defaultValue)];\n }\n case 'LookupTableSize':\n case 'LookupTableSizeV2': {\n const handle = getParamValue('tableHandle', node, tensorMap, context, resourceManager);\n const hashTable = resourceManager.getHashTableById(handle.id);\n return [hashTable.tensorSize()];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'hash_table';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF90YWJsZV9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9oYXNoX3RhYmxlX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQU1ILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUlwRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBNEIsS0FBSyxFQUNuRCxJQUFVLEVBQUUsU0FBMEIsRUFBRSxPQUF5QixFQUNqRSxlQUFnQyxFQUFxQixFQUFFO0lBQ3pELFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssYUFBYSxDQUFDLENBQUM7WUFDbEIsTUFBTSxtQkFBbUIsR0FDckIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RCxvQ0FBb0M7WUFDcEMsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLEVBQUU7Z0JBQy9CLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLE1BQU0sUUFBUSxHQUNWLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQztnQkFDcEUsTUFBTSxVQUFVLEdBQ1osYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxDQUFDO2dCQUV0RSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzQjtTQUNGO1FBQ0QsS0FBSyxpQkFBaUIsQ0FBQztRQUN2QixLQUFLLG1CQUFtQixDQUFDO1FBQ3pCLEtBQUssbUJBQW1CLENBQUM7UUFDekIsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FDVCxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQ3ZDLGVBQWUsQ0FBVyxDQUFDO1lBQzlDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUN2RSxNQUFNLE1BQU0sR0FDUixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFFaEUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU5RCxPQUFPLENBQUMsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsS0FBSyxpQkFBaUIsQ0FBQztRQUN2QixLQUFLLG1CQUFtQixDQUFDLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUNULGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFDdkMsZUFBZSxDQUFXLENBQUM7WUFDOUMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ3ZFLE1BQU0sWUFBWSxHQUNkLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUV0RSxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlELE9BQU8sQ0FBQyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxLQUFLLGlCQUFpQixDQUFDO1FBQ3ZCLEtBQUssbUJBQW1CLENBQUMsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQ1QsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUN2QyxlQUFlLENBQVcsQ0FBQztZQUU5QyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlELE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUNqQztRQUNEO1lBQ0UsTUFBTSxTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgVGVuc29yfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuLi8uLi9leGVjdXRvci9oYXNoX3RhYmxlJztcbmltcG9ydCB7UmVzb3VyY2VNYW5hZ2VyfSBmcm9tICcuLi8uLi9leGVjdXRvci9yZXNvdXJjZV9tYW5hZ2VyJztcbmltcG9ydCB7SW50ZXJuYWxPcEFzeW5jRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEFzeW5jRXhlY3V0b3IgPSBhc3luYyhcbiAgICBub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IFByb21pc2U8VGVuc29yW10+ID0+IHtcbiAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgY2FzZSAnSGFzaFRhYmxlJzpcbiAgICBjYXNlICdIYXNoVGFibGVWMic6IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nVGFibGVIYW5kbGUgPVxuICAgICAgICAgIHJlc291cmNlTWFuYWdlci5nZXRIYXNoVGFibGVIYW5kbGVCeU5hbWUobm9kZS5uYW1lKTtcbiAgICAgIC8vIFRhYmxlIGlzIHNoYXJlZCB3aXRoIGluaXRpYWxpemVyLlxuICAgICAgaWYgKGV4aXN0aW5nVGFibGVIYW5kbGUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW2V4aXN0aW5nVGFibGVIYW5kbGVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5RFR5cGUgPVxuICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2V5RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZURUeXBlID1cbiAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3ZhbHVlRFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuXG4gICAgICAgIGNvbnN0IGhhc2hUYWJsZSA9IG5ldyBIYXNoVGFibGUoa2V5RFR5cGUsIHZhbHVlRFR5cGUpO1xuICAgICAgICByZXNvdXJjZU1hbmFnZXIuYWRkSGFzaFRhYmxlKG5vZGUubmFtZSwgaGFzaFRhYmxlKTtcbiAgICAgICAgcmV0dXJuIFtoYXNoVGFibGUuaGFuZGxlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSAnSW5pdGlhbGl6ZVRhYmxlJzpcbiAgICBjYXNlICdJbml0aWFsaXplVGFibGVWMic6XG4gICAgY2FzZSAnTG9va3VwVGFibGVJbXBvcnQnOlxuICAgIGNhc2UgJ0xvb2t1cFRhYmxlSW1wb3J0VjInOiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSBnZXRQYXJhbVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICd0YWJsZUhhbmRsZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZU1hbmFnZXIpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IGtleXMgPSBnZXRQYXJhbVZhbHVlKCdrZXlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3ZhbHVlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuXG4gICAgICBjb25zdCBoYXNoVGFibGUgPSByZXNvdXJjZU1hbmFnZXIuZ2V0SGFzaFRhYmxlQnlJZChoYW5kbGUuaWQpO1xuXG4gICAgICByZXR1cm4gW2F3YWl0IGhhc2hUYWJsZS5pbXBvcnQoa2V5cywgdmFsdWVzKV07XG4gICAgfVxuICAgIGNhc2UgJ0xvb2t1cFRhYmxlRmluZCc6XG4gICAgY2FzZSAnTG9va3VwVGFibGVGaW5kVjInOiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSBnZXRQYXJhbVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICd0YWJsZUhhbmRsZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZU1hbmFnZXIpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IGtleXMgPSBnZXRQYXJhbVZhbHVlKCdrZXlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlZmF1bHRWYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuXG4gICAgICBjb25zdCBoYXNoVGFibGUgPSByZXNvdXJjZU1hbmFnZXIuZ2V0SGFzaFRhYmxlQnlJZChoYW5kbGUuaWQpO1xuICAgICAgcmV0dXJuIFthd2FpdCBoYXNoVGFibGUuZmluZChrZXlzLCBkZWZhdWx0VmFsdWUpXTtcbiAgICB9XG4gICAgY2FzZSAnTG9va3VwVGFibGVTaXplJzpcbiAgICBjYXNlICdMb29rdXBUYWJsZVNpemVWMic6IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9IGdldFBhcmFtVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3RhYmxlSGFuZGxlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlTWFuYWdlcikgYXMgVGVuc29yO1xuXG4gICAgICBjb25zdCBoYXNoVGFibGUgPSByZXNvdXJjZU1hbmFnZXIuZ2V0SGFzaFRhYmxlQnlJZChoYW5kbGUuaWQpO1xuICAgICAgcmV0dXJuIFtoYXNoVGFibGUudGVuc29yU2l6ZSgpXTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdoYXNoX3RhYmxlJztcbiJdfQ==","/**\n * ExecutionContext captures the runtime environment of the node. It keeps\n * track of the current frame and iteration for the control flow ops.\n *\n * For example, typical Dynamic RNN model may contain loops, for which\n * TensorFlow will generate graphs with Enter/Exit nodes to control the\n * current execution frame, and NextIteration Nodes for iteration id increment.\n * For model with branch logic, TensorFLow will generate Switch/Merge ops.\n */\nexport class ExecutionContext {\n constructor(weightMap = {}, tensorArrayMap = {}, tensorListMap = {}, functionMap = {}, parseNodeNameCache) {\n this.weightMap = weightMap;\n this.tensorArrayMap = tensorArrayMap;\n this.tensorListMap = tensorListMap;\n this.functionMap = functionMap;\n this.parseNodeNameCache = parseNodeNameCache;\n this.rootContext = { id: 0, frameName: '', iterationId: 0 };\n this.contexts = [this.rootContext];\n this.lastId = 0;\n this.generateCurrentContextIds();\n }\n newFrame(id, frameName) {\n return { id, frameName, iterationId: 0 };\n }\n /**\n * Set the current context\n * @param contexts: ExecutionContextInfo[] the current path of execution\n * frames\n */\n set currentContext(contexts) {\n if (this.contexts !== contexts) {\n this.contexts = contexts;\n this.generateCurrentContextIds();\n }\n }\n get currentContext() {\n return this.contexts;\n }\n /**\n * Returns the current context in string format.\n */\n get currentContextId() {\n return this._currentContextIds[0];\n }\n /**\n * Returns the current context and all parent contexts in string format.\n * This allow access to the nodes in the current and parent frames.\n */\n get currentContextIds() {\n return this._currentContextIds;\n }\n generateCurrentContextIds() {\n const names = [];\n for (let i = 0; i < this.contexts.length - 1; i++) {\n const contexts = this.contexts.slice(0, this.contexts.length - i);\n names.push(this.contextIdforContexts(contexts));\n }\n names.push('');\n this._currentContextIds = names;\n }\n contextIdforContexts(contexts) {\n return contexts ?\n contexts\n .map(context => (context.id === 0 && context.iterationId === 0) ?\n '' :\n `${context.frameName}-${context.iterationId}`)\n .join('/') :\n '';\n }\n /**\n * Enter a new frame, a new context is pushed on the current context list.\n * @param frameId new frame id\n */\n enterFrame(frameId) {\n if (this.contexts) {\n this.lastId++;\n this.contexts = this.contexts.slice();\n this.contexts.push(this.newFrame(this.lastId, frameId));\n this._currentContextIds.unshift(this.contextIdforContexts(this.contexts));\n }\n }\n /**\n * Exit the current frame, the last context is removed from the current\n * context list.\n */\n exitFrame() {\n if (this.contexts && this.contexts.length > 1) {\n this.contexts = this.contexts.slice();\n this.contexts.splice(-1);\n this.currentContextIds.shift();\n }\n else {\n throw new Error('Cannot exit frame, the context is empty');\n }\n }\n /**\n * Enter the next iteration of a loop, the iteration id of last context is\n * increased.\n */\n nextIteration() {\n if (this.contexts && this.contexts.length > 0) {\n this.contexts = this.contexts.slice();\n this.lastId++;\n const context = Object.assign({}, this.contexts[this.contexts.length - 1]);\n context.iterationId += 1;\n context.id = this.lastId;\n this.contexts.splice(-1, 1, context);\n this._currentContextIds.splice(0, 1, this.contextIdforContexts(this.contexts));\n }\n else {\n throw new Error('Cannot increase frame iteration, the context is empty');\n }\n }\n getWeight(name) {\n return this.weightMap[name];\n }\n addTensorArray(tensorArray) {\n this.tensorArrayMap[tensorArray.id] = tensorArray;\n }\n getTensorArray(id) {\n return this.tensorArrayMap[id];\n }\n addTensorList(tensorList) {\n this.tensorListMap[tensorList.id] = tensorList;\n }\n getTensorList(id) {\n return this.tensorListMap[id];\n }\n dispose(keepIds) {\n for (const key in this.tensorArrayMap) {\n this.tensorArrayMap[key].clearAndClose(keepIds);\n }\n for (const key in this.tensorListMap) {\n this.tensorListMap[key].clearAndClose(keepIds);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX2NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQU0zQixZQUNhLFlBQTZCLEVBQUUsRUFDL0IsaUJBQWlDLEVBQUUsRUFDbkMsZ0JBQStCLEVBQUUsRUFDakMsY0FBaUQsRUFBRSxFQUNuRCxrQkFBMkQ7UUFKM0QsY0FBUyxHQUFULFNBQVMsQ0FBc0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQXFCO1FBQ25DLGtCQUFhLEdBQWIsYUFBYSxDQUFvQjtRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBd0M7UUFDbkQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF5QztRQVZoRSxnQkFBVyxHQUFHLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUMsQ0FBQztRQUNyRCxhQUFRLEdBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELFdBQU0sR0FBRyxDQUFDLENBQUM7UUFTakIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVPLFFBQVEsQ0FBQyxFQUFVLEVBQUUsU0FBaUI7UUFDNUMsT0FBTyxFQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxjQUFjLENBQUMsUUFBZ0M7UUFDakQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztTQUNsQztJQUNI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b0I7UUFDMUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwLCBUZW5zb3JBcnJheU1hcCwgVGVuc29yTGlzdE1hcH0gZnJvbSAnLi4vZGF0YS90eXBlcyc7XG5cbmltcG9ydCB7VGVuc29yQXJyYXl9IGZyb20gJy4vdGVuc29yX2FycmF5JztcbmltcG9ydCB7VGVuc29yTGlzdH0gZnJvbSAnLi90ZW5zb3JfbGlzdCc7XG5pbXBvcnQge0Z1bmN0aW9uRXhlY3V0b3J9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkNvbnRleHRJbmZvIHtcbiAgaWQ6IG51bWJlcjsgICAgICAgICAgIC8vIHRoZSB1bmlxdWUgaWQgb2YgdGhlIGNvbnRleHQgaW5mb1xuICBmcmFtZU5hbWU6IHN0cmluZzsgICAgLy8gVGhlIGZyYW1lIG5hbWUgb2YgdGhlIGxvb3AsIHRoaXMgY29tZXMgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFRlbnNvckZsb3cgTm9kZURlZi5cbiAgaXRlcmF0aW9uSWQ6IG51bWJlcjsgIC8vIFRoZSBpdGVyYXRpb24gaWQgb2YgdGhlIGxvb3Bcbn1cblxuLyoqXG4gKiBFeGVjdXRpb25Db250ZXh0IGNhcHR1cmVzIHRoZSBydW50aW1lIGVudmlyb25tZW50IG9mIHRoZSBub2RlLiBJdCBrZWVwc1xuICogdHJhY2sgb2YgdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGl0ZXJhdGlvbiBmb3IgdGhlIGNvbnRyb2wgZmxvdyBvcHMuXG4gKlxuICogRm9yIGV4YW1wbGUsIHR5cGljYWwgRHluYW1pYyBSTk4gbW9kZWwgbWF5IGNvbnRhaW4gbG9vcHMsIGZvciB3aGljaFxuICogVGVuc29yRmxvdyB3aWxsIGdlbmVyYXRlIGdyYXBocyB3aXRoIEVudGVyL0V4aXQgbm9kZXMgdG8gY29udHJvbCB0aGVcbiAqIGN1cnJlbnQgZXhlY3V0aW9uIGZyYW1lLCBhbmQgTmV4dEl0ZXJhdGlvbiBOb2RlcyBmb3IgaXRlcmF0aW9uIGlkIGluY3JlbWVudC5cbiAqIEZvciBtb2RlbCB3aXRoIGJyYW5jaCBsb2dpYywgVGVuc29yRkxvdyB3aWxsIGdlbmVyYXRlIFN3aXRjaC9NZXJnZSBvcHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25Db250ZXh0IHtcbiAgcHJpdmF0ZSByb290Q29udGV4dCA9IHtpZDogMCwgZnJhbWVOYW1lOiAnJywgaXRlcmF0aW9uSWQ6IDB9O1xuICBwcml2YXRlIGNvbnRleHRzOiBFeGVjdXRpb25Db250ZXh0SW5mb1tdID0gW3RoaXMucm9vdENvbnRleHRdO1xuICBwcml2YXRlIGxhc3RJZCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRDb250ZXh0SWRzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHJlYWRvbmx5IHdlaWdodE1hcDogTmFtZWRUZW5zb3JzTWFwID0ge30sXG4gICAgICByZWFkb25seSB0ZW5zb3JBcnJheU1hcDogVGVuc29yQXJyYXlNYXAgPSB7fSxcbiAgICAgIHJlYWRvbmx5IHRlbnNvckxpc3RNYXA6IFRlbnNvckxpc3RNYXAgPSB7fSxcbiAgICAgIHJlYWRvbmx5IGZ1bmN0aW9uTWFwOiB7W2tleTogc3RyaW5nXTogRnVuY3Rpb25FeGVjdXRvcn0gPSB7fSxcbiAgICAgIHJlYWRvbmx5IHBhcnNlTm9kZU5hbWVDYWNoZT86IE1hcDxzdHJpbmcsIFtzdHJpbmcsIG51bWJlciwgc3RyaW5nP10+KSB7XG4gICAgdGhpcy5nZW5lcmF0ZUN1cnJlbnRDb250ZXh0SWRzKCk7XG4gIH1cblxuICBwcml2YXRlIG5ld0ZyYW1lKGlkOiBudW1iZXIsIGZyYW1lTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtpZCwgZnJhbWVOYW1lLCBpdGVyYXRpb25JZDogMH07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IGNvbnRleHRcbiAgICogQHBhcmFtIGNvbnRleHRzOiBFeGVjdXRpb25Db250ZXh0SW5mb1tdIHRoZSBjdXJyZW50IHBhdGggb2YgZXhlY3V0aW9uXG4gICAqIGZyYW1lc1xuICAgKi9cbiAgc2V0IGN1cnJlbnRDb250ZXh0KGNvbnRleHRzOiBFeGVjdXRpb25Db250ZXh0SW5mb1tdKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dHMgIT09IGNvbnRleHRzKSB7XG4gICAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XG4gICAgICB0aGlzLmdlbmVyYXRlQ3VycmVudENvbnRleHRJZHMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudENvbnRleHQoKTogRXhlY3V0aW9uQ29udGV4dEluZm9bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBjb250ZXh0IGluIHN0cmluZyBmb3JtYXQuXG4gICAqL1xuICBnZXQgY3VycmVudENvbnRleHRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q29udGV4dElkc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIGFsbCBwYXJlbnQgY29udGV4dHMgaW4gc3RyaW5nIGZvcm1hdC5cbiAgICogVGhpcyBhbGxvdyBhY2Nlc3MgdG8gdGhlIG5vZGVzIGluIHRoZSBjdXJyZW50IGFuZCBwYXJlbnQgZnJhbWVzLlxuICAgKi9cbiAgZ2V0IGN1cnJlbnRDb250ZXh0SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudENvbnRleHRJZHM7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ3VycmVudENvbnRleHRJZHMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udGV4dHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IHRoaXMuY29udGV4dHMuc2xpY2UoMCwgdGhpcy5jb250ZXh0cy5sZW5ndGggLSBpKTtcbiAgICAgIG5hbWVzLnB1c2godGhpcy5jb250ZXh0SWRmb3JDb250ZXh0cyhjb250ZXh0cykpO1xuICAgIH1cbiAgICBuYW1lcy5wdXNoKCcnKTtcbiAgICB0aGlzLl9jdXJyZW50Q29udGV4dElkcyA9IG5hbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250ZXh0SWRmb3JDb250ZXh0cyhjb250ZXh0czogRXhlY3V0aW9uQ29udGV4dEluZm9bXSkge1xuICAgIHJldHVybiBjb250ZXh0cyA/XG4gICAgICAgIGNvbnRleHRzXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIGNvbnRleHQgPT4gKGNvbnRleHQuaWQgPT09IDAgJiYgY29udGV4dC5pdGVyYXRpb25JZCA9PT0gMCkgP1xuICAgICAgICAgICAgICAgICAgICAnJyA6XG4gICAgICAgICAgICAgICAgICAgIGAke2NvbnRleHQuZnJhbWVOYW1lfS0ke2NvbnRleHQuaXRlcmF0aW9uSWR9YClcbiAgICAgICAgICAgIC5qb2luKCcvJykgOlxuICAgICAgICAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnRlciBhIG5ldyBmcmFtZSwgYSBuZXcgY29udGV4dCBpcyBwdXNoZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dCBsaXN0LlxuICAgKiBAcGFyYW0gZnJhbWVJZCBuZXcgZnJhbWUgaWRcbiAgICovXG4gIGVudGVyRnJhbWUoZnJhbWVJZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dHMpIHtcbiAgICAgIHRoaXMubGFzdElkKys7XG4gICAgICB0aGlzLmNvbnRleHRzID0gdGhpcy5jb250ZXh0cy5zbGljZSgpO1xuICAgICAgdGhpcy5jb250ZXh0cy5wdXNoKHRoaXMubmV3RnJhbWUodGhpcy5sYXN0SWQsIGZyYW1lSWQpKTtcbiAgICAgIHRoaXMuX2N1cnJlbnRDb250ZXh0SWRzLnVuc2hpZnQodGhpcy5jb250ZXh0SWRmb3JDb250ZXh0cyh0aGlzLmNvbnRleHRzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4aXQgdGhlIGN1cnJlbnQgZnJhbWUsIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjdXJyZW50XG4gICAqIGNvbnRleHQgbGlzdC5cbiAgICovXG4gIGV4aXRGcmFtZSgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0cyAmJiB0aGlzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuY29udGV4dHMgPSB0aGlzLmNvbnRleHRzLnNsaWNlKCk7XG4gICAgICB0aGlzLmNvbnRleHRzLnNwbGljZSgtMSk7XG4gICAgICB0aGlzLmN1cnJlbnRDb250ZXh0SWRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4aXQgZnJhbWUsIHRoZSBjb250ZXh0IGlzIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVudGVyIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiBhIGxvb3AsIHRoZSBpdGVyYXRpb24gaWQgb2YgbGFzdCBjb250ZXh0IGlzXG4gICAqIGluY3JlYXNlZC5cbiAgICovXG4gIG5leHRJdGVyYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dHMgJiYgdGhpcy5jb250ZXh0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbnRleHRzID0gdGhpcy5jb250ZXh0cy5zbGljZSgpO1xuICAgICAgdGhpcy5sYXN0SWQrKztcbiAgICAgIGNvbnN0IGNvbnRleHQgPVxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29udGV4dHNbdGhpcy5jb250ZXh0cy5sZW5ndGggLSAxXSk7XG4gICAgICBjb250ZXh0Lml0ZXJhdGlvbklkICs9IDE7XG4gICAgICBjb250ZXh0LmlkID0gdGhpcy5sYXN0SWQ7XG4gICAgICB0aGlzLmNvbnRleHRzLnNwbGljZSgtMSwgMSwgY29udGV4dCk7XG4gICAgICB0aGlzLl9jdXJyZW50Q29udGV4dElkcy5zcGxpY2UoXG4gICAgICAgICAgMCwgMSwgdGhpcy5jb250ZXh0SWRmb3JDb250ZXh0cyh0aGlzLmNvbnRleHRzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGluY3JlYXNlIGZyYW1lIGl0ZXJhdGlvbiwgdGhlIGNvbnRleHQgaXMgZW1wdHknKTtcbiAgICB9XG4gIH1cblxuICBnZXRXZWlnaHQobmFtZTogc3RyaW5nKTogVGVuc29yW10ge1xuICAgIHJldHVybiB0aGlzLndlaWdodE1hcFtuYW1lXTtcbiAgfVxuXG4gIGFkZFRlbnNvckFycmF5KHRlbnNvckFycmF5OiBUZW5zb3JBcnJheSkge1xuICAgIHRoaXMudGVuc29yQXJyYXlNYXBbdGVuc29yQXJyYXkuaWRdID0gdGVuc29yQXJyYXk7XG4gIH1cblxuICBnZXRUZW5zb3JBcnJheShpZDogbnVtYmVyKTogVGVuc29yQXJyYXkge1xuICAgIHJldHVybiB0aGlzLnRlbnNvckFycmF5TWFwW2lkXTtcbiAgfVxuXG4gIGFkZFRlbnNvckxpc3QodGVuc29yTGlzdDogVGVuc29yTGlzdCkge1xuICAgIHRoaXMudGVuc29yTGlzdE1hcFt0ZW5zb3JMaXN0LmlkXSA9IHRlbnNvckxpc3Q7XG4gIH1cblxuICBnZXRUZW5zb3JMaXN0KGlkOiBudW1iZXIpOiBUZW5zb3JMaXN0IHtcbiAgICByZXR1cm4gdGhpcy50ZW5zb3JMaXN0TWFwW2lkXTtcbiAgfVxuXG4gIGRpc3Bvc2Uoa2VlcElkczogU2V0PG51bWJlcj4pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnRlbnNvckFycmF5TWFwKSB7XG4gICAgICB0aGlzLnRlbnNvckFycmF5TWFwW2tleV0uY2xlYXJBbmRDbG9zZShrZWVwSWRzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnRlbnNvckxpc3RNYXApIHtcbiAgICAgIHRoaXMudGVuc29yTGlzdE1hcFtrZXldLmNsZWFyQW5kQ2xvc2Uoa2VlcElkcyk7XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { parseNodeName } from '../operations/executors/utils';\n/**\n * Given graph inputs and desired outputs, find the minimal set of nodes\n * to execute in order to compute the outputs. In addition return other useful\n * info such:\n * - Missing inputs needed to compute the output.\n * - Whether the subgraph contains dynamic ops (control flow, dynamic shape).\n * - Alternative inputs in order to avoid async (dynamic op) execution.\n */\nexport function getExecutionSubgraph(inputs, outputs, weightMap, initNodes) {\n const usedNodes = new Set();\n const missingInputs = [];\n let dynamicNode = null;\n let syncInputs = null;\n // Start with the outputs, going backwards and find all the nodes that are\n // needed to compute those outputs.\n const seen = new Set();\n const inputNodeNames = new Set(Object.keys(inputs).map((name) => parseNodeName(name)[0]));\n initNodes = initNodes || [];\n const initNodeNames = new Set(initNodes.map((node) => parseNodeName(node.name)[0]));\n const frontier = [...outputs];\n while (frontier.length > 0) {\n const node = frontier.pop();\n if (isControlFlow(node) || isDynamicShape(node) || isHashTable(node)) {\n if (dynamicNode == null) {\n dynamicNode = node;\n syncInputs = dynamicNode.children.map(child => child.name)\n .filter(name => usedNodes.has(name));\n }\n }\n usedNodes.add(node.name);\n // Weights are dead end since we already have their values.\n if (weightMap[node.name] != null) {\n continue;\n }\n // This node is a dead end since it's one of the user-provided inputs.\n if (inputNodeNames.has(node.name)) {\n continue;\n }\n // This node is a dead end since it doesn't have any inputs.\n if (initNodeNames.has(node.name)) {\n continue;\n }\n if (node.inputs.length === 0) {\n missingInputs.push(node.name);\n continue;\n }\n node.inputs.forEach(input => {\n // Don't add to the frontier if it is already there.\n if (seen.has(input.name)) {\n return;\n }\n seen.add(input.name);\n frontier.push(input);\n });\n }\n return { inputs, outputs, usedNodes, missingInputs, dynamicNode, syncInputs };\n}\n/**\n * Given the execution info, return a list of nodes in topological order that\n * need to be executed to compute the output.\n */\nexport function getNodesInTopologicalOrder(graph, executionInfo) {\n const { usedNodes, inputs } = executionInfo;\n const inputNodes = Object.keys(inputs)\n .map(name => parseNodeName(name)[0])\n .map(name => graph.nodes[name]);\n const initNodes = graph.initNodes || [];\n const isUsed = (node) => usedNodes.has(typeof node === 'string' ? node : node.name);\n function unique(nodes) {\n return [...new Map(nodes.map((node) => [node.name, node])).values()];\n }\n const predefinedNodes = unique([\n ...inputNodes,\n ...graph.weights,\n ...initNodes,\n ]).filter(isUsed);\n const allNodes = unique([\n ...predefinedNodes,\n ...Object.values(graph.nodes),\n ]).filter(isUsed);\n const nameToNode = new Map(allNodes.map((node) => [node.name, node]));\n const inCounts = {};\n for (const node of allNodes) {\n inCounts[node.name] = inCounts[node.name] || 0;\n for (const child of node.children) {\n // When the child is unused, set in counts to infinity so that it will\n // never be decreased to 0 and added to the execution list.\n if (!isUsed(child)) {\n inCounts[child.name] = Number.POSITIVE_INFINITY;\n }\n inCounts[child.name] = (inCounts[child.name] || 0) + 1;\n }\n }\n // Build execution order for all used nodes regardless whether they are\n // predefined or not.\n const frontier = Object.entries(inCounts)\n .filter(([, inCount]) => inCount === 0)\n .map(([name]) => name);\n const orderedNodeNames = [...frontier];\n while (frontier.length > 0) {\n const nodeName = frontier.pop();\n const node = nameToNode.get(nodeName);\n for (const child of node.children.filter(isUsed)) {\n if (--inCounts[child.name] === 0) {\n orderedNodeNames.push(child.name);\n frontier.push(child.name);\n }\n }\n }\n const orderedNodes = orderedNodeNames.map((name) => nameToNode.get(name));\n const filteredOrderedNodes = filterPredefinedReachableNodes(orderedNodes, predefinedNodes);\n // TODO: Turn validation on/off with tf env flag.\n validateNodesExecutionOrder(filteredOrderedNodes, predefinedNodes);\n return filteredOrderedNodes;\n}\n/**\n * This is a helper function of `getNodesInTopologicalOrder`.\n * Returns ordered nodes reachable by at least one predefined node.\n * This can help us filter out redundant nodes from the returned node list.\n * For example:\n * If we have four nodes with dependencies like this:\n * a --> b --> c --> d\n * when node `c` is predefined (e.g. given as an input tensor), we can\n * skip node `a` and `b` since their outputs will never be used.\n *\n * @param orderedNodes Graph nodes in execution order.\n * @param predefinedNodes Graph inputs, weights, and init nodes. Nodes in this\n * list must have distinct names.\n */\nfunction filterPredefinedReachableNodes(orderedNodes, predefinedNodes) {\n const nameToNode = new Map(orderedNodes.map((node) => [node.name, node]));\n // TODO: Filter out more nodes when >=2 nodes are predefined in a path.\n const stack = predefinedNodes.map((node) => node.name);\n const predefinedReachableNodeNames = new Set(stack);\n // Perform a DFS starting from the set of all predefined nodes\n // to find the set of all nodes reachable from the predefined nodes.\n while (stack.length > 0) {\n const nodeName = stack.pop();\n const node = nameToNode.get(nodeName);\n for (const child of node.children) {\n if (!nameToNode.has(child.name) ||\n predefinedReachableNodeNames.has(child.name)) {\n continue;\n }\n predefinedReachableNodeNames.add(child.name);\n stack.push(child.name);\n }\n }\n // Filter out unreachable nodes and build the ordered node list.\n const filteredOrderedNodes = orderedNodes.filter((node) => predefinedReachableNodeNames.has(node.name));\n return filteredOrderedNodes;\n}\nclass NodesExecutionOrderError extends Error {\n constructor(message) {\n super(`NodesExecutionOrderError: ${message}`);\n }\n}\n/**\n * This is a helper function of `getNodesInTopologicalOrder`.\n * Validates property: given nodes `a` and `b`, Order(a) > Order(b) if `a`\n * is a child of `b`. This function throws an error if validation fails.\n *\n * @param orderedNodes Graph nodes in execution order.\n * @param predefinedNodes Graph inputs, weights, and init nodes. Nodes in this\n * list must have distinct names.\n */\nfunction validateNodesExecutionOrder(orderedNodes, predefinedNodes) {\n const nodeNameToOrder = new Map(orderedNodes.map((node, order) => [node.name, order]));\n const predefinedNodeNames = new Set(predefinedNodes.map((node) => node.name));\n const isPredefined = (node) => predefinedNodeNames.has(typeof node === 'string' ? node : node.name);\n const willBeExecutedNodeNames = new Set(orderedNodes.map((node) => node.name));\n const willBeExecuted = (node) => willBeExecutedNodeNames.has(typeof node === 'string' ? node : node.name);\n for (const node of orderedNodes) {\n for (const child of node.children.filter(willBeExecuted)) {\n if (!nodeNameToOrder.has(child.name)) {\n throw new NodesExecutionOrderError(`Child ${child.name} of node ${node.name} is unreachable.`);\n }\n if (nodeNameToOrder.get(node.name) > nodeNameToOrder.get(child.name)) {\n throw new NodesExecutionOrderError(`Node ${node.name} is scheduled to run after its child ${child.name}.`);\n }\n }\n if (!isPredefined(node)) {\n for (const input of node.inputs) {\n if (!nodeNameToOrder.has(input.name)) {\n throw new NodesExecutionOrderError(`Input ${input.name} of node ${node.name} is unreachable.`);\n }\n if (nodeNameToOrder.get(input.name) > nodeNameToOrder.get(node.name)) {\n throw new NodesExecutionOrderError(`Node ${node.name} is scheduled to run before its input ${input.name}.`);\n }\n }\n }\n }\n}\n/**\n * Given the execution info, return a map from node name to the disposable\n * node name list after its execution.\n *\n * @returns A map from node name to disposable nodes after its\n * execution. That is, for a node `x`, `nodeLiveUntilMap[x]` indicates\n * all nodes which their intermediate tensors should be disposed after `x`\n * being executed.\n */\nexport function getNodeLiveUntilMap(orderedNodes) {\n const nodeNameToOrder = new Map(orderedNodes.map((node, order) => [node.name, order]));\n const INF_LIFE = Number.MAX_SAFE_INTEGER;\n // Make control flow nodes (and consequently their direct parents)\n // live forever since they're tricky to track correctly.\n const selfLifespans = orderedNodes.map((node, nodeOrder) => isControlFlow(node) ? INF_LIFE : nodeOrder);\n const getSelfLifeSpan = (node) => {\n const selfLife = selfLifespans[nodeNameToOrder.get(node.name)];\n if (selfLife == null) {\n // If nodeToOrder does not contain the node, it is unused or\n // unreachable in graph.\n return -1;\n }\n return selfLife;\n };\n // `liveUntil[i]` points to the last node in the `orderedNodes` array that\n // may depend on tensors from node `i`. It indicates that all the\n // intermediate tensors from `orderedNodes[i]` should be disposed after\n // `orderedNodes[liveUntil[i]]` is executed.\n // A node lives long enough to pass on its tensors to its children.\n // It lives until at least `max(node's position, children's positions)`.\n const liveUntilOrders = orderedNodes.map((node, nodeOrder) => {\n return node.children.map(getSelfLifeSpan)\n .reduce((a, b) => Math.max(a, b), selfLifespans[nodeOrder]);\n });\n // liveUntilMap:\n // - Key: Name of a node `x`\n // - Values: All nodes whose intermediate tensors should be disposed\n // after `x` is executed.\n const liveUntilMap = new Map();\n for (let nodeOrder = 0; nodeOrder < orderedNodes.length; ++nodeOrder) {\n const liveUntilOrder = liveUntilOrders[nodeOrder];\n if (liveUntilOrder === INF_LIFE) {\n continue;\n }\n const node = orderedNodes[nodeOrder];\n const liveUntilNode = orderedNodes[liveUntilOrder];\n if (!liveUntilMap.has(liveUntilNode.name)) {\n liveUntilMap.set(liveUntilNode.name, []);\n }\n liveUntilMap.get(liveUntilNode.name).push(node);\n }\n return liveUntilMap;\n}\nconst CONTROL_FLOW_OPS = new Set([\n 'Switch', 'Merge', 'Enter', 'Exit', 'NextIteration', 'StatelessIf',\n 'StatelessWhile', 'if', 'While'\n]);\nconst DYNAMIC_SHAPE_OPS = new Set([\n 'NonMaxSuppressionV2', 'NonMaxSuppressionV3', 'NonMaxSuppressionV5', 'Where'\n]);\nconst HASH_TABLE_OPS = new Set([\n 'HashTable', 'HashTableV2', 'LookupTableImport', 'LookupTableImportV2',\n 'LookupTableFind', 'LookupTableFindV2', 'LookupTableSize', 'LookupTableSizeV2'\n]);\nexport function isControlFlow(node) {\n return CONTROL_FLOW_OPS.has(node.op);\n}\nexport function isDynamicShape(node) {\n return DYNAMIC_SHAPE_OPS.has(node.op);\n}\nexport function isHashTable(node) {\n return HASH_TABLE_OPS.has(node.op);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxfYW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvbW9kZWxfYW5hbHlzaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBWTVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLE1BQXNCLEVBQUUsT0FBZSxFQUFFLFNBQTBCLEVBQ25FLFNBQWtCO0lBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDcEMsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBQ25DLElBQUksV0FBVyxHQUFTLElBQUksQ0FBQztJQUM3QixJQUFJLFVBQVUsR0FBYSxJQUFJLENBQUM7SUFFaEMsMEVBQTBFO0lBQzFFLG1DQUFtQztJQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQy9CLE1BQU0sY0FBYyxHQUNoQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RSxTQUFTLEdBQUcsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUM1QixNQUFNLGFBQWEsR0FDZixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsRSxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDOUIsT0FBTyxR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TSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNoQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxPQUFPO0NBQzdFLENBQUMsQ0FBQztBQUNILE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzdCLFdBQVcsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCO0lBQ3RFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQjtDQUMvRSxDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVU7SUFDdEMsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQVU7SUFDdkMsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVU7SUFDcEMsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge3BhcnNlTm9kZU5hbWV9IGZyb20gJy4uL29wZXJhdGlvbnMvZXhlY3V0b3JzL3V0aWxzJztcbmltcG9ydCB7R3JhcGgsIE5vZGV9IGZyb20gJy4uL29wZXJhdGlvbnMvdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkluZm8ge1xuICBpbnB1dHM6IE5hbWVkVGVuc29yTWFwO1xuICBvdXRwdXRzOiBOb2RlW107XG4gIHVzZWROb2RlczogU2V0PHN0cmluZz47XG4gIG1pc3NpbmdJbnB1dHM6IHN0cmluZ1tdO1xuICBkeW5hbWljTm9kZTogTm9kZTtcbiAgc3luY0lucHV0czogc3RyaW5nW107XG59XG5cbi8qKlxuICogR2l2ZW4gZ3JhcGggaW5wdXRzIGFuZCBkZXNpcmVkIG91dHB1dHMsIGZpbmQgdGhlIG1pbmltYWwgc2V0IG9mIG5vZGVzXG4gKiB0byBleGVjdXRlIGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIG91dHB1dHMuIEluIGFkZGl0aW9uIHJldHVybiBvdGhlciB1c2VmdWxcbiAqIGluZm8gc3VjaDpcbiAqIC0gTWlzc2luZyBpbnB1dHMgbmVlZGVkIHRvIGNvbXB1dGUgdGhlIG91dHB1dC5cbiAqIC0gV2hldGhlciB0aGUgc3ViZ3JhcGggY29udGFpbnMgZHluYW1pYyBvcHMgKGNvbnRyb2wgZmxvdywgZHluYW1pYyBzaGFwZSkuXG4gKiAtIEFsdGVybmF0aXZlIGlucHV0cyBpbiBvcmRlciB0byBhdm9pZCBhc3luYyAoZHluYW1pYyBvcCkgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhlY3V0aW9uU3ViZ3JhcGgoXG4gICAgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCwgb3V0cHV0czogTm9kZVtdLCB3ZWlnaHRNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICBpbml0Tm9kZXM/OiBOb2RlW10pOiBFeGVjdXRpb25JbmZvIHtcbiAgY29uc3QgdXNlZE5vZGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG1pc3NpbmdJbnB1dHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBkeW5hbWljTm9kZTogTm9kZSA9IG51bGw7XG4gIGxldCBzeW5jSW5wdXRzOiBzdHJpbmdbXSA9IG51bGw7XG5cbiAgLy8gU3RhcnQgd2l0aCB0aGUgb3V0cHV0cywgZ29pbmcgYmFja3dhcmRzIGFuZCBmaW5kIGFsbCB0aGUgbm9kZXMgdGhhdCBhcmVcbiAgLy8gbmVlZGVkIHRvIGNvbXB1dGUgdGhvc2Ugb3V0cHV0cy5cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBpbnB1dE5vZGVOYW1lcyA9XG4gICAgICBuZXcgU2V0KE9iamVjdC5rZXlzKGlucHV0cykubWFwKChuYW1lKSA9PiBwYXJzZU5vZGVOYW1lKG5hbWUpWzBdKSk7XG5cbiAgaW5pdE5vZGVzID0gaW5pdE5vZGVzIHx8IFtdO1xuICBjb25zdCBpbml0Tm9kZU5hbWVzID1cbiAgICAgIG5ldyBTZXQoaW5pdE5vZGVzLm1hcCgobm9kZSkgPT4gcGFyc2VOb2RlTmFtZShub2RlLm5hbWUpWzBdKSk7XG5cbiAgY29uc3QgZnJvbnRpZXIgPSBbLi4ub3V0cHV0c107XG4gIHdoaWxlIChmcm9udGllci5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IGZyb250aWVyLnBvcCgpO1xuICAgIGlmIChpc0NvbnRyb2xGbG93KG5vZGUpIHx8IGlzRHluYW1pY1NoYXBlKG5vZGUpIHx8IGlzSGFzaFRhYmxlKG5vZGUpKSB7XG4gICAgICBpZiAoZHluYW1pY05vZGUgPT0gbnVsbCkge1xuICAgICAgICBkeW5hbWljTm9kZSA9IG5vZGU7XG4gICAgICAgIHN5bmNJbnB1dHMgPSBkeW5hbWljTm9kZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG5hbWUgPT4gdXNlZE5vZGVzLmhhcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHVzZWROb2Rlcy5hZGQobm9kZS5uYW1lKTtcblxuICAgIC8vIFdlaWdodHMgYXJlIGRlYWQgZW5kIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGVpciB2YWx1ZXMuXG4gICAgaWYgKHdlaWdodE1hcFtub2RlLm5hbWVdICE9IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBUaGlzIG5vZGUgaXMgYSBkZWFkIGVuZCBzaW5jZSBpdCdzIG9uZSBvZiB0aGUgdXNlci1wcm92aWRlZCBpbnB1dHMuXG4gICAgaWYgKGlucHV0Tm9kZU5hbWVzLmhhcyhub2RlLm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gVGhpcyBub2RlIGlzIGEgZGVhZCBlbmQgc2luY2UgaXQgZG9lc24ndCBoYXZlIGFueSBpbnB1dHMuXG4gICAgaWYgKGluaXROb2RlTmFtZXMuaGFzKG5vZGUubmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBtaXNzaW5nSW5wdXRzLnB1c2gobm9kZS5uYW1lKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBub2RlLmlucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgIC8vIERvbid0IGFkZCB0byB0aGUgZnJvbnRpZXIgaWYgaXQgaXMgYWxyZWFkeSB0aGVyZS5cbiAgICAgIGlmIChzZWVuLmhhcyhpbnB1dC5uYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChpbnB1dC5uYW1lKTtcbiAgICAgIGZyb250aWVyLnB1c2goaW5wdXQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7aW5wdXRzLCBvdXRwdXRzLCB1c2VkTm9kZXMsIG1pc3NpbmdJbnB1dHMsIGR5bmFtaWNOb2RlLCBzeW5jSW5wdXRzfTtcbn1cblxuLyoqXG4gKiBHaXZlbiB0aGUgZXhlY3V0aW9uIGluZm8sIHJldHVybiBhIGxpc3Qgb2Ygbm9kZXMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgdGhhdFxuICogbmVlZCB0byBiZSBleGVjdXRlZCB0byBjb21wdXRlIHRoZSBvdXRwdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2Rlc0luVG9wb2xvZ2ljYWxPcmRlcihcbiAgICBncmFwaDogR3JhcGgsIGV4ZWN1dGlvbkluZm86IEV4ZWN1dGlvbkluZm8pOiBOb2RlW10ge1xuICBjb25zdCB7dXNlZE5vZGVzLCBpbnB1dHN9ID0gZXhlY3V0aW9uSW5mbztcbiAgY29uc3QgaW5wdXROb2RlcyA9IE9iamVjdC5rZXlzKGlucHV0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKG5hbWUgPT4gcGFyc2VOb2RlTmFtZShuYW1lKVswXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKG5hbWUgPT4gZ3JhcGgubm9kZXNbbmFtZV0pO1xuICBjb25zdCBpbml0Tm9kZXMgPSBncmFwaC5pbml0Tm9kZXMgfHwgW107XG5cbiAgY29uc3QgaXNVc2VkID0gKG5vZGU6IE5vZGV8c3RyaW5nKSA9PlxuICAgICAgdXNlZE5vZGVzLmhhcyh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5uYW1lKTtcblxuICBmdW5jdGlvbiB1bmlxdWUobm9kZXM6IE5vZGVbXSk6IE5vZGVbXSB7XG4gICAgcmV0dXJuIFsuLi5uZXcgTWFwKG5vZGVzLm1hcCgobm9kZSkgPT4gW25vZGUubmFtZSwgbm9kZV0pKS52YWx1ZXMoKV07XG4gIH1cbiAgY29uc3QgcHJlZGVmaW5lZE5vZGVzID0gdW5pcXVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnB1dE5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyYXBoLndlaWdodHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaW5pdE5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKS5maWx0ZXIoaXNVc2VkKTtcbiAgY29uc3QgYWxsTm9kZXMgPSB1bmlxdWUoW1xuICAgICAgICAgICAgICAgICAgICAgLi4ucHJlZGVmaW5lZE5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhncmFwaC5ub2RlcyksXG4gICAgICAgICAgICAgICAgICAgXSkuZmlsdGVyKGlzVXNlZCk7XG4gIGNvbnN0IG5hbWVUb05vZGUgPVxuICAgICAgbmV3IE1hcDxzdHJpbmcsIE5vZGU+KGFsbE5vZGVzLm1hcCgobm9kZSkgPT4gW25vZGUubmFtZSwgbm9kZV0pKTtcblxuICBjb25zdCBpbkNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgYWxsTm9kZXMpIHtcbiAgICBpbkNvdW50c1tub2RlLm5hbWVdID0gaW5Db3VudHNbbm9kZS5uYW1lXSB8fCAwO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgLy8gV2hlbiB0aGUgY2hpbGQgaXMgdW51c2VkLCBzZXQgaW4gY291bnRzIHRvIGluZmluaXR5IHNvIHRoYXQgaXQgd2lsbFxuICAgICAgLy8gbmV2ZXIgYmUgZGVjcmVhc2VkIHRvIDAgYW5kIGFkZGVkIHRvIHRoZSBleGVjdXRpb24gbGlzdC5cbiAgICAgIGlmICghaXNVc2VkKGNoaWxkKSkge1xuICAgICAgICBpbkNvdW50c1tjaGlsZC5uYW1lXSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIH1cbiAgICAgIGluQ291bnRzW2NoaWxkLm5hbWVdID0gKGluQ291bnRzW2NoaWxkLm5hbWVdIHx8IDApICsgMTtcbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCBleGVjdXRpb24gb3JkZXIgZm9yIGFsbCB1c2VkIG5vZGVzIHJlZ2FyZGxlc3Mgd2hldGhlciB0aGV5IGFyZVxuICAvLyBwcmVkZWZpbmVkIG9yIG5vdC5cbiAgY29uc3QgZnJvbnRpZXIgPSBPYmplY3QuZW50cmllcyhpbkNvdW50cylcbiAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoWywgaW5Db3VudF0pID0+IGluQ291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKFtuYW1lXSkgPT4gbmFtZSk7XG4gIGNvbnN0IG9yZGVyZWROb2RlTmFtZXMgPSBbLi4uZnJvbnRpZXJdO1xuICB3aGlsZSAoZnJvbnRpZXIubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGVOYW1lID0gZnJvbnRpZXIucG9wKCk7XG4gICAgY29uc3Qgbm9kZSA9IG5hbWVUb05vZGUuZ2V0KG5vZGVOYW1lKSE7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLmZpbHRlcihpc1VzZWQpKSB7XG4gICAgICBpZiAoLS1pbkNvdW50c1tjaGlsZC5uYW1lXSA9PT0gMCkge1xuICAgICAgICBvcmRlcmVkTm9kZU5hbWVzLnB1c2goY2hpbGQubmFtZSk7XG4gICAgICAgIGZyb250aWVyLnB1c2goY2hpbGQubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JkZXJlZE5vZGVzID0gb3JkZXJlZE5vZGVOYW1lcy5tYXAoKG5hbWUpID0+IG5hbWVUb05vZGUuZ2V0KG5hbWUpKTtcbiAgY29uc3QgZmlsdGVyZWRPcmRlcmVkTm9kZXMgPVxuICAgICAgZmlsdGVyUHJlZGVmaW5lZFJlYWNoYWJsZU5vZGVzKG9yZGVyZWROb2RlcywgcHJlZGVmaW5lZE5vZGVzKTtcblxuICAvLyBUT0RPOiBUdXJuIHZhbGlkYXRpb24gb24vb2ZmIHdpdGggdGYgZW52IGZsYWcuXG4gIHZhbGlkYXRlTm9kZXNFeGVjdXRpb25PcmRlcihmaWx0ZXJlZE9yZGVyZWROb2RlcywgcHJlZGVmaW5lZE5vZGVzKTtcblxuICByZXR1cm4gZmlsdGVyZWRPcmRlcmVkTm9kZXM7XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBvZiBgZ2V0Tm9kZXNJblRvcG9sb2dpY2FsT3JkZXJgLlxuICogUmV0dXJucyBvcmRlcmVkIG5vZGVzIHJlYWNoYWJsZSBieSBhdCBsZWFzdCBvbmUgcHJlZGVmaW5lZCBub2RlLlxuICogVGhpcyBjYW4gaGVscCB1cyBmaWx0ZXIgb3V0IHJlZHVuZGFudCBub2RlcyBmcm9tIHRoZSByZXR1cm5lZCBub2RlIGxpc3QuXG4gKiBGb3IgZXhhbXBsZTpcbiAqIElmIHdlIGhhdmUgZm91ciBub2RlcyB3aXRoIGRlcGVuZGVuY2llcyBsaWtlIHRoaXM6XG4gKiAgIGEgLS0+IGIgLS0+IGMgLS0+IGRcbiAqIHdoZW4gbm9kZSBgY2AgaXMgcHJlZGVmaW5lZCAoZS5nLiBnaXZlbiBhcyBhbiBpbnB1dCB0ZW5zb3IpLCB3ZSBjYW5cbiAqIHNraXAgbm9kZSBgYWAgYW5kIGBiYCBzaW5jZSB0aGVpciBvdXRwdXRzIHdpbGwgbmV2ZXIgYmUgdXNlZC5cbiAqXG4gKiBAcGFyYW0gb3JkZXJlZE5vZGVzIEdyYXBoIG5vZGVzIGluIGV4ZWN1dGlvbiBvcmRlci5cbiAqIEBwYXJhbSBwcmVkZWZpbmVkTm9kZXMgR3JhcGggaW5wdXRzLCB3ZWlnaHRzLCBhbmQgaW5pdCBub2Rlcy4gTm9kZXMgaW4gdGhpc1xuICogICAgIGxpc3QgbXVzdCBoYXZlIGRpc3RpbmN0IG5hbWVzLlxuICovXG5mdW5jdGlvbiBmaWx0ZXJQcmVkZWZpbmVkUmVhY2hhYmxlTm9kZXMoXG4gICAgb3JkZXJlZE5vZGVzOiBOb2RlW10sIHByZWRlZmluZWROb2RlczogTm9kZVtdKSB7XG4gIGNvbnN0IG5hbWVUb05vZGUgPVxuICAgICAgbmV3IE1hcDxzdHJpbmcsIE5vZGU+KG9yZGVyZWROb2Rlcy5tYXAoKG5vZGUpID0+IFtub2RlLm5hbWUsIG5vZGVdKSk7XG5cbiAgLy8gVE9ETzogRmlsdGVyIG91dCBtb3JlIG5vZGVzIHdoZW4gPj0yIG5vZGVzIGFyZSBwcmVkZWZpbmVkIGluIGEgcGF0aC5cbiAgY29uc3Qgc3RhY2sgPSBwcmVkZWZpbmVkTm9kZXMubWFwKChub2RlKSA9PiBub2RlLm5hbWUpO1xuICBjb25zdCBwcmVkZWZpbmVkUmVhY2hhYmxlTm9kZU5hbWVzID0gbmV3IFNldChzdGFjayk7XG4gIC8vIFBlcmZvcm0gYSBERlMgc3RhcnRpbmcgZnJvbSB0aGUgc2V0IG9mIGFsbCBwcmVkZWZpbmVkIG5vZGVzXG4gIC8vIHRvIGZpbmQgdGhlIHNldCBvZiBhbGwgbm9kZXMgcmVhY2hhYmxlIGZyb20gdGhlIHByZWRlZmluZWQgbm9kZXMuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZU5hbWUgPSBzdGFjay5wb3AoKTtcbiAgICBjb25zdCBub2RlID0gbmFtZVRvTm9kZS5nZXQobm9kZU5hbWUpITtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGlmICghbmFtZVRvTm9kZS5oYXMoY2hpbGQubmFtZSkgfHxcbiAgICAgICAgICBwcmVkZWZpbmVkUmVhY2hhYmxlTm9kZU5hbWVzLmhhcyhjaGlsZC5uYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByZWRlZmluZWRSZWFjaGFibGVOb2RlTmFtZXMuYWRkKGNoaWxkLm5hbWUpO1xuICAgICAgc3RhY2sucHVzaChjaGlsZC5uYW1lKTtcbiAgICB9XG4gIH1cblxuICAvLyBGaWx0ZXIgb3V0IHVucmVhY2hhYmxlIG5vZGVzIGFuZCBidWlsZCB0aGUgb3JkZXJlZCBub2RlIGxpc3QuXG4gIGNvbnN0IGZpbHRlcmVkT3JkZXJlZE5vZGVzID0gb3JkZXJlZE5vZGVzLmZpbHRlcihcbiAgICAgIChub2RlKSA9PiBwcmVkZWZpbmVkUmVhY2hhYmxlTm9kZU5hbWVzLmhhcyhub2RlLm5hbWUpKTtcblxuICByZXR1cm4gZmlsdGVyZWRPcmRlcmVkTm9kZXM7XG59XG5cbmNsYXNzIE5vZGVzRXhlY3V0aW9uT3JkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYE5vZGVzRXhlY3V0aW9uT3JkZXJFcnJvcjogJHttZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBvZiBgZ2V0Tm9kZXNJblRvcG9sb2dpY2FsT3JkZXJgLlxuICogVmFsaWRhdGVzIHByb3BlcnR5OiBnaXZlbiBub2RlcyBgYWAgYW5kIGBiYCwgT3JkZXIoYSkgPiBPcmRlcihiKSBpZiBgYWBcbiAqIGlzIGEgY2hpbGQgb2YgYGJgLiBUaGlzIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICpcbiAqIEBwYXJhbSBvcmRlcmVkTm9kZXMgR3JhcGggbm9kZXMgaW4gZXhlY3V0aW9uIG9yZGVyLlxuICogQHBhcmFtIHByZWRlZmluZWROb2RlcyBHcmFwaCBpbnB1dHMsIHdlaWdodHMsIGFuZCBpbml0IG5vZGVzLiBOb2RlcyBpbiB0aGlzXG4gKiAgICAgbGlzdCBtdXN0IGhhdmUgZGlzdGluY3QgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTm9kZXNFeGVjdXRpb25PcmRlcihcbiAgICBvcmRlcmVkTm9kZXM6IE5vZGVbXSwgcHJlZGVmaW5lZE5vZGVzOiBOb2RlW10pIHtcbiAgY29uc3Qgbm9kZU5hbWVUb09yZGVyID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oXG4gICAgICBvcmRlcmVkTm9kZXMubWFwKChub2RlLCBvcmRlcikgPT4gW25vZGUubmFtZSwgb3JkZXJdKSk7XG4gIGNvbnN0IHByZWRlZmluZWROb2RlTmFtZXMgPSBuZXcgU2V0KHByZWRlZmluZWROb2Rlcy5tYXAoKG5vZGUpID0+IG5vZGUubmFtZSkpO1xuICBjb25zdCBpc1ByZWRlZmluZWQgPSAobm9kZTogTm9kZXxzdHJpbmcpID0+XG4gICAgICBwcmVkZWZpbmVkTm9kZU5hbWVzLmhhcyh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5uYW1lKTtcbiAgY29uc3Qgd2lsbEJlRXhlY3V0ZWROb2RlTmFtZXMgPVxuICAgICAgbmV3IFNldChvcmRlcmVkTm9kZXMubWFwKChub2RlKSA9PiBub2RlLm5hbWUpKTtcbiAgY29uc3Qgd2lsbEJlRXhlY3V0ZWQgPSAobm9kZTogTm9kZXxzdHJpbmcpID0+XG4gICAgICB3aWxsQmVFeGVjdXRlZE5vZGVOYW1lcy5oYXModHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubmFtZSk7XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIG9yZGVyZWROb2Rlcykge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi5maWx0ZXIod2lsbEJlRXhlY3V0ZWQpKSB7XG4gICAgICBpZiAoIW5vZGVOYW1lVG9PcmRlci5oYXMoY2hpbGQubmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vZGVzRXhlY3V0aW9uT3JkZXJFcnJvcihcbiAgICAgICAgICAgIGBDaGlsZCAke2NoaWxkLm5hbWV9IG9mIG5vZGUgJHtub2RlLm5hbWV9IGlzIHVucmVhY2hhYmxlLmApO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGVOYW1lVG9PcmRlci5nZXQobm9kZS5uYW1lKSA+IG5vZGVOYW1lVG9PcmRlci5nZXQoY2hpbGQubmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vZGVzRXhlY3V0aW9uT3JkZXJFcnJvcihgTm9kZSAke1xuICAgICAgICAgICAgbm9kZS5uYW1lfSBpcyBzY2hlZHVsZWQgdG8gcnVuIGFmdGVyIGl0cyBjaGlsZCAke2NoaWxkLm5hbWV9LmApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzUHJlZGVmaW5lZChub2RlKSkge1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBub2RlLmlucHV0cykge1xuICAgICAgICBpZiAoIW5vZGVOYW1lVG9PcmRlci5oYXMoaW5wdXQubmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9kZXNFeGVjdXRpb25PcmRlckVycm9yKFxuICAgICAgICAgICAgICBgSW5wdXQgJHtpbnB1dC5uYW1lfSBvZiBub2RlICR7bm9kZS5uYW1lfSBpcyB1bnJlYWNoYWJsZS5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZU5hbWVUb09yZGVyLmdldChpbnB1dC5uYW1lKSA+IG5vZGVOYW1lVG9PcmRlci5nZXQobm9kZS5uYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBOb2Rlc0V4ZWN1dGlvbk9yZGVyRXJyb3IoYE5vZGUgJHtcbiAgICAgICAgICAgICAgbm9kZS5uYW1lfSBpcyBzY2hlZHVsZWQgdG8gcnVuIGJlZm9yZSBpdHMgaW5wdXQgJHtpbnB1dC5uYW1lfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIHRoZSBleGVjdXRpb24gaW5mbywgcmV0dXJuIGEgbWFwIGZyb20gbm9kZSBuYW1lIHRvIHRoZSBkaXNwb3NhYmxlXG4gKiBub2RlIG5hbWUgbGlzdCBhZnRlciBpdHMgZXhlY3V0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgbWFwIGZyb20gbm9kZSBuYW1lIHRvIGRpc3Bvc2FibGUgbm9kZXMgYWZ0ZXIgaXRzXG4gKiAgICAgZXhlY3V0aW9uLiBUaGF0IGlzLCBmb3IgYSBub2RlIGB4YCwgYG5vZGVMaXZlVW50aWxNYXBbeF1gIGluZGljYXRlc1xuICogICAgIGFsbCBub2RlcyB3aGljaCB0aGVpciBpbnRlcm1lZGlhdGUgdGVuc29ycyBzaG91bGQgYmUgZGlzcG9zZWQgYWZ0ZXIgYHhgXG4gKiAgICAgYmVpbmcgZXhlY3V0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlTGl2ZVVudGlsTWFwKG9yZGVyZWROb2RlczogTm9kZVtdKTogTWFwPHN0cmluZywgTm9kZVtdPiB7XG4gIGNvbnN0IG5vZGVOYW1lVG9PcmRlciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KFxuICAgICAgb3JkZXJlZE5vZGVzLm1hcCgobm9kZSwgb3JkZXIpID0+IFtub2RlLm5hbWUsIG9yZGVyXSkpO1xuXG4gIGNvbnN0IElORl9MSUZFID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gIC8vIE1ha2UgY29udHJvbCBmbG93IG5vZGVzIChhbmQgY29uc2VxdWVudGx5IHRoZWlyIGRpcmVjdCBwYXJlbnRzKVxuICAvLyBsaXZlIGZvcmV2ZXIgc2luY2UgdGhleSdyZSB0cmlja3kgdG8gdHJhY2sgY29ycmVjdGx5LlxuICBjb25zdCBzZWxmTGlmZXNwYW5zID0gb3JkZXJlZE5vZGVzLm1hcChcbiAgICAgIChub2RlLCBub2RlT3JkZXIpID0+IGlzQ29udHJvbEZsb3cobm9kZSkgPyBJTkZfTElGRSA6IG5vZGVPcmRlcik7XG4gIGNvbnN0IGdldFNlbGZMaWZlU3BhbiA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgY29uc3Qgc2VsZkxpZmUgPSBzZWxmTGlmZXNwYW5zW25vZGVOYW1lVG9PcmRlci5nZXQobm9kZS5uYW1lKSFdO1xuICAgIGlmIChzZWxmTGlmZSA9PSBudWxsKSB7XG4gICAgICAvLyBJZiBub2RlVG9PcmRlciBkb2VzIG5vdCBjb250YWluIHRoZSBub2RlLCBpdCBpcyB1bnVzZWQgb3JcbiAgICAgIC8vIHVucmVhY2hhYmxlIGluIGdyYXBoLlxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZkxpZmU7XG4gIH07XG5cbiAgLy8gYGxpdmVVbnRpbFtpXWAgcG9pbnRzIHRvIHRoZSBsYXN0IG5vZGUgaW4gdGhlIGBvcmRlcmVkTm9kZXNgIGFycmF5IHRoYXRcbiAgLy8gbWF5IGRlcGVuZCBvbiB0ZW5zb3JzIGZyb20gbm9kZSBgaWAuIEl0IGluZGljYXRlcyB0aGF0IGFsbCB0aGVcbiAgLy8gaW50ZXJtZWRpYXRlIHRlbnNvcnMgZnJvbSBgb3JkZXJlZE5vZGVzW2ldYCBzaG91bGQgYmUgZGlzcG9zZWQgYWZ0ZXJcbiAgLy8gYG9yZGVyZWROb2Rlc1tsaXZlVW50aWxbaV1dYCBpcyBleGVjdXRlZC5cbiAgLy8gQSBub2RlIGxpdmVzIGxvbmcgZW5vdWdoIHRvIHBhc3Mgb24gaXRzIHRlbnNvcnMgdG8gaXRzIGNoaWxkcmVuLlxuICAvLyBJdCBsaXZlcyB1bnRpbCBhdCBsZWFzdCBgbWF4KG5vZGUncyBwb3NpdGlvbiwgY2hpbGRyZW4ncyBwb3NpdGlvbnMpYC5cbiAgY29uc3QgbGl2ZVVudGlsT3JkZXJzID0gb3JkZXJlZE5vZGVzLm1hcCgobm9kZSwgbm9kZU9yZGVyKSA9PiB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ubWFwKGdldFNlbGZMaWZlU3BhbilcbiAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYiksIHNlbGZMaWZlc3BhbnNbbm9kZU9yZGVyXSk7XG4gIH0pO1xuXG4gIC8vIGxpdmVVbnRpbE1hcDpcbiAgLy8gLSBLZXk6IE5hbWUgb2YgYSBub2RlIGB4YFxuICAvLyAtIFZhbHVlczogQWxsIG5vZGVzIHdob3NlIGludGVybWVkaWF0ZSB0ZW5zb3JzIHNob3VsZCBiZSBkaXNwb3NlZFxuICAvLyAgICAgICAgICAgYWZ0ZXIgYHhgIGlzIGV4ZWN1dGVkLlxuICBjb25zdCBsaXZlVW50aWxNYXAgPSBuZXcgTWFwPHN0cmluZywgTm9kZVtdPigpO1xuICBmb3IgKGxldCBub2RlT3JkZXIgPSAwOyBub2RlT3JkZXIgPCBvcmRlcmVkTm9kZXMubGVuZ3RoOyArK25vZGVPcmRlcikge1xuICAgIGNvbnN0IGxpdmVVbnRpbE9yZGVyID0gbGl2ZVVudGlsT3JkZXJzW25vZGVPcmRlcl07XG4gICAgaWYgKGxpdmVVbnRpbE9yZGVyID09PSBJTkZfTElGRSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSBvcmRlcmVkTm9kZXNbbm9kZU9yZGVyXTtcbiAgICBjb25zdCBsaXZlVW50aWxOb2RlID0gb3JkZXJlZE5vZGVzW2xpdmVVbnRpbE9yZGVyXTtcbiAgICBpZiAoIWxpdmVVbnRpbE1hcC5oYXMobGl2ZVVudGlsTm9kZS5uYW1lKSkge1xuICAgICAgbGl2ZVVudGlsTWFwLnNldChsaXZlVW50aWxOb2RlLm5hbWUsIFtdKTtcbiAgICB9XG4gICAgbGl2ZVVudGlsTWFwLmdldChsaXZlVW50aWxOb2RlLm5hbWUpIS5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBsaXZlVW50aWxNYXA7XG59XG5cbmNvbnN0IENPTlRST0xfRkxPV19PUFMgPSBuZXcgU2V0KFtcbiAgJ1N3aXRjaCcsICdNZXJnZScsICdFbnRlcicsICdFeGl0JywgJ05leHRJdGVyYXRpb24nLCAnU3RhdGVsZXNzSWYnLFxuICAnU3RhdGVsZXNzV2hpbGUnLCAnaWYnLCAnV2hpbGUnXG5dKTtcbmNvbnN0IERZTkFNSUNfU0hBUEVfT1BTID0gbmV3IFNldChbXG4gICdOb25NYXhTdXBwcmVzc2lvblYyJywgJ05vbk1heFN1cHByZXNzaW9uVjMnLCAnTm9uTWF4U3VwcHJlc3Npb25WNScsICdXaGVyZSdcbl0pO1xuY29uc3QgSEFTSF9UQUJMRV9PUFMgPSBuZXcgU2V0KFtcbiAgJ0hhc2hUYWJsZScsICdIYXNoVGFibGVWMicsICdMb29rdXBUYWJsZUltcG9ydCcsICdMb29rdXBUYWJsZUltcG9ydFYyJyxcbiAgJ0xvb2t1cFRhYmxlRmluZCcsICdMb29rdXBUYWJsZUZpbmRWMicsICdMb29rdXBUYWJsZVNpemUnLCAnTG9va3VwVGFibGVTaXplVjInXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udHJvbEZsb3cobm9kZTogTm9kZSkge1xuICByZXR1cm4gQ09OVFJPTF9GTE9XX09QUy5oYXMobm9kZS5vcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtaWNTaGFwZShub2RlOiBOb2RlKSB7XG4gIHJldHVybiBEWU5BTUlDX1NIQVBFX09QUy5oYXMobm9kZS5vcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hhc2hUYWJsZShub2RlOiBOb2RlKSB7XG4gIHJldHVybiBIQVNIX1RBQkxFX09QUy5oYXMobm9kZS5vcCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, keep, tidy, util } from '@tensorflow/tfjs-core';\nimport { getNodeNameAndIndex, getParamValue, getTensor, getTensorsForCurrentContext, parseNodeName } from '../operations/executors/utils';\nimport { executeOp } from '../operations/operation_executor';\nimport { ExecutionContext } from './execution_context';\nimport { getExecutionSubgraph, getNodeLiveUntilMap, getNodesInTopologicalOrder, isControlFlow } from './model_analysis';\nexport class GraphExecutor {\n get weightIds() {\n return this.parent ? this.parent.weightIds : this._weightIds;\n }\n get functionExecutorMap() {\n return this.parent ? this.parent.functionExecutorMap :\n this._functionExecutorMap;\n }\n get weightMap() {\n return this.parent ? this.parent.weightMap : this._weightMap;\n }\n set weightMap(weightMap) {\n const weightIds = Object.keys(weightMap).map(key => weightMap[key].map(tensor => tensor.id));\n this._weightIds = [].concat(...weightIds);\n this._weightMap = weightMap;\n }\n /**\n * Set `ResourceManager` shared by executors of a model.\n * @param resourceManager: `ResourceManager` of the `GraphModel`.\n */\n set resourceManager(resourceManager) {\n this._resourceManager = resourceManager;\n }\n get inputs() {\n return this._inputs.map(node => {\n return {\n name: node.name,\n shape: node.attrParams['shape'] ?\n node.attrParams['shape'].value :\n undefined,\n dtype: node.attrParams['dtype'] ?\n node.attrParams['dtype'].value :\n undefined\n };\n });\n }\n get outputs() {\n return this._outputs.map(node => {\n return {\n name: node.name,\n shape: node.attrParams['shape'] ?\n node.attrParams['shape'].value :\n undefined,\n dtype: node.attrParams['dtype'] ?\n node.attrParams['dtype'].value :\n undefined\n };\n });\n }\n get inputNodes() {\n return this._inputs.map(node => node.signatureKey || node.name);\n }\n get outputNodes() {\n return this._outputs.map((node) => {\n const name = node.signatureKey || node.name;\n return node.defaultOutput ? (`${name}:${node.defaultOutput}`) : name;\n });\n }\n get functions() {\n return Object.keys(this._functions).reduce((map, key) => {\n map[key] = this._functions[key].signature;\n return map;\n }, {});\n }\n /**\n *\n * @param graph Graph the model or function graph to be executed.\n * @param parent When building function exector you need to set the parent\n * executor. Since the weights and function executor maps are set at parant\n * level, that function executor can access the function maps and weight maps\n * through the parent.\n */\n constructor(graph, parent) {\n this.graph = graph;\n this.parent = parent;\n this.compiledMap = new Map();\n this.parseNodeNameCache = new Map();\n this._weightMap = {};\n this.SEPARATOR = ',';\n this._functions = {};\n this._functionExecutorMap = {};\n this.keepIntermediateTensors = false;\n this._outputs = graph.outputs;\n this._inputs = graph.inputs;\n this._initNodes = graph.initNodes;\n this._signature = graph.signature;\n this._functions = graph.functions;\n // create sub-graph executors\n if (graph.functions != null) {\n Object.keys(graph.functions).forEach(name => {\n this._functionExecutorMap[name] =\n new GraphExecutor(graph.functions[name], this);\n });\n }\n }\n getCompilationKey(inputs, outputs) {\n const sortedInputs = inputs.map(node => node.name).sort();\n const sortedOutputs = outputs.map(node => node.name).sort();\n return sortedInputs.join(this.SEPARATOR) + '--' +\n sortedOutputs.join(this.SEPARATOR);\n }\n /**\n * Compiles the inference graph and returns the minimal set of nodes that are\n * required for execution, in the correct execution order.\n * @returns {Object} compilation The compile result.\n * @returns {Node[]} compilation.orderedNodes Nodes in the correct execution\n * order.\n * @returns {Map} compilation.nodeLiveUntilMap A map from node\n * to disposable nodes after its execution. That is, for a node `x`,\n * `nodeLiveUntilMap[x]` indicates all nodes whose intermediate\n * tensors should be disposed after `x` is executed.\n */\n compile(inputs, outputs) {\n const executionInfo = getExecutionSubgraph(inputs, outputs, this.weightMap, this._initNodes);\n const { missingInputs, dynamicNode, syncInputs } = executionInfo;\n if (dynamicNode != null) {\n throw new Error(`This execution contains the node '${dynamicNode.name}', which has ` +\n `the dynamic op '${dynamicNode.op}'. Please use ` +\n `model.executeAsync() instead. Alternatively, to avoid the ` +\n `dynamic ops, specify the inputs [${syncInputs}]`);\n }\n if (missingInputs.length > 0) {\n const outNames = outputs.map(n => n.name);\n const inNames = Object.keys(inputs);\n throw new Error(`Cannot compute the outputs [${outNames}] from the provided inputs ` +\n `[${inNames}]. Missing the following inputs: [${missingInputs}]`);\n }\n const orderedNodes = getNodesInTopologicalOrder(this.graph, executionInfo);\n const nodeLiveUntilMap = getNodeLiveUntilMap(orderedNodes);\n return { orderedNodes, nodeLiveUntilMap };\n }\n cloneAndKeepTensor(tensor) {\n if (tensor == null) {\n return null;\n }\n const clone = tensor.clone();\n // Keep the clone because`model.execute()` may be called within\n // a `tidy()`, but the user may inspect these tensors after the\n // tidy.\n keep(clone);\n return clone;\n }\n cloneTensorList(tensors) {\n if (!tensors) {\n return null;\n }\n const clonedTensor = tensors.map(tensor => {\n return this.cloneAndKeepTensor(tensor);\n });\n return clonedTensor;\n }\n cloneTensorMap(tensorsMap) {\n return Object.fromEntries(Object.entries(tensorsMap).map(([name, tensorsList]) => {\n return [name, this.cloneTensorList(tensorsList)];\n }));\n }\n /**\n * Executes the inference for given input tensors.\n * @param inputs Tensor map for the model inputs, keyed by the input node\n * names.\n * @param outputs Optional. output node name from the Tensorflow model, if\n * no outputs are specified, the default outputs of the model would be used.\n * You can inspect intermediate nodes of the model by adding them to the\n * outputs array.\n */\n execute(inputs, outputs) {\n // Dispose any tensors from a prior run to avoid leaking them.\n this.disposeIntermediateTensors();\n inputs = this.mapInputs(inputs);\n const names = Object.keys(inputs).sort();\n this.checkInputs(inputs);\n this.checkInputShapeAndType(inputs);\n outputs = this.mapOutputs(outputs);\n this.checkOutputs(outputs);\n const inputNodes = names.map(name => this.graph.nodes[parseNodeName(name)[0]]);\n const outputNodeNames = outputs.map(name => parseNodeName(name)[0]);\n const outputNodeNameSet = new Set(outputNodeNames);\n let outputNodes = outputNodeNames.map(name => this.graph.nodes[name]);\n // If no outputs are specified, then use the default outputs of the model.\n if (outputNodes.length === 0) {\n outputNodes = this._outputs;\n }\n const compilationKey = this.getCompilationKey(inputNodes, outputNodes);\n // Do nothing if the compiled graph cache contains the input.\n let compilation = this.compiledMap.get(compilationKey);\n if (compilation == null) {\n compilation = this.compile(inputs, outputNodes);\n this.compiledMap.set(compilationKey, compilation);\n }\n // Keep tensors if KEEP_INTERMEDIATE_TENSORS is on.\n try {\n this.keepIntermediateTensors = env().getBool('KEEP_INTERMEDIATE_TENSORS');\n }\n catch (e) {\n this.keepIntermediateTensors = false;\n console.warn(e.message);\n }\n const tensorArrayMap = {};\n const tensorListMap = {};\n return tidy(() => {\n const context = new ExecutionContext(this.weightMap, tensorArrayMap, tensorListMap, this.functionExecutorMap, this.parseNodeNameCache);\n const tensorsMap = Object.assign({}, this.weightMap);\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap = this.cloneTensorMap(this.weightMap);\n }\n Object.keys(inputs).forEach(name => {\n const [nodeName, index] = parseNodeName(name, context);\n const tensors = [];\n tensors[index] = inputs[name];\n tensorsMap[nodeName] = tensors;\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap[nodeName] = this.cloneTensorList(tensors);\n }\n });\n const tensorsToKeep = this.getFrozenTensorIds(tensorsMap);\n const { orderedNodes, nodeLiveUntilMap } = compilation;\n for (const node of orderedNodes) {\n if (tensorsMap[node.name]) {\n continue;\n }\n const tensors = executeOp(node, tensorsMap, context, this._resourceManager);\n if (util.isPromise(tensors)) {\n throw new Error(`The execution of the op '${node.op}' returned a promise. ` +\n `Please use model.executeAsync() instead.`);\n }\n tensorsMap[node.name] = tensors;\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap[node.name] = this.cloneTensorList(tensors);\n }\n this.checkTensorForDisposalWithNodeLiveUntilInfo(node, tensorsMap, context, tensorsToKeep, outputNodeNameSet, nodeLiveUntilMap.get(node.name));\n }\n // dispose the context for the root executor\n if (this.parent == null) {\n context.dispose(tensorsToKeep);\n }\n return outputs.map(name => getTensor(name, tensorsMap, context));\n });\n }\n getFrozenTensorIds(tensorMap) {\n const ids = [].concat.apply([], Object.keys(tensorMap)\n .map(key => tensorMap[key])\n .map(tensors => tensors.map(tensor => tensor.id)));\n return new Set(ids);\n }\n checkTensorForDisposal(nodeName, node, tensorMap, context, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount) {\n // Skip output nodes and any control flow nodes, since its dependency is\n // tricky to track correctly.\n if (isControlFlow(node) || outputNodeNameSet.has(nodeName)) {\n return;\n }\n for (const tensor of tensorMap[nodeName]) {\n if (tensor == null) {\n continue;\n }\n intermediateTensorConsumerCount[tensor.id] =\n (intermediateTensorConsumerCount[tensor.id] || 0) +\n node.children.length;\n }\n for (const input of node.inputs) {\n // Skip any control flow nodes, since its dependency is tricky to track\n // correctly.\n if (isControlFlow(input)) {\n continue;\n }\n const tensors = getTensorsForCurrentContext(input.name, tensorMap, context);\n if (tensors == null) {\n continue;\n }\n for (const tensor of tensors) {\n if (!tensor || tensor.kept || tensorsToKeep.has(tensor.id)) {\n continue;\n }\n // Only intermediate nodes' tensors have counts set, not marked as\n // kept, and not in `tensorsToKeep`.\n // Input and weight nodes' tensors should exist in `tensorsToKeep`.\n // Output and control flow nodes' tensors should never have count set.\n const count = intermediateTensorConsumerCount[tensor.id];\n if (count === 1) {\n tensor.dispose();\n delete intermediateTensorConsumerCount[tensor.id];\n }\n else if (count != null) {\n intermediateTensorConsumerCount[tensor.id]--;\n }\n }\n }\n }\n checkTensorForDisposalWithNodeLiveUntilInfo(node, tensorMap, context, tensorsToKeep, outputNodeNameSet, liveUntilNodes) {\n function isNonDisposableNode(node) {\n // Skip output nodes and any control flow nodes, since its dependency is\n // tricky to track correctly.\n return isControlFlow(node) || outputNodeNameSet.has(node.name);\n }\n if (isControlFlow(node) || liveUntilNodes == null) {\n return;\n }\n for (const nodeToDispose of liveUntilNodes) {\n if (isNonDisposableNode(nodeToDispose)) {\n continue;\n }\n const tensors = getTensorsForCurrentContext(nodeToDispose.name, tensorMap, context);\n for (const tensor of tensors) {\n if (!tensor || tensor.kept || tensorsToKeep.has(tensor.id)) {\n continue;\n }\n tensor.dispose();\n }\n }\n }\n /**\n * Executes the inference for given input tensors in Async fashion.\n * @param inputs Tensor map for the model inputs, keyed by the input node\n * names.\n * @param outputs output node name from the Tensorflow model, if no outputs\n * are specified, the default outputs of the model would be used. You can\n * inspect intermediate nodes of the model by adding them to the outputs\n * array.\n */\n async executeAsync(inputs, outputs) {\n return this._executeAsync(inputs, outputs);\n }\n disposeIntermediateTensors() {\n if (!this.clonedTensorsMap) {\n return;\n }\n Object.values(this.clonedTensorsMap).forEach(tensorsList => {\n for (const tensor of tensorsList) {\n if (tensor && !tensor.isDisposed) {\n tensor.dispose();\n }\n }\n });\n this.clonedTensorsMap = null;\n }\n getIntermediateTensors() {\n return this.clonedTensorsMap;\n }\n /**\n * Executes the inference for given input tensors in Async fashion.\n * @param inputs Tensor map for the model inputs, keyed by the input node\n * names.\n * @param outputs Optional. output node name from the Tensorflow model,\n * if no outputs are specified, the default outputs of the model would be\n * used. You can inspect intermediate nodes of the model by adding them to\n * the outputs array.\n * @param isFunctionExecution Optional. Flag for executing a function.\n * @param tensorArrayMap Optional, global TensorArray map by id. Used for\n * function execution.\n * @param tensorArrayMap Optional global TensorList map by id. Used for\n * function execution.\n */\n async _executeAsync(inputs, outputs, isFunctionExecution = false, tensorArrayMap = {}, tensorListMap = {}) {\n // Dispose any tensors from a prior run to avoid leaking them.\n this.disposeIntermediateTensors();\n if (!isFunctionExecution) {\n inputs = this.mapInputs(inputs);\n this.checkInputs(inputs);\n this.checkInputShapeAndType(inputs);\n outputs = this.mapOutputs(outputs);\n this.checkOutputs(outputs);\n }\n // Keep tensors if KEEP_INTERMEDIATE_TENSORS is on.\n try {\n this.keepIntermediateTensors = env().getBool('KEEP_INTERMEDIATE_TENSORS');\n }\n catch (e) {\n this.keepIntermediateTensors = false;\n console.warn(e.message);\n }\n const context = new ExecutionContext(this.weightMap, tensorArrayMap, tensorListMap, this.functionExecutorMap, this.parseNodeNameCache);\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap = this.cloneTensorMap(this.weightMap);\n }\n // Graph with control flow op requires runtime evaluation of the execution\n // order, while without control flow the execution order is pre-determined\n // in the compile method.\n const tensorsMap = await this.executeWithControlFlow(inputs, context, outputs, isFunctionExecution);\n const results = outputs.map(name => getTensor(name, tensorsMap, context));\n // dispose all the intermediate tensors\n const outputIds = results.map(t => t.id);\n const inputIds = Object.keys(inputs).map(name => inputs[name].id);\n const keepIds = new Set([...outputIds, ...inputIds, ...this.weightIds]);\n Object.values(tensorsMap).forEach(tensorsList => {\n tensorsList.forEach(tensor => {\n if (tensor && !tensor.isDisposed && !keepIds.has(tensor.id)) {\n tensor.dispose();\n }\n });\n });\n // dispose the context for the root executor\n if (this.parent == null) {\n context.dispose(keepIds);\n }\n return results;\n }\n async executeFunctionAsync(inputs, tensorArrayMap, tensorListMap) {\n const mappedInputs = inputs.reduce((map, tensor, index) => {\n map[this.inputs[index].name] = tensor;\n return map;\n }, {});\n return this._executeAsync(mappedInputs, this.outputNodes, true, tensorArrayMap, tensorListMap);\n }\n /**\n * When there are control flow nodes in the graph, the graph execution use\n * ExecutionContext to keep track of the frames and loop iterators.\n * @param inputs placeholder tensors for the graph.\n * @param context the execution context object for current execution.\n * @param outputNames Optional. output node name from the Tensorflow model,\n * if no outputs are specified, the default outputs of the model would be\n * used. You can inspect intermediate nodes of the model by adding them to\n * the outputs array.\n * @param isFunctionExecution Flag for executing a function.\n */\n async executeWithControlFlow(inputs, context, outputNames, isFunctionExecution) {\n const names = Object.keys(inputs);\n const inputNodes = names.map(name => this.graph.nodes[parseNodeName(name)[0]]);\n const outputNodeNames = outputNames.map(name => parseNodeName(name)[0]);\n const outputNodeNameSet = new Set(outputNodeNames);\n let outputNodes = outputNodeNames.map(name => this.graph.nodes[name]);\n // If no outputs are specified, then use the default outputs of the model.\n if (outputNodes.length === 0) {\n outputNodes = this._outputs;\n }\n const { usedNodes, missingInputs, dynamicNode, syncInputs } = getExecutionSubgraph(inputs, outputNodes, this.weightMap, this._initNodes);\n // First nodes to execute include inputNodes, weights, and initNodes.\n const stack = [\n ...inputNodes, ...this.graph.weights, ...(this._initNodes || [])\n ].map(node => {\n return { node, contexts: context.currentContext };\n });\n const tensorsMap = Object.assign({}, this.weightMap);\n Object.keys(inputs).forEach(name => {\n const [nodeName, index] = parseNodeName(name);\n const tensors = [];\n tensors[index] = inputs[name];\n tensorsMap[nodeName] = tensors;\n });\n const intermediateTensorConsumerCount = {};\n const tensorsToKeep = this.getFrozenTensorIds(tensorsMap);\n const added = {};\n while (stack.length > 0) {\n const promises = this.processStack(inputNodes, stack, context, tensorsMap, added, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount, usedNodes);\n await Promise.all(promises);\n }\n if (dynamicNode == null && !isFunctionExecution) {\n console.warn(`This model execution did not contain any nodes with control flow ` +\n `or dynamic output shapes. You can use model.execute() instead.`);\n }\n const missingOutputs = outputNodes\n .filter(node => !isControlFlow(node) &&\n !getTensor(node.name, tensorsMap, context))\n .map(node => node.name);\n if (missingOutputs.length > 0) {\n let alternativeMsg = '';\n if (dynamicNode != null) {\n alternativeMsg =\n `Alternatively, to avoid the dynamic ops, use model.execute() ` +\n `and specify the inputs [${syncInputs}]`;\n }\n throw new Error(`Cannot compute the outputs [${missingOutputs}] from the provided ` +\n `inputs [${names}]. Consider providing the following inputs: ` +\n `[${missingInputs}]. ${alternativeMsg}`);\n }\n return tensorsMap;\n }\n processStack(inputNodes, stack, context, tensorMap, added, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount, usedNodes) {\n const promises = [];\n while (stack.length > 0) {\n const item = stack.pop();\n context.currentContext = item.contexts;\n let nodeName = '';\n // The tensor of the Enter op with isConstant set should be set\n // in the parent scope, so it will be available as constant for the\n // whole loop.\n if (item.node.op === 'Enter' &&\n getParamValue('isConstant', item.node, tensorMap, context)) {\n [nodeName] = getNodeNameAndIndex(item.node.name, context);\n }\n // only process nodes that are not in the tensorMap yet, this include\n // inputNodes and internal initNodes.\n if (tensorMap[item.node.name] == null) {\n const tensors = executeOp(item.node, tensorMap, context, this._resourceManager);\n if (!nodeName) {\n [nodeName] = getNodeNameAndIndex(item.node.name, context);\n }\n const currentContext = context.currentContext;\n if (util.isPromise(tensors)) {\n promises.push(tensors.then(t => {\n tensorMap[nodeName] = t;\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap[nodeName] = this.cloneTensorList(t);\n }\n context.currentContext = currentContext;\n this.checkTensorForDisposal(nodeName, item.node, tensorMap, context, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount);\n this.processChildNodes(item.node, stack, context, tensorMap, added, usedNodes);\n return t;\n }));\n }\n else {\n tensorMap[nodeName] = tensors;\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap[nodeName] = this.cloneTensorList(tensors);\n }\n this.checkTensorForDisposal(nodeName, item.node, tensorMap, context, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount);\n this.processChildNodes(item.node, stack, context, tensorMap, added, usedNodes);\n }\n }\n else {\n this.processChildNodes(item.node, stack, context, tensorMap, added, usedNodes);\n }\n }\n return promises;\n }\n processChildNodes(node, stack, context, tensorMap, added, usedNodes) {\n node.children.forEach((childNode) => {\n const [nodeName,] = getNodeNameAndIndex(childNode.name, context);\n if (added[nodeName] || !usedNodes.has(childNode.name)) {\n return;\n }\n // Merge op can be pushed if any of its inputs has value.\n if (childNode.op === 'Merge') {\n if (childNode.inputNames.some(name => {\n return !!getTensor(name, tensorMap, context);\n })) {\n added[nodeName] = true;\n stack.push({ contexts: context.currentContext, node: childNode });\n }\n }\n else // Otherwise all inputs must to have value.\n if (childNode.inputNames.every(name => {\n return !!getTensor(name, tensorMap, context);\n })) {\n added[nodeName] = true;\n stack.push({ contexts: context.currentContext, node: childNode });\n }\n });\n }\n /**\n * Releases the memory used by the weight tensors.\n */\n dispose() {\n Object.keys(this.weightMap)\n .forEach(key => this.weightMap[key].forEach(tensor => tensor.dispose()));\n }\n checkInputShapeAndType(inputs) {\n Object.keys(inputs).forEach(name => {\n const input = inputs[name];\n const [nodeName,] = parseNodeName(name);\n const node = this.graph.nodes[nodeName];\n if (node.attrParams['shape'] && node.attrParams['shape'].value) {\n const shape = node.attrParams['shape'].value;\n const match = shape.length === input.shape.length &&\n input.shape.every((dim, index) => shape[index] === -1 || shape[index] === dim);\n util.assert(match, () => `The shape of dict['${node.name}'] provided in ` +\n `model.execute(dict) must be [${shape}], but was ` +\n `[${input.shape}]`);\n }\n if (node.attrParams['dtype'] && node.attrParams['dtype'].value) {\n util.assert(input.dtype === node.attrParams['dtype'].value, () => `The dtype of dict['${node.name}'] provided in ` +\n `model.execute(dict) must be ` +\n `${node.attrParams['dtype'].value}, but was ${input.dtype}`);\n }\n });\n }\n mapInputs(inputs) {\n var _a, _b;\n const result = {};\n for (const inputName in inputs) {\n const tensor = (_b = (_a = this._signature) === null || _a === void 0 ? void 0 : _a.inputs) === null || _b === void 0 ? void 0 : _b[inputName];\n if (tensor != null) {\n result[tensor.name] = inputs[inputName];\n }\n else {\n result[inputName] = inputs[inputName];\n }\n }\n return result;\n }\n checkInputs(inputs) {\n const notInGraph = Object.keys(inputs).filter(name => {\n const [nodeName] = parseNodeName(name);\n return this.graph.nodes[nodeName] == null;\n });\n if (notInGraph.length > 0) {\n throw new Error(`The dict provided in model.execute(dict) has ` +\n `keys: [${notInGraph}] that are not part of graph`);\n }\n }\n mapOutputs(outputs) {\n return outputs.map(name => {\n var _a, _b;\n const tensor = (_b = (_a = this._signature) === null || _a === void 0 ? void 0 : _a.outputs) === null || _b === void 0 ? void 0 : _b[name];\n if (tensor != null) {\n return tensor.name;\n }\n return name;\n }, {});\n }\n checkOutputs(outputs) {\n outputs.forEach(name => {\n const [normalizedName] = parseNodeName(name);\n if (!this.graph.nodes[normalizedName]) {\n throw new Error(`The output '${name}' is not found in the graph`);\n }\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvZ3JhcGhfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFXLEdBQUcsRUFBRSxJQUFJLEVBQTBCLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUk5RixPQUFPLEVBQUMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN4SSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFHM0QsT0FBTyxFQUFDLGdCQUFnQixFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQVN0SCxNQUFNLE9BQU8sYUFBYTtJQWdCeEIsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFB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QyxlQUFlLElBQUksNkJBQTZCLENBQUMsQ0FBQzthQUNuRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RhdGFUeXBlLCBlbnYsIGtlZXAsIE5hbWVkVGVuc29yTWFwLCBUZW5zb3IsIHRpZHksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7SVNpZ25hdHVyZURlZn0gZnJvbSAnLi4vZGF0YS9jb21waWxlZF9hcGknO1xuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXAsIFRlbnNvckFycmF5TWFwLCBUZW5zb3JJbmZvLCBUZW5zb3JMaXN0TWFwfSBmcm9tICcuLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7Z2V0Tm9kZU5hbWVBbmRJbmRleCwgZ2V0UGFyYW1WYWx1ZSwgZ2V0VGVuc29yLCBnZXRUZW5zb3JzRm9yQ3VycmVudENvbnRleHQsIHBhcnNlTm9kZU5hbWV9IGZyb20gJy4uL29wZXJhdGlvbnMvZXhlY3V0b3JzL3V0aWxzJztcbmltcG9ydCB7ZXhlY3V0ZU9wfSBmcm9tICcuLi9vcGVyYXRpb25zL29wZXJhdGlvbl9leGVjdXRvcic7XG5pbXBvcnQge0dyYXBoLCBOb2RlfSBmcm9tICcuLi9vcGVyYXRpb25zL3R5cGVzJztcblxuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0LCBFeGVjdXRpb25Db250ZXh0SW5mb30gZnJvbSAnLi9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge2dldEV4ZWN1dGlvblN1YmdyYXBoLCBnZXROb2RlTGl2ZVVudGlsTWFwLCBnZXROb2Rlc0luVG9wb2xvZ2ljYWxPcmRlciwgaXNDb250cm9sRmxvd30gZnJvbSAnLi9tb2RlbF9hbmFseXNpcyc7XG5pbXBvcnQge1Jlc291cmNlTWFuYWdlcn0gZnJvbSAnLi9yZXNvdXJjZV9tYW5hZ2VyJztcbmltcG9ydCB7RnVuY3Rpb25FeGVjdXRvcn0gZnJvbSAnLi90eXBlcyc7XG5cbmludGVyZmFjZSBOb2RlV2l0aENvbnRleHRzIHtcbiAgY29udGV4dHM6IEV4ZWN1dGlvbkNvbnRleHRJbmZvW107XG4gIG5vZGU6IE5vZGU7XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFwaEV4ZWN1dG9yIGltcGxlbWVudHMgRnVuY3Rpb25FeGVjdXRvciB7XG4gIHByaXZhdGUgY29tcGlsZWRNYXAgPSBuZXcgTWFwPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5jb21waWxlPj4oKTtcbiAgcHJpdmF0ZSBwYXJzZU5vZGVOYW1lQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgW3N0cmluZywgbnVtYmVyLCBzdHJpbmc/XT4oKTtcbiAgcHJpdmF0ZSBfd2VpZ2h0TWFwOiBOYW1lZFRlbnNvcnNNYXAgPSB7fTtcbiAgcHJpdmF0ZSBfd2VpZ2h0SWRzOiBudW1iZXJbXTtcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlOiBJU2lnbmF0dXJlRGVmO1xuICBwcml2YXRlIF9pbnB1dHM6IE5vZGVbXTtcbiAgcHJpdmF0ZSBfb3V0cHV0czogTm9kZVtdO1xuICBwcml2YXRlIF9pbml0Tm9kZXM6IE5vZGVbXTsgIC8vIEludGVybmFsIGluaXQgbm9kZXMgdG8gc3RhcnQgaW5pdGlhbGl6YXRpb24uXG4gIHByaXZhdGUgU0VQQVJBVE9SID0gJywnO1xuICBwcml2YXRlIF9mdW5jdGlvbnM6IHtba2V5OiBzdHJpbmddOiBHcmFwaH0gPSB7fTtcbiAgcHJpdmF0ZSBfZnVuY3Rpb25FeGVjdXRvck1hcDoge1trZXk6IHN0cmluZ106IEZ1bmN0aW9uRXhlY3V0b3J9ID0ge307XG4gIHByaXZhdGUgX3Jlc291cmNlTWFuYWdlcjogUmVzb3VyY2VNYW5hZ2VyO1xuICBwcml2YXRlIGNsb25lZFRlbnNvcnNNYXA6IE5hbWVkVGVuc29yc01hcDtcbiAgcHJpdmF0ZSBrZWVwSW50ZXJtZWRpYXRlVGVuc29ycyA9IGZhbHNlO1xuXG4gIGdldCB3ZWlnaHRJZHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LndlaWdodElkcyA6IHRoaXMuX3dlaWdodElkcztcbiAgfVxuXG4gIGdldCBmdW5jdGlvbkV4ZWN1dG9yTWFwKCk6IHtba2V5OiBzdHJpbmddOiBGdW5jdGlvbkV4ZWN1dG9yfSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuZnVuY3Rpb25FeGVjdXRvck1hcCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVuY3Rpb25FeGVjdXRvck1hcDtcbiAgfVxuXG4gIGdldCB3ZWlnaHRNYXAoKTogTmFtZWRUZW5zb3JzTWFwIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC53ZWlnaHRNYXAgOiB0aGlzLl93ZWlnaHRNYXA7XG4gIH1cblxuICBzZXQgd2VpZ2h0TWFwKHdlaWdodE1hcDogTmFtZWRUZW5zb3JzTWFwKSB7XG4gICAgY29uc3Qgd2VpZ2h0SWRzID0gT2JqZWN0LmtleXMod2VpZ2h0TWFwKS5tYXAoXG4gICAgICAgIGtleSA9PiB3ZWlnaHRNYXBba2V5XS5tYXAodGVuc29yID0+IHRlbnNvci5pZCkpO1xuICAgIHRoaXMuX3dlaWdodElkcyA9IFtdLmNvbmNhdCguLi53ZWlnaHRJZHMpO1xuICAgIHRoaXMuX3dlaWdodE1hcCA9IHdlaWdodE1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYFJlc291cmNlTWFuYWdlcmAgc2hhcmVkIGJ5IGV4ZWN1dG9ycyBvZiBhIG1vZGVsLlxuICAgKiBAcGFyYW0gcmVzb3VyY2VNYW5hZ2VyOiBgUmVzb3VyY2VNYW5hZ2VyYCBvZiB0aGUgYEdyYXBoTW9kZWxgLlxuICAgKi9cbiAgc2V0IHJlc291cmNlTWFuYWdlcihyZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcikge1xuICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHJlc291cmNlTWFuYWdlcjtcbiAgfVxuXG4gIGdldCBpbnB1dHMoKTogVGVuc29ySW5mb1tdIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRzLm1hcChub2RlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgc2hhcGU6IG5vZGUuYXR0clBhcmFtc1snc2hhcGUnXSA/XG4gICAgICAgICAgICBub2RlLmF0dHJQYXJhbXNbJ3NoYXBlJ10udmFsdWUgYXMgbnVtYmVyW10gOlxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBkdHlwZTogbm9kZS5hdHRyUGFyYW1zWydkdHlwZSddID9cbiAgICAgICAgICAgIG5vZGUuYXR0clBhcmFtc1snZHR5cGUnXS52YWx1ZSBhcyBEYXRhVHlwZSA6XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXQgb3V0cHV0cygpOiBUZW5zb3JJbmZvW10ge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRzLm1hcChub2RlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgc2hhcGU6IG5vZGUuYXR0clBhcmFtc1snc2hhcGUnXSA/XG4gICAgICAgICAgICBub2RlLmF0dHJQYXJhbXNbJ3NoYXBlJ10udmFsdWUgYXMgbnVtYmVyW10gOlxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBkdHlwZTogbm9kZS5hdHRyUGFyYW1zWydkdHlwZSddID9cbiAgICAgICAgICAgIG5vZGUuYXR0clBhcmFtc1snZHR5cGUnXS52YWx1ZSBhcyBEYXRhVHlwZSA6XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaW5wdXROb2RlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0cy5tYXAobm9kZSA9PiBub2RlLnNpZ25hdHVyZUtleSB8fCBub2RlLm5hbWUpO1xuICB9XG5cbiAgZ2V0IG91dHB1dE5vZGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cy5tYXAoKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnNpZ25hdHVyZUtleSB8fCBub2RlLm5hbWU7XG4gICAgICByZXR1cm4gbm9kZS5kZWZhdWx0T3V0cHV0ID8gKGAke25hbWV9OiR7bm9kZS5kZWZhdWx0T3V0cHV0fWApIDogbmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBmdW5jdGlvbnMoKToge1trZXk6IHN0cmluZ106IElTaWduYXR1cmVEZWZ9IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZnVuY3Rpb25zKS5yZWR1Y2UoKG1hcCwga2V5KSA9PiB7XG4gICAgICBtYXBba2V5XSA9IHRoaXMuX2Z1bmN0aW9uc1trZXldLnNpZ25hdHVyZTtcbiAgICAgIHJldHVybiBtYXA7XG4gICAgfSwge30gYXMge1trZXk6IHN0cmluZ106IElTaWduYXR1cmVEZWZ9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhcGggR3JhcGggdGhlIG1vZGVsIG9yIGZ1bmN0aW9uIGdyYXBoIHRvIGJlIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0gcGFyZW50IFdoZW4gYnVpbGRpbmcgZnVuY3Rpb24gZXhlY3RvciB5b3UgbmVlZCB0byBzZXQgdGhlIHBhcmVudFxuICAgKiBleGVjdXRvci4gU2luY2UgdGhlIHdlaWdodHMgYW5kIGZ1bmN0aW9uIGV4ZWN1dG9yIG1hcHMgYXJlIHNldCBhdCBwYXJhbnRcbiAgICogbGV2ZWwsIHRoYXQgZnVuY3Rpb24gZXhlY3V0b3IgY2FuIGFjY2VzcyB0aGUgZnVuY3Rpb24gbWFwcyBhbmQgd2VpZ2h0IG1hcHNcbiAgICogdGhyb3VnaCB0aGUgcGFyZW50LlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBncmFwaDogR3JhcGgsIHByaXZhdGUgcGFyZW50PzogR3JhcGhFeGVjdXRvcikge1xuICAgIHRoaXMuX291dHB1dHMgPSBncmFwaC5vdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGdyYXBoLmlucHV0cztcbiAgICB0aGlzLl9pbml0Tm9kZXMgPSBncmFwaC5pbml0Tm9kZXM7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0gZ3JhcGguc2lnbmF0dXJlO1xuICAgIHRoaXMuX2Z1bmN0aW9ucyA9IGdyYXBoLmZ1bmN0aW9ucztcbiAgICAvLyBjcmVhdGUgc3ViLWdyYXBoIGV4ZWN1dG9yc1xuICAgIGlmIChncmFwaC5mdW5jdGlvbnMgIT0gbnVsbCkge1xuICAgICAgT2JqZWN0LmtleXMoZ3JhcGguZnVuY3Rpb25zKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbkV4ZWN1dG9yTWFwW25hbWVdID1cbiAgICAgICAgICAgIG5ldyBHcmFwaEV4ZWN1dG9yKGdyYXBoLmZ1bmN0aW9uc1tuYW1lXSwgdGhpcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBpbGF0aW9uS2V5KGlucHV0czogTm9kZVtdLCBvdXRwdXRzOiBOb2RlW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvcnRlZElucHV0cyA9IGlucHV0cy5tYXAobm9kZSA9PiBub2RlLm5hbWUpLnNvcnQoKTtcbiAgICBjb25zdCBzb3J0ZWRPdXRwdXRzID0gb3V0cHV0cy5tYXAobm9kZSA9PiBub2RlLm5hbWUpLnNvcnQoKTtcbiAgICByZXR1cm4gc29ydGVkSW5wdXRzLmpvaW4odGhpcy5TRVBBUkFUT1IpICsgJy0tJyArXG4gICAgICAgIHNvcnRlZE91dHB1dHMuam9pbih0aGlzLlNFUEFSQVRPUik7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGlsZXMgdGhlIGluZmVyZW5jZSBncmFwaCBhbmQgcmV0dXJucyB0aGUgbWluaW1hbCBzZXQgb2Ygbm9kZXMgdGhhdCBhcmVcbiAgICogcmVxdWlyZWQgZm9yIGV4ZWN1dGlvbiwgaW4gdGhlIGNvcnJlY3QgZXhlY3V0aW9uIG9yZGVyLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBjb21waWxhdGlvbiBUaGUgY29tcGlsZSByZXN1bHQuXG4gICAqIEByZXR1cm5zIHtOb2RlW119IGNvbXBpbGF0aW9uLm9yZGVyZWROb2RlcyBOb2RlcyBpbiB0aGUgY29ycmVjdCBleGVjdXRpb25cbiAgICogICAgIG9yZGVyLlxuICAgKiBAcmV0dXJucyB7TWFwPHN0cmluZywgTm9kZVtdPn0gY29tcGlsYXRpb24ubm9kZUxpdmVVbnRpbE1hcCBBIG1hcCBmcm9tIG5vZGVcbiAgICogICAgIHRvIGRpc3Bvc2FibGUgbm9kZXMgYWZ0ZXIgaXRzIGV4ZWN1dGlvbi4gVGhhdCBpcywgZm9yIGEgbm9kZSBgeGAsXG4gICAqICAgICBgbm9kZUxpdmVVbnRpbE1hcFt4XWAgaW5kaWNhdGVzIGFsbCBub2RlcyB3aG9zZSBpbnRlcm1lZGlhdGVcbiAgICogICAgIHRlbnNvcnMgc2hvdWxkIGJlIGRpc3Bvc2VkIGFmdGVyIGB4YCBpcyBleGVjdXRlZC5cbiAgICovXG4gIHByaXZhdGUgY29tcGlsZShpbnB1dHM6IE5hbWVkVGVuc29yTWFwLCBvdXRwdXRzOiBOb2RlW10pOlxuICAgICAge29yZGVyZWROb2RlczogTm9kZVtdLCBub2RlTGl2ZVVudGlsTWFwOiBNYXA8c3RyaW5nLCBOb2RlW10+fSB7XG4gICAgY29uc3QgZXhlY3V0aW9uSW5mbyA9XG4gICAgICAgIGdldEV4ZWN1dGlvblN1YmdyYXBoKGlucHV0cywgb3V0cHV0cywgdGhpcy53ZWlnaHRNYXAsIHRoaXMuX2luaXROb2Rlcyk7XG4gICAgY29uc3Qge21pc3NpbmdJbnB1dHMsIGR5bmFtaWNOb2RlLCBzeW5jSW5wdXRzfSA9IGV4ZWN1dGlvbkluZm87XG4gICAgaWYgKGR5bmFtaWNOb2RlICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhpcyBleGVjdXRpb24gY29udGFpbnMgdGhlIG5vZGUgJyR7ZHluYW1pY05vZGUubmFtZX0nLCB3aGljaCBoYXMgYCArXG4gICAgICAgICAgYHRoZSBkeW5hbWljIG9wICcke2R5bmFtaWNOb2RlLm9wfScuIFBsZWFzZSB1c2UgYCArXG4gICAgICAgICAgYG1vZGVsLmV4ZWN1dGVBc3luYygpIGluc3RlYWQuIEFsdGVybmF0aXZlbHksIHRvIGF2b2lkIHRoZSBgICtcbiAgICAgICAgICBgZHluYW1pYyBvcHMsIHNwZWNpZnkgdGhlIGlucHV0cyBbJHtzeW5jSW5wdXRzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAobWlzc2luZ0lucHV0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBvdXROYW1lcyA9IG91dHB1dHMubWFwKG4gPT4gbi5uYW1lKTtcbiAgICAgIGNvbnN0IGluTmFtZXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgY29tcHV0ZSB0aGUgb3V0cHV0cyBbJHtvdXROYW1lc31dIGZyb20gdGhlIHByb3ZpZGVkIGlucHV0cyBgICtcbiAgICAgICAgICBgWyR7aW5OYW1lc31dLiBNaXNzaW5nIHRoZSBmb2xsb3dpbmcgaW5wdXRzOiBbJHttaXNzaW5nSW5wdXRzfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkTm9kZXMgPSBnZXROb2Rlc0luVG9wb2xvZ2ljYWxPcmRlcih0aGlzLmdyYXBoLCBleGVjdXRpb25JbmZvKTtcbiAgICBjb25zdCBub2RlTGl2ZVVudGlsTWFwID0gZ2V0Tm9kZUxpdmVVbnRpbE1hcChvcmRlcmVkTm9kZXMpO1xuICAgIHJldHVybiB7b3JkZXJlZE5vZGVzLCBub2RlTGl2ZVVudGlsTWFwfTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVBbmRLZWVwVGVuc29yKHRlbnNvcjogVGVuc29yKSB7XG4gICAgaWYgKHRlbnNvciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY2xvbmUgPSB0ZW5zb3IuY2xvbmUoKTtcbiAgICAvLyBLZWVwIHRoZSBjbG9uZSBiZWNhdXNlYG1vZGVsLmV4ZWN1dGUoKWAgbWF5IGJlIGNhbGxlZCB3aXRoaW5cbiAgICAvLyBhIGB0aWR5KClgLCBidXQgdGhlIHVzZXIgbWF5IGluc3BlY3QgdGhlc2UgdGVuc29ycyBhZnRlciB0aGVcbiAgICAvLyB0aWR5LlxuICAgIGtlZXAoY2xvbmUpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVUZW5zb3JMaXN0KHRlbnNvcnM6IFRlbnNvcltdKSB7XG4gICAgaWYgKCF0ZW5zb3JzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY2xvbmVkVGVuc29yID0gdGVuc29ycy5tYXAodGVuc29yID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNsb25lQW5kS2VlcFRlbnNvcih0ZW5zb3IpO1xuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZWRUZW5zb3I7XG4gIH1cblxuICBwcml2YXRlIGNsb25lVGVuc29yTWFwKHRlbnNvcnNNYXA6IE5hbWVkVGVuc29yc01hcCk6IE5hbWVkVGVuc29yc01hcCB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGVuc29yc01hcCkubWFwKChbbmFtZSwgdGVuc29yc0xpc3RdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtuYW1lLCB0aGlzLmNsb25lVGVuc29yTGlzdCh0ZW5zb3JzTGlzdCldO1xuICAgICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGluZmVyZW5jZSBmb3IgZ2l2ZW4gaW5wdXQgdGVuc29ycy5cbiAgICogQHBhcmFtIGlucHV0cyBUZW5zb3IgbWFwIGZvciB0aGUgbW9kZWwgaW5wdXRzLCBrZXllZCBieSB0aGUgaW5wdXQgbm9kZVxuICAgKiBuYW1lcy5cbiAgICogQHBhcmFtIG91dHB1dHMgT3B0aW9uYWwuIG91dHB1dCBub2RlIG5hbWUgZnJvbSB0aGUgVGVuc29yZmxvdyBtb2RlbCwgaWZcbiAgICogbm8gb3V0cHV0cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvdXRwdXRzIG9mIHRoZSBtb2RlbCB3b3VsZCBiZSB1c2VkLlxuICAgKiBZb3UgY2FuIGluc3BlY3QgaW50ZXJtZWRpYXRlIG5vZGVzIG9mIHRoZSBtb2RlbCBieSBhZGRpbmcgdGhlbSB0byB0aGVcbiAgICogb3V0cHV0cyBhcnJheS5cbiAgICovXG4gIGV4ZWN1dGUoaW5wdXRzOiBOYW1lZFRlbnNvck1hcCwgb3V0cHV0cz86IHN0cmluZ1tdKTogVGVuc29yW10ge1xuICAgIC8vIERpc3Bvc2UgYW55IHRlbnNvcnMgZnJvbSBhIHByaW9yIHJ1biB0byBhdm9pZCBsZWFraW5nIHRoZW0uXG4gICAgdGhpcy5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ycygpO1xuICAgIGlucHV0cyA9IHRoaXMubWFwSW5wdXRzKGlucHV0cyk7XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpLnNvcnQoKTtcbiAgICB0aGlzLmNoZWNrSW5wdXRzKGlucHV0cyk7XG4gICAgdGhpcy5jaGVja0lucHV0U2hhcGVBbmRUeXBlKGlucHV0cyk7XG4gICAgb3V0cHV0cyA9IHRoaXMubWFwT3V0cHV0cyhvdXRwdXRzKTtcbiAgICB0aGlzLmNoZWNrT3V0cHV0cyhvdXRwdXRzKTtcbiAgICBjb25zdCBpbnB1dE5vZGVzID1cbiAgICAgICAgbmFtZXMubWFwKG5hbWUgPT4gdGhpcy5ncmFwaC5ub2Rlc1twYXJzZU5vZGVOYW1lKG5hbWUpWzBdXSk7XG4gICAgY29uc3Qgb3V0cHV0Tm9kZU5hbWVzID0gb3V0cHV0cy5tYXAobmFtZSA9PiBwYXJzZU5vZGVOYW1lKG5hbWUpWzBdKTtcbiAgICBjb25zdCBvdXRwdXROb2RlTmFtZVNldCA9IG5ldyBTZXQob3V0cHV0Tm9kZU5hbWVzKTtcbiAgICBsZXQgb3V0cHV0Tm9kZXMgPSBvdXRwdXROb2RlTmFtZXMubWFwKG5hbWUgPT4gdGhpcy5ncmFwaC5ub2Rlc1tuYW1lXSk7XG4gICAgLy8gSWYgbm8gb3V0cHV0cyBhcmUgc3BlY2lmaWVkLCB0aGVuIHVzZSB0aGUgZGVmYXVsdCBvdXRwdXRzIG9mIHRoZSBtb2RlbC5cbiAgICBpZiAob3V0cHV0Tm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBvdXRwdXROb2RlcyA9IHRoaXMuX291dHB1dHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGlsYXRpb25LZXkgPSB0aGlzLmdldENvbXBpbGF0aW9uS2V5KGlucHV0Tm9kZXMsIG91dHB1dE5vZGVzKTtcblxuICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIGNvbXBpbGVkIGdyYXBoIGNhY2hlIGNvbnRhaW5zIHRoZSBpbnB1dC5cbiAgICBsZXQgY29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGVkTWFwLmdldChjb21waWxhdGlvbktleSk7XG4gICAgaWYgKGNvbXBpbGF0aW9uID09IG51bGwpIHtcbiAgICAgIGNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxlKGlucHV0cywgb3V0cHV0Tm9kZXMpO1xuICAgICAgdGhpcy5jb21waWxlZE1hcC5zZXQoY29tcGlsYXRpb25LZXksIGNvbXBpbGF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHRlbnNvcnMgaWYgS0VFUF9JTlRFUk1FRElBVEVfVEVOU09SUyBpcyBvbi5cbiAgICB0cnkge1xuICAgICAgdGhpcy5rZWVwSW50ZXJtZWRpYXRlVGVuc29ycyA9IGVudigpLmdldEJvb2woJ0tFRVBfSU5URVJNRURJQVRFX1RFTlNPUlMnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzID0gZmFsc2U7XG4gICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlKTtcbiAgICB9XG4gICAgY29uc3QgdGVuc29yQXJyYXlNYXA6IFRlbnNvckFycmF5TWFwID0ge307XG4gICAgY29uc3QgdGVuc29yTGlzdE1hcDogVGVuc29yTGlzdE1hcCA9IHt9O1xuXG4gICAgcmV0dXJuIHRpZHkoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBFeGVjdXRpb25Db250ZXh0KFxuICAgICAgICAgIHRoaXMud2VpZ2h0TWFwLCB0ZW5zb3JBcnJheU1hcCwgdGVuc29yTGlzdE1hcCxcbiAgICAgICAgICB0aGlzLmZ1bmN0aW9uRXhlY3V0b3JNYXAsIHRoaXMucGFyc2VOb2RlTmFtZUNhY2hlKTtcbiAgICAgIGNvbnN0IHRlbnNvcnNNYXA6IE5hbWVkVGVuc29yc01hcCA9IHsuLi50aGlzLndlaWdodE1hcH07XG4gICAgICBpZiAodGhpcy5rZWVwSW50ZXJtZWRpYXRlVGVuc29ycykge1xuICAgICAgICB0aGlzLmNsb25lZFRlbnNvcnNNYXAgPSB0aGlzLmNsb25lVGVuc29yTWFwKHRoaXMud2VpZ2h0TWFwKTtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmtleXMoaW5wdXRzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBbbm9kZU5hbWUsIGluZGV4XSA9IHBhcnNlTm9kZU5hbWUobmFtZSwgY29udGV4dCk7XG4gICAgICAgIGNvbnN0IHRlbnNvcnM6IFRlbnNvcltdID0gW107XG4gICAgICAgIHRlbnNvcnNbaW5kZXhdID0gaW5wdXRzW25hbWVdO1xuICAgICAgICB0ZW5zb3JzTWFwW25vZGVOYW1lXSA9IHRlbnNvcnM7XG4gICAgICAgIGlmICh0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzKSB7XG4gICAgICAgICAgdGhpcy5jbG9uZWRUZW5zb3JzTWFwW25vZGVOYW1lXSA9IHRoaXMuY2xvbmVUZW5zb3JMaXN0KHRlbnNvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVuc29yc1RvS2VlcCA9IHRoaXMuZ2V0RnJvemVuVGVuc29ySWRzKHRlbnNvcnNNYXApO1xuICAgICAgY29uc3Qge29yZGVyZWROb2Rlcywgbm9kZUxpdmVVbnRpbE1hcH0gPSBjb21waWxhdGlvbjtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBvcmRlcmVkTm9kZXMpIHtcbiAgICAgICAgaWYgKHRlbnNvcnNNYXBbbm9kZS5uYW1lXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbnNvcnMgPVxuICAgICAgICAgICAgZXhlY3V0ZU9wKG5vZGUsIHRlbnNvcnNNYXAsIGNvbnRleHQsIHRoaXMuX3Jlc291cmNlTWFuYWdlcikgYXNcbiAgICAgICAgICAgIFRlbnNvcltdO1xuICAgICAgICBpZiAodXRpbC5pc1Byb21pc2UodGVuc29ycykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgZXhlY3V0aW9uIG9mIHRoZSBvcCAnJHtub2RlLm9wfScgcmV0dXJuZWQgYSBwcm9taXNlLiBgICtcbiAgICAgICAgICAgICAgYFBsZWFzZSB1c2UgbW9kZWwuZXhlY3V0ZUFzeW5jKCkgaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW5zb3JzTWFwW25vZGUubmFtZV0gPSB0ZW5zb3JzO1xuICAgICAgICBpZiAodGhpcy5rZWVwSW50ZXJtZWRpYXRlVGVuc29ycykge1xuICAgICAgICAgIHRoaXMuY2xvbmVkVGVuc29yc01hcFtub2RlLm5hbWVdID0gdGhpcy5jbG9uZVRlbnNvckxpc3QodGVuc29ycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1RlbnNvckZvckRpc3Bvc2FsV2l0aE5vZGVMaXZlVW50aWxJbmZvKFxuICAgICAgICAgICAgbm9kZSwgdGVuc29yc01hcCwgY29udGV4dCwgdGVuc29yc1RvS2VlcCwgb3V0cHV0Tm9kZU5hbWVTZXQsXG4gICAgICAgICAgICBub2RlTGl2ZVVudGlsTWFwLmdldChub2RlLm5hbWUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gZGlzcG9zZSB0aGUgY29udGV4dCBmb3IgdGhlIHJvb3QgZXhlY3V0b3JcbiAgICAgIGlmICh0aGlzLnBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQuZGlzcG9zZSh0ZW5zb3JzVG9LZWVwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dHB1dHMubWFwKG5hbWUgPT4gZ2V0VGVuc29yKG5hbWUsIHRlbnNvcnNNYXAsIGNvbnRleHQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RnJvemVuVGVuc29ySWRzKHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwKTogU2V0PG51bWJlcj4ge1xuICAgIGNvbnN0IGlkcyA9IFtdLmNvbmNhdC5hcHBseShcbiAgICAgICAgW10sXG4gICAgICAgIE9iamVjdC5rZXlzKHRlbnNvck1hcClcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IHRlbnNvck1hcFtrZXldKVxuICAgICAgICAgICAgLm1hcCh0ZW5zb3JzID0+IHRlbnNvcnMubWFwKHRlbnNvciA9PiB0ZW5zb3IuaWQpKSk7XG4gICAgcmV0dXJuIG5ldyBTZXQoaWRzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tUZW5zb3JGb3JEaXNwb3NhbChcbiAgICAgIG5vZGVOYW1lOiBzdHJpbmcsIG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgdGVuc29yc1RvS2VlcDogU2V0PG51bWJlcj4sXG4gICAgICBvdXRwdXROb2RlTmFtZVNldDogU2V0PHN0cmluZz4sXG4gICAgICBpbnRlcm1lZGlhdGVUZW5zb3JDb25zdW1lckNvdW50OiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSkge1xuICAgIC8vIFNraXAgb3V0cHV0IG5vZGVzIGFuZCBhbnkgY29udHJvbCBmbG93IG5vZGVzLCBzaW5jZSBpdHMgZGVwZW5kZW5jeSBpc1xuICAgIC8vIHRyaWNreSB0byB0cmFjayBjb3JyZWN0bHkuXG4gICAgaWYgKGlzQ29udHJvbEZsb3cobm9kZSkgfHwgb3V0cHV0Tm9kZU5hbWVTZXQuaGFzKG5vZGVOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGVuc29yIG9mIHRlbnNvck1hcFtub2RlTmFtZV0pIHtcbiAgICAgIGlmICh0ZW5zb3IgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnRbdGVuc29yLmlkXSA9XG4gICAgICAgICAgKGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnRbdGVuc29yLmlkXSB8fCAwKSArXG4gICAgICAgICAgbm9kZS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBub2RlLmlucHV0cykge1xuICAgICAgLy8gU2tpcCBhbnkgY29udHJvbCBmbG93IG5vZGVzLCBzaW5jZSBpdHMgZGVwZW5kZW5jeSBpcyB0cmlja3kgdG8gdHJhY2tcbiAgICAgIC8vIGNvcnJlY3RseS5cbiAgICAgIGlmIChpc0NvbnRyb2xGbG93KGlucHV0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVuc29ycyA9XG4gICAgICAgICAgZ2V0VGVuc29yc0ZvckN1cnJlbnRDb250ZXh0KGlucHV0Lm5hbWUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICBpZiAodGVuc29ycyA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHRlbnNvciBvZiB0ZW5zb3JzKSB7XG4gICAgICAgIGlmICghdGVuc29yIHx8IHRlbnNvci5rZXB0IHx8IHRlbnNvcnNUb0tlZXAuaGFzKHRlbnNvci5pZCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgaW50ZXJtZWRpYXRlIG5vZGVzJyB0ZW5zb3JzIGhhdmUgY291bnRzIHNldCwgbm90IG1hcmtlZCBhc1xuICAgICAgICAvLyBrZXB0LCBhbmQgbm90IGluIGB0ZW5zb3JzVG9LZWVwYC5cbiAgICAgICAgLy8gSW5wdXQgYW5kIHdlaWdodCBub2RlcycgdGVuc29ycyBzaG91bGQgZXhpc3QgaW4gYHRlbnNvcnNUb0tlZXBgLlxuICAgICAgICAvLyBPdXRwdXQgYW5kIGNvbnRyb2wgZmxvdyBub2RlcycgdGVuc29ycyBzaG91bGQgbmV2ZXIgaGF2ZSBjb3VudCBzZXQuXG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW50ZXJtZWRpYXRlVGVuc29yQ29uc3VtZXJDb3VudFt0ZW5zb3IuaWRdO1xuICAgICAgICBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgICAgICB0ZW5zb3IuZGlzcG9zZSgpO1xuICAgICAgICAgIGRlbGV0ZSBpbnRlcm1lZGlhdGVUZW5zb3JDb25zdW1lckNvdW50W3RlbnNvci5pZF07XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnQgIT0gbnVsbCkge1xuICAgICAgICAgIGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnRbdGVuc29yLmlkXS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1RlbnNvckZvckRpc3Bvc2FsV2l0aE5vZGVMaXZlVW50aWxJbmZvKFxuICAgICAgbm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICB0ZW5zb3JzVG9LZWVwOiBTZXQ8bnVtYmVyPiwgb3V0cHV0Tm9kZU5hbWVTZXQ6IFNldDxzdHJpbmc+LFxuICAgICAgbGl2ZVVudGlsTm9kZXM/OiBOb2RlW10pIHtcbiAgICBmdW5jdGlvbiBpc05vbkRpc3Bvc2FibGVOb2RlKG5vZGU6IE5vZGUpIHtcbiAgICAgIC8vIFNraXAgb3V0cHV0IG5vZGVzIGFuZCBhbnkgY29udHJvbCBmbG93IG5vZGVzLCBzaW5jZSBpdHMgZGVwZW5kZW5jeSBpc1xuICAgICAgLy8gdHJpY2t5IHRvIHRyYWNrIGNvcnJlY3RseS5cbiAgICAgIHJldHVybiBpc0NvbnRyb2xGbG93KG5vZGUpIHx8IG91dHB1dE5vZGVOYW1lU2V0Lmhhcyhub2RlLm5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpc0NvbnRyb2xGbG93KG5vZGUpIHx8IGxpdmVVbnRpbE5vZGVzID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5vZGVUb0Rpc3Bvc2Ugb2YgbGl2ZVVudGlsTm9kZXMpIHtcbiAgICAgIGlmIChpc05vbkRpc3Bvc2FibGVOb2RlKG5vZGVUb0Rpc3Bvc2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdGVuc29ycyA9IGdldFRlbnNvcnNGb3JDdXJyZW50Q29udGV4dChcbiAgICAgICAgICBub2RlVG9EaXNwb3NlLm5hbWUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICBmb3IgKGNvbnN0IHRlbnNvciBvZiB0ZW5zb3JzKSB7XG4gICAgICAgIGlmICghdGVuc29yIHx8IHRlbnNvci5rZXB0IHx8IHRlbnNvcnNUb0tlZXAuaGFzKHRlbnNvci5pZCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0ZW5zb3IuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgaW5mZXJlbmNlIGZvciBnaXZlbiBpbnB1dCB0ZW5zb3JzIGluIEFzeW5jIGZhc2hpb24uXG4gICAqIEBwYXJhbSBpbnB1dHMgVGVuc29yIG1hcCBmb3IgdGhlIG1vZGVsIGlucHV0cywga2V5ZWQgYnkgdGhlIGlucHV0IG5vZGVcbiAgICogbmFtZXMuXG4gICAqIEBwYXJhbSBvdXRwdXRzIG91dHB1dCBub2RlIG5hbWUgZnJvbSB0aGUgVGVuc29yZmxvdyBtb2RlbCwgaWYgbm8gb3V0cHV0c1xuICAgKiBhcmUgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvdXRwdXRzIG9mIHRoZSBtb2RlbCB3b3VsZCBiZSB1c2VkLiBZb3UgY2FuXG4gICAqIGluc3BlY3QgaW50ZXJtZWRpYXRlIG5vZGVzIG9mIHRoZSBtb2RlbCBieSBhZGRpbmcgdGhlbSB0byB0aGUgb3V0cHV0c1xuICAgKiBhcnJheS5cbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVBc3luYyhpbnB1dHM6IE5hbWVkVGVuc29yTWFwLCBvdXRwdXRzPzogc3RyaW5nW10pOlxuICAgICAgUHJvbWlzZTxUZW5zb3JbXT4ge1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRlQXN5bmMoaW5wdXRzLCBvdXRwdXRzKTtcbiAgfVxuXG4gIGRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JzKCkge1xuICAgIGlmICghdGhpcy5jbG9uZWRUZW5zb3JzTWFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy5jbG9uZWRUZW5zb3JzTWFwKS5mb3JFYWNoKHRlbnNvcnNMaXN0ID0+IHtcbiAgICAgIGZvciAoY29uc3QgdGVuc29yIG9mIHRlbnNvcnNMaXN0KSB7XG4gICAgICAgIGlmICh0ZW5zb3IgJiYgIXRlbnNvci5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jbG9uZWRUZW5zb3JzTWFwID0gbnVsbDtcbiAgfVxuXG4gIGdldEludGVybWVkaWF0ZVRlbnNvcnMoKTogTmFtZWRUZW5zb3JzTWFwIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZWRUZW5zb3JzTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBpbmZlcmVuY2UgZm9yIGdpdmVuIGlucHV0IHRlbnNvcnMgaW4gQXN5bmMgZmFzaGlvbi5cbiAgICogQHBhcmFtIGlucHV0cyBUZW5zb3IgbWFwIGZvciB0aGUgbW9kZWwgaW5wdXRzLCBrZXllZCBieSB0aGUgaW5wdXQgbm9kZVxuICAgKiBuYW1lcy5cbiAgICogQHBhcmFtIG91dHB1dHMgT3B0aW9uYWwuIG91dHB1dCBub2RlIG5hbWUgZnJvbSB0aGUgVGVuc29yZmxvdyBtb2RlbCxcbiAgICogaWYgbm8gb3V0cHV0cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvdXRwdXRzIG9mIHRoZSBtb2RlbCB3b3VsZCBiZVxuICAgKiB1c2VkLiBZb3UgY2FuIGluc3BlY3QgaW50ZXJtZWRpYXRlIG5vZGVzIG9mIHRoZSBtb2RlbCBieSBhZGRpbmcgdGhlbSB0b1xuICAgKiB0aGUgb3V0cHV0cyBhcnJheS5cbiAgICogQHBhcmFtIGlzRnVuY3Rpb25FeGVjdXRpb24gT3B0aW9uYWwuIEZsYWcgZm9yIGV4ZWN1dGluZyBhIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gdGVuc29yQXJyYXlNYXAgT3B0aW9uYWwsIGdsb2JhbCBUZW5zb3JBcnJheSBtYXAgYnkgaWQuIFVzZWQgZm9yXG4gICAqIGZ1bmN0aW9uIGV4ZWN1dGlvbi5cbiAgICogQHBhcmFtIHRlbnNvckFycmF5TWFwIE9wdGlvbmFsIGdsb2JhbCBUZW5zb3JMaXN0IG1hcCBieSBpZC4gVXNlZCBmb3JcbiAgICogZnVuY3Rpb24gZXhlY3V0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfZXhlY3V0ZUFzeW5jKFxuICAgICAgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCwgb3V0cHV0cz86IHN0cmluZ1tdLCBpc0Z1bmN0aW9uRXhlY3V0aW9uID0gZmFsc2UsXG4gICAgICB0ZW5zb3JBcnJheU1hcDogVGVuc29yQXJyYXlNYXAgPSB7fSxcbiAgICAgIHRlbnNvckxpc3RNYXA6IFRlbnNvckxpc3RNYXAgPSB7fSk6IFByb21pc2U8VGVuc29yW10+IHtcbiAgICAvLyBEaXNwb3NlIGFueSB0ZW5zb3JzIGZyb20gYSBwcmlvciBydW4gdG8gYXZvaWQgbGVha2luZyB0aGVtLlxuICAgIHRoaXMuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvcnMoKTtcbiAgICBpZiAoIWlzRnVuY3Rpb25FeGVjdXRpb24pIHtcbiAgICAgIGlucHV0cyA9IHRoaXMubWFwSW5wdXRzKGlucHV0cyk7XG4gICAgICB0aGlzLmNoZWNrSW5wdXRzKGlucHV0cyk7XG4gICAgICB0aGlzLmNoZWNrSW5wdXRTaGFwZUFuZFR5cGUoaW5wdXRzKTtcbiAgICAgIG91dHB1dHMgPSB0aGlzLm1hcE91dHB1dHMob3V0cHV0cyk7XG4gICAgICB0aGlzLmNoZWNrT3V0cHV0cyhvdXRwdXRzKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHRlbnNvcnMgaWYgS0VFUF9JTlRFUk1FRElBVEVfVEVOU09SUyBpcyBvbi5cbiAgICB0cnkge1xuICAgICAgdGhpcy5rZWVwSW50ZXJtZWRpYXRlVGVuc29ycyA9IGVudigpLmdldEJvb2woJ0tFRVBfSU5URVJNRURJQVRFX1RFTlNPUlMnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzID0gZmFsc2U7XG4gICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoXG4gICAgICAgIHRoaXMud2VpZ2h0TWFwLCB0ZW5zb3JBcnJheU1hcCwgdGVuc29yTGlzdE1hcCwgdGhpcy5mdW5jdGlvbkV4ZWN1dG9yTWFwLFxuICAgICAgICB0aGlzLnBhcnNlTm9kZU5hbWVDYWNoZSk7XG5cbiAgICBpZiAodGhpcy5rZWVwSW50ZXJtZWRpYXRlVGVuc29ycykge1xuICAgICAgdGhpcy5jbG9uZWRUZW5zb3JzTWFwID0gdGhpcy5jbG9uZVRlbnNvck1hcCh0aGlzLndlaWdodE1hcCk7XG4gICAgfVxuXG4gICAgLy8gR3JhcGggd2l0aCBjb250cm9sIGZsb3cgb3AgcmVxdWlyZXMgcnVudGltZSBldmFsdWF0aW9uIG9mIHRoZSBleGVjdXRpb25cbiAgICAvLyBvcmRlciwgd2hpbGUgd2l0aG91dCBjb250cm9sIGZsb3cgdGhlIGV4ZWN1dGlvbiBvcmRlciBpcyBwcmUtZGV0ZXJtaW5lZFxuICAgIC8vIGluIHRoZSBjb21waWxlIG1ldGhvZC5cbiAgICBjb25zdCB0ZW5zb3JzTWFwID0gYXdhaXQgdGhpcy5leGVjdXRlV2l0aENvbnRyb2xGbG93KFxuICAgICAgICBpbnB1dHMsIGNvbnRleHQsIG91dHB1dHMsIGlzRnVuY3Rpb25FeGVjdXRpb24pO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBvdXRwdXRzLm1hcChuYW1lID0+IGdldFRlbnNvcihuYW1lLCB0ZW5zb3JzTWFwLCBjb250ZXh0KSk7XG5cbiAgICAvLyBkaXNwb3NlIGFsbCB0aGUgaW50ZXJtZWRpYXRlIHRlbnNvcnNcbiAgICBjb25zdCBvdXRwdXRJZHMgPSByZXN1bHRzLm1hcCh0ID0+IHQuaWQpO1xuICAgIGNvbnN0IGlucHV0SWRzID0gT2JqZWN0LmtleXMoaW5wdXRzKS5tYXAobmFtZSA9PiBpbnB1dHNbbmFtZV0uaWQpO1xuICAgIGNvbnN0IGtlZXBJZHMgPVxuICAgICAgICBuZXcgU2V0PG51bWJlcj4oWy4uLm91dHB1dElkcywgLi4uaW5wdXRJZHMsIC4uLnRoaXMud2VpZ2h0SWRzXSk7XG5cbiAgICBPYmplY3QudmFsdWVzKHRlbnNvcnNNYXApLmZvckVhY2godGVuc29yc0xpc3QgPT4ge1xuICAgICAgdGVuc29yc0xpc3QuZm9yRWFjaCh0ZW5zb3IgPT4ge1xuICAgICAgICBpZiAodGVuc29yICYmICF0ZW5zb3IuaXNEaXNwb3NlZCAmJiAha2VlcElkcy5oYXModGVuc29yLmlkKSkge1xuICAgICAgICAgIHRlbnNvci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gZGlzcG9zZSB0aGUgY29udGV4dCBmb3IgdGhlIHJvb3QgZXhlY3V0b3JcbiAgICBpZiAodGhpcy5wYXJlbnQgPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kaXNwb3NlKGtlZXBJZHMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUZ1bmN0aW9uQXN5bmMoXG4gICAgICBpbnB1dHM6IFRlbnNvcltdLCB0ZW5zb3JBcnJheU1hcDogVGVuc29yQXJyYXlNYXAsXG4gICAgICB0ZW5zb3JMaXN0TWFwOiBUZW5zb3JMaXN0TWFwKTogUHJvbWlzZTxUZW5zb3JbXT4ge1xuICAgIGNvbnN0IG1hcHBlZElucHV0cyA9IGlucHV0cy5yZWR1Y2UoKG1hcCwgdGVuc29yLCBpbmRleCkgPT4ge1xuICAgICAgbWFwW3RoaXMuaW5wdXRzW2luZGV4XS5uYW1lXSA9IHRlbnNvcjtcbiAgICAgIHJldHVybiBtYXA7XG4gICAgfSwge30gYXMgTmFtZWRUZW5zb3JNYXApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGVBc3luYyhcbiAgICAgICAgbWFwcGVkSW5wdXRzLCB0aGlzLm91dHB1dE5vZGVzLCB0cnVlLCB0ZW5zb3JBcnJheU1hcCwgdGVuc29yTGlzdE1hcCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGVyZSBhcmUgY29udHJvbCBmbG93IG5vZGVzIGluIHRoZSBncmFwaCwgdGhlIGdyYXBoIGV4ZWN1dGlvbiB1c2VcbiAgICogRXhlY3V0aW9uQ29udGV4dCB0byBrZWVwIHRyYWNrIG9mIHRoZSBmcmFtZXMgYW5kIGxvb3AgaXRlcmF0b3JzLlxuICAgKiBAcGFyYW0gaW5wdXRzIHBsYWNlaG9sZGVyIHRlbnNvcnMgZm9yIHRoZSBncmFwaC5cbiAgICogQHBhcmFtIGNvbnRleHQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9iamVjdCBmb3IgY3VycmVudCBleGVjdXRpb24uXG4gICAqIEBwYXJhbSBvdXRwdXROYW1lcyBPcHRpb25hbC4gb3V0cHV0IG5vZGUgbmFtZSBmcm9tIHRoZSBUZW5zb3JmbG93IG1vZGVsLFxuICAgKiBpZiBubyBvdXRwdXRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IG91dHB1dHMgb2YgdGhlIG1vZGVsIHdvdWxkIGJlXG4gICAqIHVzZWQuIFlvdSBjYW4gaW5zcGVjdCBpbnRlcm1lZGlhdGUgbm9kZXMgb2YgdGhlIG1vZGVsIGJ5IGFkZGluZyB0aGVtIHRvXG4gICAqIHRoZSBvdXRwdXRzIGFycmF5LlxuICAgKiBAcGFyYW0gaXNGdW5jdGlvbkV4ZWN1dGlvbiBGbGFnIGZvciBleGVjdXRpbmcgYSBmdW5jdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVdpdGhDb250cm9sRmxvdyhcbiAgICAgIGlucHV0czogTmFtZWRUZW5zb3JNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIG91dHB1dE5hbWVzPzogc3RyaW5nW10sXG4gICAgICBpc0Z1bmN0aW9uRXhlY3V0aW9uPzogYm9vbGVhbik6IFByb21pc2U8TmFtZWRUZW5zb3JzTWFwPiB7XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpO1xuICAgIGNvbnN0IGlucHV0Tm9kZXMgPVxuICAgICAgICBuYW1lcy5tYXAobmFtZSA9PiB0aGlzLmdyYXBoLm5vZGVzW3BhcnNlTm9kZU5hbWUobmFtZSlbMF1dKTtcbiAgICBjb25zdCBvdXRwdXROb2RlTmFtZXMgPSBvdXRwdXROYW1lcy5tYXAobmFtZSA9PiBwYXJzZU5vZGVOYW1lKG5hbWUpWzBdKTtcbiAgICBjb25zdCBvdXRwdXROb2RlTmFtZVNldCA9IG5ldyBTZXQob3V0cHV0Tm9kZU5hbWVzKTtcbiAgICBsZXQgb3V0cHV0Tm9kZXMgPSBvdXRwdXROb2RlTmFtZXMubWFwKG5hbWUgPT4gdGhpcy5ncmFwaC5ub2Rlc1tuYW1lXSk7XG5cbiAgICAvLyBJZiBubyBvdXRwdXRzIGFyZSBzcGVjaWZpZWQsIHRoZW4gdXNlIHRoZSBkZWZhdWx0IG91dHB1dHMgb2YgdGhlIG1vZGVsLlxuICAgIGlmIChvdXRwdXROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIG91dHB1dE5vZGVzID0gdGhpcy5fb3V0cHV0cztcbiAgICB9XG5cbiAgICBjb25zdCB7dXNlZE5vZGVzLCBtaXNzaW5nSW5wdXRzLCBkeW5hbWljTm9kZSwgc3luY0lucHV0c30gPVxuICAgICAgICBnZXRFeGVjdXRpb25TdWJncmFwaChcbiAgICAgICAgICAgIGlucHV0cywgb3V0cHV0Tm9kZXMsIHRoaXMud2VpZ2h0TWFwLCB0aGlzLl9pbml0Tm9kZXMpO1xuXG4gICAgLy8gRmlyc3Qgbm9kZXMgdG8gZXhlY3V0ZSBpbmNsdWRlIGlucHV0Tm9kZXMsIHdlaWdodHMsIGFuZCBpbml0Tm9kZXMuXG4gICAgY29uc3Qgc3RhY2s6IE5vZGVXaXRoQ29udGV4dHNbXSA9IFtcbiAgICAgIC4uLmlucHV0Tm9kZXMsIC4uLnRoaXMuZ3JhcGgud2VpZ2h0cywgLi4uKHRoaXMuX2luaXROb2RlcyB8fCBbXSlcbiAgICBdLm1hcChub2RlID0+IHtcbiAgICAgIHJldHVybiB7bm9kZSwgY29udGV4dHM6IGNvbnRleHQuY3VycmVudENvbnRleHR9O1xuICAgIH0pO1xuICAgIGNvbnN0IHRlbnNvcnNNYXA6IE5hbWVkVGVuc29yc01hcCA9IHsuLi50aGlzLndlaWdodE1hcH07XG4gICAgT2JqZWN0LmtleXMoaW5wdXRzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgY29uc3QgW25vZGVOYW1lLCBpbmRleF0gPSBwYXJzZU5vZGVOYW1lKG5hbWUpO1xuICAgICAgY29uc3QgdGVuc29yczogVGVuc29yW10gPSBbXTtcbiAgICAgIHRlbnNvcnNbaW5kZXhdID0gaW5wdXRzW25hbWVdO1xuICAgICAgdGVuc29yc01hcFtub2RlTmFtZV0gPSB0ZW5zb3JzO1xuICAgIH0pO1xuICAgIGNvbnN0IGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnQ6IHtba2V5OiBudW1iZXJdOiBudW1iZXJ9ID0ge307XG4gICAgY29uc3QgdGVuc29yc1RvS2VlcCA9IHRoaXMuZ2V0RnJvemVuVGVuc29ySWRzKHRlbnNvcnNNYXApO1xuICAgIGNvbnN0IGFkZGVkOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLnByb2Nlc3NTdGFjayhcbiAgICAgICAgICBpbnB1dE5vZGVzLCBzdGFjaywgY29udGV4dCwgdGVuc29yc01hcCwgYWRkZWQsIHRlbnNvcnNUb0tlZXAsXG4gICAgICAgICAgb3V0cHV0Tm9kZU5hbWVTZXQsIGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnQsIHVzZWROb2Rlcyk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuICAgIGlmIChkeW5hbWljTm9kZSA9PSBudWxsICYmICFpc0Z1bmN0aW9uRXhlY3V0aW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFRoaXMgbW9kZWwgZXhlY3V0aW9uIGRpZCBub3QgY29udGFpbiBhbnkgbm9kZXMgd2l0aCBjb250cm9sIGZsb3cgYCArXG4gICAgICAgICAgYG9yIGR5bmFtaWMgb3V0cHV0IHNoYXBlcy4gWW91IGNhbiB1c2UgbW9kZWwuZXhlY3V0ZSgpIGluc3RlYWQuYCk7XG4gICAgfVxuICAgIGNvbnN0IG1pc3NpbmdPdXRwdXRzID1cbiAgICAgICAgb3V0cHV0Tm9kZXNcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgbm9kZSA9PiAhaXNDb250cm9sRmxvdyhub2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZ2V0VGVuc29yKG5vZGUubmFtZSwgdGVuc29yc01hcCwgY29udGV4dCkpXG4gICAgICAgICAgICAubWFwKG5vZGUgPT4gbm9kZS5uYW1lKTtcbiAgICBpZiAobWlzc2luZ091dHB1dHMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGFsdGVybmF0aXZlTXNnID0gJyc7XG4gICAgICBpZiAoZHluYW1pY05vZGUgIT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGl2ZU1zZyA9XG4gICAgICAgICAgICBgQWx0ZXJuYXRpdmVseSwgdG8gYXZvaWQgdGhlIGR5bmFtaWMgb3BzLCB1c2UgbW9kZWwuZXhlY3V0ZSgpIGAgK1xuICAgICAgICAgICAgYGFuZCBzcGVjaWZ5IHRoZSBpbnB1dHMgWyR7c3luY0lucHV0c31dYDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGNvbXB1dGUgdGhlIG91dHB1dHMgWyR7bWlzc2luZ091dHB1dHN9XSBmcm9tIHRoZSBwcm92aWRlZCBgICtcbiAgICAgICAgICBgaW5wdXRzIFske25hbWVzfV0uIENvbnNpZGVyIHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGlucHV0czogYCArXG4gICAgICAgICAgYFske21pc3NpbmdJbnB1dHN9XS4gJHthbHRlcm5hdGl2ZU1zZ31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbnNvcnNNYXA7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdGFjayhcbiAgICAgIGlucHV0Tm9kZXM6IE5vZGVbXSwgc3RhY2s6IE5vZGVXaXRoQ29udGV4dHNbXSwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBhZGRlZDoge1trZXk6IHN0cmluZ106IGJvb2xlYW59LFxuICAgICAgdGVuc29yc1RvS2VlcDogU2V0PG51bWJlcj4sIG91dHB1dE5vZGVOYW1lU2V0OiBTZXQ8c3RyaW5nPixcbiAgICAgIGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnQ6IHtba2V5OiBudW1iZXJdOiBudW1iZXJ9LFxuICAgICAgdXNlZE5vZGVzOiBTZXQ8c3RyaW5nPikge1xuICAgIGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPFRlbnNvcltdPj4gPSBbXTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXRlbSA9IHN0YWNrLnBvcCgpO1xuICAgICAgY29udGV4dC5jdXJyZW50Q29udGV4dCA9IGl0ZW0uY29udGV4dHM7XG4gICAgICBsZXQgbm9kZU5hbWUgPSAnJztcbiAgICAgIC8vIFRoZSB0ZW5zb3Igb2YgdGhlIEVudGVyIG9wIHdpdGggaXNDb25zdGFudCBzZXQgc2hvdWxkIGJlIHNldFxuICAgICAgLy8gaW4gdGhlIHBhcmVudCBzY29wZSwgc28gaXQgd2lsbCBiZSBhdmFpbGFibGUgYXMgY29uc3RhbnQgZm9yIHRoZVxuICAgICAgLy8gd2hvbGUgbG9vcC5cbiAgICAgIGlmIChpdGVtLm5vZGUub3AgPT09ICdFbnRlcicgJiZcbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpc0NvbnN0YW50JywgaXRlbS5ub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKSB7XG4gICAgICAgIFtub2RlTmFtZV0gPSBnZXROb2RlTmFtZUFuZEluZGV4KGl0ZW0ubm9kZS5uYW1lLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgLy8gb25seSBwcm9jZXNzIG5vZGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdGVuc29yTWFwIHlldCwgdGhpcyBpbmNsdWRlXG4gICAgICAvLyBpbnB1dE5vZGVzIGFuZCBpbnRlcm5hbCBpbml0Tm9kZXMuXG4gICAgICBpZiAodGVuc29yTWFwW2l0ZW0ubm9kZS5uYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRlbnNvcnMgPVxuICAgICAgICAgICAgZXhlY3V0ZU9wKGl0ZW0ubm9kZSwgdGVuc29yTWFwLCBjb250ZXh0LCB0aGlzLl9yZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICBpZiAoIW5vZGVOYW1lKSB7XG4gICAgICAgICAgW25vZGVOYW1lXSA9IGdldE5vZGVOYW1lQW5kSW5kZXgoaXRlbS5ub2RlLm5hbWUsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gY29udGV4dC5jdXJyZW50Q29udGV4dDtcbiAgICAgICAgaWYgKHV0aWwuaXNQcm9taXNlKHRlbnNvcnMpKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaCh0ZW5zb3JzLnRoZW4odCA9PiB7XG4gICAgICAgICAgICB0ZW5zb3JNYXBbbm9kZU5hbWVdID0gdDtcbiAgICAgICAgICAgIGlmICh0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xvbmVkVGVuc29yc01hcFtub2RlTmFtZV0gPSB0aGlzLmNsb25lVGVuc29yTGlzdCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuY3VycmVudENvbnRleHQgPSBjdXJyZW50Q29udGV4dDtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tUZW5zb3JGb3JEaXNwb3NhbChcbiAgICAgICAgICAgICAgICBub2RlTmFtZSwgaXRlbS5ub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQsIHRlbnNvcnNUb0tlZXAsXG4gICAgICAgICAgICAgICAgb3V0cHV0Tm9kZU5hbWVTZXQsIGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnQpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ2hpbGROb2RlcyhcbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUsIHN0YWNrLCBjb250ZXh0LCB0ZW5zb3JNYXAsIGFkZGVkLCB1c2VkTm9kZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRlbnNvck1hcFtub2RlTmFtZV0gPSB0ZW5zb3JzO1xuICAgICAgICAgIGlmICh0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzKSB7XG4gICAgICAgICAgICB0aGlzLmNsb25lZFRlbnNvcnNNYXBbbm9kZU5hbWVdID0gdGhpcy5jbG9uZVRlbnNvckxpc3QodGVuc29ycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2hlY2tUZW5zb3JGb3JEaXNwb3NhbChcbiAgICAgICAgICAgICAgbm9kZU5hbWUsIGl0ZW0ubm9kZSwgdGVuc29yTWFwLCBjb250ZXh0LCB0ZW5zb3JzVG9LZWVwLFxuICAgICAgICAgICAgICBvdXRwdXROb2RlTmFtZVNldCwgaW50ZXJtZWRpYXRlVGVuc29yQ29uc3VtZXJDb3VudCk7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzQ2hpbGROb2RlcyhcbiAgICAgICAgICAgICAgaXRlbS5ub2RlLCBzdGFjaywgY29udGV4dCwgdGVuc29yTWFwLCBhZGRlZCwgdXNlZE5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2hpbGROb2RlcyhcbiAgICAgICAgICAgIGl0ZW0ubm9kZSwgc3RhY2ssIGNvbnRleHQsIHRlbnNvck1hcCwgYWRkZWQsIHVzZWROb2Rlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlcztcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0NoaWxkTm9kZXMoXG4gICAgICBub2RlOiBOb2RlLCBzdGFjazogTm9kZVdpdGhDb250ZXh0c1tdLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgICAgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGFkZGVkOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sXG4gICAgICB1c2VkTm9kZXM6IFNldDxzdHJpbmc+KSB7XG4gICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IFtub2RlTmFtZSwgXSA9IGdldE5vZGVOYW1lQW5kSW5kZXgoY2hpbGROb2RlLm5hbWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGFkZGVkW25vZGVOYW1lXSB8fCAhdXNlZE5vZGVzLmhhcyhjaGlsZE5vZGUubmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gTWVyZ2Ugb3AgY2FuIGJlIHB1c2hlZCBpZiBhbnkgb2YgaXRzIGlucHV0cyBoYXMgdmFsdWUuXG4gICAgICBpZiAoY2hpbGROb2RlLm9wID09PSAnTWVyZ2UnKSB7XG4gICAgICAgIGlmIChjaGlsZE5vZGUuaW5wdXROYW1lcy5zb21lKG5hbWUgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gISFnZXRUZW5zb3IobmFtZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgYWRkZWRbbm9kZU5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICBzdGFjay5wdXNoKHtjb250ZXh0czogY29udGV4dC5jdXJyZW50Q29udGV4dCwgbm9kZTogY2hpbGROb2RlfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSAgLy8gT3RoZXJ3aXNlIGFsbCBpbnB1dHMgbXVzdCB0byBoYXZlIHZhbHVlLlxuICAgICAgICAgIGlmIChjaGlsZE5vZGUuaW5wdXROYW1lcy5ldmVyeShuYW1lID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFnZXRUZW5zb3IobmFtZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgYWRkZWRbbm9kZU5hbWVdID0gdHJ1ZTtcbiAgICAgICAgc3RhY2sucHVzaCh7Y29udGV4dHM6IGNvbnRleHQuY3VycmVudENvbnRleHQsIG5vZGU6IGNoaWxkTm9kZX0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIHRoZSBtZW1vcnkgdXNlZCBieSB0aGUgd2VpZ2h0IHRlbnNvcnMuXG4gICAqL1xuICBkaXNwb3NlKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMud2VpZ2h0TWFwKVxuICAgICAgICAuZm9yRWFjaChcbiAgICAgICAgICAgIGtleSA9PiB0aGlzLndlaWdodE1hcFtrZXldLmZvckVhY2godGVuc29yID0+IHRlbnNvci5kaXNwb3NlKCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJbnB1dFNoYXBlQW5kVHlwZShpbnB1dHM6IE5hbWVkVGVuc29yTWFwKSB7XG4gICAgT2JqZWN0LmtleXMoaW5wdXRzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHNbbmFtZV07XG4gICAgICBjb25zdCBbbm9kZU5hbWUsIF0gPSBwYXJzZU5vZGVOYW1lKG5hbWUpO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ3JhcGgubm9kZXNbbm9kZU5hbWVdO1xuICAgICAgaWYgKG5vZGUuYXR0clBhcmFtc1snc2hhcGUnXSAmJiBub2RlLmF0dHJQYXJhbXNbJ3NoYXBlJ10udmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBub2RlLmF0dHJQYXJhbXNbJ3NoYXBlJ10udmFsdWUgYXMgbnVtYmVyW107XG4gICAgICAgIGNvbnN0IG1hdGNoID0gc2hhcGUubGVuZ3RoID09PSBpbnB1dC5zaGFwZS5sZW5ndGggJiZcbiAgICAgICAgICAgIGlucHV0LnNoYXBlLmV2ZXJ5KFxuICAgICAgICAgICAgICAgIChkaW0sIGluZGV4KSA9PiBzaGFwZVtpbmRleF0gPT09IC0xIHx8IHNoYXBlW2luZGV4XSA9PT0gZGltKTtcbiAgICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICgpID0+IGBUaGUgc2hhcGUgb2YgZGljdFsnJHtub2RlLm5hbWV9J10gcHJvdmlkZWQgaW4gYCArXG4gICAgICAgICAgICAgICAgYG1vZGVsLmV4ZWN1dGUoZGljdCkgbXVzdCBiZSBbJHtzaGFwZX1dLCBidXQgd2FzIGAgK1xuICAgICAgICAgICAgICAgIGBbJHtpbnB1dC5zaGFwZX1dYCk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5hdHRyUGFyYW1zWydkdHlwZSddICYmIG5vZGUuYXR0clBhcmFtc1snZHR5cGUnXS52YWx1ZSkge1xuICAgICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICAgIGlucHV0LmR0eXBlID09PSBub2RlLmF0dHJQYXJhbXNbJ2R0eXBlJ10udmFsdWUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgKCkgPT4gYFRoZSBkdHlwZSBvZiBkaWN0Wycke25vZGUubmFtZX0nXSBwcm92aWRlZCBpbiBgICtcbiAgICAgICAgICAgICAgICBgbW9kZWwuZXhlY3V0ZShkaWN0KSBtdXN0IGJlIGAgK1xuICAgICAgICAgICAgICAgIGAke25vZGUuYXR0clBhcmFtc1snZHR5cGUnXS52YWx1ZX0sIGJ1dCB3YXMgJHtpbnB1dC5kdHlwZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSW5wdXRzKGlucHV0czogTmFtZWRUZW5zb3JNYXApIHtcbiAgICBjb25zdCByZXN1bHQ6IE5hbWVkVGVuc29yTWFwID0ge307XG4gICAgZm9yIChjb25zdCBpbnB1dE5hbWUgaW4gaW5wdXRzKSB7XG4gICAgICBjb25zdCB0ZW5zb3IgPSB0aGlzLl9zaWduYXR1cmUgPy5pbnB1dHMgPy5baW5wdXROYW1lXTtcbiAgICAgIGlmICh0ZW5zb3IgIT0gbnVsbCkge1xuICAgICAgICByZXN1bHRbdGVuc29yLm5hbWVdID0gaW5wdXRzW2lucHV0TmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbaW5wdXROYW1lXSA9IGlucHV0c1tpbnB1dE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lucHV0cyhpbnB1dHM6IE5hbWVkVGVuc29yTWFwKSB7XG4gICAgY29uc3Qgbm90SW5HcmFwaCA9IE9iamVjdC5rZXlzKGlucHV0cykuZmlsdGVyKG5hbWUgPT4ge1xuICAgICAgY29uc3QgW25vZGVOYW1lXSA9IHBhcnNlTm9kZU5hbWUobmFtZSk7XG4gICAgICByZXR1cm4gdGhpcy5ncmFwaC5ub2Rlc1tub2RlTmFtZV0gPT0gbnVsbDtcbiAgICB9KTtcbiAgICBpZiAobm90SW5HcmFwaC5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRoZSBkaWN0IHByb3ZpZGVkIGluIG1vZGVsLmV4ZWN1dGUoZGljdCkgaGFzIGAgK1xuICAgICAgICAgIGBrZXlzOiBbJHtub3RJbkdyYXBofV0gdGhhdCBhcmUgbm90IHBhcnQgb2YgZ3JhcGhgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcE91dHB1dHMob3V0cHV0czogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gb3V0cHV0cy5tYXAobmFtZSA9PiB7XG4gICAgICBjb25zdCB0ZW5zb3IgPSB0aGlzLl9zaWduYXR1cmUgPy5vdXRwdXRzID8uW25hbWVdO1xuICAgICAgaWYgKHRlbnNvciAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0ZW5zb3IubmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tPdXRwdXRzKG91dHB1dHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgb3V0cHV0cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgY29uc3QgW25vcm1hbGl6ZWROYW1lXSA9IHBhcnNlTm9kZU5hbWUobmFtZSk7XG4gICAgICBpZiAoIXRoaXMuZ3JhcGgubm9kZXNbbm9ybWFsaXplZE5hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG91dHB1dCAnJHtuYW1lfScgaXMgbm90IGZvdW5kIGluIHRoZSBncmFwaGApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=","/**\n * Contains global resources of a model.\n */\nexport class ResourceManager {\n constructor(hashTableNameToHandle = {}, hashTableMap = {}) {\n this.hashTableNameToHandle = hashTableNameToHandle;\n this.hashTableMap = hashTableMap;\n }\n /**\n * Register a `HashTable` in the resource manager.\n *\n * The `HashTable` can be retrieved by `resourceManager.getHashTableById`,\n * where id is the table handle tensor's id.\n *\n * @param name Op node name that creates the `HashTable`.\n * @param hashTable The `HashTable` to be added to resource manager.\n */\n addHashTable(name, hashTable) {\n this.hashTableNameToHandle[name] = hashTable.handle;\n this.hashTableMap[hashTable.id] = hashTable;\n }\n /**\n * Get the table handle by node name.\n * @param name Op node name that creates the `HashTable`. This name is also\n * used in the inputs list of lookup and import `HashTable` ops.\n */\n getHashTableHandleByName(name) {\n return this.hashTableNameToHandle[name];\n }\n /**\n * Get the actual `HashTable` by its handle tensor's id.\n * @param id The id of the handle tensor.\n */\n getHashTableById(id) {\n return this.hashTableMap[id];\n }\n /**\n * Dispose `ResourceManager`, including its hashTables and tensors in them.\n */\n dispose() {\n for (const key in this.hashTableMap) {\n this.hashTableMap[key].clearAndClose();\n delete this.hashTableMap[key];\n }\n for (const name in this.hashTableNameToHandle) {\n this.hashTableNameToHandle[name].dispose();\n delete this.hashTableNameToHandle[name];\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9leGVjdXRvci9yZXNvdXJjZV9tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ2Esd0JBQXdDLEVBQUUsRUFDMUMsZUFBNkIsRUFBRTtRQUQvQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXFCO1FBQzFDLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtJQUFHLENBQUM7SUFFaEQ7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLENBQUMsSUFBWSxFQUFFLFNBQW9CO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHdCQUF3QixDQUFDLElBQVk7UUFDbkMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLEVBQVU7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0I7UUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0hhc2hUYWJsZU1hcCwgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtIYXNoVGFibGV9IGZyb20gJy4vaGFzaF90YWJsZSc7XG5cbi8qKlxuICogQ29udGFpbnMgZ2xvYmFsIHJlc291cmNlcyBvZiBhIG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBoYXNoVGFibGVOYW1lVG9IYW5kbGU6IE5hbWVkVGVuc29yTWFwID0ge30sXG4gICAgICByZWFkb25seSBoYXNoVGFibGVNYXA6IEhhc2hUYWJsZU1hcCA9IHt9KSB7fVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGBIYXNoVGFibGVgIGluIHRoZSByZXNvdXJjZSBtYW5hZ2VyLlxuICAgKlxuICAgKiBUaGUgYEhhc2hUYWJsZWAgY2FuIGJlIHJldHJpZXZlZCBieSBgcmVzb3VyY2VNYW5hZ2VyLmdldEhhc2hUYWJsZUJ5SWRgLFxuICAgKiB3aGVyZSBpZCBpcyB0aGUgdGFibGUgaGFuZGxlIHRlbnNvcidzIGlkLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBPcCBub2RlIG5hbWUgdGhhdCBjcmVhdGVzIHRoZSBgSGFzaFRhYmxlYC5cbiAgICogQHBhcmFtIGhhc2hUYWJsZSBUaGUgYEhhc2hUYWJsZWAgdG8gYmUgYWRkZWQgdG8gcmVzb3VyY2UgbWFuYWdlci5cbiAgICovXG4gIGFkZEhhc2hUYWJsZShuYW1lOiBzdHJpbmcsIGhhc2hUYWJsZTogSGFzaFRhYmxlKSB7XG4gICAgdGhpcy5oYXNoVGFibGVOYW1lVG9IYW5kbGVbbmFtZV0gPSBoYXNoVGFibGUuaGFuZGxlO1xuICAgIHRoaXMuaGFzaFRhYmxlTWFwW2hhc2hUYWJsZS5pZF0gPSBoYXNoVGFibGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0YWJsZSBoYW5kbGUgYnkgbm9kZSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBPcCBub2RlIG5hbWUgdGhhdCBjcmVhdGVzIHRoZSBgSGFzaFRhYmxlYC4gVGhpcyBuYW1lIGlzIGFsc29cbiAgICogICAgIHVzZWQgaW4gdGhlIGlucHV0cyBsaXN0IG9mIGxvb2t1cCBhbmQgaW1wb3J0IGBIYXNoVGFibGVgIG9wcy5cbiAgICovXG4gIGdldEhhc2hUYWJsZUhhbmRsZUJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNoVGFibGVOYW1lVG9IYW5kbGVbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhY3R1YWwgYEhhc2hUYWJsZWAgYnkgaXRzIGhhbmRsZSB0ZW5zb3IncyBpZC5cbiAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgaGFuZGxlIHRlbnNvci5cbiAgICovXG4gIGdldEhhc2hUYWJsZUJ5SWQoaWQ6IG51bWJlcik6IEhhc2hUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzaFRhYmxlTWFwW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlIGBSZXNvdXJjZU1hbmFnZXJgLCBpbmNsdWRpbmcgaXRzIGhhc2hUYWJsZXMgYW5kIHRlbnNvcnMgaW4gdGhlbS5cbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5oYXNoVGFibGVNYXApIHtcbiAgICAgIHRoaXMuaGFzaFRhYmxlTWFwW2tleV0uY2xlYXJBbmRDbG9zZSgpO1xuICAgICAgZGVsZXRlIHRoaXMuaGFzaFRhYmxlTWFwW2tleV07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMuaGFzaFRhYmxlTmFtZVRvSGFuZGxlKSB7XG4gICAgICB0aGlzLmhhc2hUYWJsZU5hbWVUb0hhbmRsZVtuYW1lXS5kaXNwb3NlKCk7XG4gICAgICBkZWxldGUgdGhpcy5oYXNoVGFibGVOYW1lVG9IYW5kbGVbbmFtZV07XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { dispose, io, Tensor, util } from '@tensorflow/tfjs-core';\nimport { OperationMapper } from '../operations/operation_mapper';\nimport { GraphExecutor } from './graph_executor';\nimport { ResourceManager } from './resource_manager';\n// tslint:disable-next-line: no-imports-from-dist\nimport { decodeWeightsStream } from '@tensorflow/tfjs-core/dist/io/io_utils';\nexport const TFHUB_SEARCH_PARAM = '?tfjs-format=file';\nexport const DEFAULT_MODEL_NAME = 'model.json';\n/**\n * A `tf.GraphModel` is a directed, acyclic graph built from a\n * SavedModel GraphDef and allows inference execution.\n *\n * A `tf.GraphModel` can only be created by loading from a model converted from\n * a [TensorFlow SavedModel](https://www.tensorflow.org/guide/saved_model) using\n * the command line converter tool and loaded via `tf.loadGraphModel`.\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\nexport class GraphModel {\n // Returns the version information for the tensorflow model GraphDef.\n get modelVersion() {\n return this.version;\n }\n get inputNodes() {\n return this.executor.inputNodes;\n }\n get outputNodes() {\n return this.executor.outputNodes;\n }\n get inputs() {\n return this.executor.inputs;\n }\n get outputs() {\n return this.executor.outputs;\n }\n get weights() {\n return this.executor.weightMap;\n }\n get metadata() {\n return this.artifacts.userDefinedMetadata;\n }\n get modelSignature() {\n return this.signature;\n }\n get modelStructuredOutputKeys() {\n return this.structuredOutputKeys;\n }\n /**\n * @param modelUrl url for the model, or an `io.IOHandler`.\n * @param weightManifestUrl url for the weight file generated by\n * scripts/convert.py script.\n * @param requestOption options for Request, which allows to send credentials\n * and custom headers.\n * @param onProgress Optional, progress callback function, fired periodically\n * before the load is completed.\n */\n constructor(modelUrl, loadOptions = {}, tfio = io) {\n this.modelUrl = modelUrl;\n this.loadOptions = loadOptions;\n this.version = 'n/a';\n this.io = tfio;\n if (loadOptions == null) {\n this.loadOptions = {};\n }\n this.resourceManager = new ResourceManager();\n }\n findIOHandler() {\n const path = this.modelUrl;\n if (path.load != null) {\n // Path is an IO Handler.\n this.handler = path;\n }\n else if (this.loadOptions.requestInit != null) {\n this.handler = this.io.browserHTTPRequest(path, this.loadOptions);\n }\n else {\n const handlers = this.io.getLoadHandlers(path, this.loadOptions);\n if (handlers.length === 0) {\n // For backward compatibility: if no load handler can be found,\n // assume it is a relative http path.\n handlers.push(this.io.browserHTTPRequest(path, this.loadOptions));\n }\n else if (handlers.length > 1) {\n throw new Error(`Found more than one (${handlers.length}) load handlers for ` +\n `URL '${[path]}'`);\n }\n this.handler = handlers[0];\n }\n }\n /**\n * Loads the model and weight files, construct the in memory weight map and\n * compile the inference graph.\n */\n load() {\n this.findIOHandler();\n if (this.handler.load == null) {\n throw new Error('Cannot proceed with model loading because the IOHandler provided ' +\n 'does not have the `load` method implemented.');\n }\n const loadResult = this.handler.load();\n if (util.isPromise(loadResult)) {\n return loadResult.then(artifacts => {\n if (artifacts.getWeightStream == null) {\n return this.loadSync(artifacts);\n }\n return this.loadStreaming(artifacts);\n });\n }\n return this.loadSync(loadResult);\n }\n /**\n * Synchronously construct the in memory weight map and\n * compile the inference graph.\n *\n * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true}\n */\n loadSync(artifacts) {\n const weightMap = this.io.decodeWeights(artifacts.weightData, artifacts.weightSpecs);\n return this.loadWithWeightMap(artifacts, weightMap);\n }\n async loadStreaming(artifacts) {\n if (artifacts.getWeightStream == null) {\n throw new Error('Model artifacts missing streamWeights function');\n }\n const weightMap = await decodeWeightsStream(artifacts.getWeightStream(), artifacts.weightSpecs);\n return this.loadWithWeightMap(artifacts, weightMap);\n }\n loadWithWeightMap(artifacts, weightMap) {\n this.artifacts = artifacts;\n const graph = this.artifacts.modelTopology;\n let signature = this.artifacts.signature;\n if (this.artifacts.userDefinedMetadata != null) {\n const metadata = this.artifacts.userDefinedMetadata;\n if (metadata.signature != null) {\n signature = metadata.signature;\n }\n if (metadata.structuredOutputKeys != null) {\n this.structuredOutputKeys = metadata.structuredOutputKeys;\n }\n }\n this.signature = signature;\n this.version = `${graph.versions.producer}.${graph.versions.minConsumer}`;\n this.executor = new GraphExecutor(OperationMapper.Instance.transformGraph(graph, this.signature));\n this.executor.weightMap = this.convertTensorMapToTensorsMap(weightMap);\n // Attach a model-level resourceManager to each executor to share resources,\n // such as `HashTable`.\n this.executor.resourceManager = this.resourceManager;\n if (artifacts.modelInitializer != null &&\n artifacts.modelInitializer.node != null) {\n const initializer = OperationMapper.Instance.transformGraph(artifacts.modelInitializer);\n this.initializer = new GraphExecutor(initializer);\n this.initializer.weightMap = this.executor.weightMap;\n // Attach a model-level resourceManager to the initializer, the\n // hashTables created from when executing the initializer will be stored\n // in the resourceManager.\n this.initializer.resourceManager = this.resourceManager;\n this.initializerSignature = artifacts.initializerSignature;\n }\n return true;\n }\n /**\n * Save the configuration and/or weights of the GraphModel.\n *\n * An `IOHandler` is an object that has a `save` method of the proper\n * signature defined. The `save` method manages the storing or\n * transmission of serialized data (\"artifacts\") that represent the\n * model's topology and weights onto or via a specific medium, such as\n * file downloads, local storage, IndexedDB in the web browser and HTTP\n * requests to a server. TensorFlow.js provides `IOHandler`\n * implementations for a number of frequently used saving mediums, such as\n * `tf.io.browserDownloads` and `tf.io.browserLocalStorage`. See `tf.io`\n * for more details.\n *\n * This method also allows you to refer to certain types of `IOHandler`s\n * as URL-like string shortcuts, such as 'localstorage://' and\n * 'indexeddb://'.\n *\n * Example 1: Save `model`'s topology and weights to browser [local\n * storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage);\n * then load it back.\n *\n * ```js\n * const modelUrl =\n * 'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json';\n * const model = await tf.loadGraphModel(modelUrl);\n * const zeros = tf.zeros([1, 224, 224, 3]);\n * model.predict(zeros).print();\n *\n * const saveResults = await model.save('localstorage://my-model-1');\n *\n * const loadedModel = await tf.loadGraphModel('localstorage://my-model-1');\n * console.log('Prediction from loaded model:');\n * model.predict(zeros).print();\n * ```\n *\n * @param handlerOrURL An instance of `IOHandler` or a URL-like,\n * scheme-based string shortcut for `IOHandler`.\n * @param config Options for saving the model.\n * @returns A `Promise` of `SaveResult`, which summarizes the result of\n * the saving, such as byte sizes of the saved artifacts for the model's\n * topology and weight values.\n *\n * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true}\n */\n async save(handlerOrURL, config) {\n if (typeof handlerOrURL === 'string') {\n const handlers = this.io.getSaveHandlers(handlerOrURL);\n if (handlers.length === 0) {\n throw new Error(`Cannot find any save handlers for URL '${handlerOrURL}'`);\n }\n else if (handlers.length > 1) {\n throw new Error(`Found more than one (${handlers.length}) save handlers for ` +\n `URL '${handlerOrURL}'`);\n }\n handlerOrURL = handlers[0];\n }\n if (handlerOrURL.save == null) {\n throw new Error('GraphModel.save() cannot proceed because the IOHandler ' +\n 'provided does not have the `save` attribute defined.');\n }\n return handlerOrURL.save(this.artifacts);\n }\n addStructuredOutputNames(outputTensors) {\n if (this.structuredOutputKeys) {\n const outputTensorsArray = outputTensors instanceof Tensor ? [outputTensors] : outputTensors;\n const outputTensorMap = {};\n outputTensorsArray.forEach((outputTensor, i) => outputTensorMap[this.structuredOutputKeys[i]] =\n outputTensor);\n return outputTensorMap;\n }\n return outputTensors;\n }\n /**\n * Execute the inference for the input tensors.\n *\n * @param input The input tensors, when there is single input for the model,\n * inputs param should be a `tf.Tensor`. For models with multiple inputs,\n * inputs params should be in either `tf.Tensor`[] if the input order is\n * fixed, or otherwise NamedTensorMap format.\n *\n * For model with multiple inputs, we recommend you use NamedTensorMap as the\n * input type, if you use `tf.Tensor`[], the order of the array needs to\n * follow the\n * order of inputNodes array. @see {@link GraphModel.inputNodes}\n *\n * You can also feed any intermediate nodes using the NamedTensorMap as the\n * input type. For example, given the graph\n * InputNode => Intermediate => OutputNode,\n * you can execute the subgraph Intermediate => OutputNode by calling\n * model.execute('IntermediateNode' : tf.tensor(...));\n *\n * This is useful for models that uses tf.dynamic_rnn, where the intermediate\n * state needs to be fed manually.\n *\n * For batch inference execution, the tensors for each input need to be\n * concatenated together. For example with mobilenet, the required input shape\n * is [1, 244, 244, 3], which represents the [batch, height, width, channel].\n * If we are provide a batched data of 100 images, the input tensor should be\n * in the shape of [100, 244, 244, 3].\n *\n * @param config Prediction configuration for specifying the batch size.\n * Currently the batch size option is ignored for graph model.\n *\n * @returns Inference result tensors. If the model is converted and it\n * originally had structured_outputs in tensorflow, then a NamedTensorMap\n * will be returned matching the structured_outputs. If no structured_outputs\n * are present, the output will be single `tf.Tensor` if the model has single\n * output node, otherwise Tensor[].\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n predict(inputs, config) {\n const outputTensors = this.execute(inputs, this.outputNodes);\n return this.addStructuredOutputNames(outputTensors);\n }\n /**\n * Execute the inference for the input tensors in async fashion, use this\n * method when your model contains control flow ops.\n *\n * @param input The input tensors, when there is single input for the model,\n * inputs param should be a `tf.Tensor`. For models with mutliple inputs,\n * inputs params should be in either `tf.Tensor`[] if the input order is\n * fixed, or otherwise NamedTensorMap format.\n *\n * For model with multiple inputs, we recommend you use NamedTensorMap as the\n * input type, if you use `tf.Tensor`[], the order of the array needs to\n * follow the\n * order of inputNodes array. @see {@link GraphModel.inputNodes}\n *\n * You can also feed any intermediate nodes using the NamedTensorMap as the\n * input type. For example, given the graph\n * InputNode => Intermediate => OutputNode,\n * you can execute the subgraph Intermediate => OutputNode by calling\n * model.execute('IntermediateNode' : tf.tensor(...));\n *\n * This is useful for models that uses tf.dynamic_rnn, where the intermediate\n * state needs to be fed manually.\n *\n * For batch inference execution, the tensors for each input need to be\n * concatenated together. For example with mobilenet, the required input shape\n * is [1, 244, 244, 3], which represents the [batch, height, width, channel].\n * If we are provide a batched data of 100 images, the input tensor should be\n * in the shape of [100, 244, 244, 3].\n *\n * @param config Prediction configuration for specifying the batch size.\n * Currently the batch size option is ignored for graph model.\n *\n * @returns A Promise of inference result tensors. If the model is converted\n * and it originally had structured_outputs in tensorflow, then a\n * NamedTensorMap will be returned matching the structured_outputs. If no\n * structured_outputs are present, the output will be single `tf.Tensor` if\n * the model has single output node, otherwise Tensor[].\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n async predictAsync(inputs, config) {\n const outputTensors = await this.executeAsync(inputs, this.outputNodes);\n return this.addStructuredOutputNames(outputTensors);\n }\n normalizeInputs(inputs) {\n var _a;\n if (!(inputs instanceof Tensor) && !Array.isArray(inputs)) {\n // The input is already a NamedTensorMap.\n const signatureInputs = (_a = this.signature) === null || _a === void 0 ? void 0 : _a.inputs;\n if (signatureInputs != null) {\n for (const input in signatureInputs) {\n const tensor = signatureInputs[input];\n if (tensor.resourceId != null) {\n inputs[input] = this.resourceIdToCapturedInput[tensor.resourceId];\n }\n }\n }\n return inputs;\n }\n inputs = Array.isArray(inputs) ? inputs : [inputs];\n const numCapturedInputs = Object.keys(this.resourceIdToCapturedInput).length;\n if (inputs.length + numCapturedInputs !== this.inputNodes.length) {\n throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length -\n numCapturedInputs} non-resource placeholders, while there are ${inputs.length} input tensors provided.`);\n }\n let inputIndex = 0;\n return this.inputNodes.reduce((map, inputName) => {\n var _a, _b, _c;\n const resourceId = (_c = (_b = (_a = this.signature) === null || _a === void 0 ? void 0 : _a.inputs) === null || _b === void 0 ? void 0 : _b[inputName]) === null || _c === void 0 ? void 0 : _c.resourceId;\n if (resourceId != null) {\n map[inputName] = this.resourceIdToCapturedInput[resourceId];\n }\n else {\n map[inputName] = inputs[inputIndex++];\n }\n return map;\n }, {});\n }\n normalizeOutputs(outputs) {\n outputs = outputs || this.outputNodes;\n return !Array.isArray(outputs) ? [outputs] : outputs;\n }\n executeInitializerGraph() {\n if (this.initializer == null) {\n return [];\n }\n if (this.initializerSignature == null) {\n return this.initializer.execute({}, []);\n }\n else {\n return this.initializer.execute({}, Object.keys(this.initializerSignature.outputs));\n }\n }\n async executeInitializerGraphAsync() {\n if (this.initializer == null) {\n return [];\n }\n if (this.initializerSignature == null) {\n return this.initializer.executeAsync({}, []);\n }\n else {\n return this.initializer.executeAsync({}, Object.keys(this.initializerSignature.outputs));\n }\n }\n setResourceIdToCapturedInput(outputs) {\n this.resourceIdToCapturedInput = {};\n if (this.initializerSignature) {\n const signatureOutputs = this.initializerSignature.outputs;\n const outputNames = Object.keys(signatureOutputs);\n for (let i = 0; i < outputNames.length; i++) {\n const outputName = outputNames[i];\n const tensorInfo = signatureOutputs[outputName];\n this.resourceIdToCapturedInput[tensorInfo.resourceId] = outputs[i];\n }\n }\n }\n /**\n * Executes inference for the model for given input tensors.\n * @param inputs tensor, tensor array or tensor map of the inputs for the\n * model, keyed by the input node names.\n * @param outputs output node name from the TensorFlow model, if no\n * outputs are specified, the default outputs of the model would be used.\n * You can inspect intermediate nodes of the model by adding them to the\n * outputs array.\n *\n * @returns A single tensor if provided with a single output or no outputs\n * are provided and there is only one default output, otherwise return a\n * tensor array. The order of the tensor array is the same as the outputs\n * if provided, otherwise the order of outputNodes attribute of the model.\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n execute(inputs, outputs) {\n if (this.resourceIdToCapturedInput == null) {\n this.setResourceIdToCapturedInput(this.executeInitializerGraph());\n }\n inputs = this.normalizeInputs(inputs);\n outputs = this.normalizeOutputs(outputs);\n const result = this.executor.execute(inputs, outputs);\n return result.length > 1 ? result : result[0];\n }\n /**\n * Executes inference for the model for given input tensors in async\n * fashion, use this method when your model contains control flow ops.\n * @param inputs tensor, tensor array or tensor map of the inputs for the\n * model, keyed by the input node names.\n * @param outputs output node name from the TensorFlow model, if no outputs\n * are specified, the default outputs of the model would be used. You can\n * inspect intermediate nodes of the model by adding them to the outputs\n * array.\n *\n * @returns A Promise of single tensor if provided with a single output or\n * no outputs are provided and there is only one default output, otherwise\n * return a tensor map.\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n async executeAsync(inputs, outputs) {\n if (this.resourceIdToCapturedInput == null) {\n this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync());\n }\n inputs = this.normalizeInputs(inputs);\n outputs = this.normalizeOutputs(outputs);\n const result = await this.executor.executeAsync(inputs, outputs);\n return result.length > 1 ? result : result[0];\n }\n /**\n * Get intermediate tensors for model debugging mode (flag\n * KEEP_INTERMEDIATE_TENSORS is true).\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n getIntermediateTensors() {\n return this.executor.getIntermediateTensors();\n }\n /**\n * Dispose intermediate tensors for model debugging mode (flag\n * KEEP_INTERMEDIATE_TENSORS is true).\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n disposeIntermediateTensors() {\n this.executor.disposeIntermediateTensors();\n }\n convertTensorMapToTensorsMap(map) {\n return Object.keys(map).reduce((newMap, key) => {\n newMap[key] = [map[key]];\n return newMap;\n }, {});\n }\n /**\n * Releases the memory used by the weight tensors and resourceManager.\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n dispose() {\n this.executor.dispose();\n if (this.initializer) {\n this.initializer.dispose();\n if (this.resourceIdToCapturedInput) {\n dispose(this.resourceIdToCapturedInput);\n }\n }\n this.resourceManager.dispose();\n }\n}\n/**\n * Load a graph model given a URL to the model definition.\n *\n * Example of loading MobileNetV2 from a URL and making a prediction with a\n * zeros input:\n *\n * ```js\n * const modelUrl =\n * 'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json';\n * const model = await tf.loadGraphModel(modelUrl);\n * const zeros = tf.zeros([1, 224, 224, 3]);\n * model.predict(zeros).print();\n * ```\n *\n * Example of loading MobileNetV2 from a TF Hub URL and making a prediction\n * with a zeros input:\n *\n * ```js\n * const modelUrl =\n * 'https://tfhub.dev/google/imagenet/mobilenet_v2_140_224/classification/2';\n * const model = await tf.loadGraphModel(modelUrl, {fromTFHub: true});\n * const zeros = tf.zeros([1, 224, 224, 3]);\n * model.predict(zeros).print();\n * ```\n * @param modelUrl The url or an `io.IOHandler` that loads the model.\n * @param options Options for the HTTP request, which allows to send\n * credentials\n * and custom headers.\n *\n * @doc {heading: 'Models', subheading: 'Loading'}\n */\nexport async function loadGraphModel(modelUrl, options = {}, tfio = io) {\n if (modelUrl == null) {\n throw new Error('modelUrl in loadGraphModel() cannot be null. Please provide a url ' +\n 'or an IOHandler that loads the model');\n }\n if (options == null) {\n options = {};\n }\n if (options.fromTFHub && typeof modelUrl === 'string') {\n modelUrl = getTFHubUrl(modelUrl);\n }\n const model = new GraphModel(modelUrl, options, tfio);\n await model.load();\n return model;\n}\n/**\n * Load a graph model given a synchronous IO handler with a 'load' method.\n *\n * @param modelSource The `io.IOHandlerSync` that loads the model, or the\n * `io.ModelArtifacts` that encode the model, or a tuple of\n * `[io.ModelJSON, ArrayBuffer]` of which the first element encodes the\n * model and the second contains the weights.\n *\n * @doc {heading: 'Models', subheading: 'Loading'}\n */\nexport function loadGraphModelSync(modelSource) {\n if (modelSource == null) {\n throw new Error('modelUrl in loadGraphModelSync() cannot be null. Please provide ' +\n 'model artifacts or an IOHandler that loads the model');\n }\n let ioHandler;\n if (modelSource instanceof Array) {\n const [modelJSON, weights] = modelSource;\n if (!modelJSON) {\n throw new Error('modelJSON must be the first element of the array');\n }\n if (!weights || !(weights instanceof ArrayBuffer)) {\n throw new Error('An ArrayBuffer of weights must be the second element of' +\n ' the array');\n }\n if (!('modelTopology' in modelJSON)) {\n throw new Error('Model JSON is missing \\'modelTopology\\'');\n }\n if (!('weightsManifest' in modelJSON)) {\n throw new Error('Model JSON is missing \\'weightsManifest\\'');\n }\n const weightSpecs = io.getWeightSpecs(modelJSON.weightsManifest);\n const modelArtifacts = io.getModelArtifactsForJSONSync(modelJSON, weightSpecs, weights);\n ioHandler = io.fromMemorySync(modelArtifacts);\n }\n else if ('load' in modelSource) {\n // Then modelSource is already an IOHandlerSync.\n ioHandler = modelSource;\n }\n else if ('modelTopology' in modelSource && 'weightSpecs' in modelSource &&\n 'weightData' in modelSource) {\n // modelSource is of type ModelArtifacts.\n ioHandler = io.fromMemorySync(modelSource);\n }\n else {\n throw new Error('Unknown model format');\n }\n const model = new GraphModel(ioHandler);\n model.load();\n return model;\n}\nfunction getTFHubUrl(modelUrl) {\n if (!modelUrl.endsWith('/')) {\n modelUrl = (modelUrl) + '/';\n }\n return `${modelUrl}${DEFAULT_MODEL_NAME}${TFHUB_SEARCH_PARAM}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhfbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvZ3JhcGhfbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE9BQU8sRUFBa0IsRUFBRSxFQUFzQyxNQUFNLEVBQUUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJcEgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRS9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsaURBQWlEO0FBQ2pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQztBQUkvQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQWNyQixxRUFBcUU7SUFDckUsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFF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QUFJLGFBQWEsSUFBSSxXQUFXO1FBQzlELFlBQVksSUFBSSxXQUFXLEVBQUU7UUFDL0IseUNBQXlDO1FBQ3pDLFNBQVMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQzVDO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7S0FDekM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDYixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxRQUFnQjtJQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMzQixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDN0I7SUFDRCxPQUFPLEdBQUcsUUFBUSxHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixFQUFFLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtkaXNwb3NlLCBJbmZlcmVuY2VNb2RlbCwgaW8sIE1vZGVsUHJlZGljdENvbmZpZywgTmFtZWRUZW5zb3JNYXAsIFRlbnNvciwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0ICogYXMgdGVuc29yZmxvdyBmcm9tICcuLi9kYXRhL2NvbXBpbGVkX2FwaSc7XG5pbXBvcnQge05hbWVkVGVuc29yc01hcCwgVGVuc29ySW5mb30gZnJvbSAnLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge09wZXJhdGlvbk1hcHBlcn0gZnJvbSAnLi4vb3BlcmF0aW9ucy9vcGVyYXRpb25fbWFwcGVyJztcblxuaW1wb3J0IHtHcmFwaEV4ZWN1dG9yfSBmcm9tICcuL2dyYXBoX2V4ZWN1dG9yJztcbmltcG9ydCB7UmVzb3VyY2VNYW5hZ2VyfSBmcm9tICcuL3Jlc291cmNlX21hbmFnZXInO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0IHtkZWNvZGVXZWlnaHRzU3RyZWFtfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9pby9pb191dGlscyc7XG5cbmV4cG9ydCBjb25zdCBURkhVQl9TRUFSQ0hfUEFSQU0gPSAnP3RmanMtZm9ybWF0PWZpbGUnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTU9ERUxfTkFNRSA9ICdtb2RlbC5qc29uJztcbnR5cGUgVXJsID0gc3RyaW5nfGlvLklPSGFuZGxlcnxpby5JT0hhbmRsZXJTeW5jO1xudHlwZSBVcmxJT0hhbmRsZXI8VCBleHRlbmRzIFVybD4gPSBUIGV4dGVuZHMgc3RyaW5nID8gaW8uSU9IYW5kbGVyIDogVDtcblxuLyoqXG4gKiBBIGB0Zi5HcmFwaE1vZGVsYCBpcyBhIGRpcmVjdGVkLCBhY3ljbGljIGdyYXBoIGJ1aWx0IGZyb20gYVxuICogU2F2ZWRNb2RlbCBHcmFwaERlZiBhbmQgYWxsb3dzIGluZmVyZW5jZSBleGVjdXRpb24uXG4gKlxuICogQSBgdGYuR3JhcGhNb2RlbGAgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBsb2FkaW5nIGZyb20gYSBtb2RlbCBjb252ZXJ0ZWQgZnJvbVxuICogYSBbVGVuc29yRmxvdyBTYXZlZE1vZGVsXShodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9ndWlkZS9zYXZlZF9tb2RlbCkgdXNpbmdcbiAqIHRoZSBjb21tYW5kIGxpbmUgY29udmVydGVyIHRvb2wgYW5kIGxvYWRlZCB2aWEgYHRmLmxvYWRHcmFwaE1vZGVsYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnfVxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhNb2RlbDxNb2RlbFVSTCBleHRlbmRzIFVybCA9IHN0cmluZyB8IGlvLklPSGFuZGxlcj4gaW1wbGVtZW50c1xuICAgIEluZmVyZW5jZU1vZGVsIHtcbiAgcHJpdmF0ZSBleGVjdXRvcjogR3JhcGhFeGVjdXRvcjtcbiAgcHJpdmF0ZSB2ZXJzaW9uID0gJ24vYSc7XG4gIHByaXZhdGUgaGFuZGxlcjogVXJsSU9IYW5kbGVyPE1vZGVsVVJMPjtcbiAgcHJpdmF0ZSBhcnRpZmFjdHM6IGlvLk1vZGVsQXJ0aWZhY3RzO1xuICBwcml2YXRlIGluaXRpYWxpemVyOiBHcmFwaEV4ZWN1dG9yO1xuICBwcml2YXRlIHJlc291cmNlSWRUb0NhcHR1cmVkSW5wdXQ6IHtba2V5OiBudW1iZXJdOiBUZW5zb3J9O1xuICBwcml2YXRlIHJlc291cmNlTWFuYWdlcjogUmVzb3VyY2VNYW5hZ2VyO1xuICBwcml2YXRlIHNpZ25hdHVyZTogdGVuc29yZmxvdy5JU2lnbmF0dXJlRGVmO1xuICBwcml2YXRlIGluaXRpYWxpemVyU2lnbmF0dXJlOiB0ZW5zb3JmbG93LklTaWduYXR1cmVEZWY7XG4gIHByaXZhdGUgc3RydWN0dXJlZE91dHB1dEtleXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGlvOiB0eXBlb2YgaW87XG5cbiAgLy8gUmV0dXJucyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbnNvcmZsb3cgbW9kZWwgR3JhcGhEZWYuXG4gIGdldCBtb2RlbFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICB9XG5cbiAgZ2V0IGlucHV0Tm9kZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dG9yLmlucHV0Tm9kZXM7XG4gIH1cblxuICBnZXQgb3V0cHV0Tm9kZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dG9yLm91dHB1dE5vZGVzO1xuICB9XG5cbiAgZ2V0IGlucHV0cygpOiBUZW5zb3JJbmZvW10ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dG9yLmlucHV0cztcbiAgfVxuXG4gIGdldCBvdXRwdXRzKCk6IFRlbnNvckluZm9bXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0b3Iub3V0cHV0cztcbiAgfVxuXG4gIGdldCB3ZWlnaHRzKCk6IE5hbWVkVGVuc29yc01hcCB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0b3Iud2VpZ2h0TWFwO1xuICB9XG5cbiAgZ2V0IG1ldGFkYXRhKCk6IHt9IHtcbiAgICByZXR1cm4gdGhpcy5hcnRpZmFjdHMudXNlckRlZmluZWRNZXRhZGF0YTtcbiAgfVxuXG4gIGdldCBtb2RlbFNpZ25hdHVyZSgpOiB7fSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0IG1vZGVsU3RydWN0dXJlZE91dHB1dEtleXMoKToge30ge1xuICAgIHJldHVybiB0aGlzLnN0cnVjdHVyZWRPdXRwdXRLZXlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBtb2RlbFVybCB1cmwgZm9yIHRoZSBtb2RlbCwgb3IgYW4gYGlvLklPSGFuZGxlcmAuXG4gICAqIEBwYXJhbSB3ZWlnaHRNYW5pZmVzdFVybCB1cmwgZm9yIHRoZSB3ZWlnaHQgZmlsZSBnZW5lcmF0ZWQgYnlcbiAgICogc2NyaXB0cy9jb252ZXJ0LnB5IHNjcmlwdC5cbiAgICogQHBhcmFtIHJlcXVlc3RPcHRpb24gb3B0aW9ucyBmb3IgUmVxdWVzdCwgd2hpY2ggYWxsb3dzIHRvIHNlbmQgY3JlZGVudGlhbHNcbiAgICogYW5kIGN1c3RvbSBoZWFkZXJzLlxuICAgKiBAcGFyYW0gb25Qcm9ncmVzcyBPcHRpb25hbCwgcHJvZ3Jlc3MgY2FsbGJhY2sgZnVuY3Rpb24sIGZpcmVkIHBlcmlvZGljYWxseVxuICAgKiBiZWZvcmUgdGhlIGxvYWQgaXMgY29tcGxldGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIG1vZGVsVXJsOiBNb2RlbFVSTCwgcHJpdmF0ZSBsb2FkT3B0aW9uczogaW8uTG9hZE9wdGlvbnMgPSB7fSxcbiAgICAgIHRmaW8gPSBpbykge1xuICAgIHRoaXMuaW8gPSB0ZmlvO1xuICAgIGlmIChsb2FkT3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICB0aGlzLmxvYWRPcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMucmVzb3VyY2VNYW5hZ2VyID0gbmV3IFJlc291cmNlTWFuYWdlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSU9IYW5kbGVyKCkge1xuICAgIHR5cGUgSU9IYW5kbGVyID0gVXJsSU9IYW5kbGVyPE1vZGVsVVJMPjtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5tb2RlbFVybDtcbiAgICBpZiAoKHBhdGggYXMgaW8uSU9IYW5kbGVyKS5sb2FkICE9IG51bGwpIHtcbiAgICAgIC8vIFBhdGggaXMgYW4gSU8gSGFuZGxlci5cbiAgICAgIHRoaXMuaGFuZGxlciA9IHBhdGggYXMgSU9IYW5kbGVyO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkT3B0aW9ucy5yZXF1ZXN0SW5pdCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmhhbmRsZXIgPSB0aGlzLmlvLmJyb3dzZXJIVFRQUmVxdWVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoIGFzIHN0cmluZywgdGhpcy5sb2FkT3B0aW9ucykgYXMgSU9IYW5kbGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9XG4gICAgICAgICAgdGhpcy5pby5nZXRMb2FkSGFuZGxlcnMocGF0aCBhcyBzdHJpbmcsIHRoaXMubG9hZE9wdGlvbnMpO1xuICAgICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogaWYgbm8gbG9hZCBoYW5kbGVyIGNhbiBiZSBmb3VuZCxcbiAgICAgICAgLy8gYXNzdW1lIGl0IGlzIGEgcmVsYXRpdmUgaHR0cCBwYXRoLlxuICAgICAgICBoYW5kbGVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5pby5icm93c2VySFRUUFJlcXVlc3QocGF0aCBhcyBzdHJpbmcsIHRoaXMubG9hZE9wdGlvbnMpKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFuZGxlcnMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRm91bmQgbW9yZSB0aGFuIG9uZSAoJHtoYW5kbGVycy5sZW5ndGh9KSBsb2FkIGhhbmRsZXJzIGZvciBgICtcbiAgICAgICAgICAgIGBVUkwgJyR7W3BhdGhdfSdgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJzWzBdIGFzIElPSGFuZGxlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIG1vZGVsIGFuZCB3ZWlnaHQgZmlsZXMsIGNvbnN0cnVjdCB0aGUgaW4gbWVtb3J5IHdlaWdodCBtYXAgYW5kXG4gICAqIGNvbXBpbGUgdGhlIGluZmVyZW5jZSBncmFwaC5cbiAgICovXG4gIGxvYWQoKTogVXJsSU9IYW5kbGVyPE1vZGVsVVJMPiBleHRlbmRzIGlvLklPSGFuZGxlclN5bmM/IGJvb2xlYW46XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0eXBlIElPSGFuZGxlciA9IFVybElPSGFuZGxlcjxNb2RlbFVSTD47XG4gICAgdGhpcy5maW5kSU9IYW5kbGVyKCk7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5sb2FkID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ2Fubm90IHByb2NlZWQgd2l0aCBtb2RlbCBsb2FkaW5nIGJlY2F1c2UgdGhlIElPSGFuZGxlciBwcm92aWRlZCAnICtcbiAgICAgICAgICAnZG9lcyBub3QgaGF2ZSB0aGUgYGxvYWRgIG1ldGhvZCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG5cbiAgICB0eXBlIFJlc3VsdCA9XG4gICAgICAgIElPSGFuZGxlciBleHRlbmRzIGlvLklPSGFuZGxlclN5bmMgPyBib29sZWFuIDogUHJvbWlzZTxib29sZWFuPjtcblxuICAgIGNvbnN0IGxvYWRSZXN1bHQgPSB0aGlzLmhhbmRsZXIubG9hZCgpIGFzIFJldHVyblR5cGU8SU9IYW5kbGVyWydsb2FkJ10+O1xuICAgIGlmICh1dGlsLmlzUHJvbWlzZShsb2FkUmVzdWx0KSkge1xuICAgICAgcmV0dXJuIGxvYWRSZXN1bHQudGhlbihhcnRpZmFjdHMgPT4ge1xuICAgICAgICBpZiAoYXJ0aWZhY3RzLmdldFdlaWdodFN0cmVhbSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFN5bmMoYXJ0aWZhY3RzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkU3RyZWFtaW5nKGFydGlmYWN0cyk7XG4gICAgICB9KSBhcyBSZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubG9hZFN5bmMobG9hZFJlc3VsdCkgYXMgUmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzbHkgY29uc3RydWN0IHRoZSBpbiBtZW1vcnkgd2VpZ2h0IG1hcCBhbmRcbiAgICogY29tcGlsZSB0aGUgaW5mZXJlbmNlIGdyYXBoLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnLCBpZ25vcmVDSTogdHJ1ZX1cbiAgICovXG4gIGxvYWRTeW5jKGFydGlmYWN0czogaW8uTW9kZWxBcnRpZmFjdHMpIHtcbiAgICBjb25zdCB3ZWlnaHRNYXAgPSB0aGlzLmlvLmRlY29kZVdlaWdodHMoXG4gICAgICAgIGFydGlmYWN0cy53ZWlnaHREYXRhLCBhcnRpZmFjdHMud2VpZ2h0U3BlY3MpO1xuXG4gICAgcmV0dXJuIHRoaXMubG9hZFdpdGhXZWlnaHRNYXAoYXJ0aWZhY3RzLCB3ZWlnaHRNYXApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkU3RyZWFtaW5nKGFydGlmYWN0czogaW8uTW9kZWxBcnRpZmFjdHMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoYXJ0aWZhY3RzLmdldFdlaWdodFN0cmVhbSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIGFydGlmYWN0cyBtaXNzaW5nIHN0cmVhbVdlaWdodHMgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB3ZWlnaHRNYXAgPSBhd2FpdCBkZWNvZGVXZWlnaHRzU3RyZWFtKFxuICAgICAgYXJ0aWZhY3RzLmdldFdlaWdodFN0cmVhbSgpLCBhcnRpZmFjdHMud2VpZ2h0U3BlY3MpO1xuXG4gICAgcmV0dXJuIHRoaXMubG9hZFdpdGhXZWlnaHRNYXAoYXJ0aWZhY3RzLCB3ZWlnaHRNYXApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkV2l0aFdlaWdodE1hcChhcnRpZmFjdHM6IGlvLk1vZGVsQXJ0aWZhY3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodE1hcDogTmFtZWRUZW5zb3JNYXApIHtcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgICBjb25zdCBncmFwaCA9IHRoaXMuYXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3kgYXMgdGVuc29yZmxvdy5JR3JhcGhEZWY7XG5cbiAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5hcnRpZmFjdHMuc2lnbmF0dXJlO1xuICAgIGlmICh0aGlzLmFydGlmYWN0cy51c2VyRGVmaW5lZE1ldGFkYXRhICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5hcnRpZmFjdHMudXNlckRlZmluZWRNZXRhZGF0YTtcbiAgICAgIGlmIChtZXRhZGF0YS5zaWduYXR1cmUgIT0gbnVsbCkge1xuICAgICAgICBzaWduYXR1cmUgPSBtZXRhZGF0YS5zaWduYXR1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRhZGF0YS5zdHJ1Y3R1cmVkT3V0cHV0S2V5cyAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3RydWN0dXJlZE91dHB1dEtleXMgPSBtZXRhZGF0YS5zdHJ1Y3R1cmVkT3V0cHV0S2V5cyBhcyBzdHJpbmdbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG5cbiAgICB0aGlzLnZlcnNpb24gPSBgJHtncmFwaC52ZXJzaW9ucy5wcm9kdWNlcn0uJHtncmFwaC52ZXJzaW9ucy5taW5Db25zdW1lcn1gO1xuICAgIHRoaXMuZXhlY3V0b3IgPSBuZXcgR3JhcGhFeGVjdXRvcihcbiAgICAgICAgT3BlcmF0aW9uTWFwcGVyLkluc3RhbmNlLnRyYW5zZm9ybUdyYXBoKGdyYXBoLCB0aGlzLnNpZ25hdHVyZSkpO1xuICAgIHRoaXMuZXhlY3V0b3Iud2VpZ2h0TWFwID0gdGhpcy5jb252ZXJ0VGVuc29yTWFwVG9UZW5zb3JzTWFwKHdlaWdodE1hcCk7XG4gICAgLy8gQXR0YWNoIGEgbW9kZWwtbGV2ZWwgcmVzb3VyY2VNYW5hZ2VyIHRvIGVhY2ggZXhlY3V0b3IgdG8gc2hhcmUgcmVzb3VyY2VzLFxuICAgIC8vIHN1Y2ggYXMgYEhhc2hUYWJsZWAuXG4gICAgdGhpcy5leGVjdXRvci5yZXNvdXJjZU1hbmFnZXIgPSB0aGlzLnJlc291cmNlTWFuYWdlcjtcblxuICAgIGlmIChhcnRpZmFjdHMubW9kZWxJbml0aWFsaXplciAhPSBudWxsICYmXG4gICAgICAgIChhcnRpZmFjdHMubW9kZWxJbml0aWFsaXplciBhcyB0ZW5zb3JmbG93LklHcmFwaERlZikubm9kZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBpbml0aWFsaXplciA9XG4gICAgICAgICAgT3BlcmF0aW9uTWFwcGVyLkluc3RhbmNlLnRyYW5zZm9ybUdyYXBoKGFydGlmYWN0cy5tb2RlbEluaXRpYWxpemVyKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZXIgPSBuZXcgR3JhcGhFeGVjdXRvcihpbml0aWFsaXplcik7XG4gICAgICB0aGlzLmluaXRpYWxpemVyLndlaWdodE1hcCA9IHRoaXMuZXhlY3V0b3Iud2VpZ2h0TWFwO1xuICAgICAgLy8gQXR0YWNoIGEgbW9kZWwtbGV2ZWwgcmVzb3VyY2VNYW5hZ2VyIHRvIHRoZSBpbml0aWFsaXplciwgdGhlXG4gICAgICAvLyBoYXNoVGFibGVzIGNyZWF0ZWQgZnJvbSB3aGVuIGV4ZWN1dGluZyB0aGUgaW5pdGlhbGl6ZXIgd2lsbCBiZSBzdG9yZWRcbiAgICAgIC8vIGluIHRoZSByZXNvdXJjZU1hbmFnZXIuXG4gICAgICB0aGlzLmluaXRpYWxpemVyLnJlc291cmNlTWFuYWdlciA9IHRoaXMucmVzb3VyY2VNYW5hZ2VyO1xuICAgICAgdGhpcy5pbml0aWFsaXplclNpZ25hdHVyZSA9IGFydGlmYWN0cy5pbml0aWFsaXplclNpZ25hdHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBjb25maWd1cmF0aW9uIGFuZC9vciB3ZWlnaHRzIG9mIHRoZSBHcmFwaE1vZGVsLlxuICAgKlxuICAgKiBBbiBgSU9IYW5kbGVyYCBpcyBhbiBvYmplY3QgdGhhdCBoYXMgYSBgc2F2ZWAgbWV0aG9kIG9mIHRoZSBwcm9wZXJcbiAgICogc2lnbmF0dXJlIGRlZmluZWQuIFRoZSBgc2F2ZWAgbWV0aG9kIG1hbmFnZXMgdGhlIHN0b3Jpbmcgb3JcbiAgICogdHJhbnNtaXNzaW9uIG9mIHNlcmlhbGl6ZWQgZGF0YSAoXCJhcnRpZmFjdHNcIikgdGhhdCByZXByZXNlbnQgdGhlXG4gICAqIG1vZGVsJ3MgdG9wb2xvZ3kgYW5kIHdlaWdodHMgb250byBvciB2aWEgYSBzcGVjaWZpYyBtZWRpdW0sIHN1Y2ggYXNcbiAgICogZmlsZSBkb3dubG9hZHMsIGxvY2FsIHN0b3JhZ2UsIEluZGV4ZWREQiBpbiB0aGUgd2ViIGJyb3dzZXIgYW5kIEhUVFBcbiAgICogcmVxdWVzdHMgdG8gYSBzZXJ2ZXIuIFRlbnNvckZsb3cuanMgcHJvdmlkZXMgYElPSGFuZGxlcmBcbiAgICogaW1wbGVtZW50YXRpb25zIGZvciBhIG51bWJlciBvZiBmcmVxdWVudGx5IHVzZWQgc2F2aW5nIG1lZGl1bXMsIHN1Y2ggYXNcbiAgICogYHRmLmlvLmJyb3dzZXJEb3dubG9hZHNgIGFuZCBgdGYuaW8uYnJvd3NlckxvY2FsU3RvcmFnZWAuIFNlZSBgdGYuaW9gXG4gICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGFsc28gYWxsb3dzIHlvdSB0byByZWZlciB0byBjZXJ0YWluIHR5cGVzIG9mIGBJT0hhbmRsZXJgc1xuICAgKiBhcyBVUkwtbGlrZSBzdHJpbmcgc2hvcnRjdXRzLCBzdWNoIGFzICdsb2NhbHN0b3JhZ2U6Ly8nIGFuZFxuICAgKiAnaW5kZXhlZGRiOi8vJy5cbiAgICpcbiAgICogRXhhbXBsZSAxOiBTYXZlIGBtb2RlbGAncyB0b3BvbG9neSBhbmQgd2VpZ2h0cyB0byBicm93c2VyIFtsb2NhbFxuICAgKiBzdG9yYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2xvY2FsU3RvcmFnZSk7XG4gICAqIHRoZW4gbG9hZCBpdCBiYWNrLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCBtb2RlbFVybCA9XG4gICAqICAgICdodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdGZqcy1tb2RlbHMvc2F2ZWRtb2RlbC9tb2JpbGVuZXRfdjJfMS4wXzIyNC9tb2RlbC5qc29uJztcbiAgICogY29uc3QgbW9kZWwgPSBhd2FpdCB0Zi5sb2FkR3JhcGhNb2RlbChtb2RlbFVybCk7XG4gICAqIGNvbnN0IHplcm9zID0gdGYuemVyb3MoWzEsIDIyNCwgMjI0LCAzXSk7XG4gICAqIG1vZGVsLnByZWRpY3QoemVyb3MpLnByaW50KCk7XG4gICAqXG4gICAqIGNvbnN0IHNhdmVSZXN1bHRzID0gYXdhaXQgbW9kZWwuc2F2ZSgnbG9jYWxzdG9yYWdlOi8vbXktbW9kZWwtMScpO1xuICAgKlxuICAgKiBjb25zdCBsb2FkZWRNb2RlbCA9IGF3YWl0IHRmLmxvYWRHcmFwaE1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9teS1tb2RlbC0xJyk7XG4gICAqIGNvbnNvbGUubG9nKCdQcmVkaWN0aW9uIGZyb20gbG9hZGVkIG1vZGVsOicpO1xuICAgKiBtb2RlbC5wcmVkaWN0KHplcm9zKS5wcmludCgpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGhhbmRsZXJPclVSTCBBbiBpbnN0YW5jZSBvZiBgSU9IYW5kbGVyYCBvciBhIFVSTC1saWtlLFxuICAgKiBzY2hlbWUtYmFzZWQgc3RyaW5nIHNob3J0Y3V0IGZvciBgSU9IYW5kbGVyYC5cbiAgICogQHBhcmFtIGNvbmZpZyBPcHRpb25zIGZvciBzYXZpbmcgdGhlIG1vZGVsLlxuICAgKiBAcmV0dXJucyBBIGBQcm9taXNlYCBvZiBgU2F2ZVJlc3VsdGAsIHdoaWNoIHN1bW1hcml6ZXMgdGhlIHJlc3VsdCBvZlxuICAgKiB0aGUgc2F2aW5nLCBzdWNoIGFzIGJ5dGUgc2l6ZXMgb2YgdGhlIHNhdmVkIGFydGlmYWN0cyBmb3IgdGhlIG1vZGVsJ3NcbiAgICogICB0b3BvbG9neSBhbmQgd2VpZ2h0IHZhbHVlcy5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJywgaWdub3JlQ0k6IHRydWV9XG4gICAqL1xuICBhc3luYyBzYXZlKGhhbmRsZXJPclVSTDogaW8uSU9IYW5kbGVyfHN0cmluZywgY29uZmlnPzogaW8uU2F2ZUNvbmZpZyk6XG4gICAgICBQcm9taXNlPGlvLlNhdmVSZXN1bHQ+IHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXJPclVSTCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5pby5nZXRTYXZlSGFuZGxlcnMoaGFuZGxlck9yVVJMKTtcbiAgICAgIGlmIChoYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBmaW5kIGFueSBzYXZlIGhhbmRsZXJzIGZvciBVUkwgJyR7aGFuZGxlck9yVVJMfSdgKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFuZGxlcnMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRm91bmQgbW9yZSB0aGFuIG9uZSAoJHtoYW5kbGVycy5sZW5ndGh9KSBzYXZlIGhhbmRsZXJzIGZvciBgICtcbiAgICAgICAgICAgIGBVUkwgJyR7aGFuZGxlck9yVVJMfSdgKTtcbiAgICAgIH1cbiAgICAgIGhhbmRsZXJPclVSTCA9IGhhbmRsZXJzWzBdO1xuICAgIH1cbiAgICBpZiAoaGFuZGxlck9yVVJMLnNhdmUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdHcmFwaE1vZGVsLnNhdmUoKSBjYW5ub3QgcHJvY2VlZCBiZWNhdXNlIHRoZSBJT0hhbmRsZXIgJyArXG4gICAgICAgICAgJ3Byb3ZpZGVkIGRvZXMgbm90IGhhdmUgdGhlIGBzYXZlYCBhdHRyaWJ1dGUgZGVmaW5lZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlck9yVVJMLnNhdmUodGhpcy5hcnRpZmFjdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdHJ1Y3R1cmVkT3V0cHV0TmFtZXMob3V0cHV0VGVuc29yczogVGVuc29yfFRlbnNvcltdKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0dXJlZE91dHB1dEtleXMpIHtcbiAgICAgIGNvbnN0IG91dHB1dFRlbnNvcnNBcnJheSA9XG4gICAgICAgICAgb3V0cHV0VGVuc29ycyBpbnN0YW5jZW9mIFRlbnNvciA/IFtvdXRwdXRUZW5zb3JzXSA6IG91dHB1dFRlbnNvcnM7XG4gICAgICBjb25zdCBvdXRwdXRUZW5zb3JNYXA6IE5hbWVkVGVuc29yTWFwID0ge307XG5cbiAgICAgIG91dHB1dFRlbnNvcnNBcnJheS5mb3JFYWNoKFxuICAgICAgICAgIChvdXRwdXRUZW5zb3IsIGkpID0+IG91dHB1dFRlbnNvck1hcFt0aGlzLnN0cnVjdHVyZWRPdXRwdXRLZXlzW2ldXSA9XG4gICAgICAgICAgICAgIG91dHB1dFRlbnNvcik7XG5cbiAgICAgIHJldHVybiBvdXRwdXRUZW5zb3JNYXA7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXRUZW5zb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGluZmVyZW5jZSBmb3IgdGhlIGlucHV0IHRlbnNvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgdGVuc29ycywgd2hlbiB0aGVyZSBpcyBzaW5nbGUgaW5wdXQgZm9yIHRoZSBtb2RlbCxcbiAgICogaW5wdXRzIHBhcmFtIHNob3VsZCBiZSBhIGB0Zi5UZW5zb3JgLiBGb3IgbW9kZWxzIHdpdGggbXVsdGlwbGUgaW5wdXRzLFxuICAgKiBpbnB1dHMgcGFyYW1zIHNob3VsZCBiZSBpbiBlaXRoZXIgYHRmLlRlbnNvcmBbXSBpZiB0aGUgaW5wdXQgb3JkZXIgaXNcbiAgICogZml4ZWQsIG9yIG90aGVyd2lzZSBOYW1lZFRlbnNvck1hcCBmb3JtYXQuXG4gICAqXG4gICAqIEZvciBtb2RlbCB3aXRoIG11bHRpcGxlIGlucHV0cywgd2UgcmVjb21tZW5kIHlvdSB1c2UgTmFtZWRUZW5zb3JNYXAgYXMgdGhlXG4gICAqIGlucHV0IHR5cGUsIGlmIHlvdSB1c2UgYHRmLlRlbnNvcmBbXSwgdGhlIG9yZGVyIG9mIHRoZSBhcnJheSBuZWVkcyB0b1xuICAgKiBmb2xsb3cgdGhlXG4gICAqIG9yZGVyIG9mIGlucHV0Tm9kZXMgYXJyYXkuIEBzZWUge0BsaW5rIEdyYXBoTW9kZWwuaW5wdXROb2Rlc31cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIGZlZWQgYW55IGludGVybWVkaWF0ZSBub2RlcyB1c2luZyB0aGUgTmFtZWRUZW5zb3JNYXAgYXMgdGhlXG4gICAqIGlucHV0IHR5cGUuIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZ3JhcGhcbiAgICogICAgSW5wdXROb2RlID0+IEludGVybWVkaWF0ZSA9PiBPdXRwdXROb2RlLFxuICAgKiB5b3UgY2FuIGV4ZWN1dGUgdGhlIHN1YmdyYXBoIEludGVybWVkaWF0ZSA9PiBPdXRwdXROb2RlIGJ5IGNhbGxpbmdcbiAgICogICAgbW9kZWwuZXhlY3V0ZSgnSW50ZXJtZWRpYXRlTm9kZScgOiB0Zi50ZW5zb3IoLi4uKSk7XG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBtb2RlbHMgdGhhdCB1c2VzIHRmLmR5bmFtaWNfcm5uLCB3aGVyZSB0aGUgaW50ZXJtZWRpYXRlXG4gICAqIHN0YXRlIG5lZWRzIHRvIGJlIGZlZCBtYW51YWxseS5cbiAgICpcbiAgICogRm9yIGJhdGNoIGluZmVyZW5jZSBleGVjdXRpb24sIHRoZSB0ZW5zb3JzIGZvciBlYWNoIGlucHV0IG5lZWQgdG8gYmVcbiAgICogY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLiBGb3IgZXhhbXBsZSB3aXRoIG1vYmlsZW5ldCwgdGhlIHJlcXVpcmVkIGlucHV0IHNoYXBlXG4gICAqIGlzIFsxLCAyNDQsIDI0NCwgM10sIHdoaWNoIHJlcHJlc2VudHMgdGhlIFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbF0uXG4gICAqIElmIHdlIGFyZSBwcm92aWRlIGEgYmF0Y2hlZCBkYXRhIG9mIDEwMCBpbWFnZXMsIHRoZSBpbnB1dCB0ZW5zb3Igc2hvdWxkIGJlXG4gICAqIGluIHRoZSBzaGFwZSBvZiBbMTAwLCAyNDQsIDI0NCwgM10uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgUHJlZGljdGlvbiBjb25maWd1cmF0aW9uIGZvciBzcGVjaWZ5aW5nIHRoZSBiYXRjaCBzaXplLlxuICAgKiBDdXJyZW50bHkgdGhlIGJhdGNoIHNpemUgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIGdyYXBoIG1vZGVsLlxuICAgKlxuICAgKiBAcmV0dXJucyBJbmZlcmVuY2UgcmVzdWx0IHRlbnNvcnMuIElmIHRoZSBtb2RlbCBpcyBjb252ZXJ0ZWQgYW5kIGl0XG4gICAqIG9yaWdpbmFsbHkgaGFkIHN0cnVjdHVyZWRfb3V0cHV0cyBpbiB0ZW5zb3JmbG93LCB0aGVuIGEgTmFtZWRUZW5zb3JNYXBcbiAgICogd2lsbCBiZSByZXR1cm5lZCBtYXRjaGluZyB0aGUgc3RydWN0dXJlZF9vdXRwdXRzLiBJZiBubyBzdHJ1Y3R1cmVkX291dHB1dHNcbiAgICogYXJlIHByZXNlbnQsIHRoZSBvdXRwdXQgd2lsbCBiZSBzaW5nbGUgYHRmLlRlbnNvcmAgaWYgdGhlIG1vZGVsIGhhcyBzaW5nbGVcbiAgICogb3V0cHV0IG5vZGUsIG90aGVyd2lzZSBUZW5zb3JbXS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIHByZWRpY3QoaW5wdXRzOiBUZW5zb3J8VGVuc29yW118TmFtZWRUZW5zb3JNYXAsIGNvbmZpZz86IE1vZGVsUHJlZGljdENvbmZpZyk6XG4gICAgICBUZW5zb3J8VGVuc29yW118TmFtZWRUZW5zb3JNYXAge1xuICAgIGNvbnN0IG91dHB1dFRlbnNvcnMgPSB0aGlzLmV4ZWN1dGUoaW5wdXRzLCB0aGlzLm91dHB1dE5vZGVzKTtcbiAgICByZXR1cm4gdGhpcy5hZGRTdHJ1Y3R1cmVkT3V0cHV0TmFtZXMob3V0cHV0VGVuc29ycyk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgaW5mZXJlbmNlIGZvciB0aGUgaW5wdXQgdGVuc29ycyBpbiBhc3luYyBmYXNoaW9uLCB1c2UgdGhpc1xuICAgKiBtZXRob2Qgd2hlbiB5b3VyIG1vZGVsIGNvbnRhaW5zIGNvbnRyb2wgZmxvdyBvcHMuXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgdGVuc29ycywgd2hlbiB0aGVyZSBpcyBzaW5nbGUgaW5wdXQgZm9yIHRoZSBtb2RlbCxcbiAgICogaW5wdXRzIHBhcmFtIHNob3VsZCBiZSBhIGB0Zi5UZW5zb3JgLiBGb3IgbW9kZWxzIHdpdGggbXV0bGlwbGUgaW5wdXRzLFxuICAgKiBpbnB1dHMgcGFyYW1zIHNob3VsZCBiZSBpbiBlaXRoZXIgYHRmLlRlbnNvcmBbXSBpZiB0aGUgaW5wdXQgb3JkZXIgaXNcbiAgICogZml4ZWQsIG9yIG90aGVyd2lzZSBOYW1lZFRlbnNvck1hcCBmb3JtYXQuXG4gICAqXG4gICAqIEZvciBtb2RlbCB3aXRoIG11bHRpcGxlIGlucHV0cywgd2UgcmVjb21tZW5kIHlvdSB1c2UgTmFtZWRUZW5zb3JNYXAgYXMgdGhlXG4gICAqIGlucHV0IHR5cGUsIGlmIHlvdSB1c2UgYHRmLlRlbnNvcmBbXSwgdGhlIG9yZGVyIG9mIHRoZSBhcnJheSBuZWVkcyB0b1xuICAgKiBmb2xsb3cgdGhlXG4gICAqIG9yZGVyIG9mIGlucHV0Tm9kZXMgYXJyYXkuIEBzZWUge0BsaW5rIEdyYXBoTW9kZWwuaW5wdXROb2Rlc31cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIGZlZWQgYW55IGludGVybWVkaWF0ZSBub2RlcyB1c2luZyB0aGUgTmFtZWRUZW5zb3JNYXAgYXMgdGhlXG4gICAqIGlucHV0IHR5cGUuIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZ3JhcGhcbiAgICogICAgSW5wdXROb2RlID0+IEludGVybWVkaWF0ZSA9PiBPdXRwdXROb2RlLFxuICAgKiB5b3UgY2FuIGV4ZWN1dGUgdGhlIHN1YmdyYXBoIEludGVybWVkaWF0ZSA9PiBPdXRwdXROb2RlIGJ5IGNhbGxpbmdcbiAgICogICAgbW9kZWwuZXhlY3V0ZSgnSW50ZXJtZWRpYXRlTm9kZScgOiB0Zi50ZW5zb3IoLi4uKSk7XG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBtb2RlbHMgdGhhdCB1c2VzIHRmLmR5bmFtaWNfcm5uLCB3aGVyZSB0aGUgaW50ZXJtZWRpYXRlXG4gICAqIHN0YXRlIG5lZWRzIHRvIGJlIGZlZCBtYW51YWxseS5cbiAgICpcbiAgICogRm9yIGJhdGNoIGluZmVyZW5jZSBleGVjdXRpb24sIHRoZSB0ZW5zb3JzIGZvciBlYWNoIGlucHV0IG5lZWQgdG8gYmVcbiAgICogY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLiBGb3IgZXhhbXBsZSB3aXRoIG1vYmlsZW5ldCwgdGhlIHJlcXVpcmVkIGlucHV0IHNoYXBlXG4gICAqIGlzIFsxLCAyNDQsIDI0NCwgM10sIHdoaWNoIHJlcHJlc2VudHMgdGhlIFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbF0uXG4gICAqIElmIHdlIGFyZSBwcm92aWRlIGEgYmF0Y2hlZCBkYXRhIG9mIDEwMCBpbWFnZXMsIHRoZSBpbnB1dCB0ZW5zb3Igc2hvdWxkIGJlXG4gICAqIGluIHRoZSBzaGFwZSBvZiBbMTAwLCAyNDQsIDI0NCwgM10uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgUHJlZGljdGlvbiBjb25maWd1cmF0aW9uIGZvciBzcGVjaWZ5aW5nIHRoZSBiYXRjaCBzaXplLlxuICAgKiBDdXJyZW50bHkgdGhlIGJhdGNoIHNpemUgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIGdyYXBoIG1vZGVsLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIFByb21pc2Ugb2YgaW5mZXJlbmNlIHJlc3VsdCB0ZW5zb3JzLiBJZiB0aGUgbW9kZWwgaXMgY29udmVydGVkXG4gICAqIGFuZCBpdCBvcmlnaW5hbGx5IGhhZCBzdHJ1Y3R1cmVkX291dHB1dHMgaW4gdGVuc29yZmxvdywgdGhlbiBhXG4gICAqIE5hbWVkVGVuc29yTWFwIHdpbGwgYmUgcmV0dXJuZWQgbWF0Y2hpbmcgdGhlIHN0cnVjdHVyZWRfb3V0cHV0cy4gSWYgbm9cbiAgICogc3RydWN0dXJlZF9vdXRwdXRzIGFyZSBwcmVzZW50LCB0aGUgb3V0cHV0IHdpbGwgYmUgc2luZ2xlIGB0Zi5UZW5zb3JgIGlmXG4gICAqIHRoZSBtb2RlbCBoYXMgc2luZ2xlIG91dHB1dCBub2RlLCBvdGhlcndpc2UgVGVuc29yW10uXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBhc3luYyBwcmVkaWN0QXN5bmMoXG4gICAgICBpbnB1dHM6IFRlbnNvcnxUZW5zb3JbXXxOYW1lZFRlbnNvck1hcCxcbiAgICAgIGNvbmZpZz86IE1vZGVsUHJlZGljdENvbmZpZyk6IFByb21pc2U8VGVuc29yfFRlbnNvcltdfE5hbWVkVGVuc29yTWFwPiB7XG4gICAgY29uc3Qgb3V0cHV0VGVuc29ycyA9IGF3YWl0IHRoaXMuZXhlY3V0ZUFzeW5jKGlucHV0cywgdGhpcy5vdXRwdXROb2Rlcyk7XG4gICAgcmV0dXJuIHRoaXMuYWRkU3RydWN0dXJlZE91dHB1dE5hbWVzKG91dHB1dFRlbnNvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVJbnB1dHMoaW5wdXRzOiBUZW5zb3J8VGVuc29yW118XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVkVGVuc29yTWFwKTogTmFtZWRUZW5zb3JNYXAge1xuICAgIGlmICghKGlucHV0cyBpbnN0YW5jZW9mIFRlbnNvcikgJiYgIUFycmF5LmlzQXJyYXkoaW5wdXRzKSkge1xuICAgICAgLy8gVGhlIGlucHV0IGlzIGFscmVhZHkgYSBOYW1lZFRlbnNvck1hcC5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZUlucHV0cyA9IHRoaXMuc2lnbmF0dXJlPy5pbnB1dHM7XG4gICAgICBpZiAoc2lnbmF0dXJlSW5wdXRzICE9IG51bGwpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbnB1dCBpbiBzaWduYXR1cmVJbnB1dHMpIHtcbiAgICAgICAgICBjb25zdCB0ZW5zb3IgPSBzaWduYXR1cmVJbnB1dHNbaW5wdXRdO1xuICAgICAgICAgIGlmICh0ZW5zb3IucmVzb3VyY2VJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dHNbaW5wdXRdID0gdGhpcy5yZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0W3RlbnNvci5yZXNvdXJjZUlkXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIGlucHV0cyA9IEFycmF5LmlzQXJyYXkoaW5wdXRzKSA/IGlucHV0cyA6IFtpbnB1dHNdO1xuXG4gICAgY29uc3QgbnVtQ2FwdHVyZWRJbnB1dHMgPVxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnJlc291cmNlSWRUb0NhcHR1cmVkSW5wdXQpLmxlbmd0aDtcbiAgICBpZiAoaW5wdXRzLmxlbmd0aCArIG51bUNhcHR1cmVkSW5wdXRzICE9PSB0aGlzLmlucHV0Tm9kZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0IHRlbnNvciBjb3VudCBtaXNtYXRjaCwgdGhlIGdyYXBoIG1vZGVsIGhhcyAke1xuICAgICAgICAgIHRoaXMuaW5wdXROb2Rlcy5sZW5ndGggLVxuICAgICAgICAgIG51bUNhcHR1cmVkSW5wdXRzfSBub24tcmVzb3VyY2UgcGxhY2Vob2xkZXJzLCB3aGlsZSB0aGVyZSBhcmUgJHtcbiAgICAgICAgICBpbnB1dHMubGVuZ3RofSBpbnB1dCB0ZW5zb3JzIHByb3ZpZGVkLmApO1xuICAgIH1cblxuICAgIGxldCBpbnB1dEluZGV4ID0gMDtcbiAgICByZXR1cm4gdGhpcy5pbnB1dE5vZGVzLnJlZHVjZSgobWFwLCBpbnB1dE5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlSWQgPSB0aGlzLnNpZ25hdHVyZT8uaW5wdXRzPy5baW5wdXROYW1lXT8ucmVzb3VyY2VJZDtcbiAgICAgIGlmIChyZXNvdXJjZUlkICE9IG51bGwpIHtcbiAgICAgICAgbWFwW2lucHV0TmFtZV0gPSB0aGlzLnJlc291cmNlSWRUb0NhcHR1cmVkSW5wdXRbcmVzb3VyY2VJZF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXBbaW5wdXROYW1lXSA9IChpbnB1dHMgYXMgVGVuc29yW10pW2lucHV0SW5kZXgrK107XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH0sIHt9IGFzIE5hbWVkVGVuc29yTWFwKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplT3V0cHV0cyhvdXRwdXRzOiBzdHJpbmd8c3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgb3V0cHV0cyA9IG91dHB1dHMgfHwgdGhpcy5vdXRwdXROb2RlcztcbiAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkob3V0cHV0cykgPyBbb3V0cHV0c10gOiBvdXRwdXRzO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlSW5pdGlhbGl6ZXJHcmFwaCgpIHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICh0aGlzLmluaXRpYWxpemVyU2lnbmF0dXJlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVyLmV4ZWN1dGUoe30sIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZXIuZXhlY3V0ZShcbiAgICAgICAgICB7fSwgT2JqZWN0LmtleXModGhpcy5pbml0aWFsaXplclNpZ25hdHVyZS5vdXRwdXRzKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlSW5pdGlhbGl6ZXJHcmFwaEFzeW5jKCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZXJTaWduYXR1cmUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZXIuZXhlY3V0ZUFzeW5jKHt9LCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVyLmV4ZWN1dGVBc3luYyhcbiAgICAgICAgICB7fSwgT2JqZWN0LmtleXModGhpcy5pbml0aWFsaXplclNpZ25hdHVyZS5vdXRwdXRzKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0KG91dHB1dHM6IFRlbnNvcltdKSB7XG4gICAgdGhpcy5yZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0ID0ge307XG5cbiAgICBpZiAodGhpcy5pbml0aWFsaXplclNpZ25hdHVyZSkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlT3V0cHV0cyA9IHRoaXMuaW5pdGlhbGl6ZXJTaWduYXR1cmUub3V0cHV0cztcbiAgICAgIGNvbnN0IG91dHB1dE5hbWVzID0gT2JqZWN0LmtleXMoc2lnbmF0dXJlT3V0cHV0cyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dE5hbWUgPSBvdXRwdXROYW1lc1tpXTtcbiAgICAgICAgY29uc3QgdGVuc29ySW5mbyA9IHNpZ25hdHVyZU91dHB1dHNbb3V0cHV0TmFtZV07XG4gICAgICAgIHRoaXMucmVzb3VyY2VJZFRvQ2FwdHVyZWRJbnB1dFt0ZW5zb3JJbmZvLnJlc291cmNlSWRdID0gb3V0cHV0c1tpXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgaW5mZXJlbmNlIGZvciB0aGUgbW9kZWwgZm9yIGdpdmVuIGlucHV0IHRlbnNvcnMuXG4gICAqIEBwYXJhbSBpbnB1dHMgdGVuc29yLCB0ZW5zb3IgYXJyYXkgb3IgdGVuc29yIG1hcCBvZiB0aGUgaW5wdXRzIGZvciB0aGVcbiAgICogbW9kZWwsIGtleWVkIGJ5IHRoZSBpbnB1dCBub2RlIG5hbWVzLlxuICAgKiBAcGFyYW0gb3V0cHV0cyBvdXRwdXQgbm9kZSBuYW1lIGZyb20gdGhlIFRlbnNvckZsb3cgbW9kZWwsIGlmIG5vXG4gICAqIG91dHB1dHMgYXJlIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgb3V0cHV0cyBvZiB0aGUgbW9kZWwgd291bGQgYmUgdXNlZC5cbiAgICogWW91IGNhbiBpbnNwZWN0IGludGVybWVkaWF0ZSBub2RlcyBvZiB0aGUgbW9kZWwgYnkgYWRkaW5nIHRoZW0gdG8gdGhlXG4gICAqIG91dHB1dHMgYXJyYXkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgc2luZ2xlIHRlbnNvciBpZiBwcm92aWRlZCB3aXRoIGEgc2luZ2xlIG91dHB1dCBvciBubyBvdXRwdXRzXG4gICAqIGFyZSBwcm92aWRlZCBhbmQgdGhlcmUgaXMgb25seSBvbmUgZGVmYXVsdCBvdXRwdXQsIG90aGVyd2lzZSByZXR1cm4gYVxuICAgKiB0ZW5zb3IgYXJyYXkuIFRoZSBvcmRlciBvZiB0aGUgdGVuc29yIGFycmF5IGlzIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXRzXG4gICAqIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgdGhlIG9yZGVyIG9mIG91dHB1dE5vZGVzIGF0dHJpYnV0ZSBvZiB0aGUgbW9kZWwuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBleGVjdXRlKGlucHV0czogVGVuc29yfFRlbnNvcltdfE5hbWVkVGVuc29yTWFwLCBvdXRwdXRzPzogc3RyaW5nfHN0cmluZ1tdKTpcbiAgICAgIFRlbnNvcnxUZW5zb3JbXSB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VJZFRvQ2FwdHVyZWRJbnB1dCA9PSBudWxsKSB7XG4gICAgICB0aGlzLnNldFJlc291cmNlSWRUb0NhcHR1cmVkSW5wdXQodGhpcy5leGVjdXRlSW5pdGlhbGl6ZXJHcmFwaCgpKTtcbiAgICB9XG4gICAgaW5wdXRzID0gdGhpcy5ub3JtYWxpemVJbnB1dHMoaW5wdXRzKTtcbiAgICBvdXRwdXRzID0gdGhpcy5ub3JtYWxpemVPdXRwdXRzKG91dHB1dHMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXhlY3V0b3IuZXhlY3V0ZShpbnB1dHMsIG91dHB1dHMpO1xuICAgIHJldHVybiByZXN1bHQubGVuZ3RoID4gMSA/IHJlc3VsdCA6IHJlc3VsdFswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBpbmZlcmVuY2UgZm9yIHRoZSBtb2RlbCBmb3IgZ2l2ZW4gaW5wdXQgdGVuc29ycyBpbiBhc3luY1xuICAgKiBmYXNoaW9uLCB1c2UgdGhpcyBtZXRob2Qgd2hlbiB5b3VyIG1vZGVsIGNvbnRhaW5zIGNvbnRyb2wgZmxvdyBvcHMuXG4gICAqIEBwYXJhbSBpbnB1dHMgdGVuc29yLCB0ZW5zb3IgYXJyYXkgb3IgdGVuc29yIG1hcCBvZiB0aGUgaW5wdXRzIGZvciB0aGVcbiAgICogbW9kZWwsIGtleWVkIGJ5IHRoZSBpbnB1dCBub2RlIG5hbWVzLlxuICAgKiBAcGFyYW0gb3V0cHV0cyBvdXRwdXQgbm9kZSBuYW1lIGZyb20gdGhlIFRlbnNvckZsb3cgbW9kZWwsIGlmIG5vIG91dHB1dHNcbiAgICogYXJlIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgb3V0cHV0cyBvZiB0aGUgbW9kZWwgd291bGQgYmUgdXNlZC4gWW91IGNhblxuICAgKiBpbnNwZWN0IGludGVybWVkaWF0ZSBub2RlcyBvZiB0aGUgbW9kZWwgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIG91dHB1dHNcbiAgICogYXJyYXkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSBvZiBzaW5nbGUgdGVuc29yIGlmIHByb3ZpZGVkIHdpdGggYSBzaW5nbGUgb3V0cHV0IG9yXG4gICAqIG5vIG91dHB1dHMgYXJlIHByb3ZpZGVkIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSBkZWZhdWx0IG91dHB1dCwgb3RoZXJ3aXNlXG4gICAqIHJldHVybiBhIHRlbnNvciBtYXAuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBhc3luYyBleGVjdXRlQXN5bmMoXG4gICAgICBpbnB1dHM6IFRlbnNvcnxUZW5zb3JbXXxOYW1lZFRlbnNvck1hcCxcbiAgICAgIG91dHB1dHM/OiBzdHJpbmd8c3RyaW5nW10pOiBQcm9taXNlPFRlbnNvcnxUZW5zb3JbXT4ge1xuICAgIGlmICh0aGlzLnJlc291cmNlSWRUb0NhcHR1cmVkSW5wdXQgPT0gbnVsbCkge1xuICAgICAgdGhpcy5zZXRSZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0KFxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUluaXRpYWxpemVyR3JhcGhBc3luYygpKTtcbiAgICB9XG4gICAgaW5wdXRzID0gdGhpcy5ub3JtYWxpemVJbnB1dHMoaW5wdXRzKTtcbiAgICBvdXRwdXRzID0gdGhpcy5ub3JtYWxpemVPdXRwdXRzKG91dHB1dHMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0b3IuZXhlY3V0ZUFzeW5jKGlucHV0cywgb3V0cHV0cyk7XG4gICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPiAxID8gcmVzdWx0IDogcmVzdWx0WzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbnRlcm1lZGlhdGUgdGVuc29ycyBmb3IgbW9kZWwgZGVidWdnaW5nIG1vZGUgKGZsYWdcbiAgICogS0VFUF9JTlRFUk1FRElBVEVfVEVOU09SUyBpcyB0cnVlKS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGdldEludGVybWVkaWF0ZVRlbnNvcnMoKTogTmFtZWRUZW5zb3JzTWFwIHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRvci5nZXRJbnRlcm1lZGlhdGVUZW5zb3JzKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSBpbnRlcm1lZGlhdGUgdGVuc29ycyBmb3IgbW9kZWwgZGVidWdnaW5nIG1vZGUgKGZsYWdcbiAgICogS0VFUF9JTlRFUk1FRElBVEVfVEVOU09SUyBpcyB0cnVlKS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JzKCkge1xuICAgIHRoaXMuZXhlY3V0b3IuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRlbnNvck1hcFRvVGVuc29yc01hcChtYXA6IE5hbWVkVGVuc29yTWFwKTogTmFtZWRUZW5zb3JzTWFwIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobWFwKS5yZWR1Y2UoKG5ld01hcDogTmFtZWRUZW5zb3JzTWFwLCBrZXkpID0+IHtcbiAgICAgIG5ld01hcFtrZXldID0gW21hcFtrZXldXTtcbiAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgfSwge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIHRoZSBtZW1vcnkgdXNlZCBieSB0aGUgd2VpZ2h0IHRlbnNvcnMgYW5kIHJlc291cmNlTWFuYWdlci5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5leGVjdXRvci5kaXNwb3NlKCk7XG5cbiAgICBpZiAodGhpcy5pbml0aWFsaXplcikge1xuICAgICAgdGhpcy5pbml0aWFsaXplci5kaXNwb3NlKCk7XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0KSB7XG4gICAgICAgIGRpc3Bvc2UodGhpcy5yZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlTWFuYWdlci5kaXNwb3NlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIGEgZ3JhcGggbW9kZWwgZ2l2ZW4gYSBVUkwgdG8gdGhlIG1vZGVsIGRlZmluaXRpb24uXG4gKlxuICogRXhhbXBsZSBvZiBsb2FkaW5nIE1vYmlsZU5ldFYyIGZyb20gYSBVUkwgYW5kIG1ha2luZyBhIHByZWRpY3Rpb24gd2l0aCBhXG4gKiB6ZXJvcyBpbnB1dDpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW9kZWxVcmwgPVxuICogICAgJ2h0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS90ZmpzLW1vZGVscy9zYXZlZG1vZGVsL21vYmlsZW5ldF92Ml8xLjBfMjI0L21vZGVsLmpzb24nO1xuICogY29uc3QgbW9kZWwgPSBhd2FpdCB0Zi5sb2FkR3JhcGhNb2RlbChtb2RlbFVybCk7XG4gKiBjb25zdCB6ZXJvcyA9IHRmLnplcm9zKFsxLCAyMjQsIDIyNCwgM10pO1xuICogbW9kZWwucHJlZGljdCh6ZXJvcykucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEV4YW1wbGUgb2YgbG9hZGluZyBNb2JpbGVOZXRWMiBmcm9tIGEgVEYgSHViIFVSTCBhbmQgbWFraW5nIGEgcHJlZGljdGlvblxuICogd2l0aCBhIHplcm9zIGlucHV0OlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtb2RlbFVybCA9XG4gKiAgICAnaHR0cHM6Ly90Zmh1Yi5kZXYvZ29vZ2xlL2ltYWdlbmV0L21vYmlsZW5ldF92Ml8xNDBfMjI0L2NsYXNzaWZpY2F0aW9uLzInO1xuICogY29uc3QgbW9kZWwgPSBhd2FpdCB0Zi5sb2FkR3JhcGhNb2RlbChtb2RlbFVybCwge2Zyb21URkh1YjogdHJ1ZX0pO1xuICogY29uc3QgemVyb3MgPSB0Zi56ZXJvcyhbMSwgMjI0LCAyMjQsIDNdKTtcbiAqIG1vZGVsLnByZWRpY3QoemVyb3MpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBtb2RlbFVybCBUaGUgdXJsIG9yIGFuIGBpby5JT0hhbmRsZXJgIHRoYXQgbG9hZHMgdGhlIG1vZGVsLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIEhUVFAgcmVxdWVzdCwgd2hpY2ggYWxsb3dzIHRvIHNlbmRcbiAqICAgICBjcmVkZW50aWFsc1xuICogICAgYW5kIGN1c3RvbSBoZWFkZXJzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnTG9hZGluZyd9XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkR3JhcGhNb2RlbChcbiAgICBtb2RlbFVybDogc3RyaW5nfGlvLklPSGFuZGxlciwgb3B0aW9uczogaW8uTG9hZE9wdGlvbnMgPSB7fSxcbiAgICB0ZmlvID0gaW8pOiBQcm9taXNlPEdyYXBoTW9kZWw+IHtcbiAgaWYgKG1vZGVsVXJsID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdtb2RlbFVybCBpbiBsb2FkR3JhcGhNb2RlbCgpIGNhbm5vdCBiZSBudWxsLiBQbGVhc2UgcHJvdmlkZSBhIHVybCAnICtcbiAgICAgICAgJ29yIGFuIElPSGFuZGxlciB0aGF0IGxvYWRzIHRoZSBtb2RlbCcpO1xuICB9XG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBpZiAob3B0aW9ucy5mcm9tVEZIdWIgJiYgdHlwZW9mIG1vZGVsVXJsID09PSAnc3RyaW5nJykge1xuICAgIG1vZGVsVXJsID0gZ2V0VEZIdWJVcmwobW9kZWxVcmwpO1xuICB9XG4gIGNvbnN0IG1vZGVsID0gbmV3IEdyYXBoTW9kZWwobW9kZWxVcmwsIG9wdGlvbnMsIHRmaW8pO1xuICBhd2FpdCBtb2RlbC5sb2FkKCk7XG4gIHJldHVybiBtb2RlbDtcbn1cblxuLyoqXG4gKiBMb2FkIGEgZ3JhcGggbW9kZWwgZ2l2ZW4gYSBzeW5jaHJvbm91cyBJTyBoYW5kbGVyIHdpdGggYSAnbG9hZCcgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSBtb2RlbFNvdXJjZSBUaGUgYGlvLklPSGFuZGxlclN5bmNgIHRoYXQgbG9hZHMgdGhlIG1vZGVsLCBvciB0aGVcbiAqICAgICBgaW8uTW9kZWxBcnRpZmFjdHNgIHRoYXQgZW5jb2RlIHRoZSBtb2RlbCwgb3IgYSB0dXBsZSBvZlxuICogICAgIGBbaW8uTW9kZWxKU09OLCBBcnJheUJ1ZmZlcl1gIG9mIHdoaWNoIHRoZSBmaXJzdCBlbGVtZW50IGVuY29kZXMgdGhlXG4gKiAgICAgIG1vZGVsIGFuZCB0aGUgc2Vjb25kIGNvbnRhaW5zIHRoZSB3ZWlnaHRzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnTG9hZGluZyd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkR3JhcGhNb2RlbFN5bmMoXG4gICAgbW9kZWxTb3VyY2U6IGlvLklPSGFuZGxlclN5bmN8XG4gICAgaW8uTW9kZWxBcnRpZmFjdHN8W2lvLk1vZGVsSlNPTiwgLyogV2VpZ2h0cyAqLyBBcnJheUJ1ZmZlcl0pOlxuICAgIEdyYXBoTW9kZWw8aW8uSU9IYW5kbGVyU3luYz4ge1xuICBpZiAobW9kZWxTb3VyY2UgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ21vZGVsVXJsIGluIGxvYWRHcmFwaE1vZGVsU3luYygpIGNhbm5vdCBiZSBudWxsLiBQbGVhc2UgcHJvdmlkZSAnICtcbiAgICAgICAgJ21vZGVsIGFydGlmYWN0cyBvciBhbiBJT0hhbmRsZXIgdGhhdCBsb2FkcyB0aGUgbW9kZWwnKTtcbiAgfVxuXG4gIGxldCBpb0hhbmRsZXI6IGlvLklPSGFuZGxlclN5bmM7XG4gIGlmIChtb2RlbFNvdXJjZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgY29uc3QgW21vZGVsSlNPTiwgd2VpZ2h0c10gPSBtb2RlbFNvdXJjZTtcbiAgICBpZiAoIW1vZGVsSlNPTikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtb2RlbEpTT04gbXVzdCBiZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXknKTtcbiAgICB9XG4gICAgaWYgKCF3ZWlnaHRzIHx8ICEod2VpZ2h0cyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdBbiBBcnJheUJ1ZmZlciBvZiB3ZWlnaHRzIG11c3QgYmUgdGhlIHNlY29uZCBlbGVtZW50IG9mJyArXG4gICAgICAgICAgJyB0aGUgYXJyYXknKTtcbiAgICB9XG4gICAgaWYgKCEoJ21vZGVsVG9wb2xvZ3knIGluIG1vZGVsSlNPTikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kZWwgSlNPTiBpcyBtaXNzaW5nIFxcJ21vZGVsVG9wb2xvZ3lcXCcnKTtcbiAgICB9XG4gICAgaWYgKCEoJ3dlaWdodHNNYW5pZmVzdCcgaW4gbW9kZWxKU09OKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2RlbCBKU09OIGlzIG1pc3NpbmcgXFwnd2VpZ2h0c01hbmlmZXN0XFwnJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2VpZ2h0U3BlY3MgPSBpby5nZXRXZWlnaHRTcGVjcyhtb2RlbEpTT04ud2VpZ2h0c01hbmlmZXN0KTtcbiAgICBjb25zdCBtb2RlbEFydGlmYWN0cyA9XG4gICAgICAgIGlvLmdldE1vZGVsQXJ0aWZhY3RzRm9ySlNPTlN5bmMobW9kZWxKU09OLCB3ZWlnaHRTcGVjcywgd2VpZ2h0cyk7XG4gICAgaW9IYW5kbGVyID0gaW8uZnJvbU1lbW9yeVN5bmMobW9kZWxBcnRpZmFjdHMpO1xuICB9IGVsc2UgaWYgKCdsb2FkJyBpbiBtb2RlbFNvdXJjZSkge1xuICAgIC8vIFRoZW4gbW9kZWxTb3VyY2UgaXMgYWxyZWFkeSBhbiBJT0hhbmRsZXJTeW5jLlxuICAgIGlvSGFuZGxlciA9IG1vZGVsU291cmNlO1xuICB9IGVsc2UgaWYgKFxuICAgICAgJ21vZGVsVG9wb2xvZ3knIGluIG1vZGVsU291cmNlICYmICd3ZWlnaHRTcGVjcycgaW4gbW9kZWxTb3VyY2UgJiZcbiAgICAgICd3ZWlnaHREYXRhJyBpbiBtb2RlbFNvdXJjZSkge1xuICAgIC8vIG1vZGVsU291cmNlIGlzIG9mIHR5cGUgTW9kZWxBcnRpZmFjdHMuXG4gICAgaW9IYW5kbGVyID0gaW8uZnJvbU1lbW9yeVN5bmMobW9kZWxTb3VyY2UpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtb2RlbCBmb3JtYXQnKTtcbiAgfVxuXG4gIGNvbnN0IG1vZGVsID0gbmV3IEdyYXBoTW9kZWwoaW9IYW5kbGVyKTtcbiAgbW9kZWwubG9hZCgpO1xuICByZXR1cm4gbW9kZWw7XG59XG5cbmZ1bmN0aW9uIGdldFRGSHViVXJsKG1vZGVsVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIW1vZGVsVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICBtb2RlbFVybCA9IChtb2RlbFVybCkgKyAnLyc7XG4gIH1cbiAgcmV0dXJuIGAke21vZGVsVXJsfSR7REVGQVVMVF9NT0RFTF9OQU1FfSR7VEZIVUJfU0VBUkNIX1BBUkFNfWA7XG59XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport*as t from\"@tensorflow/tfjs-core\";import{Tensor as e,browser as n,tidy as r,cast as i,greater as o,scalar as a,oneHot as s,expandDims as u,range as f,matMul as l,reshape as c,add as d,sub as h,mul as p,argMax as m,squeeze as g,sigmoid as v,util as w,div as y,tensor as b,backend as S,getBackend as x,engine as M,equal as k,image as E,pad3d as T,tensor2d as P,slice as I,pad as O,mirrorPad as _}from\"@tensorflow/tfjs-core\";import{loadGraphModel as H}from\"@tensorflow/tfjs-converter\";import{SelfieSegmentation as A}from\"@mediapipe/selfie_segmentation\";var R=function(t,e){return R=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},R(t,e)};function F(t,e){function n(){this.constructor=t}R(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var C=function(){return C=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=256)throw new Error(\"Mask value must be in range [0, 255] but got \"+t);if(!Number.isInteger(t))throw new Error(\"Mask value must be an integer but got \"+t)}var K=[[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 U(t){if(V(t),tn?n:t}function rt(t,e){return{x:t.x+e.x,y:t.y+e.y}}function it(t,e,n){void 0===n&&(n=.3);for(var r=0,i=0,o=0;on&&(i+=1,r+=Math.pow(t[o].x-e.keypoints[o].position.x,2)+Math.pow(t[o].y-e.keypoints[o].position.y,2));return 0===i?r=1/0:r/=i,r}function ot(t,e,n,r,i,o,a){for(var s=a[0],u=a[1],f=n(t),l=f.y*r+f.x,c=i[$*(2*l)+e],d=i[$*(2*l+1)+e],h=t.y+c,p=t.x+d,m=0;m \"+f+\") {\\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 \"};return S().compileAndRun(D,[t,x,R])}function ft(){return\"webgl\"===x()}function lt(t,e,n,o,s,u,f,l,c,d,h,p){var m=f[0],g=f[1];return void 0===c&&(c=.2),void 0===d&&(d=8),void 0===h&&(h=.3),void 0===p&&(p=10),D(this,void 0,void 0,(function(){var f,v,w,y,b;return B(this,(function(S){switch(S.label){case 0:return f=n.filter((function(t){return t.score>=c})),ft()?(w=r((function(){var n=ut(t,e,f,o,s,u,[m,g],l,d,h,p),c=M().makeTensorFromDataId(n.dataId,n.shape,n.dtype);return f.map((function(t,e){return function(t,e){return r((function(){return i(k(t,a(e)),\"int32\")}))}(c,e)}))})),[4,Promise.all(w.map((function(t){return t.data()})))]):[3,2];case 1:return v=S.sent(),w.forEach((function(t){return t.dispose()})),[3,5];case 2:return[4,t.data()];case 3:return y=S.sent(),[4,e.data()];case 4:b=S.sent(),v=function(t,e,n,r,i,o,a,s,u,f){var l=a[0],c=a[1];void 0===f&&(f=5);for(var d=n.map((function(t){return new Uint8Array(r*i).fill(0)})),h=s.top,p=s.left,m=Z([r,i],[l,c],s),g=m[0],v=m[1],w=st([l,c],o)[0],y=0;y=0&&(d[x][S]=1)}}return d}(y,b,f,o,s,u,[m,g],l,d),S.label=5;case 5:return[2,v.map((function(t,e){return{data:t,pose:f[e],width:s,height:o}}))]}}))}))}function ct(t,e,n,o,s,u,f,l,c,m,g,v,w){var y=l[0],b=l[1];return void 0===m&&(m=.2),void 0===g&&(g=8),void 0===v&&(v=.3),void 0===w&&(w=10),D(this,void 0,void 0,(function(){var l,S,x,E,T,P;return B(this,(function(I){switch(I.label){case 0:return l=o.filter((function(t){return t.score>=m})),ft()?(x=r((function(){var o=ut(t,e,l,s,u,f,[y,b],c,g,v,w),m=M().makeTensorFromDataId(o.dataId,o.shape,o.dtype);return l.map((function(t,e){return function(t,e,n){return r((function(){return h(p(i(k(t,a(n)),\"int32\"),d(e,1)),1)}))}(m,n,e)}))})),[4,Promise.all(x.map((function(t){return t.data()})))]):[3,2];case 1:return S=I.sent(),x.forEach((function(t){return t.dispose()})),[3,6];case 2:return[4,t.data()];case 3:return E=I.sent(),[4,e.data()];case 4:return T=I.sent(),[4,n.data()];case 5:P=I.sent(),S=function(t,e,n,r,i,o,a,s,u,f,l){var c=s[0],d=s[1];void 0===l&&(l=5);for(var h=r.map((function(t){return new Int32Array(i*o).fill(-1)})),p=u.top,m=u.left,g=Z([i,o],[c,d],u),v=g[0],w=g[1],y=st([c,d],a)[0],b=0;b=0&&(h[M][x]=n[x])}}return h}(E,T,P,l,s,u,f,[y,b],c,g),I.label=6;case 6:return[2,S.map((function(t,e){return{pose:l[e],data:t,height:s,width:u}}))]}}))}))}function dt(t){return Math.floor(t/2)}var ht=function(){function t(t,e){this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=e}return t.prototype.enqueue=function(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)},t.prototype.dequeue=function(){var t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t},t.prototype.empty=function(){return-1===this.numberOfElements},t.prototype.size=function(){return this.numberOfElements+1},t.prototype.all=function(){return this.priorityQueue.slice(0,this.numberOfElements+1)},t.prototype.max=function(){return this.priorityQueue[0]},t.prototype.swim=function(t){for(;t>0&&this.less(dt(t),t);)this.exchange(t,dt(t)),t=dt(t)},t.prototype.sink=function(t){for(;2*t<=this.numberOfElements;){var e=2*t;if(ee){f=!1;break}if(!f)break}return f}var mt=[[\"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\"]].map((function(t){var e=t[0],n=t[1];return[J[e],J[n]]})),gt=mt.map((function(t){return t[1]})),vt=mt.map((function(t){return t[0]}));function wt(t,e,n,r){return{y:nt(Math.round(t.y/e),0,n-1),x:nt(Math.round(t.x/e),0,r-1)}}function yt(t,e,n,r,i,o,a,s){void 0===s&&(s=2);for(var u=r.shape,f=u[0],l=u[1],c=function(t,e,n){var r=n.shape[2]/2;return{y:n.get(e.y,e.x,t),x:n.get(e.y,e.x,r+t)}}(t,wt(e.position,o,f,l),a),d=rt(e.position,c),h=0;h=0;--d){var h=gt[d],p=vt[d];u[h]&&!u[p]&&(u[p]=yt(d,u[h],p,e,n,r,o))}for(d=0;d=.1,(function(){return\"inputResolution must be a string or number between 0.1 and 2, but was \"+t})),t}(t);return[_t(r*o,e),_t(i*o,e)]}function Ft(t,e,n,i,o){var a=e[0],s=e[1],f=n[0],l=n[1],c=i[0],d=c[0],h=c[1],p=i[1],m=p[0],w=p[1];return void 0===o&&(o=!1),r((function(){var e=E.resizeBilinear(t,[f,l],!0);return o&&(e=v(e)),function(t,e,n){var i=e[0],o=e[1],a=n[0],s=a[0],f=a[1],l=n[1],c=l[0],d=l[1];return r((function(){var e=u(t);return g(E.cropAndResize(e,[[s/(i+s+f-1),c/(o+c+d-1),(s+i-1)/(i+s+f-1),(c+o-1)/(o+c+d-1)]],[0],[i,o]),[0])}))}(e,[a,s],[[d,h],[m,w]])}))}function Ct(t,i){var o=i[0],a=i[1],s=Ot(t),u=s[0],f=s[1],l=a/o,c=[0,0,0,0],d=c[0],h=c[1],p=c[2],m=c[3];f/u1)throw new Error(\"segmentationThreshold \"+e+\". Should be in range [0.0, 1.0]\");if(n<=0)throw new Error(\"Invalid maxDetections \"+n+\". Should be > 0\");if(r<0||r>1)throw new Error(\"Invalid scoreThreshold \"+r+\". Should be in range [0.0, 1.0]\");if(i<=0)throw new Error(\"Invalid nmsRadius \"+i+\".\")}function Nt(t){var e=t.segmentationThreshold,n=t.maxDetections,r=t.scoreThreshold,i=t.nmsRadius,o=t.minKeypointScore,a=t.refineSteps;if(e<0||e>1)throw new Error(\"segmentationThreshold \"+e+\". Should be in range [0.0, 1.0]\");if(n<=0)throw new Error(\"Invalid maxDetections \"+n+\". Should be > 0\");if(r<0||r>1)throw new Error(\"Invalid scoreThreshold \"+r+\". Should be in range [0.0, 1.0]\");if(i<=0)throw new Error(\"Invalid nmsRadius \"+i+\".\");if(o<0||o>1)throw new Error(\"Invalid minKeypointScore \"+o+\".Should be in range [0.0, 1.0]\");if(a<=0||a>20)throw new Error(\"Invalid refineSteps \"+a+\".Should be in range [1, 20]\")}var Qt=function(){function t(t){this.baseModel=t}return t.prototype.predictForPersonSegmentation=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd}},t.prototype.predictForPersonSegmentationAndPart=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,partHeatmapLogits:e.partHeatmaps,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd}},t.prototype.predictForMultiPersonInstanceSegmentationAndPart=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,longOffsets:e.longOffsets,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd,partHeatmaps:e.partHeatmaps}},t.prototype.segmentPersonActivation=function(t,e,n){var i=this;void 0===n&&(n=.5);var o=Ot(t),a=o[0],s=o[1],u=Rt(e,this.baseModel.outputStride,[a,s]),f=Ct(t,u),l=f.resized,c=f.padding,d=r((function(){var t=i.predictForPersonSegmentation(l),e=t.segmentLogits,r=t.heatmapScores,o=t.offsets,u=t.displacementFwd,f=t.displacementBwd,d=l.shape,h=d[0],p=d[1],m=Ft(e,[a,s],[h,p],[[c.top,c.bottom],[c.left,c.right]],true);return{segmentation:N(g(m),n),heatmapScores:r,offsets:o,displacementFwd:u,displacementBwd:f}})),h=d.segmentation,p=d.heatmapScores,m=d.offsets,v=d.displacementFwd,w=d.displacementBwd;return l.dispose(),{segmentation:h,heatmapScores:p,offsets:m,displacementFwd:v,displacementBwd:w,padding:c,internalResolutionHeightAndWidth:u}},t.prototype.segmentPerson=function(t,e){return void 0===e&&(e=Kt),D(this,void 0,void 0,(function(){var n,r,i,o,a,s,u,f,l,c,d,h,p,m,g,v,w,y;return B(this,(function(b){switch(b.label){case 0:return qt(e=C(C({},Kt),e)),n=this.segmentPersonActivation(t,e.internalResolution,e.segmentationThreshold),r=n.segmentation,i=n.heatmapScores,o=n.offsets,a=n.displacementFwd,s=n.displacementBwd,u=n.padding,f=n.internalResolutionHeightAndWidth,l=r.shape,c=l[0],d=l[1],[4,r.data()];case 1:return h=b.sent(),r.dispose(),[4,Dt([i,o,a,s])];case 2:return p=b.sent(),m=p[0],g=p[1],v=p[2],w=p[3],y=Bt(y=Mt(m,g,v,w,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[c,d],f,u,false),i.dispose(),o.dispose(),a.dispose(),s.dispose(),[2,{height:c,width:d,data:h,allPoses:y}]}}))}))},t.prototype.segmentMultiPerson=function(t,e){return void 0===e&&(e=Ut),D(this,void 0,void 0,(function(){var n,i,o,a,s,u,f,l,c,d,h,p,m,v,w,y,b,S,x,M,k,E=this;return B(this,(function(T){switch(T.label){case 0:return Nt(e=C(C({},Ut),e)),n=Ot(t),i=n[0],o=n[1],a=Rt(e.internalResolution,this.baseModel.outputStride,[i,o]),s=Ct(t,a),u=s.resized,f=s.padding,l=r((function(){var t,n=E.predictForMultiPersonInstanceSegmentationAndPart(u),r=n.segmentLogits,s=n.longOffsets,l=n.heatmapScores,c=n.offsets,d=n.displacementFwd,h=n.displacementBwd,p=Ft(r,[i,o],a,[[f.top,f.bottom],[f.left,f.right]],true);return t=s,{segmentation:N(g(p),e.segmentationThreshold),longOffsets:t,heatmapScoresRaw:l,offsetsRaw:c,displacementFwdRaw:d,displacementBwdRaw:h}})),c=l.segmentation,d=l.longOffsets,h=l.heatmapScoresRaw,p=l.offsetsRaw,m=l.displacementFwdRaw,v=l.displacementBwdRaw,[4,Dt([h,p,m,v])];case 1:return w=T.sent(),y=w[0],b=w[1],S=w[2],x=w[3],M=Bt(M=Mt(y,b,S,x,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[i,o],a,f,false),[4,lt(c,d,M,i,o,this.baseModel.outputStride,a,f,e.scoreThreshold,e.refineSteps,e.minKeypointScore,e.maxDetections)];case 2:return k=T.sent(),u.dispose(),c.dispose(),d.dispose(),h.dispose(),p.dispose(),m.dispose(),v.dispose(),[2,k]}}))}))},t.prototype.segmentPersonPartsActivation=function(t,e,n){var i=this;void 0===n&&(n=.5);var o=Ot(t),a=o[0],s=o[1],u=Rt(e,this.baseModel.outputStride,[a,s]),f=Ct(t,u),l=f.resized,c=f.padding,d=r((function(){var t=i.predictForPersonSegmentationAndPart(l),e=t.segmentLogits,r=t.partHeatmapLogits,o=t.heatmapScores,u=t.offsets,f=t.displacementFwd,d=t.displacementBwd,h=l.shape,p=h[0],m=h[1],v=Ft(e,[a,s],[p,m],[[c.top,c.bottom],[c.left,c.right]],true),w=Ft(r,[a,s],[p,m],[[c.top,c.bottom],[c.left,c.right]],true);return{partSegmentation:Q(N(g(v),n),w),heatmapScores:o,offsets:u,displacementFwd:f,displacementBwd:d}})),h=d.partSegmentation,p=d.heatmapScores,m=d.offsets,v=d.displacementFwd,w=d.displacementBwd;return l.dispose(),{partSegmentation:h,heatmapScores:p,offsets:m,displacementFwd:v,displacementBwd:w,padding:c,internalResolutionHeightAndWidth:u}},t.prototype.segmentPersonParts=function(t,e){return void 0===e&&(e=Kt),D(this,void 0,void 0,(function(){var n,r,i,o,a,s,u,f,l,c,d,h,p,m,g,v,w,y;return B(this,(function(b){switch(b.label){case 0:return qt(e=C(C({},Kt),e)),n=this.segmentPersonPartsActivation(t,e.internalResolution,e.segmentationThreshold),r=n.partSegmentation,i=n.heatmapScores,o=n.offsets,a=n.displacementFwd,s=n.displacementBwd,u=n.padding,f=n.internalResolutionHeightAndWidth,l=r.shape,c=l[0],d=l[1],[4,r.data()];case 1:return h=b.sent(),r.dispose(),[4,Dt([i,o,a,s])];case 2:return p=b.sent(),m=p[0],g=p[1],v=p[2],w=p[3],y=Bt(y=Mt(m,g,v,w,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[c,d],f,u,false),i.dispose(),o.dispose(),a.dispose(),s.dispose(),[2,{height:c,width:d,data:h,allPoses:y}]}}))}))},t.prototype.segmentMultiPersonParts=function(t,e){return void 0===e&&(e=Ut),D(this,void 0,void 0,(function(){var n,o,a,s,d,h,p,m,v,w,y,b,S,x,M,k,E,T,P,I,O,_,H=this;return B(this,(function(A){switch(A.label){case 0:return Nt(e=C(C({},Ut),e)),n=Ot(t),o=n[0],a=n[1],s=Rt(e.internalResolution,this.baseModel.outputStride,[o,a]),d=Ct(t,s),h=d.resized,p=d.padding,m=r((function(){var t=H.predictForMultiPersonInstanceSegmentationAndPart(h),n=t.segmentLogits,d=t.longOffsets,m=t.heatmapScores,v=t.offsets,w=t.displacementFwd,y=t.displacementBwd,b=t.partHeatmaps,S=Ft(n,[o,a],s,[[p.top,p.bottom],[p.left,p.right]],true),x=Ft(b,[o,a],s,[[p.top,p.bottom],[p.left,p.right]],true),M=d,k=N(g(S),e.segmentationThreshold),E=function(t){var e=t.shape,n=e[0],o=e[1],a=e[2];return r((function(){var e=q(t),r=u(f(0,a,1,\"int32\"),1),s=i(l(e,r),\"int32\");return c(s,[n,o])}))}(x);return{segmentation:k,longOffsets:M,heatmapScoresRaw:m,offsetsRaw:v,displacementFwdRaw:w,displacementBwdRaw:y,partSegmentation:E}})),v=m.segmentation,w=m.longOffsets,y=m.heatmapScoresRaw,b=m.offsetsRaw,S=m.displacementFwdRaw,x=m.displacementBwdRaw,M=m.partSegmentation,[4,Dt([y,b,S,x])];case 1:return k=A.sent(),E=k[0],T=k[1],P=k[2],I=k[3],O=Bt(O=Mt(E,T,P,I,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[o,a],s,p,false),[4,ct(v,w,M,O,o,a,this.baseModel.outputStride,s,p,e.scoreThreshold,e.refineSteps,e.minKeypointScore,e.maxDetections)];case 2:return _=A.sent(),h.dispose(),v.dispose(),w.dispose(),y.dispose(),b.dispose(),S.dispose(),x.dispose(),M.dispose(),[2,_]}}))}))},t.prototype.dispose=function(){this.baseModel.dispose()},t}();function Xt(e){return D(this,void 0,void 0,(function(){var n,r,i,o,a,s;return B(this,(function(u){switch(u.label){case 0:if(n=e.outputStride,r=e.quantBytes,i=e.multiplier,null==t)throw new Error(\"Cannot find TensorFlow.js. If you are using a \n","import { render } from \"./ModalView.vue?vue&type=template&id=5d79504e\"\nimport script from \"./ModalView.vue?vue&type=script&lang=js\"\nexport * from \"./ModalView.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/home/runner/work/adpi-app/adpi-app/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import * as mutations from './mutations';\nimport { state } from './state';\n\nexport * from './hooks';\nexport * from './components';\n\nexport const modal = {\n namespaced: true,\n mutations,\n state,\n};\n\nexport default modal;\n","import { useMutations } from 'vuex-composition-helpers';\nimport { axios } from '@/plugins/axios';\nimport { OPEN_PROJECT } from '@/domains/employee/api/endpoints';\nimport { transformApiCustomer, transformApiEmailTemplate, transformApiProject } from '@/domains/employee/transformers';\nimport Customer from '@/domains/employee/models/Customer';\nimport EmailTemplate from '@/domains/employee/models/EmailTemplate';\nimport Project from '@/domains/employee/models/Project';\nimport {\n CHANGE_CURRENT_PROJECT,\n SET_DEFAULT_CUSTOMER_DOCUMENTS,\n SET_DEFAULT_EMAILS,\n SET_DEFAULT_EVENTS,\n} from '@/store/constants/mutations';\nimport { useProjectStore } from '../hooks';\n\nexport const useFetchProject = () => {\n const projectStore = useProjectStore();\n\n const { legacySetProject, legacySetEvents, legacySetEmails, legacySetCustomerDocuments } = useMutations({\n legacySetProject: CHANGE_CURRENT_PROJECT,\n legacySetEvents: SET_DEFAULT_EVENTS,\n legacySetEmails: SET_DEFAULT_EMAILS,\n legacySetCustomerDocuments: SET_DEFAULT_CUSTOMER_DOCUMENTS,\n });\n\n return async (projectId) => {\n const { data } = await axios.post(OPEN_PROJECT, { project_id: projectId });\n\n legacySetProject(data.project);\n legacySetEvents(data.defaultevents);\n legacySetEmails(data.standaardmails);\n legacySetCustomerDocuments(data.standaardklantdocuments);\n\n await Project.insertOrUpdate({\n data: transformApiProject(data.project),\n });\n\n await EmailTemplate.insertOrUpdate({\n data: data.standaardmails.map(transformApiEmailTemplate),\n });\n\n await Customer.insertOrUpdate({\n data: data.project.klanten.map((customer) =>\n transformApiCustomer({\n ...customer,\n address: customer.klantgegevens.find(\n (detail) => detail.advise_id === data.project.active_advise_id\n ),\n project_id: data.project.id,\n })\n ),\n });\n\n projectStore.setActiveProjectId(data.project.id);\n };\n};\n\nexport default useFetchProject;\n","import { computed } from 'vue';\nimport { useNamespacedMutations } from 'vuex-composition-helpers';\nimport { Project } from '@/domains/employee/models';\nimport { useStore } from 'vuex';\n\nexport const useProjectStore = () => {\n const store = useStore();\n\n const activeProjectId = computed(() => store.state.employee.project.activeProjectId);\n\n const { setActiveProjectId } = useNamespacedMutations('employee/project', ['setActiveProjectId']);\n\n const activeProject = computed(() =>\n Project.query().with(['customers', 'mortgageAdvisor']).find(activeProjectId.value),\n );\n\n return {\n activeProject,\n activeProjectId,\n setActiveProjectId,\n };\n};\n","export const state = {\n activeProjectId: null,\n};\n\nexport default state;\n","export const setActiveProjectId = (state, activeProjectId) => {\n state.activeProjectId = activeProjectId;\n};\n\nexport default setActiveProjectId;\n","import { useMutations } from 'vuex-composition-helpers';\nimport { axios } from '@/plugins/axios';\nimport { PROJECT_SETTINGS_SET_LANGUAGE_CODE } from '@/domains/employee/api/endpoints';\nimport { SET_LANGUAGE_CODE_FOR_CURRENT_PROJECT } from '@/store/constants/mutations';\nimport Language from '@/domains/employee/models/Language';\nimport Project from '@/domains/employee/models/Project';\n\nexport const useChangeProjectLanguage = () => {\n const { legacySetLanguageCodeForCurrentProject } = useMutations({\n legacySetLanguageCodeForCurrentProject: SET_LANGUAGE_CODE_FOR_CURRENT_PROJECT,\n });\n\n return async (projectId, formData) => {\n await axios.post(PROJECT_SETTINGS_SET_LANGUAGE_CODE, {\n project_id: projectId,\n langcode: formData.language,\n });\n\n const language = Language.query()\n .where((language) => language.code === formData.language)\n .first();\n\n await Project.update({\n where: projectId,\n data: {\n languageId: language.id,\n },\n });\n\n legacySetLanguageCodeForCurrentProject(formData.language);\n };\n};\n\nexport default useChangeProjectLanguage;\n","import { axios } from '@/plugins/axios';\nimport { ADVISOR_DELETE_DOSSIER } from '@/domains/employee/api/endpoints';\nimport { useLegacyRouter, routes } from '@/domains/employee/hooks/useLegacyRouter';\n\nexport const useDeleteProject = () => {\n const legacyRouter = useLegacyRouter();\n\n return async (projectId) => {\n await axios.post(ADVISOR_DELETE_DOSSIER, { project_id: projectId });\n\n await legacyRouter.to(routes.EMPLOYEE);\n };\n};\n\nexport default useDeleteProject;\n","import { axios } from '@/plugins/axios';\nimport { PROJECT_SETTINGS_ADVISORS } from '@/domains/employee/api/endpoints';\nimport Employee from '@/domains/employee/models/Employee';\nimport Project from '@/domains/employee/models/Project';\nimport { Role } from '@/domains/employee/models';\nimport { MORTGAGE_ADVISOR } from '@/domains/employee/constants/roles';\nimport { transformApiEmployee } from '@/domains/employee/transformers';\n\nexport const useFetchMortgageAdvisorsForProject = () => async (projectId) => {\n const { data } = await axios.get(PROJECT_SETTINGS_ADVISORS, {\n params: {\n project_id: projectId,\n },\n });\n\n const mortgageAdvisorRoleExists = Role.query()\n .where((role) => role.name === MORTGAGE_ADVISOR)\n .exists();\n\n if (!mortgageAdvisorRoleExists) {\n await Role.insert({ data: { name: MORTGAGE_ADVISOR } });\n }\n\n const mortgageAdvisorRole = Role.query()\n .where((role) => role.name === MORTGAGE_ADVISOR)\n .first();\n\n await Employee.insertOrUpdate({\n data: data.adviseurs.map((employee) => ({\n ...transformApiEmployee(employee),\n roles: [mortgageAdvisorRole],\n })),\n });\n\n const advisor = data.gekoppeld[0] || null;\n\n await Project.update({\n where: projectId,\n data: {\n mortgageAdvisorId: advisor?.user?.id,\n },\n });\n};\n\nexport default useFetchMortgageAdvisorsForProject;\n","import { axios } from '@/plugins/axios';\nimport { transformApiEmployee } from '@/domains/employee/transformers';\nimport { PROJECT_SETTINGS_BACKOFFICE } from '@/domains/employee/api/endpoints';\nimport Employee from '@/domains/employee/models/Employee';\nimport Project from '@/domains/employee/models/Project';\nimport Role from '@/domains/employee/models/Role';\nimport { BACK_OFFICE } from '@/domains/employee/constants/roles';\n\nexport const useFetchBackOfficeEmployeesForProject = () => {\n return async (projectId) => {\n const { data } = await axios.get(PROJECT_SETTINGS_BACKOFFICE, {\n params: {\n project_id: projectId,\n },\n });\n\n const backOfficeRoleExists = Role.query()\n .where((role) => role.name === BACK_OFFICE)\n .exists();\n\n if (!backOfficeRoleExists) {\n await Role.insert({ data: { name: BACK_OFFICE } });\n }\n\n const backOfficeRole = Role.query()\n .where((role) => role.name === BACK_OFFICE)\n .first();\n\n await Employee.insertOrUpdate({\n data: data.adviseurs.map((employee) => ({\n ...transformApiEmployee(employee),\n roles: [backOfficeRole],\n })),\n });\n\n const backOfficeEmployee = data.gekoppeld[0] || null;\n\n await Project.update({\n where: projectId,\n data: {\n backOfficeEmployeeId: backOfficeEmployee?.user?.id,\n },\n });\n };\n};\n\nexport default useFetchBackOfficeEmployeesForProject;\n","import { axios } from '@/plugins/axios';\nimport { PROJECT_SETTINGS_GET_EMPLOYEES } from '@/domains/employee/api/endpoints';\nimport { transformApiEmployee } from '@/domains/employee/transformers';\nimport { Employee } from '@/domains/employee/models';\n\nexport const useFetchEmployeesForProject = () => {\n return async (projectId) => {\n const { data } = await axios.get(PROJECT_SETTINGS_GET_EMPLOYEES, {\n params: {\n project_id: projectId,\n },\n });\n\n await Employee.insertOrUpdate({\n data: data.medewerkers.map(transformApiEmployee),\n });\n };\n};\n\nexport default useFetchEmployeesForProject;\n","import { axios } from '@/plugins/axios';\nimport { PROJECT_SETTINGS_STATUSES } from '@/domains/employee/api/endpoints';\nimport { transformApiProjectStatus, transformApiProjectStatusHistory } from '@/domains/employee/transformers';\nimport Project from '@/domains/employee/models/Project';\nimport ProjectStatus from '@/domains/employee/models/ProjectStatus';\nimport ProjectStatusHistory from '@/domains/employee/models/ProjectStatusHistory';\n\nexport const useFetchStatusesForProject = () => {\n return async (projectId) => {\n const { data } = await axios.get(PROJECT_SETTINGS_STATUSES, {\n params: {\n project_id: projectId,\n },\n });\n\n ProjectStatus.insertOrUpdate({\n data: data.statuses.map(transformApiProjectStatus),\n });\n\n Project.update({\n where: projectId,\n data: {\n statusId: data.active_status?.status_id,\n },\n });\n\n // Start with a fresh status history\n ProjectStatusHistory.delete((history) => history.projectId === projectId);\n\n ProjectStatusHistory.insert({\n data: data.history.map((history) => ({\n ...transformApiProjectStatusHistory(history),\n projectId,\n })),\n });\n };\n};\n\nexport default useFetchStatusesForProject;\n","import { useMutations } from 'vuex-composition-helpers';\nimport { axios } from '@/plugins/axios';\nimport { ADD_EMAILS_TO_CURRENT_PROJECT } from '@/store/constants/mutations';\nimport { ADVISOR_SEND_INVITATION } from '@/domains/employee/api/endpoints';\nimport { EMAIL_HAS_BEEN_CREATED } from '@/domains/employee/constants/events';\nimport { eventBus } from '@/helpers';\n\nexport const useSendInvitationForProject = () => {\n const { legacyAddEmails } = useMutations({\n legacyAddEmails: ADD_EMAILS_TO_CURRENT_PROJECT,\n });\n\n return async (projectId) => {\n const { data } = await axios.post(ADVISOR_SEND_INVITATION, { project_id: projectId });\n\n legacyAddEmails(data.emails);\n\n eventBus.emit(EMAIL_HAS_BEEN_CREATED, { projectId, data });\n };\n};\n\nexport default useSendInvitationForProject;\n","import { useMutations } from 'vuex-composition-helpers';\nimport { axios } from '@/plugins/axios';\nimport { BILLING_SEND_CUSTOMER_INVOICE } from '@/domains/employee/api/endpoints';\nimport { ADD_EMAILS_TO_CURRENT_PROJECT, PUSH_CUSTOMER_DOCUMENT } from '@/store/constants/mutations';\n\nexport const useSendInvoiceForProject = () => {\n const { legacyPushCustomerDocument, legacyAddEmails } = useMutations({\n legacyPushCustomerDocument: PUSH_CUSTOMER_DOCUMENT,\n legacyAddEmails: ADD_EMAILS_TO_CURRENT_PROJECT,\n });\n\n return async (projectId, language, { invoice, notary, advisor, molliePayment }) => {\n const { data } = await axios.post(BILLING_SEND_CUSTOMER_INVOICE, {\n project_id: projectId,\n teFacturerenItems: invoice.lines.filter(line => line.included).map((line) => ({\n serviceId: line.serviceId,\n standard_rate_amount: line.amount,\n standard_rate_description: (language=== 'eng') ? line.descriptionEn : line.description,\n standard_rate_price: line.price,\n standard_rate_price_before_vat: line.priceBeforeVat,\n vat: line.vat,\n vatPercentage: line.vatPercentage,\n })),\n betalingViaNotaris: notary.payment ? 1 : 0,\n emailAdresNotaris: notary.payment ? notary.email : null,\n advisorId: advisor,\n molliePayment: molliePayment,\n });\n\n legacyPushCustomerDocument(data.klantdocument);\n legacyAddEmails(data.emails);\n\n return data;\n };\n};\n\nexport default useSendInvoiceForProject;\n","import { axios } from '@/plugins/axios';\nimport { PROJECT_SETTINGS_TRANSFER } from '@/domains/employee/api/endpoints';\nimport Project from '@/domains/employee/models/Project';\n\nexport const useTransferMortgageAdvisorForProject =\n () =>\n async (projectId, { from, to }) => {\n const mortgageAdvisorId = Number.parseInt(to, 10);\n\n await axios.post(PROJECT_SETTINGS_TRANSFER, {\n project_id: projectId,\n huidige_medewerker_id: from,\n medewerker_id: mortgageAdvisorId,\n adviseurMode: true,\n });\n\n await Project.update({\n where: projectId,\n data: {\n mortgageAdvisorId,\n },\n });\n };\n\nexport default useTransferMortgageAdvisorForProject;\n","import { axios } from '@/plugins/axios';\nimport { PROJECT_SETTINGS_TRANSFER } from '@/domains/employee/api/endpoints';\nimport Project from '@/domains/employee/models/Project';\n\nexport const useTransferBackOfficeEmployeeForProject =\n () =>\n async (projectId, { from, to }) => {\n const backOfficeEmployeeId = Number.parseInt(to, 10);\n\n await axios.post(PROJECT_SETTINGS_TRANSFER, {\n project_id: projectId,\n huidige_medewerker_id: from || -1,\n medewerker_id: backOfficeEmployeeId,\n adviseurMode: false,\n });\n\n await Project.update({\n where: projectId,\n data: {\n backOfficeEmployeeId: backOfficeEmployeeId > 0 ? backOfficeEmployeeId : null,\n },\n });\n };\n\nexport default useTransferBackOfficeEmployeeForProject;\n","import moment from 'moment';\nimport { PROJECT_SETTINGS_STATUSES } from '@/domains/employee/api/endpoints';\nimport Project from '@/domains/employee/models/Project';\nimport ProjectStatus from '@/domains/employee/models/ProjectStatus';\nimport ProjectStatusHistory from '@/domains/employee/models/ProjectStatusHistory';\n\nexport const useUpdateStatusForProject = () => {\n return async (projectId, formData) => {\n await axios.post(PROJECT_SETTINGS_STATUSES, {\n project_id: projectId,\n status_id: formData.status,\n });\n\n const status = ProjectStatus.find(formData.status);\n\n Project.update({\n where: projectId,\n data: {\n statusId: status.id,\n },\n });\n\n ProjectStatusHistory.insert({\n data: {\n projectId: projectId,\n statusId: status.id,\n createdAt: moment().toISOString(),\n updatedAt: moment().toISOString(),\n },\n });\n };\n};\n\nexport default useUpdateStatusForProject;\n","import { state } from './state';\nimport * as mutations from './mutations';\n\nexport * from './hooks';\nexport * from './actions';\n\nexport const project = {\n namespaced: true,\n mutations,\n state,\n};\n\nexport default project;\n","import { computed } from 'vue';\nimport GithubRelease from '@/domains/employee/models/GithubRelease';\n\nexport const useReleaseInformationStore = () => {\n const latestRelease = computed(() => GithubRelease.query().last());\n\n const sortedReleases = computed(() => GithubRelease.query().orderBy('id', 'desc').get());\n\n return {\n latestRelease,\n sortedReleases,\n };\n};\n\nexport default useReleaseInformationStore;\n","import { axios } from '@/plugins/axios';\nimport { VERSION_INFORMATION } from '@/domains/employee/api/endpoints';\nimport GithubRelease from '@/domains/employee/models/GithubRelease';\nimport { transformApiGithubRelease } from '@/domains/employee/transformers';\n\nexport const useFetchReleaseInformation = () => async () => {\n const { data } = await axios.get(VERSION_INFORMATION);\n\n await GithubRelease.insertOrUpdate({\n data: data.versions.map(transformApiGithubRelease),\n });\n};\n\nexport default useFetchReleaseInformation;\n","export * from './hooks';\nexport * from './actions';\n\nexport const releaseInformation = {\n module: true,\n};\n\nexport default releaseInformation;\n","export const close = (state) => {\n state.Component = null;\n state.props = {};\n};\n\nexport default close;\n","export const open = (state, { Component, props = {} }) => {\n state.Component = Component;\n state.props = props;\n};\n\nexport default open;\n","export const setProps = (state, newProps) => {\n state.props = newProps;\n};\n\nexport default setProps;\n","export const state = {\n props: {},\n Component: null,\n};\n\nexport default state;\n","import { computed, markRaw } from 'vue';\nimport { useStore } from 'vuex';\nimport { useNamespacedMutations } from 'vuex-composition-helpers';\n\nexport const useRightBar = () => {\n const store = useStore();\n\n const Component = computed(() => store.state.employee.rightBar.Component);\n const props = computed(() => store.state.employee.rightBar.props);\n const { setProps, storeOpen, close } = useNamespacedMutations('employee/rightBar', {\n setProps: 'setProps',\n storeOpen: 'open',\n close: 'close',\n });\n\n const isActive = computed(() => Component.value !== null);\n\n const open = (NewComponent, newProps = {}) => storeOpen({ Component: NewComponent, props: newProps });\n\n return {\n Component: markRaw(Component),\n isActive,\n props,\n setProps,\n open,\n close,\n };\n};\n\nexport default useRightBar;\n","\n\n\n","import { render } from \"./RightBarView.vue?vue&type=template&id=1bd06466\"\nimport script from \"./RightBarView.vue?vue&type=script&lang=js\"\nexport * from \"./RightBarView.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/home/runner/work/adpi-app/adpi-app/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import * as mutations from './mutations';\nimport { state } from './state';\n\nexport * from './hooks';\nexport * from './components';\n\nexport const rightBar = {\n namespaced: true,\n mutations,\n state,\n};\n\nexport default rightBar;\n","export const SIDEBAR_KEY = 'sidebarIsOpen';\n","import { SIDEBAR_KEY } from './constants';\n\nexport const state = {\n isOpen: JSON.parse(localStorage.getItem(SIDEBAR_KEY)) !== false,\n};\n\nexport default state;\n","import { SIDEBAR_KEY } from '../constants';\n\nexport const close = (state) => {\n state.isOpen = false;\n\n localStorage.setItem(SIDEBAR_KEY, false.toString());\n};\n\nexport default close;\n","import { SIDEBAR_KEY } from '../constants';\n\nexport const open = (state) => {\n state.isOpen = true;\n\n localStorage.setItem(SIDEBAR_KEY, true.toString());\n};\n\nexport default open;\n","import { SIDEBAR_KEY } from '../constants';\n\nexport const toggle = (state) => {\n state.isOpen = !state.isOpen;\n\n localStorage.setItem(SIDEBAR_KEY, state.isOpen.toString());\n};\n\nexport default toggle;\n","import { computed } from 'vue';\nimport { useNamespacedMutations, useNamespacedState } from 'vuex-composition-helpers';\n\nexport const useSidebar = () => {\n const { open, close, toggle } = useNamespacedMutations('employee/sidebar', ['open', 'close', 'toggle']);\n\n const { isOpen } = useNamespacedState('employee/sidebar', ['isOpen']);\n\n const isClosed = computed(() => !isOpen.value);\n\n return {\n isOpen,\n isClosed,\n open,\n close,\n toggle,\n };\n};\n","import { state } from './state';\nimport * as mutations from './mutations';\n\nexport * from './hooks';\n\nexport const sidebar = {\n namespaced: true,\n state,\n mutations,\n};\n\nexport default sidebar;\n","import { axios } from '@/plugins/axios';\nimport { SUPPORT_INFORMATION } from '@/domains/employee/api/endpoints';\nimport { Support } from '@/domains/employee/models';\nimport { transformApiSupport } from '@/domains/employee/transformers';\n\nexport const useFetchSupport = () => async () => {\n const { data } = await axios.get(SUPPORT_INFORMATION);\n\n await Support.insertOrUpdate({\n data: transformApiSupport(data),\n });\n};\n\nexport default useFetchSupport;\n","import { computed } from 'vue';\nimport { Support } from '@/domains/employee/models';\n\nexport const useSupportStore = () => {\n const support = computed(() => Support.query().first());\n const hasSupport = computed(() => support.value && support.value.hasSupportOptions);\n\n return {\n support,\n hasSupport,\n };\n};\n\nexport default useSupportStore;\n","export * from './actions';\nexport * from './hooks';\n\nexport const support = {\n namespaced: true,\n};\n\nexport default support;\n","import { useMutations } from 'vuex-composition-helpers';\nimport { axios } from '@/plugins/axios';\nimport { OPEN_TASKS } from '@/domains/employee/api/endpoints';\nimport { POPULATE_OPEN_TASKS } from '@/store/constants/mutations';\n\nexport const useFetchTasks = () => {\n const { legacySetTasks } = useMutations({\n legacySetTasks: POPULATE_OPEN_TASKS,\n });\n\n return async () => {\n const { data } = await axios.get(OPEN_TASKS);\n\n legacySetTasks(data.tasks);\n };\n};\n\nexport default useFetchTasks;\n","export * from './actions';\n\nexport const taskManager = {\n namespaced: true,\n};\n\nexport default taskManager;\n","export const applicationRequestDocumentTransformer = (applicationRequestDocument) => ({\n id: applicationRequestDocument.id,\n applicationRequestId: applicationRequestDocument.application_request_id,\n customerDocumentId: applicationRequestDocument.customer_document_id,\n});\n\nexport default applicationRequestDocumentTransformer;\n","export const customerDocumentTransformer = (customerDocument) => ({\n id: customerDocument.id,\n projectId: customerDocument.project_id,\n title: customerDocument.title,\n isVisibleForCustomer: customerDocument.is_visible_for_customer,\n});\n\nexport default customerDocumentTransformer;\n","export const transformApiCompany = (apiCompany) => ({\n id: apiCompany.id,\n use_invoicing: apiCompany.use_invoicing,\n});\n","export const transformApiCompanyModule = (apiModule) => ({\n name: apiModule.feature,\n});\n\nexport default transformApiCompanyModule;\n","export const transformApiCustomerAddress = (apiCustomerAddress) => ({\n id: apiCustomerAddress?.id,\n streetName: apiCustomerAddress?.StraatNaam,\n houseNumber: apiCustomerAddress?.HuisNr,\n houseNumberAddition: apiCustomerAddress?.HuisNrToevoeging,\n zipCode: apiCustomerAddress?.Postcode,\n city: apiCustomerAddress?.PlaatsNaam,\n});\n\nexport default transformApiCustomerAddress;\n","import { transformApiCustomerAddress } from './transformApiCustomerAddress';\n\nconst GENDER_MAP = {\n 'M mannelijk': 'male',\n 'V vrouwelijk': 'female',\n default: 'other',\n};\n\nexport const transformApiCustomer = (apiCustomer) => ({\n id: apiCustomer.id,\n projectId: apiCustomer.project_id,\n firstName: apiCustomer.fname,\n middleName: apiCustomer.mname,\n lastName: apiCustomer.lname,\n initial: apiCustomer.VoorLetters,\n email: apiCustomer.email,\n phoneNumber: apiCustomer.phone_number,\n birthday: apiCustomer.gboortedatum,\n gender: GENDER_MAP[apiCustomer.Geslacht] || GENDER_MAP.default,\n address: transformApiCustomerAddress(apiCustomer?.address),\n});\n\nexport default transformApiCustomer;\n","export const transformApiEmailTemplateTranslation = (apiEmailTemplateTranslation) => ({\n id: apiEmailTemplateTranslation.id,\n languageId: apiEmailTemplateTranslation.version,\n subject: apiEmailTemplateTranslation.subject,\n message: apiEmailTemplateTranslation.bodyBefore,\n messageAfterLoginButton: apiEmailTemplateTranslation.bodyAfter,\n});\n\nexport default transformApiEmailTemplateTranslation;\n","import { transformApiEmailTemplateTranslation } from './transformApiEmailTemplateTranslation';\n\nexport const transformApiEmailTemplate = (apiEmailTemplate) => ({\n id: apiEmailTemplate.id,\n hasLoginButton: apiEmailTemplate.includeLogingButton === 1,\n translations: apiEmailTemplate.versions?.map(transformApiEmailTemplateTranslation) || [],\n});\n\nexport default transformApiEmailTemplate;\n","export const transformApiEmployee = (apiEmployee) => ({\n id: apiEmployee.id,\n companyId: apiEmployee.onderneming_id,\n firstName: apiEmployee.fname,\n middleName: apiEmployee.mname,\n lastName: apiEmployee.lname,\n hasGetMore: apiEmployee.has_getmore,\n});\n\nexport default transformApiEmployee;\n","export const transformApiGithubRelease = (apiGithubRelease) => ({\n id: apiGithubRelease.id,\n tag: apiGithubRelease.tagname,\n description: apiGithubRelease.body,\n});\n\nexport default transformApiGithubRelease;\n","export const transformApiProject = (apiProject) => ({\n id: apiProject.id,\n languageId: apiProject.languageversion,\n mortgageAdvisorId: apiProject?.adviseur?.id,\n checkDefaultValues: apiProject?.check_default_values,\n});\n\nexport default transformApiProject;\n","export const ADVICE_MEETING_PLANNED = 'ADVICE_MEETING_PLANNED';\nexport const ADVICE_MEETING_HELD = 'ADVICE_MEETING_HELD';\nexport const FINISHED = 'FINISHED';\nexport const REJECTED_BY_MONEY_PROVIDER = 'REJECTED_BY_MONEY_PROVIDER';\nexport const ENDED_BY_ADVISOR = 'ENDED_BY_ADVISOR';\nexport const BINDING_QUOTATION_SIGNED_AND_SENT_TO_BANK = 'BINDING_QUOTATION_SIGNED_AND_SENT_TO_BANK';\nexport const RECEIVED_BINDING_QUOTATION = 'RECEIVED_BINDING_QUOTATION';\nexport const FILE_COMPLETE_AT_MONEY_PROVIDER = 'FILE_COMPLETE_AT_MONEY_PROVIDER';\nexport const FIRST_AGREEMENT = 'FIRST_AGREEMENT';\nexport const FINAL_APPROVAL = 'FINAL_APPROVAL';\nexport const IN_PROGRESS = 'IN_PROGRESS';\nexport const UNDER_MANAGEMENT = 'UNDER_MANAGEMENT';\nexport const INTRODUCTORY_MEETING_HELD = 'INTRODUCTORY_MEETING_HELD';\nexport const LEAD = 'LEAD';\nexport const UNKNOWN = 'UNKNOWN';\nexport const INTEREST_OFFER_REQUESTED = 'INTEREST_OFFER_REQUESTED';\nexport const INTEREST_OFFER_RECEIVED_AND_SENT_TO_CUSTOMER = 'INTEREST_OFFER_RECEIVED_AND_SENT_TO_CUSTOMER';\nexport const EXPIRED = 'EXPIRED';\nexport const REFERRAL = 'REFERRAL';\n","import * as projectStatuses from '@/domains/employee/constants/projectStatus';\n\nexport const DUTCH_NAME_TO_KEY_MAP = {\n lead: projectStatuses.LEAD,\n 'kennismakingsgesprek gevoerd': projectStatuses.INTRODUCTORY_MEETING_HELD,\n 'adviesgesprek gepland': projectStatuses.ADVICE_MEETING_PLANNED,\n 'adviesgesprek gevoerd': projectStatuses.ADVICE_MEETING_HELD,\n 'renteaanbod aangevraagd': projectStatuses.INTEREST_OFFER_REQUESTED,\n 'renteaanbod ontvangen en naar klant verstuurd': projectStatuses.INTEREST_OFFER_RECEIVED_AND_SENT_TO_CUSTOMER,\n 'dossier compleet bij geldverstrekker': projectStatuses.FILE_COMPLETE_AT_MONEY_PROVIDER,\n 'bindende offerte ontvangen': projectStatuses.RECEIVED_BINDING_QUOTATION,\n 'bindende offerte getekend en naar bank verstuurd': projectStatuses.BINDING_QUOTATION_SIGNED_AND_SENT_TO_BANK,\n 'eerste akkoord': projectStatuses.FIRST_AGREEMENT,\n 'finaal akkoord': projectStatuses.FINAL_APPROVAL,\n 'afgewezen door geldverstrekker': projectStatuses.REJECTED_BY_MONEY_PROVIDER,\n 'be\\u00ebindigd door adviseur': projectStatuses.ENDED_BY_ADVISOR,\n vervallen: projectStatuses.EXPIRED,\n 'in behandeling': projectStatuses.IN_PROGRESS,\n 'in beheer': projectStatuses.UNDER_MANAGEMENT,\n afgelopen: projectStatuses.FINISHED,\n onbekend: projectStatuses.UNKNOWN,\n referral: projectStatuses.REFERRAL,\n};\n\nexport const transformApiProjectStatus = (apiProjectStatus) => ({\n id: apiProjectStatus.id,\n key: DUTCH_NAME_TO_KEY_MAP[apiProjectStatus.name],\n});\n\nexport default transformApiProjectStatus;\n","import moment from 'moment';\n\nexport const transformApiProjectStatusHistory = (apiHistory) => ({\n statusId: apiHistory.id,\n createdAt: moment(apiHistory.pivot.created_at).toISOString(),\n updatedAt: moment(apiHistory.pivot.updated_at).toISOString(),\n});\n\nexport default transformApiProjectStatusHistory;\n","import * as roles from '@/domains/employee/constants/roles';\n\nexport const DUTCH_ROLE_TO_KEY_MAP = {\n klant: roles.CUSTOMER,\n masteradmin: roles.MASTER_ADMIN,\n admin: roles.ADMIN,\n superAdmin: roles.SUPER_ADMIN,\n adviseur: roles.EMPLOYEE,\n klantcoach: roles.CUSTOMER_COACH,\n manager: roles.MANAGER,\n hr: roles.HUMAN_RESOURCES,\n hypotheekadviseur: roles.MORTGAGE_ADVISOR,\n senior: roles.SENIOR,\n backoffice: roles.BACK_OFFICE,\n supportagent: roles.SUPPORT_AGENT,\n};\n\nexport const transformApiRole = (apiRole) => ({\n id: apiRole.id,\n name: DUTCH_ROLE_TO_KEY_MAP[apiRole.name],\n});\n\nexport default transformApiRole;\n","export const transformApiSupport = (apiSupport) => ({\n email: apiSupport.supportMail,\n phone: apiSupport.supportPhone,\n});\n\nexport default transformApiSupport;\n","export const noteTransformer = (note) => ({\n id: note.id,\n title: note.title,\n content: note.content,\n projectId: note.project_id,\n userDocumentId: note.userDocumentId,\n});\n\nexport default noteTransformer;\n","/**\n * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2022 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n totalWeight += obj.weight;\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '6.6.2';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","import Fuse from 'fuse.js';\n\nconst defaultOptions = {\n distance: 100,\n location: 0,\n maxPatternLength: 32,\n minMatchCharLength: 1,\n searchPrimaryKey: false,\n shouldSort: false,\n threshold: 0.3,\n tokenize: false,\n verbose: false,\n};\n\nexport const fuzzySearch = (query, items, options = {}) => {\n const searcher = new Fuse(items, {\n ...defaultOptions,\n ...options,\n });\n\n return searcher.search(query).map((item) => item.item);\n};\n\nexport default fuzzySearch;\n","export const omit = (object, keys) =>\n Object.entries(object).reduce(\n (carry, [key, value]) => (!keys.includes(key) ? { ...carry, [key]: value } : carry),\n {}\n );\n\nexport default omit;\n","export const reduceParamsToApiUrl = (path, params) => {\n if (!params) {\n return '/api/v1' + path;\n }\n\n return Object.entries(params).reduce(\n (newPath, [key, value]) => newPath.replace(`:${key}`, value),\n '/api/v1' + path\n );\n};\n","export const unique = (items) => [...new Set(items)];\n\nexport default unique;\n","export const pauseEvent = (event) => {\n if (event.stopPropagation) event.stopPropagation();\n if (event.preventDefault) event.preventDefault();\n\n event.cancelBubble = true;\n event.returnValue = false;\n\n return false;\n};\n\nexport default pauseEvent;\n","export const reduceParamsToUrl = (path, params) =>\n Object.entries(params).reduce((newPath, [key, value]) => newPath.replace(`:${key}`, value), path);\n\nexport default reduceParamsToUrl;\n","export const wait = ({ data = {}, duration = 1000, isRejected = false } = {}) =>\n new Promise((resolve, reject) => setTimeout(() => (isRejected ? reject(data) : resolve(data)), duration));\n\nexport default wait;\n","import emitter from 'tiny-emitter/instance';\n\nexport const eventBus = emitter;\n\nexport default eventBus;\n","export function debounce(fn, delay) {\n let timeoutID = null;\n\n return function () {\n clearTimeout(timeoutID);\n const args = arguments;\n const that = this;\n\n timeoutID = setTimeout(function () {\n fn.apply(that, args);\n }, delay);\n };\n}\n\nexport default debounce;\n","export const ucFirst = (value) =>\n typeof value !== 'string' ? '' : `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n\nexport default ucFirst;\n","import { i18n } from '@/i18n';\n\nexport const namespacedI18n = (namespace) => {\n const t = (key, ...rest) => i18n.global.t(`${namespace}.${key}`, ...rest);\n const tc = (key, ...rest) => i18n.global.tc(`${namespace}.${key}`, ...rest);\n\n return {\n ...i18n,\n t,\n tc,\n };\n};\n\nexport default namespacedI18n;\n","import { useI18n } from 'vue-i18n';\n\nexport const useNamespacedI18n = (namespaces) => {\n const i18n = useI18n();\n\n const t =\n (namespace) =>\n (key, ...rest) =>\n i18n.t(`${namespace}.${key}`, ...rest);\n\n const tc =\n (namespace) =>\n (key, ...rest) =>\n i18n.t(`${namespace}.${key}`, ...rest);\n\n // As of VueI18n v9.2.0 `t` translation only return string. So we weed something else to return array and object\n // https://vue-i18n.intlify.dev/guide/migration/breaking.html#translation-api-return-value\n const tm =\n (namespace) =>\n (key, ...rest) =>\n i18n.tm(`${namespace}.${key}`, ...rest);\n\n const namespacedI18n = (namespace) => ({ ...i18n, t: t(namespace), tc: tc(namespace), tm: tm(namespace) });\n\n return Array.isArray(namespaces) ? namespaces.map(namespacedI18n) : namespacedI18n(namespaces);\n};\n\nexport default useNamespacedI18n;\n","import en from './en.json';\nimport nl from './nl.json';\n\nexport const dateTimeFormats = {\n en,\n nl,\n};\n\nexport default dateTimeFormats;\n","/* eslint-disable camelcase */\nimport application_request_navigation_for_project from './application_request_navigation_for_project.json';\nimport filter_application_request_documents from './filter_application_request_documents.json';\nimport show_activity_list_for_project from './show_activity_list_for_project.json';\nimport show_current_status_for_application_request_card from './show_current_status_for_application_request_card.json';\nimport show_customer_document_status_for_project from './show_customer_document_status_for_project.json';\nimport show_status_for_application_request from './show_status_for_application_request.json';\nimport office_card from './office_card';\nimport employee_card from './employee_card';\n\nexport {\n application_request_navigation_for_project,\n filter_application_request_documents,\n show_activity_list_for_project,\n show_current_status_for_application_request_card,\n show_customer_document_status_for_project,\n show_status_for_application_request,\n office_card,\n employee_card,\n};\n\nexport default {\n application_request_navigation_for_project,\n filter_application_request_documents,\n show_activity_list_for_project,\n show_current_status_for_application_request_card,\n show_customer_document_status_for_project,\n show_status_for_application_request,\n office_card,\n employee_card,\n};\n","/* eslint-disable camelcase */\nimport application_request_document_status from './application_request_document_status.json';\nimport application_request_status from './application_request_status.json';\nimport customer_document_status from './customer_document_status.json';\nimport hdn_statuses from './hdn_statuses.json';\nimport repayment_types from './repayment_types.json';\n\nexport {\n application_request_document_status,\n application_request_status,\n customer_document_status,\n hdn_statuses,\n repayment_types,\n};\n\nexport default {\n application_request_document_status,\n application_request_status,\n customer_document_status,\n hdn_statuses,\n repayment_types,\n};\n","import employee from './employee.json';\n\nexport { employee };\n\nexport default { employee };\n","/* eslint-disable camelcase */\nexport const delete_project = {\n title: 'Delete project',\n body: `\n

    \n Are you absolutely sure you want to delete the project?\n

    \n

    \n All underlying advices, attached documents and requests will be deleted as well. When underlying customers\n are not attached to another project, they will be deleted as well.\n

    \n

    \n Warning! Deleting a project is irreversible\n

    \n `,\n buttons: {\n delete: 'Delete',\n cancel: 'Cancel',\n },\n form: {\n confirm: 'I am sure, remove the project',\n },\n};\n\nexport default delete_project;\n","/* eslint-disable camelcase */\nexport const new_invoice_for_project = {\n title: 'New invoice',\n buttons: {\n change: 'Change',\n close: 'Close',\n check: 'Generate and check',\n send: 'Publish and send',\n },\n invoice: {\n price: 'Price',\n service: 'Service',\n total_costs: 'Total € {totalCosts}',\n line: {\n summary: '{amount} {description} (€ {price})',\n total_costs: '€ {totalCosts}'\n }\n },\n invoice_line: {\n amount: 'Amount',\n description: 'Description',\n price: 'Price',\n vat: 'Vat',\n },\n notary: {\n payment: 'Payment via notary?',\n email: 'E-mail address notary',\n },\n advisor : 'Assign invoice to advisor',\n mollie: {\n enable_account: 'Want to enable payment with iDeal? Connect to your mollie account',\n payment: 'Pay with iDeal',\n },\n standard_rates: {\n add: 'You need to add a new standard rate? check ....',\n },\n success_message: `\n The invoice has been generated and sent successfully. You can find the sent email(s) under \"sent items\" and the\n invoice in outgoing emails. The email attachments are not visible from Hypact Advisor. However, the attachement has\n been sent. You can now close this window.\n `,\n error_messages: {\n notary: {\n email_required: 'When the payment is being made by a notary, the notary email address is required.',\n email_invalid: 'The entered notary email address is invalid.',\n },\n },\n};\n\nexport default new_invoice_for_project;\n","/* eslint-disable camelcase */\nexport const send_document_feedback_email_for_project = {\n document: 'document | documents',\n must: 'must | must',\n subject: 'Feedback provided documents',\n message_start: \"I've processed the provided documents.\",\n message_end:\n \"You can view these documents in the customer environment. To protect your privacy, these documents aren't sent via mail.\",\n message_rejected_documents: \"I've rejected {amount} {document}.\",\n message_open_documents_after_rejected: 'There are also {amount} {document} that {must} be provided.',\n message_open_documents: 'You {must} provide {amount} {document}.',\n};\n\nexport default send_document_feedback_email_for_project;\n","/* eslint-disable camelcase */\nexport const show_email = {\n title: 'E-mail',\n buttons: {\n cancel: 'Cancel',\n read: 'Read',\n },\n mail: {\n from: 'From',\n to: 'To',\n cc: 'CC',\n },\n project: {\n search_placeholder: 'Search project',\n },\n new_email: {\n reply_subject: 'RE: {subject}',\n forward_subject: 'FWD: {subject}',\n body_with_headers: `\n
    \n
    \n
    \n
    \n
    \n From: {from}\n
    \n Send at: {date}\n
    \n To: {to}\n
    \n Subject: {subject}\n
    \n
    \n
    \n
    \n {body}\n
    \n `,\n },\n customer: {\n single_line: '{pronoun} {fullName} ({birthday} {age}yrs)',\n male_pronoun: 'mr.',\n female_pronoun: 'mrs.',\n other_pronoun: '',\n },\n};\n\nexport default show_email;\n","/* eslint-disable camelcase */\nexport const show_support = {\n title: 'Support',\n sections: {\n phone: {\n title: 'Phone',\n description: `\n In case you need direct support from Hypact Advisor, please call {formattedPhone} for direct\n support between 09:00 and 17:00\n `,\n },\n email: {\n title: 'Email',\n description: `\n For common questions and suggestions for new functionalities, please contact us at\n {email}\n `,\n },\n },\n};\n\nexport default show_support;\n","/* eslint-disable camelcase */\nexport const upload_file_for_customer_document = {\n title: 'Upload file',\n buttons: {\n cancel: 'Cancel',\n save: 'Save',\n open: 'Open',\n },\n upload_placeholder: 'Drag files or click here to upload',\n drop_placeholder: 'Drop files here...',\n files: {\n selected: 'Selected files:',\n },\n error_messages: {\n files: {\n no_selected: 'You must select a file',\n too_large: `\n The maximum file size is 35MB. The file you're trying to upload is {file_size}. Please compress\n the file first. You can use the website\n www.ilovepdf.com. Our apologies for the inconvenience.\n `,\n wrong_type: 'The selected file is not allowed',\n },\n },\n};\n\nexport default upload_file_for_customer_document;\n","/* eslint-disable camelcase */\n\nimport add_task_for_project from './add_task_for_project.json';\nimport adjust_settings_for_project from './adjust_settings_for_project.json';\nimport attach_application_request_document_for_project from './attach_application_request_document_for_project.json';\nimport client_documents from './client_documents.json';\nimport compose_new_email from './compose_new_email.json';\nimport delete_project from './delete_project';\nimport generate_documents_for_project from './generate_documents_for_project.json';\nimport invite_customer_for_project from './invite_customer_for_project.json';\nimport manage_notes_for_project from './manage_notes_for_project.json';\nimport manage_task from './manage_task.json';\nimport new_invoice_for_project from './new_invoice_for_project';\nimport release_information from './release_information.json';\nimport send_document_feedback_email_for_project from './send_document_feedback_email_for_project';\nimport show_email from './show_email';\nimport show_hdn_message from './show_hdn_message.json';\nimport show_service_provider_status_history_for_application_request_document from './show_service_provider_status_history_for_application_request_document.json';\nimport show_status_history_for_application_request from './show_status_history_for_application_request.json';\nimport show_status_history_for_application_request_document from './show_status_history_for_application_request_document';\nimport show_support from './show_support';\nimport update_customer_document from './update_customer_document.json';\nimport upload_file_for_customer_document from './upload_file_for_customer_document';\nimport compose_new_email_of_outgoing_document_for_project from './compose_new_email_of_outgoing_document_for_project';\nimport add_document_to_archive from './add_document_to_archive.json';\nimport filter_modal_for_project from './filter_modal_for_project.json';\nimport max_mortgage_summary_table from './max_mortgage_summary_table.json';\nimport invoices_for_company from './invoices_for_company.json';\n\nexport {\n add_task_for_project,\n adjust_settings_for_project,\n attach_application_request_document_for_project,\n client_documents,\n compose_new_email,\n delete_project,\n generate_documents_for_project,\n invite_customer_for_project,\n manage_notes_for_project,\n manage_task,\n new_invoice_for_project,\n release_information,\n send_document_feedback_email_for_project,\n show_email,\n show_hdn_message,\n show_service_provider_status_history_for_application_request_document,\n show_status_history_for_application_request,\n show_status_history_for_application_request_document,\n show_support,\n update_customer_document,\n upload_file_for_customer_document,\n compose_new_email_of_outgoing_document_for_project,\n add_document_to_archive,\n filter_modal_for_project,\n max_mortgage_summary_table,\n invoices_for_company\n};\n\nexport default {\n add_task_for_project,\n adjust_settings_for_project,\n attach_application_request_document_for_project,\n client_documents,\n compose_new_email,\n delete_project,\n generate_documents_for_project,\n invite_customer_for_project,\n manage_notes_for_project,\n manage_task,\n new_invoice_for_project,\n release_information,\n send_document_feedback_email_for_project,\n show_email,\n show_hdn_message,\n show_service_provider_status_history_for_application_request_document,\n show_status_history_for_application_request,\n show_status_history_for_application_request_document,\n support: show_support,\n update_customer_document,\n upload_file_for_customer_document,\n compose_new_email_of_outgoing_document_for_project,\n add_document_to_archive,\n filter_modal_for_project,\n max_mortgage_summary_table,\n invoices_for_company\n};\n","/* eslint-disable camelcase */\nexport const email_message = {\n body_with_headers: `\n
    \n
    \n
    \n
    \n
    \n From: {from}\n
    \n Send at: {date}\n
    \n To: {to}\n
    \n Subject: {subject}\n
    \n
    \n
    \n
    \n {body}\n
    \n `,\n};\n\nexport default email_message;\n","/* eslint-disable camelcase */\nimport application_request_document_status from './application_request_document_status.json';\nimport application_request_status from './application_request_status.json';\nimport customer from './customer.json';\nimport customer_document_status from './customer_document_status.json';\nimport email_message from './email_message';\nimport project_status from './project_status.json';\n\nexport {\n application_request_document_status,\n application_request_status,\n customer,\n customer_document_status,\n email_message,\n project_status,\n};\n\nexport default {\n application_request_document_status,\n application_request_status,\n customer,\n customer_document_status,\n email_message,\n project_status,\n};\n","/* eslint-disable camelcase */\nimport result_list_with_default_values from './result_list_with_default_values.json';\nimport toast from './toast.json';\n\nexport { result_list_with_default_values, toast };\n\nexport default {\n result_list_with_default_values,\n toast,\n};\n","/* eslint-disable camelcase */\nimport action_bar_for_advice_environment from './action_bar_for_advice_environment.json';\nimport action_bar_for_project from './action_bar_for_project.json';\nimport advice_navigation_for_project from './advice_navigation_for_project.json';\nimport advice_risks_information_display from './advice_risks_information_display.json';\nimport advice_risks_tabs_navigation from './advice_risks_tabs_navigation.json';\nimport select_hdn_status from './select_hdn_status.json';\nimport select_insurance_goal from './select_insurance_goal.json';\nimport select_money_provider from './select_money_provider.json';\nimport select_project_status from './select_project_status.json';\nimport select_source_resources from './select_source_resources.json';\nimport select_statuses from './select_statuses.json';\n\nexport {\n action_bar_for_advice_environment,\n action_bar_for_project,\n advice_navigation_for_project,\n advice_risks_information_display,\n advice_risks_tabs_navigation,\n select_hdn_status,\n select_insurance_goal,\n select_money_provider,\n select_project_status,\n select_source_resources,\n select_statuses,\n};\n\nexport default {\n action_bar_for_advice_environment,\n action_bar_for_project,\n advice_navigation_for_project,\n advice_risks_information_display,\n advice_risks_tabs_navigation,\n select_hdn_status,\n select_insurance_goal,\n select_money_provider,\n select_project_status,\n select_source_resources,\n select_statuses,\n};\n","/* eslint-disable camelcase */\n\nimport customer_documents_for_project from './customer_documents_for_project.json';\nimport home_klantmap from './home_klantmap';\nimport settings_employee from './settings_employee.json';\nimport show_advice_customer_profile from './show_advice_customer_profile.json';\nimport show_advice_risks_for_project from './show_advice_risks_for_project.json';\nimport show_collateral_for_project from './show_collateral_for_project.json';\nimport show_customer_details_for_project from './show_customer_details_for_project.json';\nimport show_insurance_application_request_for_project from './show_insurance_application_request_for_project.json';\nimport show_live_settings_for_project from './show_live_settings_for_project.json';\nimport show_mortgage_application_request_for_project from './show_mortgage_application_request_for_project.json';\nimport show_outgoing_documents_for_project from './show_outgoing_documents_for_project.json';\nimport show_overview_for_offices from './show_overview_for_offices.json';\nimport show_overview_of_employees_for_office from './show_overview_of_employees_for_office';\nimport show_project_overview from './show_project_overview.json';\nimport show_settings_to_add_employee_for_office from './show_settings_to_add_employee_for_office';\nimport rapport from './rapport.json';\nimport invoices_for_company from './invoices_for_company.json';\nimport ticket_system from './ticket_system.json';\n\nexport {\n customer_documents_for_project,\n home_klantmap,\n settings_employee,\n show_advice_customer_profile,\n show_advice_risks_for_project,\n show_collateral_for_project,\n show_customer_details_for_project,\n show_insurance_application_request_for_project,\n show_live_settings_for_project,\n show_mortgage_application_request_for_project,\n show_outgoing_documents_for_project,\n show_overview_for_offices,\n show_overview_of_employees_for_office,\n show_settings_to_add_employee_for_office,\n rapport,\n show_project_overview,\n invoices_for_company,\n ticket_system\n};\n\nexport default {\n customer_documents_for_project,\n home_klantmap,\n settings_employee,\n show_advice_customer_profile,\n show_advice_risks_for_project,\n show_collateral_for_project,\n show_customer_details_for_project,\n show_insurance_application_request_for_project,\n show_live_settings_for_project,\n show_mortgage_application_request_for_project,\n show_outgoing_documents_for_project,\n show_overview_for_offices,\n show_overview_of_employees_for_office,\n show_settings_to_add_employee_for_office,\n rapport,\n show_project_overview,\n invoices_for_company,\n ticket_system\n};\n","/* eslint-disable camelcase */\nimport client_documents from './client_documents.json';\n\nexport { client_documents };\n\nexport default { client_documents };\n","/* eslint-disable camelcase */\nimport application_request_navigation_for_project from './application_request_navigation_for_project.json';\nimport filter_application_request_documents from './filter_application_request_documents.json';\nimport show_activity_list_for_project from './show_activity_list_for_project.json';\nimport show_current_status_for_application_request_card from './show_current_status_for_application_request_card.json';\nimport show_customer_document_status_for_project from './show_customer_document_status_for_project.json';\nimport show_status_for_application_request from './show_status_for_application_request.json';\nimport office_card from './office_card';\nimport employee_card from './employee_card';\n\nexport {\n application_request_navigation_for_project,\n filter_application_request_documents,\n show_activity_list_for_project,\n show_current_status_for_application_request_card,\n show_customer_document_status_for_project,\n show_status_for_application_request,\n office_card,\n employee_card,\n};\n\nexport default {\n application_request_navigation_for_project,\n filter_application_request_documents,\n show_activity_list_for_project,\n show_current_status_for_application_request_card,\n show_customer_document_status_for_project,\n show_status_for_application_request,\n office_card,\n employee_card,\n};\n","/* eslint-disable camelcase */\nimport application_request_document_status from './application_request_document_status.json';\nimport application_request_status from './application_request_status.json';\nimport customer_document_status from './customer_document_status.json';\nimport hdn_statuses from './hdn_statuses.json';\nimport repayment_types from './repayment_types.json';\n\nexport {\n application_request_document_status,\n application_request_status,\n customer_document_status,\n hdn_statuses,\n repayment_types,\n};\n\nexport default {\n application_request_document_status,\n application_request_status,\n customer_document_status,\n hdn_statuses,\n repayment_types,\n};\n","import employee from './employee.json';\n\nexport { employee };\n\nexport default { employee };\n","/* eslint-disable camelcase */\nexport const delete_project = {\n title: 'Verwijder project',\n body: `\n

    \n Ben je absoluut zeker dat je het project wilt verwijderen?\n

    \n

    \n Alle onderliggende adviezen, gekoppelde documenten en aanvragen worden verwijderd. Wanneer onderliggende\n klanten niet aan een ander project gekoppeld zijn worden deze ook verwijderd.\n

    \n

    \n Let op! Dit is onomkeerbaar.\n

    \n `,\n buttons: {\n delete: 'Verwijder',\n cancel: 'Annuleer',\n },\n form: {\n confirm: 'Ik weet het zeker, verwijder het project.',\n },\n};\n\nexport default delete_project;\n","/* eslint-disable camelcase */\nexport const new_invoice_for_project = {\n title: 'Nieuwe factuur',\n buttons: {\n change: 'Pas aan',\n close: 'Sluiten',\n check: 'Genereer en controleer',\n send: 'Publiceer en verstuur',\n },\n invoice: {\n price: 'Prijs',\n service: 'Dienst',\n total_costs: 'Totaal € {totalCosts}',\n line: {\n summary: '{amount} {description} (€ {price})',\n total_costs: '€ {totalCosts}'\n }\n },\n invoice_line: {\n amount: 'Aantal',\n description: 'Omschrijving',\n price: 'Tarief',\n vat: 'Btw',\n },\n notary: {\n payment: 'Betaling via notaris?',\n email: 'E-mailadres notaris',\n },\n advisor : 'Koppel factuur aan adviseur',\n mollie: {\n enable_account: 'Wil je gebruik maken van betaling middels iDeal? ' +\n 'Onder instellingen -> Vestigingen kun je nu koppelen met je Mollie account.',\n payment: 'iDeal link opnemen',\n },\n standard_rates: {\n add: 'Wil je een nieuwe dienst toevoegen of een tarief aanpassen? Dat kan ' +\n 'onder instellingen -> Tarieven facturatie',\n },\n success_message: `\n De factuur is succesvol gegenereerd en verstuurd. Je vindt de e-mail(s) onder verzonder items en de factuur in\n het uitgaande postvak. Bijlagen zijn binnen Hypact Advisor niet zichtbaar in de e-mail. De bijlage is wel toegevoegd. Je\n kunt dit venster sluiten.\n `,\n error_messages: {\n notary: {\n email_required:\n 'Wanneer de betaling via de notaris dient te lopen is het e-mailadres van de notaris verplicht.',\n email_invalid: 'Het ingevoerde e-mailadres van de notaris is niet geldig.',\n },\n advisor: {\n advisor_required: 'Dit veld is verplicht'\n }\n },\n};\n\nexport default new_invoice_for_project;\n","/* eslint-disable camelcase */\nexport const send_document_feedback_email_for_project = {\n document: 'document | documenten',\n must: 'moet | moeten',\n subject: 'Feedback aangeleverde documenten',\n message_start: 'Ik heb de aangeleverde documenten verwerkt.',\n message_end:\n 'In de klantomgeving kun je zien om welke documenten het gaat. Om je privacy te kunnen borgen, communiceren we niet inhoudelijk over documenten per mail.',\n message_rejected_documents: 'Hierbij heb ik {amount} {document} afgekeurd.',\n message_open_documents_after_rejected: `Daarnaast {must} er nog {amount} {document} worden aangeleverd.`,\n message_open_documents: 'Er {must} nog {amount} {document} worden aangeleverd.',\n};\n\nexport default send_document_feedback_email_for_project;\n","/* eslint-disable camelcase */\nexport const show_email = {\n title: 'E-mail',\n buttons: {\n cancel: 'Annuleer',\n read: 'Gelezen',\n },\n mail: {\n from: 'Van',\n to: 'Aan',\n cc: 'CC',\n },\n project: {\n search_placeholder: 'Projecten doorzoeken',\n },\n new_email: {\n reply_subject: 'RE: {subject}',\n forward_subject: 'FWD: {subject}',\n body_with_headers: `\n
    \n
    \n
    \n
    \n
    \n Van: {from}\n
    \n Verzonden: {date}\n
    \n Aan: {to}\n
    \n Onderwerp: {subject}\n
    \n
    \n
    \n
    \n {body}\n
    \n `,\n },\n customer: {\n single_line: '{pronoun} {fullName} ({birthday} {age}jr)',\n male_pronoun: 'dhr.',\n female_pronoun: 'mevr.',\n other_pronoun: '',\n },\n};\n\nexport default show_email;\n","/* eslint-disable camelcase */\nexport const show_support = {\n title: 'Support',\n sections: {\n phone: {\n title: 'Telefoon',\n description: `\n Heb je behoefte aan directe ondersteuning bij het werken met Hypact Advisor bel dan\n {formattedPhone} tussen 09:00 en 17:00\n `,\n },\n email: {\n title: 'Mail',\n description: `\n Voor algemene vragen en suggesties voor nieuwe functionaliteiten kun je een mail sturen naar\n {email}\n `,\n },\n },\n};\n\nexport default show_support;\n","/* eslint-disable camelcase */\nexport const upload_file_for_customer_document = {\n title: 'Bestand uploaden',\n buttons: {\n cancel: 'Annuleren',\n save: 'Opslaan',\n open: 'Open',\n },\n upload_placeholder: 'Verplaats je bestanden hier of klik hier om bestanden te uploaden',\n drop_placeholder: 'Sleep bestand naar hier...',\n files: {\n selected: 'Geselecteerd bestanden:',\n },\n error_messages: {\n files: {\n no_selected: 'Je moet een bestand selecteren.',\n too_large: `\n De maximale bestandsgrote is 35MB. Het bestand dat je probeert te uploaden is {file_size}. Verklein\n (comprimeer) het bestand daarom eerst. Dat kan bijvoorbeeld op de website\n www.ilovepdf.com. Onze excuses voor het ongemak.\n `,\n wrong_type: 'Het geselecteerde bestand is niet toegestaan',\n },\n },\n};\n\nexport default upload_file_for_customer_document;\n","/* eslint-disable camelcase */\n\nimport add_task_for_project from './add_task_for_project.json';\nimport adjust_settings_for_project from './adjust_settings_for_project.json';\nimport attach_application_request_document_for_project from './attach_application_request_document_for_project.json';\nimport client_documents from './client_documents.json';\nimport compose_new_email from './compose_new_email.json';\nimport delete_project from './delete_project';\nimport generate_documents_for_project from './generate_documents_for_project.json';\nimport invite_customer_for_project from './invite_customer_for_project.json';\nimport manage_notes_for_project from './manage_notes_for_project.json';\nimport manage_task from './manage_task.json';\nimport new_invoice_for_project from './new_invoice_for_project';\nimport release_information from './release_information.json';\nimport send_document_feedback_email_for_project from './send_document_feedback_email_for_project';\nimport show_email from './show_email';\nimport show_hdn_message from './show_hdn_message.json';\nimport show_service_provider_status_history_for_application_request_document from './show_service_provider_status_history_for_application_request_document.json';\nimport show_status_history_for_application_request from './show_status_history_for_application_request.json';\nimport show_status_history_for_application_request_document from './show_status_history_for_application_request_document';\nimport show_support from './show_support';\nimport update_customer_document from './update_customer_document.json';\nimport upload_file_for_customer_document from './upload_file_for_customer_document';\nimport compose_new_email_of_outgoing_document_for_project from './compose_new_email_of_outgoing_document_for_project';\nimport add_document_to_archive from './add_document_to_archive.json';\nimport filter_modal_for_project from './filter_modal_for_project.json';\nimport max_mortgage_summary_table from './max_mortgage_summary_table.json';\nimport invoices_for_company from './invoices_for_company.json';\n\nexport {\n add_task_for_project,\n adjust_settings_for_project,\n attach_application_request_document_for_project,\n client_documents,\n compose_new_email,\n delete_project,\n generate_documents_for_project,\n invite_customer_for_project,\n manage_notes_for_project,\n manage_task,\n new_invoice_for_project,\n release_information,\n send_document_feedback_email_for_project,\n show_email,\n show_hdn_message,\n show_service_provider_status_history_for_application_request_document,\n show_status_history_for_application_request,\n show_status_history_for_application_request_document,\n show_support,\n update_customer_document,\n upload_file_for_customer_document,\n compose_new_email_of_outgoing_document_for_project,\n add_document_to_archive,\n filter_modal_for_project,\n max_mortgage_summary_table,\n invoices_for_company\n};\n\nexport default {\n add_task_for_project,\n adjust_settings_for_project,\n attach_application_request_document_for_project,\n client_documents,\n compose_new_email,\n delete_project,\n generate_documents_for_project,\n invite_customer_for_project,\n manage_notes_for_project,\n manage_task,\n new_invoice_for_project,\n release_information,\n send_document_feedback_email_for_project,\n show_email,\n show_hdn_message,\n show_service_provider_status_history_for_application_request_document,\n show_status_history_for_application_request,\n show_status_history_for_application_request_document,\n support: show_support,\n update_customer_document,\n upload_file_for_customer_document,\n compose_new_email_of_outgoing_document_for_project,\n add_document_to_archive,\n filter_modal_for_project,\n max_mortgage_summary_table,\n invoices_for_company\n};\n","/* eslint-disable camelcase */\nexport const email_message = {\n body_with_headers: `\n
    \n
    \n
    \n
    \n
    \n Van: {from}\n
    \n Verzonden: {date}\n
    \n Aan: {to}\n
    \n Onderwerp: {subject}\n
    \n
    \n
    \n
    \n {body}\n
    \n `,\n};\n\nexport default email_message;\n","/* eslint-disable camelcase */\nimport application_request_document_status from './application_request_document_status.json';\nimport application_request_status from './application_request_status.json';\nimport customer from './customer.json';\nimport customer_document_status from './customer_document_status.json';\nimport email_message from './email_message';\nimport project_status from './project_status.json';\n\nexport {\n application_request_document_status,\n application_request_status,\n customer,\n customer_document_status,\n email_message,\n project_status,\n};\n\nexport default {\n application_request_document_status,\n application_request_status,\n customer,\n customer_document_status,\n email_message,\n project_status,\n};\n","/* eslint-disable camelcase */\nimport result_list_with_default_values from './result_list_with_default_values.json';\nimport toast from './toast.json';\n\nexport { result_list_with_default_values, toast };\n\nexport default {\n result_list_with_default_values,\n toast,\n};\n","/* eslint-disable camelcase */\nimport action_bar_for_advice_environment from './action_bar_for_advice_environment.json';\nimport action_bar_for_project from './action_bar_for_project.json';\nimport advice_navigation_for_project from './advice_navigation_for_project.json';\nimport advice_risks_information_display from './advice_risks_information_display.json';\nimport advice_risks_tabs_navigation from './advice_risks_tabs_navigation.json';\nimport select_hdn_status from './select_hdn_status.json';\nimport select_insurance_goal from './select_insurance_goal.json';\nimport select_money_provider from './select_money_provider.json';\nimport select_project_status from './select_project_status.json';\nimport select_source_resources from './select_source_resources.json';\nimport select_statuses from './select_statuses.json';\n\nexport {\n action_bar_for_advice_environment,\n action_bar_for_project,\n advice_navigation_for_project,\n advice_risks_information_display,\n advice_risks_tabs_navigation,\n select_hdn_status,\n select_insurance_goal,\n select_money_provider,\n select_project_status,\n select_source_resources,\n select_statuses,\n};\n\nexport default {\n action_bar_for_advice_environment,\n action_bar_for_project,\n advice_navigation_for_project,\n advice_risks_information_display,\n advice_risks_tabs_navigation,\n select_hdn_status,\n select_insurance_goal,\n select_money_provider,\n select_project_status,\n select_source_resources,\n select_statuses,\n};\n","/* eslint-disable camelcase */\n\nimport customer_documents_for_project from './customer_documents_for_project.json';\nimport home_klantmap from './home_klantmap';\nimport settings_employee from './settings_employee.json';\nimport show_advice_customer_profile from './show_advice_customer_profile.json';\nimport show_advice_risks_for_project from './show_advice_risks_for_project.json';\nimport show_collateral_for_project from './show_collateral_for_project.json';\nimport show_customer_details_for_project from './show_customer_details_for_project.json';\nimport show_insurance_application_request_for_project from './show_insurance_application_request_for_project.json';\nimport show_live_settings_for_project from './show_live_settings_for_project.json';\nimport show_mortgage_application_request_for_project from './show_mortgage_application_request_for_project.json';\nimport show_outgoing_documents_for_project from './show_outgoing_documents_for_project.json';\nimport show_overview_for_offices from './show_overview_for_offices.json';\nimport show_overview_of_employees_for_office from './show_overview_of_employees_for_office';\nimport show_project_overview from './show_project_overview.json';\nimport show_settings_to_add_employee_for_office from './show_settings_to_add_employee_for_office';\nimport rapport from './rapport.json';\nimport invoices_for_company from './invoices_for_company.json';\nimport ticket_system from './ticket_system.json';\n\nexport {\n customer_documents_for_project,\n home_klantmap,\n settings_employee,\n show_advice_customer_profile,\n show_advice_risks_for_project,\n show_collateral_for_project,\n show_customer_details_for_project,\n show_insurance_application_request_for_project,\n show_live_settings_for_project,\n show_mortgage_application_request_for_project,\n show_outgoing_documents_for_project,\n show_overview_for_offices,\n show_overview_of_employees_for_office,\n show_project_overview,\n show_settings_to_add_employee_for_office,\n rapport,\n invoices_for_company,\n ticket_system\n};\n\nexport default {\n customer_documents_for_project,\n home_klantmap,\n settings_employee,\n show_advice_customer_profile,\n show_advice_risks_for_project,\n show_collateral_for_project,\n show_customer_details_for_project,\n show_insurance_application_request_for_project,\n show_live_settings_for_project,\n show_mortgage_application_request_for_project,\n show_outgoing_documents_for_project,\n show_overview_for_offices,\n show_overview_of_employees_for_office,\n show_project_overview,\n show_settings_to_add_employee_for_office,\n rapport,\n invoices_for_company,\n ticket_system\n};\n","/* eslint-disable camelcase */\nimport client_documents from './client_documents.json';\n\nexport { client_documents };\n\nexport default { client_documents };\n","import * as en from './en';\nimport * as nl from './nl';\n\nexport const i18n = {\n en,\n nl,\n};\n\nexport default i18n;\n","import { createI18n } from 'vue-i18n';\n\nimport { dateTimeFormats } from './dateTimeFormats';\nimport employeeI18n from '@/domains/employee/i18n';\n\nexport const i18n = createI18n({\n locale: 'nl',\n legacy: false,\n allowComposition: true,\n globalInjection: true,\n silentFallbackWarn: true,\n fallbackLocale: 'en',\n dateTimeFormats,\n messages: {\n ...employeeI18n,\n },\n});\n\nexport default i18n;\n","import axios from 'axios';\n\nconst onSuccess = (response) => response;\n\nconst onError = (error) => {\n if (error.response && (error.response.status === 419 || error.response.status === 401)) {\n window.location.href = '/login';\n\n return;\n }\n\n return Promise.reject(error);\n};\n\naxios.defaults.withCredentials = true;\naxios.defaults.headers.common['Content-Type'] = 'application/json';\naxios.defaults.headers.common.Accept = 'application/json';\naxios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\naxios.interceptors.response.use(onSuccess, onError);\n\nwindow.axios = axios;\n\nexport { axios };\n\nexport default axios;\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n }\n return selector;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\n\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\n\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
    '\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
    ' + '
    ' + '
    ' + '
    ',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
    ' + '
    ' + '

    ' + '
    ' + '
    ',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both
      and